API Many
Console

DEVELOPER DOCS · PUBLIC BETA

One base URL. Familiar SDKs.

Use text chat and asynchronous image/video jobs through one authenticated API. Keep secrets server-side. GET /v1/models lists enabled models and current customer rates; it is not an instant health guarantee.

JSON over HTTPSBearer authenticationAsync media jobsNo streaming yet

Quickstart

Create a key in the console, put it in your server-side environment, then point an OpenAI-compatible client at the API Many base URL.

curl https://apimany.com/v1/chat/completions \
  -H "Authorization: Bearer $APIMANY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: answer-2026-08-30-001" \
  -d '{
    "model": "openai/gpt-5.4-mini",
    "messages": [{"role":"user","content":"Reply with one reliable answer."}],
    "max_tokens": 500,
    "stream": false
  }'
Availability: the example model is callable only if it appears in your authenticated GET /v1/models response. The website catalog and these examples do not guarantee model access. Check the operation and output specification before submitting.

Authentication

Every /v1 request requires a Bearer key. Keys belong to one account and site balance. The full secret is displayed once, can be revoked immediately, and must never be embedded in a browser bundle or public mobile application.

HTTP header
Authorization: Bearer sk_apimany_••••••••

Launch endpoints

Five endpoints cover discovery, text chat and asynchronous media. Media jobs are an API Many extension, not the OpenAI images or videos endpoints.

GET/v1/models

List callable models

Returns enabled public model IDs, supported output specifications, and published token or fixed-job prices. It does not include internal routing information.

POST/v1/chat/completions

Create a chat completion

Accepts text messages with stream: false. Tools, structured output, multimodal inputs, and parallel choices are not part of this launch contract.

POST/v1/jobs

Create a media job

Send only model and prompt with a required Idempotency-Key. Returns 202 for a new job, or 200 for its existing receipt.

GET/v1/jobs/{id}

Read your job

Poll the API Many job ID with a delay. A successful receipt includes a relative content URL while the result is available.

GET/v1/jobs/{id}/content

Download your result

Authenticated file download for the job owner. Content expires 24 hours after successful completion.

Image and video jobs

First check for operation: media_job in your model response. bfl/flux-schnell produces one 512 × 512 image. alibaba/wan-2.2-a14b-fast produces one 480p, approximately 16:9 H.264 MP4: 81 frames at 16 fps (5.0625 seconds), without audio.

Only text prompts are accepted. The prompt limit is 8,000 UTF-8 bytes; the complete JSON body limit is 50,000 bytes. Custom dimensions, duration, input images and other generation options are not supported.

Create, poll, download
curl https://apimany.com/v1/jobs \
  -H "Authorization: Bearer $APIMANY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: image-2026-08-30-001" \
  -d '{"model":"bfl/flux-schnell","prompt":"A blue ceramic cup on a white table."}'

# Set JOB_ID to the id in the accepted response; poll with a delay.
curl "https://apimany.com/v1/jobs/$JOB_ID" \
  -H "Authorization: Bearer $APIMANY_API_KEY"

# Only after succeeded and output is non-empty:
curl "https://apimany.com/v1/jobs/$JOB_ID/content" \
  -H "Authorization: Bearer $APIMANY_API_KEY" --output result

Replace the example model only with another enabled media model. Save the returned id as JOB_ID. A 202 response means accepted, not completed. Poll while status is queued or running; download only when succeeded has a non-empty output.

Save your result: content is available for 24 hours from successful completed_at. After expiry, output is empty and the download returns 404. Download with an active API key from the same account; links are not public or shareable. Range/resume is not guaranteed.

Other statuses are failed, reconciliation_required and canceled. Media errors use { error: { code, message } }; chat and discovery use the OpenAI-shaped error object. See OpenAPI for exact fields and status codes.

Idempotency

Persist a unique Idempotency-Key for each logical request before sending it. Chat accepts an optional key of up to 200 visible ASCII characters; it is strongly recommended. Repeating the same key and normalized payload can replay the stored successful result for 24 hours; using the same key for a different payload is rejected. After the response body expires, the key remains bound to the original request and the request receipt is authoritative. Persist both the key and API Many request ID with your own job record.

Media requires a key of 1–128 visible ASCII characters. The same key and exact model/prompt return the original job without another submission or charge, including after new generation is disabled. Reusing a key with another payload returns 409. Do not use a new key to retry an uncertain job.

Pricing and USD balance

Recharge your account in USD. Published prices and charges are in USD. Before dispatch, the gateway reserves a conservative token ceiling. On a confirmed result, it settles against reported usage; when upstream usage is missing it uses the documented reserved ceiling. Chat models publish input and output token rates; media models publish a fixed job price or a per-second rate. A successful fixed-price media job settles its reserved price. A model priced on the length of the clip you send is reserved at that model's maximum length, because the request only carries a URL, and settles on the measured length of its video or audio result; the unused reserve returns to your balance when the job completes. The receipt provides cost.reserved_usd as the original quote and cost.usd as the final charge (null until settled). Legacy integer fields remain for API compatibility. Internal processing changes do not alter your quoted rate.

The authenticated model response is the live source of truth for your public model and rates. Internal supplier identities, costs, endpoints, and diagnostics are not included.

Conservative failover

  1. Only enabled models with the required request and output contract can accept new work.
  2. A retry is possible only when rejection is confirmed safe. An HTTP status alone is not a promise that work was not accepted.
  3. Timeouts, network errors and unclear results are not blindly submitted again. Amounts can remain reserved for review. A confirmed failed media job releases its reservation; contact support with your job ID if a result needs reconciliation.