
# WhatsApp Templates API

WhatsApp-beskedskabeloner er forudskrevne beskeder, der er godkendt til afsendelse uden for det normale 24-timers samtalevindue — for eksempel en velkomstbesked, en aftalepåmindelse eller et lille puf til genaktivering. Denne API giver dig mulighed for programmatisk at liste, oprette, redigere, indsende, kontrollere, slette og sende skabeloner.

Alle stier herunder er relative til API'ets base-URL:

```
https://api.youraiconnector.com/v1
```

Enhver anmodning skal godkendes. Se [Godkendelse](authentication.md) for de fire accepterede metoder. Eksemplerne på denne side bruger `X-API-Key`-headeren (og én forespørgselsparameter-form til cURL).

::: note
**Bemærk:** Skabeloner kører på WhatsApp Business API-kanalen, så denne del af API'en kræver både API-adgang og en plan, der inkluderer WhatsApp-kanaler. Uden disse vil anmodninger blive afvist med en `403`.
:::


---

## Arbejde med underkonti (bureauer)


---

## Godkendelsesstatusser

Da beskeder, der sendes uden for en åben samtale, først skal gennemgås af WhatsApp, har hver skabelon en godkendelses-`status`:

| Status | Betydning |
|---|---|
| `draft` | Oprettet eller gemt, men endnu ikke sendt til gennemsyn. Du kan stadig redigere den. |
| `received` | Indsendt og accepteret i køen til gennemsyn. |
| `pending` | Under gennemsyn. |
| `approved` | Godkendt til afsendelse. |
| `rejected` | Afvist. Feltet `rejection_reason` forklarer hvorfor; ret det, og indsend derefter igen. |

Kun `draft`- og `rejected`-skabeloner kan redigeres eller (gen)indsendes. Når en skabelon er `approved`, er den låst — opret en ny, hvis du har brug for ændringer.

> **Automatisk godkendelse:** Nogle kanaler kræver ikke et eksternt gennemsynstrin. Skabeloner, der oprettes eller indsendes til en kampagne på en sådan kanal, gemmes straks som `approved` uden et indholds-id (`sid`).

---

## Skabeloner på Meta-forbundne konti

Disse slutpunkter fungerer på samme måde, uanset hvilken WhatsApp-forbindelse din konto kører på, men hvad der sker bag dem, er forskelligt:

- På en **administreret WhatsApp-forbindelse** registreres skabeloner hos beskedudbyderen, og `sid` er udbyderens indholds-id (`HXXXXXXXX…`).
- På en konto, hvis nummer kører på sin **egen WhatsApp Business-konto** (begge Meta-forbindelsesmuligheder), oprettes og gennemgås skabeloner **i den pågældende WhatsApp Business-konto**, og `sid` er Metas eget skabelon-id — en numerisk streng såsom `"3394843740694756"`. `status` bruger stadig værdierne i tabellen ovenfor, og `rejection_reason` indeholder stadig Metas forklaring.

Der findes to ekstra slutpunkter til dette: et til at spørge, hvilken forbindelse du er på, og et til at afstemme din skabelonliste med din WhatsApp Business-konto. Skabeloner, der allerede findes i WhatsApp Business-kontoen, importeres til dit bibliotek ved synkroniseringen, så en `GET /whatsapp-templates` bagefter viser dem som enhver anden skabelon.

### Tjek hvilken forbindelse skabeloner kører på

`GET /whatsapp-templates/provider`

| Felt | Beskrivelse |
|---|---|
| `provider` | `twilio` når skabeloner er registreret hos den administrerede beskedudbyder, `meta` når de ligger i din egen WhatsApp Business-konto. |
| `lane` | Hvilken Meta-forbindelse der er i brug — `meta_cloud_api` (din egen Meta-app) eller `meta_embedded` (forbundet via vores Meta-app). `null` på en administreret forbindelse. |
| `waba_id` | Den WhatsApp Business-konto, som skabelonerne er oprettet i, eller `null`. |
| `templates_enabled` | `false` når Meta-forbindelsen endnu ikke er færdig (ingen WhatsApp Business-konto eller adgangstoken gemt). Oprettelse eller indsendelse af skabeloner fejler med en `400`, indtil den er det. |

**cURL**

```bash
curl "https://api.youraiconnector.com/v1/whatsapp-templates/provider?apiKey=YOUR_API_KEY"
```

**JavaScript**

```javascript
const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/provider", {
  headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
```

**Python**

```python
import requests

res = requests.get(
    "https://api.youraiconnector.com/v1/whatsapp-templates/provider",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
```

**Svar**

```json
{
  "success": true,
  "provider": "meta",
  "lane": "meta_cloud_api",
  "waba_id": "2357661648036355",
  "templates_enabled": true
}
```

### Synkroniser skabeloner fra Meta

Opdaterer godkendelsesstatus for hver skabelon, der ligger i din WhatsApp Business-konto, og importerer enhver skabelon, der findes der, men som endnu ikke er i dit bibliotek. Det er sikkert at kalde så ofte, du vil. På en administreret forbindelse er der intet at synkronisere, så kaldet gør intet og rapporterer blot, hvor mange skabeloner du har.

`POST /whatsapp-templates/meta-sync`

| Felt | Beskrivelse |
|---|---|
| `imported` | Skabeloner fundet i WhatsApp Business-kontoen, som blev tilføjet til dit bibliotek ved dette kald. |
| `updated` | Eksisterende skabeloner, hvis status eller detaljer er ændret. |
| `total` | Skabeloner i dit bibliotek efter synkroniseringen. |

**cURL**

```bash
curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/meta-sync?apiKey=YOUR_API_KEY"
```

**JavaScript**

```javascript
const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/meta-sync", {
  method: "POST",
  headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
```

**Python**

```python
import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/meta-sync",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
```

**Svar**

```json
{
  "success": true,
  "provider": "meta",
  "imported": 2,
  "updated": 5,
  "total": 12
}
```

### Kommuniker direkte med Meta (avanceret)

Hvis du har brug for noget, som slutpunkterne ovenfor ikke eksponerer — skabelonoverskrifter, sidefødder, knapper eller en fuldt manuelt opbygget skabelon — sender `/v1/meta-templates` din anmodning direkte videre til Metas egen skabelon-API uden at gemme noget i dit skabelonbibliotek. Det virker kun på konti, hvis nummer kører på deres egen WhatsApp Business-konto; på en administreret forbindelse returnerer hvert kald `400` med anmodning om først at forbinde en Meta-app.

| Slutpunkt | Hvad det gør |
|---|---|
| `GET /meta-templates` | Lister skabelonerne på din WhatsApp Business-konto med deres seneste status. Tilføj `?name=` for at filtrere til ét specifikt skabelonnavn. Returnerer `{ "success": true, "templates": [...] }`. |
| `POST /meta-templates` | Opretter en skabelon og indsender den til Meta-gennemgang i ét trin. Kræver `name`, `language` og `body` (eller et komplet `components`-array i stedet for `body`). Valgfrit: `variables` (array af strenge), `category` (`MARKETING`, `UTILITY` eller `AUTHENTICATION`), `header`, `footer`, `buttons`. Returnerer `201` med `{ "success": true, "template": {...} }`. |
| `DELETE /meta-templates/{name}` | Sletter skabelonen ud fra dens Meta-navn — **alle sprog** af den. Tilføj `?hsm_id=` med Metas skabelon-id for kun at fjerne ét sprog. Returnerer `{ "success": true, "name": "..." }`. |

En skabelon, som Meta afviser, returnerer `400` med Metas egen forklaring i `error`.

---

## List skabeloner

Returnerer alle skabeloner på din konto med et let resumé af hver enkelt.

`GET /whatsapp-templates`

**cURL**

```bash
curl "https://api.youraiconnector.com/v1/whatsapp-templates?apiKey=YOUR_API_KEY"
```

**JavaScript**

```javascript
const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates", {
  headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
```

**Python**

```python
import requests

res = requests.get(
    "https://api.youraiconnector.com/v1/whatsapp-templates",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
```

**Svar**

```json
{
  "success": true,
  "data": [
    {
      "id": "template_abc123",
      "name": "welcome_message",
      "status": "approved",
      "language": "en",
      "body": "Hi {{first_name}}, thanks for reaching out!"
    },
    {
      "id": "template_def456",
      "name": "appointment_reminder",
      "status": "pending",
      "language": "en",
      "body": "Hi {{first_name}}, this is a reminder about your appointment."
    }
  ]
}
```

---

## Hent en skabelon

Returnerer alle detaljer om en enkelt skabelon, herunder dens variabler, status og tidsstempler.

`GET /whatsapp-templates/{templateId}`

**cURL**

```bash
curl "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123" \
  -H "X-API-Key: YOUR_API_KEY"
```

**JavaScript**

```javascript
const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123",
  { headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
```

**Python**

```python
import requests

res = requests.get(
    "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
```

**Svar**

```json
{
  "success": true,
  "template": {
    "id": "template_abc123",
    "name": "welcome_message",
    "body": "Hi {{first_name}}, thanks for reaching out!",
    "language": "en",
    "variables": ["first_name"],
    "status": "approved",
    "sid": "HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "type": "general",
    "category": "marketing",
    "rejection_reason": null,
    "campaign_id": "campaign123",
    "date_created": "2026-06-01T10:00:00.000Z",
    "date_updated": "2026-06-02T08:30:00.000Z",
    "submitted_at": "2026-06-01T10:05:00.000Z",
    "approved_at": "2026-06-02T08:30:00.000Z"
  }
}
```

En skabelon, der ikke findes på din konto, returnerer `404` med `{ "success": false, "error": "Template not found" }`.

---

## Opret en skabelon

Opretter en skabelon til en kampagnes åbningsbesked og sender den til godkendelse i ét trin.

`POST /whatsapp-templates`

| Felt | Påkrævet | Beskrivelse |
|---|---|---|
| `campaign_id` | Ja | Den kampagne, som skabelonen tilhører. |
| `name` | Ja | Et navn til skabelonen. |
| `language` | Ja | Sprogkode, for eksempel `en`, `es`, `de`, `pt_BR`, `zh_CN`. |
| `body` | Ja | Beskedteksten, op til 1024 tegn. |
| `variables` | Nej | Ordnet liste over variabelnavne, der bruges i brødteksten. |

Variabel-pladsholdere kan skrives som `{{first_name}}`, `{first_name}` eller `[first_name]` — de bliver alle normaliseret til formen med dobbelte krøllede parenteser.

Resultatet afhænger af kampagnens kanaler:

- **WhatsApp Business API-kampagne:** indholdet sendes til WhatsApp-gennemgang. Svaret indeholder `campaign_status` (`received` eller `pending`) og en `template_sid`.
- **En kanal uden et eksternt gennemgangstrin:** skabelonen gemmes og godkendes automatisk (`campaign_status: "approved"`, `template_sid: null`).
- **Ingen WhatsApp-kanal på kampagnen:** intet oprettes, og `campaign_status` er `not_applicable`.

**cURL**

```bash
curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "campaign_id": "campaign123",
    "name": "welcome_message",
    "language": "en",
    "body": "Hi {{first_name}}, thanks for reaching out!",
    "variables": ["first_name"]
  }'
```

**JavaScript**

```javascript
const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    campaign_id: "campaign123",
    name: "welcome_message",
    language: "en",
    body: "Hi {{first_name}}, thanks for reaching out!",
    variables: ["first_name"],
  }),
});
const data = await res.json();
```

**Python**

```python
import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "campaign_id": "campaign123",
        "name": "welcome_message",
        "language": "en",
        "body": "Hi {{first_name}}, thanks for reaching out!",
        "variables": ["first_name"],
    },
)
data = res.json()
```

**Svar** (sendt til gennemgang)

```json
{
  "success": true,
  "campaign_status": "pending",
  "template_sid": "HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}
```

---

## Opret en selvstændig skabelon

Opretter en skabelon i dit skabelonbibliotek uden at knytte den til en kampagnes åbningsbesked. Dette er oprettelsestrinnet i den livscyklus, som resten af denne side følger: opret den her, rediger den, indsend den til gennemgang, forespørg om dens status, og slet den, når du ikke længere har brug for den.

`POST /whatsapp-templates/docs`

| Felt | Påkrævet | Beskrivelse |
|---|---|---|
| `name` | Ja | Et navn til skabelonen. |
| `language` | Ja | Sprogkode, for eksempel `en`, `es`, `de`, `pt_BR`, `zh_CN`. |
| `body` | Ja | Beskedteksten, op til 1024 tegn. |
| `variables` | Nej | Ordnet liste over variabelnavne, der bruges i brødteksten. |
| `status` | Nej | `draft` (standard) gemmer den uden at indsende; `submitted` sætter den i kø til WhatsApp-gennemgang med det samme. |
| `type` | Nej | `general` (standard) eller `smart_followup`. |
| `category` | Nej | `marketing`, `utility`, `authentication` eller `authentication-international`. |
| `campaign_id` | Nej | Knytter skabelonen til en af dine kampagner. |

> **Skabeloner til godkendelse (engangskode).** WhatsApp accepterer ikke fritekst-skabeloner til godkendelse: beskedteksten er foruddefineret af WhatsApp, og skabelonen skal indeholde en "kopiér kode"-knap. Når du opretter en skabelon med `category: "authentication"`, indsender vi den i den faste form for dig. Din `body` bevares som det eksempel, der vises i appen, men den tekst, din kontaktperson modtager, er WhatsApps egen ordlyd (koden, en sikkerhedspåmindelse og en note om, at den udløber om 10 minutter). Angiv præcis én variabel, for eksempel `["code"]`, og send koden, når du sender beskeden (se feltet `variables` under [Send en skabelon til en kontaktperson](#send-a-template-to-a-contact)). Koden skal være kortere end 15 tegn.

> **Hvilken oprettelse skal jeg bruge?** Brug denne, når du ønsker en skabelon, som du selv kan redigere og indsende. Brug `POST /whatsapp-templates` (ovenfor), når du vil indstille en kampagnes åbningsbesked — den kræver `campaign_id` og skriver direkte ind i kampagnen.

En skabelon oprettet som `submitted` sendes til WhatsApp-gennemgang i baggrunden, så tjek status-slutpunktet for resultatet i stedet for at forvente det i svaret.

**cURL**

```bash
curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/docs?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "welcome_message",
    "language": "en",
    "body": "Hi {{first_name}}, thanks for reaching out!",
    "variables": ["first_name"],
    "status": "draft",
    "category": "marketing"
  }'
```

**JavaScript**

```javascript
const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/docs", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    name: "welcome_message",
    language: "en",
    body: "Hi {{first_name}}, thanks for reaching out!",
    variables: ["first_name"],
    status: "draft",
    category: "marketing",
  }),
});
const data = await res.json();
```

**Python**

```python
import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/docs",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "name": "welcome_message",
        "language": "en",
        "body": "Hi {{first_name}}, thanks for reaching out!",
        "variables": ["first_name"],
        "status": "draft",
        "category": "marketing",
    },
)
data = res.json()
```

**Svar**

```json
{
  "success": true,
  "template_id": "template_abc123",
  "status": "draft"
}
```

En manglende `name`, `language` eller `body`, et sprog der ikke understøttes, en `status` der ikke er `draft` eller `submitted`, en ukendt `type` eller `category`, eller en brødtekst på over 1024 tegn returnerer `400` med en forklarende `error`. En `campaign_id`, der ikke er en af dine kampagner, returnerer `404`.

---

## Opdater en skabelon

Redigerer en skabelon, der endnu ikke er blevet godkendt. Kun skabeloner med status `draft` eller `rejected` kan redigeres. Angiv en vilkårlig kombination af `name`, `body`, `language` og `variables` — kun de felter, du sender, bliver ændret.

`PUT /whatsapp-templates/{templateId}`

> Redigering sender **ikke** skabelonen til gennemgang igen. Brug submit-endepunktet bagefter.

**cURL**

```bash
curl -X PUT "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "body": "Hi {{first_name}}, here is an update for you.",
    "variables": ["first_name"]
  }'
```

**JavaScript**

```javascript
const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123",
  {
    method: "PUT",
    headers: {
      "X-API-Key": "YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      body: "Hi {{first_name}}, here is an update for you.",
      variables: ["first_name"],
    }),
  }
);
const data = await res.json();
```

**Python**

```python
import requests

res = requests.put(
    "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "body": "Hi {{first_name}}, here is an update for you.",
        "variables": ["first_name"],
    },
)
data = res.json()
```

**Svar**

```json
{
  "success": true,
  "template_id": "template_abc123"
}
```

Forsøg på at redigere en skabelon, der allerede er `approved` (eller på anden måde ikke kan redigeres), afsendelse af tomme felter eller afsendelse af en ugyldig værdi returnerer `400` med en forklarende `error`.

---

## Indsend en skabelon til godkendelse

Indsender en `draft`- eller `rejected`-skabelon til gennemgang. Skabeloner på en kanal, der ikke kræver ekstern gennemgang, godkendes med det samme; alle andre sendes til WhatsApp, og den returnerede `status` (typisk `received` eller `pending`) gemmes på skabelonen.

`POST /whatsapp-templates/{templateId}/submit`

> **Opfølgningsskabeloner** skal deklarere og bruge deres påkrævede variabler, før de kan indsendes: en pladsholder til fornavn samt en pladsholder til personlig kontekst for smarte opfølgninger.

**cURL**

```bash
curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/submit" \
  -H "X-API-Key: YOUR_API_KEY"
```

**JavaScript**

```javascript
const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/submit",
  { method: "POST", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
```

**Python**

```python
import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/submit",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
```

**Svar**

```json
{
  "success": true,
  "template_id": "template_abc123",
  "status": "pending",
  "sid": "HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}
```

---

## Tjek godkendelsesstatus

Et letvægts-endepunkt til polling af en skabelons aktuelle status. Status læses fra den gemte post, som opdateres periodisk i baggrunden, så en meget nylig godkendelse eller afvisning kan tage et kort øjeblik om at blive vist.

`GET /whatsapp-templates/{templateId}/status`

**cURL**

```bash
curl "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/status" \
  -H "X-API-Key: YOUR_API_KEY"
```

**JavaScript**

```javascript
const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/status",
  { headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
```

**Python**

```python
import requests

res = requests.get(
    "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/status",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
```

**Svar**

```json
{
  "success": true,
  "template_id": "template_abc123",
  "name": "welcome_message",
  "status": "approved",
  "sid": "HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "rejection_reason": null,
  "date_updated": "2026-06-02T08:30:00.000Z"
}
```

---

## Slet en skabelon

Fjerner skabelonposten fra din konto.

`DELETE /whatsapp-templates/{templateId}`

::: warning
**Vigtigt:** Ved en administreret forbindelse fjernes kun den gemte post – indhold, som WhatsApp allerede har godkendt, kan forblive registreret hos beskedudbyderen. På en konto, der kører på sin egen WhatsApp Business-konto, slettes skabelonen også fra den konto. Uanset hvad, hvis en kampagne stadig bruger denne skabelon, skal du omdirigere kampagnen til en anden skabelon, **før** du sletter, ellers vil afsendelser, der er afhængige af den, fejle.
:::


**cURL**

```bash
curl -X DELETE "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123" \
  -H "X-API-Key: YOUR_API_KEY"
```

**JavaScript**

```javascript
const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123",
  { method: "DELETE", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
```

**Python**

```python
import requests

res = requests.delete(
    "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
```

**Svar**

```json
{
  "success": true,
  "template_id": "template_abc123",
  "note": "The template record was removed from your account. Content already approved by WhatsApp may remain registered with the messaging provider."
}
```

---

## Send en skabelon til en kontakt

Sender en godkendt skabelon til en kontakt, selv når der ikke er nogen åben samtale — dette genåbner chatsessionen. Du kan målrette kontakten via `contactId` eller via `phoneNumber`, og vælge skabelonen via `whatsappTemplateId` eller via `templateName`.

`POST /whatsapp-templates/send`

| Felt | Påkrævet | Beskrivelse |
|---|---|---|
| `contactId` | En af disse to | Kontaktpersonens ID. |
| `phoneNumber` | En af disse to | Kontaktpersonens telefonnummer (med landekode, ingen mellemrum). Slås op eller oprettes efter behov. |
| `whatsappTemplateId` | En af disse to | Skabelonens ID. |
| `templateName` | En af disse to | Skabelonens navn, som det vises i appen. |
| `firstName` | Nej | Bruges til at udfylde en nyoprettet kontaktperson. |
| `lastName` | Nej | Bruges til at udfylde en nyoprettet kontaktperson. |
| `email` | Nej | Bruges til at udfylde en nyoprettet kontaktperson. |
| `variables` | Nej | Eksplicitte værdier for skabelonens variabler, angivet efter variabelnavn, for eksempel `{ "code": "482913" }`. En værdi angivet her har forrang over kontaktpersonens felter for den pågældende variabel; variabler, du udelader, udfyldes stadig fra kontaktpersonen som beskrevet nedenfor. Dette er måden, du sender en engangskode til en godkendelsesskabelon på. |

Skabelonens brødtekst understøtter avanceret variabel-substitution:

- **Grundlæggende variabler:** `{{first_name}}`, `{{email}}`, `{{company}}`
- **Standardværdier:** `{{first_name|there}}` viser `there`, hvis feltet er tomt
- **Transformationer:** `{{company|uppercase}}`, `{{name|lowercase}}`, `{{name|capitalize}}`
- **Kombineret:** `{{company|Your Company|uppercase}}`

> **Kreditter:** Afsendelse af en skabelon forbruger kreditter. Den nøjagtige pris afhænger af modtagerens land og skabelonens kategori.

**cURL**

```bash
curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/send?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contactId": "contact123",
    "whatsappTemplateId": "template_abc123"
  }'
```

**JavaScript**

```javascript
const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/send", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    contactId: "contact123",
    whatsappTemplateId: "template_abc123",
  }),
});
const data = await res.json();
```

**Python**

```python
import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/send",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "contactId": "contact123",
        "whatsappTemplateId": "template_abc123",
    },
)
data = res.json()
```

**Svar**

```json
{
  "success": true,
  "data": "WhatsApp template message sent successfully"
}
```

En anmodning, der mangler både en kontaktidentifikator og begge skabelonidentifikatorer, returnerer `400`. Hvis din konto mangler de besked-legitimationsoplysninger, der kræves for at sende, er svaret `403`.

---

## Opret eller opdater en kampagnes live-skabelon

Et andet par slutpunkter til en kampagnes åbningsskabelon, afgrænset af sti i stedet for af en `campaign_id` i brødteksten. Disse skal bruges til en kampagne, der allerede er live: i modsætning til [Opret en skabelon](#create-a-template) ovenfor, genindsender opdatering her også kampagnens opfølgningskladder til gennemsyn, så åbningsskabelonen og dens opfølgninger forbliver synkroniserede.

`POST /whatsapp-templates/campaign/{campaignId}` opretter kampagnens åbningsskabelon. `PUT /whatsapp-templates/campaign/{campaignId}` redigerer den — kampagnen skal allerede have en skabelon, ellers returneres `400`.

| Felt | Påkrævet | Beskrivelse |
|---|---|---|
| `name` | Ja | Et navn til skabelonen. |
| `language` | Ja | Sprogkode, for eksempel `en`, `es`, `de`, `pt_BR`, `zh_CN`. |
| `body` | Ja | Beskedteksten, op til 1024 tegn. |
| `variables` | Ja | Sorteret liste over variabelnavne brugt i brødteksten. Send et tomt array, hvis skabelonen ikke bruger nogen. |

**cURL** (opret)

```bash
curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/campaign/campaign123?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "welcome_message",
    "language": "en",
    "body": "Hi {{first_name}}, thanks for reaching out!",
    "variables": ["first_name"]
  }'
```

**JavaScript**

```javascript
const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/campaign/campaign123", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    name: "welcome_message",
    language: "en",
    body: "Hi {{first_name}}, thanks for reaching out!",
    variables: ["first_name"],
  }),
});
const data = await res.json();
```

**Python**

```python
import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/campaign/campaign123",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "name": "welcome_message",
        "language": "en",
        "body": "Hi {{first_name}}, thanks for reaching out!",
        "variables": ["first_name"],
    },
)
data = res.json()
```

**Svar**

```json
{
  "success": true,
  "campaign_status": "pending",
  "template_sid": "HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "message": "WhatsApp template created and campaign updated successfully."
}
```

For at redigere skal du skifte metoden til `PUT` og bruge de samme felter — dette genindsender åbningsskabelonen (og kampagnens opfølgningskladder på en WhatsApp API-kampagne) til gennemsyn.

En kampagne, der ikke tilhører din konto, returnerer `404`; en kampagne, der tilhører en anden konto, du ikke har tilladelse til, returnerer `403`. Redigering af en kampagne uden en eksisterende skabelon returnerer `400`.

---

## Send en skabelon til en eksisterende kontakt

Et enklere, sti-afgrænset alternativ til [Send en skabelon til en kontakt](#send-a-template-to-a-contact) ovenfor: både skabelonen og kontakten skal allerede eksistere — intet bliver slået op efter navn eller oprettet på stedet.

`POST /whatsapp-templates/{templateId}/send-to-contact`

| Felt | Påkrævet | Beskrivelse |
|---|---|---|
| `contactId` | Ja | Kontaktens ID. Skal tilhøre din konto. |

**cURL**

```bash
curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/send-to-contact?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "contactId": "contact123" }'
```

**JavaScript**

```javascript
const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/send-to-contact",
  {
    method: "POST",
    headers: {
      "X-API-Key": "YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ contactId: "contact123" }),
  }
);
const data = await res.json();
```

**Python**

```python
import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/send-to-contact",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"contactId": "contact123"},
)
data = res.json()
```

**Svar**

```json
{
  "success": true,
  "data": "WhatsApp template message sent successfully"
}
```

> **Kreditter:** Afsendelse forbruger kreditter, prissat på samme måde som slutpunktet ovenfor. En `contactId`, der mangler eller ikke er på din konto, returnerer `403`; en `templateId`, der ikke eksisterer, returnerer `404`.

---

## Masseafsendelse af en skabelon

Send én skabelon til mange kontakter i et enkelt kald, med et prisoverslag, som du kan vise, før du bekræfter.

### Estimer prisen først

Returnerer hvad afsendelse vil koste, opdelt efter destinationsland, uden at sende noget eller bruge kreditter. Skabelonpriser er pr. destinationsland, så dette skal beregnes på serversiden mod de faktiske kontakter i stedet for at blive estimeret på klientsiden.

`POST /whatsapp-templates/{templateId}/estimate-bulk-cost`

| Felt | Påkrævet | Beskrivelse |
|---|---|---|
| `contactIds` | Ja | Kontakter der skal prissættes, op til 500 pr. kald. Dubletter tælles én gang. |

**cURL**

```bash
curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/estimate-bulk-cost?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "contactIds": ["contact123", "contact456"] }'
```

**JavaScript**

```javascript
const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/estimate-bulk-cost",
  {
    method: "POST",
    headers: {
      "X-API-Key": "YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ contactIds: ["contact123", "contact456"] }),
  }
);
const data = await res.json();
```

**Python**

```python
import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/estimate-bulk-cost",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"contactIds": ["contact123", "contact456"]},
)
data = res.json()
```

**Svar**

```json
{
  "success": true,
  "data": {
    "countries": [
      {
        "countryCode": "1",
        "name": "United States",
        "iso": "US",
        "flag": "🇺🇸",
        "contactCount": 120,
        "costPerContact": 0.5,
        "subtotal": 60.0
      }
    ],
    "totalContacts": 120,
    "totalTemplateCost": 60.0,
    "templateCategory": "marketing",
    "skippedContacts": 2
  }
}
```

`skippedContacts` tæller id'er, der manglede, ikke var dine, eller ikke havde et telefonnummer — estimatet dækker kun resten, så en værdi, der ikke er nul, betyder, at den faktiske afsendelse vil nå færre kontakter, end du valgte.

### Send batchet

Sender skabelonen til hver kontakt på listen, løser eventuelle smarte variabler pr. kontakt og trækker kreditter pr. afsendelse.

`POST /whatsapp-templates/{templateId}/bulk-send`

| Felt | Påkrævet | Beskrivelse |
|---|---|---|
| `contactIds` | Ja | Kontakter der skal sendes til, op til 5000 pr. kald. |

**cURL**

```bash
curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/bulk-send?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "contactIds": ["contact123", "contact456"] }'
```

**JavaScript**

```javascript
const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/bulk-send",
  {
    method: "POST",
    headers: {
      "X-API-Key": "YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ contactIds: ["contact123", "contact456"] }),
  }
);
const data = await res.json();
```

**Python**

```python
import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/bulk-send",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"contactIds": ["contact123", "contact456"]},
)
data = res.json()
```

**Svar**

```json
{
  "success": true,
  "data": { "sent": 118, "failed": 2, "total": 120 }
}
```

En kontakt, der fejler (ikke fundet, ikke på din konto, eller en afsendelsesfejl), springes over og tælles i `failed` i stedet for at stoppe batchet. Et tomt `contactIds`, mere end 5000 id'er ved en afsendelse (500 ved et estimat), eller et manglende `templateId` returnerer `400`.

---

## Forsøg en fejlet besked igen

To slutpunkter til genafsendelse af en besked, der fejlede, uden at oprette en ny beskedpost eller bruge kreditter igen.

`POST /whatsapp-templates/messages/{contactId}/{messageId}/retry-template` forsøger specifikt en fejlet skabelonbesked igen — den løser skabelonindholdet fra kampagnen igen, hvis den fejlede besked ikke allerede indeholder det. Kun beskeder med status `failed` og type `template` kan forsøges igen på denne måde.

`POST /whatsapp-templates/messages/{contactId}/{messageId}/retry` er kanal-agnostisk og fungerer til enhver fejlet ikke-skabelonbesked (f.eks. WhatsApp Web), og sender den til den rigtige afsendelsesvej baseret på beskedens kanal. Den accepterer status `failed`, `failed_connection`, `limit_exceeded` eller `queued_retry`.

Ingen af slutpunkterne tager en anmodningskrop.

**cURL**

```bash
curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/messages/contact123/msg_abc789/retry-template?apiKey=YOUR_API_KEY"
```

**JavaScript**

```javascript
const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/messages/contact123/msg_abc789/retry-template",
  { method: "POST", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
```

**Python**

```python
import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/messages/contact123/msg_abc789/retry-template",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
```

**Svar**

```json
{
  "success": true,
  "data": "Message retry initiated successfully"
}
```

For den kanal-agnostiske version skal du skifte stien til `.../msg_abc789/retry`. En besked, hvis status ikke er berettiget til et nyt forsøg, eller (på skabelonslutpunktet) som ikke er en skabelonbesked, returnerer `400`. En manglende kontakt eller besked returnerer `404`.

---

## WhatsApp Business-profil

Administrer den WhatsApp Business-profil (om, adresse, beskrivelse, e-mail, websteder, virksomhedskategori og logo), der vises for kontakter på WhatsApp. Fungerer både på en administreret forbindelse og en konto, der kører sin egen WhatsApp Business-konto.

### Gem profilen

`PUT /whatsapp-templates/profile`

| Felt | Påkrævet | Beskrivelse |
|---|---|---|
| `phoneNumber` | Ja | Det WhatsApp-nummer, som denne profil tilhører. Skal være forbundet til din konto. |
| `about` | Nej | Kort "Om"-tekst, der vises på profilen. |
| `address` | Nej | Virksomhedsadresse. |
| `description` | Nej | Længere virksomhedsbeskrivelse. |
| `email` | Nej | Kontakt-e-mail, der vises på profilen. |
| `websites` | Nej | Array af websteds-URL'er. Hver skal være en gyldig URL. |
| `vertical` | Nej | Virksomhedskategori, for eksempel `Retail` eller `Professional Services`. |
| `profilePictureHandle` | Nej | Det håndtag, der returneres af billed-upload-slutpunktet nedenfor, for at indstille profilbilledet. |

**cURL**

```bash
curl -X PUT "https://api.youraiconnector.com/v1/whatsapp-templates/profile?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "phoneNumber": "+31612345678",
    "about": "We reply within a few hours",
    "email": "support@example.com",
    "websites": ["https://example.com"]
  }'
```

**JavaScript**

```javascript
const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/profile", {
  method: "PUT",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    phoneNumber: "+31612345678",
    about: "We reply within a few hours",
    email: "support@example.com",
    websites: ["https://example.com"],
  }),
});
const data = await res.json();
```

**Python**

```python
import requests

res = requests.put(
    "https://api.youraiconnector.com/v1/whatsapp-templates/profile",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "phoneNumber": "+31612345678",
        "about": "We reply within a few hours",
        "email": "support@example.com",
        "websites": ["https://example.com"],
    },
)
data = res.json()
```

**Svar**

```json
{
  "success": true,
  "data": "WhatsApp Business profile updated successfully"
}
```

Et manglende `phoneNumber`, en ugyldig websteds-URL eller et `phoneNumber`, der ikke er forbundet til din konto, returnerer `400` eller `404`.

### Upload et profilbillede

Downloader et billede fra en URL, du angiver, og uploader det til WhatsApp, hvorefter et håndtag returneres. Send dette håndtag som `profilePictureHandle` i kaldet til at gemme profilen ovenfor for at indstille det som foto – dette slutpunkt uploader kun billedet, det indstiller det ikke af sig selv.

`POST /whatsapp-templates/profile/picture`

| Felt | Påkrævet | Beskrivelse |
|---|---|---|
| `phoneNumber` | Ja | Det WhatsApp-nummer, som denne profil tilhører. |
| `fileUrl` | Ja | En offentligt tilgængelig URL til billedet, der skal uploades. |

**cURL**

```bash
curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/profile/picture?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "phoneNumber": "+31612345678",
    "fileUrl": "https://example.com/logo.png"
  }'
```

**JavaScript**

```javascript
const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/profile/picture", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    phoneNumber: "+31612345678",
    fileUrl: "https://example.com/logo.png",
  }),
});
const data = await res.json();
```

**Python**

```python
import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/whatsapp-templates/profile/picture",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "phoneNumber": "+31612345678",
        "fileUrl": "https://example.com/logo.png",
    },
)
data = res.json()
```

**Svar**

```json
{
  "success": true,
  "data": "1234567890123456"
}
```

`data` er det uploadede billedes håndtag. Et manglende `phoneNumber` eller `fileUrl`, eller et `phoneNumber` uden et WhatsApp-adgangstoken i arkivet, returnerer `400`; en utilgængelig eller ugyldig `fileUrl` returnerer en fejl, der beskriver, hvorfor downloadet mislykkedes.

---

## Tjek en afsenders status

Poller (og opdaterer) et forbundet WhatsApp-nummers live-afsendelsesstatus hos beskedudbyderen. Nyttigt til at bekræfte, at et nummer faktisk er i stand til at sende, før du stoler på det.

`GET /whatsapp-templates/sender-status/{phoneNumber}`

**cURL**

```bash
curl "https://api.youraiconnector.com/v1/whatsapp-templates/sender-status/+31612345678" \
  -H "X-API-Key: YOUR_API_KEY"
```

**JavaScript**

```javascript
const res = await fetch(
  "https://api.youraiconnector.com/v1/whatsapp-templates/sender-status/+31612345678",
  { headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
```

**Python**

```python
import requests

res = requests.get(
    "https://api.youraiconnector.com/v1/whatsapp-templates/sender-status/+31612345678",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
```

**Svar**

```json
{
  "success": true,
  "data": "ONLINE"
}
```

`data` er en af `ONLINE` (sender normalt), `PENDING` (bliver stadig verificeret) eller `DELETED` (udbyderen genkender ikke længere denne afsender – genforbind nummeret). Et `phoneNumber` uden WhatsApp-virksomhedsoplysninger i arkivet returnerer `404`.

---

## Generer opfølgningsskabeloner med AI

Platformen kan skrive en kampagnes WhatsApp-opfølgningsskabeloner for dig — de påmindelser, der sendes, når en samtale går i stå — ud fra kampagnens egne instruktioner og mål. Der er ét job-endepunkt, der kører i baggrunden, plus tre ældre endepunkter, der bevares til eksisterende integrationer. De bruger alle AI-kreditter.

### Start et genereringsjob

`POST /campaigns/{campaignId}/template-generation`

| Felt | Påkrævet | Beskrivelse |
|---|---|---|
| `type` | Nej | `all` (standard) skriver hele opfølgningssættet. `cold_only` skriver kun beskederne til kontakter, der aldrig svarede. |

**cURL**

```bash
curl -X POST "https://api.youraiconnector.com/v1/campaigns/campaign_abc123/template-generation?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "type": "all" }'
```

**JavaScript**

```javascript
const res = await fetch(
  "https://api.youraiconnector.com/v1/campaigns/campaign_abc123/template-generation",
  {
    method: "POST",
    headers: {
      "X-API-Key": "YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ type: "all" }),
  }
);
const data = await res.json();
```

**Python**

```python
import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/campaigns/campaign_abc123/template-generation",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"type": "all"},
)
data = res.json()
```

**Respons** (`202`)

```json
{ "success": true, "campaign_id": "campaign_abc123", "type": "all" }
```

Kaldet returnerer, så snart jobbet er sat i kø. Læs kampagnen (`GET /campaigns/{campaignId}`, se [Campaigns API](campaigns.md)) og hold øje med dens `template_generation_status`-objekt, indtil det er færdigt:

| Felt | Beskrivelse |
|---|---|
| `status` | `processing` mens jobbet kører, derefter `completed` eller `failed`. |
| `progress` | 0 til 100. |
| `current_template`, `total_templates` | Hvor mange skabeloner der er skrevet indtil videre, ud af hvor mange jobbet vil skrive — 11 for en udgående eller kombineret kampagne, 9 ellers. |
| `error` | Hvorfor et `failed`-job stoppede, for eksempel ikke nok kreditter. |
| `started_at`, `completed_at` | Hvornår jobbet startede og sluttede. |

De genererede skabeloner lander på kampagnen som alle andre, så de vises i [List templates](#list-templates) og skal stadig gennem WhatsApp-godkendelse, før de kan sendes. En `400` betyder, at `type` var noget andet end `all` eller `cold_only`; en `404` betyder, at kampagnen ikke eksisterer eller tilhører en anden konto.

Agenter har en tvilling af dette kald, `POST /agents/{agentId}/template-generation`, som skriver opfølgningerne for en agent og afsluttes under selve kaldet i det normale tilfælde — se [Generate follow-up messages](agents.md#generate-follow-up-messages) i AI Agents API'et.

### De ældre genererings-endepunkter

Tre tidligere endepunkter udfører det samme arbejde og bevares, så eksisterende integrationer fortsat kan køre. Ny kode bør bruge job-endepunktet ovenfor.

| Endepunkt | Hvad det gør |
|---|---|
| `POST /whatsapp-templates/campaign/{campaignId}/generate-async` | Starter opfølgningsgenerering for kampagnen i baggrunden og returnerer `202` med `{ "success": true, "data": { "result": "success", "message": "..." } }`. Kreditter trækkes på forhånd (springes over på en konto, der medbringer sin egen AI-nøgle), og kampagnens `template_generation_status` rapporterer status præcis som ovenfor. |
| `POST /whatsapp-templates/campaign/{campaignId}/generate-followups` | Genererer alle ni opfølgningsskabeloner under kaldet — til en kampagne oprettet før automatiske opfølgninger eksisterede, eller en der skal have dem skrevet igen — og returnerer `200` med `templatesGenerated` inde i `data`. |
| `POST /whatsapp-templates/agent/{agentId}/generate-followups` | Den samme synkrone generering adresseret af Agent. Svaret tilføjer `agent_id`, `campaign_id` og `target`: `"campaign"` når skabelonerne blev skrevet på agentens kampagne, `"agent"` (med `campaign_id: null`) når agenten ikke har nogen kampagne, og de blev gemt på selve agenten. En manglende eller fremmed agent er en `404`. |

Alle tre kræver automatiske opfølgninger på kontoen og nok kreditter — en `400` angiver hvilken der mangler — og parret adresseret til kampagnen returnerer `403`, når kampagnen tilhører en anden konto.

---

## Skabelon-API-fejl

Skabelon-slutpunkter returnerer standardfejlkuverten:

```json
{
  "success": false,
  "error": "Template not found"
}
```

En `404` på disse slutpunkter betyder normalt, at ressourcen ikke blev fundet — enten eksisterer den ikke, eller også tilhører den en anden konto. Et par slutpunkter (oprettelse/opdatering med kampagne-scope og afsendelser til en eksisterende kontakt) returnerer i stedet `403`, når kampagnen eller kontakten tilhører en anden person frem for slet ikke at eksistere. Nogle slutpunkter inkluderer også et `error_code`-felt, der afspejler HTTP-statuskoden. De delte koder, som alle slutpunkter kan returnere — `400`, `401`, `403` (din plan inkluderer ikke API-adgang), `429` (rate limit) og `500` — er angivet med vejledning om genforsøg i [Fejl & Sidetal](errors-and-pagination.md).

---

## Næste skridt

- [Godkendelse](authentication.md) — de fire måder at godkende en anmodning på.
- [Fejl og hastighedsbegrænsninger](errors-and-pagination.md) — statuskoder og grænsen på 300 anmodninger/min.
- [Kampagne-API](campaigns.md) — administrer de kampagner, som skabeloner er tilknyttet.
