Google-compatible countTokens endpoint for pre-flight context-window sizing. The request body matches :generateContent. NOTE: Opper has no in-process Gemini tokenizer and returns a chars/4 heuristic (±~20% on English prose) — sufficient for “does my prompt fit?” checks but not for exact cost projection.
Comma-separated key:value usage-attribution tags (e.g. tenant:acme,project:demo, max 8). Recorded on the generation's billing/metrics rows; group spend by any key via GET /v2/analytics/usage?group_by=. Header-borne twin of the /v3/session URL prefix tags (which win per key when both are present); opper.-prefixed keys and session_id are reserved. Malformed values return 400.
Model id — a bare model name (e.g. gemini-2.5-flash), which routes over that model's pool (Gemini API and Vertex endpoints the project's allowlist permits) and falls over between them, or an Opper-canonical id (e.g. vertexai/gemini-2.5-flash), which pins that endpoint.
Opt in to automatic prompt caching for Anthropic-family models routed through this Gemini-shape endpoint: {"type":"ephemeral"} (optionally "ttl":"1h"). Places one moving cache breakpoint on the largest cacheable prefix. Caching is off unless set; no-op on Gemini and other providers with automatic server-side caching. Cache writes cost 1.25x input and reads 0.1x
Fallback models tried in order when the model before them fails for any reason (provider error; rate limit; timeout; a member blocked by one of your rules). Same OpenRouter shape: send the primary in model (or agent) and the rest here; or omit both and the first entry is the primary. Each entry is any model string: a bare pooled name; a provider/model id; an org alias. Not allowed together with a dynamic/ route. At most 10 entries. Which model answered is in the X-Opper-Served-Model header.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Opper","description":"The European AI gateway for agents: 700+ models from 50+ providers through one EU-hosted API, drop-in for the OpenAI, Anthropic and Gemini SDKs.","colors":{"primary":"#14cdcd","light":"#24cdcd","dark":"#2d9393"},"logo":{"light":"https://mintcdn.com/opper/EXrQN6z6604ZsBuP/logo/light.svg?fit=max\u0026auto=format\u0026n=EXrQN6z6604ZsBuP\u0026q=85\u0026s=fd4170c482c6cebc3c20d8f7f7e033f8","dark":"https://mintcdn.com/opper/EXrQN6z6604ZsBuP/logo/dark.svg?fit=max\u0026auto=format\u0026n=EXrQN6z6604ZsBuP\u0026q=85\u0026s=328888ac1f44b63c468d022fda86421d"},"favicon":"https://mintcdn.com/opper/EXrQN6z6604ZsBuP/favicon.png?fit=max\u0026auto=format\u0026n=EXrQN6z6604ZsBuP\u0026q=85\u0026s=f1229b80ac7eee56ba2c14789e5fe22e","api":{"examples":{"defaults":"required","languages":["Shell","python","typescript"]}},"appearance":{"default":"system"},"navbar":{"links":[{"href":"mailto:support@opper.ai","label":"Support"},{"href":"https://discord.gg/wcT3bc7Y4Y","label":"Discord"}],"primary":{"type":"button","label":"Login","href":"https://platform.opper.ai/auth/signin"}},"footer":{"socials":{"x":"https://x.com/opperai","github":"https://github.com/opper-ai","linkedin":"https://linkedin.com/company/opper-ai"}},"integrations":{"plausible":{"domain":"docs.opper.ai"}},"contextual":{"options":["copy","view"],"display":"header"},"metadata":{"timestamp":true},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"opper","hasAudioNarration":false,"actualSubdomain":"opper","customDomains":["docs.opper.ai"],"gitSource":{"type":"github","owner":"opper-ai","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae206e5ba4b20fd94ede38a","collectionId":"14ea1155-74d9-4707-9cf8-810ca5b34c9b","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae206e5ba4b20fd94ede38a"},"feedback":{"thumbs":false},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae206e5ba4b20fd94ede38a","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"default","tag":"Documentation","count":88},{"language":"default","tag":"API Reference","count":78},{"language":"default","tag":"Platform APIs","count":41},{"language":"default","tag":"Management","count":30},{"language":"default","tag":"Apps","count":29},{"language":"default","tag":"Build","count":26},{"language":"default","tag":"Multimodality","count":22},{"language":"default","tag":"Observe \u0026 Control","count":15},{"language":"default","tag":"Gateway","count":14},{"language":"default","tag":"Compatibility","count":13}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"@keyframes oppFade{0%{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}@keyframes oppBlink{0%,49%{opacity:1}50%,to{opacity:0}}@keyframes oppDot{0%,80%,to{opacity:.25}40%{opacity:1}}.opp-term .opp-line{opacity:0;animation:oppFade .4s ease forwards}.opp-term a{color:inherit;text-decoration:none;cursor:default}.opp-cursor{display:inline-block;width:7px;height:1em;margin-left:5px;vertical-align:text-bottom;border-radius:1px;background:#14cdcd;animation:oppBlink 1.1s step-end infinite}.opp-dots span{display:inline-block;width:5px;height:5px;margin-right:3px;border-radius:50%;background:#6e7681;animation:oppDot 1.2s infinite}.opp-dots span:nth-child(2){animation-delay:.2s}.opp-dots span:nth-child(3){animation-delay:.4s}.opp-replay{margin-left:auto;background:0 0;border:1px solid #2b3440;color:#8b949e;font:inherit;font-size:11px;padding:2px 9px;border-radius:6px;cursor:pointer;opacity:0;pointer-events:none;transition:opacity .3s,color .2s,border-color .2s}.opp-replay.show{opacity:1;pointer-events:auto}.opp-replay:hover{color:#14cdcd;border-color:#14cdcd}"}],"page":{"pagePath":"v3-api-reference/compatibility/count-tokens","slug":"/v3-api-reference/compatibility/count-tokens","pageMetadata":{"title":"Count Tokens","openapi":"post /v3/compat/v1beta/models/{model}:countTokens","description":"Google-compatible countTokens endpoint for pre-flight context-window sizing. The request body matches `:generateContent`. NOTE: Opper has no in-process Gemini tokenizer and returns a chars/4 heuristic (±~20% on English prose) — sufficient for \"does my prompt fit?\" checks but not for exact cost projection.","href":"/v3-api-reference/compatibility/count-tokens"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Google-compatible countTokens endpoint for pre-flight context-window sizing. The request body matches \", _jsx(_components.code, {\n children: \":generateContent\"\n }), \". NOTE: Opper has no in-process Gemini tokenizer and returns a chars/4 heuristic (±~20% on English prose) — sufficient for “does my prompt fit?” checks but not for exact cost projection.\"]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Count Tokens","openapi":"post /v3/compat/v1beta/models/{model}:countTokens","description":"Google-compatible countTokens endpoint for pre-flight context-window sizing. The request body matches `:generateContent`. NOTE: Opper has no in-process Gemini tokenizer and returns a chars/4 heuristic (±~20% on English prose) — sufficient for \"does my prompt fit?\" checks but not for exact cost projection.","href":"/v3-api-reference/compatibility/count-tokens"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/opper/40a2b9bd0ec03258/script.js"],"openApiReferenceData":{"operation":{"description":"Google-compatible countTokens endpoint for pre-flight context-window sizing. The request body matches `:generateContent`. NOTE: Opper has no in-process Gemini tokenizer and returns a chars/4 heuristic (±~20% on English prose) — sufficient for \"does my prompt fit?\" checks but not for exact cost projection.","operationId":"countTokens","parameters":["1f3435d4-9372-497a-af93-c414f5e20138","38c63409-689d-4660-bcee-5cb21d48b931","43f6e4d2-edd0-40c2-a3cc-5781769737c6","b1702980-c73e-48a8-b6da-8d222a8a367a"],"requestBody":"4d455ce9-6384-4c26-85aa-6d8b8d42a4a1","responses":{"200":"c19da928-ca2c-4d9c-9c88-abd9355e4e3d","400":"5b80ebcd-f441-4790-a72d-308954e42496","401":"a1095cf3-50a7-42d3-b57d-8390be52c5d2","500":"4f954674-ab41-4759-885e-60271fd12421"},"summary":"Count Tokens API","tags":["Compatibility"],"method":"post","type":"path","servers":["500d676c-94ea-4606-840a-c45e859b6131","6c6ab079-b5b0-4735-8565-89cb61f02023"],"security":["f5ae6308-2807-4f40-b3ba-d1fd4a20c4b8"],"path":"/v3/compat/v1beta/models/{model}:countTokens","baseUrlOptions":["https://api.opper.ai","http://localhost:8080"],"title":"Count Tokens API","codeSamples":[],"requestExampleLanguages":["bash","python","typescript"],"requiredOnlyExamples":true,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"1f3435d4-9372-497a-af93-c414f5e20138":{"description":"Model id — a bare model name (e.g. `gemini-2.5-flash`), which routes over that model's pool (Gemini API and Vertex endpoints the project's allowlist permits) and falls over between them, or an Opper-canonical id (e.g. `vertexai/gemini-2.5-flash`), which pins that endpoint.","in":"path","name":"model","required":true,"schema":{"type":"string","isRequired":true,"description":"Model id — a bare model name (e.g. `gemini-2.5-flash`), which routes over that model's pool (Gemini API and Vertex endpoints the project's allowlist permits) and falls over between them, or an Opper-canonical id (e.g. `vertexai/gemini-2.5-flash`), which pins that endpoint.","uniqueKey":"","typeLabel":"string"}},"38c63409-689d-4660-bcee-5cb21d48b931":{"description":"Function name for tracing and project-level guardrail function-scope filtering.","in":"header","name":"X-Opper-Name","schema":{"type":"string","description":"Function name for tracing and project-level guardrail function-scope filtering.","uniqueKey":"","typeLabel":"string"}},"43f6e4d2-edd0-40c2-a3cc-5781769737c6":{"description":"Parent span ID for distributed tracing context.","in":"header","name":"X-Opper-Parent-Span-Id","schema":{"format":"uuid","type":"string","description":"Parent span ID for distributed tracing context.","uniqueKey":"","typeLabel":"string\u003cuuid>"}},"b1702980-c73e-48a8-b6da-8d222a8a367a":{"description":"Comma-separated `key:value` usage-attribution tags (e.g. `tenant:acme,project:demo`, max 8). Recorded on the generation's billing/metrics rows; group spend by any key via GET /v2/analytics/usage?group_by=\u003ckey>. Header-borne twin of the /v3/session URL prefix tags (which win per key when both are present); `opper.`-prefixed keys and `session_id` are reserved. Malformed values return 400.","in":"header","name":"X-Opper-Tags","schema":{"type":"string","description":"Comma-separated `key:value` usage-attribution tags (e.g. `tenant:acme,project:demo`, max 8). Recorded on the generation's billing/metrics rows; group spend by any key via GET /v2/analytics/usage?group_by=\u003ckey>. Header-borne twin of the /v3/session URL prefix tags (which win per key when both are present); `opper.`-prefixed keys and `session_id` are reserved. Malformed values return 400.","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"content":{"application/json":{"schema":{"properties":{"contents":{"description":"Any value","isRequired":true,"uniqueKey":"contents","typeLabel":"any"},"input":{"description":"Any value","isRequired":true,"uniqueKey":"input","typeLabel":"any"},"agent":{"type":"string","uniqueKey":"agent","typeLabel":"string"},"background":{"type":"boolean","uniqueKey":"background","typeLabel":"boolean"},"cache_control":{"description":"Opt in to automatic prompt caching for Anthropic-family models routed through this Gemini-shape endpoint: {\"type\":\"ephemeral\"} (optionally \"ttl\":\"1h\"). Places one moving cache breakpoint on the largest cacheable prefix. Caching is off unless set; no-op on Gemini and other providers with automatic server-side caching. Cache writes cost 1.25x input and reads 0.1x","type":"object","uniqueKey":"cache_control","typeLabel":"object"},"custom_model_credentials":{"properties":{"api_key":{"type":"string","isRequired":true,"uniqueKey":"custom_model_credentials.api_key","typeLabel":"string"},"identifier":{"type":"string","isRequired":true,"uniqueKey":"custom_model_credentials.identifier","typeLabel":"string"},"base_url":{"type":"string","uniqueKey":"custom_model_credentials.base_url","typeLabel":"string"},"extra":{"type":"object","uniqueKey":"custom_model_credentials.extra","typeLabel":"object"},"url":{"type":"string","uniqueKey":"custom_model_credentials.url","typeLabel":"string"}},"required":["identifier","api_key"],"type":"object","uniqueKey":"custom_model_credentials","typeLabel":"object"},"generation_config":{"properties":{"max_output_tokens":{"type":"integer","uniqueKey":"generation_config.max_output_tokens","typeLabel":"integer"},"response_json_schema":{"type":"object","uniqueKey":"generation_config.response_json_schema","typeLabel":"object"},"response_mime_type":{"type":"string","uniqueKey":"generation_config.response_mime_type","typeLabel":"string"},"response_schema":{"type":"object","uniqueKey":"generation_config.response_schema","typeLabel":"object"},"seed":{"type":"integer","uniqueKey":"generation_config.seed","typeLabel":"integer"},"stop_sequences":{"items":{"type":"string","uniqueKey":"generation_config.stop_sequences.items.[INDEX]","typeLabel":"string"},"type":"array","uniqueKey":"generation_config.stop_sequences","typeLabel":"string[]"},"temperature":{"type":"number","uniqueKey":"generation_config.temperature","typeLabel":"number"},"thinking_config":{"properties":{"include_thoughts":{"type":"boolean","uniqueKey":"generation_config.thinking_config.include_thoughts","typeLabel":"boolean"},"thinking_budget":{"type":"integer","uniqueKey":"generation_config.thinking_config.thinking_budget","typeLabel":"integer"},"thinking_level":{"type":"string","uniqueKey":"generation_config.thinking_config.thinking_level","typeLabel":"string"}},"type":"object","uniqueKey":"generation_config.thinking_config","typeLabel":"object"},"thinking_level":{"type":"string","uniqueKey":"generation_config.thinking_level","typeLabel":"string"},"thinking_summaries":{"type":"string","uniqueKey":"generation_config.thinking_summaries","typeLabel":"string"},"tool_choice":{"description":"Any value","uniqueKey":"generation_config.tool_choice","typeLabel":"any"},"top_k":{"type":"integer","uniqueKey":"generation_config.top_k","typeLabel":"integer"},"top_p":{"type":"number","uniqueKey":"generation_config.top_p","typeLabel":"number"}},"type":"object","uniqueKey":"generation_config","typeLabel":"object"},"metadata":{"type":"object","uniqueKey":"metadata","typeLabel":"object"},"model":{"type":"string","uniqueKey":"model","typeLabel":"string"},"models":{"description":"Fallback models tried in order when the model before them fails for any reason (provider error; rate limit; timeout; a member blocked by one of your rules). Same OpenRouter shape: send the primary in model (or agent) and the rest here; or omit both and the first entry is the primary. Each entry is any model string: a bare pooled name; a provider/model id; an org alias. Not allowed together with a dynamic/\u003cname> route. At most 10 entries. Which model answered is in the X-Opper-Served-Model header.","items":{"type":"string","uniqueKey":"models.items.[INDEX]","typeLabel":"string"},"type":"array","uniqueKey":"models","typeLabel":"string[]"},"previous_interaction_id":{"type":"string","uniqueKey":"previous_interaction_id","typeLabel":"string"},"response_format":{"type":"object","uniqueKey":"response_format","typeLabel":"object"},"response_mime_type":{"type":"string","uniqueKey":"response_mime_type","typeLabel":"string"},"safety_settings":{"items":{"properties":{"category":{"type":"string","uniqueKey":"safety_settings.items.[INDEX].category","typeLabel":"string"},"threshold":{"type":"string","uniqueKey":"safety_settings.items.[INDEX].threshold","typeLabel":"string"}},"type":"object","uniqueKey":"safety_settings.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"safety_settings","typeLabel":"object[]"},"store":{"type":"boolean","uniqueKey":"store","typeLabel":"boolean"},"stream":{"type":"boolean","uniqueKey":"stream","typeLabel":"boolean"},"system_instruction":{"properties":{"Text":{"type":"string","isRequired":true,"uniqueKey":"system_instruction.Text","typeLabel":"string"}},"required":["Text"],"type":"object","uniqueKey":"system_instruction","typeLabel":"object"},"tool_config":{"properties":{"function_calling_config":{"properties":{"allowed_function_names":{"items":{"type":"string","uniqueKey":"tool_config.function_calling_config.allowed_function_names.items.[INDEX]","typeLabel":"string"},"type":"array","uniqueKey":"tool_config.function_calling_config.allowed_function_names","typeLabel":"string[]"},"mode":{"type":"string","uniqueKey":"tool_config.function_calling_config.mode","typeLabel":"string"}},"type":"object","uniqueKey":"tool_config.function_calling_config","typeLabel":"object"}},"type":"object","uniqueKey":"tool_config","typeLabel":"object"},"tools":{"items":{"properties":{"codeExecution":{"description":"Any value","uniqueKey":"tools.items.[INDEX].codeExecution","typeLabel":"any"},"code_execution":{"description":"Any value","uniqueKey":"tools.items.[INDEX].code_execution","typeLabel":"any"},"description":{"type":"string","uniqueKey":"tools.items.[INDEX].description","typeLabel":"string"},"function_declarations":{"items":{"properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"tools.items.[INDEX].function_declarations.items.[INDEX].name","typeLabel":"string"},"description":{"type":"string","uniqueKey":"tools.items.[INDEX].function_declarations.items.[INDEX].description","typeLabel":"string"},"parameters":{"type":"object","uniqueKey":"tools.items.[INDEX].function_declarations.items.[INDEX].parameters","typeLabel":"object"},"parameters_json_schema":{"description":"Any value","uniqueKey":"tools.items.[INDEX].function_declarations.items.[INDEX].parameters_json_schema","typeLabel":"any"}},"required":["name"],"type":"object","uniqueKey":"tools.items.[INDEX].function_declarations.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"tools.items.[INDEX].function_declarations","typeLabel":"object[]"},"googleSearch":{"description":"Any value","uniqueKey":"tools.items.[INDEX].googleSearch","typeLabel":"any"},"googleSearchRetrieval":{"description":"Any value","uniqueKey":"tools.items.[INDEX].googleSearchRetrieval","typeLabel":"any"},"google_search":{"description":"Any value","uniqueKey":"tools.items.[INDEX].google_search","typeLabel":"any"},"google_search_retrieval":{"description":"Any value","uniqueKey":"tools.items.[INDEX].google_search_retrieval","typeLabel":"any"},"name":{"type":"string","uniqueKey":"tools.items.[INDEX].name","typeLabel":"string"},"parameters":{"type":"object","uniqueKey":"tools.items.[INDEX].parameters","typeLabel":"object"},"type":{"type":"string","uniqueKey":"tools.items.[INDEX].type","typeLabel":"string"},"urlContext":{"description":"Any value","uniqueKey":"tools.items.[INDEX].urlContext","typeLabel":"any"},"url_context":{"description":"Any value","uniqueKey":"tools.items.[INDEX].url_context","typeLabel":"any"}},"type":"object","uniqueKey":"tools.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"tools","typeLabel":"object[]"}},"required":["input","contents"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"contents":"\u003cunknown>","input":"\u003cunknown>","agent":"\u003cstring>","background":true,"cache_control":{},"generation_config":{"max_output_tokens":123,"response_json_schema":{},"response_mime_type":"\u003cstring>","response_schema":{},"seed":123,"stop_sequences":["\u003cstring>"],"temperature":123,"thinking_config":{"include_thoughts":true,"thinking_budget":123,"thinking_level":"\u003cstring>"},"thinking_level":"\u003cstring>","thinking_summaries":"\u003cstring>","tool_choice":"\u003cunknown>","top_k":123,"top_p":123},"metadata":{},"model":"\u003cstring>","models":["\u003cstring>"],"previous_interaction_id":"\u003cstring>","response_format":{},"response_mime_type":"\u003cstring>","safety_settings":[{"category":"\u003cstring>","threshold":"\u003cstring>"}],"store":true,"stream":true,"tool_config":{"function_calling_config":{"allowed_function_names":["\u003cstring>"],"mode":"\u003cstring>"}},"tools":[{"codeExecution":"\u003cunknown>","code_execution":"\u003cunknown>","description":"\u003cstring>","function_declarations":[{"name":"\u003cstring>","description":"\u003cstring>","parameters":{},"parameters_json_schema":"\u003cunknown>"}],"googleSearch":"\u003cunknown>","googleSearchRetrieval":"\u003cunknown>","google_search":"\u003cunknown>","google_search_retrieval":"\u003cunknown>","name":"\u003cstring>","parameters":{},"type":"\u003cstring>","urlContext":"\u003cunknown>","url_context":"\u003cunknown>"}]}}},"exampleType":"generated"}},"required":true,"exampleType":"generated"},"responses":{"c19da928-ca2c-4d9c-9c88-abd9355e4e3d":{"content":{"application/json":{"schema":{"properties":{"totalTokens":{"type":"integer","isRequired":true,"uniqueKey":"totalTokens","typeLabel":"integer"},"cachedContentTokenCount":{"type":"integer","uniqueKey":"cachedContentTokenCount","typeLabel":"integer"}},"required":["totalTokens"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"totalTokens":123,"cachedContentTokenCount":123}}},"exampleType":"generated"}},"description":"Successful response","exampleType":"generated"},"5b80ebcd-f441-4790-a72d-308954e42496":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"description":"Any value","uniqueKey":"error.details","typeLabel":"any"}},"required":["code","message"],"type":"object","isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","uniqueKey":"meta","typeLabel":"object"}},"required":["error"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","details":"\u003cunknown>"},"meta":{}}}},"exampleType":"generated"}},"description":"Bad request","exampleType":"generated"},"a1095cf3-50a7-42d3-b57d-8390be52c5d2":{"description":"Unauthorized - missing or invalid API key","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"4f954674-ab41-4759-885e-60271fd12421":{"content":{"application/json":{"schema":{"properties":{"error":{"properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"description":"Any value","uniqueKey":"error.details","typeLabel":"any"}},"required":["code","message"],"type":"object","isRequired":true,"uniqueKey":"error","typeLabel":"object"},"meta":{"type":"object","uniqueKey":"meta","typeLabel":"object"}},"required":["error"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","details":"\u003cunknown>"},"meta":{}}}},"exampleType":"generated"}},"description":"Internal server error","exampleType":"generated"}},"security":{"f5ae6308-2807-4f40-b3ba-d1fd4a20c4b8":{"BearerAuth":{"bearerFormat":"API Key","description":"API key authentication. Pass your API key as a Bearer token.","scheme":"bearer","type":"http","scopes":[],"schemeName":"BearerAuth"}}},"servers":{"500d676c-94ea-4606-840a-c45e859b6131":{"description":"Production","url":"https://api.opper.ai"},"6c6ab079-b5b0-4735-8565-89cb61f02023":{"description":"Local development","url":"http://localhost:8080"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"bearerFormat":"API Key","description":"API key authentication. Pass your API key as a Bearer token.","scheme":"bearer","type":"http","scopes":[],"schemeName":"BearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"API key authentication. Pass your API key as a Bearer token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"BearerAuth","name":"Authorization"}],"title":"BearerAuth"}]},"originalFileLocation":"openapi-v3.json"},"subdomain":"opper","siteName":"Opper","title":"Count Tokens - Opper","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-06-08T13:52:54.304Z","gitLastModified":"2026-06-08T13:52:28.000Z","originalFileLocation":"v3-api-reference/compatibility/count-tokens.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Google-compatible countTokens endpoint for pre-flight context-window sizing. The request body matches :generateContent. NOTE: Opper has no in-process Gemini tokenizer and returns a chars/4 heuristic (±~20% on English prose) — sufficient for \u0026quot;does my prompt fit?\u0026quot; checks but not for exact cost projection.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Opper\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/opper/QTlMDo19G0sAM5ID/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/opper/QTlMDo19G0sAM5ID/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/opper/QTlMDo19G0sAM5ID/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/opper/QTlMDo19G0sAM5ID/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/opper/QTlMDo19G0sAM5ID/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/opper/QTlMDo19G0sAM5ID/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/opper/QTlMDo19G0sAM5ID/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/opper/QTlMDo19G0sAM5ID/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/opper/QTlMDo19G0sAM5ID/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Count Tokens - Opper\">\u003cmeta data-mint-head property=\"og:description\" content=\"Google-compatible countTokens endpoint for pre-flight context-window sizing. The request body matches :generateContent. NOTE: Opper has no in-process Gemini tokenizer and returns a chars/4 heuristic (±~20% on English prose) — sufficient for \u0026quot;does my prompt fit?\u0026quot; checks but not for exact cost projection.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Opper\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.opper.ai/v3-api-reference/compatibility/count-tokens\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://opper.mintlify.app/_mintlify/api/og/v2?division=Google\u0026amp;title=Count+Tokens\u0026amp;description=Google-compatible+countTokens+endpoint+for+pre-flight+context-window+sizing.+The+request+body+matches+%60%3AgenerateContent%60.+NOTE%3A+Opper+has+no+in-process+Gemini+t\u0026amp;theme=2bfe23844db8025c327f2519\u0026amp;signature=b6be219969f58d08e9c413909e582abc3e613fe622c6b990439a560d3395f0e7\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Count Tokens - Opper\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Google-compatible countTokens endpoint for pre-flight context-window sizing. The request body matches :generateContent. NOTE: Opper has no in-process Gemini tokenizer and returns a chars/4 heuristic (±~20% on English prose) — sufficient for \u0026quot;does my prompt fit?\u0026quot; checks but not for exact cost projection.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://opper.mintlify.app/_mintlify/api/og/v2?division=Google\u0026amp;title=Count+Tokens\u0026amp;description=Google-compatible+countTokens+endpoint+for+pre-flight+context-window+sizing.+The+request+body+matches+%60%3AgenerateContent%60.+NOTE%3A+Opper+has+no+in-process+Gemini+t\u0026amp;theme=2bfe23844db8025c327f2519\u0026amp;signature=b6be219969f58d08e9c413909e582abc3e613fe622c6b990439a560d3395f0e7\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/opper/QTlMDo19G0sAM5ID/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Opper\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#14cdcd\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.opper.ai/v3-api-reference/compatibility/count-tokens\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/v3-api-reference/compatibility/count-tokens.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.opper.ai/#organization\",\"name\":\"Opper\",\"url\":\"https://docs.opper.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/opper/EXrQN6z6604ZsBuP/logo/light.svg?fit=max\u0026auto=format\u0026n=EXrQN6z6604ZsBuP\u0026q=85\u0026s=fd4170c482c6cebc3c20d8f7f7e033f8\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.opper.ai#website\",\"name\":\"Opper\",\"url\":\"https://docs.opper.ai\",\"publisher\":{\"@id\":\"https://docs.opper.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.opper.ai/v3-api-reference/compatibility/count-tokens#webpage\",\"url\":\"https://docs.opper.ai/v3-api-reference/compatibility/count-tokens\",\"name\":\"Count Tokens\",\"description\":\"Google-compatible countTokens endpoint for pre-flight context-window sizing. The request body matches :generateContent. NOTE: Opper has no in-process Gemini tokenizer and returns a chars/4 heuristic (±~20% on English prose) — sufficient for \\\"does my prompt fit?\\\" checks but not for exact cost projection.\",\"dateModified\":\"2026-06-08T13:52:28.000Z\",\"isPartOf\":{\"@id\":\"https://docs.opper.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.opper.ai/v3-api-reference/compatibility/count-tokens#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.opper.ai/v3-api-reference/compatibility/count-tokens#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Compatibility\",\"item\":\"https://docs.opper.ai/v3-api-reference/compatibility/chat-completions\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Google\",\"item\":\"https://docs.opper.ai/v3-api-reference/compatibility/create-interaction\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Count Tokens\",\"item\":\"https://docs.opper.ai/v3-api-reference/compatibility/count-tokens\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.opper.ai/v3-api-reference/compatibility/count-tokens#apireference\",\"headline\":\"Count Tokens\",\"name\":\"Count Tokens\",\"description\":\"Google-compatible countTokens endpoint for pre-flight context-window sizing. The request body matches :generateContent. NOTE: Opper has no in-process Gemini tokenizer and returns a chars/4 heuristic (±~20% on English prose) — sufficient for \\\"does my prompt fit?\\\" checks but not for exact cost projection.\",\"url\":\"https://docs.opper.ai/v3-api-reference/compatibility/count-tokens\",\"mainEntityOfPage\":{\"@id\":\"https://docs.opper.ai/v3-api-reference/compatibility/count-tokens#webpage\"},\"dateModified\":\"2026-06-08T13:52:28.000Z\",\"publisher\":{\"@id\":\"https://docs.opper.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.opper.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Opper\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Opper","nav":{"global":null,"tabs":[{"tab":"Documentation","icon":"book-open","pages":[{"title":"Documentation","href":"/overview/about"}]},{"tab":"Cookbook","icon":"github","href":"https://github.com/opper-ai/opper-cookbook"},{"tab":"API Reference","icon":"square-terminal","groups":[{"group":"Compatibility","pages":[{"group":"OpenAI","expanded":true,"pages":[{"title":"Chat Completions","openapi":"post /v3/compat/chat/completions","href":"/v3-api-reference/compatibility/chat-completions"},{"title":"Responses","openapi":"post /v3/compat/responses","href":"/v3-api-reference/compatibility/create-response"},{"title":"Embeddings","openapi":"post /v3/compat/embeddings","href":"/v3-api-reference/compatibility/create-embeddings"},{"title":"Decisions","openapi":"post /v3/compat/decisions","href":"/v3-api-reference/compatibility/create-decision"},{"title":"List Models","openapi":"get /v3/compat/models","href":"/v3-api-reference/compatibility/list-models"}]},{"group":"Anthropic","expanded":true,"pages":[{"title":"Messages","openapi":"post /v3/compat/v1/messages","href":"/v3-api-reference/compatibility/create-message"},{"title":"Count Tokens","openapi":"post /v3/compat/v1/messages/count_tokens","href":"/v3-api-reference/compatibility/count-message-tokens"}]},{"group":"Google","expanded":true,"pages":[{"title":"Interactions","openapi":"post /v3/compat/v1beta/interactions","href":"/v3-api-reference/compatibility/create-interaction"},{"title":"Generate Content","openapi":"post /v3/compat/v1beta/models/{model}:generateContent","href":"/v3-api-reference/compatibility/generate-content"},{"title":"Stream Generate Content","openapi":"post /v3/compat/v1beta/models/{model}:streamGenerateContent","description":"Streaming variant of generateContent. Pass `?alt=sse` (as Google's SDKs do) to receive Server-Sent Events; each `data:` line is a partial `GenerateContentResponse`. The request body matches `:generateContent`.","href":"/v3-api-reference/compatibility/stream-generate-content"},{"title":"Count Tokens","openapi":"post /v3/compat/v1beta/models/{model}:countTokens","href":"/v3-api-reference/compatibility/count-tokens"}]},{"group":"TypeSafe","expanded":true,"pages":[{"title":"System One evaluation","openapi":"post /v3/compat/v1/systemone","description":"System One-compatible synchronous evaluation. Send `model`, `state` and named typed `questions` (`noul`, `choice`, `score`). TypeSafe models also take images and `box` questions (preview upstream; format and limits may change): send the `TypeSafe-Danger-Zone-Images: true` header, which is forwarded to TypeSafe, and list each image once in `assets`, keyed by a placeholder written where the image belongs in the state, instructions or criteria. An asset is base64 (`data_base64` with `format` `png`, `jpg` or `jpeg`) in a JSON body, or a file part in a `multipart/form-data` body whose first part, `request`, holds the JSON body and whose asset names the part in `part`. A `box` question takes `instructions` and no criteria, needs Jev 1.14 (`typesafe/jev-preview` or `typesafe/jev-1.14.0`), and answers with `box` edges `top`, `bottom`, `left` and `right` as fractions of the image and a `confidence`. Images or a box question without the header return 400; other models return 422 for them. Bodies over 50 MiB return 413; TypeSafe's own limits (a 32 MiB body, image size, dimensions, pixels) return its 400 or 413. A full catalog ID, for example `typesafe/jev-1.13.0`, `typesafe/jev-latest` or `greenpt/metis`, pins that endpoint. A bare model name, for example `clef`, routes over that model's pooled endpoints as a chat model name does: a rate-limited or unavailable endpoint is retried once and the call falls over to the next, under the project's Comply allowlist. List available endpoints with `GET /v3/models?type=evaluation`. GreenPT Metis jointly evaluates 1–32 questions in one request; state is required but may be null, and instructions may be omitted or null. Its nullable descriptions, probabilities, confidence, score legends and native `impact` metadata are preserved. EmpirioLabs Aplomb (`empiriolabs/aplomb-1`) takes 1–128 questions and images, audio and video as media nodes anywhere in `state`: an object with `type` `image`, `audio` or `video` and either a public `https://` `url` or base64 `data` with its `mime`. Other providers retain their own validation contracts. Returns native `model`, `answers` and token `usage`. Uses a project-scoped Opper API key, Comply policies and provider entitlements. Cost and generation ID are returned in headers. Streaming, chat generation and tool calling are unsupported.","href":"/v3-api-reference/compatibility/systemone"}]},{"group":"Other","expanded":true,"pages":[{"title":"OpenResponses","openapi":"post /v3/compat/openresponses","href":"/v3-api-reference/compatibility/openresponses"}]}]},{"group":"Multimodality","pages":[{"group":"Images","pages":[{"title":"Generate an image","openapi":"post /v3/images","href":"/v3-api-reference/images/create-image"},{"title":"List image models","openapi":"get /v3/images/models","href":"/v3-api-reference/images/list-image-models"}]},{"group":"Audio","pages":[{"title":"Generate speech","openapi":"post /v3/audio/speech","href":"/v3-api-reference/audio/create-speech"},{"title":"Transcribe audio","openapi":"post /v3/audio/transcriptions","href":"/v3-api-reference/audio/create-transcription"},{"title":"Generate audio","openapi":"post /v3/audio/generations","href":"/v3-api-reference/audio/create-audio-generation"},{"title":"List audio models","openapi":"get /v3/audio/models","href":"/v3-api-reference/audio/list-audio-models"},{"title":"Create Voice","openapi":"post /v3/audio/voices","href":"/v3-api-reference/audio/create-voice"},{"title":"List Voices","openapi":"get /v3/audio/voices","href":"/v3-api-reference/audio/list-voices"},{"title":"Get Voice","openapi":"get /v3/audio/voices/{id}","href":"/v3-api-reference/audio/get-voice"},{"title":"Delete Voice","openapi":"delete /v3/audio/voices/{id}","href":"/v3-api-reference/audio/delete-voice"}]},{"group":"Video","pages":[{"title":"Generate a video","openapi":"post /v3/videos","href":"/v3-api-reference/video/create-video"},{"title":"List video models","openapi":"get /v3/videos/models","href":"/v3-api-reference/video/list-video-models"}]},{"group":"Rerank","pages":[{"title":"Rerank documents","openapi":"post /v3/rerank","href":"/v3-api-reference/rerank/rerank-documents"}]},{"group":"OCR","pages":[{"title":"Extract text (OCR)","openapi":"post /v3/ocr","href":"/v3-api-reference/ocr/extract-text"},{"title":"List OCR models","openapi":"get /v3/ocr/models","href":"/v3-api-reference/ocr/list-ocr-models"}]}]},{"group":"Files","pages":[{"title":"Upload a file","openapi":"post /v3/files","href":"/v3-api-reference/files/upload-file"},{"title":"List files","openapi":"get /v3/files","href":"/v3-api-reference/files/list-files"},{"title":"Get file metadata","openapi":"get /v3/files/{id}","href":"/v3-api-reference/files/get-file"},{"title":"Get a file download URL","openapi":"get /v3/files/{id}/content","href":"/v3-api-reference/files/get-file-content"},{"title":"Set or clear a file's expiry","openapi":"patch /v3/files/{id}","href":"/v3-api-reference/files/update-file"},{"title":"Delete a file","openapi":"delete /v3/files/{id}","href":"/v3-api-reference/files/delete-file"}]},{"group":"Realtime","pages":[{"title":"Realtime protocol","href":"/v3-api-reference/realtime/protocol"},{"title":"Mint realtime ticket","href":"/v3-api-reference/realtime/create-realtime-session"}]},{"group":"Roundtable","pages":[{"openapi":"post /v3/roundtable","title":"Roundtable","href":"/v3-api-reference/roundtable/create-roundtable"}]},{"group":"Platform APIs","pages":[{"group":"Generations","pages":[{"openapi":"get /v3/generations","title":"List generations","href":"/v3-api-reference/generations/list-generations"},{"openapi":"get /v3/generations/{id}","title":"Get generation","href":"/v3-api-reference/generations/get-generation"},{"openapi":"delete /v3/generations/{id}","title":"Delete generation","href":"/v3-api-reference/generations/delete-generation"}]},{"group":"Management","pages":[{"openapi":"get /management/v1/projects","title":"List projects","href":"/v3-api-reference/management/list-projects"},{"openapi":"post /management/v1/projects","title":"Create a project","href":"/v3-api-reference/management/create-project"},{"openapi":"get /management/v1/projects/{uuid}","title":"Get a project","href":"/v3-api-reference/management/get-project"},{"openapi":"patch /management/v1/projects/{uuid}","title":"Update a project","href":"/v3-api-reference/management/update-project"},{"openapi":"delete /management/v1/projects/{uuid}","title":"Delete a project","href":"/v3-api-reference/management/delete-project"},{"openapi":"get /management/v1/projects/{uuid}/api-keys","title":"List a project's API keys","href":"/v3-api-reference/management/list-api-keys"},{"openapi":"post /management/v1/projects/{uuid}/api-keys","title":"Mint an API key","href":"/v3-api-reference/management/create-api-key"},{"openapi":"delete /management/v1/projects/{uuid}/api-keys/{id}","title":"Delete an API key","href":"/v3-api-reference/management/delete-api-key"},{"openapi":"get /management/v1/members","title":"List members","href":"/v3-api-reference/management/list-members"},{"openapi":"delete /management/v1/members/{user_uuid}","title":"Remove a member","href":"/v3-api-reference/management/remove-member"},{"openapi":"get /management/v1/invites","title":"List invitations","href":"/v3-api-reference/management/list-invites"},{"openapi":"post /management/v1/invites","title":"Invite a member","href":"/v3-api-reference/management/create-invite"},{"openapi":"delete /management/v1/invites/{id}","title":"Revoke an invitation","href":"/v3-api-reference/management/revoke-invite"},{"openapi":"get /management/v1/dynamic-routes","title":"List dynamic routes","href":"/v3-api-reference/management/list-dynamic-routes"},{"openapi":"post /management/v1/dynamic-routes","title":"Create a dynamic route","href":"/v3-api-reference/management/create-dynamic-route"},{"openapi":"get /management/v1/dynamic-routes/{name}","title":"Get a dynamic route","href":"/v3-api-reference/management/get-dynamic-route"},{"openapi":"put /management/v1/dynamic-routes/{name}/draft","title":"Replace the draft","href":"/v3-api-reference/management/update-dynamic-route-draft"},{"openapi":"post /management/v1/dynamic-routes/{name}/deploy","title":"Deploy the draft","href":"/v3-api-reference/management/deploy-dynamic-route"},{"openapi":"post /management/v1/dynamic-routes/{name}/simulate","title":"Simulate a request through the route","href":"/v3-api-reference/management/simulate-dynamic-route"},{"openapi":"get /management/v1/dynamic-routes/{name}/versions","title":"List a route's versions","href":"/v3-api-reference/management/list-dynamic-route-versions"},{"openapi":"get /management/v1/dynamic-routes/{name}/versions/{version_number}","title":"Get a version","href":"/v3-api-reference/management/get-dynamic-route-version"},{"openapi":"post /management/v1/dynamic-routes/{name}/versions/{version_number}/rollback","title":"Roll back to a version","href":"/v3-api-reference/management/rollback-dynamic-route"},{"openapi":"post /management/v1/dynamic-routes/{name}/versions/{version_number}/restore-to-draft","title":"Copy a version into the draft","href":"/v3-api-reference/management/restore-dynamic-route-version-to-draft"},{"openapi":"delete /management/v1/dynamic-routes/{name}","title":"Delete a dynamic route","href":"/v3-api-reference/management/delete-dynamic-route"},{"openapi":"get /management/v1/controls/rules","title":"List control rules","href":"/v3-api-reference/management/list-control-rules"},{"openapi":"post /management/v1/controls/rules","title":"Create a control rule","href":"/v3-api-reference/management/create-control-rule"},{"openapi":"patch /management/v1/controls/rules/{uuid}","title":"Update a control rule","href":"/v3-api-reference/management/update-control-rule"},{"openapi":"delete /management/v1/controls/rules/{uuid}","title":"Delete a control rule","href":"/v3-api-reference/management/delete-control-rule"},{"openapi":"get /management/v1/usage","title":"Get usage and cost","href":"/v3-api-reference/management/get-usage"},{"openapi":"post /management/v1/management-keys/_self/disable","title":"Disable the calling management key","href":"/v3-api-reference/management/disable-management-key"}]},{"group":"Models","pages":[{"openapi":"get /v3/models","title":"List models","href":"/v3-api-reference/models/list-models"}]},{"group":"Spans","pages":[{"openapi":"post /v3/spans","title":"Create span","href":"/v3-api-reference/spans/create-span"},{"openapi":"patch /v3/spans/{id}","title":"Update span","href":"/v3-api-reference/spans/update-span"}]},{"group":"Tools","pages":[{"openapi":"post /v3/tools/web/fetch","title":"Web fetch","href":"/v3-api-reference/tools/web-fetch"},{"openapi":"post /v3/tools/web/search","title":"Web search","href":"/v3-api-reference/tools/web-search"}]},{"group":"System","pages":[{"openapi":"get /health","title":"Health check","href":"/v3-api-reference/system/health-check"},{"openapi":"get /v3/openapi.json","title":"OpenAPI spec (JSON)","href":"/v3-api-reference/system/openapi-spec-json"},{"openapi":"get /v3/openapi.yaml","title":"OpenAPI spec (YAML)","href":"/v3-api-reference/system/openapi-spec-yaml"}]}]}]}]},"title":"Count Tokens - Opper","buildId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","deploymentId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DmVyH30O.js","utils-BHQqGGOd.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-CD-E4BIt.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Bp5Lq9Ds.js","snippetPresets-C4xAVCFP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CgXVLxUC.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BF8I5oUf.js","shallow-Byd0lWnC.js","getApiPlaygroundDisplay-BGOZG1OK.js","CodeSnippet-CpvQL0CY.js","CodeSnippets-B8wkBKXa.js","Page-CBCH2P7b.js","getPastedJson-Ry3scI3Y.js","icon-D7a9HcdD.js","MethodPill-CJ8pmHhz.js","DuplicateIcon-rh1HJF0t.js","createIcon-DvGznqYs.js","DynamicMarkdown-Cc6AuSHS.js","SectionHeading-B4A0S-ep.js","axios-vUo_bRtp.js","Markdown-Cc16CX65.js","clsx-Cs6nMGht.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-zbf22OZA.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-C_fs-y5n.js"]}