Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/distribea-com:distribea-com-account-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Distribea Account API
version: 1.0.0
summary: Royalty-free media catalog and AI image, video, music and voice generation for agents.
description: 'Royalty-free media catalog (music, sound effects, stock footage, images) and AI generation (images, video, music, voice) for AI agents and scripts.
## Quick start (steps 1 and 2 need no key)
1. Search the catalog:
`GET https://distribea.com/api/v1/catalog/search?q=epic+cinematic+drums&type=music`
2. Get the exact price of a generation. Nothing is generated or charged:
`POST https://distribea.com/api/v1/generate/image` with `{"prompt":"a red fox in fresh snow","dry_run":true}`
3. Get a key at https://distribea.com/account/mcp. Every new account includes 250 test credits, even without a plan.
4. Send the same body without `dry_run`, with the key, to generate. The response holds the file URL.
## Authentication
Send the key in `Authorization: Bearer ` (or `X-Api-Key: `). Catalog search, item details, the model list and every `dry_run` price quote are public. The account and real generation need a key. The same key works with the Distribea MCP server at https://distribea.com/api/mcp/remote.
## Responses
Success bodies are plain JSON objects, snake_case, with no envelope. One name per idea, in requests and responses alike: `duration_seconds` for any length, `aspect_ratio` for the picture shape (`16:9`), `file_type` for the file format (`png`, `mp4`, `mp3`). Lists are JSON arrays (`genre`, `mood`, `tags`). A setting left to the model''s default is `null`.
Every generation answer is a `GenerationResult`: read `status` first. `quoted` (`QuotedResult`: dry run, price and settings, `charged: false`), `succeeded` (`SucceededResult`: the file, `charged: true`) or `pending` (`PendingResult`: send again later).
## Retries
For video, music and voice, a job is identified by the request itself: the same key and the same JSON body within 3 minutes is the same job (the body is compared after parsing, so key order and spacing do not matter), so sending it again collects the result and never charges twice. No idempotency header is needed. An image request sent twice makes two images. Only errors with `retryable: true` are worth sending again unchanged.
Every error, on every endpoint, has one shape:
`{"error":{"code":"missing_parameter","message":"...","param":"q","fix":"...","retryable":false,"docs_url":"https://distribea.com/openapi.json"}}`
`code` is stable and machine-readable, `param` names the field to change, `fix` says what to send instead, `valid_values` lists the accepted values when there is a fixed list, `retryable` says whether the same request can simply be sent again, and `retry_after_seconds` (also in the `Retry-After` header) says when.
## Credits and limits
Generation is paid in credits at the same price as the website. `GET /api/v1/models` shows each model''s starting price, and `dry_run: true` returns the exact price of a request. A failed generation is refunded automatically. Each account can run 12 generations per minute and 200 per day (UTC). Public endpoints are cached for 10 minutes.
## Long jobs
Video can take a few minutes. If it is not ready within the request, the API answers `202` with `status: "pending"` and a `Retry-After` header: send the exact same request again to collect the result. Video, music and voice retries within 3 minutes are never charged twice.'
contact:
name: Distribea
email: hello@distribea.com
url: https://distribea.com
termsOfService: https://distribea.com/legal/licence-terms
servers:
- url: https://distribea.com
description: Production
security: []
tags:
- name: Account
description: The account behind an API key.
paths:
/api/v1/account:
get:
operationId: getAccount
tags:
- Account
summary: Get the key's account
description: Plan, credit balance, downloads today and protected channels of the account behind the key.
security:
- bearerAuth: []
- apiKeyHeader: []
responses:
'200':
headers:
X-Request-Id:
$ref: '#/components/headers/XRequestId'
Cache-Control:
$ref: '#/components/headers/CacheControl'
description: The account.
content:
application/json:
schema:
$ref: '#/components/schemas/Account'
example:
plan: free
tier: free
credits: 250
downloads_today: 0
protected_channels: 0
upgrade_url: https://distribea.com/pricing?src=api
'401':
$ref: '#/components/responses/Unauthorized'
components:
headers:
XRequestId:
description: Unique id of this response. Quote it when reporting a problem.
schema:
type: string
format: uuid
CacheControl:
description: public, s-maxage=600 on catalog and model lists (CDN cached 10 minutes); no-store on the account and on generation.
schema:
type: string
schemas:
Account:
type: object
required:
- plan
- tier
- credits
- downloads_today
- protected_channels
properties:
plan:
type: string
tier:
type: string
enum:
- free
- trial
- paid
credits:
type:
- integer
- 'null'
description: Credit balance.
downloads_today:
type: integer
protected_channels:
type: integer
upgrade_url:
type: string
format: uri
description: Present when the account has no paid plan.
Error:
type: object
required:
- error
properties:
error:
type: object
required:
- code
- message
- retryable
- docs_url
properties:
code:
type: string
description: Stable, machine-readable error code.
enum:
- missing_parameter
- invalid_parameter
- invalid_json
- not_found
- method_not_allowed
- missing_api_key
- invalid_api_key
- insufficient_credits
- test_credits_used_up
- rate_limited
- daily_limit_reached
- request_in_progress
- generation_failed
- internal_error
message:
type: string
description: What went wrong, in one sentence.
param:
type: string
description: The parameter or field to change.
fix:
type: string
description: What to send instead.
valid_values:
type: array
items:
type:
- string
- integer
description: Accepted values, when there is a fixed list.
credits_required:
type: integer
description: Price of the refused request, in credits.
valid_endpoints:
type: array
items:
type: string
description: 'Unknown address only: every endpoint of the API.'
daily_limit:
type: integer
description: Generations allowed per day (UTC).
retryable:
type: boolean
description: 'true: send the same request again (after `retry_after_seconds` when present). false: change the request first.'
retry_after_seconds:
type: integer
description: Seconds to wait, same as the Retry-After header.
docs_url:
type: string
format: uri
responses:
Unauthorized:
description: 'The key is missing, invalid or was replaced by a newer one. A price quote (`dry_run: true`) never needs one.'
headers:
WWW-Authenticate:
schema:
type: string
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
examples:
missing:
value:
error:
code: missing_api_key
message: This endpoint needs an API key.
fix: 'Send your key as "Authorization: Bearer <key>". Get it at https://distribea.com/account/mcp (every new account includes 250 test credits). To see the price without a key, add "dry_run": true.'
retryable: false
docs_url: https://distribea.com/openapi.json
invalid:
value:
error:
code: invalid_api_key
message: This API key is invalid or was replaced by a newer one.
fix: 'Send your key as "Authorization: Bearer <key>". Get it at https://distribea.com/account/mcp (every new account includes 250 test credits).'
retryable: false
docs_url: https://distribea.com/openapi.json
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: Your Distribea key, from https://distribea.com/account/mcp.
apiKeyHeader:
type: apiKey
in: header
name: X-Api-Key
description: The same key, for clients that cannot set Authorization.
externalDocs:
description: llms.txt
url: https://distribea.com/llms.txt