Browse the docsReference

Parameters

Every tuning parameter is optional. Send one and your value is used after validation; omit it, or send null, and the deployment default applies. Omission never means “send nothing” - it means “use the default”.

ParameterDefaultAccepted rangeForwardedNotes
max_tokensinteger400001 - 40000yesThe cap equals the default, so 40000 is both the fallback and the maximum. Asking for more is a 422, not a silent clamp.
temperaturenumber00 - 2yesLeave it at 0 for extraction. Higher values make the model paraphrase fields instead of copying them.
top_pnumber--ignoredAccepted so OpenAI SDKs do not break. Has no effect.
reasoning_effortstring--ignoredAn OpenAI reasoning-tier concept that does not apply to this model.
streambooleanfalse-ignoredResponses are always returned whole. true is treated as false.
Unknown fields

Any field we do not recognise is dropped at the edge rather than rejected, so a newer OpenAI SDK will not break against this API - and arbitrary client input never reaches the model.

import os
from openai import OpenAI

API_KEY  = "Your API Key"
BASE_URL = "https://labs-api.petpooja.com/v1"
MODEL    = "chitragupta"

client = OpenAI(api_key=API_KEY, base_url=BASE_URL)

r = client.chat.completions.create(
    model=MODEL,
    messages=[{"role": "user", "content": "Extract this invoice as JSON."}],
  temperature=0,       # 0..2   (omit -> default 0)
  max_tokens=200,      # 1..40000 (omit -> default 40000)
)

Limits

Rate limits apply per API key. Everything else is a per-request structural limit, enforced at the edge before any inference is billed.

LimitOpenWorldDefault
Pages + images per request1025
Model calls per request1all pages together1 per pagerun concurrently
Your text instructionspassed textignored
Output structureBased on your promptFixed schema, tagged per page
Max tokens40,00040,000
Requests per second1010
Requests running at the same timehow many of your calls we process in parallel2020

Compress scans to JPEG before encoding - it is the single cheapest latency win available to you.

Error codes

Every failure returns the same envelope: a stable machine-readable code, a human-safe message, and the request_id to quote in a support ticket. Branch on code, never on the message text.

HTTPCodeWhat went wrongHow to fix it
401invalid_api_keyMissing, malformed, or revoked key, or an inactive account.Fix or replace the key.
402insufficient_creditsThe account is out of credits.Top up, then resend.
403permission_deniedThis key is not allowed to perform the action.Check the key's scope and workspace.
404model_not_foundUnknown model name in the request.Use chitragupta.
405method_not_allowedWrong HTTP method for this route.All completion routes are POST.
409idempotency_conflictAn Idempotency-Key was reused with a different body.Use a new key, or resend the exact original body.
413file_too_largeThe uploaded file exceeds the size limit.Compress the file before encoding.
413page_limit_exceededToo many pages and images combined.Split into smaller requests.
422invalid_requestMalformed body, or max_tokens above the cap.Fix the payload.
422system_message_not_allowedA system message was sent; the model uses a fixed prompt.Move the instruction into the user message.
422images_not_allowedAn image was sent to a text-only model.Use a vision-capable model.
429rate_limit_exceededToo many requests per second, or too many in flight on this key.Honor the Retry-After header.
429quota_exceededThe key or account hit its usage quota.Wait for the reset or raise the quota.
500internal_errorUnexpected server-side failure.Retry with exponential backoff.
502inference_failedThe model returned an invalid response.Retry once; if it persists, log the request_id.
503provider_unavailableInference capacity is temporarily unavailable.Retry with exponential backoff.
504inference_timeoutThe model took too long.Retry with backoff, or send fewer pages.
# See the request_id even on an error:
try:
    r = client.chat.completions.create(model=MODEL, messages=[{"role": "user", "content": "hi"}])
    print(r.id.replace("chatcmpl-", ""))
except Exception as e:
    print(type(e).__name__, getattr(e, "status_code", "?"), getattr(e, "body", None))