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
}'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.
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.
/v1/modelsList callable models
Returns enabled public model IDs, supported output specifications, and published token or fixed-job prices. It does not include internal routing information.
/v1/chat/completionsCreate a chat completion
Accepts text messages with stream: false. Tools, structured output, multimodal inputs, and parallel choices are not part of this launch contract.
/v1/jobsCreate 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.
/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.
/v1/jobs/{id}/contentDownload 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.
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 resultReplace 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.
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.
Conservative failover
- Only enabled models with the required request and output contract can accept new work.
- A retry is possible only when rejection is confirmed safe. An HTTP status alone is not a promise that work was not accepted.
- 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.