Authentication

How to authenticate your API requests with API keys.

Every request to the Reecall API must include an API key. You pass it as a Bearer token in the Authorization header, no OAuth flows, no session cookies, just a single key.

All IDs and tokens in the examples below are placeholders.

Getting your first API key

Your first API key is created in the Reecall dashboard. Log in at dashboard.reecall.com, navigate to Settings > API Keys, and create a new key. Once you have it, you can use the API to create additional keys programmatically.

📘

Note - The API endpoint for creating keys requires an existing key for authentication, so the very first key must be created through the dashboard.

Using your API key

Send the key as a Bearer token in the Authorization header on every request:

GET /data_next/ai/LLM/
Authorization: Bearer {your-api-key}
⚠️

Security - Keep your API key secret. Never expose it in client-side code, public repositories, or browser requests. Use a backend server to proxy API calls.

Creating an API key

Create a new API key through the Data API:

POST /data_next/core/apiKeys/
Authorization: Bearer {your-api-key}
Content-Type: application/json
{
  "comment": "My new API key"
}
{
  "id": "{api-key-id}",
  "comment": "My new API key",
  "token": "{generated-api-key-token}",
  "projectId": null,
  "organizationId": "{organization-id}",
  "createdAt": "2025-01-15T10:30:00.000Z",
  "updatedAt": "2025-01-15T10:30:00.000Z"
}
⚠️

Important - The token field is only returned at creation time. Store it securely, you will not be able to retrieve it later.

Scopes

API keys can be scoped at two levels:

ScopeprojectIdAccess
OrganizationnullCan access all projects within the organisation
Project{project-id}Restricted to a single project

Organization-scoped key

When you create a key without specifying a projectId, it is scoped to your entire organisation. This key can read and write resources across all projects.

POST /data_next/core/apiKeys/
Authorization: Bearer {your-api-key}
Content-Type: application/json
{
  "comment": "Org-wide production key"
}

Project-scoped key

To restrict a key to a single project, pass the projectId:

POST /data_next/core/apiKeys/
Authorization: Bearer {your-api-key}
Content-Type: application/json
{
  "comment": "Project-specific key",
  "projectId": "{project-id}"
}

Project-scoped keys can only access resources belonging to that project. Use them to limit the blast radius of a key compromise.

Managing API keys

List all keys:

GET /data_next/core/apiKeys/
Authorization: Bearer {your-api-key}

Delete a key:

DELETE /data_next/core/apiKeys/{api-key-id}
Authorization: Bearer {your-api-key}

Error responses

When authentication fails, the API returns a 403 status with the following body:

{
  "message": "UNAUTHORIZED",
  "code": "UNAUTHORIZED",
  "status": 403,
  "context": {
    "required": "AUTHENTICATED",
    "current": "EVERYONE"
  }
}

Common causes:

  • Missing Authorization header - the header is required on every request
  • Invalid token - the key does not exist or has been deleted
  • Wrong scope - a project-scoped key trying to access a resource in a different project

Best practices

  • Use project-scoped keys in production to limit access to what is needed
  • Use Variables to store sensitive values like API keys for MCP server configurations

What’s Next

Now that your requests are authenticated, build your first voice Assistant and learn how Projects scope your resources.

Did this page help you?