# Snabbstart (/api/snabbstart)

> Från registrerad klient till ditt första anrop mot Klirrs API.

Den här guiden tar dig till ett första lyckat anrop: en lista över organisationens kunder. Har du redan en registrerad klient tar det ett par minuter.

<Callout type="warn" title="En klient måste registreras av Klirr först">
Det finns inga API-nycklar och ingen självbetjäning för integrationer. Klirr registrerar varje klient och lämnar ut `client_id` och `client_secret`. Hemligheten visas en gång och lagras bara som hash hos Klirr. Kontakta Klirr på [support@klirr.ai](mailto:support@klirr.ai) och ange integrationens namn, din redirect-URI och vilka [scopes](/api/scopes) du behöver.
</Callout>

Du behöver också en Klirr-användare i en organisation med <Plan min="ai_pro" />.

<Steps>
<Step>
### Skicka användaren till godkännandet [#skicka-användaren-till-godkännandet]

Öppna den här URL:en i webbläsaren. Byt ut värdena inom `<>`:

```text
https://app.klirr.ai/api/v1/oauth-v1/auth?response_type=code&client_id=<client_id>&redirect_uri=<redirect_uri>&scope=customer&state=<slumpad_sträng>
```

Användaren loggar in, väljer organisation och godkänner. Klirr skickar sedan webbläsaren till din redirect-URI med `?code=...&state=...`. Koden gäller i 10 minuter.
</Step>

<Step>
### Växla koden mot tokens [#växla-koden-mot-tokens]

<Tabs groupId="lang" persist items={['curl','TypeScript']}>
<Tab value="curl">
```bash
curl -X POST https://app.klirr.ai/api/v1/oauth-v1/token \
  -u "<client_id>:<client_secret>" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d grant_type=authorization_code \
  -d code=<code> \
  --data-urlencode redirect_uri=<redirect_uri>
```
</Tab>
<Tab value="TypeScript">
```ts
const res = await fetch('https://app.klirr.ai/api/v1/oauth-v1/token', {
  method: 'POST',
  headers: {
    Authorization: 'Basic ' + btoa('<client_id>:<client_secret>'),
    'Content-Type': 'application/x-www-form-urlencoded',
  },
  body: new URLSearchParams({
    grant_type: 'authorization_code',
    code: '<code>',
    redirect_uri: '<redirect_uri>',
  }),
});
const tokens = await res.json();
```
</Tab>
</Tabs>

```json
{
  "access_token": "<access_token>",
  "refresh_token": "<refresh_token>",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "customer"
}
```
</Step>

<Step>
### Gör ditt första anrop [#gör-ditt-första-anrop]

<Tabs groupId="lang" persist items={['curl','TypeScript']}>
<Tab value="curl">
```bash
curl https://app.klirr.ai/api/v1/3/customers \
  -H "Authorization: Bearer <access_token>"
```
</Tab>
<Tab value="TypeScript">
```ts
const res = await fetch('https://app.klirr.ai/api/v1/3/customers', {
  headers: { Authorization: 'Bearer <access_token>' },
});
const { Customers, MetaInformation } = await res.json();
```
</Tab>
</Tabs>

```json
{
  "Customers": [
    {
      "@url": "https://app.klirr.ai/api/v1/3/customers/1001",
      "Address1": "Storgatan 1",
      "Address2": "",
      "City": "Uppsala",
      "CustomerNumber": "1001",
      "Email": "faktura@bergstrombygg.se",
      "Name": "Bergström Bygg AB",
      "OrganisationNumber": "556000-0000",
      "Phone": "",
      "ZipCode": "753 20"
    }
  ],
  "MetaInformation": { "@TotalResources": 1, "@TotalPages": 1, "@CurrentPage": 1 }
}
```
</Step>
</Steps>

## Nästa steg [#nästa-steg]

- [Autentisering](/api/autentisering): förnyelse av tokens, PKCE och återkallning.
- [Fortnox-kompatibilitet](/api/fortnox-kompatibilitet): kuvert, partiella uppdateringar och taltyper.
- [Skapa och skicka en faktura](/api/guider/skapa-och-skicka-faktura).
