> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kaisupport.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Make an API key, create an attribute, and push your first contact.

This procedure takes about five minutes. At the end, one contact is in your
workspace, it holds one workspace attribute, and a teammate owns the account.

## 1. Make an API key

<Steps>
  <Step title="Open the API settings">
    In Kai, go to **Settings → API**.
  </Step>

  <Step title="Create the key">
    Select **Create API key**. Give the key a name that says which system uses
    it, for example `Nightly CRM sync`. Select the permissions
    `contacts:read`, `contacts:write` and `attributes:write`.
  </Step>

  <Step title="Copy the key">
    Kai shows the key one time. Kai stores only a hash of it, so it cannot show
    the key again. Put the key in your secret store now.
  </Step>
</Steps>

<Warning>
  A key reads and writes every contact in the workspace. If a key leaks, revoke
  it in **Settings → API** and create another one.
</Warning>

Put the key in your shell for the commands below:

```bash theme={null}
export KAI_API_KEY="kai_live_..."
```

## 2. Create a workspace attribute

Kai refuses an attribute key that the workspace does not define. Create the
attribute first:

```bash theme={null}
curl -X POST https://kaisupport.com/api/v1/attributes \
  -H "Authorization: Bearer $KAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "key": "package",
    "label": "Package",
    "type": "select",
    "options": ["Tam Destek", "Tam Paket"]
  }'
```

## 3. Push a contact

```bash theme={null}
curl -X POST https://kaisupport.com/api/v1/contacts \
  -H "Authorization: Bearer $KAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "external_id": "DK-1042",
    "name": "Ayşe Yılmaz",
    "email": "ayse@example.com",
    "phone": "+90 532 111 22 33",
    "attributes": { "package": "Tam Destek" }
  }'
```

The response holds the contact and its Kai id:

```json theme={null}
{
  "data": {
    "id": "4f1d6f2a-6a1e-4a0b-9c53-2a9a1f0c77d1",
    "external_id": "DK-1042",
    "name": "Ayşe Yılmaz",
    "email": "ayse@example.com",
    "phone": "+90 532 111 22 33",
    "note": null,
    "attributes": { "package": "Tam Destek" },
    "owner": null,
    "created_at": "2026-08-06T09:14:00.000Z",
    "updated_at": "2026-08-06T09:14:00.000Z"
  }
}
```

Send the same request again. Kai matches the contact on `external_id` and
updates it, so the request is safe to repeat.

## 4. Give the account to a teammate

You can name the owner by member id or by email address:

```bash theme={null}
curl -X PUT https://kaisupport.com/api/v1/contacts/4f1d6f2a-6a1e-4a0b-9c53-2a9a1f0c77d1/owner \
  -H "Authorization: Bearer $KAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "owner": "baran@example.com" }'
```

From now on, a new conversation from this customer goes to Baran.

## 5. Look at the result in Kai

Open **Contacts** in Kai and select the contact. The profile shows the core
details, the `Package` attribute and the account owner. A teammate sees the
same profile beside the conversation in the inbox.

## Next

<CardGroup cols={2}>
  <Card title="Import many contacts" icon="layer-group" href="/guides/bulk-import">
    Push up to 1000 contacts per request.
  </Card>

  <Card title="Export contacts" icon="download" href="/guides/export">
    Read every contact, or only what changed.
  </Card>
</CardGroup>
