Proxy Quickstart
Use a Meterkey API key with existing OpenAI-compatible clients. Prefix models with the provider when using the unified route.
curl https://meter.hilo.cx/v1/chat/completions \
-H "Authorization: Bearer $METERKEY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: smoke-001" \
-d '{
"model": "openai/gpt-4o-mini",
"messages": [{"role": "user", "content": "Reply with only: ok"}],
"max_tokens": 8
}'
Admin HMAC
Control-plane calls sign the raw request body. Mutating calls include idempotency_key in JSON.
message = timestamp + "." + raw_body
signature = "v1=" + hmac_sha256_hex(secret, message)
X-Meterkey-Timestamp: 1778740000
X-Meterkey-Signature: v1=<hex>
AI Agent Contract
- Read /llms.txt first, then fetch /openapi.json for exact schemas.
- Use small
max_tokensvalues for smoke tests and always preserve idempotency keys. - Never expose raw API keys, provider keys, Cloudflare tokens, or HMAC secrets in logs or generated docs.
Operations
| Method | Path | Summary | Tag |
|---|---|---|---|
| POST | /v1/places/lookup |
Find a place and get full contact details, hours, reviews and photos | Places |
| POST | /v1/places/search |
Discover places with broad text or nearby coordinates | Places |
| GET | /v1/places/{place_id} |
Get place details by Google place ID | Places |
| GET | /v1/places/{place_id}/photos/{photo_id} |
Stream a Google place photo through Meterkey | Places |
| GET | /healthz |
Health check | Docs |
| GET | /readyz |
Readiness check | Docs |
| GET | /version |
Deployment version | Docs |
| GET | /openapi.json |
OpenAPI document | Docs |
| GET | /llms.txt |
LLM entrypoint | Docs |
| GET | /llms-full.txt |
Full LLM context document | Docs |
| POST | /v1/chat/completions |
OpenAI-compatible chat completions | Proxy |
| POST | /v1/embeddings |
OpenAI-compatible embeddings | Proxy |
| POST | /v1/audio/speech |
OpenAI-compatible text-to-speech | Proxy |
| POST | /v1/audio/transcriptions |
OpenAI-compatible audio transcription | Proxy |
| POST | /v1/audio/translations |
OpenAI-compatible audio translation | Proxy |
| POST | /v1/images/generations |
OpenAI-compatible image generation | Proxy |
| POST | /v1/images/edits |
OpenAI-compatible image edit | Proxy |
| POST | /v1/images/variations |
OpenAI-compatible image variation | Proxy |
| GET | /v1/catalog/search |
Find a model or tool by what it does | Catalog |
| POST | /v1/catalog/search |
Find a model or tool by what it does (JSON body) | Catalog |
| GET | /v1/analytics/summary |
Authenticated user usage summary | Analytics |
| GET | /v1/analytics/activity |
Authenticated user activity chart series | Analytics |
| GET | /v1/analytics/top-models |
Authenticated user top models | Analytics |
| GET | /v1/analytics/requests |
Authenticated user request logs | Analytics |
| GET | /v1/analytics/requests.csv |
Export authenticated user request logs as CSV | Analytics |
| GET | /v1/analytics/audit-dump |
Export authenticated user's raw audit dump | Analytics |
| GET | /v1/analytics/requests/{request_id} |
Read one authenticated user request log | Analytics |
| GET | /v1/analytics/requests/{request_id}/gateway-log |
Read the Cloudflare AI Gateway log for one authenticated user request | Analytics |
| GET | /v1/wallet |
Read the authenticated credential's available wallet balance | Wallet |
| POST | /openai/v1/chat/completions |
OpenAI native-compatible chat path | Proxy |
| POST | /anthropic/v1/messages |
Anthropic Messages API through Meterkey | Proxy |
| POST | /openrouter/v1/chat/completions |
OpenRouter chat completions through Meterkey | Proxy |
| POST | /gateway/{provider}/{path} |
Generic Cloudflare AI Gateway provider-native path | Proxy |
| POST | /quiver/v1/svgs/vectorizations |
Quiver SVG vectorization through Meterkey | Proxy |
| GET | /searchapi/api/v1/search |
SearchAPI Google Flights and Travel search | Proxy |
| POST | /typesafe/v1/systemone |
TypeSafe Jev typed evaluation | Proxy |
| POST | /apify/v2/acts/{actor}/runs |
Start an Apify actor run through Meterkey (async) | Proxy |
| GET | /apify/v2/acts/{actor}/runs |
List your runs for one Apify actor | Proxy |
| GET | /apify/v2/actor-runs |
List your Apify runs across actors | Proxy |
| GET | /apify/v2/actor-runs/{runId} |
Get one of your Apify runs | Proxy |
| POST | /apify/v2/actor-runs/{runId}/abort |
Abort one of your Apify runs | Proxy |
| GET | /apify/v2/actor-runs/{runId}/dataset/items |
Read result items from one of your Apify runs | Proxy |
| POST | /exa/agent/runs |
Create an Exa Agent run through Meterkey (async) | Proxy |
| GET | /exa/agent/runs |
List your Exa Agent runs | Proxy |
| GET | /exa/agent/runs/{runId} |
Get one of your Exa Agent runs | Proxy |
| POST | /exa/agent/runs/{runId}/cancel |
Cancel one of your Exa Agent runs | Proxy |
| POST | /soniox/v1/files |
Upload an audio file to Soniox through Meterkey | Proxy |
| GET | /soniox/v1/files |
List your Soniox audio uploads | Proxy |
| POST | /soniox/v1/transcriptions |
Create a Soniox async transcription through Meterkey | Proxy |
| GET | /soniox/v1/transcriptions |
List your Soniox transcriptions | Proxy |
| GET | /soniox/v1/transcriptions/{id} |
Get one of your Soniox transcriptions | Proxy |
| DELETE | /soniox/v1/transcriptions/{id} |
Delete one of your Soniox transcriptions | Proxy |
| GET | /soniox/v1/transcriptions/{id}/transcript |
Fetch the transcript of a completed Soniox transcription | Proxy |
| POST | /aws-bedrock/{path} |
Amazon Bedrock native path /aws-bedrock | Proxy |
| POST | /bedrock/{path} |
Amazon Bedrock native path /bedrock | Proxy |
| POST | /amazon-bedrock/{path} |
Amazon Bedrock native path /amazon-bedrock | Proxy |
| POST | /anthropic/{path} |
Anthropic native path /anthropic | Proxy |
| POST | /azure-openai/{path} |
Azure OpenAI native path /azure-openai | Proxy |
| POST | /azureopenai/{path} |
Azure OpenAI native path /azureopenai | Proxy |
| POST | /baseten/{path} |
Baseten native path /baseten | Proxy |
| POST | /cartesia/{path} |
Cartesia native path /cartesia | Proxy |
| POST | /cerebras/{path} |
Cerebras native path /cerebras | Proxy |
| POST | /cohere/{path} |
Cohere native path /cohere | Proxy |
| POST | /deepgram/{path} |
Deepgram native path /deepgram | Proxy |
| POST | /deepseek/{path} |
DeepSeek native path /deepseek | Proxy |
| POST | /elevenlabs/{path} |
ElevenLabs native path /elevenlabs | Proxy |
| POST | /fal/{path} |
Fal AI native path /fal | Proxy |
| GET | /fal/{path} |
Fal queue status/result polling through Meterkey | Proxy |
| PUT | /fal/{path} |
Fal queue cancellation through Meterkey | Proxy |
| POST | /fal |
Fal AI native custom-target root path | Proxy |
| POST | /google-ai-studio/{path} |
Google AI Studio native path /google-ai-studio | Proxy |
| POST | /google/{path} |
Google AI Studio native path /google | Proxy |
| POST | /gemini/{path} |
Google AI Studio native path /gemini | Proxy |
| POST | /google-vertex-ai/{path} |
Google Vertex AI native path /google-vertex-ai | Proxy |
| POST | /vertex/{path} |
Google Vertex AI native path /vertex | Proxy |
| POST | /groq/{path} |
Groq native path /groq | Proxy |
| POST | /huggingface/{path} |
HuggingFace native path /huggingface | Proxy |
| POST | /ideogram/{path} |
Ideogram native path /ideogram | Proxy |
| POST | /mistral/{path} |
Mistral AI native path /mistral | Proxy |
| POST | /openai/{path} |
OpenAI native path /openai | Proxy |
| POST | /openrouter/{path} |
OpenRouter native path /openrouter | Proxy |
| POST | /parallel/{path} |
Parallel native path /parallel | Proxy |
| POST | /perplexity-ai/{path} |
Perplexity native path /perplexity-ai | Proxy |
| POST | /perplexity/{path} |
Perplexity native path /perplexity | Proxy |
| POST | /replicate/{path} |
Replicate native path /replicate | Proxy |
| POST | /xai/{path} |
xAI native path /xai | Proxy |
| POST | /grok/{path} |
xAI native path /grok | Proxy |
| POST | /workers-ai/{path} |
Workers AI native path /workers-ai | Proxy |
| POST | /workersai/{path} |
Workers AI native path /workersai | Proxy |
| POST | /admin/v1/users |
Create a Meterkey user | Admin |
| GET | /admin/v1/users/{user_id}/wallet |
Read wallet snapshot | Wallet |
| POST | /admin/v1/users/{user_id}/wallet/grant-subscription |
Grant or replace subscription credits | Wallet |
| POST | /admin/v1/users/{user_id}/wallet/topup |
Top up non-expiring credits | Wallet |
| POST | /admin/v1/users/{user_id}/wallet/grant-promo |
Grant promotional credits | Wallet |
| POST | /admin/v1/users/{user_id}/wallet/revoke-promo |
Revoke the unspent remainder of one referenced promotional grant | Wallet |
| POST | /admin/v1/users/{user_id}/wallet/refund |
Refund credits into a selected pool | Wallet |
| POST | /admin/v1/users/{user_id}/wallet/reserve |
Internal test reserve endpoint | Wallet |
| POST | /admin/v1/users/{user_id}/wallet/settle |
Internal test settle endpoint | Wallet |
| POST | /admin/v1/users/{user_id}/wallet/release |
Internal test release endpoint | Wallet |
| POST | /admin/v1/users/{user_id}/wallet/sweep-expired-holds |
Sweep expired holds | Wallet |
| GET | /admin/v1/users/{user_id}/wallet/ledger |
Read wallet ledger | Wallet |
| POST | /admin/v1/users/{user_id}/keys |
Create a Meterkey API key | Keys |
| GET | /admin/v1/users/{user_id}/keys |
List Meterkey API keys | Keys |
| GET | /admin/v1/analytics/summary |
Usage summary | Analytics |
| GET | /admin/v1/analytics/activity |
Activity chart series | Analytics |
| GET | /admin/v1/analytics/top-models |
Top models by spend | Analytics |
| GET | /admin/v1/analytics/requests |
Search request logs | Analytics |
| GET | /admin/v1/analytics/requests.csv |
Export request logs as CSV | Analytics |
| GET | /admin/v1/analytics/audit-dump |
Export raw audit dump | Analytics |
| GET | /admin/v1/analytics/requests/{request_id} |
Read one request log | Analytics |
| GET | /admin/v1/analytics/requests/{request_id}/gateway-log |
Read the Cloudflare AI Gateway log for one request | Analytics |
| GET | /admin/v1/users/{user_id}/analytics/summary |
User usage summary | Analytics |
| GET | /admin/v1/users/{user_id}/analytics/activity |
User activity chart series | Analytics |
| GET | /admin/v1/users/{user_id}/analytics/top-models |
User top models by spend | Analytics |
| GET | /admin/v1/users/{user_id}/analytics/requests |
Search user request logs | Analytics |
| GET | /admin/v1/users/{user_id}/analytics/requests.csv |
Export user request logs as CSV | Analytics |
| GET | /admin/v1/users/{user_id}/analytics/audit-dump |
Export user raw audit dump | Analytics |
| GET | /admin/v1/keys/{key_id}/analytics/summary |
Key usage summary | Analytics |
| GET | /admin/v1/keys/{key_id}/analytics/activity |
Key activity chart series | Analytics |
| GET | /admin/v1/keys/{key_id}/analytics/top-models |
Key top models by spend | Analytics |
| GET | /admin/v1/keys/{key_id}/analytics/requests |
Search key request logs | Analytics |
| GET | /admin/v1/keys/{key_id}/analytics/requests.csv |
Export key request logs as CSV | Analytics |
| GET | /admin/v1/keys/{key_id}/analytics/audit-dump |
Export key raw audit dump | Analytics |
| GET | /admin/v1/pricing/models |
List model pricing rows | Pricing |
| POST | /admin/v1/pricing/models |
Create a new model pricing row | Pricing |