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

# Quickstart

> Get a Developer API key and make your first request

## What you'll need

<Steps>
  <Step title="A Doodocs People account">
    A tenant administrator role — only it grants access to the integrations section.
  </Step>

  <Step title="A Developer API key">
    Settings → Integrations → **Developer API** → *Create key*. The key is shown once, so store it in a secrets manager.

    <Warning>
      The key grants access to the whole tenant's data. Never commit it to a repository or use it in the frontend.
    </Warning>
  </Step>

  <Step title="Verify the key">
    Make sure the key is accepted before building your integration.
  </Step>
</Steps>

## First request

<CodeGroup>
  ```bash cURL theme={null}
  curl https://app.doodocs.kz/api/developer/v1/api_key/_verify \
    -H "X-API-Key: ddp_bF49eXwgysLgkZkLDczavSoJ_nx7JYFVQ5Jn2ZEM"
  ```

  ```ts TypeScript theme={null}
  const res = await fetch(
    "https://app.doodocs.kz/api/developer/v1/api_key/_verify",
    { headers: { "X-API-Key": process.env.DOODOCS_API_KEY! } },
  );

  if (!res.ok) throw new Error(`Key rejected: ${res.status}`);
  ```

  ```go Go theme={null}
  req, _ := http.NewRequest(http.MethodGet,
      "https://app.doodocs.kz/api/developer/v1/api_key/_verify", nil)
  req.Header.Set("X-API-Key", os.Getenv("DOODOCS_API_KEY"))

  resp, err := http.DefaultClient.Do(req)
  if err != nil {
      return err
  }
  defer resp.Body.Close()
  ```

  ```python Python theme={null}
  import os, requests

  resp = requests.get(
      "https://app.doodocs.kz/api/developer/v1/api_key/_verify",
      headers={"X-API-Key": os.environ["DOODOCS_API_KEY"]},
  )
  resp.raise_for_status()
  ```
</CodeGroup>

A successful response is an empty JSON object with status `200`:

```json Response theme={null}
{}
```

<Check>
  Got a `200` — the key is active, and you can move on to loading data.
</Check>

## Load employees

The `POST /developer/v1/ingest/{source_type}` endpoint accepts a batch of
records from an external system. The `ingest:write` scope is only available to
super-administrator keys, and the `Idempotency-Key` header is required — it
protects against a double load if the request is retried.

```bash theme={null}
curl -X POST https://app.doodocs.kz/api/developer/v1/ingest/KEDO \
  -H "X-API-Key: $DOODOCS_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: quickstart-persons-001" \
  -d '{
    "payload_type": "PERSONS",
    "create_missing": true,
    "records": [
      { "external_id": "E-1024", "first_name": "Qanysh", "last_name": "Satbayev", "email": "k.satbayev@example.kz" }
    ]
  }'
```

The request is queued for asynchronous processing:

```json theme={null}
{
  "ingest_request_id": "8f4e1c2a-…",
  "status": "ACCEPTED",
  "record_count": 1
}
```

Sources, payload types, and full record schemas are in the
[Ingest reference](/en/api-reference/ingest).

## Next

<Columns cols={2}>
  <Card title="Authentication" icon="key" href="/en/api-reference/authentication">
    How to store and rotate keys.
  </Card>

  <Card title="Errors" icon="triangle-exclamation" href="/en/api-reference/errors">
    Error codes and what to do about them.
  </Card>
</Columns>
