POST an energy bill PDF and get structured JSON back: retailer, account, billing period, every charge with its tariff rates, meter reads and validation issues.
The bill upload endpoint accepts an energy bill PDF and returns structured billing data in a single request. Data will be validated on this endpoint in the pro plan. You send the file as multipart/form-data, and Termina extracts the retailer, account details, billing period, every charge line item with its tariff rates, and meter reads, then returns them as JSON alongside any validation issues that need review.It works for Australian, New Zealand, British and United States electricity, gas, and LPG bills across all major retailers.
bill_uuid: a unique identifier for the stored bill, used to reference it in later calls.
energy_data: the structured bill. This includes the retailer, account number, supply address, billing period, invoice and due dates, a full list of itemised charges (each classified and broken into tariff rate steps), totals, and meter reads. It is null if the bill could not be parsed.
validation_issues: a list of anything that needs attention, each with a severity (WARNING, ERROR, or ERROR_IGNORABLE), the affected field, and a message.
What file formats does the bill upload endpoint accept?
The endpoint accepts energy bills as PDF, JPEG, PNG, or TIFF files sent as multipart/form-data under the file field. Both digital PDFs from retailer portals and scanned or photographed paper bills are supported.
Which energy types can the endpoint extract?
Electricity, gas, and LPG bills. The extraction engine covers network charges, retail charges, environmental levies, market charges, and demand charges — with tariff rate steps and time-of-use breakdowns where present on the bill.
What data fields are returned in the response?
Over 30 fields including: retailer and account details, NMI/MIRN, supply address, billing period, invoice and due dates, every charge line item with its classification and tariff rate steps, time-of-use consumption breakdowns (peak, off-peak, shoulder), demand, meter readings, bill totals, and GST. The response schema on this page lists every field and type.
Can the endpoint extract time-of-use tariff data?
Yes. Where time-of-use pricing is present on the bill, Termina extracts peak, off-peak, and shoulder rates and consumption separately — including the tariff rate steps and the kWh consumed in each period. The response schema on this page has the full field reference.
What happens if a bill cannot be fully parsed?
The energy_data field returns null and validation_issues describes what went wrong. Partial extractions return the data that was successfully read along with warnings on uncertain fields — so you always know what you can trust and what needs review.
How does bill validation work?
Every extraction runs built-in validation that cross-checks the extracted charges against the bill total, verifies billing period dates are consistent, flags unusually high or low usage, and checks that tariff rates fall within expected ranges for the retailer and region. Issues are returned in the validation_issues array.
How do I authenticate requests to this endpoint?
Include your API key in the X-API-Key request header. You can generate a free key instantly — no credit card required. See the quickstart for authentication details and code examples.
What is the rate limit on the bill upload endpoint?
Free tier accounts can process up to 50 bills total. Pro accounts have configurable rate limits based on your plan. The API returns a 429 status code with a Retry-After header if you exceed your limit.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Termina","colors":{"primary":"#16A34A","light":"#22C55E","dark":"#15803D"},"logo":{"light":"https://mintcdn.com/termina/Vudugf3RiDPggz-L/logo/light.svg?fit=max\u0026auto=format\u0026n=Vudugf3RiDPggz-L\u0026q=85\u0026s=f9a720fd440b95ebbc5af0330cf99b87","dark":"https://mintcdn.com/termina/Vudugf3RiDPggz-L/logo/dark.svg?fit=max\u0026auto=format\u0026n=Vudugf3RiDPggz-L\u0026q=85\u0026s=6356580189d186804361baa0d73d57e4"},"favicon":"https://mintcdn.com/termina/Vudugf3RiDPggz-L/favicon.svg?fit=max\u0026auto=format\u0026n=Vudugf3RiDPggz-L\u0026q=85\u0026s=cdd8cc47ed143908b759c29199fcb8fa","api":{"openapi":"openapi.yaml"},"markdown":{"schema":true},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"termina","hasAudioNarration":false,"actualSubdomain":"termina","customDomains":["docs.termina.com"],"gitSource":{"type":"github","owner":"threadlet","repo":"mintlify-docs","deployBranch":"main","isPrivate":false,"contentDirectory":"","mountPath":"","label":""},"chroma":{"collectionId":"eed8167a-05de-4351-babf-f4dda1668120","liveDeploymentHistoryId":"6ad4958f29f358e945e18722","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad4958f29f358e945e18722"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ad4958f29f358e945e18722","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"Documentation","count":12},{"language":"default","tag":"Business electricity rates","count":8},{"language":"default","tag":"Getting Started","count":2},{"language":"default","tag":"Bill extraction API reference","count":1},{"language":"default","tag":"Rates API reference","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/bills/upload","slug":"/api-reference/bills/upload","pageMetadata":{"title":"Upload","description":"POST an energy bill PDF and get structured JSON back: retailer, account, billing period, every charge with its tariff rates, meter reads and validation issues.","openapi":"POST /api/v2/public/bills/upload/","href":"/api-reference/bills/upload"},"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: \"POST an energy bill PDF and get structured JSON back: retailer, account, billing period, every charge with its tariff rates, meter reads and validation issues.\"\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`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,CodeBlock,Heading}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`The bill upload endpoint accepts an energy bill PDF and returns structured billing data in a single request. Data will be validated on this endpoint in the pro plan. You send the file as `,_jsx(_components.code,{children:`multipart/form-data`}),`, and Termina extracts the retailer, account details, billing period, every charge line item with its tariff rates, and meter reads, then returns them as JSON alongside any validation issues that need review.`]}),`\n`,_jsx(_components.p,{children:`It works for Australian, New Zealand, British and United States electricity, gas, and LPG bills across all major retailers.`}),`\n`,_jsx(Heading,{level:`2`,id:`authentication`,children:`Authentication`}),`\n`,_jsxs(_components.p,{children:[`Every request must include your API key in the `,_jsx(_components.code,{children:`X-API-Key`}),` header. Requests without a valid key return `,_jsx(_components.code,{children:`401 Unauthorized`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`example-request`,children:`Example request`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,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:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://termina.io/api/v2/public/bills/upload/`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"X-API-Key: your-api-key-here\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -F`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"[email protected]\"`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`example-response`,children:`Example response`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`51`,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:`51`,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:` \"bill_uuid\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"9f3b2c1a-7d4e-4a2b-9c8f-1e6d5a4b3c2d\"`}),_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:` \"energy_data\"`}),_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:` \"retailer_name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Origin Energy\"`}),_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:` \"account_number\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"1234567890\"`}),_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:` \"fuel_type\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"elec\"`}),_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:` \"site_identifier\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"6203782197\"`}),_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:` \"supply_address\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"123 Example St, Melbourne VIC 3000\"`}),_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:` \"billing_period\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"start_date\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-02-01\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"end_date\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-02-28\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"days\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`28`}),_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:` \"invoice_number\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"INV-4456120\"`}),_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:` \"issue_date\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-03-03\"`}),_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:` \"due_date\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-03-17\"`}),_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:` \"charges\"`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"classification\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Retail Peak\"`}),_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:` \"tariff_name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Peak 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:` \"amount\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`412.50`}),_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:` \"rate_steps\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"rate\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`27.5`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"rate_unit\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"cent/kWh\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"quantity\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1500`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"quantity_unit\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"kWh\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"amount\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`412.50`}),_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`,_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:` \"classification\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Supply\"`}),_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:` \"tariff_name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Daily supply charge\"`}),_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:` \"amount\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`33.60`}),_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:` \"rate_steps\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"rate\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1.20`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"rate_unit\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"$/day\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"quantity\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`28`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"quantity_unit\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"days\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"amount\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`33.60`}),_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`,_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:` \"total_amount\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`490.71`}),_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:` \"total_due\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`490.71`}),_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:` \"meter_reads\"`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"meter_number\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"M123456\"`}),_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:` \"previous_read\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`10500`}),_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:` \"current_read\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`12000`}),_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:` \"consumption\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1500`}),_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:` \"consumption_unit\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"kWh\"`}),_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:` \"read_type\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"actual\"`})]}),`\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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"validation_issues\"`}),_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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"severity\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"WARNING\"`}),_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:` \"field\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"due_date\"`}),_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:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Due date inferred from issue date; not explicitly stated on the bill.\"`})]}),`\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`,_jsx(Heading,{level:`2`,id:`what-you-get-back`,children:`What you get back`}),`\n`,_jsx(_components.p,{children:`The response has three top-level fields:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`bill_uuid`})}),`: a unique identifier for the stored bill, used to reference it in later calls.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`energy_data`})}),`: the structured bill. This includes the retailer, account number, supply address, billing period, invoice and due dates, a full list of itemised charges (each classified and broken into tariff rate steps), totals, and meter reads. It is `,_jsx(_components.code,{children:`null`}),` if the bill could not be parsed.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`validation_issues`})}),`: a list of anything that needs attention, each with a severity (`,_jsx(_components.code,{children:`WARNING`}),`, `,_jsx(_components.code,{children:`ERROR`}),`, or `,_jsx(_components.code,{children:`ERROR_IGNORABLE`}),`), the affected field, and a message.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`common-use-cases`,children:`Common use cases`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Procurement and bill validation`}),`: confirm a retailer has billed the correct rates against a contract.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Tariff comparison`}),`: extract current rates to benchmark against alternative offers.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Emissions and AASB S2 reporting`}),`: pull consumption and meter data as a structured input for Scope 2 reporting.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Portfolio management`}),`: ingest bills across multiple sites without manual data entry.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Embedded Products`}),`: Expose actions on your application when pricing or billing usage is required.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`frequently-asked-questions`,children:`Frequently asked questions`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`What file formats does the bill upload endpoint accept?`,id:`what-file-formats-does-the-bill-upload-endpoint-accept`,children:_jsxs(_components.p,{children:[`The endpoint accepts energy bills as PDF, JPEG, PNG, or TIFF files sent as `,_jsx(_components.code,{children:`multipart/form-data`}),` under the `,_jsx(_components.code,{children:`file`}),` field. Both digital PDFs from retailer portals and scanned or photographed paper bills are supported.`]})}),_jsx(Accordion,{title:`Which energy types can the endpoint extract?`,id:`which-energy-types-can-the-endpoint-extract`,children:_jsx(_components.p,{children:`Electricity, gas, and LPG bills. The extraction engine covers network charges, retail charges, environmental levies, market charges, and demand charges — with tariff rate steps and time-of-use breakdowns where present on the bill.`})}),_jsx(Accordion,{title:`What data fields are returned in the response?`,id:`what-data-fields-are-returned-in-the-response`,children:_jsx(_components.p,{children:`Over 30 fields including: retailer and account details, NMI/MIRN, supply address, billing period, invoice and due dates, every charge line item with its classification and tariff rate steps, time-of-use consumption breakdowns (peak, off-peak, shoulder), demand, meter readings, bill totals, and GST. The response schema on this page lists every field and type.`})}),_jsx(Accordion,{title:`Can the endpoint extract time-of-use tariff data?`,id:`can-the-endpoint-extract-time-of-use-tariff-data`,children:_jsx(_components.p,{children:`Yes. Where time-of-use pricing is present on the bill, Termina extracts peak, off-peak, and shoulder rates and consumption separately — including the tariff rate steps and the kWh consumed in each period. The response schema on this page has the full field reference.`})}),_jsx(Accordion,{title:`What happens if a bill cannot be fully parsed?`,id:`what-happens-if-a-bill-cannot-be-fully-parsed`,children:_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`energy_data`}),` field returns `,_jsx(_components.code,{children:`null`}),` and `,_jsx(_components.code,{children:`validation_issues`}),` describes what went wrong. Partial extractions return the data that was successfully read along with warnings on uncertain fields — so you always know what you can trust and what needs review.`]})}),_jsx(Accordion,{title:`How does bill validation work?`,id:`how-does-bill-validation-work`,children:_jsxs(_components.p,{children:[`Every extraction runs built-in validation that cross-checks the extracted charges against the bill total, verifies billing period dates are consistent, flags unusually high or low usage, and checks that tariff rates fall within expected ranges for the retailer and region. Issues are returned in the `,_jsx(_components.code,{children:`validation_issues`}),` array.`]})}),_jsx(Accordion,{title:`How do I authenticate requests to this endpoint?`,id:`how-do-i-authenticate-requests-to-this-endpoint`,children:_jsxs(_components.p,{children:[`Include your API key in the `,_jsx(_components.code,{children:`X-API-Key`}),` request header. You can generate a free key instantly — no credit card required. See the `,_jsx(_components.a,{href:`/quickstart`,children:`quickstart`}),` for authentication details and code examples.`]})}),_jsx(Accordion,{title:`What is the rate limit on the bill upload endpoint?`,id:`what-is-the-rate-limit-on-the-bill-upload-endpoint`,children:_jsxs(_components.p,{children:[`Free tier accounts can process up to 50 bills total. Pro accounts have configurable rate limits based on your plan. The API returns a `,_jsx(_components.code,{children:`429`}),` status code with a `,_jsx(_components.code,{children:`Retry-After`}),` header if you exceed your limit.`]})})]})]})}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":{"title":"Upload","description":"POST an energy bill PDF and get structured JSON back: retailer, account, billing period, every charge with its tariff rates, meter reads and validation issues.","openapi":"POST /api/v2/public/bills/upload/","href":"/api-reference/bills/upload"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Authentication","slug":"authentication","depth":2,"children":[]},{"title":"Example request","slug":"example-request","depth":2,"children":[]},{"title":"Example response","slug":"example-response","depth":2,"children":[]},{"title":"What you get back","slug":"what-you-get-back","depth":2,"children":[]},{"title":"Common use cases","slug":"common-use-cases","depth":2,"children":[]},{"title":"Frequently asked questions","slug":"frequently-asked-questions","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"public_bills_upload_create","description":"POST an energy bill PDF and get structured JSON back: retailer, account, billing period, every charge with its tariff rates, meter reads and validation issues.","tags":["public"],"requestBody":"fa8d3a17-7906-4ff9-897f-d177b6287f81","security":["235d7610-dc53-4ed4-9c4b-3ff04edc2c7c"],"responses":{"200":"f715c195-d847-4ff4-9984-761ccab1d778","400":"5bc19519-301c-4340-88ff-1cfb7d48a13c","401":"cefda781-ee10-498a-b679-358dc7621d9c","403":"bfdbe558-b0e1-435b-b517-afca98aa5b88","405":"194d1963-3c98-4d4b-952f-d8bb42a0575d","406":"9a89814a-6947-4169-bbce-4a28c934e991","415":"a57a0321-4177-456e-a74e-04bc5c7a0016","429":"4e1da2ee-1f44-44fe-8153-b0858e2a21ca","500":"b7162b0b-a820-4812-9645-c9facf678988"},"method":"post","type":"path","servers":["ec0f8982-6cf6-468f-8c66-6c37c68c6fde"],"path":"/api/v2/public/bills/upload/","baseUrlOptions":["https://termina.io"],"title":"","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","uniqueKey":"file","typeLabel":"file"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"file":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"f715c195-d847-4ff4-9984-761ccab1d778":{"content":{"application/json":{"schema":{"properties":{"bill_uuid":{"title":"Bill Uuid","type":"string","isRequired":true,"uniqueKey":"bill_uuid","typeLabel":"string"},"energy_data":{"oneOf":[{"type":"object","title":"EnergyBill","required":["retailer_name","account_number","fuel_type","site_identifier","billing_period","invoice_number","charges","total_amount"],"properties":{"retailer_name":{"description":"Energy retailer name","title":"Retailer Name","type":"string","isRequired":true,"uniqueKey":"energy_data.oneOf.0.retailer_name","typeLabel":"string"},"account_number":{"title":"Account Number","type":"string","isRequired":true,"uniqueKey":"energy_data.oneOf.0.account_number","typeLabel":"string"},"fuel_type":{"enum":["elec","gas","lpg"],"title":"EnergyTypeEnum","type":"string","description":"Fuel type: 'elec' (electricity) or 'gas'","isRequired":true,"uniqueKey":"energy_data.oneOf.0.fuel_type","typeLabel":"enum\u003cstring>"},"site_identifier":{"title":"Site Identifier","type":"string","isRequired":true,"uniqueKey":"energy_data.oneOf.0.site_identifier","typeLabel":"string"},"billing_period":{"properties":{"start_date":{"title":"Start Date","type":"string","isRequired":true,"uniqueKey":"energy_data.oneOf.0.billing_period.start_date","typeLabel":"string"},"end_date":{"title":"End Date","type":"string","isRequired":true,"uniqueKey":"energy_data.oneOf.0.billing_period.end_date","typeLabel":"string"},"days":{"oneOf":[{"type":"integer","title":"Days","uniqueKey":"energy_data.oneOf.0.billing_period.days.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Days","uniqueKey":"energy_data.oneOf.0.billing_period.days.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.billing_period.days","typeLabel":"integer | null"}},"required":["start_date","end_date"],"title":"BillingTimePeriod","type":"object","isRequired":true,"uniqueKey":"energy_data.oneOf.0.billing_period","typeLabel":"BillingTimePeriod · object"},"invoice_number":{"title":"Invoice Number","type":"string","isRequired":true,"uniqueKey":"energy_data.oneOf.0.invoice_number","typeLabel":"string"},"charges":{"description":"List of energy-related charges and credits","items":{"properties":{"classification":{"enum":["Network Peak","Network Off Peak","Network Shoulder","Network Supply","Network Anytime","Network Controlled Load","Network Metering Charge","Network Low Demand","Network High Demand","Network Anytime Demand","Network Capacity Charge","Network Congestion Charge","Network Solar FIT","Network General TOU","Transmission General TOU","Greenpower","Retail Peak","Retail Off Peak","Retail Shoulder","Retail Anytime","General TOU","High Demand","Low Demand","Anytime Demand","Congestion Charge","Metering","Supply","Controlled Load Supply","Controlled Load","Solar FIT","Market Charge Other","VEET","LRET","SRES","AEMO Ancillary","AEMO Pool Fees","SREC","Participant Charge","ESC","NSW ESS","Operator Consumption","General Environmental Charge","Demand Price","Capacity Charge","Additional Billing","Connection","Disconnection","AEMO FRC","AEMO UFE","Network Management","AEMO Directional","Credit","Late Fees","Line Loss Charge","Demand Reduction","Billing Fee","EA Levy","GIC Levy","LPG Rental","LPG Usage","LPG Swapped","Power Factor Charge","Load Shift","Network Load Shift"],"title":"PriceClassification","type":"string","description":"Standardised charge classification","isRequired":true,"uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].classification","typeLabel":"enum\u003cstring>"},"tariff_name":{"description":"Charge name as shown on the bill","title":"Tariff Name","type":"string","isRequired":true,"uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].tariff_name","typeLabel":"string"},"rate_steps":{"items":{"properties":{"rate":{"title":"Rate","type":"number","isRequired":true,"uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].rate_steps.items.[INDEX].rate","typeLabel":"number"},"rate_unit":{"enum":["cent/kWh","$/kWh","cent/MJ","$/MJ","cent/day","$/day","$/month","$/bill","$/year","$/kW","$/kW/day","$/kW/month","$/kVA","$/kVA/day","$/kVA/month","$/m3","cent/m3","$/kg","$/bottle","$/litre"],"title":"BillRateUnit","type":"string","description":"Unit of the rate (e.g. 'cent/kWh', '$/day')","isRequired":true,"uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].rate_steps.items.[INDEX].rate_unit","typeLabel":"enum\u003cstring>"},"lower_bound":{"oneOf":[{"type":"number","title":"Lower Bound","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].rate_steps.items.[INDEX].lower_bound.oneOf.0","typeLabel":"number"},{"type":"null","title":"Lower Bound","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].rate_steps.items.[INDEX].lower_bound.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].rate_steps.items.[INDEX].lower_bound","typeLabel":"number | null"},"quantity":{"oneOf":[{"type":"number","title":"Quantity","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].rate_steps.items.[INDEX].quantity.oneOf.0","typeLabel":"number"},{"type":"null","title":"Quantity","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].rate_steps.items.[INDEX].quantity.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].rate_steps.items.[INDEX].quantity","typeLabel":"number | null"},"quantity_unit":{"oneOf":[{"type":"string","title":"BillQuantityUnit","enum":["kWh","MJ","m3","kW","kW day","kVA","kVA day","days","months","kg","bottle","litre"],"uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].rate_steps.items.[INDEX].quantity_unit.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].rate_steps.items.[INDEX].quantity_unit.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].rate_steps.items.[INDEX].quantity_unit","typeLabel":"enum\u003cstring> | null"},"amount":{"oneOf":[{"type":"number","title":"Amount","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].rate_steps.items.[INDEX].amount.oneOf.0","typeLabel":"number"},{"type":"null","title":"Amount","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].rate_steps.items.[INDEX].amount.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].rate_steps.items.[INDEX].amount","typeLabel":"number | null"}},"required":["rate","rate_unit"],"title":"RateStep","type":"object","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].rate_steps.items.[INDEX]","typeLabel":"RateStep · object"},"title":"Rate Steps","type":"array","isRequired":true,"uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].rate_steps","typeLabel":"RateStep · object[]"},"amount":{"title":"Amount","type":"number","isRequired":true,"uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].amount","typeLabel":"number"},"retailer_note":{"oneOf":[{"type":"string","title":"Retailer Note","description":"Supplementary retailer text for this charge, or null","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].retailer_note.oneOf.0","typeLabel":"string"},{"type":"null","title":"Retailer Note","description":"Supplementary retailer text for this charge, or null","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].retailer_note.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].retailer_note","typeLabel":"string | null"},"period_start":{"oneOf":[{"type":"string","title":"Period Start","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].period_start.oneOf.0","typeLabel":"string"},{"type":"null","title":"Period Start","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].period_start.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].period_start","typeLabel":"string | null"},"period_end":{"oneOf":[{"type":"string","title":"Period End","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].period_end.oneOf.0","typeLabel":"string"},{"type":"null","title":"Period End","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].period_end.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].period_end","typeLabel":"string | null"},"is_all_other_times":{"oneOf":[{"type":"boolean","title":"Is All Other Times","description":"True if this is a catch-all time band covering all remaining times","default":false,"uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].is_all_other_times.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Is All Other Times","description":"True if this is a catch-all time band covering all remaining times","default":false,"uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].is_all_other_times.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].is_all_other_times","typeLabel":"boolean | null"},"tou_timing":{"oneOf":[{"type":"array","items":{"additionalProperties":true,"properties":{"months":{"oneOf":[{"type":"array","items":{"type":"integer","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].tou_timing.oneOf.0.items.[INDEX].months.oneOf.0.items.[INDEX]","typeLabel":"integer"},"title":"Months","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].tou_timing.oneOf.0.items.[INDEX].months.oneOf.0","typeLabel":"integer[]"},{"type":"null","title":"Months","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].tou_timing.oneOf.0.items.[INDEX].months.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].tou_timing.oneOf.0.items.[INDEX].months","typeLabel":"integer[] | null"},"days_of_week":{"oneOf":[{"type":"array","items":{"type":"integer","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].tou_timing.oneOf.0.items.[INDEX].days_of_week.oneOf.0.items.[INDEX]","typeLabel":"integer"},"title":"Days Of Week","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].tou_timing.oneOf.0.items.[INDEX].days_of_week.oneOf.0","typeLabel":"integer[]"},{"type":"null","title":"Days Of Week","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].tou_timing.oneOf.0.items.[INDEX].days_of_week.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].tou_timing.oneOf.0.items.[INDEX].days_of_week","typeLabel":"integer[] | null"},"time_periods":{"oneOf":[{"type":"array","items":{"properties":{"start_time":{"maximum":23,"minimum":0,"title":"Start Time","type":"integer","isRequired":true,"uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].tou_timing.oneOf.0.items.[INDEX].time_periods.oneOf.0.items.[INDEX].start_time","typeLabel":"integer"},"end_time":{"maximum":23,"minimum":0,"title":"End Time","type":"integer","isRequired":true,"uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].tou_timing.oneOf.0.items.[INDEX].time_periods.oneOf.0.items.[INDEX].end_time","typeLabel":"integer"}},"required":["start_time","end_time"],"title":"TimePeriod","type":"object","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].tou_timing.oneOf.0.items.[INDEX].time_periods.oneOf.0.items.[INDEX]","typeLabel":"TimePeriod · object"},"title":"Time Periods","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].tou_timing.oneOf.0.items.[INDEX].time_periods.oneOf.0","typeLabel":"TimePeriod · object[]"},{"type":"null","title":"Time Periods","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].tou_timing.oneOf.0.items.[INDEX].time_periods.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].tou_timing.oneOf.0.items.[INDEX].time_periods","typeLabel":"TimePeriod · object[] | null"}},"title":"TimingBlock","type":"object","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].tou_timing.oneOf.0.items.[INDEX]","typeLabel":"TimingBlock · object"},"title":"Tou Timing","description":"Time-of-use timing windows for this charge, or null","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].tou_timing.oneOf.0","typeLabel":"TimingBlock · object[]"},{"type":"null","title":"Tou Timing","description":"Time-of-use timing windows for this charge, or null","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].tou_timing.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX].tou_timing","typeLabel":"TimingBlock · object[] | null"}},"required":["classification","tariff_name","rate_steps","amount"],"title":"ChargeLineItem","type":"object","uniqueKey":"energy_data.oneOf.0.charges.items.[INDEX]","typeLabel":"ChargeLineItem · object"},"title":"Charges","type":"array","isRequired":true,"uniqueKey":"energy_data.oneOf.0.charges","typeLabel":"ChargeLineItem · object[]"},"total_amount":{"description":"Net total of all charges and credits including GST","title":"Total Amount","type":"number","isRequired":true,"uniqueKey":"energy_data.oneOf.0.total_amount","typeLabel":"number"},"schema_version":{"default":"1.0","description":"Schema version","title":"Schema Version","type":"string","uniqueKey":"energy_data.oneOf.0.schema_version","typeLabel":"string"},"account_name":{"oneOf":[{"type":"string","title":"Account Name","uniqueKey":"energy_data.oneOf.0.account_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Account Name","uniqueKey":"energy_data.oneOf.0.account_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.account_name","typeLabel":"string | null"},"supply_address":{"oneOf":[{"type":"string","title":"Supply Address","uniqueKey":"energy_data.oneOf.0.supply_address.oneOf.0","typeLabel":"string"},{"type":"null","title":"Supply Address","uniqueKey":"energy_data.oneOf.0.supply_address.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.supply_address","typeLabel":"string | null"},"issue_date":{"oneOf":[{"type":"string","title":"Issue Date","uniqueKey":"energy_data.oneOf.0.issue_date.oneOf.0","typeLabel":"string"},{"type":"null","title":"Issue Date","uniqueKey":"energy_data.oneOf.0.issue_date.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.issue_date","typeLabel":"string | null"},"due_date":{"oneOf":[{"type":"string","title":"Due Date","uniqueKey":"energy_data.oneOf.0.due_date.oneOf.0","typeLabel":"string"},{"type":"null","title":"Due Date","uniqueKey":"energy_data.oneOf.0.due_date.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.due_date","typeLabel":"string | null"},"read_type":{"oneOf":[{"type":"string","title":"ReadType","enum":["actual","estimated","substituted"],"uniqueKey":"energy_data.oneOf.0.read_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"energy_data.oneOf.0.read_type.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.read_type","typeLabel":"enum\u003cstring> | null"},"rates_include_gst":{"oneOf":[{"type":"boolean","title":"Rates Include Gst","uniqueKey":"energy_data.oneOf.0.rates_include_gst.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Rates Include Gst","uniqueKey":"energy_data.oneOf.0.rates_include_gst.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.rates_include_gst","typeLabel":"boolean | null"},"total_due":{"oneOf":[{"type":"number","title":"Total Due","description":"Total account balance due including prior balance, or null if no prior balance","uniqueKey":"energy_data.oneOf.0.total_due.oneOf.0","typeLabel":"number"},{"type":"null","title":"Total Due","description":"Total account balance due including prior balance, or null if no prior balance","uniqueKey":"energy_data.oneOf.0.total_due.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.total_due","typeLabel":"number | null"},"bpay_biller_code":{"oneOf":[{"type":"string","title":"Bpay Biller Code","uniqueKey":"energy_data.oneOf.0.bpay_biller_code.oneOf.0","typeLabel":"string"},{"type":"null","title":"Bpay Biller Code","uniqueKey":"energy_data.oneOf.0.bpay_biller_code.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.bpay_biller_code","typeLabel":"string | null"},"bpay_customer_reference":{"oneOf":[{"type":"string","title":"Bpay Customer Reference","uniqueKey":"energy_data.oneOf.0.bpay_customer_reference.oneOf.0","typeLabel":"string"},{"type":"null","title":"Bpay Customer Reference","uniqueKey":"energy_data.oneOf.0.bpay_customer_reference.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.bpay_customer_reference","typeLabel":"string | null"},"is_final_bill":{"oneOf":[{"type":"boolean","title":"Is Final Bill","description":"Whether this is a final/closing bill","uniqueKey":"energy_data.oneOf.0.is_final_bill.oneOf.0","typeLabel":"boolean"},{"type":"null","title":"Is Final Bill","description":"Whether this is a final/closing bill","uniqueKey":"energy_data.oneOf.0.is_final_bill.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.is_final_bill","typeLabel":"boolean | null"},"tariff_code":{"oneOf":[{"type":"string","title":"Tariff Code","uniqueKey":"energy_data.oneOf.0.tariff_code.oneOf.0","typeLabel":"string"},{"type":"null","title":"Tariff Code","uniqueKey":"energy_data.oneOf.0.tariff_code.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.tariff_code","typeLabel":"string | null"},"meter_number":{"oneOf":[{"type":"string","title":"Meter Number","uniqueKey":"energy_data.oneOf.0.meter_number.oneOf.0","typeLabel":"string"},{"type":"null","title":"Meter Number","uniqueKey":"energy_data.oneOf.0.meter_number.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.meter_number","typeLabel":"string | null"},"meter_reads":{"oneOf":[{"type":"array","items":{"properties":{"meter_number":{"oneOf":[{"type":"string","title":"Meter Number","uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].meter_number.oneOf.0","typeLabel":"string"},{"type":"null","title":"Meter Number","uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].meter_number.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].meter_number","typeLabel":"string | null"},"register_name":{"oneOf":[{"type":"string","title":"Register Name","uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].register_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Register Name","uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].register_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].register_name","typeLabel":"string | null"},"previous_read":{"oneOf":[{"type":"number","title":"Previous Read","uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].previous_read.oneOf.0","typeLabel":"number"},{"type":"null","title":"Previous Read","uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].previous_read.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].previous_read","typeLabel":"number | null"},"current_read":{"oneOf":[{"type":"number","title":"Current Read","uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].current_read.oneOf.0","typeLabel":"number"},{"type":"null","title":"Current Read","uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].current_read.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].current_read","typeLabel":"number | null"},"read_date":{"oneOf":[{"type":"string","title":"Read Date","uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].read_date.oneOf.0","typeLabel":"string"},{"type":"null","title":"Read Date","uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].read_date.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].read_date","typeLabel":"string | null"},"previous_read_date":{"oneOf":[{"type":"string","title":"Previous Read Date","uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].previous_read_date.oneOf.0","typeLabel":"string"},{"type":"null","title":"Previous Read Date","uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].previous_read_date.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].previous_read_date","typeLabel":"string | null"},"multiplier":{"oneOf":[{"type":"number","title":"Multiplier","uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].multiplier.oneOf.0","typeLabel":"number"},{"type":"null","title":"Multiplier","uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].multiplier.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].multiplier","typeLabel":"number | null"},"consumption":{"oneOf":[{"type":"number","title":"Consumption","uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].consumption.oneOf.0","typeLabel":"number"},{"type":"null","title":"Consumption","uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].consumption.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].consumption","typeLabel":"number | null"},"consumption_unit":{"oneOf":[{"type":"string","title":"BillQuantityUnit","enum":["kWh","MJ","m3","kW","kW day","kVA","kVA day","days","months","kg","bottle","litre"],"uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].consumption_unit.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].consumption_unit.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].consumption_unit","typeLabel":"enum\u003cstring> | null"},"read_type":{"oneOf":[{"type":"string","title":"ReadType","enum":["actual","estimated","substituted"],"uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].read_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].read_type.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX].read_type","typeLabel":"enum\u003cstring> | null"}},"title":"MeterRead","type":"object","uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0.items.[INDEX]","typeLabel":"MeterRead · object"},"title":"Meter Reads","uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.0","typeLabel":"MeterRead · object[]"},{"type":"null","title":"Meter Reads","uniqueKey":"energy_data.oneOf.0.meter_reads.oneOf.1","typeLabel":"null"}],"uniqueKey":"energy_data.oneOf.0.meter_reads","typeLabel":"MeterRead · object[] | null"}},"isRequired":true,"uniqueKey":"energy_data.oneOf.0","typeLabel":"EnergyBill · object"},{"type":"null","isRequired":true,"uniqueKey":"energy_data.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"energy_data","typeLabel":"EnergyBill · object | null"},"validation_issues":{"items":{"properties":{"severity":{"type":"string","title":"Severity","enum":["WARNING","ERROR","ERROR_IGNORABLE"],"isRequired":true,"uniqueKey":"validation_issues.items.[INDEX].severity","typeLabel":"enum\u003cstring>"},"field":{"oneOf":[{"type":"string","title":"Field","isRequired":true,"uniqueKey":"validation_issues.items.[INDEX].field.oneOf.0","typeLabel":"string"},{"type":"null","title":"Field","isRequired":true,"uniqueKey":"validation_issues.items.[INDEX].field.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"validation_issues.items.[INDEX].field","typeLabel":"string | null"},"message":{"title":"Message","type":"string","isRequired":true,"uniqueKey":"validation_issues.items.[INDEX].message","typeLabel":"string"}},"required":["severity","field","message"],"title":"ValidationIssue","type":"object","uniqueKey":"validation_issues.items.[INDEX]","typeLabel":"ValidationIssue · object"},"title":"Validation Issues","type":"array","isRequired":true,"uniqueKey":"validation_issues","typeLabel":"ValidationIssue · object[]"}},"required":["bill_uuid","energy_data","validation_issues"],"title":"BillUploadResponse","type":"object","uniqueKey":"","typeLabel":"BillUploadResponse · object"},"examples":{"Example":{"title":"Example","value":{"bill_uuid":"\u003cstring>","energy_data":{"retailer_name":"\u003cstring>","account_number":"\u003cstring>","fuel_type":"elec","site_identifier":"\u003cstring>","billing_period":{"start_date":"\u003cstring>","end_date":"\u003cstring>","days":123},"invoice_number":"\u003cstring>","charges":[{"classification":"Network Peak","tariff_name":"\u003cstring>","rate_steps":[{"rate":123,"rate_unit":"cent/kWh","lower_bound":123,"quantity":123,"quantity_unit":"kWh","amount":123}],"amount":123,"retailer_note":"\u003cstring>","period_start":"\u003cstring>","period_end":"\u003cstring>","is_all_other_times":false,"tou_timing":[{"months":[123],"days_of_week":[123],"time_periods":[{"start_time":11,"end_time":11}]}]}],"total_amount":123,"schema_version":"1.0","account_name":"\u003cstring>","supply_address":"\u003cstring>","issue_date":"\u003cstring>","due_date":"\u003cstring>","read_type":"actual","rates_include_gst":true,"total_due":123,"bpay_biller_code":"\u003cstring>","bpay_customer_reference":"\u003cstring>","is_final_bill":true,"tariff_code":"\u003cstring>","meter_number":"\u003cstring>","meter_reads":[{"meter_number":"\u003cstring>","register_name":"\u003cstring>","previous_read":123,"current_read":123,"read_date":"\u003cstring>","previous_read_date":"\u003cstring>","multiplier":123,"consumption":123,"consumption_unit":"kWh","read_type":"actual"}]},"validation_issues":[{"severity":"WARNING","field":"\u003cstring>","message":"\u003cstring>"}]}}},"exampleType":"generated"}},"description":"","exampleType":"generated"},"5bc19519-301c-4340-88ff-1cfb7d48a13c":{"content":{"application/json":{"schema":{"type":"object","required":["errors","type"],"properties":{"type":{"enum":["client_error"],"type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"enum":["parse_error"],"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"detail":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"},"attr":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].attr.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"errors.items.[INDEX].attr.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors.items.[INDEX].attr","typeLabel":"string | null"}},"required":["attr","code","detail"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"client_error","errors":[{"code":"parse_error","detail":"\u003cstring>","attr":"\u003cstring>"}]}}},"exampleType":"generated"}},"description":"","exampleType":"generated"},"cefda781-ee10-498a-b679-358dc7621d9c":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"enum":["client_error"],"type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"enum":["authentication_failed","not_authenticated"],"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"detail":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"},"attr":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].attr.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"errors.items.[INDEX].attr.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors.items.[INDEX].attr","typeLabel":"string | null"}},"required":["attr","code","detail"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"}},"required":["errors","type"],"uniqueKey":"","typeLabel":"object"},"examples":{"AuthenticationFailed":{"title":"AuthenticationFailed","value":{"type":"client_error","errors":[{"code":"authentication_failed","detail":"Incorrect authentication credentials.","attr":null}]}},"NotAuthenticated":{"title":"NotAuthenticated","value":{"type":"client_error","errors":[{"code":"not_authenticated","detail":"Authentication credentials were not provided.","attr":null}]}}},"exampleType":"examples"}},"description":"","exampleType":"examples"},"bfdbe558-b0e1-435b-b517-afca98aa5b88":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"enum":["client_error"],"type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"enum":["permission_denied"],"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"detail":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"},"attr":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].attr.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"errors.items.[INDEX].attr.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors.items.[INDEX].attr","typeLabel":"string | null"}},"required":["attr","code","detail"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"}},"required":["errors","type"],"uniqueKey":"","typeLabel":"object"},"examples":{"PermissionDenied":{"title":"PermissionDenied","value":{"type":"client_error","errors":[{"code":"permission_denied","detail":"You do not have permission to perform this action.","attr":null}]}}},"exampleType":"examples"}},"description":"","exampleType":"examples"},"194d1963-3c98-4d4b-952f-d8bb42a0575d":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"enum":["client_error"],"type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"enum":["method_not_allowed"],"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"detail":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"},"attr":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].attr.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"errors.items.[INDEX].attr.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors.items.[INDEX].attr","typeLabel":"string | null"}},"required":["attr","code","detail"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"}},"required":["errors","type"],"uniqueKey":"","typeLabel":"object"},"examples":{"MethodNotAllowed":{"title":"MethodNotAllowed","value":{"type":"client_error","errors":[{"code":"method_not_allowed","detail":"Method \"get\" not allowed.","attr":null}]}}},"exampleType":"examples"}},"description":"","exampleType":"examples"},"9a89814a-6947-4169-bbce-4a28c934e991":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"enum":["client_error"],"type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"enum":["not_acceptable"],"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"detail":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"},"attr":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].attr.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"errors.items.[INDEX].attr.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors.items.[INDEX].attr","typeLabel":"string | null"}},"required":["attr","code","detail"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"}},"required":["errors","type"],"uniqueKey":"","typeLabel":"object"},"examples":{"NotAcceptable":{"title":"NotAcceptable","value":{"type":"client_error","errors":[{"code":"not_acceptable","detail":"Could not satisfy the request Accept header.","attr":null}]}}},"exampleType":"examples"}},"description":"","exampleType":"examples"},"a57a0321-4177-456e-a74e-04bc5c7a0016":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"enum":["client_error"],"type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"enum":["unsupported_media_type"],"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"detail":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"},"attr":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].attr.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"errors.items.[INDEX].attr.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors.items.[INDEX].attr","typeLabel":"string | null"}},"required":["attr","code","detail"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"}},"required":["errors","type"],"uniqueKey":"","typeLabel":"object"},"examples":{"UnsupportedMediaType":{"title":"UnsupportedMediaType","value":{"type":"client_error","errors":[{"code":"unsupported_media_type","detail":"Unsupported media type \"application/json\" in request.","attr":null}]}}},"exampleType":"examples"}},"description":"","exampleType":"examples"},"4e1da2ee-1f44-44fe-8153-b0858e2a21ca":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"enum":["client_error"],"type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"enum":["throttled"],"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"detail":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"},"attr":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].attr.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"errors.items.[INDEX].attr.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors.items.[INDEX].attr","typeLabel":"string | null"}},"required":["attr","code","detail"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"}},"required":["errors","type"],"uniqueKey":"","typeLabel":"object"},"examples":{"Throttled":{"title":"Throttled","value":{"type":"client_error","errors":[{"code":"throttled","detail":"Request was throttled.","attr":null}]}}},"exampleType":"examples"}},"description":"","exampleType":"examples"},"b7162b0b-a820-4812-9645-c9facf678988":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"enum":["server_error"],"type":"string","isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"errors":{"type":"array","items":{"type":"object","properties":{"code":{"enum":["error"],"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"detail":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"},"attr":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].attr.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"errors.items.[INDEX].attr.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"errors.items.[INDEX].attr","typeLabel":"string | null"}},"required":["attr","code","detail"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"}},"required":["errors","type"],"uniqueKey":"","typeLabel":"object"},"examples":{"APIException":{"title":"APIException","value":{"type":"server_error","errors":[{"code":"error","detail":"A server error occurred.","attr":null}]}}},"exampleType":"examples"}},"description":"","exampleType":"examples"}},"security":{"235d7610-dc53-4ed4-9c4b-3ff04edc2c7c":{"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key","scopes":[],"schemeName":"apiKey"}}},"servers":{"ec0f8982-6cf6-468f-8c66-6c37c68c6fde":{"url":"https://termina.io","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-API-Key","scopes":[],"schemeName":"apiKey"},"schema":{"title":"X-API-Key","type":"string","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKey","name":"X-API-Key"}],"title":"apiKey"}]},"originalFileLocation":"openapi.yaml"},"subdomain":"termina","siteName":"Termina","title":"Upload - Termina","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-16T05:42:44.092Z","originalFileLocation":"api-reference/bills/upload.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"POST an energy bill PDF and get structured JSON back: retailer, account, billing period, every charge with its tariff rates, meter reads and validation issues.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Termina\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/termina/8tveCQ7IHDRiQ4an/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/termina/8tveCQ7IHDRiQ4an/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/termina/8tveCQ7IHDRiQ4an/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/termina/8tveCQ7IHDRiQ4an/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/termina/8tveCQ7IHDRiQ4an/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/termina/8tveCQ7IHDRiQ4an/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/termina/8tveCQ7IHDRiQ4an/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/termina/8tveCQ7IHDRiQ4an/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/termina/8tveCQ7IHDRiQ4an/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Upload - Termina\">\u003cmeta data-mint-head property=\"og:description\" content=\"POST an energy bill PDF and get structured JSON back: retailer, account, billing period, every charge with its tariff rates, meter reads and validation issues.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Termina\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.termina.com/api-reference/bills/upload\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://termina.mintlify.site/_mintlify/api/og/v2?division=Bill+extraction+API+reference\u0026amp;title=Upload\u0026amp;description=POST+an+energy+bill+PDF+and+get+structured+JSON+back%3A+retailer%2C+account%2C+billing+period%2C+every+charge+with+its+tariff+rates%2C+meter+reads+and+validation+issues.\u0026amp;theme=d662240decbf5acd450d3b47\u0026amp;signature=c542808a4b80536070d154c00c4fa21a800753459e7188cea5dd40bf7569ee56\">\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=\"Upload - Termina\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"POST an energy bill PDF and get structured JSON back: retailer, account, billing period, every charge with its tariff rates, meter reads and validation issues.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://termina.mintlify.site/_mintlify/api/og/v2?division=Bill+extraction+API+reference\u0026amp;title=Upload\u0026amp;description=POST+an+energy+bill+PDF+and+get+structured+JSON+back%3A+retailer%2C+account%2C+billing+period%2C+every+charge+with+its+tariff+rates%2C+meter+reads+and+validation+issues.\u0026amp;theme=d662240decbf5acd450d3b47\u0026amp;signature=c542808a4b80536070d154c00c4fa21a800753459e7188cea5dd40bf7569ee56\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/termina/8tveCQ7IHDRiQ4an/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Termina\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#16A34A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.termina.com/api-reference/bills/upload\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/bills/upload.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.termina.com/#organization\",\"name\":\"Termina\",\"url\":\"https://docs.termina.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/termina/Vudugf3RiDPggz-L/logo/light.svg?fit=max\u0026auto=format\u0026n=Vudugf3RiDPggz-L\u0026q=85\u0026s=f9a720fd440b95ebbc5af0330cf99b87\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.termina.com#website\",\"name\":\"Termina\",\"url\":\"https://docs.termina.com\",\"publisher\":{\"@id\":\"https://docs.termina.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.termina.com/api-reference/bills/upload#webpage\",\"url\":\"https://docs.termina.com/api-reference/bills/upload\",\"name\":\"Upload\",\"description\":\"POST an energy bill PDF and get structured JSON back: retailer, account, billing period, every charge with its tariff rates, meter reads and validation issues.\",\"dateModified\":\"2026-10-16T05:42:44.092Z\",\"isPartOf\":{\"@id\":\"https://docs.termina.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.termina.com/api-reference/bills/upload#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.termina.com/api-reference/bills/upload#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Termina\",\"item\":\"https://docs.termina.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Upload\",\"item\":\"https://docs.termina.com/api-reference/bills/upload\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.termina.com/api-reference/bills/upload#apireference\",\"headline\":\"Upload\",\"name\":\"Upload\",\"description\":\"POST an energy bill PDF and get structured JSON back: retailer, account, billing period, every charge with its tariff rates, meter reads and validation issues.\",\"url\":\"https://docs.termina.com/api-reference/bills/upload\",\"mainEntityOfPage\":{\"@id\":\"https://docs.termina.com/api-reference/bills/upload#webpage\"},\"dateModified\":\"2026-10-16T05:42:44.092Z\",\"publisher\":{\"@id\":\"https://docs.termina.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.termina.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Termina\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Termina","nav":{"global":null,"tabs":[{"tab":"Documentation","groups":[{"group":"Getting Started","pages":[{"title":"Introduction","href":""},{"title":"Quickstart: bill extraction API","sidebarTitle":"Quickstart","description":"Extract structured data from an energy bill in three steps, then use the NMI and usage it returns to find the site's cheapest business electricity rates. Free tier: 50 credits, no credit card.","href":"/quickstart"}]},{"group":"Bill extraction API reference","pages":[{"title":"Upload","openapi":"POST /api/v2/public/bills/upload/","href":"/api-reference/bills/upload"}]},{"group":"Business electricity rates","pages":[{"title":"Business electricity rates API","description":"Compare Australian business electricity rates for any postcode, network, city, state or NMI. Every plan is costed at your annual usage incl. GST and compared with the Default Market Offer or Victorian Default Offer. Free to use, no API key.","href":"/rates/overview"},{"title":"Quickstart: business electricity rates API","sidebarTitle":"Quickstart","href":"/rates/quickstart"},{"title":"Using Termina with AI agents","href":"/rates/ai-agents"},{"title":"Choosing a location","href":"/rates/locations"},{"title":"How rates are costed","href":"/rates/methodology"},{"title":"Buying group and public plans","href":"/rates/buying-group-and-public-plans"},{"title":"Errors and warnings","href":"/rates/errors-and-warnings"},{"title":"Supported networks, cities and states","href":"/rates/networks-and-cities"}]},{"group":"Rates API reference","pages":[{"title":"Business electricity rates API: GET /v1/rates","sidebarTitle":"Get rates","openapi":"openapi-rates.yaml GET /v1/rates","href":"/api-reference/rates/get-rates"}]}]}]},"basePath":"","title":"Upload - Termina","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":["c2aa737661","2b790eda92","b0f84f53ff"],"chunks":["OpenApiReferenceProvider-Myd8dsju.js","utils-C2HkQgW0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-8rSppmTv.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B6MjiCFm.js","snippetPresets-DwrSAONL.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-1-a5UQKQ.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C541m7wZ.js","shallow-CWELCZ77.js","getApiPlaygroundDisplay-CTo5Zn03.js","CodeSnippet-D--dzvnl.js","CodeSnippets-DM3cXEDh.js","Page-CxAy5y67.js","getPastedJson-C-VECgcL.js","icon-BPq2-Mg3.js","MethodPill-D9J5cUHd.js","DuplicateIcon-BqHaxUnD.js","createIcon-CIbcZHp9.js","DynamicMarkdown-BKiHAm_d.js","SectionHeading-DstQXt3H.js","axios-vUo_bRtp.js"]}