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

# Errors

> Every error has the same shape: a status, a code your code can test, and a sentence for you.

When a request fails, the API answers with an HTTP status and this body:

```json theme={null}
{
  "error": {
    "code": "parametre_invalide",
    "message": "A parameter has an invalid value.",
    "status": 400,
    "request_id": "req_7f3c2a91",
    "details": { "parameter": "min_score" }
  }
}
```

| Field | |
| - | - |
| `code` | What went wrong, in a word your code can test. It never changes for a given situation. |
| `message` | A sentence in English for the developer. It may be reworded: don't test it. |
| `status` | The HTTP status, repeated. |
| `request_id` | The request's number when the API accepted it, `null` when it was refused at the door (a missing or wrong key, a rate limit). Also in the `x-request-id` header. **Give it to [support@trytikt.com](mailto:support@trytikt.com)** when you ask about a request. |
| `details` | When it helps: the `parameter` or `field` at fault, the `reason` of a refusal, the `limit` that was reached. |

## Statuses and codes

| Status | `code` | When |
| - | - | - |
| `400` | `parametre_inconnu` | A query parameter the operation doesn't know. `details.parameter` names it. |
| `400` | `parametre_invalide` | A query or path parameter with a wrong value. `details.parameter` names it. |
| `400` | `corps_invalide` | The body is not JSON, or has a field the operation doesn't take, or a wrong value. `details.field` names it. |
| `400` | `curseur_invalide` | A `cursor` that can't be read, or comes from another `sort`. Start again without it — see [Pagination](/api/pagination). |
| `401` | `cle_absente` · `cle_invalide` · `cle_revoquee` | No key, an unknown key, a revoked key — see [Authentication](/api/authentication). |
| `403` | `cle_de_lecture` | A change with a **Read only** key. |
| `404` | `introuvable` | Nothing with this identifier **in your workspace**. Something that exists in another workspace gets the very same answer. |
| `405` | `methode_non_permise` | This method doesn't exist on this path. |
| `409` | `limite_atteinte` | A limit of your workspace: `details.limit` says which — `webhook_endpoints` (10 destinations), `paused_tracked_profiles` (the most profiles you can pause). |
| `413` | `corps_trop_gros` | A body over 256 KB. |
| `422` | `refus` | TIKT understood the request but refuses it, for a reason given in `details.reason` (below). Nothing was written. |
| `429` | `trop_de_requetes` | A rate limit: wait the number of seconds in the `Retry-After` header. `details.limit` says which — see [Rate limits](/api/rate-limits). |
| `500` | `erreur_interne` | Something went wrong on TIKT's side. Nothing half-done is kept: try again; if it persists, write to support with the `request_id`. |
| `503` | `indisponible` | TIKT can't answer right now. Try again after `Retry-After` (30 seconds). |

## Reasons of a `422`

| `details.reason` | Why |
| - | - |
| `list_not_found` | The list given in the body is not in your workspace. |
| `name_taken` | Another list of your workspace already has this name (case doesn't count). |
| `invalid_profile_url` | Not the address of a LinkedIn profile. |
| `profile_archived` | Pause or resume a profile you no longer track: restore it first. |
| `own_company` | Your own company can't be excluded, nor taken out of the blocklist. |
| `invalid_domain` · `invalid_company_page` | Not a website domain, not a LinkedIn company page. |
| `lead_not_found` · `no_company` · `company_without_linkedin_id` | Exclude a lead's company: the lead is not in your workspace, has no company, or its company has no LinkedIn identifier yet (excluding by domain alone would have no effect). |
| `address_refused` | A destination address that is not public `https://`. |
| `invalid_headers` | A header name TIKT sets itself (more than three headers is a `400` on `headers`). |
| `endpoint_disabled` | Send a test or resend to a destination that is turned off: turn it on first. |
| `invalid_name` · `invalid_format` · `unknown_event` · `invalid_send_past` | A destination's name, format, event or past window that TIKT refuses. The API checks these values first, so you should rarely see them. |
| `slack_requires_console` | A Slack destination can be read, turned off and deleted, not changed: Slack is connected in the console. |
| `no_action` | A workflow without an action can't be turned on. |

New reasons may be added: treat an unknown one as a refusal you show to a person.

## Retrying safely

* Retry on `429`, `500` and `503` only, after the `Retry-After` delay when there is one, and with growing pauses otherwise.
* Never retry a `400`, `401`, `403`, `404`, `409` or `422` as is: the same request will get the same answer.
* Changes are safe to repeat: discarding a lead twice, adding a lead to a list it's already in, excluding a company that is already excluded, tracking a profile you already track — the second call changes nothing and says so.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.