AI Video APIAI Video API


Gemini 3.1 Pro

Google Gemini 3.1 Pro — multimodal model exposed via the OpenAI-compatible /v1/chat/completions endpoint. Supports text, image, video, audio, and PDF input with Google Search grounding and streaming.

Model

Model NameContext WindowReasoning
gemini-3.1-pro1M tokensYes (reasoning_effort controls effort)

Pricing

Per-token billing:

TypeCredits / 1M tokensPrice / 1M tokens
Input160 credits$0.80
Output960 credits$4.80

Endpoint

POST https://api.aivideoapi.ai/v1/chat/completions

OpenAI Chat Completions–compatible. Use the openai SDK with baseURL set to https://api.aivideoapi.ai/v1.

Create Chat Completion

curl -X POST https://api.aivideoapi.ai/v1/chat/completions \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3.1-pro",
    "messages": [
      { "role": "user", "content": "Hi, introduce yourself" }
    ]
  }'

Request Body

FieldTypeRequiredDescription
modelstringYesMust be gemini-3.1-pro
messagesarrayYesConversation messages
streambooleanNoEnable streaming (default: true)
toolsarrayNoTool definitions (only googleSearch supported)
include_thoughtsbooleanNoInclude reasoning thoughts (default: true)
reasoning_effortstringNolow or high (default: high)

Multimodal Messages

All media types (image / video / audio / PDF) share the same image_url structure:

{
  "role": "user",
  "content": [
    { "type": "text", "text": "What is in this image?" },
    { "type": "image_url", "image_url": { "url": "https://example.com/photo.jpg" } }
  ]
}

Response

{
  "id": "chatcmpl-20260417001546375193862M1p62g7j",
  "object": "chat.completion",
  "created": 1776356269,
  "model": "gemini-3.1-pro-preview",
  "choices": [
    {
      "index": 0,
      "finish_reason": "stop",
      "message": {
        "role": "assistant",
        "content": "Tomorrow (April 17, 2026) Shanghai weather forecast:\n\n*   **Conditions**: Mostly **cloudy to overcast**...\n*   **Temperature**: Low 13–15°C, high around 21°C..."
      }
    }
  ],
  "usage": {
    "prompt_tokens": 194,
    "completion_tokens": 229,
    "total_tokens": 880,
    "completion_tokens_details": {
      "reasoning_tokens": 457,
      "audio_tokens": 0,
      "text_tokens": 0
    }
  },
  "credits_consumed": 0.25
}
FieldTypeDescription
idstringUnique chat completion ID
objectstringAlways chat.completion
createdintCreation Unix timestamp
modelstringActual upstream model version (may carry suffixes like -preview)
choices[].message.contentstringAssistant reply text
choices[].finish_reasonstringstop / length / tool_calls etc.
usage.prompt_tokensintInput tokens
usage.completion_tokensintOutput (text) tokens
usage.completion_tokens_details.reasoning_tokensintThinking tokens (when reasoning is on)
usage.total_tokensintTotal tokens (includes reasoning)
credits_consumednumberCredits actually charged for this call (computed at this platform's rate, independent of upstream's internal value)

Billing: credits_consumed = prompt_tokens × 160/1M + completion_tokens × 960/1M. reasoning_tokens are NOT billed — they are recorded for audit only in the response, in output.usage.reasoning_tokens, and in pricing_detail.

Examples

Google Search Grounding

curl -X POST https://api.aivideoapi.ai/v1/chat/completions \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3.1-pro",
    "messages": [
      { "role": "user", "content": "Tomorrow weather forecast for Shanghai" }
    ],
    "tools": [{ "type": "function", "function": { "name": "googleSearch" } }]
  }'

Low Reasoning Effort

curl -X POST https://api.aivideoapi.ai/v1/chat/completions \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3.1-pro",
    "messages": [
      { "role": "user", "content": "What is the square root of 100?" }
    ],
    "reasoning_effort": "low"
  }'

Error Codes

When a request fails, the API returns a JSON error response:

{
  "error": {
    "code": "insufficient_credits",
    "message": "Your credit balance is too low. Please top up.",
    "type": "billing_error"
  }
}

Error Reference

HTTP StatusCodeTypeDescription
400invalid_requestinvalid_request_errorMissing or invalid parameters
401invalid_api_keyauthentication_errorAPI key is invalid, disabled, or deleted
402insufficient_creditsbilling_errorCredit balance too low, please top up
403ip_not_allowedpermission_errorRequest IP not in the key's allowlist
404model_not_foundinvalid_request_errorModel does not exist or is inactive
404task_not_foundinvalid_request_errorTask ID does not exist
429rate_limit_exceededrate_limit_errorToo many requests, please slow down
429spend_limit_exceededbilling_errorKey spend limit reached (hourly/daily/total)
500internal_errorapi_errorUnexpected server error
503upstream_errorupstream_errorUpstream AI provider returned an error

Common Scenarios

invalid_request (400)

Returned when required fields are missing or invalid.

{
  "error": {
    "code": "invalid_request",
    "message": "'model' is required.",
    "type": "invalid_request_error"
  }
}

insufficient_credits (402)

Your balance is too low. Check your balance with GET /v1/credits and top up in Dashboard > Billing.

invalid_api_key (401)

Possible causes:

  • The key does not start with sk-
  • The key has been disabled or deleted
  • The user account has been banned

upstream_error (503)

The upstream AI provider returned an error. This may happen when:

  • The input contains sensitive or prohibited content
  • The provider is temporarily unavailable
  • The request parameters are not supported by the provider

Credits are automatically refunded when a task fails due to upstream errors.