أدلة وتحديثات وملاحظات هندسية من ArgoLink حول البناء بواجهة واحدة لجميع نماذج الذكاء الاصطناعي. Blog
Getting started

Quickstart

From sign-up to your first request in about five minutes.

1
Create an account
Sign up with email or Google, then open the console.
2
Top up
Open the console wallet and pay with PayPal — Visa, Mastercard and Amex work directly without a PayPal account. Minimum $1.
3
Create an API key
Create a key on the console API Keys page, copy it and store it safely.
4
Choose a model and protocol
Copy the exact model ID and use the recommended endpoint and request shape shown on its model page.

Your first request

curl
curl -sS https://54-151-42-83.sslip.io/v1/responses \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.6-sol",
    "input": "Introduce yourself in one sentence",
    "stream": false
  }'
Tip

First confirm an HTTP 2xx status, then check the response fields for the protocol you used: Responses returns output or output_text, while Chat Completions returns choices[0].message.content. Model IDs must come from the live catalog; each model page shows the correct request shape.

Next steps

Getting started

Auth & endpoints

Every request goes to the same base URL, authenticated with your API key as a Bearer token.

API base URL

https://54-151-42-83.sslip.io

Request header

Authorization: Bearer YOUR_API_KEY

Endpoint overview

Protocol / capabilityEndpoint
OpenAI Responses protocolPOST /v1/responses
OpenAI Chat CompletionsPOST /v1/chat/completions
Anthropic Messages protocolPOST /v1/messages
List available models (no auth, recommended)GET /v1/models
List available models (no auth, compatibility path)GET /models
List available models (no auth, Gemini format)GET /v1beta/models
Image generation & editsPOST /v1/images/generations · /v1/images/edits
Video generation (async)POST /v1/videos/generations

List available models

The Models & Pricing page and all three model-discovery endpoints below are public. They do not require a signed-in session, cookie, or API key. All three read the same ArgoLink catalog; only the public path and JSON protocol shape differ.

EndpointResponse shapeUse it for
/v1/modelsOpenAI-compatible object + data[]Recommended; works with most OpenAI-compatible clients
/modelsIdentical to /v1/modelsClients that request the root-level /models path
/v1beta/modelsGemini-compatible models[]Clients that consume the Gemini ListModels shape

Recommended endpointGET /v1/models

This is the default discovery endpoint. It returns an OpenAI-compatible list in which each data item represents one available model.

bash
curl -sS https://54-151-42-83.sslip.io/v1/models
json
{
  "object": "list",
  "data": [
    {
      "id": "gpt-5.6-sol",
      "object": "model",
      "created": 0,
      "owned_by": "openai"
    }
  ]
}
FieldMeaning
data[].idThe model ID to send to inference or media endpoints
data[].owned_byThe model provider ID
data[].objectAlways model
data[].createdA compatibility field currently fixed at 0; it is not the model release date

Compatibility pathGET /models

This is an exact alias of /v1/models. The response body, status, model ordering, ETag, and cache behavior are identical. New integrations should prefer /v1/models; use this path only when a client is fixed to /models.

Gemini shapeGET /v1beta/models

This endpoint returns a Gemini-compatible model resource list. The name value carries a models/ prefix, while baseModelId contains the raw model ID.

bash
curl -sS https://54-151-42-83.sslip.io/v1beta/models
json
{
  "models": [
    {
      "name": "models/gpt-5.6-sol",
      "baseModelId": "gpt-5.6-sol",
      "version": "001",
      "displayName": "gpt-5.6-sol",
      "description": "..."
    }
  ]
}

Print model IDs only

bash
# OpenAI-compatible shape
curl -sS https://54-151-42-83.sslip.io/v1/models | jq -r '.data[].id'

# Gemini shape; print raw IDs without the models/ prefix
curl -sS https://54-151-42-83.sslip.io/v1beta/models | jq -r '.models[].baseModelId'
Discovery and inference use different authentication

The public list represents the models ArgoLink currently displays and sells. Inference, image, and video requests still require Authorization: Bearer YOUR_API_KEY, and the key's group must be allowed to use the selected model. You can also browse the same catalog on the Models & Pricing page.

Request bodies match each official protocol; complete runnable examples for the media APIs live in the chapters on the left.

Next steps

API Reference·Overview

Protocols & models

Choose a protocol for the client first, then select a model from the live catalog. ArgoLink exposes three text protocols, one image surface, and asynchronous video jobs; model pages document only model-specific differences.

Get the live model IDs

The public model catalog is the source of truth for availability, providers, and recommended endpoints. This command prints every current text model in provider order, without limiting discovery to any region.

bash
curl -sS 'https://54-151-42-83.sslip.io/api/catalog/v1/models?category=chat&sort=provider&page_size=100' \
  | jq -r '.items[] | [.provider_id, .id, .endpoint] | @tsv'
Discovery is not inference

GET /v1/models, GET /models, and GET /v1beta/models only list the public catalog in different compatibility shapes. Call one of the authenticated HTTP inference endpoints below to generate a response.

Accepted downstream protocols

Client protocolEndpointGateway behavior
OpenAI ResponsesPOST /v1/responsesResponses request format; each model page marks whether this is the recommended entry point, and it may be converted to Chat Completions upstream
OpenAI Chat CompletionsPOST /v1/chat/completionsAccepted directly and forwarded through the selected provider account
Anthropic MessagesPOST /v1/messagesAnthropic request and response shapes are bridged by ArgoLink
Protocol compatibility does not make optional parameters universal

ArgoLink accepts all three downstream HTTP shapes above and converts requests according to the selected account. Vision, reasoning effort, tool use, and other optional fields remain model-specific; use the current model page and live catalog as the contract.

Reasoning effort and thinking controls

Provider parameters are not interchangeable. For exact control, prefer /v1/chat/completions and send the top-level reasoning_effort or thinking field shown below. “Effective behavior” includes the provider contract, ArgoLink's current gateway translation, and live request results.

ModelSendCurrent effective behavior
deepseek-v4-pro-0813
deepseek-v4-flash-vision-exp
thinking.type: enabled / disabled
reasoning_effort: low / medium / high / xhigh / max
low→low, medium/high/xhigh→high, and max→max. Thinking defaults to enabled at high. The experimental Vision model's toggle and low/max values have also been verified against the current upstream.
glm-5.1thinking.type: enabled / disabledUse only the thinking toggle; the provider contract does not support reasoning_effort for this model.
glm-5.2Enable: thinking.type=enabled
Disable: send both thinking.type=disabled and reasoning_effort=none
When enabled: low / medium / high / xhigh / max
low/medium/high→high and xhigh/max→max. With the current upstream, sending none alone can still produce reasoning, so send both fields when disabling it.
glm-5.3
glm-5.3-flash
reasoning_effort: low / high / maxThinking cannot be disabled. The current gateway maps both low and high to upstream high, while max stays max; the two effective levels are currently high and max.
kimi-k2.6thinking.type: enabled / disabledreasoning_effort is not supported. When thinking is disabled, the current upstream reports the response model as auto; keep thinking enabled if strict response-model identity matters.
kimi-k2.7-codeOmit thinking; if explicit, the only valid shape is {"type":"enabled","keep":"all"}Thinking is always enabled and reasoning_effort is unsupported. Do not send thinking.type=disabled: the current upstream compatibility layer may return 200 but changes the response model to auto, which no longer satisfies a fixed-model contract.
kimi-k3reasoning_effort: low / high / maxThe default is max, and all three values are preserved upstream. K3 always reasons; omit thinking, because live tests show thinking.type=disabled is ignored.
Kimi K3 defaults to the heaviest max level

Latency-sensitive calls should set reasoning_effort: "low" from the first turn and use stream: true. Do not switch effort in the middle of a conversation: Kimi documents that doing so invalidates prefix-cache hits. An upstream may return HTTP 200 while ignoring an unknown field, so request success alone does not prove a control took effect.

bash · Kimi K3 low
curl -N https://54-151-42-83.sslip.io/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kimi-k3",
    "messages": [{"role": "user", "content": "Explain what an idempotent API operation is in two sentences"}],
    "reasoning_effort": "low",
    "stream": true
  }'

For models with native effort control, a Responses request uses reasoning.effort; the gateway converts it to Chat Completions reasoning_effort. DeepSeek accepts none/low/high/max in Responses, where none disables thinking. Kimi K2.6 and K2.7 use model-specific thinking controls rather than effort, so use the Chat Completions shapes above.

OpenAI ResponsesPOST /v1/responses

bash
curl -sS https://54-151-42-83.sslip.io/v1/responses \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4-pro-0813",
    "input": "Explain what an idempotent API operation is in two sentences"
  }'

OpenAI Chat CompletionsPOST /v1/chat/completions

bash
curl -sS https://54-151-42-83.sslip.io/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "glm-5.3",
    "messages": [
      {"role": "user", "content": "Explain what an idempotent API operation is in two sentences"}
    ]
  }'

Anthropic MessagesPOST /v1/messages

bash
curl -sS https://54-151-42-83.sslip.io/v1/messages \
  -H "x-api-key: YOUR_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kimi-k2.7-code",
    "max_tokens": 256,
    "messages": [
      {"role": "user", "content": "Explain what an idempotent API operation is in two sentences"}
    ]
  }'

Vision input

Use deepseek-v4-flash-vision-exp for image understanding. Replace the example URL with a publicly reachable image URL.

bash
curl -sS https://54-151-42-83.sslip.io/v1/responses \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4-flash-vision-exp",
    "input": [{
      "role": "user",
      "content": [
        {"type": "input_text", "text": "Describe this image briefly"},
        {"type": "input_image", "image_url": "https://your-public-image.example/image.jpg"}
      ]
    }]
  }'

Availability and pricing

Use the live Models & Pricing page for per-model input, output, cached-input, and cache-write prices. It also carries time-sensitive notes such as DeepSeek weekday peak pricing and the GLM Flash promotional period; do not treat request examples as a price quote.

Next steps

API Reference·Text

OpenAI Responses

ArgoLink's OpenAI Responses request format and the protocol used by a manual Codex CLI / Desktop setup. It accepts string or structured input, streaming, tools, and model-specific reasoning controls; each model page marks whether this is the recommended entry point.

POST/v1/responses
Authentication: Authorization: Bearer YOUR_API_KEY

Request fields

FieldRequiredDescription
modelYesA text model ID from the live catalog.
inputYesA string or an array of role-based messages, text, image, and file content parts.
instructionsNoSystem-level instructions for this request.
streamNoSet to true for an SSE event stream.
max_output_tokensNoCaps generated tokens, subject to the model's own limit.
tools / tool_choiceNoTool declarations and selection policy; actual support remains model-specific.
reasoningNoFor example {"effort":"low"}; use the model page for accepted levels.

Minimal request

bash
curl -sS https://54-151-42-83.sslip.io/v1/responses \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.6-sol",
    "input": "Confirm this connection in one sentence"
  }'

Read the response

The main non-streaming result is in output[]; text blocks use type=output_text, and token accounting is in usage. Do not hard-code one array index because tool calls and reasoning items can also appear in output[].

Codex integration

Codex requires wire_api = "responses" and a Base URL ending in /v1. See Codex CLI / Desktop for the complete configuration.

API Reference·Text

Chat Completions

The message-array endpoint for OpenAI-compatible clients. Use it with traditional SDKs, Cherry Studio, and direct DeepSeek, GLM, or Kimi thinking controls.

POST/v1/chat/completions
Authentication: Authorization: Bearer YOUR_API_KEY

Request fields

FieldRequiredDescription
modelYesA text model ID from the live catalog.
messagesYesOrdered system, user, assistant, or tool messages.
streamNoSet to true for SSE delta chunks.
max_completion_tokensNoPreferred output cap; legacy max_tokens is also accepted.
tools / tool_choiceNoFunction tools and their selection policy.
reasoning_effort / thinkingNoNot universal; use the exact shape documented for the selected model.

Example request

bash
curl -sS https://54-151-42-83.sslip.io/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4-pro-0813",
    "messages": [{"role":"user","content":"Confirm this connection in one sentence"}],
    "stream": false
  }'

Response and streaming

Non-streaming text is normally in choices[0].message.content, the termination reason in choices[0].finish_reason, and accounting in usage. With stream: true, accumulate text and tool calls from each SSE chunk's choices[].delta.

Do not copy controls between models

Kimi K2.7 Code, Kimi K3, and DeepSeek use different thinking controls. HTTP 200 does not prove that an unknown field took effect; check the matching model page first.

API Reference·Text

Claude Messages

The native Anthropic Messages-compatible endpoint for Claude Code and Anthropic SDKs. ArgoLink preserves the Messages request and response shapes while bridging to the selected model's actual upstream.

POST/v1/messages
Recommended authentication: x-api-key: YOUR_API_KEY; Bearer is also accepted. Compatibility header: anthropic-version: 2023-06-01

Request fields

FieldRequiredDescription
modelYesA text model ID from the live catalog; the ID does not need to start with Claude.
messagesYesuser / assistant messages with string or content-block values.
max_tokensYesThe maximum number of tokens generated for this response.
systemNoA top-level system prompt; do not put a system role inside messages.
streamNoSet to true for Anthropic SSE events.
tools / tool_choiceNoAnthropic-format tool definitions and selection.
thinking / output_configNoModel-specific thinking toggles or effort; check the model page first.

Example request

bash
curl -sS https://54-151-42-83.sslip.io/v1/messages \
  -H "x-api-key: YOUR_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kimi-k2.7-code",
    "max_tokens": 256,
    "messages": [{"role":"user","content":"Confirm this connection in one sentence"}]
  }'

Response and events

Non-streaming content is in content[]; text blocks use type=text and tool calls use type=tool_use. The stop reason is in stop_reason and accounting is in usage. A stream emits message_start, content-block events, message_delta, and message_stop.

Claude Code uses this endpoint

Claude Code only needs the root origin and auth token; the client appends /v1/messages. See Claude Code for the full configuration.

API Reference·Media

Images

One OpenAI Images-compatible surface. Text-to-image uses JSON, and reference edits accept either JSON image references or multipart file uploads; dimensions, aspect ratios, quality, and reference counts remain model-specific.

POST/v1/images/generations
POST/v1/images/edits
Authentication: Authorization: Bearer YOUR_API_KEY; set a client timeout of at least 600 seconds.

Shared contract

FieldDescription
modelRequired; use a live model whose catalog category is image.
promptRequired; describe the generated result or requested edit.
nOptional requested result count. Accepted ranges and actual result counts depend on the model.
response_formatOptional b64_json or url, as documented by the model guide.
Reference editsUse JSON images[].image_url values for public HTTPS URLs or data URLs, or use multipart with one repeated file field per reference. Use the model guide for the limit.
Model-specific fieldssize, quality, aspect_ratio, resolution, and output_format must not be copied blindly between models.

Choose the matching guide

  • GPT Image — generation, 1–16 reference images, and aspect-ratio behavior
  • Nano Banana — three Google image models, aspect ratios, and output formats
  • Grok Image — xAI generation, resolution, and up to 3 JSON reference images
Do not infer parameters from the endpoint name

Some platforms split image models into many model-specific subpaths. ArgoLink instead keeps one public path and puts differences in model parameters. Select a model first, then use its runnable guide.

API Reference·Media

Videos

An asynchronous video-job API. Submit a generation, save its request_id, then use the same key to inspect status or download from the protected content endpoint.

POST/v1/videos/generations
GET/v1/videos/{request_id}
GET/v1/videos/{request_id}/content
All three steps require a valid Bearer key owned by the same user.

Job lifecycle

  1. 1Send model, prompt, and supported duration, aspect-ratio, resolution, or reference-image fields to POST /v1/videos/generations.
  2. 2Save request_id from the response. It is the only identifier for subsequent status and content calls.
  3. 3Wait while status is pending, download after done, and inspect the full error after failed or expired.
Keep the request_id

Status and content lookups enforce job ownership. Use a key belonging to the same user who created the job; changing users or guessing an ID returns not found.

Model job examples

  • Grok Video 1.5 — text-to-video, first-frame input, status polling, and MP4 download
  • Seedance 2.0 / 2.5 — first/last frame, multi-image, video and audio references, direct media upload
  • Gemini Omni — Google video jobs and reference-image parameters
  • Infinite Canvas — submit video jobs through a client without writing code
Text models·DeepSeek

DeepSeek V4 Pro

Exact model ID: deepseek-v4-pro-0813. General text, coding, and controllable reasoning.

POST/v1/chat/completions
Responses and Anthropic Messages are also accepted; use Chat Completions for exact thinking controls.

Thinking controls

Top-level thinking.type accepts enabled or disabled. reasoning_effort accepts low, medium, high, xhigh, or max. Effective mapping is low→low, medium/high/xhigh→high, and max→max; omitted controls default to thinking enabled at high.

Example

bash
curl -sS https://54-151-42-83.sslip.io/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4-pro-0813",
    "messages": [{"role": "user", "content": "Explain an idempotent API in two sentences"}],
    "reasoning_effort": "low"
  }'

See live input, output, cache, and weekday peak prices on Models & Pricing.

Text models·DeepSeek

DeepSeek V4 Vision

Exact model ID: deepseek-v4-flash-vision-exp. Image understanding and multimodal questions.

POST/v1/responses
Images must be public HTTPS URLs or data URIs supported by your client.

Thinking controls

The thinking toggle and effort mapping match V4 Pro. Live upstream tests verified the toggle and both low and max effort. This is an experimental model, so callers should tolerate version and latency changes.

Vision example

bash
curl -sS https://54-151-42-83.sslip.io/v1/responses \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4-flash-vision-exp",
    "input": [{"role": "user", "content": [
      {"type": "input_text", "text": "Describe this image briefly"},
      {"type": "input_image", "image_url": "https://example.com/image.jpg"}
    ]}],
    "reasoning": {"effort": "low"}
  }'

This model also uses weekday peak pricing. See Models & Pricing.

Text models·Zhipu GLM

GLM 5.1

Exact model ID: glm-5.1. This model has a thinking toggle but no effort levels.

POST/v1/chat/completions
Responses and Anthropic Messages-compatible requests are also accepted.

Thinking control

Send top-level thinking: {"type":"enabled"} or thinking: {"type":"disabled"}. Do not send reasoning_effort.

Example

bash
curl -sS https://54-151-42-83.sslip.io/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"glm-5.1","messages":[{"role":"user","content":"Explain one database transaction"}],"thinking":{"type":"enabled"}}'

See the live price on Models & Pricing.

Text models·Zhipu GLM

GLM 5.2

Exact model ID: glm-5.2. Supports a thinking toggle and limited effort mapping.

POST/v1/chat/completions
Disabling thinking reliably requires both control fields.

Thinking control

When enabled, effort accepts low, medium, high, xhigh, and max. Effective mapping is low/medium/high→high and xhigh/max→max. To disable reasoning, send both thinking.type=disabled and reasoning_effort=none; none alone may still reason.

Disable-thinking example

bash
curl -sS https://54-151-42-83.sslip.io/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"glm-5.2","messages":[{"role":"user","content":"Reply only with OK"}],"thinking":{"type":"disabled"},"reasoning_effort":"none"}'

See the live price on Models & Pricing.

Text models·Zhipu GLM

GLM 5.3

Exact model ID: glm-5.3. Thinking is always enabled.

POST/v1/chat/completions
Responses and Anthropic Messages-compatible requests are also accepted.

Reasoning effort

Accepts low, high, and max. The current gateway maps both low and high to upstream high, while max stays max. The only effective levels today are high and max; thinking cannot be disabled.

Example

bash
curl -sS https://54-151-42-83.sslip.io/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"glm-5.3","messages":[{"role":"user","content":"Compare optimistic and pessimistic locking"}],"reasoning_effort":"max"}'

See the live price on Models & Pricing.

Text models·Zhipu GLM

GLM 5.3 Flash

Exact model ID: glm-5.3-flash. A lower-cost fast model with always-on thinking.

POST/v1/chat/completions
Effort behavior matches GLM 5.3.

Reasoning effort

Accepts low, high, and max; the effective levels today are high and max. Thinking cannot be disabled. Pricing may be promotional, so never infer a quote from this request example.

Example

bash
curl -sS https://54-151-42-83.sslip.io/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"glm-5.3-flash","messages":[{"role":"user","content":"Write a paginated SQL query"}],"reasoning_effort":"high"}'

See promotion status and live price on Models & Pricing.

Text models·Kimi

Kimi K2.6

Exact model ID: kimi-k2.6. Supports a thinking toggle but no effort levels.

POST/v1/chat/completions
Use the Chat Completions thinking field for exact control.

Thinking control

Send thinking.type as enabled or disabled; do not send reasoning_effort. The current upstream reports the response model as auto when thinking is disabled, so keep it enabled if exact response-model identity matters.

Example

bash
curl -sS https://54-151-42-83.sslip.io/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"kimi-k2.6","messages":[{"role":"user","content":"Explain event sourcing"}],"thinking":{"type":"enabled"}}'

See the live price on Models & Pricing.

Text models·Kimi

Kimi K2.7 Code

Exact model ID: kimi-k2.7-code. A coding model with always-on thinking.

POST/v1/chat/completions
Normally omit thinking; the only explicit shape is enabled with keep all.

Thinking control

reasoning_effort is unsupported and thinking cannot be disabled. Do not send thinking.type=disabled: the compatibility layer may still return HTTP 200 but report model auto, violating a fixed-model contract.

Example

bash
curl -sS https://54-151-42-83.sslip.io/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"kimi-k2.7-code","messages":[{"role":"user","content":"Refactor this Go function and explain edge cases"}],"thinking":{"type":"enabled","keep":"all"}}'

See the live price on Models & Pricing.

Text models·Kimi

Kimi K3

Exact model ID: kimi-k3. Always reasons and defaults to the heaviest max effort.

POST/v1/chat/completions
Latency-sensitive calls should select low from the first turn and stream the response.

Reasoning effort and latency

Accepts low, high, and max, preserved upstream. Do not send thinking; live tests show disabled is ignored. Changing effort mid-conversation invalidates Kimi prefix-cache hits, so choose one level on the first turn. K3 at max is inherently slow; low plus streaming reduces time to first token, while total latency still depends on upstream queueing and output length.

Lower-latency example

bash
curl -N https://54-151-42-83.sslip.io/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"kimi-k3","messages":[{"role":"user","content":"Explain an idempotent API in two sentences"}],"reasoning_effort":"low","stream":true}'

See the live price on Models & Pricing.

Integration methods·Method one

CC Switch

Manage providers through a GUI — the simplest way to connect Codex and Claude Code.

Setup steps

  1. 1Open CC Switch and add a custom provider.
  2. 2Choose Codex or Claude and enter the matching base URL below.
  3. 3Enter your ArgoLink key, then enable the provider.
  4. 4If the target app is already running, restart it.

Configuration

Codex
https://54-151-42-83.sslip.io/v1
Claude Code
https://54-151-42-83.sslip.io
API Key
YOUR_API_KEY
Model list and 1M context

Use the catalog's exact model ID in the mapping. The /v1/models list contains public model IDs; it does not add a [1m] suffix. In Claude Code, [1m] is a client-side capability declaration, not part of the upstream model name, and Claude Code strips it before sending the request. Enable it only when the model page/catalog records an extended context window. Automatic compaction still happens before the effective limit; other clients may use a different context or compaction policy. CC Switch must use the root origin for Claude Code and the /v1 base for Codex.

Next steps

Integration methods·Method two

Manual configuration

Connect without CC Switch by writing the ArgoLink origin, key, and protocol into the client configuration. Codex uses Responses; Claude Code uses native Messages.

1
Codex CLI / Desktop
~/.codex/config.toml
The Base URL includes /v1 and the wire protocol is responses.
2
Claude Code
~/.claude/settings.json
ANTHROPIC_BASE_URL uses the root origin without /v1.

Choose your client

ClientBase URLProtocol / endpointFull setup
Codex CLI / Desktophttps://54-151-42-83.sslip.io/v1Responses · POST /v1/responsesOpen Codex setup
Claude Codehttps://54-151-42-83.sslip.ioAnthropic Messages · POST /v1/messagesOpen Claude Code setup
The Base URLs are intentionally different

Codex includes /v1; Claude Code uses only the root origin. Do not swap these values. Restart the desktop client or open a new terminal session after saving.

Verify the setup

  1. 1Open Models & Pricing and confirm that the configured model ID is still in the live catalog.
  2. 2Restart the client and send a minimal request that asks for a one-sentence response.
  3. 3A 401 means the key needs attention. A model-unavailable error means you should choose a current model in the same category, not change the Base URL.
Manual configuration·Codex

Codex CLI / Desktop

Codex CLI and Codex Desktop share the same user-level config when they run under the same system user and CODEX_HOME. After saving, restart Codex Desktop or open a new Codex CLI session.

Shared config

Config file~/.codex/config.toml

~/.codex/config.toml
model = "gpt-5.6-sol"
model_provider = "luckyapi"

[model_providers.luckyapi]
name = "ArgoLink"
base_url = "https://54-151-42-83.sslip.io/v1"
wire_api = "responses"
requires_openai_auth = false
experimental_bearer_token = "YOUR_API_KEY"

Next steps

Manual configuration·Claude Code

Claude Code

Set the native endpoint and auth token in the Claude Code user settings — configure once, use continuously.

Config file ~/.claude/settings.json

~/.claude/settings.json
{
  "env": {
    "ANTHROPIC_BASE_URL": "https://54-151-42-83.sslip.io",
    "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY"
  }
}
Tip

Restart the client after saving the config.

Next steps

Clients·Desktop chat and image generation

Cherry Studio

Add ArgoLink as a custom provider to use chat and image models from the live catalog in Cherry Studio. Use Infinite Canvas for video models.

Before you start

  1. 1Create and sign in to your ArgoLink account, then open the console.
  2. 2Create a key on the API Keys page, copy it immediately, and store it safely. The full key is normally shown only once.
  3. 3Make sure your wallet has available balance. Chat and image generation both consume credit.
  4. 4Install the latest stable Cherry Studio release. Choose arm64.dmg on Apple Silicon Macs or setup.exe on Windows. Do not install a nightly build or run from source.
Do not choose GitHub sign-in or CherryIN

GitHub authorization is only for Copilot. On the first-run screen, choose the white “Configure other providers” button, not the black “Connect CherryIN” button. ArgoLink only needs your own API key.

Add the ArgoLink provider

  1. 1On first launch, choose “Configure other providers.” If you already skipped setup, open the lower-left gear and go to Settings → Model Providers.
  2. 2Click “Add Provider” to open the custom-provider dialog.
  3. 3Enter the values below, save, and enable the provider with the switch on its right.
FieldValue
Provider nameArgoLink
API keyYOUR_API_KEY
Endpoint settings → OpenAIhttps://54-151-42-83.sslip.io/v1
Cherry Studio's endpoint must include /v1

After saving, the displayed request path should be https://54-151-42-83.sslip.io/v1/chat/completions. This differs from Infinite Canvas, where you enter only the root origin.

Fill every endpoint field

Open “More settings / Add endpoint” and use the values below. All four OpenAI-compatible fields share the same Base URL; leave Gemini blank.

FieldValue
OpenAI (default)https://54-151-42-83.sslip.io/v1
OpenAI Responseshttps://54-151-42-83.sslip.io/v1
Image Generation Base URLhttps://54-151-42-83.sslip.io/v1
Image Editing Base URLhttps://54-151-42-83.sslip.io/v1
GeminiLeave blank

Fetch and add models

Click “Fetch model list.” Cherry Studio reads the public GET https://54-151-42-83.sslip.io/v1/models endpoint without an API key. In the returned list, click the “+” beside each model you want to add to this provider.

Catalog categoryHow to identify itCherry endpoint type
Chatcategory=chat, or another default text modelOpenAI
Imagecategory=image, or an ID containing image, imagine-image, or bananaImage Generation (OpenAI)
Videocategory=video, or an ID containing video or omniNo matching Cherry workflow; do not test it as chat
Always use the live model catalog

Models can be added, removed, or renamed, so do not save a fixed list. The human-readable catalog is on Models & Pricing; machine-readable categories are available at GET /api/catalog/v1/models?page_size=100. If an image model is not set to “Image Generation (OpenAI),” the drawing page will report no available models.

Test the connection and choose defaults

  1. 1Click “Test” beside the API key and select only one currently available chat model. Do not choose “Test all models.”
  2. 2A green “Passed” result confirms the URL, key, and network. Image models being marked “Skipped” is normal.
  3. 3Open Settings → Default Models and choose one chat model and one image model from the live catalog.

Start chatting and generating images

Chat

  1. 1Return to the main chat screen and find the ArgoLink group in the model selector.
  2. 2Choose any chat model in that group, enter a message, and send it.

Image generation

  1. 1Click “+” at the top of the main screen and open Drawing.
  2. 2Choose ArgoLink as the provider, then select an image model whose endpoint type is “Image Generation (OpenAI).”
  3. 3Enter a prompt and click Generate. Some models require the prompt itself to include 1:1, 16:9, or 9:16.
Example prompt
A sliced red apple on a dark wooden table, soft morning side light, shallow depth of field, 1:1 composition, no text, no watermark
Use Infinite Canvas for video

Cherry Studio custom providers currently focus on chat and OpenAI image generation and do not expose a matching ArgoLink video-job workflow. Do not test video models as image or chat models. Use Infinite Canvas instead; both clients can share the same key.

Troubleshooting

The chat model list is much shorter than the website catalog.
Click “Fetch model list,” then click “+” beside every model you need. Always treat the live endpoint and pricing page as the current catalog.
Many tests are red. Is the Base URL wrong?
First check whether one selected chat model shows a green “Passed” result. If it does, the key, URL, and network work. If an individual model fails, choose another currently available chat model instead of changing the Base URL.
No models appear on the drawing page.
Confirm that the image model was added, the provider is enabled, and the model endpoint type is “Image Generation (OpenAI).”
The client says the balance is insufficient.
Top up in the ArgoLink console first; do not keep changing the endpoint.
Can I post the key in a group chat or include it in a screenshot?
No. Store the full key only in trusted local clients. Never publish it, paste it into a group chat, or include it in a screenshot.

Endpoints Cherry Studio calls

GET/v1/models
POST/v1/chat/completions
POST/v1/responses
POST/v1/images/generations
POST/v1/images/edits

The authorization header is Authorization: Bearer <API Key>. Video submissions use POST /v1/videos/generations, but require a client with a video-job workflow.

Let local Codex help with installation

For assisted setup, give this page to a local Codex task and explicitly ask it to install the latest stable GitHub release, add the ArgoLink custom provider, fetch the live catalog, and test only one chat model. Provide your API key only inside a trusted local task that you control; never place the full key in public tasks, group chats, or screenshots.

Next steps

  • Infinite Canvas — use chat, image, and video models
  • GPT Image — image API parameters
  • FAQ — troubleshoot common connection issues
Infinite Canvas setup guide·OpenAI protocol

Configuration & model usage

Add ArgoLink as an OpenAI provider in Infinite Canvas to use text, image, and video models from the canvas.

Before you start

  1. 1Create and sign in to your ArgoLink account, then make sure the wallet has available balance.
  2. 2Create an API key in the console, copy it, and store it safely.
  3. 3Open the model provider settings in Infinite Canvas and add a custom provider.

Provider configuration

FieldValue
NameArgoLink
ProtocolOpenAI
Base URLhttps://54-151-42-83.sslip.io
API keyYOUR_API_KEY
Do not append /v1 to the Base URL

Infinite Canvas appends /v1 itself. Adding it manually duplicates the path and makes the connection fail.

Sync and select models

Save the provider, then refresh its model list. ArgoLink's public model discovery endpoint does not require an API key. If the client still shows a stale list, reload the provider first; manually entering a model ID is only a fallback for a stale client cache.

Use caseRecommended model ID
Textgpt-5.6-sol
Image generation / editinggpt-image-2
Fast GPT Image 2.5 generation / editinggpt-image-2.5-flare
Precision GPT Image 2.5 generation / editinggpt-image-2.5-sunburst
Fast image generation / editingnano-banana-2-lite
High-quality image generation / editingnano-banana-2
Professional image generation / editingnano-banana-pro
Fast Grok image generationgrok-imagine-image
Current Grok image generation / editinggrok-imagine-image-2.0
Quality Grok image generation / editinggrok-imagine-image-quality
Videogemini-omni-1.1
Videogrok-imagine-video-1.5

Use models on the canvas

  1. 1Create the matching text, image, or video node and select the ArgoLink provider.
  2. 2Select a model and enter the prompt. For reference-image editing, connect the image to a model node that supports edits.
  3. 3Submit the task and wait for the result. Image and video generation usually take longer than text requests.

Related endpoints

GET/v1/models
POST/v1/images/generations
POST/v1/images/edits
POST/v1/videos/generations
GET/v1/videos/{id}
GET/v1/videos/{id}/content

Next steps

  • GPT Image — image request parameters
  • Nano Banana — the three image models and their parameters
  • Grok Video 1.5 — the asynchronous video workflow
  • FAQ — connection and timeout troubleshooting
Media APIs·OpenAI Images

GPT Image

Supports GPT Image 2, GPT Image 2.5 Flare and GPT Image 2.5 Sunburst for text-to-image, image-to-image and reference-image edits. Image requests are usually slower than text — give your client a longer timeout.

POST/v1/images/generations
POST/v1/images/edits

Text to image (JSON)

bash
curl -sS --max-time 600 \
  https://54-151-42-83.sslip.io/v1/images/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "A red apple on a wooden table, square 1:1 composition",
    "quality": "auto",
    "n": 1,
    "response_format": "b64_json"
  }' \
  -o image-response.json

Resolution and aspect ratio

Put the actual pixel dimensions in size and spell out the desired aspect ratio in the prompt. Billing uses the returned image's longest edge: up to 1024 is 1K, 1025–2048 is 2K, and above 2048 is 4K. 2K and 4K image generation may take longer; wait for the request to complete. Use these billing-conformant examples:

Tiersize exampleAspect ratio
1K1024x10241:1
2K2048x115216:9
4K3840x216016:9
JSON fragment
{
  "model": "gpt-image-2",
  "prompt": "A cinematic landscape, 16:9 composition",
  "size": "3840x2160",
  "quality": "auto",
  "n": 1,
  "response_format": "url"
}

Reference-image edit (JSON or multipart, 1–16 images)

Use JSON when your references are public HTTPS URLs or data URLs. Use multipart when the files are local. Choose one request-body format per request.

bash
curl -sS --max-time 600 \
  https://54-151-42-83.sslip.io/v1/images/edits \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "model=gpt-image-2" \
  -F "prompt=Combine the references into one cyberpunk scene, keep the subjects and use a square 1:1 composition" \
  -F "image[]=@./reference-1.png" \
  -F "image[]=@./reference-2.png" \
  -F "image[]=@./reference-3.png" \
  -F "quality=auto" \
  -F "n=1" \
  -F "response_format=b64_json" \
  -o image-edit-response.json
JSON edit
curl -sS --max-time 600 \
  https://54-151-42-83.sslip.io/v1/images/edits \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "images": [
      {"image_url": "https://example.com/reference-1.png"},
      {"image_url": "https://example.com/reference-2.png"}
    ],
    "prompt": "Keep the subjects and change the background",
    "size": "1024x1024",
    "quality": "auto",
    "n": 1,
    "response_format": "b64_json"
  }' \
  -o image-edit-json-response.json
Note
  • JSON edits use an images array with one image_url object per reference. Use a public HTTPS URL or a data URL. Multipart edits repeat one image[] field per local file; do not join multiple paths into one field.
  • The current GPT Image route needs the desired aspect ratio spelled out in the prompt, e.g. 1:1, 16:9 or 9:16. Put actual pixel dimensions in size; do not make 1K, 2K, 4K or ratio the value. 1024x1024, 2560x1440 and 3840x2160 are verified request examples, but 2560x1440 is billed as 4K because its longest edge is above 2048. Check the returned pixels when an exact size matters.
  • GPT Image edits accept up to 16 reference images per request. An optional mask follows the same body format: use mask.image_url in JSON or a mask file in multipart.
  • n accepts 1–7 and requests multiple results; use the response as the final result count. Every returned image appears in data[].b64_json or data[].url and is billed individually, so a larger n also increases time, response size and cost.
  • GPT Image 2, GPT Image 2.5 Flare and Sunburst use the same image endpoints and request parameters. For quality, use the documented values auto, low, medium or high.

Next steps

Media APIs·Google Images

Nano Banana

All three models use the same OpenAI Images-compatible endpoints for text-to-image and single-reference edits. Treat the live Models & Pricing catalog as the source of truth for availability and price.

POST/v1/images/generations
POST/v1/images/edits

Choose a model

Model IDPositioningRecommended use
nano-banana-2-liteFast and cost-efficientPreviews, batch drafts, and everyday edits
nano-banana-2High qualityProduction image generation and reference edits
nano-banana-proProfessionalFinal assets with higher quality requirements

Text to image (JSON)

bash
curl -sS --max-time 600 \
  https://54-151-42-83.sslip.io/v1/images/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana-2",
    "prompt": "A cinematic product photo of a green glass bottle on stone",
    "aspect_ratio": "4:3",
    "n": 1,
    "output_format": "jpeg"
  }' \
  -o nano-banana-response.json

Single-reference edit (multipart)

bash
curl -sS --max-time 600 \
  https://54-151-42-83.sslip.io/v1/images/edits \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "model=nano-banana-2" \
  -F "prompt=Keep the subject and replace the background with a quiet Japanese garden" \
  -F "image[]=@./reference.png" \
  -F "aspect_ratio=4:3" \
  -F "n=1" \
  -F "output_format=jpeg" \
  -o nano-banana-edit-response.json

Save the returned image

bash
jq -r '.data[0].b64_json' nano-banana-response.json \
  | base64 --decode > nano-banana.jpg
Parameter limits
  • aspect_ratio supports 1:1, 16:9, 4:3, 3:4, and 9:16; the default is 1:1.
  • n supports 1–4. When seed is present, n must be 1.
  • Reference editing currently accepts exactly one image and returns JPEG output.
  • Prices can vary by model and resolution. Check the live pricing catalog before sending a request; examples in this guide are not quotes.

Next steps

Media APIs·xAI Imagine

Grok Image

Use the same ArgoLink key for Grok image generation and reference editing. JSON edits accept up to 3 image references; the current multipart edit surface accepts one local file per request.

POST/v1/images/generations
POST/v1/images/edits

Text to image (JSON)

bash
curl -sS --fail-with-body --max-time 600 \
  https://54-151-42-83.sslip.io/v1/images/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "grok-imagine-image-2.0",
    "prompt": "A cinematic spacecraft leaving a Martian canyon",
    "aspect_ratio": "16:9",
    "resolution": "2k",
    "n": 1,
    "response_format": "url"
  }' \
  -o grok-image-response.json

Inspect the response and download the first image

bash
RESPONSE=grok-image-response.json

jq . "$RESPONSE"
URL=$(jq -er '.data[0].url' "$RESPONSE") || exit 1
curl -fL "$URL" -o grok-image.png

Reference-image edit (JSON, up to 3 images)

bash
curl -sS --fail-with-body --max-time 600 \
  https://54-151-42-83.sslip.io/v1/images/edits \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "grok-imagine-image-2.0",
    "prompt": "Combine the subjects into one cinematic cyberpunk scene",
    "images": [
      {"type": "image_url", "image_url": {"url": "https://example.com/reference-1.png"}},
      {"type": "image_url", "image_url": {"url": "https://example.com/reference-2.png"}},
      {"type": "image_url", "image_url": {"url": "https://example.com/reference-3.png"}}
    ],
    "aspect_ratio": "4:3",
    "resolution": "2k",
    "n": 1,
    "response_format": "b64_json"
  }' \
  -o grok-image-edit-response.json

Reference-image edit (multipart, one local image)

bash
curl -sS --fail-with-body --max-time 600 \
  https://54-151-42-83.sslip.io/v1/images/edits \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "model=grok-imagine-image-2.0" \
  -F "prompt=Combine the subject into one cinematic cyberpunk scene" \
  -F "image=@./reference-1.png" \
  -o grok-image-edit-response.json
Note
  • grok-imagine-image, grok-imagine-image-2.0, and grok-imagine-image-quality expose both /v1/images/generations and /v1/images/edits.
  • JSON edits use one images[].image_url object per reference and currently accept up to 3 references. Multipart edits currently accept one local image file per request.
  • Use aspect_ratio for the 15 supported ratios plus auto; resolution accepts 1k or 2k. n accepts 1–10, and every returned image is billed individually.
  • quality is documented on grok-imagine-image-2.0 with low, medium, and auto. The grok-imagine-image-quality route selects quality through the model ID.
  • The default response returns temporary data[].url links — download them promptly. Use JSON with response_format set to b64_json when you need inline image data.

Next steps

Media APIs·xAI Imagine

Grok Video 1.5

Video generation is asynchronous: submit a job, poll its status when needed, then let the protected content endpoint wait and download the MP4 for you.

POST/v1/videos/generations
GET /v1/videos/{id} and GET /v1/videos/{id}/content

Billed by output second

ResolutionArgoLink priceVersus official
480p$0.064 / secondSave 20%
720p$0.112 / secondSave 20%
1080p$0.20 / secondSave 20%

Charges use the resolution and output seconds of a successfully generated video. First-frame and reference images currently have no separate image surcharge; failed or expired jobs incur no video charge. The live catalog remains the final price source.

Step 1: submit a text-to-video job

bash
API_KEY="YOUR_API_KEY"
BASE="https://54-151-42-83.sslip.io"

ID=$(curl -fsS "$BASE/v1/videos/generations" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "grok-imagine-video-1.5",
    "prompt": "A cinematic spacecraft leaving a Martian canyon",
    "duration": 10,
    "aspect_ratio": "16:9",
    "resolution": "720p"
  }' \
  | jq -er '.request_id') || exit 1

printf 'Request ID: %s\n' "$ID"

Step 2: poll the job status

bash
curl -fsS "$BASE/v1/videos/$ID" \
  -H "Authorization: Bearer $API_KEY" | jq .

Step 3: wait automatically and download the MP4

bash
curl -fSL --retry 120 --retry-delay 5 --retry-all-errors \
  "$BASE/v1/videos/$ID/content" \
  -H "Authorization: Bearer $API_KEY" \
  -o grok-video.mp4
Tip

pending means still generating; done means the video is ready; failed or expired means the job did not finish — check the upstream error in the full status response. The download command retries every 5 seconds for up to about 10 minutes and never saves an HTTP error body as an MP4.

Image to video (1 local first-frame image)

bash
base64 < ./reference.png | tr -d '\n' | \
jq -Rs '{
  model: "grok-imagine-video-1.5",
  prompt: "Animate this still image with a slow cinematic camera move",
  image: {url: ("data:image/png;base64," + .)},
  duration: 10,
  resolution: "720p"
}' > grok-video-request.json

curl -sS --fail-with-body \
  https://54-151-42-83.sslip.io/v1/videos/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  --data-binary @grok-video-request.json | jq .

image accepts one public HTTPS URL, base64 data URI or file_id, and uses it as the first frame. Once you have the request_id, reuse the status and content endpoints above.

Multi-reference video (JSON, 1–7 images)

bash
curl -sS --fail-with-body \
  https://54-151-42-83.sslip.io/v1/videos/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "grok-imagine-video-1.5",
    "prompt": "Use the person from <IMAGE_0> and the clothing from <IMAGE_1>",
    "reference_images": [
      {"url": "https://example.com/person.png"},
      {"url": "https://example.com/clothing.png"}
    ],
    "duration": 10,
    "aspect_ratio": "16:9",
    "resolution": "720p"
  }' | jq .
Note
  • reference_images accepts 1–7 public URLs, base64 data URIs or file_ids; they guide the video content without locking the first frame. Multi-reference mode supports up to 720p.
  • image and reference_images cannot be combined. Durations of 1–15 seconds are supported; aspect ratios 1:1, 16:9, 9:16, 4:3, 3:4, 3:2 and 2:3; text-to-video and image-to-video support 480p, 720p and 1080p.

Next steps

  • Gemini Omni — Google video generation
  • FAQ — troubleshoot request issues
Media APIs·ByteDance Seed

Seedance 2.0 / 2.0 Mini / 2.0 Fast / 2.5

Text-to-video, first frame, first + last frame and multimodal reference (any mix of images, videos and audio as references) on one asynchronous endpoint. Local files are uploaded straight to object storage first; the generation request itself only carries HTTPS URLs, and the prompt names assets as image 1, video 1 and audio 1 (or @Image 1).

POST/v1/media/uploads
POST/v1/videos/generations
GET /v1/videos/{id} and GET /v1/videos/{id}/content

Models

ModelDurationResolutionReference limitsUse it for
seedance-2.54–30 s480p · 720p · 1080p≤30 images, ≤10 videos, ≤10 audios, ≤50 assets in total; audio-only references acceptedLongest clips, largest reference sets, best consistency
seedance-2.04–15 s720p · 1080p · 4K≤9 images, ≤3 videos, ≤3 audios, ≤12 assets in total; at least one image or videoHighest quality in the 2.0 family, the only 4K route
seedance-2.0-mini4–15 s720pSame as seedance-2.0Lowest rate, batches and drafts
seedance-2.0-fast4–15 s720pSame as seedance-2.0Fastest turnaround, previews

Output is a 24 fps H.264 MP4 with a model-generated AAC stereo audio track (44.1 kHz) that cannot currently be turned off. Every request produces exactly one video (n must be 1 or omitted). At 720p, 16:9 renders 1280×720 and 1:1 renders 960×960. Generation usually takes a few minutes and longer when the queue is busy, so always poll instead of assuming a deadline. Seedance 2.0, 2.0 Mini and 2.0 Fast do not support real human faces: a first frame or reference image showing a real person's face may fail to generate.

Billed by output second

Model480p720p1080p4KVersus official
seedance-2.5$0.078 / second$0.17 / second$0.43 / second25% off
seedance-2.0$0.11 / second$0.28 / second$0.58 / second25% off
seedance-2.0-mini$0.057 / second25% off
seedance-2.0-fast$0.091 / second25% off

Price = per-second rate for the model and resolution × billed seconds: the seconds of the delivered video (its real length rounded to whole seconds) plus the seconds of any reference videos (their lengths added up, with any part of a second left off). "Official" is the BytePlus ModelArk list price for a 16:9 clip without video input, converted to a per-second amount; ArgoLink charges 75% of it, rounded to two significant figures. The input mode (text, first frame, first + last frame, reference images or audio) does not change the rate, and uploads are free. Reference videos are billed at the same per-second rate as the output; reference images and audio are free. Failed or expired jobs are not charged. If duration is omitted the job runs and bills as 5 seconds. Examples: a 10-second 720p seedance-2.0 clip costs $1.10; a 4-second 720p seedance-2.0-mini clip costs $0.228; a 5-second 720p seedance-2.0 clip with a 3-second reference video bills 8 seconds, $0.88. The live catalog on the model pages remains the final price source.

Request fields

FieldTypeRules
modelstring, requiredseedance-2.5, seedance-2.0, seedance-2.0-mini or seedance-2.0-fast
promptstringUTF-8, at most 40,000 bytes. Required for text-to-video; optional when any image, video or audio is supplied. Describe camera motion, subject action and mood. In multimodal reference mode, name an asset by type and number, the same way official Seedance prompts do: image 1 is the first item in reference_images and image 2 the second; video 1 and audio 1 work the same way, counting each array from 1. image 1, @Image 1, @image1, <image1> the Chinese 图片1 and the same words in other languages (imagen 1, Bild 1, 画像1, 이미지1) are all recognized. For example, with two reference images: “the person in image 1 walks into the scene in image 2”. Naming is optional: references you do not name are still used. With @ or brackets, a number past the end of its array is rejected with 400.
durationintegerWhole seconds. 4–15 for the 2.0 family, 4–30 for 2.5. Default 5.
resolutionstring720p (default). seedance-2.0 also accepts 1080p and 4k; seedance-2.5 accepts 480p, 720p and 1080p. Other combinations are rejected.
aspect_ratiostring16:9 (default), 9:16, 1:1, 4:3, 3:4 or 21:9, for text-to-video and multimodal reference, which reject adaptive. First-frame and first + last-frame videos take their ratio from the first frame: the closest of the six above, so the frame is cropped as little as possible. Leave the field out there; adaptive or any listed value is accepted and set aside. ratio is an accepted alias; do not send both.
sizestringPixels instead of resolution + aspect_ratio, written WIDTHxHEIGHT: the short side picks the resolution (480 → 480p, 720 → 720p, 1080 → 1080p, 2160 → 4k) and the shape picks the aspect ratio it is within 3% of. 1280x720 is 720p 16:9, 720x1280 is 720p 9:16 and 720x720 is 720p 1:1. It picks a tier and a ratio, not exact pixels: the video renders at that tier's size for the ratio (720p 1:1 renders 960×960). A resolution or aspect_ratio sent with it must match, or the request is rejected with 400. A resolution name such as 720p also works.
start_imageobject{"url": "https://…"}. First frame of the video. Cannot be combined with any reference list.
end_imageobjectLast frame. Requires start_image and must land on the same aspect ratio as the first frame; otherwise the job fails with invalid_input and nothing is charged.
reference_imagesarray of objects[{"url": "https://…"}, …]. Subject, style or scene references (multimodal reference); the first frame is not locked.
reference_videosarray of objectsMotion, camera or scene references: 2–15.4 s each and 15.4 s together on the 2.0 family, 1.8–30.2 s each and 30.2 s together on 2.5. Their length is added to the billed seconds.
reference_audiosarray of objectsTiming and lip-motion references. The 2.0 family needs at least one image or video alongside them; 2.5 accepts audio on its own.
nintegerOnly 1.
seed, watermark, generate_audioNot supported: any seed, watermark: true or generate_audio: true is rejected. The output always carries an audio track; generate_audio: false does not make it silent.
Media fields take HTTPS URLs only

Every url must be a public https:// address. Base64 data URIs, multipart uploads and file_id values are rejected on this endpoint. For local files use POST /v1/media/uploads below and pass the returned media_url. Formats, lengths and sizes per asset are listed under Reference limits below. The whole JSON body must stay under 1 MiB.

Field names from other video APIs

Requests written for fal or OpenRouter can be sent as they are: every name in the right column means the field on its left. Give each input one name. Two names for the same input with different values, or frame_images / input_references together with the fields they stand for, are rejected with 400.

FieldAlso accepted
start_imageimage_url (a URL string), or a frame_images item with "frame_type": "first_frame"
end_imageend_image_url, or a frame_images item with "frame_type": "last_frame"
reference_imagesimage_urls (URL strings), or input_references items of type image_url
reference_videosvideo_urls, or input_references items of type video_url
reference_audiosaudio_urls, or input_references items of type audio_url
resolution + aspect_ratiosize in pixels, such as 1280x720
duration · aspect_ratioseconds · ratio
json · OpenRouter field names
{
  "model": "seedance-2.5",
  "prompt": "The person in image 1 walks into the scene in video 1",
  "size": "1280x720",
  "duration": 5,
  "input_references": [
    {"type": "image_url", "image_url": {"url": "https://example.com/person.png"}},
    {"type": "video_url", "video_url": {"url": "https://example.com/scene.mp4"}}
  ]
}

Inside input_references, images, videos and audio are numbered separately in the order they appear: the first image_url item is image 1 and the first video_url item is video 1.

Input modes

The mode is derived from which media fields are present — there is no mode parameter:

ModeSendNotes
First + last framestart_image + end_imageThe first frame sets the ratio; the last frame must land on the same one
First framestart_imageThe first frame sets the ratio
Multimodal referenceany mix of reference_images, reference_videos and reference_audiosImages only, videos only and image + video + audio are all this one mode; name assets in the prompt as image N, video N and audio N (or @Image N)
Text to videono mediaprompt required

start_image/end_image and the three reference lists are mutually exclusive. Asset counts above the model's limit, @ mentions past the end of an array, and resolutions or durations outside the model's range are rejected with 400 at submission, before generation starts.

Reference limits

The three kinds of reference combine freely within the model's per-kind and total caps.

ModelImagesVideosAudioTotalAudio only
seedance-2.0 · 2.0-mini · 2.0-fast≤9≤3≤3≤12Not accepted: add at least one image or video
seedance-2.5≤30≤10≤10≤50Accepted

On the 2.0 family, 9 images + 3 videos or 9 images + 3 audio clips fit, but 9 images + 3 videos + 3 audio clips is 15 assets, over the total, and is rejected with 400.

Each asset2.0 · 2.0 Mini · 2.0 Fast2.5
ImageJPEG or PNG, ≤20 MiBJPEG or PNG, ≤20 MiB; 300–6000 px per side; width/height 0.4–2.5
Video2–15.4 s each, ≤15.4 s combined; 200–2160 px per side; ≤50 MBMP4 or MOV; 1.8–30.2 s each, ≤30.2 s combined; 300–6000 px per side, 409,600–8,295,044 pixels; width/height 0.4–2.5; 24–60 fps; ≤100 MiB
Audio2–15 s each, ≤15 s combined; ≤15 MBWAV or MP3; 1.8–30.2 s each, ≤30.2 s combined; ≤15 MB

Asset counts and media types are checked when you submit. Reference video and audio lengths are checked after upload, before generation starts: a clip out of range fails the job with invalid_input and nothing is charged. Assets outside the size or format ranges can make the job fail.

Step 0: upload local files (only when you have them)

Ask for an upload ticket, PUT the bytes directly to the returned storage URL, then use media_url in the generation request. Sub2API never proxies file bytes, so large videos do not hit the 1 MiB JSON limit.

typecontent_typeMax size
imageimage/jpeg, image/png (tickets also accept image/webp, but Seedance generation takes JPEG and PNG only)20 MiB
videovideo/mp4, video/quicktime, video/webm500 MiB per ticket; see Reference limits for Seedance
audioaudio/mpeg, audio/wav, audio/mp4 (m4a), audio/aac20 MiB
bash
API_KEY="YOUR_API_KEY"
BASE="https://54-151-42-83.sslip.io"
FILE=./first-frame.jpg

TICKET=$(curl -fsS "$BASE/v1/media/uploads" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"model\":\"seedance-2.5\",\"type\":\"image\",\"content_type\":\"image/jpeg\",\"size_bytes\":$(stat -f%z "$FILE")}")

curl -fsS -X PUT "$(jq -r .upload_url <<<"$TICKET")" \
  -H "Content-Type: image/jpeg" --data-binary @"$FILE"

MEDIA_URL=$(jq -r .media_url <<<"$TICKET")

The ticket returns upload_url (valid 15 minutes, PUT with exactly the declared Content-Type), media_url (readable for 7 days) and the matching upload_expires_at / expires_at timestamps. size_bytes must equal the real file size. Tickets are free and do not create a job. On Linux use stat -c%s.

Step 1: submit a text-to-video job

bash
ID=$(curl -fsS "$BASE/v1/videos/generations" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2.5",
    "prompt": "A golden retriever runs along a sunlit beach, slow-motion, camera tracking sideways, cinematic",
    "duration": 8,
    "aspect_ratio": "16:9",
    "resolution": "720p"
  }' \
  | jq -er '.request_id') || exit 1

printf 'Request ID: %s\n' "$ID"

A successful submission returns HTTP 202 with {"request_id": "…"}. Keep it — it is the only handle for status, download and billing records.

Step 2: poll the job status

bash
curl -fsS "$BASE/v1/videos/$ID" \
  -H "Authorization: Bearer $API_KEY" | jq .
json · pending
{
  "request_id": "e9a36267-5a81-46ee-87a1-baf62bec7e9a",
  "status": "pending",
  "model": "seedance-2.5",
  "created_at": 1789379975,
  "progress": 37,
  "estimated_seconds_remaining": 128
}
json · done
{
  "created_at": 1789379975,
  "model": "seedance-2.5",
  "progress": 100,
  "request_id": "e9a36267-5a81-46ee-87a1-baf62bec7e9a",
  "status": "done",
  "usage": { "billed_seconds": 8, "output_seconds": 8, "reference_video_seconds": 0 },
  "video": { "duration": 8, "url": "https://54-151-42-83.sslip.io/v1/videos/e9a36267-5a81-46ee-87a1-baf62bec7e9a/content" }
}

Poll every 10–15 seconds. pending means still generating: progress (0–99) estimates how far the job has come and estimated_seconds_remaining how many seconds are left, both worked out from the forecast of the job's queue and generation time. Until that forecast exists progress is 0 and there is no estimated_seconds_remaining; a job that runs past its forecast stays at 99 until it finishes. created_at is the submission time in Unix seconds. done means the MP4 is ready: progress is 100 and video.url is the full download address, the content endpoint from Step 3, requested with the same key; usage gives the output seconds, the reference video seconds and their sum, billed_seconds; failed or expired means nothing was produced and nothing is charged. On failed the error object gives the reason and whether a plain retry can succeed; see Job failures below. A job that finds no capacity within 10 minutes ends with capacity_unavailable; once generation has started the job waits for its result, and ends with generation_timeout only if it is still unfinished after 24 hours. Billing happens once, when done is first observed, using usage.billed_seconds.

Step 3: wait automatically and download the MP4

bash
curl -fSL --retry 120 --retry-delay 5 --retry-all-errors \
  "$BASE/v1/videos/$ID/content" \
  -H "Authorization: Bearer $API_KEY" \
  -o seedance.mp4

The content endpoint streams the finished MP4 (video/mp4, Range supported) and returns an error status while the job is still pending, so the retry loop above waits up to about 10 minutes without saving an error body as a video.

First frame (seedance-2.0-mini, 5 seconds, 720p)

bash
curl -fsS "$BASE/v1/videos/generations" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2.0-mini",
    "prompt": "The logo floats in space; a green lightning bolt strikes it, sparks burst, camera pushes in slowly",
    "start_image": {"url": "'"$MEDIA_URL"'"},
    "duration": 5,
    "resolution": "720p"
  }' | jq .

The video takes its ratio from the first frame, so no aspect_ratio is needed: a square frame renders at 960×960. This exact request bills 5 × $0.057 = $0.285.

First + last frame (seedance-2.0, 4K)

bash
curl -fsS "$BASE/v1/videos/generations" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2.0",
    "prompt": "Day turns into night over the same skyline, clouds roll by, lights come on",
    "start_image": {"url": "https://example.com/day.jpg"},
    "end_image": {"url": "https://example.com/night.jpg"},
    "duration": 6,
    "resolution": "4k"
  }' | jq .

Both frames must land on one aspect ratio, which the video uses too; a mismatched pair fails with invalid_input on end_image and nothing is charged. This 6-second 4K request bills 6 × $0.58 = $3.48.

Multimodal reference: image + video + audio (seedance-2.5)

bash
curl -fsS "$BASE/v1/videos/generations" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2.5",
    "prompt": "The woman in @Image 1 speaks warmly to the camera in time with @Audio 1, moving the way @Video 1 does, natural lip movement, soft studio light",
    "reference_images": [{"url": "https://example.com/portrait.jpg"}],
    "reference_videos": [{"url": "https://example.com/motion.mp4"}],
    "reference_audios": [{"url": "https://example.com/voice.mp3"}],
    "duration": 4,
    "aspect_ratio": "9:16",
    "resolution": "720p"
  }' | jq .
Note
  • Sending only reference_images or only reference_videos is also a multimodal reference, under the same rules.
  • 2.5 takes at most 30 images, 10 videos and 10 audios, 50 assets in total; the 2.0 family takes 12 in total and needs at least one image or video.
  • The result always carries a model-generated audio track. To use your own sound, replace the track after downloading.
  • Reference video length is added to the billed seconds: with a 3-second reference video, the 4-second 720p example above bills 7 seconds, 7 × $0.17 = $1.19.

Errors

Errors on submit, status and download come back as an HTTP status with the body {"error": {"type": "…", "code": "…", "param": "…", "message": "…"}}: message is a reason you can show, param names the request field at fault, and code is stable.

HTTPerror.typeerror.codeCause
400invalid_request_errorfield_invalid, json_invalid, …The request itself is malformed: a field of the wrong type, neither prompt nor media, end_image alone, first-frame fields mixed with reference lists, a non-HTTPS media URL and so on. Nothing is charged.
400invalid_request_errorrequest_unsupportedThe model does not accept this combination: resolution, duration, aspect ratio, seed, generate_audio: true, asset counts, audio-only references on the 2.0 family, or an @ mention past the end of an array. message names which, for example seedance-2.0-mini accepts resolution 720p. Nothing is charged.
401authentication_errorMissing or invalid API key.
402 / 403Insufficient balance, or the key's group has no video permission.
404not_found_errorvideo_request_not_foundStatus or content requested for an unknown request_id, or with a key that belongs to a different user.
409invalid_request_errorjob_video_not_readyThe video is not finished yet; request the same URL again shortly.
424invalid_request_errorjob_failedThe job being downloaded failed; its status carries the reason in error.
429rate_limit_errorConcurrency or rate limit reached; retry after the running jobs finish.
503overloaded_errorno_capacityNo capacity right now; retry after Retry-After. Nothing is charged.
503api_errorThe service is temporarily unavailable; retry later. Nothing is charged.

Job failures

A submitted job can still fail while it generates. Its status then reads "status": "failed" with an error object: code is a stable failure code, message gives the exact reason, retryable is true when the failure consumed no generation and submitting the same request again is safe, and false when the same request cannot succeed or the outcome could not be confirmed; input problems also carry field. Failed jobs are not charged.

json · failed
{
  "request_id": "639e6b9e-26eb-43a6-917a-958adcf4bca2",
  "status": "failed",
  "model": "seedance-2.0-mini",
  "error": {
    "code": "invalid_input",
    "message": "start_image is 1920x1080, which renders at 16:9, but end_image is 1024x1024, which renders at 1:1. Both frames must render at the same aspect ratio.",
    "retryable": false,
    "field": "end_image"
  }
}
error.coderetryableMeaning and what to do
invalid_inputfalseAn input cannot be used, and message says which and why: an asset could not be downloaded (with the HTTP status), is not the declared kind, is not PNG/JPEG, is over the size limit, or the first and last frames render at different ratios (both sizes and ratios are named). Fix field and submit again.
content_policy_violationfalseThe request or the generated result did not pass content review; change the prompt or the references.
copyright_violationtrueThe generated result, such as its audio track, matched copyrighted material and was withheld. Nothing was consumed, and submitting again or rewording the prompt usually succeeds.
generation_failedtrue / falseGeneration failed. true when the failure was confirmed or the request never reached generation, so submitting again is safe; false when the outcome could not be confirmed.
generation_timeoutfalseGeneration started but had no result after 24 hours, and the job was ended.
capacity_unavailabletrueNo capacity became available within 10 minutes of queueing; submit again later.
internal_errortrueThe service failed before generation started; submit again.
cancelledfalseThe job was cancelled.

Next steps

  • Videos — the shared asynchronous job contract
  • Grok Video 1.5 — xAI video generation
  • FAQ — troubleshoot request issues
Media APIs·Google Flow

Gemini Omni

ArgoLink's public model ID is gemini-omni-1.1. It is our stable Google Flow route name; other Omni or preview IDs belong to different provider APIs and their parameters must not be mixed.

POST/v1/videos/generations

Step 1: submit a text-to-video job

bash
API_KEY="YOUR_API_KEY"
BASE="https://54-151-42-83.sslip.io"

ID=$(curl -fsS "$BASE/v1/videos/generations" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-omni-1.1",
    "prompt": "A cinematic sunrise over the ocean with a slow camera push",
    "duration": 8,
    "aspect_ratio": "16:9",
    "resolution": "720p"
  }' \
  | jq -er '.request_id') || exit 1

printf 'Request ID: %s\n' "$ID"

Step 2: poll the job status

bash
curl -fsS "$BASE/v1/videos/$ID" \
  -H "Authorization: Bearer $API_KEY" | jq .

Step 3: wait automatically and download the MP4

bash
curl -fSL --retry 120 --retry-delay 5 --retry-all-errors \
  "$BASE/v1/videos/$ID/content" \
  -H "Authorization: Bearer $API_KEY" \
  -o gemini-omni.mp4
Tip

pending means still generating; done means the MP4 is ready; failed means this generation did not finish — check the upstream error in the full status response. The download command retries every 5 seconds for up to about 10 minutes.

Image to video (1 local first-frame image)

bash
curl -sS --fail-with-body \
  https://54-151-42-83.sslip.io/v1/videos/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "model=gemini-omni-1.1" \
  -F "prompt=Animate this first frame with a slow cinematic camera move" \
  -F "duration=8" \
  -F "aspect_ratio=16:9" \
  -F "resolution=720p" \
  -F "image=@./first-frame.jpg;type=image/jpeg" | jq .

image accepts exactly one local PNG or JPEG and locks it as the first frame. Once you have the request_id, reuse the status and content endpoints above.

Multi-reference video (multipart, 1–5 images)

bash
curl -sS --fail-with-body \
  https://54-151-42-83.sslip.io/v1/videos/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "model=gemini-omni-1.1" \
  -F "prompt=Use the person and wardrobe from the reference images" \
  -F "duration=8" \
  -F "aspect_ratio=9:16" \
  -F "resolution=720p" \
  -F "reference_images=@./person.png;type=image/png" \
  -F "reference_images=@./wardrobe.jpg;type=image/jpeg" | jq .
Note
  • When uploading 1–5 local PNG or JPEG images, repeat the reference_images field inside the same multipart request; each image must stay under 5 MiB and 25 megapixels.
  • duration, aspect_ratio and resolution are required. Only durations of 4, 6, 8 or 10 seconds are supported; only 16:9 and 9:16 aspect ratios; only 720p and 1080p resolutions. Each request generates exactly one video, so n can only be 1; image and reference_images cannot be combined.
  • 720p and 1080p are billed at the same per-request price shown on the pricing page. 1080p runs a second render pass after the base generation, so it takes longer; if that re-render fails the job fails — it never silently falls back to 720p.

Next steps

  • FAQ — troubleshoot request issues
  • Quickstart — review the onboarding flow
Help

FAQ

Requests return 401 Unauthorized
Check the Authorization: Bearer header and make sure the key was copied in full; you can recreate keys on the API Keys page at any time.
Model not found or no permission
Model names follow the live list on the pricing page. You can also query the public GET /v1/models endpoint without an API key; before inference, still confirm that your key's group can access the model.
Top-up has not arrived
Crediting is driven by verified PayPal payment notifications and usually completes within seconds; if an order stays pending, check its status on the wallet page — pending orders can be cancelled and retried.
Image or video requests time out
Generation requests are slower than text — raise your client timeout to 600 seconds; the video API is asynchronous, so submit first and poll the status as shown in the video chapters.

Next steps

Welcome Builders

Before you register

Please confirm the following before creating an account.

  • This service is not open to individuals, organizations, or the public in Mainland China, which here does not include the Hong Kong SAR, the Macao SAR, or Taiwan.
  • You are not in a restricted region, are not acting for a restricted user, and will not bypass this restriction with a VPN, a proxy, false details, or registration or payment by another party.
  • You will follow the laws where you are located and the rules of our upstream providers.

Request a Refund

Submit a request and review its status in Top-up Orders.

Complete your contact info

Optional — it helps us reach you for support and events. Fill in at least one; you can change them anytime.

Fill in at least 1 · submitting with all fields empty is not possible 0 / 0