Amazon S3 is a scalable object storage service. OpenRouter can send traces to any S3-compatible storage, including AWS S3, Cloudflare R2, MinIO, and other compatible services.
Make an API request through OpenRouter and check your S3 bucket for the trace file. Each trace is saved as a separate JSON file with the format {traceId}-{timestamp}.json.
Customize how traces are organized in your bucket:
openrouter-traces/{date} - Default, organizes by date (e.g., openrouter-traces/2024-01-15/abc123-1705312800.json)
traces/{year}/{month}/{day} - Hierarchical date structure
{apiKeyName}/{date} - Organize by API key name, then date
production/llm-traces/{date} - Custom prefix for environment separation
For time-based batching (e.g., hourly or daily aggregated files), consider using AWS Kinesis Firehose instead, which buffers records and writes batched files to S3.
Custom metadata from the trace field is included in the JSON trace file stored in your S3 bucket. The metadata is available in the metadata field of each observation within the trace.
Each trace file is a JSON object. Custom metadata keys from trace are stored in the metadata field and can be queried using tools like Amazon Athena, Presto, or any JSON-aware query engine:
-- Example Athena query on S3 trace filesSELECT json_extract_scalar(metadata, '$.document_type') as doc_type, json_extract_scalar(metadata, '$.batch_id') as batch_idFROM openrouter_tracesWHERE json_extract_scalar(metadata, '$.document_type') = 'contract';
For a single-trace file, cache-write details live under trace.observations[].promptTokensDetails. With the Cost metadata opt-in enabled, the generation quantities also appear under trace.metadata.openrouter_generation and the generation observation’s metadata.openrouter_generation.For example, the generation metadata may contain:
Batch files use traces[] instead of trace. Read each generation once. These representations repeat the same generation quantities; do not add them together. Null or omitted values are unavailable, while an explicit zero is a reported or observed zero. See Token and cost fields for estimation, TTL availability, and provider billing caveats.
The value can also be an array of usage reports or null, and its keys are the provider’s own. Query it with a JSON-aware engine rather than a fixed column list, for example json_extract(metadata, '$.openrouter_generation.upstream_raw_response_usage') in Athena. When it is null, check upstream_raw_response_usage_suppression_reason to distinguish suppression from unavailable usage.
When Privacy Mode is enabled for this destination, prompt and completion content and provider error text are excluded from traces. All other trace data (token usage, costs, timing, model information, and custom metadata) is still sent normally. Raw provider usage is replaced with null and reported as privacy_mode, because a provider’s usage object can contain arbitrary future fields. See Privacy Mode for details.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"OpenRouter | Documentation","colors":{"primary":"#7624F4","light":"#7624F4","dark":"#C8FF00"},"logo":{"light":"https://mintcdn.com/openrouter-d02e98a0/ksNSeB_K7gD-BUDh/assets/logo-v2-light.svg?fit=max\u0026auto=format\u0026n=ksNSeB_K7gD-BUDh\u0026q=85\u0026s=690e45873843519efe02bcbe45795dac","dark":"https://mintcdn.com/openrouter-d02e98a0/ksNSeB_K7gD-BUDh/assets/logo-v2-dark.svg?fit=max\u0026auto=format\u0026n=ksNSeB_K7gD-BUDh\u0026q=85\u0026s=8ba2f49b11cd9839c37dd03c62537ebd","href":"https://openrouter.ai"},"favicon":"https://mintcdn.com/openrouter-d02e98a0/n3IgkjAMQY8SgOLX/assets/favicon-v2.svg?fit=max\u0026auto=format\u0026n=n3IgkjAMQY8SgOLX\u0026q=85\u0026s=f49800815fcadee8a07dcc093051c2de","appearance":{"default":"dark"},"background":{"color":{"light":"#FCFCFE","dark":"#03080A"}},"navbar":{"links":[{"href":"https://openrouter.ai/models","label":"Models"},{"href":"https://openrouter.ai/benchmarks","label":"Benchmarks"},{"href":"https://openrouter.ai/chat","label":"Chat"},{"href":"https://openrouter.ai/rankings","label":"Rankings"},{"href":"https://openrouter.ai/apps","label":"Apps"},{"href":"https://openrouter.ai/ori","label":"Ori"},{"href":"https://openrouter.ai/pricing","label":"Pricing"}],"primary":{"type":"button","label":"Sign In","href":"https://openrouter.ai/sign-in"}},"seo":{"metatags":{"canonical":"https://openrouter.ai/docs"}},"fonts":{"family":"Plus Jakarta Sans","weight":400},"integrations":{"ga4":{"measurementId":"G-R8YZRJS2XN"},"posthog":{"apiKey":"phc_7ToS2jDeWBlMu4n2JoNzoA1FnArdKwFMFoHVnAqQ6O1","apiHost":"https://us.i.posthog.com"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"openrouter-d02e98a0","hasAudioNarration":false,"actualSubdomain":"openrouter-d02e98a0","customDomains":["openrouter.ai"],"gitSource":{"_id":"6ad7fa92692c7c940ff17a31","type":"github","owner":"openrouterteam","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"collectionId":"857b68c3-cde9-4c7a-b45f-8477fff63b5c","liveDeploymentHistoryId":"6aecd163852e46238472000d","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aecd163852e46238472000d"},"feedback":{"contextualFeedback":{"allowEmail":true},"agentFeedback":true,"issues":false,"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aed06a81189461718d0f947","clientVersion":"0.0.4071","searchFilterCounts":[{"language":"default","tag":"API Reference","count":303},{"language":"default","tag":"Client SDKs","count":244},{"language":"default","tag":"Docs","count":155},{"language":"default","tag":"Cookbook","count":64},{"language":"default","tag":"Agent SDK","count":42},{"language":"default","tag":"TypeScript SDK","count":40},{"language":"default","tag":"Go SDK","count":39},{"language":"default","tag":"Python SDK","count":39},{"language":"default","tag":"Observability","count":29},{"language":"default","tag":"Features","count":23}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":true,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"/docs","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":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","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":"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":"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":"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":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","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":"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":"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":"turbopuffer-dual-write","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},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"starterQuestions":[{"_id":"6ad8ee98f69c2f90c2a8cc12","deploymentId":"6a349898c5627d470e2c2ff7","questionText":"How do I get started using decision models like Jev?","status":"active","generatedBy":"manual","createdAt":"2026-10-21T16:55:52.120Z","updatedAt":"2026-10-21T16:55:52.120Z","__v":0}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/docs/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n:root{--inverse: 3 8 10;--inverse-foreground: 252 252 254;--tooltip-background: var(--inverse);--tooltip-foreground: var(--inverse-foreground)}code,pre,pre code,.code-block code,[class*=\"code\"] code{font-family:'Geist Mono', ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace}::selection{background:rgb(118 36 244 / 0.25)}.dark ::selection,html.dark ::selection{background:rgb(200 255 0 / 0.25);color:inherit}.dark,[data-theme=\"dark\"],html.dark{--primary: 200 255 0;--primary-light: 200 255 0;--primary-dark: 200 255 0;--light-primary: 200 255 0;--primary-foreground: 3 8 10;--inverse: 252 252 254;--inverse-foreground: 3 8 10;--default-border-color: rgb(252 252 254 / 0.14)}#navbar{border-radius:0}#sidebar a[aria-current=\"page\"],nav[aria-label=\"Pages\"] a[aria-current=\"page\"]{border-radius:8px}[data-component-part=\"code-block-root\"]{border-radius:8px}a:not([class]){text-decoration-thickness:1px;text-underline-offset:2px;text-decoration-color:rgb(0 0 0 / 0.4)}a:not([class]):hover{text-decoration-color:currentColor}.dark a:not([class]),html.dark a:not([class]){text-decoration-color:rgb(255 255 255 / 0.4)}.dark a:not([class]):hover,html.dark a:not([class]):hover{text-decoration-color:currentColor}.nav-tag-pill-text{background:transparent!important;color:rgb(0 0 0 / 0.5)!important;border:1px solid rgb(0 0 0 / 0.2)!important}.dark .nav-tag-pill-text,html.dark .nav-tag-pill-text{background:transparent!important;color:rgb(252 252 254 / 0.5)!important;border:1px solid rgb(252 252 254 / 0.2)!important}.nav-logo{height:1.5rem}.dark nav[aria-label=\"Pages\"] button[aria-expanded] svg.transition-transform,html.dark nav[aria-label=\"Pages\"] button[aria-expanded] svg.transition-transform{color:rgb(252 252 254 / 0.627)}.dark nav[aria-label=\"Pages\"] button[aria-expanded]:hover svg.transition-transform,html.dark nav[aria-label=\"Pages\"] button[aria-expanded]:hover svg.transition-transform{color:rgb(252 252 254)}nav[aria-label=\"Pages\"] button[aria-expanded] svg.transition-transform{width:0.625rem;height:0.625rem}[role=\"tooltip\"][data-side],[data-radix-popper-content-wrapper]>div[data-state=\"delayed-open\"],[data-radix-popper-content-wrapper]>div[data-state=\"instant-open\"]{background-color:rgb(var(--tooltip-background))!important;color:rgb(var(--tooltip-foreground))!important}.callout [data-component-part=\"callout-content\"]>.code-block:first-child{margin-top:0}.callout [data-component-part=\"callout-content\"]>.code-block:last-child{margin-bottom:0}[data-floating-buttons] button{background-color:rgb(241 239 245)}.dark [data-floating-buttons] button,html.dark [data-floating-buttons] button{background-color:rgb(40 38 44)}[data-component-part=\"update-tag\"]{border:1px solid rgb(0 0 0 / 0.2);border-radius:9999px;padding:0.125rem 0.625rem;font-size:0.75rem;line-height:1.25rem;color:rgb(0 0 0 / 0.6)}.dark [data-component-part=\"update-tag\"],html.dark [data-component-part=\"update-tag\"]{border-color:rgb(252 252 254 / 0.2);color:rgb(252 252 254 / 0.6)}#topbar-cta-button svg{display:none}#topbar-cta-button a{padding-right:0.75rem}#topbar-cta-button .bg-primary-dark{background-color:rgb(var(--primary))}.dark #topbar-cta-button .text-white,html.dark #topbar-cta-button .text-white{color:rgb(3 8 10)}.dark #changelog-filters-content button.bg-primary,html.dark #changelog-filters-content button.bg-primary{color:rgb(3 8 10 / 0.9)!important}.changelog-status-badge{margin-left:0.5rem}.changelog-status-badge[data-color=\"gray\"]{border:1px solid rgb(3 8 10 / 0.3)!important}.dark .changelog-status-badge[data-color=\"gray\"],html.dark .changelog-status-badge[data-color=\"gray\"]{border-color:rgb(252 252 254 / 0.4)!important}.mermaid>svg{margin-inline:auto}.support-matrix table{font-size:0.8125rem}.support-matrix td,.support-matrix th{min-width:0;padding-right:0.5rem;white-space:nowrap}.support-matrix th code{padding-left:0.25rem;padding-right:0.25rem;font-size:0.6875rem}.pr-fig,.pr-mini{--pr-ink: #03080a;--pr-muted: rgb(3 8 10 / 0.69);--pr-rule: rgb(3 8 10 / 0.12);--pr-surface: #ffffff;--pr-positive-text: #007544;--pr-negative-text: #bf0024}.dark .pr-fig,.dark .pr-mini{--pr-ink: #fcfcfe;--pr-muted: rgb(252 252 254 / 0.627);--pr-rule: rgb(252 252 254 / 0.14);--pr-surface: #080d0f;--pr-positive-text: #34dfaa;--pr-negative-text: #ff2d55}.pr-fig{margin:1.5rem 0;padding:1rem;overflow-x:auto;container-type:inline-size;border:1px solid var(--pr-rule);border-radius:8px;background:var(--pr-surface)}.pr-fig svg{display:block;width:100%;height:auto}.pr-mini{margin:1rem 0 1.25rem}.pr-mini svg{display:block;max-width:100%;height:auto;margin-inline:auto}.pr-fig svg text,.pr-mini svg text{font-family:inherit;font-size:12px;fill:var(--pr-muted)}.pr-sw{display:inline-block;flex:none;width:12px;height:12px;border-radius:2px}.pr-bg-price{background:#0088fe}.pr-bg-ttft{background:#ffbb28}.pr-bg-speed{background:#7b68ee}.pr-bg-rel{background:#ff2d55}.pr-bg-429{background:#ff8042}.pr-bg-received{background:var(--pr-ink)}.pr-bg-capacity{background:rgb(var(--gray-400))}.pr-fill-ttft{fill:#ffbb28}.pr-fill-speed{fill:#7b68ee}.pr-fill-rel{fill:#ff2d55}.pr-fill-429{fill:#ff8042}.pr-fig .lbl{font-size:13px;fill:var(--pr-ink)}.pr-fig .num{fill:var(--pr-muted);font-variant-numeric:tabular-nums}.pr-fig .strong{fill:var(--pr-ink);font-weight:600}.pr-fig .halo{paint-order:stroke;stroke:var(--pr-surface);stroke-width:4px;stroke-linejoin:round}.pr-fig .axis{stroke:var(--pr-rule);stroke-width:1}.pr-fig .zone{fill:rgb(0 191 111 / 0.12)}.pr-fig .zone-lbl{font-weight:600;fill:var(--pr-positive-text)}.pr-fig .zone-lbl.muted{fill:var(--pr-muted)}.pr-fig .edge{stroke:#00bf6f;stroke-width:1.5;stroke-dasharray:4 3}.pr-fig .edge-curve{fill:none;stroke:#00bf6f;stroke-width:2;stroke-dasharray:5 3}.pr-fig .curve{fill:none;stroke:var(--pr-ink);stroke-width:2.5}.pr-fig .curve-fill{fill:var(--pr-ink);opacity:0.04}.pr-fig .dot{fill:var(--pr-muted);fill-opacity:0.8;stroke:var(--pr-surface);stroke-width:1.5}.pr-fig .dot-in{fill:#00bf6f;stroke:var(--pr-surface);stroke-width:1.5}.pr-fig .got{fill:none;stroke:var(--pr-ink);stroke-width:2}.pr-fig .got-fill{fill:var(--pr-ink);opacity:0.06}.pr-fig .cap{fill:none;stroke:#da70d6;stroke-width:2.5}.pr-fig .real{fill:none;stroke:var(--pr-muted);stroke-width:1.5;stroke-dasharray:5 4}.pr-fig .rate{fill:#ff8042}.pr-legend{display:flex;flex-wrap:wrap;justify-content:center;gap:0.375rem 1rem;margin-top:0.75rem;font-size:12px;color:var(--pr-muted)}.pr-legend span{display:inline-flex;align-items:center;gap:0.375rem}.pr-ln{display:inline-block;width:18px;height:0}.pr-ln-cap{border-top:2.5px solid #da70d6}.pr-ln-real{border-top:1.5px dashed var(--pr-muted)}.pr-table{margin-top:0.875rem;border-top:1px solid var(--pr-rule);font-size:12px}.pr-row{display:grid;grid-template-columns:76px minmax(0, 1fr) 84px;gap:0.5rem;align-items:center;padding:0.375rem 0;border-bottom:1px solid var(--pr-rule)}.pr-head{color:var(--pr-muted);white-space:nowrap}.pr-sub::before{content:\", \"}.pr-name{font-weight:600;color:var(--pr-ink)}.pr-bar{display:flex;height:10px}.pr-bar i{display:block;height:100%}.pr-share{display:flex;align-items:center;gap:0.375rem}.pr-share i{display:block;height:10px;max-width:54px;border-radius:2px;background:var(--pr-muted);opacity:0.5}.pr-share b{font-weight:600;font-variant-numeric:tabular-nums;color:var(--pr-muted)}@media (max-width: 560px){.pr-row{grid-template-columns:76px minmax(0, 1fr) 32px}.pr-share i{display:none}.pr-head{white-space:normal}.pr-sub{display:block}.pr-sub::before{content:none}}@container (max-width: 480px){.pr-fig svg text{font-size:15px}.pr-fig svg .lbl{font-size:16px}}@container (max-width: 400px){.pr-fig svg text{font-size:17px}.pr-fig svg .lbl{font-size:18px}}.pr-mini-row{display:flex;justify-content:center;align-items:center;gap:0.75rem 1.5rem}.pr-mini-row svg{flex:0 1 auto;min-width:0;margin-inline:0}@media (max-width: 640px){.pr-mini-row{flex-wrap:wrap}}.pr-mini .strong-lbl{fill:var(--pr-ink);font-weight:600}.pr-mini .amt{text-anchor:end;font-variant-numeric:tabular-nums}.pr-mini .op{font-size:20px}.pr-mini .paper{fill:var(--pr-surface);stroke:var(--pr-rule);stroke-width:1}.pr-mini .usual{stroke:var(--pr-muted);stroke-width:1;stroke-dasharray:3 3}.pr-mini .sum-line{stroke:var(--pr-ink);stroke-width:1}.pr-mini .price-pill{fill:#0088fe;opacity:0.12}.pr-mini .pill-text{fill:var(--pr-ink);font-weight:600;font-variant-numeric:tabular-nums}.pr-mini .neg-pill{fill:#ff2d55;opacity:0.12}.pr-mini .neg-text{font-size:13px;fill:var(--pr-negative-text);font-weight:600;font-variant-numeric:tabular-nums}.pr-mini .span-stream{fill:var(--pr-muted);opacity:0.3}.pr-mini .span-total{fill:var(--pr-rule)}.pr-mini .extra{opacity:0.45}.pr-mini .bad{fill:none;stroke:#ff2d55;stroke-width:1.5}.pr-mini .tree{fill:none;stroke:var(--pr-muted);stroke-width:1}.pr-mini .brace{fill:none;stroke:var(--pr-muted);stroke-width:1.25}.pr-mini .big-arrow{fill:none;stroke:var(--pr-ink);stroke-width:3}.pr-mini .big-arrow-head,.pr-mini .user-dot{fill:var(--pr-ink)}.pr-factors ul{list-style:none;padding-left:0}.pr-factors li{padding-left:0!important}.pr-factors li::before{display:none}.pr-factors .pr-sw,h3 .pr-sw{margin-right:0.625rem;transform:translateY(1px)}h3 .pr-sw{width:13px;height:13px;transform:translateY(-2px)}.pr-cols{display:grid;grid-template-columns:repeat(auto-fit, minmax(240px, 1fr));gap:0 1.75rem}"}],"page":{"pagePath":"guides/features/broadcast/s3","slug":"/guides/features/broadcast/s3","pageMetadata":{"publish":true,"title":"S3 / S3-Compatible","description":"Send traces to Amazon S3 or S3-compatible storage","seoTitle":"Broadcast to S3 | OpenRouter Observability","og:site_name":"OpenRouter Documentation","og:title":"Broadcast to S3 - Send Traces to S3 Storage","og:description":"Connect Amazon S3 or S3-compatible storage to automatically receive traces from your OpenRouter requests. Step-by-step setup guide for S3 integration.","og:image":"https://openrouter.ai/dynamic-og?title=S3%20Broadcast\u0026description=Send%20traces%20to%20S3%20storage","og:image:width":1200,"og:image:height":630,"twitter:card":"summary_large_image","twitter:site":"@OpenRouter","noindex":false,"nofollow":false,"icon":"puzzle-piece","href":"/guides/features/broadcast/s3"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Send traces to Amazon S3 or S3-compatible storage\"\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,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Frame,Heading,OptimizedImage,Table,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[_jsx(_components.a,{href:`https://aws.amazon.com/s3/`,children:`Amazon S3`}),` is a scalable object storage service. OpenRouter can send traces to any S3-compatible storage, including AWS S3, Cloudflare R2, MinIO, and other compatible services.`]}),`\n`,_jsx(Heading,{level:`2`,id:`step-1-create-an-s3-bucket-and-credentials`,children:`Step 1: Create an S3 bucket and credentials`}),`\n`,_jsx(_components.p,{children:`In your cloud provider’s console, create a bucket for storing traces and generate access credentials with write permissions to the bucket.`}),`\n`,_jsx(_components.p,{children:`For AWS S3:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Create a new S3 bucket or use an existing one`}),`\n`,_jsxs(_components.li,{children:[`Go to `,_jsx(_components.strong,{children:`IAM > Users`}),` and create a new user with programmatic access`]}),`\n`,_jsxs(_components.li,{children:[`Attach a policy that allows `,_jsx(_components.code,{children:`s3:PutObject`}),` on your bucket`]}),`\n`,_jsx(_components.li,{children:`Copy the Access Key ID and Secret Access Key`}),`\n`]}),`\n`,_jsx(_components.p,{children:`For Cloudflare R2:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Create a new R2 bucket in your Cloudflare dashboard`}),`\n`,_jsxs(_components.li,{children:[`Go to `,_jsx(_components.strong,{children:`R2 > Manage R2 API Tokens`}),` and create a new token with write permissions`]}),`\n`,_jsx(_components.li,{children:`Copy the Access Key ID, Secret Access Key, and your account’s S3 endpoint`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`step-2-enable-broadcast-in-openrouter`,children:`Step 2: Enable Broadcast in OpenRouter`}),`\n`,_jsxs(_components.p,{children:[`Go to `,_jsx(_components.a,{href:`https://openrouter.ai/settings/observability`,children:`Settings > Observability`}),` and toggle `,_jsx(_components.strong,{children:`Enable Broadcast`}),`.`]}),`\n`,_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/openrouter-d02e98a0/PSwwwiCqAD_BNeni/assets/guides/features/broadcast/arize/broadcast-enable.png?fit=max\u0026auto=format\u0026n=PSwwwiCqAD_BNeni\u0026q=85\u0026s=a48ecd5df85b4e6f3982c8402671f631`,alt:`Enable Broadcast`,\"data-og-width\":`2692`,width:`2692`,\"data-og-height\":`1296`,height:`1296`,\"data-path\":`assets/guides/features/broadcast/arize/broadcast-enable.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/openrouter-d02e98a0/PSwwwiCqAD_BNeni/assets/guides/features/broadcast/arize/broadcast-enable.png?w=280\u0026fit=max\u0026auto=format\u0026n=PSwwwiCqAD_BNeni\u0026q=85\u0026s=7efe86077718b23548daa1952206a30d 280w, https://mintcdn.com/openrouter-d02e98a0/PSwwwiCqAD_BNeni/assets/guides/features/broadcast/arize/broadcast-enable.png?w=560\u0026fit=max\u0026auto=format\u0026n=PSwwwiCqAD_BNeni\u0026q=85\u0026s=60ea4966ad97d858304fde7f0c843018 560w, https://mintcdn.com/openrouter-d02e98a0/PSwwwiCqAD_BNeni/assets/guides/features/broadcast/arize/broadcast-enable.png?w=840\u0026fit=max\u0026auto=format\u0026n=PSwwwiCqAD_BNeni\u0026q=85\u0026s=a802e2b7da4a5f47539dfacd6d20b057 840w, https://mintcdn.com/openrouter-d02e98a0/PSwwwiCqAD_BNeni/assets/guides/features/broadcast/arize/broadcast-enable.png?w=1100\u0026fit=max\u0026auto=format\u0026n=PSwwwiCqAD_BNeni\u0026q=85\u0026s=bd500570ddc62cba3b9f07984149f165 1100w, https://mintcdn.com/openrouter-d02e98a0/PSwwwiCqAD_BNeni/assets/guides/features/broadcast/arize/broadcast-enable.png?w=1650\u0026fit=max\u0026auto=format\u0026n=PSwwwiCqAD_BNeni\u0026q=85\u0026s=07809f6831bd7b1dbe024b330b447da1 1650w, https://mintcdn.com/openrouter-d02e98a0/PSwwwiCqAD_BNeni/assets/guides/features/broadcast/arize/broadcast-enable.png?w=2500\u0026fit=max\u0026auto=format\u0026n=PSwwwiCqAD_BNeni\u0026q=85\u0026s=cb6703f79619ec7323ef7beff912be05 2500w`})}),`\n`,_jsx(Heading,{level:`2`,id:`step-3-configure-s3`,children:`Step 3: Configure S3`}),`\n`,_jsxs(_components.p,{children:[`Click the edit icon next to `,_jsx(_components.strong,{children:`S3 / S3-Compatible`}),` and enter:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Bucket Name`}),`: Your S3 bucket name (e.g., `,_jsx(_components.code,{children:`my-traces-bucket`}),`)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Region`}),` (optional): AWS region (auto-detected for AWS, required for some S3-compatible services)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Custom Endpoint`}),` (optional): For S3-compatible services like R2, enter the endpoint URL (e.g., `,_jsx(_components.code,{children:`https://your-account-id.r2.cloudflarestorage.com`}),`)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Access Key Id`}),`: Your access key ID`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Secret Access Key`}),`: Your secret access key`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Session Token`}),` (optional): For temporary credentials`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Path Template`}),` (optional): Customize the object path. Default is `,_jsx(_components.code,{children:`openrouter-traces/{date}`}),`. Available variables: `,_jsx(_components.code,{children:`{prefix}`}),`, `,_jsx(_components.code,{children:`{date}`}),`, `,_jsx(_components.code,{children:`{year}`}),`, `,_jsx(_components.code,{children:`{month}`}),`, `,_jsx(_components.code,{children:`{day}`}),`, `,_jsx(_components.code,{children:`{apiKeyName}`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`step-4-test-and-save`,children:`Step 4: Test and save`}),`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Test Connection`}),` to verify the setup. The configuration only saves if the test passes.`]}),`\n`,_jsx(Heading,{level:`2`,id:`step-5-send-a-test-trace`,children:`Step 5: Send a test trace`}),`\n`,_jsxs(_components.p,{children:[`Make an API request through OpenRouter and check your S3 bucket for the trace file. Each trace is saved as a separate JSON file with the format `,_jsx(_components.code,{children:`{traceId}-{timestamp}.json`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`path-template-examples`,children:`Path template examples`}),`\n`,_jsx(_components.p,{children:`Customize how traces are organized in your bucket:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`openrouter-traces/{date}`}),` - Default, organizes by date (e.g., `,_jsx(_components.code,{children:`openrouter-traces/2024-01-15/abc123-1705312800.json`}),`)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`traces/{year}/{month}/{day}`}),` - Hierarchical date structure`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`{apiKeyName}/{date}`}),` - Organize by API key name, then date`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`production/llm-traces/{date}`}),` - Custom prefix for environment separation`]}),`\n`]}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`For time-based batching (e.g., hourly or daily aggregated files), consider using AWS Kinesis Firehose instead, which buffers records and writes batched files to S3.`})}),`\n`,_jsx(Heading,{level:`2`,id:`custom-metadata`,children:`Custom Metadata`}),`\n`,_jsxs(_components.p,{children:[`Custom metadata from the `,_jsx(_components.code,{children:`trace`}),` field is included in the JSON trace file stored in your S3 bucket. The metadata is available in the `,_jsx(_components.code,{children:`metadata`}),` field of each observation within the trace.`]}),`\n`,_jsx(Heading,{level:`3`,id:`supported-metadata-keys`,children:`Supported Metadata Keys`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Key`}),_jsx(_components.th,{children:`S3 JSON Mapping`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`trace_id`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`id`}),` (trace level)`]}),_jsx(_components.td,{children:`Custom trace identifier`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`trace_name`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`name`}),` (trace level)`]}),_jsx(_components.td,{children:`Custom name for the trace`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`span_name`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`name`}),` (observation level)`]}),_jsx(_components.td,{children:`Name for intermediate spans`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`generation_name`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`name`}),` (observation level)`]}),_jsx(_components.td,{children:`Name for the LLM generation`})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`example`,children:`Example`}),`\n`,_jsx(CodeBlock,{filename:``,lines:`true`,numberOfLines:`12`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`12`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"model\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"openai/gpt-4o\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"messages\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [{ `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"role\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"user\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"content\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Analyze this document...\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"user\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"user_12345\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"session_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"session_abc\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"trace\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"trace_name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Document Analysis\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"generation_name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Extract Key Points\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"document_type\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"contract\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"batch_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"batch_456\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`accessing-metadata-in-s3`,children:`Accessing Metadata in S3`}),`\n`,_jsxs(_components.p,{children:[`Each trace file is a JSON object. Custom metadata keys from `,_jsx(_components.code,{children:`trace`}),` are stored in the `,_jsx(_components.code,{children:`metadata`}),` field and can be queried using tools like Amazon Athena, Presto, or any JSON-aware query engine:`]}),`\n`,_jsx(CodeBlock,{filename:``,lines:`true`,numberOfLines:`6`,language:`sql`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`-- Example Athena query on S3 trace files`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`SELECT`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` json_extract_scalar(metadata, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'$.document_type'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`as`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` doc_type,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` json_extract_scalar(metadata, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'$.batch_id'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`as`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` batch_id`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`FROM`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` openrouter_traces`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`WHERE`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` json_extract_scalar(metadata, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'$.document_type'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'contract'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`additional-context`,children:`Additional Context`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.code,{children:`user`}),` field maps to `,_jsx(_components.code,{children:`userId`}),` in the trace JSON`]}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.code,{children:`session_id`}),` field maps to `,_jsx(_components.code,{children:`sessionId`}),` in the trace JSON`]}),`\n`,_jsx(_components.li,{children:`Trace files include full input/output messages, token counts, costs, and timing data alongside your custom metadata`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`billing-quantities`,children:`Billing quantities`}),`\n`,_jsxs(_components.p,{children:[`For a single-trace file, cache-write details live under `,_jsx(_components.code,{children:`trace.observations[].promptTokensDetails`}),`. With the `,_jsx(_components.strong,{children:`Cost`}),` metadata opt-in enabled, the generation quantities also appear under `,_jsx(_components.code,{children:`trace.metadata.openrouter_generation`}),` and the generation observation’s `,_jsx(_components.code,{children:`metadata.openrouter_generation`}),`.`]}),`\n`,_jsx(_components.p,{children:`For example, the generation metadata may contain:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`14`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`14`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"is_byok\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"cache_write_tokens\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`300`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"cache_creation\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"ephemeral_5m_input_tokens\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`100`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"ephemeral_1h_input_tokens\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`200`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"native_server_tool_use\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"web_search_requests\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"web_fetch_requests\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"code_execution_requests\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`2`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"usage_is_estimated\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`false`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Batch files use `,_jsx(_components.code,{children:`traces[]`}),` instead of `,_jsx(_components.code,{children:`trace`}),`. Read each generation once. These representations repeat the same generation quantities; do not add them together. Null or omitted values are unavailable, while an explicit zero is a reported or observed zero. See `,_jsx(_components.a,{href:`/guides/features/broadcast#token-and-cost-fields`,children:`Token and cost fields`}),` for estimation, TTL availability, and provider billing caveats.`]}),`\n`,_jsx(Heading,{level:`3`,id:`raw-provider-usage`,children:`Raw provider usage`}),`\n`,_jsxs(_components.p,{children:[`The same metadata locations carry `,_jsx(_components.a,{href:`/guides/features/broadcast#raw-provider-usage`,children:_jsx(_components.code,{children:`upstream_raw_response_usage`})}),` as ordinary JSON, so no additional decoding step is needed:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`12`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`12`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"upstream_raw_response_usage\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"input_tokens\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`4`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"output_tokens\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`373`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"cache_creation_input_tokens\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`300`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"cache_read_input_tokens\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"cache_creation\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"ephemeral_5m_input_tokens\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`100`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"ephemeral_1h_input_tokens\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`200`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The value can also be an array of usage reports or `,_jsx(_components.code,{children:`null`}),`, and its keys are the provider’s own. Query it with a JSON-aware engine rather than a fixed column list, for example `,_jsx(_components.code,{children:`json_extract(metadata, '$.openrouter_generation.upstream_raw_response_usage')`}),` in Athena. When it is `,_jsx(_components.code,{children:`null`}),`, check `,_jsx(_components.code,{children:`upstream_raw_response_usage_suppression_reason`}),` to distinguish suppression from unavailable usage.`]}),`\n`,_jsx(Heading,{level:`2`,id:`privacy-mode`,children:`Privacy Mode`}),`\n`,_jsxs(_components.p,{children:[`When `,_jsx(_components.a,{href:`/guides/features/broadcast#privacy-mode`,children:`Privacy Mode`}),` is enabled for this destination, prompt and completion content and provider error text are excluded from traces. All other trace data (token usage, costs, timing, model information, and custom metadata) is still sent normally. Raw provider usage is replaced with `,_jsx(_components.code,{children:`null`}),` and reported as `,_jsx(_components.code,{children:`privacy_mode`}),`, because a provider’s usage object can contain arbitrary future fields. See `,_jsx(_components.a,{href:`/guides/features/broadcast#privacy-mode`,children:`Privacy Mode`}),` for details.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"publish":true,"title":"S3 / S3-Compatible","description":"Send traces to Amazon S3 or S3-compatible storage","seoTitle":"Broadcast to S3 | OpenRouter Observability","og:site_name":"OpenRouter Documentation","og:title":"Broadcast to S3 - Send Traces to S3 Storage","og:description":"Connect Amazon S3 or S3-compatible storage to automatically receive traces from your OpenRouter requests. Step-by-step setup guide for S3 integration.","og:image":"https://openrouter.ai/dynamic-og?title=S3%20Broadcast\u0026description=Send%20traces%20to%20S3%20storage","og:image:width":1200,"og:image:height":630,"twitter:card":"summary_large_image","twitter:site":"@OpenRouter","noindex":false,"nofollow":false,"icon":"puzzle-piece","href":"/guides/features/broadcast/s3"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Step 1: Create an S3 bucket and credentials","slug":"step-1-create-an-s3-bucket-and-credentials","depth":2,"children":[]},{"title":"Step 2: Enable Broadcast in OpenRouter","slug":"step-2-enable-broadcast-in-openrouter","depth":2,"children":[]},{"title":"Step 3: Configure S3","slug":"step-3-configure-s3","depth":2,"children":[]},{"title":"Step 4: Test and save","slug":"step-4-test-and-save","depth":2,"children":[]},{"title":"Step 5: Send a test trace","slug":"step-5-send-a-test-trace","depth":2,"children":[]},{"title":"Path template examples","slug":"path-template-examples","depth":2,"children":[]},{"title":"Custom Metadata","slug":"custom-metadata","depth":2,"children":[{"title":"Supported Metadata Keys","slug":"supported-metadata-keys","depth":3,"children":[]},{"title":"Example","slug":"example","depth":3,"children":[]},{"title":"Accessing Metadata in S3","slug":"accessing-metadata-in-s3","depth":3,"children":[]},{"title":"Additional Context","slug":"additional-context","depth":3,"children":[]}]},{"title":"Billing quantities","slug":"billing-quantities","depth":2,"children":[{"title":"Raw provider usage","slug":"raw-provider-usage","depth":3,"children":[]}]},{"title":"Privacy Mode","slug":"privacy-mode","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/openrouter-d02e98a0/c1fa764d8c861cbd/anchor-scroll-fix.js","/docs/_mintlify/custom/openrouter-d02e98a0/c43dc2bfe5fa3c92/auth-cta.js"],"subdomain":"openrouter-d02e98a0","siteName":"OpenRouter | Documentation","title":"Broadcast to S3 - Send Traces to S3 Storage","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-05T01:49:54.475Z","originalFileLocation":"guides/features/broadcast/s3.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=\"dark\"}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=\"Send traces to Amazon S3 or S3-compatible storage\">\u003cmeta data-mint-head name=\"application-name\" content=\"OpenRouter | Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/openrouter-d02e98a0/EmhfYwFO2tvnkuV-/_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=\"/docs/mintlify-assets/_mintlify/favicons/openrouter-d02e98a0/EmhfYwFO2tvnkuV-/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/openrouter-d02e98a0/EmhfYwFO2tvnkuV-/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/openrouter-d02e98a0/EmhfYwFO2tvnkuV-/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/openrouter-d02e98a0/EmhfYwFO2tvnkuV-/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/openrouter-d02e98a0/EmhfYwFO2tvnkuV-/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/openrouter-d02e98a0/EmhfYwFO2tvnkuV-/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/openrouter-d02e98a0/EmhfYwFO2tvnkuV-/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/openrouter-d02e98a0/EmhfYwFO2tvnkuV-/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Broadcast to S3 - Send Traces to S3 Storage\">\u003cmeta data-mint-head property=\"og:description\" content=\"Connect Amazon S3 or S3-compatible storage to automatically receive traces from your OpenRouter requests. Step-by-step setup guide for S3 integration.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"OpenRouter Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://openrouter.ai/docs/guides/features/broadcast/s3\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://openrouter.ai/dynamic-og?title=S3%20Broadcast\u0026amp;description=Send%20traces%20to%20S3%20storage\">\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=\"Broadcast to S3 - Send Traces to S3 Storage\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Connect Amazon S3 or S3-compatible storage to automatically receive traces from your OpenRouter requests. Step-by-step setup guide for S3 integration.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://openrouter.ai/dynamic-og?title=S3%20Broadcast\u0026amp;description=Send%20traces%20to%20S3%20storage\">\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=\"/docs/mintlify-assets/_mintlify/favicons/openrouter-d02e98a0/EmhfYwFO2tvnkuV-/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"OpenRouter | Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#7624F4\">\u003clink data-mint-head rel=\"canonical\" href=\"https://openrouter.ai/docs/guides/features/broadcast/s3\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/guides/features/broadcast/s3.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://openrouter.ai/#organization\",\"name\":\"OpenRouter | Documentation\",\"url\":\"https://openrouter.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/openrouter-d02e98a0/ksNSeB_K7gD-BUDh/assets/logo-v2-light.svg?fit=max\u0026auto=format\u0026n=ksNSeB_K7gD-BUDh\u0026q=85\u0026s=690e45873843519efe02bcbe45795dac\"}},{\"@type\":\"WebSite\",\"@id\":\"https://openrouter.ai/docs#website\",\"name\":\"OpenRouter | Documentation\",\"url\":\"https://openrouter.ai/docs\",\"publisher\":{\"@id\":\"https://openrouter.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://openrouter.ai/docs/guides/features/broadcast/s3#webpage\",\"url\":\"https://openrouter.ai/docs/guides/features/broadcast/s3\",\"name\":\"S3 / S3-Compatible\",\"description\":\"Send traces to Amazon S3 or S3-compatible storage\",\"dateModified\":\"2026-11-05T01:49:54.475Z\",\"isPartOf\":{\"@id\":\"https://openrouter.ai/docs#website\"},\"breadcrumb\":{\"@id\":\"https://openrouter.ai/docs/guides/features/broadcast/s3#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://openrouter.ai/docs/guides/features/broadcast/s3#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Observability\",\"item\":\"https://openrouter.ai/docs/guides/features/logs\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Broadcast\",\"item\":\"https://openrouter.ai/docs/guides/features/broadcast\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"S3 / S3-Compatible\",\"item\":\"https://openrouter.ai/docs/guides/features/broadcast/s3\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://openrouter.ai/docs/guides/features/broadcast/s3#article\",\"headline\":\"S3 / S3-Compatible\",\"name\":\"S3 / S3-Compatible\",\"description\":\"Send traces to Amazon S3 or S3-compatible storage\",\"url\":\"https://openrouter.ai/docs/guides/features/broadcast/s3\",\"mainEntityOfPage\":{\"@id\":\"https://openrouter.ai/docs/guides/features/broadcast/s3#webpage\"},\"image\":\"https://openrouter.ai/dynamic-og?title=S3%20Broadcast\u0026description=Send%20traces%20to%20S3%20storage\",\"dateModified\":\"2026-11-05T01:49:54.475Z\",\"publisher\":{\"@id\":\"https://openrouter.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://openrouter.ai/docs#website\"}}]}\u003c/script>","siteName":"OpenRouter | Documentation","nav":{"global":null,"tabs":[{"tab":"Docs","icon":"book","groups":[{"group":"Overview","icon":"compass","pages":[{"title":"Quickstart","icon":"rocket","href":"/quickstart"},{"title":"Principles","icon":"book","href":"/guides/overview/principles"},{"title":"Models","icon":"cube","href":"/guides/overview/models"},{"group":"Multimodal","icon":"layer-group","pages":[{"title":"Multimodal Capabilities","icon":"compass","sidebarTitle":"Overview","href":"/guides/overview/multimodal/overview"},{"title":"Image Generation","icon":"wand-magic-sparkles","href":"/guides/overview/multimodal/image-generation"},{"title":"Video Generation","icon":"film","href":"/guides/overview/multimodal/video-generation"},{"title":"Text-to-Speech","icon":"microphone","href":"/guides/overview/multimodal/tts"},{"title":"Speech-to-Text","icon":"headset","href":"/guides/overview/multimodal/stt"},{"title":"Audio","icon":"volume-high","href":"/guides/overview/multimodal/audio"},{"title":"PDF Inputs","icon":"file-pdf","sidebarTitle":"PDFs","href":"/guides/overview/multimodal/pdfs"},{"title":"Image Inputs","icon":"image","sidebarTitle":"Image Understanding","href":"/guides/overview/multimodal/image-understanding"},{"title":"Video Inputs","icon":"video","sidebarTitle":"Video Understanding","href":"/guides/overview/multimodal/videos"}]},{"title":"Frequently Asked Questions","icon":"question","sidebarTitle":"FAQ","href":"/faq"},{"title":"Report Feedback","icon":"bug","href":"/guides/overview/report-feedback"}]},{"group":"Models \u0026 Routing","icon":"route","pages":[{"title":"Model Fallbacks","icon":"arrows-rotate","href":"/guides/routing/model-fallbacks"},{"title":"Provider Routing","icon":"network-wired","sidebarTitle":"Provider Selection","href":"/guides/routing/provider-selection"},{"title":"How OpenRouter Routes Traffic Between Providers","icon":"route","sidebarTitle":"Traffic Routing","href":"/guides/providers/traffic-routing"},{"title":"Private Endpoints","icon":"lock","href":"/guides/routing/private-endpoints"},{"group":"Model Variants","icon":"gem","pages":[{"title":"Model Variants","icon":"layer-group","sidebarTitle":"Overview","href":"/guides/routing/model-variants/overview"},{"title":"Free Variant","icon":"circle-dollar","sidebarTitle":"Free","href":"/guides/routing/model-variants/free"},{"title":"Extended Variant","icon":"arrows-left-right","sidebarTitle":"Extended","href":"/guides/routing/model-variants/extended"},{"title":"Exacto Variant","icon":"gem","sidebarTitle":"Exacto","href":"/guides/routing/model-variants/exacto"},{"title":"Thinking Variant","icon":"brain","sidebarTitle":"Thinking","href":"/guides/routing/model-variants/thinking"},{"title":"Online Variant","icon":"globe-pointer","sidebarTitle":"Online","href":"/guides/routing/model-variants/online"},{"title":"Nitro Variant","icon":"bolt","sidebarTitle":"Nitro","href":"/guides/routing/model-variants/nitro"},{"title":"Floor Variant","icon":"arrow-down-to-line","sidebarTitle":"Floor","href":"/guides/routing/model-variants/floor"}]},{"group":"Routers","icon":"robot","pages":[{"title":"Auto Router","icon":"wand-magic-sparkles","href":"/guides/routing/routers/auto-router"},{"title":"Body Builder","icon":"hammer","href":"/guides/routing/routers/body-builder"},{"title":"Free Models Router","icon":"gift","href":"/guides/routing/routers/free-router"},{"title":"Latest Model Resolution","icon":"clock-rotate-left","href":"/guides/routing/routers/latest-resolution"},{"title":"Pareto Router","icon":"chart-line","href":"/guides/routing/routers/pareto-router"},{"title":"Fusion Router","icon":"circle-nodes","href":"/guides/routing/routers/fusion-router"},{"title":"Jev Router","icon":"route","href":"/guides/routing/routers/jev-router"},{"title":"Switchyard","icon":"train-track","href":"/guides/routing/routers/switchyard-router"}]},{"title":"Auto Exacto","icon":"crosshairs","href":"/guides/routing/auto-exacto"}]},{"group":"Tool Calling","icon":"toolbox","pages":[{"title":"Client Tools","icon":"laptop-code","sidebarTitle":"Client Tools","href":"/guides/features/tool-calling"},{"group":"Server Tools","icon":"server","pages":[{"title":"Server Tools","icon":"compass","sidebarTitle":"Overview","tag":"Beta","href":"/guides/features/server-tools"},{"title":"Web Search","icon":"globe","tag":"Beta","href":"/guides/features/server-tools/web-search"},{"title":"Web Fetch","icon":"link","tag":"Beta","href":"/guides/features/server-tools/web-fetch"},{"title":"Datetime","icon":"clock","tag":"Beta","href":"/guides/features/server-tools/datetime"},{"title":"Image Generation","icon":"image","tag":"Beta","href":"/guides/features/server-tools/image-generation"},{"title":"Apply Patch","icon":"file-code","tag":"Beta","href":"/guides/features/server-tools/apply-patch"},{"title":"Shell","icon":"terminal","tag":"Beta","href":"/guides/features/server-tools/shell"},{"title":"Bash","icon":"terminal","tag":"Beta","href":"/guides/features/server-tools/bash"},{"title":"Files","hidden":true,"icon":"folder-open","tag":"Beta","href":"/guides/features/server-tools/files"},{"title":"Search Models","icon":"magnifying-glass","tag":"Beta","href":"/guides/features/server-tools/search-models"},{"title":"Tool Search","icon":"magnifying-glass","tag":"Beta","href":"/guides/features/server-tools/tool-search"},{"title":"Fusion","icon":"circle-nodes","tag":"Beta","href":"/guides/features/server-tools/fusion"},{"title":"Advisor","icon":"lightbulb","tag":"Beta","href":"/guides/features/server-tools/advisor"},{"title":"Subagent","icon":"sitemap","tag":"Beta","href":"/guides/features/server-tools/subagent"}]},{"group":"Plugins","icon":"plug","pages":[{"title":"Plugins","icon":"compass","sidebarTitle":"Overview","href":"/guides/features/plugins"},{"title":"Web Search","icon":"globe","href":"/guides/features/plugins/web-search"},{"title":"Response Healing","icon":"bandage","href":"/guides/features/plugins/response-healing"},{"title":"Alignment","icon":"shield-check","tag":"Beta","href":"/guides/features/plugins/alignment"},{"title":"Armor","icon":"shield-halved","tag":"Beta","href":"/guides/features/plugins/armor"}]}]},{"group":"Features","icon":"stars","pages":[{"group":"Workspaces","icon":"folder-tree","pages":[{"title":"Workspaces","sidebarTitle":"Overview","icon":"grid-2","href":"/guides/features/workspaces"},{"title":"Workspace Budgets","icon":"wallet","href":"/guides/features/workspaces/workspace-budgets"},{"title":"Switching Workspaces","icon":"repeat","href":"/guides/features/workspaces/switching"}]},{"title":"Notifications","icon":"bell","href":"/guides/features/notifications"},{"title":"Files API","sidebarTitle":"Files","icon":"folder-open","tag":"Beta","href":"/guides/features/files-api"},{"title":"Containers","icon":"box","tag":"Beta","href":"/guides/features/containers"},{"title":"Presets","icon":"sliders","href":"/guides/features/presets"},{"title":"Custom Classifiers","icon":"tag","href":"/guides/features/classifiers"},{"title":"Response Caching","icon":"box-archive","href":"/guides/features/response-caching"},{"title":"Structured Outputs","icon":"code","href":"/guides/features/structured-outputs"},{"title":"Message Transforms","icon":"arrows-rotate","href":"/guides/features/message-transforms"},{"title":"Zero Completion Insurance","icon":"shield","href":"/guides/features/zero-completion-insurance"},{"title":"App Attribution","icon":"chart-line","href":"/app-attribution"},{"group":"Batch API","icon":"boxes-stacked","pages":[{"title":"Batch API","sidebarTitle":"Overview","icon":"boxes-stacked","href":"/guides/features/batch-api"},{"title":"Batch API Quickstart","sidebarTitle":"Quickstart","icon":"rocket","href":"/batch-quickstart"}]},{"group":"Guardrails","icon":"shield-check","pages":[{"title":"Guardrails","icon":"book-open","sidebarTitle":"Overview","href":"/guides/features/guardrails"},{"title":"Guardrail Policies","icon":"shield","sidebarTitle":"Guardrail Policies","href":"/guides/features/guardrails/policies"},{"title":"Migrating to Guardrail Policies","icon":"arrow-right-arrow-left","sidebarTitle":"Migrating to policies","href":"/guides/features/guardrails/policies-migration"},{"group":"Prompt Injection Detection","icon":"syringe","root":{"title":"Prompt Injection Detection","icon":"syringe","href":"/guides/features/guardrails/prompt-injection"},"pages":[{"title":"Allowlist","icon":"list-check","href":"/guides/features/guardrails/prompt-injection/allowlist"}]},{"title":"Sensitive Info Guardrail","icon":"eye-slash","sidebarTitle":"Sensitive Info","href":"/guides/features/guardrails/sensitive-info"},{"title":"Detected Secret Formats","icon":"key","sidebarTitle":"Secret Formats","href":"/guides/features/guardrails/secret-formats"}]},{"title":"Service Tiers","icon":"layer-group","href":"/guides/features/service-tiers"},{"title":"Router Metadata","icon":"circle-info","href":"/guides/features/router-metadata"}]},{"group":"Observability","icon":"eye","pages":[{"title":"Logs","icon":"list","href":"/guides/features/logs"},{"title":"Activity","icon":"chart-line","href":"/guides/features/activity"},{"title":"Input \u0026 Output Logging","icon":"file-lines","sidebarTitle":"Input \u0026 Output Logging","href":"/guides/features/input-output-logging"},{"group":"Broadcast","icon":"broadcast-tower","root":{"title":"Broadcast","icon":"compass","sidebarTitle":"Overview","href":"/guides/features/broadcast"},"pages":[{"title":"Arize AX","icon":"puzzle-piece","href":"/guides/features/broadcast/arize"},{"title":"Braintrust","icon":"puzzle-piece","href":"/guides/features/broadcast/braintrust"},{"title":"ClickHouse","icon":"puzzle-piece","href":"/guides/features/broadcast/clickhouse"},{"title":"Comet Opik","icon":"puzzle-piece","href":"/guides/features/broadcast/opik"},{"title":"Datadog","icon":"puzzle-piece","href":"/guides/features/broadcast/datadog"},{"title":"Elastic Observability","icon":"puzzle-piece","href":"/guides/features/broadcast/elastic"},{"title":"Google BigQuery","icon":"puzzle-piece","href":"/guides/features/broadcast/bigquery"},{"title":"Grafana Cloud","icon":"puzzle-piece","href":"/guides/features/broadcast/grafana"},{"title":"Hugging Face Storage Buckets","icon":"puzzle-piece","href":"/guides/features/broadcast/hugging-face"},{"title":"Langfuse","icon":"puzzle-piece","href":"/guides/features/broadcast/langfuse"},{"title":"LangSmith","icon":"puzzle-piece","href":"/guides/features/broadcast/langsmith"},{"title":"New Relic","icon":"puzzle-piece","href":"/guides/features/broadcast/newrelic"},{"title":"OpenTelemetry Collector","icon":"puzzle-piece","href":"/guides/features/broadcast/otel-collector"},{"title":"PostHog","icon":"puzzle-piece","href":"/guides/features/broadcast/posthog"},{"title":"Raindrop","icon":"puzzle-piece","href":"/guides/features/broadcast/raindrop"},{"title":"Ramp","description":"Send traces to Ramp","icon":"puzzle-piece","href":"/guides/features/broadcast/ramp"},{"title":"S3 / S3-Compatible","icon":"puzzle-piece","href":"/guides/features/broadcast/s3"},{"title":"Sentry","description":"Send traces to Sentry","icon":"puzzle-piece","href":"/guides/features/broadcast/sentry"},{"title":"Snowflake","icon":"puzzle-piece","href":"/guides/features/broadcast/snowflake"},{"title":"W\u0026B Weave","icon":"puzzle-piece","href":"/guides/features/broadcast/weave"},{"title":"Webhook","icon":"puzzle-piece","href":"/guides/features/broadcast/webhook"}]}]},{"group":"Authentication","icon":"shield-check","pages":[{"title":"OAuth PKCE","icon":"shield-check","sidebarTitle":"OAuth","href":"/guides/overview/auth/oauth"},{"title":"Workload Identity Federation","icon":"fingerprint","sidebarTitle":"Workload Identity","href":"/guides/overview/auth/workload-identity-federation"},{"title":"Management API Keys","icon":"key","href":"/guides/overview/auth/management-api-keys"},{"title":"Security settings","icon":"lock","href":"/guides/overview/auth/security-settings"},{"title":"BYOK","icon":"key","href":"/guides/overview/auth/byok"},{"title":"Single Sign-On (SSO)","icon":"shield-halved","href":"/guides/features/sso"},{"title":"SCIM Group Mappings","icon":"users-gear","href":"/guides/features/scim-mappings"}]},{"group":"Ori","icon":"terminal","pages":[{"title":"Ori","icon":"terminal","href":"/guides/ori/overview"},{"title":"Ori Eval","icon":"vial-circle-check","href":"/guides/ori/eval"},{"group":"Ori Harness","icon":"plug","pages":[{"title":"Ori Harness","sidebarTitle":"Overview","icon":"plug","href":"/guides/ori/harness"},{"title":"Ori Codex","sidebarTitle":"Codex","icon":"terminal","href":"/guides/ori/codex"},{"title":"Ori Cursor","sidebarTitle":"Cursor","icon":"terminal","href":"/guides/ori/cursor"}]},{"title":"File Writing","icon":"folder","href":"/guides/ori/files"},{"title":"Ori Configuration","icon":"sliders","href":"/guides/ori/configuration"},{"title":"Vault Secrets for Interns","icon":"vault","href":"/guides/ori/vault"},{"title":"Changelog","icon":"clock-rotate-left","href":"/guides/ori/changelog"}]},{"group":"Developer Tools","icon":"wrench","pages":[{"title":"MCP","icon":"plug","href":"/guides/overview/mcp-server"},{"title":"Terraform Provider","icon":"cubes","href":"/guides/overview/terraform"},{"title":"Stripe Projects","icon":"stripe","href":"/guides/overview/stripe-projects"}]},{"group":"Privacy","icon":"shield","expanded":false,"pages":[{"title":"Data Collection","icon":"database","href":"/guides/privacy/data-collection"},{"title":"Provider Logging","icon":"file-lines","href":"/guides/privacy/provider-logging"},{"title":"Zero Data Retention","icon":"shield-halved","sidebarTitle":"ZDR","href":"/guides/features/zdr"},{"title":"In-Region Routing","icon":"map-location-dot","href":"/guides/features/in-region-routing"},{"title":"Sovereign AI","icon":"globe","href":"/guides/features/sovereign-ai"}]},{"group":"Best Practices","icon":"lightbulb","expanded":false,"pages":[{"title":"Latency and Performance","icon":"gauge-high","href":"/guides/best-practices/latency-and-performance"},{"title":"Prompt Caching","icon":"database","href":"/guides/best-practices/prompt-caching"},{"title":"Spend Controls","icon":"wallet","href":"/guides/best-practices/spend-controls"},{"title":"Capping Shared Agent Keys","icon":"robot","href":"/guides/best-practices/capping-shared-agent-keys"},{"title":"Uptime Optimization","icon":"chart-line","href":"/guides/best-practices/uptime-optimization"},{"title":"Reasoning Tokens","icon":"lightbulb","href":"/guides/best-practices/reasoning-tokens"}]},{"group":"Providers","icon":"server","expanded":false,"pages":[{"title":"Provider Integration","icon":"cloud","sidebarTitle":"Integration","href":"/guides/providers/integration"},{"title":"How OpenRouter Routes Traffic Between Providers","icon":"route","sidebarTitle":"Traffic Routing","href":"/guides/providers/traffic-routing"}]},{"group":"Community","icon":"users","expanded":false,"pages":[{"title":"Frameworks and Integrations Overview","icon":"puzzle-piece","href":"/guides/community/frameworks-and-integrations-overview"},{"title":"Awesome OpenRouter","icon":"star","href":"/guides/community/awesome-openrouter"},{"title":"Effect AI SDK","icon":"puzzle-piece","href":"/guides/community/effect-ai-sdk"},{"title":"Arize AX","icon":"puzzle-piece","href":"/guides/community/arize"},{"title":"LangChain","icon":"puzzle-piece","href":"/guides/community/langchain"},{"title":"LiveKit","icon":"puzzle-piece","href":"/guides/community/livekit"},{"title":"Langfuse","icon":"puzzle-piece","href":"/guides/community/langfuse"},{"title":"Mastra","icon":"puzzle-piece","href":"/guides/community/mastra"},{"title":"OpenAI SDK","icon":"puzzle-piece","href":"/guides/community/openai-sdk"},{"title":"Anthropic Agent SDK","icon":"puzzle-piece","href":"/guides/community/anthropic-agent-sdk"},{"title":"PydanticAI","icon":"puzzle-piece","href":"/guides/community/pydantic-ai"},{"title":"Render","icon":"puzzle-piece","href":"/guides/community/render"},{"title":"Replit","icon":"puzzle-piece","href":"/guides/community/replit"},{"title":"TanStack AI","icon":"puzzle-piece","href":"/guides/community/tanstack-ai"},{"title":"Jev Documentation: Using the TypeSafe Decision Model on OpenRouter","sidebarTitle":"Jev (TypeSafe)","icon":"scale-balanced","href":"/guides/community/jev"},{"title":"Jev Tutorial: Make Your First Decision Call on OpenRouter","sidebarTitle":"Jev Tutorial","icon":"bolt","href":"/guides/community/jev-tutorial"},{"title":"Multimodal Decisions: Images, Audio, and Video in the Decisions API","sidebarTitle":"Multimodal Decisions","icon":"image","href":"/guides/community/multimodal-decisions"},{"title":"Extractions API: Typed Fields from Text, Images, and PDFs","sidebarTitle":"Extractions API","icon":"table-list","href":"/guides/community/extractions"},{"title":"Jev SDK for TypeScript and Python (TypeSafe SDK)","sidebarTitle":"TypeSafe SDK (Jev)","icon":"puzzle-piece","href":"/guides/community/typesafe-sdk"},{"title":"Vercel AI SDK","icon":"puzzle-piece","href":"/guides/community/vercel-ai-sdk"},{"title":"Xcode","icon":"puzzle-piece","href":"/guides/community/xcode"},{"title":"Zapier","icon":"puzzle-piece","href":"/guides/community/zapier"},{"title":"Infisical","icon":"puzzle-piece","href":"/guides/community/infisical"}]}]},{"tab":"API Reference","icon":"code","pages":[{"title":"API Reference","href":"/api_reference/overview"}]},{"tab":"Client SDKs","icon":"cube","pages":[{"title":"Client SDKs","href":"/client-sdks/overview"}]},{"tab":"Agent SDK","icon":"cube","pages":[{"title":"Agent SDK","href":"/agent-sdk/overview"}]},{"tab":"Cookbook","icon":"book-open","pages":[{"title":"Cookbook","href":"/cookbook/get-started/quickstart"}]}]},"basePath":"","title":"Broadcast to S3 - Send Traces to S3 Storage","buildId":"dpl_DQCMP4mismmBj3AFK7YZqNhrtLNq","deploymentId":"dpl_DQCMP4mismmBj3AFK7YZqNhrtLNq","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-CAXmh2H7.js","DynamicMarkdown-B95U9rYS.js","zoom-image-lightbox-CgttNQ9S.js","lightbox-handle-r17bVUz3.js"]}