API
The Recall API lets you access your knowledge base over HTTP. Use it to list and filter your cards, retrieve their content, and run semantic searches from your own scripts, automations, or applications.
The API currently supports read-only operations. A write API is on the roadmap, stay tuned.
Base URL: https://backend.getrecall.ai/api/v1
Getting Started
1. Generate an API key
- Open the Recall web app and log in.
- Go to Settings → API & MCP and find the API Keys section.
- Click Create key, give it a name, and choose an expiration:
Never,1 year,90 days,30 days, or a Custom date. - Copy the generated key. It starts with
sk_.
You can have up to 10 API keys at a time. Active keys are listed on the same settings page, and any key you delete stops working immediately.
Your API key is only shown once at creation time. Copy it and store it somewhere safe immediately. You won’t be able to see it again. If you lose it, delete the old key and create a new one.
2. Authenticate requests
Every request must include your key in the Authorization header:
Authorization: Bearer sk_a1b2c3d4e5f6g7h8i9j0k1l2If your key is missing, invalid, or expired, the API returns 401 Unauthorized.
3. Make your first request
curl "https://backend.getrecall.ai/api/v1/cards" \
-H "Authorization: Bearer sk_a1b2c3d4e5f6g7h8i9j0k1l2"Endpoints
List cards
GET /api/v1/cardsReturns cards matching your filters. When no filters are provided, all of your cards are returned.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
tags | string[] | No | Filter by tag IDs (UUIDs). Max 50 items. |
date_from | string | No | Start of date range (ISO 8601, e.g. 2025-01-15T00:00:00Z). |
date_to | string | No | End of date range (ISO 8601, e.g. 2025-01-20T00:00:00Z). |
source_url_contains | string | No | Filter cards whose source URL contains this substring. 1-500 characters. |
Example
curl "https://backend.getrecall.ai/api/v1/cards?source_url_contains=example.com" \
-H "Authorization: Bearer sk_..."Response
{
"results": [
{
"id": "card_abc123",
"title": "My Card Title",
"created_at": "Jan 15, 2025",
"image": "https://example.com/image.png",
"source_url": "https://example.com/article"
}
],
"total_count": 1
}image and source_url are omitted when not available.
Get a card
GET /api/v1/cards/{card_id}Returns a single card along with its content chunks.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
card_id | string | Yes | The card ID. 1-128 characters. |
Query parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
focus_query | string | No | - | A query to focus which chunks are returned. 1-1000 characters. |
max_chunks | integer | No | 20 | Maximum number of content chunks to return. Range: 1-50. |
If you’re looking for specific information within a large card, pass a focus_query to get the most relevant chunks back instead of a generic selection.
Example
curl "https://backend.getrecall.ai/api/v1/cards/card_abc123?focus_query=pricing&max_chunks=10" \
-H "Authorization: Bearer sk_..."Response
{
"card_id": "card_abc123",
"title": "My Card Title",
"chunks": [
{
"chunk_id": "chunk_001",
"content": "The actual text content of this chunk...",
"source": "page 3",
"timestamps": ["01:23", "04:56"]
}
],
"created_at": "Jan 15, 2025",
"image": "https://example.com/image.png",
"source_url": "https://example.com/article"
}image, source_url, source, and timestamps are omitted when not available.
Search
GET /api/v1/searchRuns a semantic search across your cards and returns the most relevant content chunks.
Query parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
q | string | Yes | - | Your search query. 1-1000 characters. |
mode | string | No | "focused" | "focused" (faster, fewer results) or "exhaustive" (broader coverage). |
card_id | string | No | - | Limit search to a specific card. 1-128 characters. |
tags | string[] | No | - | Filter by tag IDs (UUIDs). Max 50 items. |
date_from | string | No | - | Start of date range (ISO 8601, e.g. 2025-01-15T00:00:00Z). |
date_to | string | No | - | End of date range (ISO 8601, e.g. 2025-01-20T00:00:00Z). |
source_url_contains | string | No | - | Filter by source URL substring. 1-500 characters. |
Example
curl "https://backend.getrecall.ai/api/v1/search?q=spaced+repetition&mode=focused" \
-H "Authorization: Bearer sk_..."Response
{
"documents": [
{
"card_id": "card_abc123",
"title": "My Card Title",
"created_at": "Jan 15, 2025",
"image": "https://example.com/image.png",
"source_url": "https://example.com/article",
"chunks": [
{
"chunk_id": "chunk_001",
"content": "Relevant text passage...",
"source": "page 3",
"timestamps": ["01:23"]
}
]
}
],
"total_cards": 1,
"total_chunks": 1
}image, source_url, source, and timestamps are omitted when not available.
Validation Rules
The API validates all inputs at the boundary. If a parameter doesn’t meet the requirements below, you’ll get a 422 response with details about what went wrong.
| Rule | Detail |
|---|---|
| Date format | Must be ISO 8601 (e.g. 2025-01-15T00:00:00Z). Returns 422 if invalid. |
date_from <= date_to | When both are provided, date_from must not be after date_to. |
tags max length | At most 50 tag IDs per request. |
q length | 1-1000 characters. |
source_url_contains length | 1-500 characters. |
focus_query length | 1-1000 characters. |
card_id length | 1-128 characters. |
max_chunks range | Integer between 1 and 50 (default: 20). |
Error Responses
All errors return a JSON body. Validation errors (422) include details about which parameter failed. Server errors (500) and not-found errors (404) include a request_id. Share this with support if you need help troubleshooting.
401 Unauthorized
Returned when your API key is missing, invalid, or expired.
{
"detail": {
"message": "Invalid API key"
}
}422 Validation Error
Returned when a parameter doesn’t meet the validation rules.
{
"detail": {
"message": "date_from must be before or equal to date_to"
}
}404 Not Found
Returned when the requested resource doesn’t exist.
{
"detail": {
"message": "The requested resource was not found.",
"request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
}500 Internal Server Error
Returned when something unexpected goes wrong on our end.
{
"detail": {
"message": "An internal error occurred. Contact support with this request ID.",
"request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
}If you receive a 404 or 500 error, note the request_id from the response. Our support team can use it to look up exactly what happened.
Looking for MCP?
If you’re connecting an AI assistant (Cursor, Claude Desktop, etc.) rather than writing your own code, see the MCP Server docs.