### opencode.json Configuration Source: https://platform.experientiallabs.ai/docs/coding-agents Example configuration file for defining the Experiential Labs provider in OpenCode. ```json { "$schema": "https://opencode.ai/config.json", "model": "explabs/claude-opus-5", "provider": { "explabs": { "npm": "@ai-sdk/openai-compatible", "name": "Experiential Labs", "options": { "baseURL": "https://api.experientiallabs.ai/v1", "apiKey": "{env:EXPLABS_API_KEY}" }, "models": { "claude-opus-5": { "name": "Claude Opus 5", "limit": { "context": 200000, "output": 64000 } } } } } } ``` -------------------------------- ### OpenCode Setup Prompt Source: https://platform.experientiallabs.ai/docs/coding-agents A prompt to instruct a coding agent to configure the Experiential Labs gateway integration. ```text I pasted this into you myself, wire THIS coding agent up to my Experiential Labs gateway, so my model calls route through https://api.experientiallabs.ai and show up in my usage. Ground rules: never print my full key (first 8 characters at most), ask me before you edit any config file or shell profile, and if you cannot do a step (no file access, settings live in a GUI), print the exact manual steps for me instead. Print what you're doing at each step. 1. Get my key. Use EXPLABS_API_KEY from my environment if it is set; otherwise ask me to paste one (I can mint it at https://platform.experientiallabs.ai/settings/api-keys). It looks like xpl_ followed by 40 hex characters. 2. Prove the key works before touching any config: GET https://api.experientiallabs.ai/v1/models with header "Authorization: Bearer " -> 200 and the model slugs I can call. Remember the list; I'll pick models from it. 3. Apply the OpenCode integration: Write the provider block into this project's opencode.json (or ~/.config/opencode/opencode.json if I prefer global, ask): {"provider": {"explabs": {"npm": "@ai-sdk/openai-compatible", "name": "Experiential Labs", "options": {"baseURL": "https://api.experientiallabs.ai/v1", "apiKey": "{env:EXPLABS_API_KEY}"}, "models": {"": {"name": ""}}}} Fill limit.context/limit.output for each slug from GET https://api.experientiallabs.ai/api/models/ so my context window is right. 4. Verify end to end. Make one tiny completion with the surface you configured ("reply with the single word: ok", small max output), via your own next model call if you now route through the gateway, otherwise via curl with my key. Then tell me it landed and that I can watch every call at https://platform.experientiallabs.ai/telemetry. 5. Recap exactly what you changed (files and values, key shown as xpl_ prefix only) so I can undo it later. ``` -------------------------------- ### Universal Agent Setup Prompt Source: https://platform.experientiallabs.ai/docs/coding-agents A prompt to be pasted into coding agents to automate the gateway configuration and verification process. ```text I pasted this into you myself, wire THIS coding agent up to my Experiential Labs gateway, so my model calls route through https://api.experientiallabs.ai and show up in my usage. Ground rules: never print my full key (first 8 characters at most), ask me before you edit any config file or shell profile, and if you cannot do a step (no file access, settings live in a GUI), print the exact manual steps for me instead. Print what you're doing at each step. 1. Get my key. Use EXPLABS_API_KEY from my environment if it is set; otherwise ask me to paste one (I can mint it at https://platform.experientiallabs.ai/settings/api-keys). It looks like xpl_ followed by 40 hex characters. 2. Prove the key works before touching any config: GET https://api.experientiallabs.ai/v1/models with header "Authorization: Bearer " -> 200 and the model slugs I can call. Remember the list; I'll pick models from it. 3. Apply the OpenAI Codex CLI integration: Add to ~/.codex/config.toml (create it if missing, show me the diff before writing): model = "" model_provider = "explabs" [model_providers.explabs] name = "Experiential Labs" base_url = "https://api.experientiallabs.ai/v1" env_key = "EXPLABS_API_KEY" wire_api = "responses" Leave requires_openai_auth unset, and make sure EXPLABS_API_KEY is exported where I launch you. 4. Verify end to end. Make one tiny completion with the surface you configured ("reply with the single word: ok", small max output), via your own next model call if you now route through the gateway, otherwise via curl with my key. Then tell me it landed and that I can watch every call at https://platform.experientiallabs.ai/telemetry. 5. Recap exactly what you changed (files and values, key shown as xpl_ prefix only) so I can undo it later. ``` -------------------------------- ### Claude Code Setup Prompt Source: https://platform.experientiallabs.ai/docs/coding-agents A prompt to be pasted into the agent to automate the configuration of the Experiential Labs gateway. ```text I pasted this into you myself, wire THIS coding agent up to my Experiential Labs gateway, so my model calls route through https://api.experientiallabs.ai and show up in my usage. Ground rules: never print my full key (first 8 characters at most), ask me before you edit any config file or shell profile, and if you cannot do a step (no file access, settings live in a GUI), print the exact manual steps for me instead. Print what you're doing at each step. 1. Get my key. Use EXPLABS_API_KEY from my environment if it is set; otherwise ask me to paste one (I can mint it at https://platform.experientiallabs.ai/settings/api-keys). It looks like xpl_ followed by 40 hex characters. 2. Prove the key works before touching any config: GET https://api.experientiallabs.ai/v1/models with header "Authorization: Bearer " -> 200 and the model slugs I can call. Remember the list; I'll pick models from it. 3. Apply the Claude Code integration: You cannot repoint yourself mid-session. Offer me two placements and apply the one I pick: (a) append to my shell profile, or (b) print for one-off use: export ANTHROPIC_BASE_URL="https://api.experientiallabs.ai" # no /v1 suffix export ANTHROPIC_AUTH_TOKEN="" export ANTHROPIC_MODEL="" Then tell me to restart you from a shell with those set. Warn me plainly: extended thinking is unavailable through the gateway and image pastes are rejected (the lane is text-only). 4. Verify end to end. Make one tiny completion with the surface you configured ("reply with the single word: ok", small max output), via your own next model call if you now route through the gateway, otherwise via curl with my key. Then tell me it landed and that I can watch every call at https://platform.experientiallabs.ai/telemetry. 5. Recap exactly what you changed (files and values, key shown as xpl_ prefix only) so I can undo it later. ``` -------------------------------- ### Automated Account Setup and Configuration Prompt Source: https://platform.experientiallabs.ai/docs/setup-prompts A multi-step instruction set for CLI coding agents to handle account creation, API key storage, and gateway configuration. ```text 1. Ask me for my email address, it is the one thing signup needs. Ask me directly ("What's your email? I'll create your Experiential Labs account with it.") and wait for my answer. Use exactly the address I give you. Never invent or guess an address, and never go looking for one in my files, git config, or shell history. Call the result MY_EMAIL. 2. Create my account instantly, no browser, no password, no code. POST https://platform.experientiallabs.ai/api/signup/instant (no auth) Header: Content-Type: application/json Body: {"email": ""} On 200 capture: api_key (an xpl_ key, this is mine, keep it secret), org_id, credits_granted, verification_required, overview_url. Handle the others: - 409 account_exists -> I already have an account; stop and tell me to sign in at https://platform.experientiallabs.ai/signin to get a key (don't retry with another email). - 403 signup_disabled -> signups are off right now; tell me. - 429 rate_limited -> too many signups from here; wait, then retry once. - 400 invalid_request -> the email was rejected; ask me for a valid one. Store the api_key as EXPLABS_API_KEY in my env; never print the full key more than once. 3. Wire an OpenAI client to the gateway. base_url = "https://api.experientiallabs.ai/v1" api_key = EXPLABS_API_KEY (the xpl_ key from step 2). One header only: Authorization: Bearer . 4. Confirm the key is live, this does NOT spend credits. GET https://api.experientiallabs.ai/v1/models with the key -> the models my account can call. Do NOT make a paid chat completion yet: my credits stay locked until I verify my email (I do that at the very end), and a paid call would be refused until then. Landing my traces as telemetry works regardless. ``` -------------------------------- ### Cline Configuration Prompt Source: https://platform.experientiallabs.ai/docs/coding-agents A prompt to be pasted into the Cline agent to automate the setup process and verify gateway connectivity. ```text I pasted this into you myself, wire THIS coding agent up to my Experiential Labs gateway, so my model calls route through https://api.experientiallabs.ai and show up in my usage. Ground rules: never print my full key (first 8 characters at most), ask me before you edit any config file or shell profile, and if you cannot do a step (no file access, settings live in a GUI), print the exact manual steps for me instead. Print what you're doing at each step. 1. Get my key. Use EXPLABS_API_KEY from my environment if it is set; otherwise ask me to paste one (I can mint it at https://platform.experientiallabs.ai/settings/api-keys). It looks like xpl_ followed by 40 hex characters. 2. Prove the key works before touching any config: GET https://api.experientiallabs.ai/v1/models with header "Authorization: Bearer " -> 200 and the model slugs I can call. Remember the list; I'll pick models from it. 3. Apply the Cline integration: Your settings live in the VS Code UI, so print these for me to set by hand: API Provider "OpenAI Compatible"; Base URL https://api.experientiallabs.ai/v1; API Key = my key (no Bearer prefix); Model ID = a slug from step 2; and per-model context window / max output tokens from https://api.experientiallabs.ai/api/models/. 4. Verify end to end. Make one tiny completion with the surface you configured ("reply with the single word: ok", small max output), via your own next model call if you now route through the gateway, otherwise via curl with my key. Then tell me it landed and that I can watch every call at https://platform.experientiallabs.ai/telemetry. 5. Recap exactly what you changed (files and values, key shown as xpl_ prefix only) so I can undo it later. ``` -------------------------------- ### Conductor Agent Setup Prompt Source: https://platform.experientiallabs.ai/docs/coding-agents Use this prompt to instruct a coding agent to automatically configure the connection to the Experiential Labs gateway. ```text I pasted this into you myself, wire THIS coding agent up to my Experiential Labs gateway, so my model calls route through https://api.experientiallabs.ai and show up in my usage. Ground rules: never print my full key (first 8 characters at most), ask me before you edit any config file or shell profile, and if you cannot do a step (no file access, settings live in a GUI), print the exact manual steps for me instead. Print what you're doing at each step. 1. Get my key. Use EXPLABS_API_KEY from my environment if it is set; otherwise ask me to paste one (I can mint it at https://platform.experientiallabs.ai/settings/api-keys). It looks like xpl_ followed by 40 hex characters. 2. Prove the key works before touching any config: GET https://api.experientiallabs.ai/v1/models with header "Authorization: Bearer " -> 200 and the model slugs I can call. Remember the list; I'll pick models from it. 3. Apply the Conductor integration: Print these for me to put in Settings -> Environment (Claude Code section), or write them to this repo's .conductor/settings.local.toml under [environment_variables] if I prefer (make sure that file is git-ignored before writing my key into it): ANTHROPIC_BASE_URL = "https://api.experientiallabs.ai" ANTHROPIC_AUTH_TOKEN = "" ANTHROPIC_API_KEY = "" The empty ANTHROPIC_API_KEY is required: it stops Claude Code from trying to authenticate with Anthropic directly. 4. Verify end to end. Make one tiny completion with the surface you configured ("reply with the single word: ok", small max output), via your own next model call if you now route through the gateway, otherwise via curl with my key. Then tell me it landed and that I can watch every call at https://platform.experientiallabs.ai/telemetry. 5. Recap exactly what you changed (files and values, key shown as xpl_ prefix only) so I can undo it later. ``` -------------------------------- ### Cursor Agent Setup Prompt Source: https://platform.experientiallabs.ai/docs/coding-agents A prompt to be pasted into a coding agent to automate the verification and configuration process for the Experiential Labs gateway. ```text I pasted this into you myself, wire THIS coding agent up to my Experiential Labs gateway, so my model calls route through https://api.experientiallabs.ai and show up in my usage. Ground rules: never print my full key (first 8 characters at most), ask me before you edit any config file or shell profile, and if you cannot do a step (no file access, settings live in a GUI), print the exact manual steps for me instead. Print what you're doing at each step. 1. Get my key. Use EXPLABS_API_KEY from my environment if it is set; otherwise ask me to paste one (I can mint it at https://platform.experientiallabs.ai/settings/api-keys). It looks like xpl_ followed by 40 hex characters. 2. Prove the key works before touching any config: GET https://api.experientiallabs.ai/v1/models with header "Authorization: Bearer " -> 200 and the model slugs I can call. Remember the list; I'll pick models from it. 3. Apply the Cursor integration: Your gateway settings live in the Cursor Settings UI, so print these for me to set by hand. First tell me the prerequisite: a paid Cursor plan (the Free plan serves only Auto and refuses named models, which custom models are). Then: in Cursor Settings -> Models -> API Keys, put my key in "OpenAI API Key" (no Bearer prefix), enable "Override OpenAI Base URL" and set it to https://api.experientiallabs.ai/v1. Add each slug I pick as a custom model name in the models list; custom models ride the override in OpenAI format, so any catalog slug works. Warn me plainly: Cursor relays requests through its own servers, Tab autocomplete stays on Cursor's models, and if a chat answers 400 invalid_parameter naming temperature or top_p, that model pins its sampling (the Claude 5 family pins temperature to 1) — pick a different slug. 4. Verify end to end. Make one tiny completion with the surface you configured ("reply with the single word: ok", small max output), via your own next model call if you now route through the gateway, otherwise via curl with my key. Then tell me it landed and that I can watch every call at https://platform.experientiallabs.ai/telemetry. 5. Recap exactly what you changed (files and values, key shown as xpl_ prefix only) so I can undo it later. ``` -------------------------------- ### Pull Traces from External Provider Source: https://platform.experientiallabs.ai/docs/setup-prompts Example of using cURL to initiate a live trace pull from a Braintrust project. ```bash curl -sS -X POST https://api.experientiallabs.ai/api/orgs//telemetry/traces/pull \ -H "Authorization: Bearer $EXPLABS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"transport_kind":"braintrust","source_kind":"braintrust", "source_label":"braintrust-prod","credential":"", "config":{"project":""}}' ``` -------------------------------- ### GET /v1/models Source: https://platform.experientiallabs.ai/docs/reference List the model slugs available to the authenticated key, including pricing extensions. ```APIDOC ## GET /v1/models ### Description List the model slugs this key can call; entries add a pricing extension (micro-USD per million tokens). ### Method GET ### Endpoint /v1/models ``` -------------------------------- ### GET /api/gateway/usage/daily Source: https://platform.experientiallabs.ai/docs/core-loop Retrieves daily spend and token usage for the organization. ```APIDOC ## GET /api/gateway/usage/daily ### Description Read your own spend and token usage. Returns a grouped rollup of usage data. ### Method GET ### Endpoint https://api.experientiallabs.ai/api/gateway/usage/daily ### Parameters #### Query Parameters - **org_id** (string) - Required - The organization identifier - **scope** (string) - Required - The scope of the usage (e.g., 'org') - **group_by** (string) - Required - The grouping interval (e.g., 'day') ### Request Example curl "https://api.experientiallabs.ai/api/gateway/usage/daily?org_id=$ORG_ID&scope=org&group_by=day" \ -H "Authorization: Bearer $EXPLABS_API_KEY" ``` -------------------------------- ### GET /api/models//providers Source: https://platform.experientiallabs.ai/docs/models Retrieve the list of deployments for a specific model. ```APIDOC ## GET /api/models//providers ### Description Returns the list of provider deployments associated with a specific model. ### Method GET ### Endpoint /api/models//providers ### Parameters #### Path Parameters - **slug** (string) - Required - The unique identifier for the model ``` -------------------------------- ### GET /api/gateway/usage/daily Source: https://platform.experientiallabs.ai/docs/billing Retrieves daily spend metrics categorized by day, model, or member. ```APIDOC ## GET /api/gateway/usage/daily ### Description Retrieves daily spend metrics for the organization, allowing tracking of consumption by day, model, or member. ### Method GET ### Endpoint /api/gateway/usage/daily ``` -------------------------------- ### GET /api/models/ Source: https://platform.experientiallabs.ai/docs/models Retrieve detailed information for a specific model by its slug. ```APIDOC ## GET /api/models/ ### Description Returns the details for a single model identified by its slug. ### Method GET ### Endpoint /api/models/ ### Parameters #### Path Parameters - **slug** (string) - Required - The unique identifier for the model ``` -------------------------------- ### GET /api/models Source: https://platform.experientiallabs.ai/docs/reference Retrieve the model catalog with filtering, sorting, and pagination options. ```APIDOC ## GET /api/models ### Description The catalog; filter by modality, category, provider, price, context; sort and page. ### Method GET ### Endpoint /api/models ``` -------------------------------- ### GET /api/gateway/usage/daily Source: https://platform.experientiallabs.ai/docs/reference Retrieve a grouped usage rollup for the organization. ```APIDOC ## GET /api/gateway/usage/daily ### Description Grouped usage rollup (group_by day, model, or member). ### Method GET ### Endpoint /api/gateway/usage/daily ``` -------------------------------- ### GET /api/gateway/usage/events Source: https://platform.experientiallabs.ai/docs/telemetry Retrieves a paginated stream of per-request usage events. ```APIDOC ## GET /api/gateway/usage/events ### Description Returns a paginated per-request stream of usage data, including model, lane, tokens, and spend per call. ### Method GET ### Endpoint /api/gateway/usage/events ### Parameters #### Query Parameters - **org_id** (string) - Required - The organization identifier. - **limit** (integer) - Optional - The number of records to return. ``` -------------------------------- ### Handle Authentication Errors Source: https://platform.experientiallabs.ai/docs/authentication Example of the JSON error response returned when an API key is missing, invalid, or revoked. ```json { "error": { "message": "The API key is missing, invalid, or has been revoked.", "type": "authentication_error", "code": "invalid_key", "param": null } } ``` -------------------------------- ### GET /api/gateway/keys/{api_key_id}/limits Source: https://platform.experientiallabs.ai/docs/billing Retrieves the effective spend and rate limits for a specific API key. ```APIDOC ## GET /api/gateway/keys/{api_key_id}/limits ### Description Returns the effective daily spend cap, requests-per-minute ceiling, and tokens-per-minute ceiling for a given API key, including platform defaults. ### Method GET ### Endpoint /api/gateway/keys/{api_key_id}/limits ### Parameters #### Path Parameters - **api_key_id** (string) - Required - The unique identifier of the API key. ### Response #### Success Response (200) - **daily_spend_cap_micro_usd** (integer) - Max platform-funded spend per day for this key (micro-USD). - **requests_per_minute** (integer) - Request-rate ceiling for this key. - **tokens_per_minute** (integer) - Token-rate (TPM) ceiling for this key. ### Request Example curl "https://api.experientiallabs.ai/api/gateway/keys/$API_KEY_ID/limits" \ -H "Authorization: Bearer $EXPLABS_API_KEY" ``` -------------------------------- ### GET /v1/models Source: https://platform.experientiallabs.ai/docs/core-loop Retrieves a list of model slugs available to the authenticated organization, including the public catalog and custom/local models. ```APIDOC ## GET /v1/models ### Description Returns the slugs your key can call: the public catalog plus your org's own custom and local models. ### Method GET ### Endpoint https://api.experientiallabs.ai/v1/models ### Request Example curl "https://api.experientiallabs.ai/v1/models" \ -H "Authorization: Bearer $EXPLABS_API_KEY" ``` -------------------------------- ### GET /api/orgs//telemetry/traces Source: https://platform.experientiallabs.ai/docs/setup-prompts Retrieves the list of ingested traces for verification. ```APIDOC ## GET /api/orgs//telemetry/traces ### Description Lists all ingested traces to verify that data has landed correctly. ### Method GET ### Endpoint https://api.experientiallabs.ai/api/orgs//telemetry/traces ### Parameters #### Path Parameters - **org_id** (string) - Required - The organization identifier. ### Response #### Success Response (200) - **traces** (array) - List of ingested traces. - **total_ingests** (integer) - Total number of ingests. - **total_traces** (integer) - Total number of traces across all ingests. ``` -------------------------------- ### Create Experiential Labs Account Source: https://platform.experientiallabs.ai/docs/setup-prompts Perform an instant account signup via POST request to the platform API. ```http POST https://platform.experientiallabs.ai/api/signup/instant (no auth) Header: Content-Type: application/json Body: {"email": ""} ``` -------------------------------- ### Upload Trace File Source: https://platform.experientiallabs.ai/docs/setup-prompts Three-step process to upload a local trace file: request a signed URL, upload the file bytes, and finalize the ingestion. ```bash TICKET=$(curl -sS -X POST https://api.experientiallabs.ai/api/orgs//telemetry/traces/upload \ -H "Authorization: Bearer $EXPLABS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"source_kind":"otlp","source_label":"prod-otel-august"}') curl -sS -X PUT "$(echo "$TICKET" | jq -r .signed_url)" \ -H "Content-Type: application/octet-stream" \ --data-binary @ curl -sS -X POST https://api.experientiallabs.ai/api/orgs//telemetry/traces/$(echo "$TICKET" | jq -r .ingest_id)/finalize \ -H "Authorization: Bearer $EXPLABS_API_KEY" ``` -------------------------------- ### Configure agent via prompt Source: https://platform.experientiallabs.ai/docs/coding-agents Use this prompt to instruct a coding agent to automatically configure itself to route requests through the Experiential Labs gateway. ```text I pasted this into you myself, wire THIS coding agent up to my Experiential Labs gateway, so my model calls route through https://api.experientiallabs.ai and show up in my usage. Ground rules: never print my full key (first 8 characters at most), ask me before you edit any config file or shell profile, and if you cannot do a step (no file access, settings live in a GUI), print the exact manual steps for me instead. Print what you're doing at each step. 1. Get my key. Use EXPLABS_API_KEY from my environment if it is set; otherwise ask me to paste one (I can mint it at https://platform.experientiallabs.ai/settings/api-keys). It looks like xpl_ followed by 40 hex characters. 2. Prove the key works before touching any config: GET https://api.experientiallabs.ai/v1/models with header "Authorization: Bearer " -> 200 and the model slugs I can call. Remember the list; I'll pick models from it. 3. Apply the Any other OpenAI-compatible tool integration: Export OPENAI_BASE_URL="https://api.experientiallabs.ai/v1" and OPENAI_API_KEY="" wherever I launch you, and name models by slug. If your own config wants the values instead, it needs the same three: base URL https://api.experientiallabs.ai/v1, my key, and a slug. 4. Verify end to end. Make one tiny completion with the surface you configured ("reply with the single word: ok", small max output), via your own next model call if you now route through the gateway, otherwise via curl with my key. Then tell me it landed and that I can watch every call at https://platform.experientiallabs.ai/telemetry. 5. Recap exactly what you changed (files and values, key shown as xpl_ prefix only) so I can undo it later. ``` -------------------------------- ### GET / PUT /api/models/{slug}/waterfall Source: https://platform.experientiallabs.ai/docs/models Read or update the provider waterfall chain for a specific model. ```APIDOC ## GET /api/models/{slug}/waterfall ### Description Reads the current provider waterfall chain for a model. ### Method GET ### Endpoint /api/models/{slug}/waterfall ## PUT /api/models/{slug}/waterfall ### Description Replaces the organization's override for the model's provider waterfall chain. ### Method PUT ### Endpoint /api/models/{slug}/waterfall ### Request Body - **model_provider_ids** (array) - Required - An ordered list of deployment IDs ``` -------------------------------- ### Agent Configuration Prompt Source: https://platform.experientiallabs.ai/docs/setup-prompts A prompt template to be pasted into coding agents to initiate the gateway integration process. ```text I pasted this into you myself, wire THIS coding agent up to my Experiential Labs gateway, so my model calls route through https://api.experientiallabs.ai and show up in my usage. Ground rules: never print my full key (first 8 characters at most), ask me before you edit any config file or shell profile, and if you cannot do a step (no file access, settings live in a GUI), print the exact manual steps for me instead. Print what you're doing at each step. 1. Get my key. Use EXPLABS_API_KEY from my environment if it is set; otherwise ask me to paste one (I can mint it at https://platform.experientiallabs.ai/settings/api-keys). It looks like xpl_ followed by 40 hex characters. 2. Prove the key works before touching any config: GET https://api.experientiallabs.ai/v1/models with header "Authorization: Bearer " -> 200 and the model slugs I can call. Remember the list; I'll pick models from it. 3. Identify which agent you are and apply YOUR integration: - Claude Code: You cannot repoint yourself mid-session. Offer me two placements and apply the one I pick: (a) append to my shell profile, or (b) print for one-off use: export ANTHROPIC_BASE_URL="https://api.experientiallabs.ai" # no /v1 suffix export ANTHROPIC_AUTH_TOKEN="" export ANTHROPIC_MODEL="" Then tell me to restart you from a shell with those set. Warn me plainly: extended thinking is unavailable through the gateway and image pastes are rejected (the lane is text-only). - Conductor: Print these for me to put in Settings -> Environment (Claude Code section), or write them to this repo's .conductor/settings.local.toml under [environment_variables] if I prefer (make sure that file is git-ignored before writing my key into it): ANTHROPIC_BASE_URL = "https://api.experientiallabs.ai" ANTHROPIC_AUTH_TOKEN = "" ANTHROPIC_API_KEY = "" The empty ANTHROPIC_API_KEY is required: it stops Claude Code from trying to authenticate with Anthropic directly. - OpenAI Codex CLI: Add to ~/.codex/config.toml (create it if missing, show me the diff before writing): model = "" model_provider = "explabs" [model_providers.explabs] name = "Experiential Labs" base_url = "https://api.experientiallabs.ai/v1" env_key = "EXPLABS_API_KEY" wire_api = "responses" Leave requires_openai_auth unset, and make sure EXPLABS_API_KEY is exported where I launch you. - OpenCode: Write the provider block into this project's opencode.json (or ~/.config/opencode/opencode.json if I prefer global, ask): {"provider": {"explabs": {"npm": "@ai-sdk/openai-compatible", "name": "Experiential Labs", "options": {"baseURL": "https://api.experientiallabs.ai/v1", "apiKey": "{env:EXPLABS_API_KEY}"}, "models": {"": {"name": ""}}}} Fill limit.context/limit.output for each slug from GET https://api.experientiallabs.ai/api/models/ so my context window is right. - Cline: Your settings live in the VS Code UI, so print these for me to set by hand: API Provider "OpenAI Compatible"; Base URL https://api.experientiallabs.ai/v1; API Key = my key (no Bearer prefix); Model ID = a slug from step 2; and per-model context window / max output tokens from https://api.experientiallabs.ai/api/models/. - Cursor: Your gateway settings live in the Cursor Settings UI, so print these for me to set by hand. First tell me the prerequisite: a paid Cursor plan (the Free plan serves only Auto and refuses named models, which custom models are). Then: in Cursor Settings -> Models -> API Keys, put my key in "OpenAI API Key" (no Bearer prefix), enable "Override OpenAI Base URL" and set it to https://api.experientiallabs.ai/v1. Add each slug I pick as a custom model name in the models list; custom models ride the override in OpenAI format, so any catalog slug works. Warn me plainly: Cursor relays requests through its own servers, Tab autocomplete stays on Cursor's models, and if a chat answers 400 invalid_parameter naming temperature or top_p, that model pins its sampling (the Claude 5 family pins temperature to 1) — pick a different slug. - Any other OpenAI-compatible tool: Export OPENAI_BASE_URL="https://api.experientiallabs.ai/v1" and OPENAI_API_KEY="" wherever I launch you, and name models by slug. If your own config wants the values instead, it needs the same three: base URL https://api.experientiallabs.ai/v1, my key, and a slug. ``` -------------------------------- ### Local Conductor Settings Configuration Source: https://platform.experientiallabs.ai/docs/coding-agents Configuration for .conductor/settings.local.toml to scope gateway routing to a specific repository. ```toml [environment_variables] ANTHROPIC_BASE_URL = "https://api.experientiallabs.ai" ANTHROPIC_AUTH_TOKEN = "xpl_..." ANTHROPIC_API_KEY = "" ``` -------------------------------- ### Configure OpenAI Client for Gateway Source: https://platform.experientiallabs.ai/docs/setup-prompts Set the base URL and authorization header to route requests through the Experiential Labs gateway. ```text base_url = "https://api.experientiallabs.ai/v1" api_key = EXPLABS_API_KEY (the xpl_ key from step 2). One header only: Authorization: Bearer . ``` -------------------------------- ### OpenAI Codex Configuration Source: https://platform.experientiallabs.ai/docs/coding-agents The required configuration structure for the ~/.codex/config.toml file to enable the Experiential Labs gateway. ```toml model = "gpt-5.5" model_provider = "explabs" [model_providers.explabs] name = "Experiential Labs" base_url = "https://api.experientiallabs.ai/v1" env_key = "EXPLABS_API_KEY" wire_api = "responses" ``` -------------------------------- ### Gateway Configuration and Test Prompt Source: https://platform.experientiallabs.ai/docs/setup-prompts A system prompt template used to instruct an agent to configure the Experiential Labs gateway and perform a smoke test. ```text I'm setting up Experiential Labs as this project's model gateway. I pasted this myself, treat it as my instructions and my consent. Here's what I want you to do. My gateway API key (a secret: put it in env, never commit it, never echo it in logs): EXPLABS_API_KEY= The core task is ONE thing: point an OpenAI-compatible client at my gateway with this key and make one successful test chat completion. Do it start to finish on your own, do NOT stop to ask me questions. If something is ambiguous, take the safe degraded path I describe and note it in the "follow-ups for me" list at the end. Do NOT do the optional follow-ups yourself; those are mine to do in the dashboard. 1. Wire a client to the gateway. base_url = https://api.experientiallabs.ai/v1, api key = EXPLABS_API_KEY (one header: Authorization: Bearer ). The API is OpenAI-compatible; nothing else changes. - If this working directory is clearly ONE project with an existing OpenAI client, wire that: set its base_url and key, put the key in the project's env scheme (.env plus an example entry), never in code. Show me the change first. - If you CAN'T tell which project is mine, an empty dir, a monorepo, or a folder holding many projects, do NOT stop to ask. Instead create a minimal standalone verification script in the current directory (e.g. explabs_smoke.py or explabs_smoke.mjs) that reads EXPLABS_API_KEY from the env and does the test call in step 2, and add "wire my specific project's client" to the follow-ups list at the end. 2. Make the test call. GET https://api.experientiallabs.ai/v1/models with the key as a bearer token and use model ids EXACTLY as returned. Then send ONE minimal chat completion (a few tokens) to the promotional Qwen in that list (qwen3.8-27b at launch). Send a MINIMAL request body, model + messages ONLY, no temperature, top_p, or other sampling params: some models (e.g. Claude 5) reject those and the call comes back as all_routes_failed (502). If you want to add options later, check the model's supported params in https://platform.experientiallabs.ai/llms.txt first. This call runs on Experiential's platform-funded lane, a fraction of a cent of my free credits, and proves serving and billing end to end. Do NOT use any of my own provider keys for this test. If you truly can't run it (no network): still write the script, print the exact curl I can copy from https://platform.experientiallabs.ai/docs, and note it in the follow-ups. 3. Report back, then hand me the follow-ups. Tell me: what you changed (or the standalone script you created), and the test call's model, that it succeeded, and its cost. Then list "follow-ups for me", anything you deferred above, PLUS these optional steps, which are MINE to do in the dashboard (do NOT attempt them yourself, and don't block on them): - Wire my specific project's client, if you only created a standalone script (skip this line if you already wired a real project). - Connect my own provider keys (BYOK) for free pass-through. I'll add them at https://platform.experientiallabs.ai/settings/integrations, verified on save, confirmed per key by prefix, landing in my own gateway account and nowhere else. - Import my existing Claude Code / Codex usage history (metadata only) so my dashboard opens with real spend, from https://platform.experientiallabs.ai/settings. - Review all my balances and spend, platform-funded credits and free pass-through both, at https://platform.experientiallabs.ai/credits, summarized on my Overview. Read the contract if you build further: https://platform.experientiallabs.ai/docs (human docs) and https://platform.experientiallabs.ai/llms.txt (machine-readable: honored and refused parameters, error codes, streaming caveats). Follow it literally. ``` -------------------------------- ### POST /api/orgs/{org_id}/provider-connections/{provider}/check Source: https://platform.experientiallabs.ai/docs/models Verifies the connection status of a previously configured provider. ```APIDOC ## POST /api/orgs/{org_id}/provider-connections/{provider}/check ### Description Verifies the connection to a provider using the configured credentials. ### Method POST ### Endpoint /api/orgs/{org_id}/provider-connections/{provider}/check ### Parameters #### Path Parameters - **org_id** (string) - Required - The unique identifier for the organization. - **provider** (string) - Required - The provider identifier. ``` -------------------------------- ### Set environment variables for agent integration Source: https://platform.experientiallabs.ai/docs/coding-agents Export these environment variables in your shell to point OpenAI-compatible tools to the Experiential Labs gateway. ```shell export OPENAI_BASE_URL="https://api.experientiallabs.ai/v1" export OPENAI_API_KEY="xpl_..." ``` -------------------------------- ### Upload Trace File Source: https://platform.experientiallabs.ai/docs/telemetry Uploads a trace file by requesting a signed URL, performing a PUT request, and finalizing the ingest process. ```curl TICKET=$(curl -sS -X POST "https://api.experientiallabs.ai/api/orgs/$ORG_ID/telemetry/traces/upload" \ -H "Authorization: Bearer $EXPLABS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"source_kind":"otlp","source_label":"prod-otel-august"}') curl -sS -X PUT "$(echo "$TICKET" | jq -r .signed_url)" \ -H "Content-Type: application/octet-stream" \ --data-binary @traces.jsonl curl -sS -X POST "https://api.experientiallabs.ai/api/orgs/$ORG_ID/telemetry/traces/$(echo "$TICKET" | jq -r .ingest_id)/finalize" \ -H "Authorization: Bearer $EXPLABS_API_KEY" ``` -------------------------------- ### Connect and Verify Provider Key Source: https://platform.experientiallabs.ai/docs/models Use the PUT endpoint to upsert a provider connection and the POST endpoint to verify the connection status. ```curl curl -X PUT "https://api.experientiallabs.ai/api/orgs/$ORG_ID/provider-connections/openai" \ -H "Authorization: Bearer $EXPLABS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"secret": "sk-...", "config": {}}' # Verify it curl -X POST "https://api.experientiallabs.ai/api/orgs/$ORG_ID/provider-connections/openai/check" \ -H "Authorization: Bearer $EXPLABS_API_KEY" ``` -------------------------------- ### POST /api/orgs/{org_id}/telemetry/traces/upload Source: https://platform.experientiallabs.ai/docs/telemetry Initiates a file upload for telemetry traces. ```APIDOC ## POST /api/orgs/{org_id}/telemetry/traces/upload ### Description Reserves a storage path for trace ingestion and returns a signed upload URL. ### Method POST ### Endpoint /api/orgs/{org_id}/telemetry/traces/upload ### Parameters #### Path Parameters - **org_id** (string) - Required - The organization identifier. #### Request Body - **source_kind** (string) - Required - The source type (e.g., otel-genai, otlp, langfuse, langsmith, phoenix, braintrust, mastra, posthog, chat-json). - **source_label** (string) - Required - A label for the source. ``` -------------------------------- ### Pull Traces from External Provider Source: https://platform.experientiallabs.ai/docs/telemetry Initiates a live pull of traces from a specified observability provider using provided credentials. ```curl curl -X POST "https://api.experientiallabs.ai/api/orgs/$ORG_ID/telemetry/traces/pull" \ -H "Authorization: Bearer $EXPLABS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "transport_kind": "langfuse", "source_kind": "langfuse", "source_label": "prod", "credential": "pk-lf-...:sk-lf-..." }' ``` -------------------------------- ### Stream Chat Completion Responses with cURL Source: https://platform.experientiallabs.ai/docs/quickstart Enable streaming by setting the stream parameter to true to receive server-sent events. ```bash curl -N "https://api.experientiallabs.ai/v1/chat/completions" \ -H "Authorization: Bearer $EXPLABS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model": "qwen3.8-27b", "stream": true, "messages": [{"role": "user", "content": "Hello"}]}' ``` -------------------------------- ### Verify API Key Source: https://platform.experientiallabs.ai/docs/setup-prompts Confirm the account key is active by listing available models without consuming credits. ```http GET https://api.experientiallabs.ai/v1/models with the key ``` -------------------------------- ### POST /v1/chat/completions Source: https://platform.experientiallabs.ai/docs Sends a chat completion request to the gateway using the OpenAI-compatible protocol. ```APIDOC ## POST /v1/chat/completions ### Description Sends a chat completion request to the gateway. The gateway resolves the model slug through a provider waterfall and returns the response. ### Method POST ### Endpoint https://api.experientiallabs.ai/v1/chat/completions ### Request Body - **model** (string) - Required - The slug of the model to use (e.g., "qwen3.8-27b"). - **messages** (array) - Required - A list of message objects with 'role' and 'content'. ### Request Example { "model": "qwen3.8-27b", "messages": [{"role": "user", "content": "Hello"}] } ```