
# API-adgang

En API (Application Programming Interface) er en måde for forskellige softwaresystemer at tale sammen på. <span data-t="appName">Your AI Connector</span> API'en lader dig (eller din udvikler) automatisk oprette kontakter, sende beskeder, administrere lister og modtage indgående beskeder fra brugerdefinerede kanaler — alt sammen uden at bruge kontrolpanelet.


**Hvorfor bruge API'en?** Hvis du vil forbinde appen til et værktøj, der ikke har en indbygget integration, eller hvis du har brug for at automatisere gentagne opgaver i stor skala, er API'en vejen frem.

::: note
**Bemærk:** Denne side er af mere teknisk karakter. Hvis du er virksomhedsejer og ikke udvikler, kan det være en god idé at dele denne side med dit tekniske team eller en freelance-udvikler.
:::


---

## Generering af din API-nøgle

::: note
**Bemærk:** API-adgang er en betalt funktion, der er tilgængelig på kvalificerede abonnementer. Hvis dit abonnement ikke inkluderer det, vil API-anmodninger blive afvist med en `403`-svarkode. Tjek dit abonnement eller kontakt support, hvis du er i tvivl om, hvorvidt API-adgang er aktiveret.
:::


1. Klik på **Indstillinger** (tandhjulsikonet) i venstre sidepanel.
2. I sidepanelet Indstillinger, under gruppen **Integrationer**, skal du klikke på **API-nøgle**.


3. Hvis du endnu ikke har en nøgle, skal du klikke på **Generer API-nøgle**.
4. Hvis du allerede har en, vises den maskeret under **Din nøgle**. Hvis din nøgle understøtter det, skal du klikke på **Vis** for at afsløre den, og derefter **Kopiér** for at kopiere den — du vil se en bekræftelsesmeddelelse.
5. Gem nøglen et sikkert sted — du får brug for den til hver API-anmodning.


::: note
**Bemærk:** Nogle konti ser "Din nøgle kan ikke vises" i stedet for en Vis/Kopiér-kontrol — dette sker for nøgler oprettet, før appen kunne vise dem igen. Nøglen virker stadig normalt; du behøver kun **Regenerer** (under nøglekortet, i samme sektion), hvis du rent faktisk har brug for at se klarteksten igen. Regenerering gør den gamle nøgle ugyldig med det samme og afbryder enhver integration, der bruger den, indtil du indsætter den nye — opdater dine integrationer umiddelbart efter.
:::


::: warning
**Vigtigt:** Din API-nøgle er som en adgangskode — den giver fuld adgang til din konto. Del den ikke offentligt, og post den ikke et sted, hvor andre kan se den. Hvis du mener, at din nøgle er blevet kompromitteret, skal du regenerere den med det samme.
:::


> **Teammedlemmer:** API-nøglen tilhører kontoejeren, så hvis du er logget ind som et inviteret teammedlem (inklusive en administrator), viser sektionen en note i stedet for nøglen. Log ind som kontoejer for at se, kopiere eller gendanne den — dette gælder også for scoped-nøgler.

> **Hvor finder du den:** **API-nøgle** er sin egen sektion under Indstillinger → Integrationer, adskilt fra **Webhooks**. Hvis en vejledning eller en kollega beder dig om at kigge under "Webhooks" efter nøglen, skal du i stedet kigge i sektionen ved siden af.

---

## Basis-URL

Alle API-anmodninger bruger følgende webadresse som basis:

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

---

## Godkendelse

Hver anmodning skal indeholde din API-nøgle, så platformen ved, at det er dig. Den enkleste måde er at tilføje den til slutningen af webadressen:

```
https://api.youraiconnector.com/v1/contacts?apiKey=YOUR_API_KEY
```

Du kan også sende nøglen som et anmodningshoved i stedet for i URL'en (anbefales til produktion, så nøglen ikke ender i serverlogfiler):

```
X-API-Key: YOUR_API_KEY
```
```
Authorization: Bearer YOUR_API_KEY
```

Alle anmodninger skal bruge en sikker forbindelse (HTTPS). Usikre (HTTP) anmodninger afvises.

> **Leder du efter de fulde udviklervejledninger?** Denne side er en hurtig introduktion, der dækker de mest almindelige handlinger. For komplette, trinvise vejledninger — alle ressourcer, med cURL-, JavaScript- og Python-eksempler — se [Kom godt i gang med API'en](../api/getting-started.md) og [API-referencen](../api/reference.md).

---

## Almindelige API-handlinger

### Opret en kontakt

**Anmodning:**

```http
POST https://api.youraiconnector.com/v1/contacts?apiKey=YOUR_API_KEY
Content-Type: application/json

{
  "firstName": "Jane",
  "lastName": "Smith",
  "phoneNumber": "+15551234567",
  "email": "jane@example.com"
}
```

**Påkrævede felter:** et `phoneNumber` (med landekode) er altid påkrævet for at oprette en kontakt. En e-mailadresse alene er ikke nok — en anmodning uden et gyldigt telefonnummer afvises. E-mailen er valgfri.

**Svar:**

```json
{
  "success": true,
  "data": {
    "message": "Successfully created new contact",
    "contactId": "abc123xyz",
    "listsAdded": []
  }
}
```

Gem `data.contactId` — du skal bruge det til "Tilføj en kontakt til en liste"-kaldet.

::: note
**Bemærk:** Hvis en kontakt med det samme telefonnummer allerede eksisterer, opretter eller returnerer API'en ikke den kontakt — den returnerer `{ "success": false, "error_code": 409 }`. Slå den eksisterende kontakt op først med `GET https://api.youraiconnector.com/v1/contacts?phoneNumber=...`.
:::


---

### Tilføj en kontakt til en liste

```http
POST https://api.youraiconnector.com/v1/contacts/lists?apiKey=YOUR_API_KEY
Content-Type: application/json

{
  "contactId": "abc123xyz",
  "listId": "YOUR_LIST_ID"
}
```

Find en listes ID i appen under **Kontakter → Lister** via listens rækkemenu (**Kopiér liste-ID**).

---

### Opdater en kontakt

```http
PUT https://api.youraiconnector.com/v1/contacts/YOUR_CONTACT_ID?apiKey=YOUR_API_KEY
Content-Type: application/json

{
  "customFields": { "company": "Acme Inc" }
}
```

Kun de felter, du inkluderer, ændres. Dette er også måden at masseindlæse værdier for brugerdefinerede felter efter en import — se [Brugerdefinerede felter, kundeemneprofil & noter](../get-started/custom-contact-fields.md#bulk-loading-custom-fields). Fuldstændige detaljer findes i [Kontakt-API'en](../api/contacts.md).

---

### Send en besked (Brugerdefineret kanal)

```http
POST https://api.youraiconnector.com/v1/send_custom_channel_message?apiKey=YOUR_API_KEY
Content-Type: application/json

{
  "customData": {
    "fromId": "external-contact-id",
    "customChannel": "my-channel",
    "body": "Hello Jane! Your order has been shipped.",
    "campaignId": "optional-campaign-id",
    "firstName": "Jane",
    "lastName": "Smith"
  }
}
```

| Felt | Påkrævet | Beskrivelse |
|---|---|---|
| `customData.fromId` | Ja | Kontaktens ID på din platform |
| `customData.customChannel` | Ja | Navnet på din brugerdefinerede kanal |
| `customData.body` | Ja | Beskedteksten der skal sendes |
| `customData.campaignId` | Nej | Send beskeden til en specifik kampagne |
| `customData.firstName` | Nej | Kontaktens fornavn (bruges ved oprettelse af en ny kontakt) |
| `customData.lastName` | Nej | Kontaktens efternavn |
| `customData.email` | Nej | Kontaktens e-mailadresse |

::: note
**Bemærk:** Dette slutpunkt er til beskeder via brugerdefinerede kanaler. For WhatsApp, SMS, Instagram og Messenger sendes beskeder via Broadcasts, Kampagner og AI-agenter.
:::


---

### Modtag indgående beskeder (Brugerdefineret kanal)

Modtag beskeder fra eksterne systemer som en brugerdefineret kanal. Det er sådan, integrationer som GoHighLevel sender beskeder ind i <span data-t="appName">Your AI Connector</span>. Se [Brugerdefinerede kanaler](../messaging-channels/custom-channels.md) for alle detaljer.

```http
POST https://api.youraiconnector.com/v1/incoming_custom_channel_message?apiKey=YOUR_API_KEY
Content-Type: application/json

{
  "customData": {
    "messageSid": "unique-message-id",
    "fromId": "external-contact-id",
    "toId": "your-user-id",
    "body": "Customer's message here",
    "channel": "custom",
    "status": "received"
  },
  "messageType": "text"
}
```

| Felt | Påkrævet | Beskrivelse |
|---|---|---|
| `customData.messageSid` | Ja | Et unikt ID for denne besked (forhindrer dubletter). Du kan også bruge `customData.id`. |
| `customData.fromId` | Ja | Afsenderens ID i dit eksterne system. |
| `customData.toId` | Ja | Din virksomheds-id. |
| `customData.body` | Ja | Beskedteksten. |
| `customData.channel` | Nej | En etiket for kilden (f.eks. `"email"`, `"livechat"`, `"custom"`). |
| `customData.status` | Nej | Beskedstatus. Standard er `"received"`. |
| `messageType` | Nej | `"text"` for tekstbeskeder, `"reaction"` for emoji-reaktioner. |

---

## Oversigt over tilgængelige handlinger

| Handling | Metode | Adresse | Beskrivelse |
|---|---|---|---|
| Opret en kontakt | `POST` | `/contacts` | Tilføj en ny kontakt til din konto |
| Hent kontaktoplysninger | `GET` | `/contacts?phoneNumber=X` eller `/contacts?email=X` | Slå en kontakt op via telefonnummer eller e-mail |
| Opdater en kontakt | `PUT` | `/contacts/{contactId}` | Opdater ethvert felt på en eksisterende kontakt |
| Tilføj kontakt til liste | `POST` | `/contacts/lists` | Tilføj en eksisterende kontakt til en specifik liste |
| Send en besked | `POST` | `/send_custom_channel_message` | Send en besked via en brugerdefineret kanal |
| Modtag en besked | `POST` | `/incoming_custom_channel_message` | Acceptér en besked fra et eksternt system |

---

## Hastighedsbegrænsning (Rate Limiting)

The API enforces rate limits to ensure platform stability. Exceeding your limit returns `429 Too Many Requests` — back off and retry after the time indicated in the response headers. For high-volume use cases (bulk imports), use the built-in [import feature](../get-started/importing-contacts.md) or email [<span data-t="supportEmail">hi@youraiconnector.com</span>](mailto:hi@youraiconnector.com) for guidance.

---

## Bedste praksis

- **Opbevar din API-nøgle sikkert** — brug en adgangskodeadministrator eller konfiguration på serversiden, aldrig klient-side kode, som en browserbruger kan læse.
- **Inkluder altid landekoden** i telefonnumre (`+1` for USA, `+44` for Storbritannien, `+31` for Holland).
- **Håndter fejl elegant** — tjek statuskoder og læs eventuelle fejlmeddelelser, der returneres.
- **Håndter dubletter** — et duplikeret telefonnummer returnerer `{ "success": false, "error_code": 409 }` i stedet for en ny kontakt. Slå kontakten op først, hvis du har brug for at arbejde med den.
- **Test med et lille datasæt**, før du kører masseoperationer.

---

## Fejlbeskeder

```json
{
  "error": {
    "code": "INVALID_PHONE",
    "message": "Phone number must include a valid country code."
  }
}
```

| Status Code | Meaning |
|---|---|
| `200` | Success |
| `201` | Resource created |
| `400` | Bad request — check your parameters |
| `401` | Unauthorized — invalid or missing API key |
| `403` | Forbidden — your plan doesn't include API access, or you lack permission |
| `404` | Resource not found |
| `429` | Rate limit exceeded |
| `500` | Server error — email [<span data-t="supportEmail">hi@youraiconnector.com</span>](mailto:hi@youraiconnector.com) if this persists |

---

## Næste skridt

- [Webhooks](webhooks.md) — modtag notifikationer i realtid fra appen (et separat afsnit fra din API-nøgle).
- [Forbind AI-assistenter (MCP)](connect-ai-clients.md) — brug den samme API-nøgle til at lade Claude styre din konto.
- [Facebook Lead-formularer](facebook-lead-forms.md) — brug API'en med automatiseringsplatforme til at indfange leads.
- [GoHighLevel-integration](ghl-integration.md) — et eksempel på en fuld tovejs API-integration.
