Skip to content

Silico Grove API Integration Guide ​

Integrate text, image, video, and audio capabilities through the endpoint matching each feature. Preserve request field names exactly.

ItemValue
Primary Base URLhttps://ai.silicogrove.com/v1
Backup Base URLhttps://api.silicogrove.com/v1 when the primary domain is unavailable
AuthenticationAuthorization: Bearer YOUR_API_KEY
JSON requestsContent-Type: application/json
File uploadsmultipart/form-data

Start with Quick start, then confirm access in Models and access.

Quick Start ​

  1. Create and securely store an API key in the console.
  2. List the models available to that key.
  3. Send requests to the matching capability endpoint.

Do not duplicate the Base URL

The OpenAI SDK base_url includes /v1. Do not append /v1 again when composing complete endpoint URLs. The backup address requires client-side failover configuration.

List available models ​

bash
curl -X GET "https://ai.silicogrove.com/v1/models" \
  -H "Authorization: Bearer YOUR_API_KEY"

Minimal text request ​

bash
curl -X POST "https://ai.silicogrove.com/v1/chat/completions" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-5.4-mini","messages":[{"role":"user","content":"Hello, reply in one sentence."}]}'

Python OpenAI SDK ​

python
from openai import OpenAI

client = OpenAI(api_key="YOUR_API_KEY", base_url="https://ai.silicogrove.com/v1")
response = client.chat.completions.create(
    model="gpt-5.4-mini",
    messages=[{"role": "user", "content": "Hello, reply in one sentence."}],
)
print(response.choices[0].message.content)

Models and Access ​

Available models depend on your account, group, and API key permissions. Treat GET /v1/models as the source of truth.

CapabilityTypical modelsEndpoint
Textgpt-5.4-mini, Claude, Gemini/v1/chat/completions
Imagesgpt-image-2, Gemini image models, grok-imagine-imageSync /v1/images/generations; async /v1/images/tasks
VideoRecommended: grok-video-1.5 (only 6, 8, 10, 12, or 15 seconds), kling-video-v3, video-ds-2.0, as-sd2.0-fast; grok-imagine-video, grok-imagine-video-1.5 (currently unavailable)/v1/videos
AudioCheck the returned model list/v1/audio/*

Text ​

Chat Completions ​

bash
curl -X POST "https://ai.silicogrove.com/v1/chat/completions" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-5.4-mini","messages":[{"role":"system","content":"You are a concise assistant."},{"role":"user","content":"Write a product introduction."}],"stream":false}'

Responses API ​

bash
curl -X POST "https://ai.silicogrove.com/v1/responses" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-5.4-mini","input":"Introduce yourself in one sentence."}'

Images ​

List models with your API key before use; its GET /v1/models response is the source of truth.

bash
curl "https://ai.silicogrove.com/v1/models" \
  -H "Authorization: Bearer YOUR_API_KEY"
ModelGenerateEditOpenAI image APINative Gemini API
gpt-image-2YesYesYesNo
gpt-image-2-allDepends on visibility in /v1/modelsDepends on upstreamYesNo
gemini-3-pro-imageYesYesYesYes
gemini-3.1-flash-imageYesYesYesYes
gemini-3-pro-image-previewYesYesYesYes
gemini-3.1-flash-image-previewYesYesYesYes
gemini-2.5-flash-imageYesYesYesYes
grok-imagine-image, grok-imagine-image-proDepends on visibility in /v1/modelsDepends on upstreamYesNo

Use https://ai.silicogrove.com as the primary Base URL and https://api.silicogrove.com as an explicit backup. All requests use Authorization: Bearer YOUR_API_KEY.

OpenAI-compatible generation ​

This interface works with gpt-image-2 and Gemini image models.

bash
curl "https://ai.silicogrove.com/v1/images/generations" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "A premium product poster, realistic photography, clean background",
    "size": "1024x1024",
    "quality": "high",
    "n": 1,
    "response_format": "url"
  }'

Gemini model example:

bash
curl "https://ai.silicogrove.com/v1/images/generations" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3.1-flash-image",
    "prompt": "A 16:9 neon city in the rain at night",
    "size": "1792x1024",
    "quality": "2k",
    "n": 1,
    "response_format": "url"
  }'

OpenAI-compatible editing ​

Use multipart form data. Do not set Content-Type manually; curl or your SDK must generate the multipart boundary.

bash
curl "https://ai.silicogrove.com/v1/images/edits" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "model=gpt-image-2" \
  -F "prompt=Keep the subject and change the background to a city at night" \
  -F "image=@/path/to/input.png" \
  -F "size=1024x1024" \
  -F "quality=high" \
  -F "n=1"

For Gemini, change model to gemini-3.1-flash-image and use quality=2k.

Supported input formats are PNG, JPG, JPEG, and WebP. The playground currently accepts one reference image per request, up to 10 MB.

OpenAI image parameters ​

The gateway accepts the common fields below. Individual models may support only a subset; an upstream may ignore or reject unsupported values. Treat /v1/models and the model's actual response as authoritative.

FieldTypeRequiredCommon values or limitsDescription
modelstringYesFrom GET /v1/modelsImage model name.
promptstringYesNatural-language textGeneration or editing instruction.
nintegerNo1 to 10; default 1Number of images. Gemini image models require 1; other models may impose lower limits.
sizestringNoCommon: 1024x1024, 1536x1024, 1024x1536, 1792x1024, 1024x1792Size or aspect-ratio mapping is model-dependent. DALL-E models enforce narrower enums.
qualitystringNoCommon: auto, low, medium, high, standard, hd, 1k, 2k, 4kQuality or output-resolution tier. Upstream case sensitivity may differ.
response_formatstringNourl, b64_jsonDesired synchronous response. Async tasks always return a persisted URL.
backgroundstringNoauto, opaque, transparentBackground mode; model-dependent.
output_formatstringNopng, jpeg, webpOutput file format; model-dependent.
output_compressionintegerNoUsually 0 to 100JPEG/WebP compression quality; model-dependent.
stylestringNoCommon: vivid, naturalStyle option; model-dependent.
moderationstringNoCommon: auto, lowModeration level; model-dependent.
streambooleanNotrue, falseRequests a streamed synchronous response. Async tasks require false or omission.
image, image[]file or model-supported JSON URL/valueFor editingPNG, JPEG, WebP; multipart file limit 10 MBReference image. Async multipart files are persisted before worker execution.
maskfile or model-supported JSON URL/valueNoUsually PNGEdit mask; model-dependent.
input_fidelitystringNoCommon: low, highReference-image fidelity; model-dependent.

With curl -F, do not set Content-Type manually. Send scalar multipart values such as n and output_compression as text form fields.

OpenAI-compatible response ​

When R2 upload succeeds, a URL is returned:

json
{"created":1786192453,"data":[{"url":"https://file.lunadownload.com/temporary/2026/08/12/uuid.png"}]}

If R2 is not configured or upload fails, the response contains b64_json instead:

json
{"created":1786192453,"data":[{"b64_json":"iVBORw0KGgo..."}]}
FieldTypeDescription
createdintegerImage creation timestamp returned by the provider.
dataarrayImage result list.
data[].urlstringR2 or provider image URL. The URL may be periodically removed.
data[].b64_jsonstringBase64 image, normally present only for synchronous requests when R2 rewriting is unavailable.
data[].revised_promptstringProvider-revised prompt; returned only by some models.

Temporary image URLs

Images returned through file.lunadownload.com are temporary and periodically removed. Download and store generated files promptly.

Asynchronous image tasks ​

Use the asynchronous API when generation may exceed client or reverse-proxy timeouts. Submission immediately returns a task ID; a background worker calls the provider and persists the result to R2. Existing synchronous endpoints remain unchanged.

OperationEndpointRequest format
Async generationPOST /v1/images/tasksJSON without image, images, or mask
Async editingPOST /v1/images/tasksMultipart file upload, or JSON containing image fields
Retrieve taskGET /v1/images/tasks/{task_id}GET

R2 storage must be enabled for async tasks, and stream: true is unsupported. Multipart reference images are limited to 10 MB each. A task becomes completed only after its output is persisted to R2. Provider or storage failures mark it failed and refund the pre-consumed quota.

Async generation ​

bash
curl -X POST "https://ai.silicogrove.com/v1/images/tasks" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "A premium product poster in a realistic photography style",
    "size": "1024x1024",
    "quality": "high",
    "n": 1
  }'

Async editing ​

bash
curl -X POST "https://ai.silicogrove.com/v1/images/tasks" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "model=gpt-image-2" \
  -F "prompt=Keep the subject and change the background to a city at night" \
  -F "image=@/path/to/input.png" \
  -F "size=1024x1024" \
  -F "quality=high" \
  -F "n=1"

Submission response ​

A successful submission returns HTTP 202 Accepted:

json
{
  "id": "task_0123456789abcdef",
  "object": "image.task",
  "status": "queued",
  "progress": "0%",
  "created_at": 1786192453,
  "started_at": 0,
  "completed_at": 0
}

Retrieve and poll ​

bash
curl "https://ai.silicogrove.com/v1/images/tasks/task_0123456789abcdef" \
  -H "Authorization: Bearer YOUR_API_KEY"

Only the user who created a task can retrieve it. Poll every 2 to 5 seconds; avoid high-frequency concurrent polling.

FieldTypePresent whenDescription
idstringAlwaysPublic task ID in task_... format.
objectstringAlwaysAlways image.task.
statusstringAlwaysqueued, processing, completed, or failed.
progressstringAlwaysPercentage string such as 0%, 10%, or 100%.
created_atintegerAlwaysTask submission Unix timestamp.
started_atintegerAlwaysExecution start Unix timestamp, or 0 before execution.
completed_atintegerAlwaysTerminal Unix timestamp, or 0 before completion.
createdintegerSuccessCreation timestamp from the image result.
dataarraySuccessImage results; read the output from data[].url.
error.messagestringFailureTask failure reason.
error.typestringFailureCurrently image_task_failed.
statusMeaningTerminal
queuedWaiting for a workerNo
processingCalling the provider or storing outputNo
completedFinished; data[].url is availableYes
failedFailed; inspect errorYes

Completed response:

json
{
  "id": "task_0123456789abcdef",
  "object": "image.task",
  "status": "completed",
  "progress": "100%",
  "created_at": 1786192453,
  "started_at": 1786192455,
  "completed_at": 1786192550,
  "created": 1786192548,
  "data": [{"url": "https://file.lunadownload.com/temporary/2026/08/12/uuid.png"}]
}

Failed response:

json
{
  "id": "task_0123456789abcdef",
  "object": "image.task",
  "status": "failed",
  "progress": "100%",
  "created_at": 1786192453,
  "started_at": 1786192455,
  "completed_at": 1786192550,
  "error": {"message": "upstream request failed", "type": "image_task_failed"}
}

Async HTTP status codes ​

StatusScenario
202Task created.
400Invalid parameters, multipart file, n, or stream.
403API key, quota, group, or model access denied.
404Task is absent, has a different type, or belongs to another user.
429Request or model concurrency limit reached.
503R2 storage required by async tasks is not configured or available.

Submission or retrieval failures that occur before a task response use this error envelope:

json
{
  "error": {
    "message": "R2 storage is required for asynchronous image tasks",
    "type": "storage_unavailable",
    "code": "storage_unavailable"
  }
}

There is currently no /v1/images/tasks/{task_id}/content endpoint. Download data[].url from the completed response directly.

Native Gemini generation ​

This interface is only for Gemini image models. gpt-image-2 does not support it.

bash
curl "https://ai.silicogrove.com/v1beta/models/gemini-3.1-flash-image:generateContent" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [{"role":"user","parts":[{"text":"Generate a 16:9 neon city in the rain at night"}]}],
    "generationConfig": {
      "responseModalities": ["TEXT", "IMAGE"],
      "imageConfig": {"aspectRatio":"16:9","imageSize":"2K"}
    }
  }'

Native Gemini editing ​

Gemini has no separate native editing endpoint. Send the reference image as inlineData to the same generateContent endpoint.

bash
IMAGE_B64=$(base64 < input.png | tr -d '\n')

curl "https://ai.silicogrove.com/v1beta/models/gemini-3.1-flash-image:generateContent" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{
    \"contents\":[{\"role\":\"user\",\"parts\":[
      {\"text\":\"Keep the subject and change the background to a city at night\"},
      {\"inlineData\":{\"mimeType\":\"image/png\",\"data\":\"${IMAGE_B64}\"}}
    ]}],
    \"generationConfig\":{\"responseModalities\":[\"TEXT\",\"IMAGE\"],\"imageConfig\":{\"aspectRatio\":\"1:1\",\"imageSize\":\"2K\"}}
  }"

When R2 upload succeeds, generated media appears as fileData.fileUri; otherwise Gemini returns the original inlineData base64 payload.

Parameter mapping for Gemini models ​

OpenAI image parameterNative Gemini field
promptcontents[].parts[].text
image filecontents[].parts[].inlineData
size: 1024x1024aspectRatio: 1:1
size: 1792x1024aspectRatio: 16:9
size: 1024x1792aspectRatio: 9:16
size: 1536x1024aspectRatio: 3:2
size: 1024x1536aspectRatio: 2:3
quality: auto, fast, or 1kimageSize: 1K
quality: high, hd, or 2kimageSize: 2K
quality: 4kimageSize: 4K

Gemini image models currently generate one image per request: set n to 1.

Use the OpenAI-compatible endpoints for standard clients and relay integrations:

text
POST /v1/images/generations
POST /v1/images/edits
POST /v1/images/tasks
GET /v1/images/tasks/{task_id}

Use POST /v1beta/models/{model}:generateContent only when you need the complete Gemini request format, multimodal contents, or the Gemini SDK.

Video ​

Video generation is asynchronous. Submit to POST /v1/videos, retain the returned task ID, then poll GET /v1/videos/{task_id} until the task reaches a terminal state. Video models must not be sent to /v1/chat/completions.

Available models depend on the API key and group. Call GET /v1/models before presenting model choices to end users.

ModelDurationResolution
grok-video-1.515 seconds by default; 6, 8, 10, 12, or 15 seconds when specifiedOptional; 720p recommended

grok-video-1.5 supports text-to-video, a single reference image, and multiple reference images (up to 7). The three examples below use the same endpoint; add image_urls when reference images are needed.

WARNING

When seconds is omitted, the request generates a 15-second video by default. When specified, seconds must be the string "6", "8", "10", "12", or "15". Sending "4" or any other value returns: seconds must be one of: 6, 8, 10, 12, 15.

Other supported Kling V3 models ​

ModelDurationResolutionBilling
kling-video-v33-15 seconds720p, 1080p, 4kPer second and selected resolution
kling-video-v3-omni3-15 seconds720p, 1080p, 4kPer second and selected resolution
kling-video-v3-turbo3-15 seconds720p, 1080pPer second and selected resolution

Send resolution as a top-level field in Kling create requests. Do not use the image-generation quality field for video resolution. The effective price is determined when the task is submitted, so do not rely on a fixed documented amount.

Grok Video 1.5 examples ​

Every example uses POST /v1/videos, Authorization: Bearer YOUR_API_KEY, and Content-Type: application/json.

1. Text to video ​

bash
curl -X POST "https://ai.silicogrove.com/v1/videos" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "grok-video-1.5",
    "prompt": "A cinematic sunrise over a futuristic coastal city, slow aerial camera movement",
    "seconds": "15",
    "aspect_ratio": "16:9",
    "resolution": "720p"
  }'

2. One reference image ​

json
{
  "model": "grok-video-1.5",
  "prompt": "Rotate the product smoothly in soft studio lighting, as a clean premium commercial",
  "seconds": "10",
  "aspect_ratio": "9:16",
  "resolution": "720p",
  "image_urls": ["https://example.com/product.png"]
}

3. Multiple reference images ​

json
{
  "model": "grok-video-1.5",
  "prompt": "Create a coherent product showcase using these references, with cinematic camera movement and premium commercial lighting",
  "seconds": "15",
  "aspect_ratio": "16:9",
  "resolution": "720p",
  "image_urls": [
    "https://example.com/product-front.png",
    "https://example.com/product-detail.png"
  ]
}

The response includes a public id or task_id. Store that value; do not use an upstream task ID obtained from another API response.

json
{
  "id": "task_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "object": "video",
  "status": "queued"
}

This example uses the recommended grok-video-1.5 model to create a 15-second text-to-video task. A successful create request returns an asynchronous task. Store task_id, then use Poll a task to retrieve progress and output.

json
{
  "id": "task_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "task_id": "task_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "object": "video.generation",
  "model": "grok-video-1.5",
  "status": "queued",
  "progress": 0,
  "created_at": 1786869597,
  "result": {}
}

Reference assets ​

Use public HTTPS URLs or complete data: URLs such as data:image/png;base64,.... Do not send a local file path or bare base64 bytes. Local files can be uploaded through Reference assets first.

image_urls is the preferred field. images is accepted for compatibility. Send only one of them. reference_images and input_reference: {"image_url":"..."} are also accepted for integrations that use those names; do not combine reference_images and input_reference in one request.

Request fields ​

FieldRequiredDescription
modelYesA video model available to the API key.
promptYesDescribe the subject, motion, camera, visual style, and composition.
secondsNoRequested duration as a string. When omitted, grok-video-1.5 defaults to 15 seconds. When specified, it accepts only "6", "8", "10", "12", or "15".
aspect_ratioNo16:9, 9:16, or 1:1.
resolutionRequired for Kling V3; optional for Grok720p is recommended for Grok. Kling supports 480p, 720p, 1080p, or 4k, subject to the selected model. Send it as a top-level field; do not use quality as a replacement.
image_urlsNoPreferred array of up to 7 reference image URLs or complete data URLs.
imagesNoCompatibility alias for image_urls; do not send both.
imageNogrok-imagine-video-1.5 first-frame mode only. A single image URL or complete data URL. Do not combine with reference_images.
reference_imagesNoCompatibility array of reference images; do not combine with input_reference.
input_referenceNoCompatibility single-image form: { "image_url": "https://..." }.

The older video-ds-* models support images, videos, and audios. Their media limits are 4 images, 3 videos, and 1 audio file.

Poll a task ​

bash
curl -X GET "https://ai.silicogrove.com/v1/videos/TASK_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

Treat queued and in_progress as non-terminal. completed means the video is available; failed means generation ended unsuccessfully. Poll no more frequently than once every 5 seconds, and retain the task ID if a client-side timeout is reached.

Download the completed video ​

bash
curl -L "https://ai.silicogrove.com/v1/videos/TASK_ID/content" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  --output result.mp4

The service may return a signed result URL internally. It is temporary and should be downloaded promptly. Use the content endpoint above rather than reconstructing an upstream URL, task ID, domain, or signature.

Security and reliability recommendations ​

API keys and callers ​

  • Store API keys only in server-side environment variables or a secrets manager. Browsers, mobile apps, and public frontend code must not hold long-lived keys.
  • Use separate API keys per application or purpose. A compromised key can then be revoked without interrupting unrelated workloads.
  • After creating a task, persist both your local business identifier and the returned task_id for polling, reconciliation, and retry control.

Reference assets and downloads ​

  • Reference URLs must be safely reachable by the video service. Do not provide private-network IP addresses, administrative endpoints, cloud credential URLs, or local file paths.
  • After completion, download videos through the authenticated /content endpoint rather than exposing temporary result URLs long term.
  • Create a replacement task only after the existing task explicitly returns failed. Continue polling the same task_id while it is queued or in_progress to prevent duplicate generations and charges.

Grok Imagine models (currently unavailable) ​

WARNING

grok-imagine-video and grok-imagine-video-1.5 are currently unavailable and must not be used for production requests. This section is retained as a historical parameter reference; use the active Kling models above.

ModelGeneration modesDurationResolution
grok-imagine-videoText to videoModel-dependentModel-dependent
grok-imagine-video-1.5Text to video, first-frame image to video, reference-image video4, 6, 8, 10, 12, or 15 secondsText and first-frame: 480p, 720p, 1080p; reference images: up to 720p

grok-imagine-video-1.5 has two mutually exclusive image modes: first-frame mode accepts one image URL; reference-image mode accepts 1-7 reference_images URLs and uses <IMAGE_1>, <IMAGE_2>, and similar placeholders in the prompt. Do not send image, images, image_urls, or input_reference with reference_images. Reference-image mode is limited to 720p.

Historical request example:

json
{
  "model": "grok-imagine-video-1.5",
  "prompt": "The person from <IMAGE_1> walks through a city street in a cinematic commercial shot",
  "reference_images": ["https://example.com/person.jpg"],
  "seconds": "8",
  "aspect_ratio": "16:9",
  "resolution": "720p"
}

Reference Assets ​

Upload local images, videos, and audio to the temporary asset endpoint. The returned data.url can be placed in a video request's images, videos, or audios array.

Temporary files are periodically removed

Uploaded assets and generated results are temporary. Their URLs may expire during periodic cleanup. Download and store required files promptly; do not treat returned URLs as permanent storage.

bash
# Image
curl -X POST "https://ai.silicogrove.com/pg/assets" -H "Authorization: Bearer YOUR_API_KEY" -F "kind=image" -F "file=@/path/to/ref.jpg"

# Video
curl -X POST "https://ai.silicogrove.com/pg/assets" -H "Authorization: Bearer YOUR_API_KEY" -F "kind=video" -F "file=@/path/to/ref.mp4"

# Audio
curl -X POST "https://ai.silicogrove.com/pg/assets" -H "Authorization: Bearer YOUR_API_KEY" -F "kind=audio" -F "file=@/path/to/ref.mp3"

Response example ​

json
{"success":true,"data":{"kind":"image","url":"https://file.lunadownload.com/temporary/2026/08/11/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.jpg","filename":"ref.jpg","content_type":"image/jpeg","size":123456}}
kindFormatsMaximum file size
imagejpg, png, webp10 MiB
videomp4, mov, webm100 MiB
audiomp3, m4a, wav, aac, ogg, webm20 MiB

Audio ​

Speech synthesis ​

bash
curl -X POST "https://ai.silicogrove.com/v1/audio/speech" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"YOUR_TTS_MODEL","input":"Welcome to Silico Grove API.","voice":"alloy","response_format":"mp3"}' \
  --output speech.mp3

Transcription and translation ​

bash
curl -X POST "https://ai.silicogrove.com/v1/audio/transcriptions" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "model=YOUR_STT_MODEL" \
  -F "file=@/path/to/audio.mp3" \
  -F "response_format=json"

curl -X POST "https://ai.silicogrove.com/v1/audio/translations" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "model=YOUR_STT_MODEL" \
  -F "file=@/path/to/audio.mp3" \
  -F "response_format=json"

Transcription and translation are multipart requests. The file field is file.

Troubleshooting ​

SymptomLikely causeResolution
Model unavailableThe model and group do not match, or the key lacks permission.Call /v1/models with the same key to confirm the model name.
model is requiredA relay renamed the field.Preserve model; do not change it to model_name.
Video fails or enters a chat modelThe request was sent to a chat endpoint.Call POST /v1/videos.
Reference asset has no effectA local path was sent, or the value was not an array.Send public URLs in images, videos, or audios.
Invalid seconds typeThe duration was sent as a number.Use a string, such as "seconds": "15".
Upload failsWrong content type or file field name.Use -F and name the file field file.

When reporting an issue, include request time, model, endpoint, group, request ID, and the error response. Do not share API keys, authorization headers, or sensitive prompts.

Relay Integrations ​

  • Use https://ai.silicogrove.com or https://ai.silicogrove.com/v1 as the primary upstream, depending on whether your relay adds /v1 automatically.
  • The backup upstream is https://api.silicogrove.com or https://api.silicogrove.com/v1; configure failover in the relay.
  • Synchronize /v1/models with a Silico Grove API key rather than entering unavailable models manually.
  • Video models must stay on /v1/videos; do not add them to a chat model pool.
  • Preserve the images, videos, and audios arrays when forwarding video requests.
  • Image editing and audio transcription are multipart requests; do not lose their file fields during forwarding.
  • Submit asynchronous images to POST /v1/images/tasks and poll GET /v1/images/tasks/{task_id}; do not wrap an asynchronous task as a synchronous image response.