PageSourceSearch

https://opencost.io/assets/js/ff664563.4a2d1bd1.js

js opencost.io collected 2026-10-02 03:23:35 UTC 40,387 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunkweb_opencost=globalThis.webpackChunkweb_opencost||[]).push([[9463],{7681(e,s,i){i.r(s),i.d(s,{assets:()=>c,contentTitle:()=>n,default:()=>a,frontMatter:()=>d,metadata:()=>r,toc:()=>h});const r=JSON.parse('{"id":"integrations/api","title":"API","description":"The OpenCost API provides real-time and historical reporting of Kubernetes cloud costs based on on-demand list pricing as well as the cloud costs retrieved from cloud providers through their cost and usage reports.","source":"@site/docs/integrations/api.md","sourceDirName":"integrations","slug":"/integrations/api","permalink":"/docs/integrations/api","draft":false,"unlisted":false,"editUrl":"https://github.com/opencost/opencost-website/tree/main/docs/integrations/api.md","tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"sidebar_position":2},"sidebar":"docsSidebar","previous":{"title":"OpenCost Integrations","permalink":"/docs/integrations/"},"next":{"title":"API Examples","permalink":"/docs/integrations/api-examples"}}');var t=i(4848),l=i(8453);const d={sidebar_position:2},n="API",c={},h=[{value:"Allocation API",id:"allocation-api",level:2},{value:"<code>/allocation</code>",id:"allocation",level:3},{value:"Assets API",id:"assets-api",level:2},{value:"<code>/assets</code>",id:"assets",level:3},{value:"Cloud Costs API",id:"cloud-costs-api",level:2},{value:"<code>/cloudCost</code>",id:"cloudcost",level:3},{value:"External Costs API",id:"external-costs-api",level:2},{value:"<code>customCost/timeseries</code>",id:"customcosttimeseries",level:3},{value:"<code>customCost/total</code>
1",id:"customcosttotal",level:3},{value:"OpenAPI Swagger",id:"openapi-swagger",level:2},{value:"Theoretical error bounds",id:"theoretical-error-bounds",level:2}];function o(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,l.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"api",children:"API"})}),"\n",(0,t.jsx)(s.p,{children:"The OpenCost API provides real-time and historical reporting of Kubernetes cloud costs based on on-demand list pricing as well as the cloud costs retrieved from cloud providers through their cost and usage reports."}),"\n",(0,t.jsx)(s.admonition,{type:"note",children:(0,t.jsxs)(s.p,{children:["Throughout our API documentation, we use ",(0,t.jsx)(s.code,{children:"localhost:9003"})," as the default OpenCost API URL, but your OpenCost instance may be exposed by a service or ingress. To reach the OpenCost API at port 9003, run: ",(0,t.jsx)(s.code,{children:"kubectl -n opencost port-forward deployment/opencost 9003"}),". You may also expose the OpenCost UI on port 9090 with the command ",(0,t.jsx)(s.code,{children:"kubectl -n opencost port-forward deployment/opencost 9003 9090"}),"."]})}),"\n",(0,t.jsxs)(s.p,{children:["Examples using the API endpoints are provided in the ",(0,t.jsx)(s.a,{href:"api-examples",children:"API Examples"})," page."]}),"\n",(0,t.jsx)(s.h2,{id:"allocation-api",children:"Allocation API"}),"\n",(0,t.jsxs)(s.p,{children:["The standard OpenCost API query for costs and resources allocated to Kubernetes workloads based on on-demand list pricing. You may specify the ",(0,t.jsx)(s.code,{children:"window"})," date range, the Kubernetes primitive(s) to ",(0,t.jsx)(s.code,{children:"aggregate"})," on, the ",(0,t.jsx)(s.code,{children:"step"})," for the duration of returned sets, the ",(0,t.jsx)(s.code,{children:"resolution"})," for the duration to use for Prometheus queries, ",(0,t.jsx)(s.code,{children:"includeIdle"})," for whether to include the ",(0,t.jsx)(s.code,{children:"__idle__"})," usage for the cluster, ",(0,t.jsx)(s.code,{children:"shareIdle"})," for whether to distribute idle costs across non-idle allocations, and ",(0,t.jsx)(s.code,{children:"idleByNode"})," for whether to calculate idle costs per node instead of per cluster."]}),"\n",(0,t.jsx)(s.h3,{id:"allocation",children:(0,t.jsx)(s.code,{children:"/allocation"})}),"\n",(0,t.jsx)(s.p,{children:"QUERY PARAMETERS"}),"\n",(0,t.jsxs)("table",{children:[(0,t.jsxs)("tr",{children:[(0,t.jsxs)("th",{id:"window",children:["window",(0,t.jsx)("a",{class:"hash-link",href:"#a_window",title:"window",children:"\u200b"})]}),(0,t.jsx)("th",{align:"left",children:"string"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{valign:"top",children:(0,t.jsx)("b",{children:"required"})}),(0,t.jsxs)("td",{children:[(0,t.jsxs)(s.p,{children:["Duration of time over which to query. Accepts: words like ",(0,t.jsx)("code",{children:"today"}),", ",(0,t.jsx)("code",{children:"week"}),", ",(0,t.jsx)("code",{children:"month"}),", ",(0,t.jsx)("code",{children:"yesterday"}),", ",(0,t.jsx)("code",{children:"lastweek"}),", ",(0,t.jsx)("code",{children:"lastmonth"}),"; durations like ",(0,t.jsx)("code",{children:"30m"}),", ",(0,t.jsx)("code",{children:"12h"}),", ",(0,t.jsx)("code",{children:"7d"}),"; ",(0,t.jsx)("a",{href:"https://datatracker.ietf.org/doc/html/rfc3339",children:"RFC3339"})," date pairs like ",(0,t.jsx)("code",{children:"2021-01-02T15:04:05Z,2021-02-02T15:04:05Z"}),"; ",(0,t.jsx)("a",{href:"https://www.unixtimestamp.com/",children:"Unix timestamps"})," like ",(0,t.jsx)("code",{children:"1578002645,1580681045"}),"."]}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{}),(0,t.jsxs)(s.p,{children:["Examples:",(0,t.jsx)("br",{})]}),(0,t.jsxs)("ul",{children:[(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=today"})," - The current day"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=month"})," - The month-to-date"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=lastweek"})," - The previous week"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=30m"})," - The last 30 minutes"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=12h"})," - The last 12 hours"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=7d"})," - The previous 7 days"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=2023-01-18T10:30:00Z,2023-01-19T10:30:00Z"})," - ",(0,t.jsx)("a",{href:"https://datatracker.ietf.org/doc/html/rfc3339",children:"RFC3339"})," date/time range"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=1674073869,1674193869"})," - ",(0,t.jsx)("a",{href:"https://www.unixtimestamp.com/",children:"Unix timestamp"})," range"]})]})]})]}),(0,t.jsxs)("tr",{children:[(0,t.jsxs)("th",{id:"aggregate",children:["aggregate",(0,t.jsx)("a",{class:"hash-l
1ink",href:"#a_aggregate",title:"aggregate",children:"\u200b"})]}),(0,t.jsx)("th",{align:"left",children:"string"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{}),(0,t.jsxs)("td",{children:[(0,t.jsxs)(s.p,{children:["Field by which to aggregate the results. Accepts: ",(0,t.jsx)("code",{children:"cluster"}),", ",(0,t.jsx)("code",{children:"node"}),", ",(0,t.jsx)("code",{children:"namespace"}),", ",(0,t.jsx)("code",{children:"controllerKind"}),", ",(0,t.jsx)("code",{children:"controller"}),", ",(0,t.jsx)("code",{children:"service"}),", ",(0,t.jsx)("code",{children:"pod"}),", ",(0,t.jsx)("code",{children:"container"}),", ",(0,t.jsxs)("code",{children:["label",":LABEL_NAME"]}),", and ",(0,t.jsxs)("code",{children:["annotation",":name"]}),". Also accepts comma-separated lists for multi-aggregation, like ",(0,t.jsxs)("code",{children:["aggregate=namespace,label",":app"]}),"."]}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{}),(0,t.jsxs)(s.p,{children:["Examples:",(0,t.jsx)("br",{})]}),(0,t.jsxs)("ul",{children:[(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=cluster"})," - Aggregates by the cluster."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=node"})," - Aggregates by the compute nodes in the cluster."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=namespace"})," - Aggregates by the namespaces in the cluster."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=controllerKind"})," - Aggregates by the kinds of controllers present in the cluster."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=controller"})," - Aggregates by the individual controllers within the cluster."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=service"})," - Aggregates by the services within the cluster."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=pod"})," - Aggregates by the individual pods within the cluster."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=container"})," - Aggregates by the containers present in the cluster."]})]})]})]}),(0,t.jsxs)("tr",{children:[(0,t.jsxs)("th",{id:"step",children:["step",(0,t.jsx)("a",{class:"hash-link",href:"#a_step",title:"step",children:"\u200b"})]}),(0,t.jsx)("th",{align:"left",children:"string"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{}),(0,t.jsxs)("td",{children:[(0,t.jsxs)(s.p,{children:["Duration of a single allocation set. If unspecified, this defaults to the ",(0,t.jsx)(s.code,{children:"window"}),", so that you receive exactly one set for the entire window. If specified, it works chronologically backward, querying in durations of step until the full window is covered. Default is ",(0,t.jsx)("code",{children:"window"}),"."]}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{}),(0,t.jsxs)(s.p,{children:["Examples:",(0,t.jsx)("br",{})]}),(0,t.jsxs)("ul",{children:[(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"step=30m"})," - 30 minute steps over the duration of the window."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"step=2h"})," - 2 hour steps over the duration of the window"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"step=1d"})," - Daily steps over the duration of the window (ie. ",(0,t.jsx)("code",{children:"lastweek"})," or ",(0,t.jsx)("code",{children:"month"})]})]})]})]}),(0,t.jsxs)("tr",{children:[(0,t.jsxs)("th",{id:"resolution",children:["resolution",(0,t.jsx)("a",{class:"hash-link",href:"#a_resolution",title:"resolution",children:"\u200b"})]}),(0,t.jsx)("th",{align:"left",children:"string"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{}),(0,t.jsxs)("td",{children:[(0,t.jsxs)(s.p,{children:["Duration to use as resolution in Prometheus queries. Smaller values (i.e. higher resolutions) will provide better accuracy, but worse performance (i.e. slower query time, higher memory use). Larger values (i.e. lower resolutions) will perform better, but at the expense of lower accuracy for short-running workloads. Default is ",(0,t.jsx)("code",{children:"1m"}),"."]}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{}),(0,t.jsxs)(s.p,{children:["Examples:",(0,t.jsx)("br",{})]}),(0,t.jsxs)("ul",{children:[(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"resolution=1m"})," - Highly accurate, slower query."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"resolution=30m"})," - Less accurate, faster query. Not recommended for short-lived workloads."]})]})]})]}),(0,t.jsxs)("tr",{children:[(0,t.jsxs)("th",{id:"includeidle",children:["includeIdle",(0,t.jsx)("a",{class:"hash-l
1ink",href:"#a_includeidle",title:"includeIdle",children:"\u200b"})]}),(0,t.jsx)("th",{align:"left",children:"boolean"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{}),(0,t.jsxs)("td",{children:[(0,t.jsxs)(s.p,{children:["Whether to return the calculated ",(0,t.jsx)("code",{children:"__idle__"})," field for the query. Default is ",(0,t.jsx)("code",{children:"false"}),"."]}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{}),(0,t.jsxs)(s.p,{children:["Examples:",(0,t.jsx)("br",{})]}),(0,t.jsx)("ul",{children:(0,t.jsx)("li",{children:(0,t.jsx)("code",{children:"includeIdle=true"})})})]})]}),(0,t.jsxs)("tr",{children:[(0,t.jsxs)("th",{id:"shareIdle",children:["shareIdle",(0,t.jsx)("a",{class:"hash-link",href:"#a_shareidle",title:"shareIdle",children:"\u200b"})]}),(0,t.jsx)("th",{align:"left",children:"boolean"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{}),(0,t.jsxs)("td",{children:[(0,t.jsxs)(s.p,{children:["Whether to distribute idle costs across non-idle allocations. Default is ",(0,t.jsx)("code",{children:"false"}),"."]}),(0,t.jsxs)(s.p,{children:["When disabled, idle costs are allocated to a separate ",(0,t.jsx)("code",{children:"__idle__"})," allocation.\nWhen enabled, idle costs are distributed across non-idle allocations. This happens proportionally to the non-idle costs of each allocation. For example, if one allocation has twice as much non-idle costs as another, it also receives twice the amount of idle costs. This calculation happens separately for each resource (like CPU or RAM)."]}),(0,t.jsxs)(s.p,{children:["You can choose to distribute idle costs per cluster or per node using the ",(0,t.jsx)("code",{children:"idleByNode"})," parameter."]}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{}),(0,t.jsxs)(s.p,{children:["Examples:",(0,t.jsx)("br",{})]}),(0,t.jsx)("ul",{children:(0,t.jsx)("li",{children:(0,t.jsx)("code",{children:"shareIdle=true"})})})]})]}),(0,t.jsxs)("tr",{children:[(0,t.jsxs)("th",{id:"idleByNode",children:["idleByNode",(0,t.jsx)("a",{class:"hash-link",href:"#a_idlebynode",title:"idleByNode",children:"\u200b"})]}),(0,t.jsx)("th",{align:"left",children:"boolean"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{}),(0,t.jsxs)("td",{children:[(0,t.jsxs)(s.p,{children:["Whether to calculate idle costs per node instead of per cluster. Default is ",(0,t.jsx)("code",{children:"false"}),"."]}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{}),(0,t.jsxs)(s.p,{children:["Examples:",(0,t.jsx)("br",{})]}),(0,t.jsx)("ul",{children:(0,t.jsx)("li",{children:(0,t.jsx)("code",{children:"idleByNode=true"})})})]})]})]}),"\n",(0,t.jsx)(s.h2,{id:"assets-api",children:"Assets API"}),"\n",(0,t.jsx)(s.p,{children:"The Assets API retrieves backing cost data broken down by individual assets in your cluster. It is not yet exposed in the UI."}),"\n",(0,t.jsx)(s.h3,{id:"assets",children:(0,t.jsx)(s.code,{children:"/assets"})}),"\n",(0,t.jsx)(s.p,{children:"QUERY PARAMETERS"}),"\n",(0,t.jsxs)("table",{children:[(0,t.jsxs)("tr",{children:[(0,t.jsxs)("th",{id:"window",children:["window",(0,t.jsx)("a",{class:"hash-link",href:"#as_window",title:"window",children:"\u200b"})]}),(0,t.jsx)("th",{align:"left",children:"string"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{valign:"top",children:(0,t.jsx)("b",{children:"required"})}),(0,t.jsxs)("td",{children:[(0,t.jsxs)(s.p,{children:["Duration of time over which to query. Accepts: words like ",(0,t.jsx)("code",{children:"today"}),", ",(0,t.jsx)("code",{children:"week"}),", ",(0,t.jsx)("code",{children:"month"}),", ",(0,t.jsx)("code",{children:"yesterday"}),", ",(0,t.jsx)("code",{children:"lastweek"}),", ",(0,t.jsx)("code",{children:"lastmonth"}),"; durations like ",(0,t.jsx)("code",{children:"30m"}),", ",(0,t.jsx)("code",{children:"12h"}),", ",(0,t.jsx)("code",{children:"7d"}),"; ",(0,t.jsx)("a",{href:"https://datatracker.ietf.org/doc/html/rfc3339",children:"RFC3339"})," date pairs like ",(0,t.jsx)("code",{children:"2021-01-02T15:04:05Z,2021-02-02T15:04:05Z"}),"; ",(0,t.jsx)("a",{href:"https://www.unixtimestamp.com/",children:"Unix timestamps"})," like ",(0,t.jsx)("code",{children:"1578002645,1580681045"}),"."]}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{}),(0,t.jsxs)(s.p,{children:["Examples:",(0,t.jsx)("br",{})]}),(0,t.jsxs)("ul",{children:[(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=today"})," - The current day"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=month"})," - The month-to-date"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=lastweek"})," - The previous week"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=30m"})," - The last 30 minutes"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=12h"})," - The last 12 hours"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=7d"})," - The previous 7 days"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=2023-01-18T10:30:00Z,2023-01-19T10:30:00Z"})," - ",(0,t.jsx)("a",{href:"https://datatracker.ietf.org/doc/html/rfc3339",children:"RFC3339"})," date/time range"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=1674073869,1674193869"})," - ",(0,t.jsx)("a",{href:"https://www.unixtimestamp.com/",children:"Unix timestamp"})," range"]})]})]})]})]}),"\n",(0,t.jsx)(s.h2,{id:"cloud-costs-api",children:"Cloud Costs API"}),"\n",(0,t.jsxs)(s.p,{children:["The Cloud Costs API retrieves cloud cost data from cloud providers by reading cost and usage reports. You will need additional ",(0,t.jsx)(s.a,{href:"../configuration/",children:"configuration"})," for supporting the billing integration with your cloud provider."]}),"\n",(0,t.jsx)(s.h3,{id:"cloudcost",children:(0,t.jsx)(s.code,{children:"/cloudCost"})}),"\n",(0,t.jsx)(s.p,{children:"QUERY PARAMETERS"}),"\n",(0,t.jsxs)("table",{children:[(0,t.jsxs)("tr",{children:[(0,t.jsxs)("th",{id:"window",children:["window",(0,t.jsx)("a",{class:"hash-l
1ink",href:"#c_window",title:"window",children:"\u200b"})]}),(0,t.jsx)("th",{align:"left",children:"string"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{valign:"top",children:(0,t.jsx)("b",{children:"required"})}),(0,t.jsxs)("td",{children:[(0,t.jsxs)(s.p,{children:["Duration of time over which to query. Accepts: words like ",(0,t.jsx)("code",{children:"today"}),", ",(0,t.jsx)("code",{children:"week"}),", ",(0,t.jsx)("code",{children:"month"}),", ",(0,t.jsx)("code",{children:"yesterday"}),", ",(0,t.jsx)("code",{children:"lastweek"}),", ",(0,t.jsx)("code",{children:"lastmonth"}),"; durations like ",(0,t.jsx)("code",{children:"30m"}),", ",(0,t.jsx)("code",{children:"12h"}),", ",(0,t.jsx)("code",{children:"7d"}),"; ",(0,t.jsx)("a",{href:"https://datatracker.ietf.org/doc/html/rfc3339",children:"RFC3339"})," date pairs like ",(0,t.jsx)("code",{children:"2021-01-02T15:04:05Z,2021-02-02T15:04:05Z"}),"; ",(0,t.jsx)("a",{href:"https://www.unixtimestamp.com/",children:"Unix timestamps"})," like ",(0,t.jsx)("code",{children:"1578002645,1580681045"}),"."]}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{}),(0,t.jsxs)(s.p,{children:["Examples:",(0,t.jsx)("br",{})]}),(0,t.jsxs)("ul",{children:[(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=today"})," - The current day"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=month"})," - The month-to-date"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=lastweek"})," - The previous week"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=30m"})," - The last 30 minutes"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=12h"})," - The last 12 hours"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=7d"})," - The previous 7 days"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=2023-10-18T10:30:00Z,2023-10-19T10:30:00Z"})," - ",(0,t.jsx)("a",{href:"https://datatracker.ietf.org/doc/html/rfc3339",children:"RFC3339"})," date/time range"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=1674073869,1674193869"})," - ",(0,t.jsx)("a",{href:"https://www.unixtimestamp.com/",children:"Unix timestamp"})," range"]})]})]})]}),(0,t.jsxs)("tr",{children:[(0,t.jsxs)("th",{id:"aggregate",children:["aggregate",(0,t.jsx)("a",{class:"hash-link",href:"#c_aggregate",title:"aggregate",children:"\u200b"})]}),(0,t.jsx)("th",{align:"left",children:"string"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{}),(0,t.jsxs)("td",{children:[(0,t.jsxs)(s.p,{children:["Field by which to aggregate the results.\nAccepts: ",(0,t.jsx)("code",{children:"invoiceEntityID"}),", ",(0,t.jsx)("code",{children:"accountID"}),", ",(0,t.jsx)("code",{children:"provider"}),", ",(0,t.jsx)("code",{children:"providerID"}),", ",(0,t.jsx)("code",{children:"category"}),", and ",(0,t.jsx)("code",{children:"service"}),".\nAlso accepts comma-separated lists for multi-aggregation, like ",(0,t.jsx)("code",{children:"aggregate=provider,service"}),".\nIf no value is provided, the entire list of items is returned."]}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{}),(0,t.jsxs)(s.p,{children:["Examples:",(0,t.jsx)("br",{})]}),(0,t.jsxs)("ul",{children:[(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=accountID"})," - Aggregates by the Account."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=category"})," - Aggregates by the individual controllers within the cluster."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=invoiceEntityID"})," - Aggregates by the Invoice Entity."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=provider"})," - Aggregates by the Provider."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=providerID"})," - Aggregates by the Provider ID."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=service"})," - Aggregates by the Service."]})]})]})]}),(0,t.jsxs)("tr",{children:[(0,t.jsxs)("th",{id:"accumulate",children:["accumulate",(0,t.jsx)("a",{class:"hash-link",href:"#c_accumulate",title:"accumulate",children:"\u200b"})]}),(0,t.jsx)("th",{align:"left",children:"string"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{}
1),(0,t.jsxs)("td",{children:[(0,t.jsxs)(s.p,{children:["Step size of the accumulation.\nAccepts: ",(0,t.jsx)("code",{children:"all"}),", ",(0,t.jsx)("code",{children:"hour"}),", ",(0,t.jsx)("code",{children:"day"}),", ",(0,t.jsx)("code",{children:"week"}),", ",(0,t.jsx)("code",{children:"month"}),", and ",(0,t.jsx)("code",{children:"quarter"}),"."]}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{}),(0,t.jsxs)(s.p,{children:["Default: ",(0,t.jsx)("code",{children:"day"})]}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{}),(0,t.jsxs)(s.p,{children:["Examples:",(0,t.jsx)("br",{})]}),(0,t.jsx)("ul",{children:(0,t.jsx)("li",{})})]})]}),(0,t.jsxs)("tr",{children:[(0,t.jsxs)("th",{id:"filter",children:["filter",(0,t.jsx)("a",{class:"hash-link",href:"#c_filter",title:"filter",children:"\u200b"})]}),(0,t.jsx)("th",{align:"left",children:"string"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{}),(0,t.jsx)("td",{children:(0,t.jsxs)(s.p,{children:[(0,t.jsx)("a",{href:"https://docs.kubecost.com/apis/filters-api",children:"V2 filter parameter"}),"."]})})]})]}),"\n",(0,t.jsx)(s.h2,{id:"external-costs-api",children:"External Costs API"}),"\n",(0,t.jsx)(s.h3,{id:"customcosttimeseries",children:(0,t.jsx)(s.code,{children:"customCost/timeseries"})}),"\n",(0,t.jsxs)(s.p,{children:["Samples of costs of third-party services. Essentially equivalent to calling ",(0,t.jsx)(s.code,{children:"/total"})," over a range of time steps. For example, querying for the past 7 days will give you a ",(0,t.jsx)(s.code,{children:"/total"})," response for each of those days, individually. All available aggregations and filters are the same as with ",(0,t.jsx)(s.code,{children:"/total"})]}),"\n",(0,t.jsx)(s.p,{children:"QUERY PARAMETERS"}),"\n",(0,t.jsxs)("table",{children:[(0,t.jsxs)("tr",{children:[(0,t.jsxs)("th",{id:"window",children:["window",(0,t.jsx)("a",{class:"hash-link",href:"#a_window",title:"window",children:"\u200b"})]}),(0,t.jsx)("th",{align:"left",children:"string"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{valign:"top",children:(0,t.jsx)("b",{children:"required"})}),(0,t.jsxs)("td",{children:[(0,t.jsxs)(s.p,{children:["Duration of time over which to query. Accepts: words like ",(0,t.jsx)("code",{children:"today"}),", ",(0,t.jsx)("code",{children:"week"}),", ",(0,t.jsx)("code",{children:"month"}),", ",(0,t.jsx)("code",{children:"yesterday"}),", ",(0,t.jsx)("code",{children:"lastweek"}),", ",(0,t.jsx)("code",{children:"lastmonth"}),"; durations like ",(0,t.jsx)("code",{children:"30m"}),", ",(0,t.jsx)("code",{children:"12h"}),", ",(0,t.jsx)("code",{children:"7d"}),"; ",(0,t.jsx)("a",{href:"https://datatracker.ietf.org/doc/html/rfc3339",children:"RFC3339"})," date pairs like ",(0,t.jsx)("code",{children:"2021-01-02T15:04:05Z,2021-02-02T15:04:05Z"}),"; ",(0,t.jsx)("a",{href:"https://www.unixtimestamp.com/",children:"Unix timestamps"})," like ",(0,t.jsx)("code",{children:"1578002645,1580681045"}),"."]}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{}),(0,t.jsxs)(s.p,{children:["Examples:",(0,t.jsx)("br",{})]}),(0,t.jsxs)("ul",{children:[(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=today"})," - The current day"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=month"})," - The month-to-date"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=lastweek"})," - The previous week"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=30m"})," - The last 30 minutes"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=12h"})," - The last 12 hours"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=7d"})," - The previous 7 days"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=2024-05-18T10:30:00Z,2024-05-19T10:30:00Z"})," - ",(0,t.jsx)("a",{href:"https://datatracker.ietf.org/doc/html/rfc3339",children:"RFC3339"})," date/time range"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=1674073869,1674193869"})," - ",(0,t.jsx)("a",{href:"https://www.unixtimestamp.com/",children:"Unix timestamp"})," range"]})]})]})]}),(0,t.jsxs)("tr",{children:[(0,t.jsxs)("th",{id:"aggregate",children:["aggregate",(0,t.jsx)("a",{class:"hash-l
1ink",href:"#c_aggregate",title:"aggregate",children:"\u200b"})]}),(0,t.jsx)("th",{align:"left",children:"string"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{}),(0,t.jsxs)("td",{children:[(0,t.jsxs)(s.p,{children:["Field by which to aggregate the results.\nAccepts: ",(0,t.jsx)("code",{children:"invoiceEntityID"}),", ",(0,t.jsx)("code",{children:"accountID"}),", ",(0,t.jsx)("code",{children:"provider"}),", ",(0,t.jsx)("code",{children:"providerID"}),", ",(0,t.jsx)("code",{children:"category"}),", and ",(0,t.jsx)("code",{children:"service"}),".\nAlso accepts comma-separated lists for multi-aggregation, like ",(0,t.jsx)("code",{children:"provider,service"}),".\nIf no value is provided, the entire list of items is returned."]}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{}),(0,t.jsxs)(s.p,{children:["Examples:",(0,t.jsx)("br",{})]}),(0,t.jsxs)("ul",{children:[(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=accountID"})," - Aggregates by the Account."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=category"})," - Aggregates by the individual controllers within the cluster."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=invoiceEntityID"})," - Aggregates by the Invoice Entity."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=provider"})," - Aggregates by the Provider."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=providerID"})," - Aggregates by the Provider ID."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=service"})," - Aggregates by the Service."]})]})]})]}),(0,t.jsxs)("tr",{children:[(0,t.jsxs)("th",{id:"accumulate",children:["accumulate",(0,t.jsx)("a",{class:"hash-link",href:"#c_accumulate",title:"accumulate",children:"\u200b"})]}),(0,t.jsx)("th",{align:"left",children:"string"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{}),(0,t.jsxs)("td",{children:[(0,t.jsxs)(s.p,{children:["Step size of the accumulation.\nAccepts: ",(0,t.jsx)("code",{children:"all"}),", ",(0,t.jsx)("code",{children:"hour"}),", ",(0,t.jsx)("code",{children:"day"}),", ",(0,t.jsx)("code",{children:"week"}),", ",(0,t.jsx)("code",{children:"month"}),", and ",(0,t.jsx)("code",{children:"quarter"}),"."]}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{}),(0,t.jsxs)(s.p,{children:["Default: ",(0,t.jsx)("code",{children:"day"})]}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{}),(0,t.jsxs)(s.p,{children:["Examples:",(0,t.jsx)("br",{})]}),(0,t.jsxs)("ul",{children:[(0,t.jsx)("li",{children:(0,t.jsx)("code",{children:"accumulate=hour"})}),(0,t.jsx)("li",{children:(0,t.jsx)("code",{children:"accumulate=day"})}),(0,t.jsx)("li",{children:(0,t.jsx)("code",{children:"accumulate=week"})})]})]})]}),(0,t.jsxs)("tr",{children:[(0,t.jsxs)("th",{id:"filter",children:["filter",(0,t.jsx)("a",{class:"hash-link",href:"#c_filter",title:"filter",children:"\u200b"})]}),(0,t.jsx)("th",{align:"left",children:"string"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{}),(0,t.jsxs)("td",{children:[(0,t.jsxs)(s.p,{children:["The available filters are the same as the available aggregations. Accepts: ",(0,t.jsx)("a",{href:"https://docs.kubecost.com/apis/filters-api",children:"V2 filter parameters"}),"."]}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{}),(0,t.jsxs)(s.p,{children:["Examples:",(0,t.jsx)("br",{})]}),(0,t.jsxs)("ul",{children:[(0,t.jsx)("li",{children:(0,t.jsx)("code",{children:'filter=domain:"datadog"'})}),(0,t.jsx)("li",{children:(0,t.jsx)("code",{children:'filter=resourceType:"infra_hosts"'})}),(0,t.jsx)("li",{children:(0,t.jsx)("code",{children:'filter=zone:"us"'})})]})]})]})]}),"\n",(0,t.jsx)(s.h3,{id:"customcosttotal",children:(0,t.jsx)(s.code,{children:"customCost/total"})}),"\n",(0,t.jsx)(s.p,{children:"Used to retrieve a summary of third-party costs over a window."}),"\n",(0,t.jsxs)("table",{children:[(0,t.jsxs)("tr",{children:[(0,t.jsxs)("th",{id:"window",children:["window",(0,t.jsx)("a",{class:"hash-link",href:"#a_window",title:"window",children:"\u200b"})]}),(0,t.jsx)("th",{align:"left",children:"string"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{valign:"top",children:(0,t.jsx)("b",{children:"required"})}),(0,t.jsxs)("td",{children:[(0,t.jsxs)(s.p,{children:["Duration of time over which to query. Accepts: 
1words like ",(0,t.jsx)("code",{children:"today"}),", ",(0,t.jsx)("code",{children:"week"}),", ",(0,t.jsx)("code",{children:"month"}),", ",(0,t.jsx)("code",{children:"yesterday"}),", ",(0,t.jsx)("code",{children:"lastweek"}),", ",(0,t.jsx)("code",{children:"lastmonth"}),"; durations like ",(0,t.jsx)("code",{children:"30m"}),", ",(0,t.jsx)("code",{children:"12h"}),", ",(0,t.jsx)("code",{children:"7d"}),"; ",(0,t.jsx)("a",{href:"https://datatracker.ietf.org/doc/html/rfc3339",children:"RFC3339"})," date pairs like ",(0,t.jsx)("code",{children:"2021-01-02T15:04:05Z,2021-02-02T15:04:05Z"}),"; ",(0,t.jsx)("a",{href:"https://www.unixtimestamp.com/",children:"Unix timestamps"})," like ",(0,t.jsx)("code",{children:"1578002645,1580681045"}),"."]}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{}),(0,t.jsxs)(s.p,{children:["Examples:",(0,t.jsx)("br",{})]}),(0,t.jsxs)("ul",{children:[(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=today"})," - The current day"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=month"})," - The month-to-date"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=lastweek"})," - The previous week"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=30m"})," - The last 30 minutes"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=12h"})," - The last 12 hours"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=7d"})," - The previous 7 days"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=2024-05-18T10:30:00Z,2024-05-19T10:30:00Z"})," - ",(0,t.jsx)("a",{href:"https://datatracker.ietf.org/doc/html/rfc3339",children:"RFC3339"})," date/time range"]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"window=1674073869,1674193869"})," - ",(0,t.jsx)("a",{href:"https://www.unixtimestamp.com/",children:"Unix timestamp"})," range"]})]})]})]}),(0,t.jsxs)("tr",{children:[(0,t.jsxs)("th",{id:"aggregate",children:["aggregate",(0,t.jsx)("a",{class:"hash-link",href:"#c_aggregate",title:"aggregate",children:"\u200b"})]}),(0,t.jsx)("th",{align:"left",children:"string"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{}),(0,t.jsxs)("td",{children:[(0,t.jsxs)(s.p,{children:["Field by which to aggregate the results.\nAccepts: ",(0,t.jsx)("code",{children:"invoiceEntityID"}),", ",(0,t.jsx)("code",{children:"accountID"}),", ",(0,t.jsx)("code",{children:"provider"}),", ",(0,t.jsx)("code",{children:"providerID"}),", ",(0,t.jsx)("code",{children:"category"}),", and ",(0,t.jsx)("code",{children:"service"}),".\nAlso accepts comma-separated lists for multi-aggregation, like ",(0,t.jsx)("code",{children:"provider,service"}),".\nIf no value is provided, the entire list of items is returned."]}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{}),(0,t.jsxs)(s.p,{children:["Examples:",(0,t.jsx)("br",{})]}),(0,t.jsxs)("ul",{children:[(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=accountID"})," - Aggregates by the Account."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=category"})," - Aggregates by the individual controllers within the cluster."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=invoiceEntityID"})," - Aggregates by the Invoice Entity."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=provider"})," - Aggregates by the Provider."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=providerID"})," - Aggregates by the Provider ID."]}),(0,t.jsxs)("li",{children:[(0,t.jsx)("code",{children:"aggregate=service"})," - Aggregates by the Service."]})]})]})]}),(0,t.jsxs)("tr",{children:[(0,t.jsxs)("th",{id:"accumulate",children:["accumulate",(0,t.jsx)("a",{class:"hash-link",href:"#c_accumulate",title:"accumulate",children:"\u200b"})]}),(0,t.jsx)("th",{align:"left",children:"string"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{}),(0,t.jsxs)("td",{children:[(0,t.jsxs)(s.p,{children:["Step size of the accumulation.\nAccepts: ",(0,t.jsx)("code",{children:"all"}),", ",(0,t.jsx)("code",{children:"hour"}),", ",(0,t.jsx)("code",{children:"day"}),", ",(0,t.jsx)("code",{children:"week"}),", ",(0,t.jsx)("code",{children:"month"}),", and ",(0,t.jsx)("code",{children:"quarter"}),"."]}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{}),(0,t.jsxs)(s.p,{children:["Default: ",(0,t.jsx)("code",{children:"day"})]}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{}),(0,t.jsxs)(s.p,{children:["Examples:",(0,t.jsx)("br",{})]}),(0,t.jsxs)("ul",{children:[(0,t.jsx)("li",{children:(0,t.jsx)("code",{children:"accumulate=hour"})}),(0,t.jsx)("li",{children:(0,t.jsx)("code",{children:"accumulate=day"})}),(0,t.jsx)("li",{children:(0,t.jsx)("code",{children:"accumulate=week"})})]})]})]}),(0,t.jsxs)("tr",{children:[(0,t.jsxs)("th",{id:"filter",children:["filter",(0,t.jsx)("a",{class:"hash-l
1ink",href:"#c_filter",title:"filter",children:"\u200b"})]}),(0,t.jsx)("th",{align:"left",children:"string"})]}),(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{}),(0,t.jsxs)("td",{children:[(0,t.jsxs)(s.p,{children:["The available filters are the same as the available aggregations. Accepts: ",(0,t.jsx)("a",{href:"https://docs.kubecost.com/apis/filters-api",children:"V2 filter parameters"}),"."]}),(0,t.jsx)("br",{}),(0,t.jsx)("br",{}),(0,t.jsxs)(s.p,{children:["Examples:",(0,t.jsx)("br",{})]}),(0,t.jsxs)("ul",{children:[(0,t.jsx)("li",{children:(0,t.jsx)("code",{children:'filter=domain:"datadog"'})}),(0,t.jsx)("li",{children:(0,t.jsx)("code",{children:'filter=resourceType:"infra_hosts"'})}),(0,t.jsx)("li",{children:(0,t.jsx)("code",{children:'filter=zone:"us"'})})]})]})]})]}),"\n",(0,t.jsx)(s.h2,{id:"openapi-swagger",children:"OpenAPI Swagger"}),"\n",(0,t.jsxs)(s.p,{children:["The source for the OpenCost API is available as an OpenAPI ",(0,t.jsx)(s.a,{href:"https://github.com/opencost/opencost/blob/develop/docs/swagger.json",children:"swagger.json"}),".\nThe OpenCost API is available under the ",(0,t.jsx)(s.a,{href:"https://github.com/opencost/opencost/blob/develop/LICENSE",children:"Apache 2.0 License"}),"."]}),"\n",(0,t.jsx)(s.h2,{id:"theoretical-error-bounds",children:"Theoretical error bounds"}),"\n",(0,t.jsx)(s.p,{children:"Tuning the resolution parameter allows the querier to make tradeoffs between accuracy and performance. For long-running pods (>1d) resolution can be tuned aggressively low (>10m) with relatively little effect on accuracy. However, even modestly low resolutions (5m) can result in significant accuracy degradation for short-running pods (<1h)."}),"\n",(0,t.jsx)(s.p,{children:"Here, we provide theoretical error bounds for different resolution values given pods of differing running durations. The tuple represents lower- and upper-bounds for accuracy as a percentage of the actual value. For example:"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"1.00, 1.00 means that results should always be accurate to less than 0.5% error"}),"\n",(0,t.jsx)(s.li,{children:"0.83, 1.00 means that results should never be high by more than 0.5% error, but could be low by as much as 17% error"}),"\n",(0,t.jsx)(s.li,{children:"-1.00, 10.00 means that the result could be as high as 1000% error (e.g. 30s pod being counted for 5m) or the pod could be missed altogether, i.e. -100% error."}),"\n"]}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{style:{textAlign:"right"},children:"resolution"}),(0,t.jsx)(s.th,{style:{textAlign:"center"},children:"30s pod"}),(0,t.jsx)(s.th,{style:{textAlign:"center"},children:"5m pod"}),(0,t.jsx)(s.th,{style:{textAlign:"center"},children:"1h pod"}),(0,t.jsx)(s.th,{style:{textAlign:"center"},children:"1d pod"}),(0,t.jsx)(s.th,{style:{textAlign:"center"},children:"7d pod"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{style:{textAlign:"right"},children:"1m"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"-1.00, 2.00"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"0.80, 1.00"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"0.98, 1.00"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"1.00, 1.00"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"1.00, 1.00"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{style:{textAlign:"right"},children:"2m"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"-1.00, 4.00"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"0.80, 1.20"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"0.97, 1.00"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"1.00, 1.00"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"1.00, 1.00"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{style:{textAlign:"right"},children:"5m"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"-1.00, 10.00"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"-1.00, 1.00"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"0.92, 1.00"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"1.00, 1.00"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"1.00, 1.00"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{style:{textAlign:"right"},children:"10m"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"-1.00, 20.00"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"-1.00, 2.00"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"0.83, 1.00"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"0.99, 1.00"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"1.00, 1.00"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{style:{textAlign:"right"},children:"30m"}),(0,t.jsx)(s.td,{style:{textAlign:"center"}
1,children:"-1.00, 60.00"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"-1.00, 6.00"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"0.50, 1.00"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"0.98, 1.00"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"1.00, 1.00"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{style:{textAlign:"right"},children:"60m"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"-1.00, 120.00"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"-1.00, 12.00"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"-1.00, 1.00"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"0.96, 1.00"}),(0,t.jsx)(s.td,{style:{textAlign:"center"},children:"0.99, 1.00"})]})]})]})]})}function a(e={}){const{wrapper:s}={...(0,l.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(o,{...e})}):o(e)}},8453(e,s,i){i.d(s,{R:()=>d,x:()=>n});var r=i(6540);const t={},l=r.createContext(t);function d(e){const s=r.useContext(l);return r.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function n(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),r.createElement(l.Provider,{value:s},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.