Download OpenAPI specification:
The full GlianaAI catalog, called with an API key against a prepaid balance. Send Authorization: Bearer gk_… and the cost of each call is deducted from your balance — no payment handshake, no per-call signing. Top up in rupiah and manage keys at https://dashboard.glianalabs.com. Every response carries x-gliana-charged-micro-usd and x-gliana-balance-micro-usd, so you can track spend without a second request. Prices are identical to the pay-per-call rail.
$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
One endpoint for the whole catalog: send { model, ...modelInput } — pick any model from GET /v1/models (90+ across image, video, image-to-video, text-to-speech, speech-to-text, music).
| model required | string Model id or full run id (see GET /v1/models). |
| prompt | string Most models take a text prompt; STT/some take a file/url instead. |
| property name* additional property | any |
{- "model": "grok-imagine-image",
- "prompt": "a red apple on a table"
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
Open one Tempo channel and pay many calls with off-chain vouchers; settle on close. Non-custodial — the deposit stays in the on-chain escrow.
| model required | string Model id or full run id. |
| property name* additional property | any |
{- "model": "string"
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
One endpoint for the whole catalog: send { model, ...modelInput } — pick any model from GET /v1/models (90+ across image, video, image-to-video, text-to-speech, speech-to-text, music).
| model required | string Model id or full run id (see GET /v1/models). |
| prompt | string Most models take a text prompt; STT/some take a file/url instead. |
| property name* additional property | any |
{- "model": "grok-imagine-image",
- "prompt": "a red apple on a table"
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
Capability endpoint — pick any matching model with GET /v1/models and pass it as { model }.
| model required | string Model id or full run id (see GET /v1/models). |
| property name* additional property | any |
{- "model": "wan-2.7-i2v",
- "prompt": "a timelapse of clouds over mountains"
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
Open one Tempo channel and pay many calls with off-chain vouchers; settle on close. Non-custodial — the deposit stays in the on-chain escrow.
| model required | string Model id or full run id. |
| property name* additional property | any |
{- "model": "string"
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
One endpoint for the whole catalog: send { model, ...modelInput } — pick any model from GET /v1/models (90+ across image, video, image-to-video, text-to-speech, speech-to-text, music).
| model required | string Model id or full run id (see GET /v1/models). |
| prompt | string Most models take a text prompt; STT/some take a file/url instead. |
| property name* additional property | any |
{- "model": "grok-imagine-image",
- "prompt": "a red apple on a table"
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
Capability endpoint — pick any matching model with GET /v1/models and pass it as { model }.
| model required | string Model id or full run id (see GET /v1/models). |
| property name* additional property | any |
{- "model": "music-2.6",
- "prompt": "a calm lo-fi beat"
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
Open one Tempo channel and pay many calls with off-chain vouchers; settle on close. Non-custodial — the deposit stays in the on-chain escrow.
| model required | string Model id or full run id. |
| property name* additional property | any |
{- "model": "string"
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
One endpoint for the whole catalog: send { model, ...modelInput } — pick any model from GET /v1/models (90+ across image, video, image-to-video, text-to-speech, speech-to-text, music).
| model required | string Model id or full run id (see GET /v1/models). |
| prompt | string Most models take a text prompt; STT/some take a file/url instead. |
| property name* additional property | any |
{- "model": "grok-imagine-image",
- "prompt": "a red apple on a table"
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
Capability endpoint — pick any matching model with GET /v1/models and pass it as { model }. FILE INPUT: if the audio file is already on the web or your own storage, pass audio_url — we fetch it server-side at datacenter speed, which is the fastest option by far. Sending it inline as audio_base64 is simplest and stores nothing anywhere, but base64 adds ~33% to the bytes and you pay your own upload speed, so it is best under ~1MB. For a large local file, upload the RAW bytes to POST /v1/media (free, ≤40MB) and pass the URL: same transfer as base64 minus the 33%, and identity endpoints delete the object as soon as they have read it.
| model required | string Model id or full run id (see GET /v1/models). |
| property name* additional property | any |
{- "model": "grok-stt",
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
Open one Tempo channel and pay many calls with off-chain vouchers; settle on close. Non-custodial — the deposit stays in the on-chain escrow.
| model required | string Model id or full run id. |
| property name* additional property | any |
{- "model": "string"
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
One endpoint for the whole catalog: send { model, ...modelInput } — pick any model from GET /v1/models (90+ across image, video, image-to-video, text-to-speech, speech-to-text, music).
| model required | string Model id or full run id (see GET /v1/models). |
| prompt | string Most models take a text prompt; STT/some take a file/url instead. |
| property name* additional property | any |
{- "model": "grok-imagine-image",
- "prompt": "a red apple on a table"
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
Capability endpoint — pick any matching model with GET /v1/models and pass it as { model }.
| model required | string Model id or full run id (see GET /v1/models). |
| property name* additional property | any |
{- "model": "flux-2-pro-preview",
- "prompt": "a red apple on a wooden table"
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
Open one Tempo channel and pay many calls with off-chain vouchers; settle on close. Non-custodial — the deposit stays in the on-chain escrow.
| model required | string Model id or full run id. |
| property name* additional property | any |
{- "model": "string"
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
One endpoint for the whole catalog: send { model, ...modelInput } — pick any model from GET /v1/models (90+ across image, video, image-to-video, text-to-speech, speech-to-text, music).
| model required | string Model id or full run id (see GET /v1/models). |
| prompt | string Most models take a text prompt; STT/some take a file/url instead. |
| property name* additional property | any |
{- "model": "grok-imagine-image",
- "prompt": "a red apple on a table"
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
Capability endpoint — pick any matching model with GET /v1/models and pass it as { model }.
| model required | string Model id or full run id (see GET /v1/models). |
| property name* additional property | any |
{- "model": "wan-2.7-i2v",
- "prompt": "a timelapse of clouds over mountains"
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
Open one Tempo channel and pay many calls with off-chain vouchers; settle on close. Non-custodial — the deposit stays in the on-chain escrow.
| model required | string Model id or full run id. |
| property name* additional property | any |
{- "model": "string"
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
One endpoint for the whole catalog: send { model, ...modelInput } — pick any model from GET /v1/models (90+ across image, video, image-to-video, text-to-speech, speech-to-text, music).
| model required | string Model id or full run id (see GET /v1/models). |
| prompt | string Most models take a text prompt; STT/some take a file/url instead. |
| property name* additional property | any |
{- "model": "grok-imagine-image",
- "prompt": "a red apple on a table"
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
Capability endpoint — pick any matching model with GET /v1/models and pass it as { model }.
| model required | string Model id or full run id (see GET /v1/models). |
| property name* additional property | any |
{- "model": "grok-tts",
- "input": "Hello from GlianaAI."
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
Open one Tempo channel and pay many calls with off-chain vouchers; settle on close. Non-custodial — the deposit stays in the on-chain escrow.
| model required | string Model id or full run id. |
| property name* additional property | any |
{- "model": "string"
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
One endpoint for the whole catalog: send { model, ...modelInput } — pick any model from GET /v1/models (90+ across image, video, image-to-video, text-to-speech, speech-to-text, music).
| model required | string Model id or full run id (see GET /v1/models). |
| prompt | string Most models take a text prompt; STT/some take a file/url instead. |
| property name* additional property | any |
{- "model": "grok-imagine-image",
- "prompt": "a red apple on a table"
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
Capability endpoint — pick any matching model with GET /v1/models and pass it as { model }.
| model required | string Model id or full run id (see GET /v1/models). |
| property name* additional property | any |
{- "model": "wan-2.7-i2v",
- "prompt": "a timelapse of clouds over mountains"
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
Open one Tempo channel and pay many calls with off-chain vouchers; settle on close. Non-custodial — the deposit stays in the on-chain escrow.
| model required | string Model id or full run id. |
| property name* additional property | any |
{- "model": "string"
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
One endpoint for the whole catalog: send { model, ...modelInput } — pick any model from GET /v1/models (90+ across image, video, image-to-video, text-to-speech, speech-to-text, music).
| model required | string Model id or full run id (see GET /v1/models). |
| prompt | string Most models take a text prompt; STT/some take a file/url instead. |
| property name* additional property | any |
{- "model": "grok-imagine-image",
- "prompt": "a red apple on a table"
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
Drop-in for the OpenAI chat completions API: swap the base URL, keep your SDK. Pick any text model from GET /v1/models (category "text"). Billing is a pre-charged ceiling — (estimated input tokens + max_tokens) at the model’s per-1M rates — so set max_tokens to bound spend; the response returns real usage. Supports messages (required), max_tokens, temperature, top_p, stream: true (SSE, OpenAI chunk format), tools/tool_choice (OpenAI function calling — tool_calls + role:"tool" round-trip), and vision (content parts with image_url on vision-capable models). FILE INPUT: if the image is already on the web or your own storage, pass image_url — we fetch it server-side at datacenter speed, which is the fastest option by far. Sending it inline as image_base64 is simplest and stores nothing anywhere, but base64 adds ~33% to the bytes and you pay your own upload speed, so it is best under ~1MB. For a large local file, upload the RAW bytes to POST /v1/media (free, ≤40MB) and pass the URL: same transfer as base64 minus the 33%, and identity endpoints delete the object as soon as they have read it.
| model required | string Text model id (see GET /v1/models, category "text"). |
required | Array of objects OpenAI-style chat messages: [{ role: "user"|"assistant"|"system"|"tool", content }]. |
| max_tokens | integer Output cap — bounds the pre-charged ceiling. Default 1024. |
Array of objects OpenAI function tools; response returns tool_calls. | |
| property name* additional property | any |
{- "model": "grok-4.3",
- "messages": [
- {
- "role": "user",
- "content": "Summarize x402 in one sentence."
}
], - "max_tokens": 256
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
Open one Tempo channel and pay many calls with off-chain vouchers; settle on close. Non-custodial — the deposit stays in the on-chain escrow.
| model required | string Model id or full run id. |
| property name* additional property | any |
{- "model": "string"
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
Capability endpoint — pick any matching model with GET /v1/models and pass it as { model }.
| model required | string Model id or full run id (see GET /v1/models). |
| property name* additional property | any |
{- "model": "flux-2-pro-preview",
- "prompt": "a red apple on a wooden table"
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.445550 per call, deducted from your prepaid balance. Charged only on success.
Recipe: text → image → animated video (cheapest path to a video; better subject control). Multi-model pipeline from { prompt }. Override steps with { imageModel, videoModel }; { motionPrompt, duration, resolution } tune the video. Returns each step's output + the final url.
| prompt required | string Text description of the subject/scene the pipeline should generate. |
| property name* additional property | any |
{- "prompt": "an italian-brainrot cat-shark hybrid, 3d meme",
- "motionPrompt": "it dances and spins"
}$0.844300 per call, deducted from your prepaid balance. Charged only on success.
Recipe: text → image → video with native AUDIO. Multi-model pipeline from { prompt }. Override steps with { imageModel, videoModel }; { motionPrompt, duration, resolution } tune the video. Returns each step's output + the final url.
| prompt required | string Text description of the subject/scene the pipeline should generate. |
| property name* additional property | any |
{- "prompt": "an italian-brainrot cat-shark hybrid, 3d meme",
- "motionPrompt": "it dances and spins"
}$0.470750 per call, deducted from your prepaid balance. Charged only on success.
Recipe: text → higher-fidelity image → animated video. Multi-model pipeline from { prompt }. Override steps with { imageModel, videoModel }; { motionPrompt, duration, resolution } tune the video. Returns each step's output + the final url.
| prompt required | string Text description of the subject/scene the pipeline should generate. |
| property name* additional property | any |
{- "prompt": "an italian-brainrot cat-shark hybrid, 3d meme",
- "motionPrompt": "it dances and spins"
}$0.997500 per call, deducted from your prepaid balance. Charged only on success.
Recipe: random Italian-brainrot character → animated video with audio (also the brainrot-video model). Multi-model pipeline. Override steps with { imageModel, videoModel }; { motionPrompt, duration, resolution } tune the video. Returns each step's output + the final url.
| prompt | string Text description of the subject/scene the pipeline should generate. |
| property name* additional property | any |
{- "motionPrompt": "it dances and bounces"
}$0.002000 per call, deducted from your prepaid balance. Charged only on success.
Multi-chain JSON-RPC proxy — { chain, method, params }.
| chain required | string Chain to query, e.g. base, ethereum, solana. |
| method required | string JSON-RPC method name, e.g. "eth_blockNumber". |
| params required | Array of arrays JSON-RPC parameters, as an array. |
| property name* additional property | any |
{- "chain": "base",
- "method": "eth_blockNumber",
- "params": [ ]
}{- "tool": "tools/rpc",
- "costMicroUsd": 2000,
- "chain": "base",
- "result": "0x1a2b3c"
}$0.005000 per call, deducted from your prepaid balance. Charged only on success.
Web search — { q, count?: 1-20, country?: "ID", lang?: "id" }. Returns title, url and snippet per hit, plus which upstream answered. Providers are tried in order, so one being rate-limited falls through rather than failing the call.
| q required | string The search query. |
| count required | number How many results to return. |
| property name* additional property | any |
{- "q": "x402 payment protocol",
- "count": 5
}{- "tool": "tools/search",
- "costMicroUsd": 5000,
- "query": "x402 payment protocol",
- "provider": "brave",
- "count": 2,
- "results": [
- {
- "title": "x402 — an HTTP-native payment standard",
- "snippet": "Uses HTTP 402 to attach a USDC payment to any request."
}, - {
- "title": "Paying per API call with x402",
- "snippet": "A client pays the challenge and retries the same request."
}
]
}$0.001000 per call, deducted from your prepaid balance. Charged only on success.
Text embeddings for search, clustering and RAG — { texts: ["..."] } or { text: "..." }. Up to 100 texts and 32,000 characters per call. Multilingual by default, so Indonesian and English embed into the same space and can be compared directly. Returns the model id and dimensions alongside the vectors.
| texts required | Array of arrays Array of strings to embed, one vector per entry. |
| property name* additional property | any |
{- "texts": [
- "harga tiket kereta ke Bandung",
- "train ticket price to Bandung"
]
}{- "tool": "tools/embed",
- "costMicroUsd": 1000,
- "model": "@cf/baai/bge-m3",
- "count": 2,
- "dimensions": 1024,
- "embeddings": [
- [
- 0.0121,
- -0.0334,
- 0.0087
], - [
- 0.0118,
- -0.0301,
- 0.0092
]
]
}$0.001000 per call, deducted from your prepaid balance. Charged only on success.
Safety check for user-supplied text — { text }, up to 8,000 characters. Returns flagged plus the guard model hazard categories and its raw verdict. The verdict is that model judgement, not a legal determination: treat it as a signal in your own moderation flow.
| text required | string The text to classify for unsafe content. |
| property name* additional property | any |
{- "text": "I will find where you live."
}{- "tool": "tools/moderate",
- "costMicroUsd": 1000,
- "model": "@cf/meta/llama-guard-3-8b",
- "flagged": true,
- "categories": [
- "S1"
], - "verdict": "unsafe\nS1",
- "chars": 27
}$0.002000 per call, deducted from your prepaid balance. Charged only on success.
Spot token prices — { symbols: "BTC,ETH", vs? } (CoinGecko ids also accepted via the same field or { ids }).
| symbols required | string Comma-separated ticker symbols, e.g. "BTC,ETH". |
| vs required | string Quote currency for the price, e.g. "usd". |
| property name* additional property | any |
{- "symbols": "BTC,ETH",
- "vs": "usd"
}{- "tool": "tools/token-price",
- "costMicroUsd": 2000,
- "vs": "USD",
- "prices": {
- "BTC": 68000.12,
- "ETH": 3450.5
}, - "sources": {
- "BTC": "coinbase",
- "ETH": "coinbase"
}
}$0.030000 per call, deducted from your prepaid balance. Charged only on success.
Composed market snapshot — { chain?: "base", symbols?: "BTC,ETH,SOL", protocol?: "aave" }. One request instead of four: spot prices, gas on the chain you are about to transact on (including the USD cost of a transfer), total DeFi TVL with the largest chains, and a specific protocol TVL when asked. Each section degrades independently — a dead upstream nulls its own field and is named in degraded rather than failing the brief.
| chain required | string Chain whose gas and DEX activity to include. |
| symbols required | string Comma-separated ticker symbols, e.g. "BTC,ETH". |
| property name* additional property | any |
{- "chain": "base",
- "symbols": "BTC,ETH,SOL"
}{- "tool": "tools/market-brief",
- "costMicroUsd": 30000,
- "as_of": "2026-08-07T09:00:00.000Z",
- "prices": {
- "BTC": 68000.12,
- "ETH": 1911.22,
- "SOL": 142.8
}, - "gas": {
- "chain": "base",
- "gas_price_gwei": 0.006,
- "native_symbol": "ETH",
- "transfer_cost_usd": 0.000241
}, - "defi": {
- "total_defi_tvl_usd": 78000000000,
- "top_chains": [
- {
- "chain": "Ethereum",
- "tvl_usd": 41490652984
}
]
}
}$0.010000 per call, deducted from your prepaid balance. Charged only on success.
On-chain DEX liquidity for a token — { query: "WIF" | "
| query required | string Token symbol, name or contract address to look up. |
| property name* additional property | any |
{- "query": "WIF"
}{- "tool": "tools/dex-pairs",
- "costMicroUsd": 10000,
- "query": "WIF",
- "matched": 30,
- "pairs": [
- {
- "chain": "solana",
- "dex": "raydium",
- "pair": "WIF/SOL",
- "price_usd": 0.1408,
- "liquidity_usd": 3985632.33,
- "volume_24h_usd": 77383.67,
- "price_change_24h_pct": -3.61
}
], - "source": "dexscreener"
}$0.010000 per call, deducted from your prepaid balance. Charged only on success.
Total value locked from DefiLlama — { protocol?: "aave", chain?: "Ethereum", limit? }. With a protocol: TVL, 1d/7d change, market cap and the per-chain split. With a chain: its TVL and rank. With neither: the largest chains plus the total. Borrowed and staking rows are excluded so the figure is not double-counted.
| protocol required | string DefiLlama protocol slug, e.g. "aave". |
| property name* additional property | any |
{- "protocol": "aave"
}{- "tool": "tools/defi-tvl",
- "costMicroUsd": 10000,
- "protocol": "Aave",
- "symbol": "AAVE",
- "tvl_usd": 14741707588,
- "change_1d_pct": -0.5,
- "change_7d_pct": 2.1,
- "chains": [
- {
- "chain": "Ethereum",
- "tvl_usd": 12245430563
}
], - "source": "defillama"
}$0.010000 per call, deducted from your prepaid balance. Charged only on success.
Current gas on an EVM chain — { chain: "base", gasLimit? }. Supports ethereum, base, arbitrum, optimism, bsc and polygon. Returns gas price in gwei, the priority fee where reported, and the estimated cost of a transaction in both the native token and USD. The base fee moves every block, so this is a quote.
| chain required | string Chain to query, e.g. base, ethereum, solana. |
| property name* additional property | any |
{- "chain": "base"
}{- "tool": "tools/gas-price",
- "costMicroUsd": 10000,
- "chain": "base",
- "gas_price_gwei": 0.006,
- "native_symbol": "ETH",
- "gas_limit": 21000,
- "estimated_cost_native": 1.26e-7,
- "estimated_cost_usd": 0.000241
}$0.002000 per call, deducted from your prepaid balance. Charged only on success.
Hyperliquid perpetual futures in one call — { coins?: "BTC,ETH,SOL", sort?: "volume" | "open_interest" | "funding" | "change", limit?: 1-50 }. Returns mark and oracle price, 24h change, hourly funding with its annualised rate, open interest in coins and USD, 24h volume and max leverage per market, plus not_found for requested symbols with no market. Funding is paid hourly; the annual rate is the current hour annualised, not a forecast.
| coins | string Comma-separated Hyperliquid symbols, e.g. "BTC,ETH,SOL" (up to 20). Omit for the whole market, sorted. |
| sort | string volume (default), open_interest, funding (largest absolute funding first) or change (largest absolute 24h move first). |
| limit | number How many markets to return, 1-50. Default 10. |
| property name* additional property | any |
{- "coins": "BTC,ETH,SOL",
- "sort": "volume"
}{- "tool": "tools/perp-markets",
- "costMicroUsd": 2000,
- "venue": "hyperliquid",
- "sort": "volume",
- "count": 2,
- "total_markets": 229,
- "not_found": [ ],
- "funding_interval": "1h",
- "markets": [
- {
- "coin": "BTC",
- "mark_price": 78138,
- "oracle_price": 78172,
- "change_24h_pct": 1.73,
- "funding_rate_hourly": 0.0000125,
- "funding_apr_pct": 10.95,
- "open_interest": 35698.74,
- "open_interest_usd": 2789426031,
- "volume_24h_usd": 2851954388,
- "premium": -0.000422,
- "max_leverage": 40
}, - {
- "coin": "ETH",
- "mark_price": 1912.4,
- "oracle_price": 1913.1,
- "change_24h_pct": -0.42,
- "funding_rate_hourly": 0.00001,
- "funding_apr_pct": 8.76,
- "open_interest": 412000.5,
- "open_interest_usd": 787908956,
- "volume_24h_usd": 1204433120,
- "premium": -0.00031,
- "max_leverage": 25
}
]
}$0.002000 per call, deducted from your prepaid balance. Charged only on success.
Mid-market fiat exchange rates — { from?: "USD", to?: "IDR,EUR", amount? }. Omit to for every currency. Non-USD pairs are cross-rated via USD; reference rates, not dealable quotes.
| from required | string Currency code to convert FROM, e.g. "USD". |
| to required | string Currency code(s) to convert TO — comma-separated for several, e.g. "IDR,EUR". |
| amount required | number Amount in the |
| property name* additional property | any |
{- "from": "USD",
- "to": "IDR,EUR",
- "amount": 100
}{- "tool": "tools/exchange-rate",
- "costMicroUsd": 2000,
- "base": "USD",
- "rates": {
- "IDR": 18076.9467,
- "EUR": 0.875576
}, - "amount": 100,
- "converted": {
- "IDR": 1807694.6663,
- "EUR": 87.5576
}, - "as_of": "30 Jul 2026",
- "source": "open.er-api.com",
- "note": "Mid-market reference rates, not dealable quotes."
}$0.002000 per call, deducted from your prepaid balance. Charged only on success.
Registration and DNS for a domain in one call — { domain: "example.com" | "
| domain required | string Domain to look up, e.g. "example.com". A full URL is accepted and reduced to its hostname. |
| records | Array of arrays DNS record types to resolve: any of A, AAAA, MX, NS, TXT, CNAME, CAA. Default A, AAAA, MX, NS, TXT. |
| property name* additional property | any |
{- "domain": "glianalabs.com"
}{- "tool": "tools/domain-lookup",
- "costMicroUsd": 2000,
- "domain": "glianalabs.com",
- "registered": true,
- "registration": {
- "registrar": "Cloudflare, Inc.",
- "created": "2025-09-23T00:00:00Z",
- "expires": "2027-09-23T00:00:00Z",
- "updated": "2026-08-24T00:00:00Z",
- "age_days": 357,
- "status": [
- "client transfer prohibited"
], - "nameservers": [
- "elliott.ns.cloudflare.com",
- "hera.ns.cloudflare.com"
], - "dnssec": false
}, - "dns": {
- "A": [
- "104.21.86.84",
- "172.67.217.44"
], - "MX": [
- {
- "priority": 15,
- "host": "route3.mx.cloudflare.net"
}
], - "TXT": [
- "v=spf1 include:_spf.mx.cloudflare.net ~all"
]
}, - "email": {
- "spf": "v=spf1 include:_spf.mx.cloudflare.net ~all",
- "dmarc": null,
- "dmarc_policy": null,
- "mx_count": 3
}, - "degraded": [ ],
}$0.003000 per call, deducted from your prepaid balance. Charged only on success.
Parse a messy Indonesian address into components — { address }. kabupaten_kota and provinsi are resolved from official Kepmendagri data rather than from a model, so they cannot be invented, and verified reports where the model disagreed. Returns jalan, nomor, rt, rw, kelurahan, kecamatan, kabupaten_kota, provinsi, kode_pos, the official kode with coordinates, and a confidence. kecamatan/kelurahan/kode_pos are as written and unverified.
| address required | string The free-text address to parse. |
| property name* additional property | any |
{- "address": "Jl. Merdeka No. 12 RT 03/RW 05, Gedong Air, Tanjung Karang Barat, Bandar Lampung 35152"
}{- "tool": "tools/address-id",
- "costMicroUsd": 3000,
- "input": "Jl. Merdeka No. 12 RT 03/RW 05, Gedong Air, Tanjung Karang Barat, Bandar Lampung 35152",
- "parsed": {
- "jalan": "Merdeka",
- "nomor": "12",
- "rt": "3",
- "rw": "5",
- "kelurahan": "Gedong Air",
- "kecamatan": "Tanjung Karang Barat",
- "kabupaten_kota": "Kota Bandar Lampung",
- "provinsi": "Lampung",
- "kode_pos": "35152"
}, - "wilayah": {
- "kode": "18.71",
- "kabupaten_kota": "Kota Bandar Lampung",
- "provinsi": "Lampung",
- "lat": -5.42958,
- "lng": 105.26257
}, - "verified": {
- "kabupaten_kota": true,
- "provinsi": true
}, - "confidence": "high",
- "notes": [ ]
}$0.008000 per call, deducted from your prepaid balance. Charged only on success.
Turn a product photo into ready-to-post marketplace copy — { image_url | image_base64 }. Returns title and description in BOTH Indonesian and English, plus category, condition, material, colours and search tags. Written from what is visible only: brands, sizes, materials and warranties are never inferred, and anything the photo does not show is null. Nothing is stored. FILE INPUT: if the image is already on the web or your own storage, pass image_url — we fetch it server-side at datacenter speed, which is the fastest option by far. Sending it inline as image_base64 is simplest and stores nothing anywhere, but base64 adds ~33% to the bytes and you pay your own upload speed, so it is best under ~1MB. For a large local file, upload the RAW bytes to POST /v1/media (free, ≤40MB) and pass the URL: same transfer as base64 minus the 33%, and identity endpoints delete the object as soon as they have read it.
| image_url required | string https URL of the product photo. |
| property name* additional property | any |
{
}{- "tool": "tools/product-listing",
- "costMicroUsd": 8000,
- "listing": {
- "title_id": "Tas Selempang Kulit Coklat Pria",
- "title_en": "Men's Brown Leather Crossbody Bag",
- "description_id": "Tas selempang berbahan kulit warna coklat. Terdapat tali bahu yang bisa diatur dan satu kompartemen utama dengan ritsleting.",
- "description_en": "Brown leather crossbody bag with an adjustable shoulder strap and a single zipped main compartment.",
- "category": "Bags & Luggage",
- "condition": "new",
- "material": "Leather",
- "colors": [
- "coklat",
- "brown"
], - "tags": [
- "tas selempang",
- "tas kulit",
- "crossbody bag",
- "leather bag",
- "tas pria"
]
}, - "model": "@cf/mistralai/mistral-small-3.1-24b-instruct"
}$0.005000 per call, deducted from your prepaid balance. Charged only on success.
Read an identity document (Indonesian KTP/SIM/KK/NPWP, foreign passport or driving licence) into structured JSON — { image_url | image_base64 }. Indonesian documents also get structural NIK verification (region code, encoded birth date and gender) as a confidence signal, not proof of authenticity. Nothing is stored, and no face matching is performed. FILE INPUT: if the image is already on the web or your own storage, pass image_url — we fetch it server-side at datacenter speed, which is the fastest option by far. Sending it inline as image_base64 is simplest and stores nothing anywhere, but base64 adds ~33% to the bytes and you pay your own upload speed, so it is best under ~1MB. For a large local file, upload the RAW bytes to POST /v1/media (free, ≤40MB) and pass the URL: same transfer as base64 minus the 33%, and identity endpoints delete the object as soon as they have read it.
| image_url required | string https URL of the identity document to read. |
| property name* additional property | any |
{
}{- "tool": "tools/ocr-id",
- "costMicroUsd": 5000,
- "fields": {
- "document_type": "KTP",
- "issuing_country": "INDONESIA",
- "id_number": "1871014102900002",
- "full_name": "BUDI SANTOSO",
- "birth_place": "BANDAR LAMPUNG",
- "birth_date": "01-02-1990",
- "gender": "PEREMPUAN",
- "address": "JL MERDEKA NO 12",
- "rt_rw": "003/005",
- "village": "GEDONG AIR",
- "district": "TANJUNG KARANG BARAT",
- "city": null,
- "province": null,
- "expiry_date": "SEUMUR HIDUP",
- "blood_type": "O",
- "nationality": "INDONESIA",
- "religion": "ISLAM",
- "marital_status": "BELUM MENIKAH",
- "sim_class": null
}, - "verification": {
- "ok": true,
- "format": true,
- "region": {
- "kode": "18.71",
- "kabupaten_kota": "Kota Bandar Lampung",
- "provinsi": "Lampung"
}, - "birth_date": "1990-02-01",
- "gender": "P",
- "agrees": {
- "birth_date": true,
- "gender": true
}, - "notes": [ ]
}, - "model": "@cf/mistralai/mistral-small-3.1-24b-instruct"
}$0.003000 per call, deducted from your prepaid balance. Charged only on success.
Detect faces → boxes + score + age/gender, no embeddings — { image_url | image_base64 }. FILE INPUT: if the image is already on the web or your own storage, pass image_url — we fetch it server-side at datacenter speed, which is the fastest option by far. Sending it inline as image_base64 is simplest and stores nothing anywhere, but base64 adds ~33% to the bytes and you pay your own upload speed, so it is best under ~1MB. For a large local file, upload the RAW bytes to POST /v1/media (free, ≤40MB) and pass the URL: same transfer as base64 minus the 33%, and identity endpoints delete the object as soon as they have read it.
| image_url required | string https URL of the image to read. Use image_base64 instead to send bytes inline. |
| property name* additional property | any |
{
}{- "tool": "tools/face-detect",
- "costMicroUsd": 3000
}$0.006000 per call, deducted from your prepaid balance. Charged only on success.
Detect every face → 512-d ArcFace embedding per face (+ bbox, score, age/gender) — { image_url | image_base64 }. FILE INPUT: if the image is already on the web or your own storage, pass image_url — we fetch it server-side at datacenter speed, which is the fastest option by far. Sending it inline as image_base64 is simplest and stores nothing anywhere, but base64 adds ~33% to the bytes and you pay your own upload speed, so it is best under ~1MB. For a large local file, upload the RAW bytes to POST /v1/media (free, ≤40MB) and pass the URL: same transfer as base64 minus the 33%, and identity endpoints delete the object as soon as they have read it.
| image_url required | string https URL of the image to read. Use image_base64 instead to send bytes inline. |
| property name* additional property | any |
{
}{- "tool": "tools/face-embed",
- "costMicroUsd": 6000
}$0.011000 per call, deducted from your prepaid balance. Charged only on success.
Compare two faces → cosine similarity + match — { a:{image_url|image_base64}, b:{image_url|image_base64} }. FILE INPUT: if the image is already on the web or your own storage, pass image_url — we fetch it server-side at datacenter speed, which is the fastest option by far. Sending it inline as image_base64 is simplest and stores nothing anywhere, but base64 adds ~33% to the bytes and you pay your own upload speed, so it is best under ~1MB. For a large local file, upload the RAW bytes to POST /v1/media (free, ≤40MB) and pass the URL: same transfer as base64 minus the 33%, and identity endpoints delete the object as soon as they have read it.
| a required | object First face to compare: { image_url } or { image_base64 }. |
| b required | object Second face to compare: { image_url } or { image_base64 }. |
| property name* additional property | any |
{
}{- "tool": "tools/face-compare",
- "costMicroUsd": 11000
}$0.015000 per call, deducted from your prepaid balance. Charged only on success.
Onboarding in one call: read an identity document AND compare the photo on it against a selfie — { id_image:{image_url|image_base64}, selfie:{image_url|image_base64} }. Cheaper than tools/ocr-id plus tools/face-compare separately, and the document is fetched once instead of twice. Returns { document:{fields,verification}, face:{similarity,match,threshold} } — measurements only, NO pass/fail verdict, because the threshold that matters is yours. There is no liveness check, so a photo of a photo can match: treat the result as a signal for your own decision, not proof of identity. Nothing is stored. FILE INPUT: if the image is already on the web or your own storage, pass image_url — we fetch it server-side at datacenter speed, which is the fastest option by far. Sending it inline as image_base64 is simplest and stores nothing anywhere, but base64 adds ~33% to the bytes and you pay your own upload speed, so it is best under ~1MB. For a large local file, upload the RAW bytes to POST /v1/media (free, ≤40MB) and pass the URL: same transfer as base64 minus the 33%, and identity endpoints delete the object as soon as they have read it.
| id_image required | object The identity document: { image_url } or { image_base64 }. |
| selfie required | object The selfie to match against the document: { image_url } or { image_base64 }. |
| property name* additional property | any |
{
}{- "tool": "tools/kyc-verify",
- "costMicroUsd": 15000,
- "document": {
- "fields": {
- "document_type": "KTP",
- "id_number": "1871014102900002",
- "full_name": "BUDI SANTOSO",
- "birth_date": "01-02-1990",
- "gender": "PEREMPUAN"
}, - "verification": {
- "ok": true,
- "region": {
- "kabupaten_kota": "Kota Bandar Lampung",
- "provinsi": "Lampung"
}, - "agrees": {
- "birth_date": true,
- "gender": true
}
}
}, - "face": {
- "similarity": 0.87,
- "match": true,
- "threshold": 0.35
}, - "model": "@cf/mistralai/mistral-small-3.1-24b-instruct"
}$0.010000 per call, deducted from your prepaid balance. Charged only on success.
What a US public company reported to the SEC — { ticker, concept?, limit? }. Revenue, net income, assets, liabilities, cash and shares outstanding per fiscal period, newest first, parsed from XBRL. concept narrows to one us-gaap tag. Returns company { name, ticker, cik } and facts[] with concept, unit, period, end, value and the form it came from. NOT a share price.
| ticker required | string US stock ticker, e.g. AAPL. Case-insensitive. |
| property name* additional property | any |
{- "ticker": "AAPL"
}{- "tool": "tools/stock-fundamentals",
- "costMicroUsd": 10000,
- "company": {
- "name": "Apple Inc.",
- "ticker": "AAPL",
- "cik": "0000320193"
}, - "facts": [
- {
- "concept": "Revenues",
- "unit": "USD",
- "period": "FY2025",
- "end": "2025-09-27",
- "value": 416160000000,
- "form": "10-K"
}
]
}$0.005000 per call, deducted from your prepaid balance. Charged only on success.
Source documents for a US public company — { ticker, form?, limit? }. Newest first, each with form type, filing date and a direct link. form filters to one type such as 10-K, 10-Q, 8-K or 4. Returns company { name, ticker, cik, sic } and filings[]. An empty list for a valid form is an answer, not an error.
| ticker required | string US stock ticker, e.g. AAPL. Case-insensitive. |
| form required | string Optional SEC form type to filter to, e.g. 10-K, 10-Q, 8-K, 4. Omit for all forms. |
| property name* additional property | any |
{- "ticker": "AAPL",
- "form": "10-K"
}{- "tool": "tools/stock-filings",
- "costMicroUsd": 5000,
- "company": {
- "name": "Apple Inc.",
- "ticker": "AAPL",
- "cik": "0000320193"
}, - "filings": [
- {
- "form": "10-Q",
- "filed": "2026-07-31",
}
]
}$0.012000 per call, deducted from your prepaid balance. Charged only on success.
Profile, latest reported figures and recent filings in one call — { ticker }. Replaces stock-fundamentals plus stock-filings when sizing up a company, and each section degrades on its own so a slow upstream nulls one field rather than failing the brief. Returns company, latest{} keyed by metric, and filings[]. Reported figures only, no market price.
| ticker required | string US stock ticker, e.g. AAPL. Case-insensitive. |
| property name* additional property | any |
{- "ticker": "AAPL"
}{- "tool": "tools/stock-brief",
- "costMicroUsd": 12000,
- "company": {
- "name": "Apple Inc.",
- "ticker": "AAPL",
- "cik": "0000320193",
- "sic": "Electronic Computers"
}, - "latest": {
- "Revenues": 416160000000,
- "NetIncomeLoss": 112010000000
}, - "filings": [
- {
- "form": "10-Q",
- "filed": "2026-07-31",
}
]
}$0.015000 per call, deducted from your prepaid balance. Charged only on success.
Who inside a US public company bought or sold its stock — { ticker, limit? }. Parsed from the Form 4s officers, directors and 10% owners must file. Returns trades[] with person, relationship, date, the action in words (sale, open-market purchase, grant, option exercise), shares, price per share and total value, plus the filing URL. limit is Form 4 filings read, default 5, max 20 — each is a separate fetch. Reported trades, not a signal: a Form 4 may be filed up to two business days after the trade.
| ticker required | string US stock ticker, e.g. AAPL. Case-insensitive. |
| property name* additional property | any |
{- "ticker": "AAPL"
}{- "tool": "tools/insider-trades",
- "costMicroUsd": 15000,
- "company": {
- "name": "Apple Inc.",
- "ticker": "AAPL",
- "cik": "0000320193"
}, - "trades": [
- {
- "person": "Newstead Jennifer",
- "relationship": "Officer (General Counsel)",
- "date": "2026-08-18",
- "action": "Sale",
- "code": "S",
- "shares": 1439,
- "pricePerShare": 307.49,
- "value": 442478.11,
- "security": "Common Stock",
- "filed": "2026-08-20",
}
]
}$0.005000 per call, deducted from your prepaid balance. Charged only on success.
Filings by what they say — { query, ticker?, form?, from?, to?, limit? }. query takes words, quoted phrases, OR and -exclusions; ticker narrows to one company, form to one or more types, from/to to filing dates. Returns total and filings[] with form, filed date, period, companies, the matched document and a direct link, one row per filing.
| query required | string What to find in filing text. Words, "quoted phrases", OR and -exclusions, up to 200 characters. |
| ticker | string Optional US stock ticker to search one company's filings only, e.g. AAPL. |
| form | string Optional SEC form type, or up to 5 as an array or comma list, e.g. 10-K or ["8-K", "10-Q"]. |
| from | string Optional earliest filing date, YYYY-MM-DD, 2001-01-01 or later. |
| to | string Optional latest filing date, YYYY-MM-DD. |
| limit | integer Max filings to return. Default 10, max 100. |
| property name* additional property | any |
{- "query": "\"artificial intelligence\""
}{- "tool": "tools/filing-search",
- "costMicroUsd": 5000,
- "query": "\"artificial intelligence\"",
- "total": 876,
- "totalIsLowerBound": false,
- "filings": [
- {
- "form": "8-K",
- "filed": "2026-08-26",
- "period": "2026-08-26",
- "companies": [
- {
- "name": "Artificial Intelligence Technology Solutions Inc.",
- "cik": "0001498148",
- "tickers": [
- "AITX"
]
}
], - "items": [
- {
- "code": "7.01",
- "name": "Regulation FD disclosure"
}, - {
- "code": "9.01",
- "name": "Financial statements and exhibits"
}
], - "matchedDocument": "EX-99.1",
- "accession": "0001062993-26-004629",
}
]
}$0.005000 per call, deducted from your prepaid balance. Charged only on success.
What happened at a US public company — { ticker, item?, limit? }. Each 8-K with its item codes named in words: officer departures (5.02), material agreements (1.01), results (2.02), auditor changes (4.01), cybersecurity incidents (1.05). item narrows to one code. Returns company and events[] with form, filed and event dates, items[] and a link.
| ticker required | string US stock ticker, e.g. AAPL. Case-insensitive. |
| item | string Optional Form 8-K item code to filter to, e.g. 5.02 (officer changes) or 1.01 (material agreements). |
| limit | integer Max 8-K filings to return, newest first. Default 10, max 50. |
| property name* additional property | any |
{- "ticker": "AAPL"
}{- "tool": "tools/filing-events",
- "costMicroUsd": 5000,
- "company": {
- "name": "Apple Inc.",
- "ticker": "AAPL",
- "cik": "0000320193"
}, - "events": [
- {
- "form": "8-K",
- "filed": "2026-07-30",
- "eventDate": "2026-07-30",
- "items": [
- {
- "code": "2.02",
- "name": "Results of operations and financial condition"
}, - {
- "code": "9.01",
- "name": "Financial statements and exhibits"
}
],
}
]
}$0.010000 per call, deducted from your prepaid balance. Charged only on success.
Who holds more than 5% of a US public company — { ticker, type?, limit? }. 13D marks a holder that may seek influence (activist), 13G a passive stake. Returns stakes[] with form, activist, filed and event dates, holders[] with shares and percent, the stated purpose for a 13D, and a link. limit is filings read, default 5, max 10. Pre-December-2024 filings return holder names only.
| ticker required | string US stock ticker, e.g. AAPL. Case-insensitive. |
| type | string Optional: "13d" for activist stakes or "13g" for passive ones. Omit for both. |
| limit | integer Max filings to read, newest first. Default 5, max 10 — each one is a separate fetch. |
| property name* additional property | any |
{- "ticker": "AAPL"
}{- "tool": "tools/ownership-changes",
- "costMicroUsd": 10000,
- "company": {
- "name": "Apple Inc.",
- "ticker": "AAPL",
- "cik": "0000320193"
}, - "stakes": [
- {
- "form": "SCHEDULE 13G",
- "activist": false,
- "amendment": false,
- "filed": "2026-04-29",
- "eventDate": "2026-03-31",
- "holders": [
- {
- "name": "Vanguard Capital Management",
- "cik": null,
- "shares": 1099168953,
- "percent": 7.48,
- "type": "IA"
}
], - "purpose": null,
}
]
}$0.010000 per call, deducted from your prepaid balance. Charged only on success.
What an investment manager held at a quarter end — { manager, quarter?, issuer?, limit? }. manager is a name or CIK; quarter like 2026Q2, default latest; issuer filters by name or CUSIP. Returns manager, period, totalValue, positions and holdings[] with issuer, cusip, value, shares and percent of portfolio, largest first. Keyed by manager: it does not answer who owns a given company.
| manager required | string The investment manager: its name as filed with the SEC (e.g. Berkshire Hathaway) or its CIK. |
| quarter | string Optional quarter of the report, e.g. 2026Q2. Default: the latest 13F filed. |
| issuer | string Optional filter: a company name fragment (e.g. APPLE) or a 9-character CUSIP. |
| limit | integer Max holdings to return, largest first. Default 25, max 200. |
| property name* additional property | any |
{- "manager": "Berkshire Hathaway"
}{- "tool": "tools/institutional-holders",
- "costMicroUsd": 10000,
- "manager": {
- "name": "BERKSHIRE HATHAWAY INC",
- "cik": "0001067983"
}, - "period": "2026-06-30",
- "filed": "2026-08-14",
- "totalValue": 299253556246,
- "positions": 29,
- "holdings": [
- {
- "issuer": "APPLE INC",
- "class": "COM",
- "cusip": "037833100",
- "value": 65950296923,
- "shares": 227917808,
- "shareType": "SH",
- "putCall": null,
- "pctOfPortfolio": 22.04
}
],
}$0.010000 per call, deducted from your prepaid balance. Charged only on success.
Insiders who intend to sell a US public company stock — { ticker, limit? }. Form 144 is filed on or before the sale, so it looks forward where insider-trades looks back. Returns notices[] with person, relationship, shares, market value, percent of outstanding, approximate sale date, broker, how the shares were acquired, 10b5-1 plan adoption dates, sales in the past 3 months and a link. limit is notices read, default 5, max 20.
| ticker required | string US stock ticker, e.g. AAPL. Case-insensitive. |
| limit | integer Max Form 144 notices to read, newest first. Default 5, max 20 — each one is a separate fetch. |
| property name* additional property | any |
{- "ticker": "AAPL"
}{- "tool": "tools/planned-insider-sales",
- "costMicroUsd": 10000,
- "company": {
- "name": "Apple Inc.",
- "ticker": "AAPL",
- "cik": "0000320193"
}, - "notices": [
- {
- "form": "144",
- "amendment": false,
- "filed": "2026-08-11",
- "person": "JENNIFER NEWSTEAD",
- "relationship": "Officer",
- "security": "Common",
- "shares": 8632,
- "marketValue": 2660900.32,
- "pctOfOutstanding": 0.0001,
- "approxSaleDate": "2026-08-11",
- "exchange": "NASDAQ",
- "broker": "Morgan Stanley Smith Barney LLC Executive Financial Services",
- "acquired": [
- {
- "date": "2026-03-15",
- "how": "Restricted Stock Units",
- "from": "Issuer",
- "shares": 8632,
- "gift": false
}
], - "tradingPlanAdopted": [
- "2026-05-05"
], - "soldPast3Months": [ ]
}
], - "noticesRead": 5
}$0.100000 per call, deducted from your prepaid balance. Charged only on success.
A model reads a US public company filing and answers from it — { ticker, form?, accession?, question?, compare_to_prior? }. form defaults to 10-K; compare_to_prior also reads the previous filing of the same form and reports what changed. Returns answer, passages[] each matched verbatim against the filing, and links. Flat price for up to 700,000 characters of filing text; larger filings are refused before payment. Never investment advice.
| ticker required | string US stock ticker, e.g. AAPL. Case-insensitive. |
| form | string Optional form to read, newest first: 10-K (default), 10-Q, 20-F, 40-F, 8-K, 6-K, DEF 14A, S-1 or F-1. |
| accession | string Optional accession number of one specific filing, e.g. 0000320193-25-000079. Overrides form. |
| question | string Optional question to answer from the filing, up to 500 characters. Omit for the most important disclosures. |
| compare_to_prior | boolean Optional. true also reads the previous filing of the same form and reports what changed. Both must fit the 700,000-character cap together. |
| property name* additional property | any |
{- "ticker": "AAPL"
}{- "tool": "tools/filing-digest",
- "costMicroUsd": 100000,
- "company": {
- "name": "Apple Inc.",
- "ticker": "AAPL",
- "cik": "0000320193"
}, - "filing": {
- "form": "10-K",
- "filed": "2025-10-31",
- "period": "2025-09-27",
- "accession": "0000320193-25-000079",
}, - "question": "What does the filing say about tariffs?",
- "answer": "Apple names new and higher tariffs as a risk to its costs and margins, and says trade measures can affect its supply chain and demand.",
- "passages": [
- {
- "quote": "Tariffs and other trade measures can adversely affect the Company’s business.",
- "supports": "tariffs are a named risk"
}
], - "charsRead": 209892,
- "model": "gemini-3.5-flash-lite"
}$0.150000 per call, deducted from your prepaid balance. Charged only on success.
Summarize a YouTube video (Gemini watches the URL) — { url, style?: bullets|paragraph|chapters, language? }; videos ≤60 min.
| url required | string The YouTube video URL to summarise. |
| style required | string Output style, e.g. "bullets". |
| property name* additional property | any |
{- "style": "bullets"
}{- "tool": "tools/youtube-summary",
- "costMicroUsd": 150000,
- "summary": "- The video explains ...\n- It then shows ...",
- "video": {
- "id": "dQw4w9WgXcQ",
- "title": "Example video",
- "channel": "Example Channel",
- "durationSeconds": 212
}
}$0.010000 per call, deducted from your prepaid balance. Charged only on success.
Render a page and return JSON matching a schema you declare — { url, schema, prompt? }. schema is { field: "description" } or { field: { type, description } }, type one of string|number|boolean|string[]. Values are coerced to the declared types; anything the page does not state is null and listed in missing rather than invented.
| url required | string https URL of the page to extract from. |
| schema required | object Object describing the fields to extract: { field: "what it is" }. |
| property name* additional property | any |
{- "schema": {
- "title": "the product name",
- "price": {
- "type": "number",
- "description": "listed price"
}
}
}{- "tool": "tools/extract",
- "costMicroUsd": 10000,
- "data": {
- "title": "Widget Pro",
- "price": 249000,
- "in_stock": true
}, - "missing": [ ]
}$0.005000 per call, deducted from your prepaid balance. Charged only on success.
Render a page (JS) → clean markdown — { url }.
| url required | string https URL of the page to fetch as markdown. |
| property name* additional property | any |
{
}{- "tool": "tools/scrape",
- "costMicroUsd": 5000,
- "markdown": "# Example\n\nSome page text..."
}$0.005000 per call, deducted from your prepaid balance. Charged only on success.
Capture a page as PNG → hosted URL — { url, fullPage? }.
| url required | string https URL of the page to capture. |
| fullPage | boolean Capture the whole scrollable page rather than the viewport. |
| width | number Viewport width in pixels (320-1920). |
| height | number Viewport height in pixels (320-1920). |
| property name* additional property | any |
{
}{- "tool": "tools/screenshot",
- "costMicroUsd": 5000,
}$0.020000 per call, deducted from your prepaid balance. Charged only on success.
Render a 1200×630 branded OG/social card from a title → PNG URL.
| title required | string Headline text, rendered largest. |
| subtitle required | string Secondary line under the title. |
| theme | string Visual theme for the card. |
| property name* additional property | any |
{- "title": "Your headline",
- "subtitle": "a short tagline"
}{- "tool": "tools/og-image",
- "costMicroUsd": 20000,
- "contentType": "image/png"
}$0.020000 per call, deducted from your prepaid balance. Charged only on success.
Render a 1280×720 YouTube thumbnail (bold title over an optional background image) → PNG URL.
| title required | string Headline text, rendered largest. |
| subtitle required | string Secondary line under the title. |
| background | string https URL of a photo to use as the background. Strongly recommended — text on a plain gradient reads as a blog header, not a thumbnail. |
| accent | string Accent bar colour as a hex value, e.g. #f59e0b. |
| property name* additional property | any |
{- "title": "I tried this for 30 days",
- "subtitle": "the results",
}{- "tool": "tools/youtube-thumbnail",
- "costMicroUsd": 20000,
- "contentType": "image/png"
}$0.020000 per call, deducted from your prepaid balance. Charged only on success.
Render a 1200×630 shareable quote image → PNG URL.
| quote required | string The quotation to render. |
| author required | string Who the quotation is attributed to. |
| theme | string Visual theme for the card. |
| property name* additional property | any |
{- "quote": "Make it work, make it right, make it fast.",
- "author": "Kent Beck"
}{- "tool": "tools/quote-card",
- "costMicroUsd": 20000,
- "contentType": "image/png"
}$0.020000 per call, deducted from your prepaid balance. Charged only on success.
Render a code snippet as a clean dark window image → PNG URL.
| code required | string The source code to render. |
| title required | string Filename shown in the window chrome, e.g. "app.js". |
| language | string Language for syntax highlighting, e.g. ts, py. |
| property name* additional property | any |
{- "code": "console.log('hello')",
- "title": "app.js"
}{- "tool": "tools/code-image",
- "costMicroUsd": 20000,
- "contentType": "image/png"
}$0.020000 per call, deducted from your prepaid balance. Charged only on success.
Render a tweet-style card → PNG URL.
| text required | string The tweet body to render. |
| name required | string Display name shown on the card. |
| handle required | string Account handle shown under the name, without the @. |
| property name* additional property | any |
{- "text": "shipping > talking",
- "name": "GlianaAI",
- "handle": "glianalabs"
}{- "tool": "tools/tweet-image",
- "costMicroUsd": 20000,
- "contentType": "image/png"
}$0.020000 per call, deducted from your prepaid balance. Charged only on success.
Top/bottom Impact text over an image → PNG URL.
| image required | string https URL of the background image. |
| top required | string Caption rendered across the top. |
| bottom required | string Caption rendered across the bottom. |
| property name* additional property | any |
{- "top": "one does not simply",
- "bottom": "make a meme api"
}{- "tool": "tools/meme",
- "costMicroUsd": 20000,
}$0.020000 per call, deducted from your prepaid balance. Charged only on success.
Templated social card sized by preset (og/instagram-square/story/linkedin/podcast) → PNG URL.
| preset required | string Layout preset. |
| title required | string Headline text, rendered largest. |
| subtitle required | string Secondary line under the title. |
| background | string https URL of a background photo. |
| accent | string Accent colour as a hex value. |
| theme | string Visual theme for the card. |
| property name* additional property | any |
{- "preset": "instagram-square",
- "title": "Big news",
- "subtitle": "we shipped it"
}{- "tool": "tools/card",
- "costMicroUsd": 20000,
}$0.030000 per call, deducted from your prepaid balance. Charged only on success.
Scrape a URL's title + render a branded OG card from it → PNG URL.
| url required | string https URL to read and build a social card from. |
| property name* additional property | any |
{
}{- "tool": "tools/auto-og",
- "costMicroUsd": 30000,
- "sourceTitle": "Example Domain",
- "contentType": "image/png"
}Free — costs nothing against your balance.
No charge. Official Indonesian administrative regions — 38 provinsi and 514 kabupaten/kota per Kepmendagri No. 300.2.2-2430 Tahun 2025, with the official kode, capital, centroid, timezone, area and population. Call with ?kode=18 for one region (a provinsi also returns its regencies), ?q=bandung to search by name, ?induk=18 to list one province, or no params for all 38 provinces. Level 1-2 only — kecamatan and desa are not included.
| kode | string Official code, e.g. 18 (provinsi) or 18.71 (kabupaten/kota). |
| q | string Name search; best match first, kota preferred over kabupaten for an ambiguous name. |
| induk | string Parent provinsi code — lists every kabupaten/kota inside it. |
| level | string Enum: "provinsi" "kabupaten_kota" Restrict to provinsi or kabupaten_kota. |
curl "https://api.glianalabs.com/v1/tools/wilayah" # Free — no key required.
{- "source": "Kepmendagri No. 300.2.2-2430 Tahun 2025 (via github.com/cahyadsn/wilayah)",
- "scope": "provinsi + kabupaten/kota (level 1-2)",
- "count": 3,
- "results": [
- {
- "kode": "32.73",
- "nama": "Kota Bandung",
- "level": "kabupaten_kota",
- "induk": "32",
- "ibukota": "Bandung",
- "lat": -6.92222,
- "lng": 107.60694,
- "timezone": "WIB",
- "utc_offset": 7,
- "luas_km2": 167.7,
- "penduduk": 2569107
}
]
}Free — costs nothing against your balance.
No charge, no model call, instant. Checks an Indonesian NIK (national ID number) against arithmetic: 16-digit format, the region code in digits 1-4 resolved against official Kepmendagri data, and the birth date and gender the number encodes. Pass &birth_date=DD-MM-YYYY and &gender=L|P to cross-check what a user typed against what the number says — that is what catches a transposed digit. Proves consistency, NOT authenticity: a well-formed fabrication passes.
| nik required | string 16-digit Indonesian NIK. Spaces are tolerated. |
| birth_date | string Optional claimed birth date to cross-check, e.g. 01-02-1990. |
| gender | string Optional claimed gender to cross-check: L/LAKI-LAKI/M/MALE or P/PEREMPUAN/F/FEMALE. |
curl "https://api.glianalabs.com/v1/tools/verify-nik" # Free — no key required.
{- "ok": true,
- "format": true,
- "region": {
- "kode": "18.71",
- "kabupaten_kota": "Kota Bandar Lampung",
- "provinsi": "Lampung"
}, - "birth_date": "1990-02-01",
- "gender": "P",
- "agrees": {
- "birth_date": true,
- "gender": true
}, - "notes": [ ],
- "note": "Structural check only: 16-digit format, the region code against official Kepmendagri data, and the birth date and gender the number encodes. It cannot tell a real NIK from a well-formed fabrication."
}Free — costs nothing against your balance.
No charge, no model call. Indonesian number-to-words for the amount-in-words line required on invoices, kwitansi and cheques. Pass ?n=249000 (Indonesian thousands separators accepted). Returns the plain words and the capitalised rupiah phrasing. Whole numbers only — decimals are not spelled.
| n required | string Whole number, e.g. 249000 or 249.000. |
curl "https://api.glianalabs.com/v1/tools/terbilang" # Free — no key required.
{- "number": 249000,
- "terbilang": "dua ratus empat puluh sembilan ribu",
- "rupiah": "Dua ratus empat puluh sembilan ribu rupiah"
}Free — costs nothing against your balance.
No charge, no model call. A 16-digit NPWP is the holder's NIK (since 2024) and gets the full region, birth-date and gender check; the 15-digit legacy form is decomposed into taxpayer id, KPP code and branch code and checked for structure only. Neither proves the number was actually issued — checks says exactly what was tested.
| npwp required | string 15 or 16 digits; dots and dashes ignored. |
curl "https://api.glianalabs.com/v1/tools/verify-npwp" # Free — no key required.
{- "ok": true,
- "format": "legacy15",
- "normalized": "01.234.567.8-901.000",
- "parts": {
- "taxpayer_id": "012345678",
- "kpp_code": "901",
- "branch_code": "000",
- "is_head_office": true
}, - "nik": null,
- "checks": [
- "15-digit legacy format: length and structure only"
], - "notes": [
- "Structure only — the legacy check digit is not verified, so a well-formed number that was never issued will pass."
]
}Free — costs nothing against your balance.
No charge, no model call. Decodes a QRIS payment code (EMVCo TLV) into merchant name, city, NMID, acquirer, MCC, currency and amount, and reports whether the CRC-16 is intact — valid_crc false means the code is damaged or mistyped and nothing else should be trusted. Add &amount=50000 to also get the same merchant code with that amount set (the standard static-to-dynamic conversion): the merchant account template is preserved byte for byte, the CRC recomputed, and the result re-parsed before it is returned. Does NOT mint a merchant QR — the NMID is issued by an acquirer and is never invented. Test with your acquirer before production use.
| payload required | string The QRIS string from the QR code. |
| amount | string Optional amount to set, e.g. 50000. Refused if the source CRC is invalid. |
curl "https://api.glianalabs.com/v1/tools/qris" # Free — no key required.
{- "valid_crc": true,
- "crc": {
- "found": "A1B2",
- "computed": "A1B2"
}, - "type": "static",
- "merchant_name": "WARUNG GLIANA",
- "merchant_city": "BANDAR LAMPUNG",
- "country": "ID",
- "currency": "360",
- "amount": null,
- "mcc": "5814",
- "nmid": "ID1234567890123",
- "acquirer": "ID.CO.QRIS.WWW"
}Free — costs nothing against your balance.
No charge. Jadwal sholat (imsak, subuh, terbit, dzuhur, ashar, maghrib, isya) computed from solar position. Pass ?city=Bandar Lampung (any Indonesian kabupaten/kota name or kode — the coordinate and timezone come from the official wilayah data) or ?lat=&lng=&tz=. ?days=30 returns a whole month in one call. Methods: kemenag (default, Indonesia), mwl, isna, egypt, makkah, karachi; madhab shafi (default) or hanafi changes ashar only. Calculated times are typically within 1-2 minutes of the official Kemenag table and are not a substitute for a local mosque schedule. Where the sun never reaches the required depression (high latitudes in summer) the affected times are null rather than guessed.
| city | string Indonesian kabupaten/kota name or kode. Alternative to lat/lng/tz. |
| lat | number Latitude, -90..90. Requires lng. |
| lng | number Longitude, -180..180. |
| tz | number UTC offset in hours (7 WIB, 8 WITA, 9 WIT). Defaults to the offset implied by lng. |
| date | string YYYY-MM-DD. Defaults to today in the target timezone. |
| days | integer [ 1 .. 31 ] Consecutive days to return, 1-31. Default 1. |
| method | string Enum: "kemenag" "mwl" "isna" "egypt" "makkah" "karachi" Calculation authority. |
| madhab | string Enum: "shafi" "hanafi" Asr shadow rule. |
curl "https://api.glianalabs.com/v1/tools/prayer-times" # Free — no key required.
{- "location": {
- "kode": "18.71",
- "nama": "Kota Bandar Lampung",
- "level": "kabupaten_kota",
- "induk": "18",
- "ibukota": "Bandar Lampung",
- "lat": -5.42958,
- "lng": 105.26257,
- "timezone": "WIB",
- "utc_offset": 7
}, - "method": {
- "id": "kemenag",
- "label": "Kementerian Agama Republik Indonesia",
- "fajr_angle": 20,
- "isha": 18,
- "ihtiyati": true
}, - "madhab": "shafi",
- "note": "Calculated from solar position, typically within 1-2 minutes of the official Kemenag table. Not a substitute for your local mosque schedule.",
- "date": "2026-07-30",
- "times": {
- "imsak": "04:36",
- "fajr": "04:50",
- "sunrise": "06:07",
- "dhuhr": "12:07",
- "asr": "15:30",
- "maghrib": "18:04",
- "isha": "19:16"
}
}$0.0001–$60 per call, depending on model and input, deducted from your prepaid balance. Quote it first with GET /v1/price?model=; the exact amount charged comes back in x-gliana-charged-micro-usd.
Capability endpoint — pick any matching model with GET /v1/models and pass it as { model }.
| model required | string Model id or full run id (see GET /v1/models). |
| property name* additional property | any |
{- "model": "wan-2.7-i2v",
- "prompt": "a timelapse of clouds over mountains"
}{- "model": "nano-banana-2",
- "costMicroUsd": 92400,
- "output": {
- "contentType": "image/png",
- "sizeBytes": 1834127
}
}$0.445550 per call, deducted from your prepaid balance. Charged only on success.
Recipe: text → image → animated video (cheapest path to a video; better subject control). Multi-model pipeline from { prompt }. Override steps with { imageModel, videoModel }; { motionPrompt, duration, resolution } tune the video. Returns each step's output + the final url.
| prompt required | string Text description of the subject/scene the pipeline should generate. |
| property name* additional property | any |
{- "prompt": "an italian-brainrot cat-shark hybrid, 3d meme",
- "motionPrompt": "it dances and spins"
}$0.844300 per call, deducted from your prepaid balance. Charged only on success.
Recipe: text → image → video with native AUDIO. Multi-model pipeline from { prompt }. Override steps with { imageModel, videoModel }; { motionPrompt, duration, resolution } tune the video. Returns each step's output + the final url.
| prompt required | string Text description of the subject/scene the pipeline should generate. |
| property name* additional property | any |
{- "prompt": "an italian-brainrot cat-shark hybrid, 3d meme",
- "motionPrompt": "it dances and spins"
}$0.470750 per call, deducted from your prepaid balance. Charged only on success.
Recipe: text → higher-fidelity image → animated video. Multi-model pipeline from { prompt }. Override steps with { imageModel, videoModel }; { motionPrompt, duration, resolution } tune the video. Returns each step's output + the final url.
| prompt required | string Text description of the subject/scene the pipeline should generate. |
| property name* additional property | any |
{- "prompt": "an italian-brainrot cat-shark hybrid, 3d meme",
- "motionPrompt": "it dances and spins"
}$0.997500 per call, deducted from your prepaid balance. Charged only on success.
Recipe: random Italian-brainrot character → animated video with audio (also the brainrot-video model). Multi-model pipeline. Override steps with { imageModel, videoModel }; { motionPrompt, duration, resolution } tune the video. Returns each step's output + the final url.
| prompt | string Text description of the subject/scene the pipeline should generate. |
| property name* additional property | any |
{- "motionPrompt": "it dances and bounces"
}Free — costs nothing against your balance.
No charge. Send Authorization: Bearer gk_…. Callers who cannot settle per call from a wallet can instead hold a prepaid balance (topped up in the dashboard) and spend it with an API key; every paid endpoint accepts either. Returns the remaining balance in micro-USD.
curl "https://api.glianalabs.com/v1/keys/balance" # Free — no key required.
{- "account_id": "string",
- "balance_micro_usd": 0,
- "balance_usd": "string"
}Free — costs nothing against your balance.
No charge, and it never runs a model. Pass ?intent=
| intent required | string What you are trying to do, in plain words. |
| limit | integer Maximum candidates to return (1-20, default 5). |
curl "https://api.glianalabs.com/v1/consult" # Free — no key required.
Free — costs nothing against your balance.
No charge. One document an agent can be pointed at to learn how to make its first paid call — frontmatter plus install snippets. Links to the live price and schema endpoints rather than restating them, so it cannot go stale.
curl "https://api.glianalabs.com/skill.md" # Free — no key required.
Free — costs nothing against your balance.
No charge — browsing the catalog costs nothing.
curl "https://api.glianalabs.com/v1/models" # Free — no key required.
{- "models": [
- { }
]
}Free — costs nothing against your balance.
No charge. Pass ?model=fileRef flag for file inputs (image/video/audio) — those take a public URL; upload a local file at POST /v1/media.
| model required | string Model id or full run id (see GET /v1/models). |
curl "https://api.glianalabs.com/v1/schema" # Free — no key required.
{- "model": "string",
- "required": [
- "string"
], - "props": { }
}Free — costs nothing against your balance.
No charge. Pass ?model=
| model required | string Model id or full run id (see GET /v1/models). |
curl "https://api.glianalabs.com/v1/price" # Free — no key required.
{- "model": "string",
- "costMicroUsd": 0,
- "unit": "string",
- "units": 0
}Free — costs nothing against your balance.
No charge. Upload a video / image / audio file to use as a model input (e.g. an image-to-video source, or a video-to-video video_uri). Send the raw file as the request body with its Content-Type; max 40 MB. Returns { url } — pass that URL into the model field. Use this when an input is too big for an inline value, or you don't already have a public URL. FILE INPUT: if the video is already on the web or your own storage, pass video_uri — we fetch it server-side at datacenter speed, which is the fastest option by far. Sending it inline as video_base64 is simplest and stores nothing anywhere, but base64 adds ~33% to the bytes and you pay your own upload speed, so it is best under ~1MB. For a large local file, upload the RAW bytes to POST /v1/media (free, ≤40MB) and pass the URL: same transfer as base64 minus the 33%, and identity endpoints delete the object as soon as they have read it.
Raw file bytes. Content-Type must be video/, image/, or audio/*.
curl -X POST "https://api.glianalabs.com/v1/media" # Free — no key required.
{- "contentType": "string",
- "sizeBytes": 0
}Free — costs nothing against your balance.
No charge. Serves an uploaded input or a generated output by the key from its /v1/media URL (32-hex id, optional file extension). Responds with the raw file bytes.
| key required | string^[0-9a-f]{32}(\.[a-z0-9]+)?$ Media key from a /v1/media URL — 32 hex chars, optionally followed by a file extension (e.g. 0f...aa.png). |
curl "https://api.glianalabs.com/v1/media/YOUR_KEY" # Free — no key required.