Agent API (x402)Sync routes

Sync routes

One HTTP round-trip after payment. Paths mirror Venice under /api/v1/*.

PathNotes
POST /api/v1/chat/completionsmodel, messages; optional stream. Reasoning models: see below
POST /api/v1/responsesResponses API (beta) — typed blocks may include reasoning. No mode header → Venice’s default (OpenAI models use native OpenAI mode; Venice-only extras such as web search or characters still use the translated lane). This gateway does not inject a mode header. native requires OpenAI native or HTTP 400; compat opts into Venice’s translated format. Reply x-venice-responses-lane reports the lane. Input arrays may include additional_tools items to add tools mid-conversation. Native rejects previous_response_id, stored conversations, file IDs, OpenAI-side tools like file_search / code_interpreter.
POST /api/v1/embeddingsmodel, input
POST /api/v1/image/generateVenice native image gen — JSON { id, images[], request, timing } (base64, often webp). Not raw PNG. Quantity is variants (1–4); you pay for every image requested.
POST /api/v1/images/generationsOpenAI-compatible JSON (created, data[]). Quantity is n (Venice max 1).
POST /api/v1/image/editSingle-image edit — often returns raw image/png
POST /api/v1/image/multi-editMulti-image edit (modelId); often raw PNG
POST /api/v1/image/upscaleUpscale — often raw PNG
POST /api/v1/image/background-removeNo model in body; often raw PNG
POST /api/v1/audio/speechShort TTS — often raw audio/*
POST /api/v1/audio/transcriptionsASR — multipart (model + file)
POST /api/v1/audio/voicesVoice clone — multipart: exact catalog model + sample file
POST /api/v1/video/transcriptionsRetired (HTTP 410, no charge). Use chat/completions + video_url on a supportsVideoInput model
POST /api/v1/augment/searchWeb search
POST /api/v1/augment/scrapeScrape URL
POST /api/v1/augment/text-parserParse PDF/DOCX/etc.
POST /api/v1/crypto/rpc/{network}JSON-RPC; pick network from free networks list
POST /api/v1/decisionsTyped judgments (state, model, questions, optional images 1–4 PNG/JPEG data URIs or {content_type, base64}). Catalog ?type=decision (e.g. jev-latest). Beta
POST /api/v1/systemoneAlias of /decisions for TypeSafe / SystemOne SDKs

Request bodies follow Venice / OpenAPI schemas. model must be an exact id from GET /api/v1/models (or resolved via /models/traits). Prefer the cheapest suitable model unless the user asks otherwise.

200 response shapes are recorded from live probes (outputFixtures) and stamped onto OpenAPI responses.200 / Bazaar info.output. Do not invent field names. Observed JSON (not exhaustive):

PathBody keys (live)
audio/transcriptionstext (optional duration)
audio/voicesid, model — not voice_id
augment/scrapeurl, content, format
augment/text-parsertext, tokens — not pages
video/transcriptionstranscript, lang
chat/completionsOpenAI chat envelope; thinking models may leave content empty (see below). May include venice_parameters, cost.

Edit / upscale / background-remove / audio/speech → raw binary (image/png or audio/*).

Reasoning / thinking models

Venice thinking models (e.g. GLM, Kimi including kimi-k3-1-pro which reasons at max effort by default, Claude Opus, GPT-5.4 Pro variants) may return more than choices[0].message.content:

FieldMeaning
message.contentFinal assistant text (may be "")
message.reasoning_contentChain-of-thought text when thinking is visible
message.reasoning_detailsStructured thought signatures — round-trip unchanged on the next turn for tool use

Do not treat empty content alone as failure. If reasoning_content or reasoning_details is present, the completion succeeded. With a small max_tokens / max_completion_tokens, thinking can consume the whole budget (finish_reason: "length") and leave content empty.

Controls (request venice_parameters):

ParamEffect
disable_thinking: trueSkip chain-of-thought; force a normal content reply
strip_thinking_response: trueRun thinking server-side but hide it from the client

Example — smoke / ping that always wants visible text:

{
  "model": "zai-org-glm-5-2",
  "messages": [{ "role": "user", "content": "ping" }],
  "max_tokens": 128,
  "venice_parameters": { "disable_thinking": true }
}

For long music/video/Voice Changer jobs, use the async lifecycle instead of sync TTS.

Notable request fields

  • Responses input arrays may include { "type": "additional_tools" } items to add tools mid-conversation. Optional top-level instructions, tools (function / custom with namespace / tool_search), tool_choice by name, and reasoning.summary. Image parts accept image_url.detail auto|low|high|original.
  • Image generate: quantity is variants (1–4), not OpenAI n. Charge = list unit × variants. You pay for every image requested. If Venice omits some variants for an explicit provider content-policy reject, the 200 still settles and x-venice-content-violation-count (forwarded) is the omitted count. A full-prompt 422 ImageContentViolationError (retryable, optional suggested_prompt / recommended_model) is returned unpaid (settled: false). Also: enhance_prompt, style_references (only models with supportsStyleReferences). safe_mode defaults true (turning it off does not require a Venice Pro subscription). The x-venice-is-blurred response header reports whether the returned image was blurred. Optional transparent_background (native generate/edit/multi-edit) returns an alpha channel — only models with model_spec.constraints.supportsTransparentBackground=true, and format / output_format must be png or webp. OpenAI-shaped /images/generations uses n (Venice max 1) and background: transparent | opaque | auto instead. Same unpaid 422 refusal.
  • Image edit: enhance_prompt. Same safe_mode / x-venice-is-blurred as generate. Same optional transparent_background (and output_format png/webp) as generate.
  • TTS: response_format must be in that model’s model_spec.supported_formats.
  • Video queue: prompt max is model-specific (up to 32000). Resolutions include 768p when that model’s model_spec.constraints.resolutions lists it. Swagger now lists aspect 2:1 (still only valid when that model’s model_spec.constraints.aspect_ratios includes it). Seedance 2.x reference-to-video: duration -1/auto and aspect adaptive/auto match the source; send consents when the model returns needs_consent. MiniMax H3 Max Recast (minimax-h3-max-recast) lists duration Auto only — auto / -1 are accepted. bitrate_mode is not in current Venice swagger — omit it.