> For the complete documentation index, see [llms.txt](https://help.delpha.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.delpha.io/delpha-api-and-mcp/api/authentication.md).

# Authentication

Every request carries `Authorization: Bearer <credential>`, with one exception: `GET /v1/pricing`, the price list, takes no credential. It is answered to every caller, and a credential sent with it is ignored.

* **API keys** (`dlp_live_…`) are created in the console at **Developer → API keys**. A key can be scoped to individual use cases (`dataquality.<usecase>.single` / `.batch`), given a credit ceiling per day, week or month, and an expiry — **365 days by default, and any value from 1 to 730 days**; a key cannot be made never to expire. Keys are revealed, renamed, re-scoped, rotated and revoked from the same page. A call outside a key's scopes is refused with **403**; `GET /v1/pricing` is the exception, because no scope governs an operation that needs no credential. A key is a secret credential with the same reach as a password: it belongs on a server, and a key placed in client-side code is a disclosed key.
* **Rotating or revoking a key takes effect at once, with no overlap window.** A rotation issues a new secret on the same key and invalidates the old one in the same step, so deploy the new secret before you rotate rather than after; a revocation invalidates the key outright. In both cases the credential stops being accepted immediately, with one bounded exception: an authorization decision already made for that credential is cached by the gateway for up to **60 seconds**, so a request in flight within that window can still be served. Nothing is cached beyond it.
* **OAuth 2.0 client credentials** (machine-to-machine) is also accepted; see the `oauth2` security scheme for the token endpoints.

#### Security schemes

**`apiKey`**

**Type:** `http` · **HTTP scheme:** `bearer` · **Bearer format:** `dlp_`

Native Delpha API key. Send it as an HTTP bearer token (`Authorization: Bearer dlp_...`). Keys are issued from the Delpha app (Developer → API keys) and are billed per team against the team's credit balance.

**`oauth2`**

**Type:** `oauth2` · **Flow:** `clientCredentials` · **Token URL:** `https://secure.delpha.io/oauth2/token` · **Scope:** `api/access` — Access to the public API

OAuth 2.0 client-credentials flow (machine-to-machine). Token URL: <https://secure.delpha.io/oauth2/token>. The `api/access` scope is all-access: it grants every operation this document publishes. Per-use-case scoping, per-key credit ceilings and expiry are properties of an API key, not of this flow — use an API key when a credential must be restricted.

#### API-key scopes

A key with no scopes has full access. A scoped key is restricted to the use cases listed on it, one scope per row below: `single` covers the use case's submit operation, its poll operation and its synchronous route where it has one; `batch` covers the batch submit and batch poll pair. A call outside a key's scopes is refused with **403**.

| Use case                | Single scope                               | Batch scope                               | State   |
| ----------------------- | ------------------------------------------ | ----------------------------------------- | ------- |
| `email`                 | `dataquality.email.single`                 | `dataquality.email.batch`                 | current |
| `website`               | `dataquality.website.single`               | `dataquality.website.batch`               | current |
| `phone`                 | `dataquality.phone.single`                 | `dataquality.phone.batch`                 | current |
| `name`                  | `dataquality.name.single`                  | `dataquality.name.batch`                  | current |
| `legal-id`              | `dataquality.legal-id.single`              | `dataquality.legal-id.batch`              | current |
| `linkedin-profile`      | `dataquality.linkedin-profile.single`      | `dataquality.linkedin-profile.batch`      | current |
| `linkedin-company-page` | `dataquality.linkedin-company-page.single` | `dataquality.linkedin-company-page.batch` | current |
| `ultimate`              | `dataquality.ultimate.single`              | `dataquality.ultimate.batch`              | current |
| `company`               | `dataquality.company.single`               | —                                         | current |

`GET /v1/pricing` needs no credential and reserves no credit (`x-credit-free`), so no scope governs it: every caller reaches it, with a key of any scope or with none.

Scopes, the credit ceiling and the expiry are chosen when the key is created and can be changed afterwards from [**Developer → API keys**](https://app.delpha.ai/developer/api-keys).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://help.delpha.io/delpha-api-and-mcp/api/authentication.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
