{"items":[{"type":"link","label":"Partner Integration API","link":"/openapi","routeSlug":"/openapi","content":{"contentType":"overview","meta":{"name":"Partner Integration API"},"children":[{"nodeType":"container","panels":[{"title":"Download OpenAPI description","titleTranslationKey":"download.description.title","children":[{"kind":"download","label":"openapi.json","url":"/_bundle/openapi.json?download"},{"kind":"download","label":"openapi.yaml","url":"/_bundle/openapi.yaml?download"}]},{"title":"Overview","titleTranslationKey":"info.title","children":[]},{"title":"Languages","titleTranslationKey":"languages.title","children":[{"kind":"languages","options":[{"key":"curl","title":"curl","lang":"curl"},{"key":"javascript","title":"JavaScript","lang":"JavaScript"},{"key":"node","title":"Node.js","lang":"Node.js"},{"key":"python","title":"Python","lang":"Python"},{"key":"java","title":"Java","lang":"Java"},{"key":"csharp","title":"C#","lang":"C#"},{"key":"php","title":"PHP","lang":"PHP"},{"key":"go","title":"Go","lang":"Go"},{"key":"ruby","title":"Ruby","lang":"Ruby"},{"key":"r","title":"R","lang":"R"},{"key":"payload","title":"Payload","lang":"Payload"}]}]},{"title":"Servers","titleTranslationKey":"servers.title","children":[{"kind":"servers","servers":[{"url":"/_mock/openapi","description":"Mock server","isMockServer":true},{"url":"https://api.yourserver.com"}],"mode":"default"}]}],"children":[{"nodeType":"overview-section-wrapper","children":[{"nodeType":"header","level":1,"label":"Partner Integration API (1.5.0)","showPageActions":true},{"nodeType":"overview-section-wrapper","children":[{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"API specification for freight forwarding system (FFS) partners integrating with BravoTran."},"children":[]}]}]}]}],"sectionId":"/openapi"}],"sectionId":"/openapi"},{"nodeType":"overview-section-wrapper","children":[{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"heading","attributes":{"level":2,"id":"section/overview"},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Overview"},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran uses an event-driven pull model to stay in sync with your freight forwarding system:"},"children":[]}]}]},{"$$mdtype":"Node","type":"list","attributes":{"ordered":true,"marker":"."},"children":[{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Your system sends an "},"children":[]},{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"event notification"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" to BravoTran when an entity is created or updated."},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran reads the entity type and identifier from the event."},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran issues a "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" request to your API with the entity type and identifier."},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Your API returns the entity as JSON per this specification."},"children":[]}]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran also "},"children":[]},{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"POSTs approved invoices"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" to your system for cost posting. When an invoice is approved in BravoTran, it sends a "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"POST /payables-invoices"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" request to your API with the invoice details. Your system must create or record the invoice accordingly."},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"image","inline":true,"attributes":{"alt":"API Flow Diagram","src":"/assets/api-flow.503a6aba4e1218e1b8584be51025316e21afc8ae054865c554ce04850b465aed.9c1bb791.png"},"children":[]}]}]}]}],"sectionId":"/openapi/section/overview"},{"nodeType":"overview-section-wrapper","children":[{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"heading","attributes":{"level":3,"id":"section/polling-alternative"},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Polling alternative"},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"If your system cannot reliably push live event notifications, you may instead implement the optional list endpoints "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET /orgs"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET /jobs"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", and "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET /payables-invoices"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":". BravoTran will periodically poll them with an "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"updated_after"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" window, get back the identifiers of anything that changed, then call the existing single-entity detail endpoints to fetch each one. Implement either the events API or the list endpoints — not both. All three list endpoints must be implemented together; BravoTran's polling assumes complete coverage of all entity types."},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Creates and updates are surfaced through the same filter: when an entity is created, set "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"updated_at"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" to the creation timestamp and it will appear in any subsequent polling response whose "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"updated_after"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" is at or before that timestamp. There is no separate \"creation\" feed."},"children":[]}]}]}]}],"sectionId":"/openapi/section/polling-alternative"},{"nodeType":"overview-section-wrapper","children":[{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"heading","attributes":{"level":2,"id":"section/terminology"},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Terminology"},"children":[]}]}]},{"$$mdtype":"Node","type":"table","attributes":{},"children":[{"$$mdtype":"Node","type":"thead","attributes":{},"children":[{"$$mdtype":"Node","type":"tr","attributes":{},"children":[{"$$mdtype":"Node","type":"th","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Term"},"children":[]}]}]},{"$$mdtype":"Node","type":"th","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Definition"},"children":[]}]}]}]}]},{"$$mdtype":"Node","type":"tbody","attributes":{},"children":[{"$$mdtype":"Node","type":"tr","attributes":{},"children":[{"$$mdtype":"Node","type":"td","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"FFS"},"children":[]}]}]}]},{"$$mdtype":"Node","type":"td","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Freight Forwarding System — your system"},"children":[]}]}]}]},{"$$mdtype":"Node","type":"tr","attributes":{},"children":[{"$$mdtype":"Node","type":"td","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Company"},"children":[]}]}]}]},{"$$mdtype":"Node","type":"td","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"A country-level entity in the FFS; maps to a BravoTran "},"children":[]},{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Account"},"children":[]}]}]}]}]},{"$$mdtype":"Node","type":"tr","attributes":{},"children":[{"$$mdtype":"Node","type":"td","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Account"},"children":[]}]}]}]},{"$$mdtype":"Node","type":"td","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran's representation of a company/country"},"children":[]}]}]}]},{"$$mdtype":"Node","type":"tr","attributes":{},"children":[{"$$mdtype":"Node","type":"td","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Org"},"children":[]}]}]}]},{"$$mdtype":"Node","type":"td","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"A vendor, carrier, creditor, or debtor"},"children":[]}]}]}]},{"$$mdtype":"Node","type":"tr","attributes":{},"children":[{"$$mdtype":"Node","type":"td","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Creditor"},"children":[]}]}]}]},{"$$mdtype":"Node","type":"td","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"An org that issues payables invoices; referenced as "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"creditor"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" on invoices and accruals"},"children":[]}]}]}]},{"$$mdtype":"Node","type":"tr","attributes":{},"children":[{"$$mdtype":"Node","type":"td","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Job"},"children":[]}]}]}]},{"$$mdtype":"Node","type":"td","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"A consol (consolidation/master) or shipment (house)"},"children":[]}]}]}]},{"$$mdtype":"Node","type":"tr","attributes":{},"children":[{"$$mdtype":"Node","type":"td","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Accrual"},"children":[]}]}]}]},{"$$mdtype":"Node","type":"td","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"An expected charge on a job"},"children":[]}]}]}]},{"$$mdtype":"Node","type":"tr","attributes":{},"children":[{"$$mdtype":"Node","type":"td","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Charge Line"},"children":[]}]}]}]},{"$$mdtype":"Node","type":"td","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"A line item on a payables invoice"},"children":[]}]}]}]},{"$$mdtype":"Node","type":"tr","attributes":{},"children":[{"$$mdtype":"Node","type":"td","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Payables Invoice"},"children":[]}]}]}]},{"$$mdtype":"Node","type":"td","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"AP invoice from a creditor"},"children":[]}]}]}]},{"$$mdtype":"Node","type":"tr","attributes":{},"children":[{"$$mdtype":"Node","type":"td","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Outbound Payables Invoice"},"children":[]}]}]}]},{"$$mdtype":"Node","type":"td","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Approved invoice posted from BravoTran to the partner's system for cost posting"},"children":[]}]}]}]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran maps a "},"children":[]},{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Company"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" in the FFS to an "},"children":[]},{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Account"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" in BravoTran. Often a company represents a country. It is acceptable to have more than one account for a country if that country has multiple companies, but a single account must never represent multiple companies or countries."},"children":[]}]}]}]}],"sectionId":"/openapi/section/terminology"},{"nodeType":"overview-section-wrapper","children":[{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"heading","attributes":{"level":2,"id":"section/conventions"},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Conventions"},"children":[]}]}]},{"$$mdtype":"Node","type":"list","attributes":{"ordered":false,"marker":"-"},"children":[{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"external_id"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — Unique, immutable identifier for every entity. Used as the foreign key between systems. Typically the primary key in your database. Not visible to end users. The example "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"external_id"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" values throughout these docs are GUIDs, but they don't have to be — an "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"external_id"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" is whatever the stable identifier for the entity is in the FFS."},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"updated_at"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — "},"children":[]},{"$$mdtype":"Node","type":"link","inline":true,"attributes":{"href":"https://en.wikipedia.org/wiki/ISO_8601"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"ISO 8601"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" timestamp of when the entity was last modified. BravoTran uses this as a version marker to prevent overwriting with stale data. For jobs, this must update when any child data changes (e.g., accrual added/edited, shipment added to consol). On creation, "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"updated_at"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" must be set to (at least) the creation timestamp so newly created entities appear in polling responses alongside updates — the polling endpoints make no distinction between creates and updates."},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Amounts"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — Wherever there is an amount, a corresponding "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"currency"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" ("},"children":[]},{"$$mdtype":"Node","type":"link","inline":true,"attributes":{"href":"https://en.wikipedia.org/wiki/ISO_4217"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"ISO 4217"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":") must be provided."},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Local vs. overseas amounts"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"local_amount"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" is in the account's local currency (the currency of the country the forwarder operates in). "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"overseas_amount"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" is in the vendor's currency — whatever currency the charge or invoice is denominated in. The two may be the same (e.g., a domestic vendor)."},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Country codes"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — Country fields use "},"children":[]},{"$$mdtype":"Node","type":"link","inline":true,"attributes":{"href":"https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"ISO 3166-1 alpha-2"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" two-letter codes."},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Nested references"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — Related entities are represented as nested objects containing at minimum an "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"external_id"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"."},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Error codes"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — Error responses use "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"lower_snake"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" codes in both directions. BravoTran keys off the HTTP status rather than partner error bodies."},"children":[]}]}]}]}]}],"sectionId":"/openapi/section/conventions"},{"nodeType":"overview-section-wrapper","children":[{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"heading","attributes":{"level":2,"id":"section/staff"},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Staff"},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Staff data is provided via flat file — typically a spreadsheet export from the FFS. Any format your FFS can export works; field names don't matter as long as the required contents are present. If you don't have an existing export, use the "},"children":[]},{"$$mdtype":"Node","type":"link","inline":true,"attributes":{"href":"https://docs.bravotran.com/File-Definitions-166c5c207d858086b3d0dd89c1ae252b#166c5c207d8580f09c40f841992ebfe5"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"recommended format"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", which lists each field and whether it is required. Alternatively, implement "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET /staff"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" and BravoTran will fetch staff data from your API instead."},"children":[]}]}]}]}],"sectionId":"/openapi/section/staff"},{"nodeType":"overview-section-wrapper","children":[{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"heading","attributes":{"level":2,"id":"section/charge-codes"},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Charge Codes"},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Charge code data is provided via flat file — typically a spreadsheet export from the FFS. Any format your FFS can export works; field names don't matter as long as the required contents are present. If you don't have an existing export, use the "},"children":[]},{"$$mdtype":"Node","type":"link","inline":true,"attributes":{"href":"https://docs.bravotran.com/File-Definitions-166c5c207d858086b3d0dd89c1ae252b#166c5c207d8580699bdbc831d58ba770"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"recommended format"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", which lists each field and whether it is required. Alternatively, implement "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET /charge-codes"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" and BravoTran will fetch charge code data from your API instead. Accruals and charge lines reference charge codes by "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"external_id"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"; the mapping is maintained through the charge code data."},"children":[]}]}]}]}],"sectionId":"/openapi/section/charge-codes"},{"nodeType":"overview-section-wrapper","children":[{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"heading","attributes":{"level":2,"id":"section/tax-codes"},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Tax Codes"},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Tax code data is provided via flat file — typically a spreadsheet export from the FFS. Any format your FFS can export works; field names don't matter as long as the required contents are present. If you don't have an existing export, use the "},"children":[]},{"$$mdtype":"Node","type":"link","inline":true,"attributes":{"href":"https://docs.bravotran.com/File-Definitions-166c5c207d858086b3d0dd89c1ae252b#166c5c207d85807c9a6ac4ed15211d2e"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"recommended format"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", which lists each field and whether it is required. Alternatively, implement "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET /tax-codes"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" and BravoTran will fetch tax code data from your API instead."},"children":[]}]}]}]}],"sectionId":"/openapi/section/tax-codes"},{"nodeType":"overview-section-wrapper","children":[{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"heading","attributes":{"level":2,"id":"section/authentication"},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Authentication"},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Each direction of communication supports one of the following authentication methods, agreed upon during onboarding:"},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran → Partner"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" (partner-hosted endpoints):"},"children":[]}]}]},{"$$mdtype":"Node","type":"list","attributes":{"ordered":false,"marker":"-"},"children":[{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"OAuth 2.0"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — Client credentials flow"},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Bearer Token"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — Static token in the "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"Authorization"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" header"},"children":[]}]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Partner → BravoTran"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" ("},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"POST /events"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"):"},"children":[]}]}]},{"$$mdtype":"Node","type":"list","attributes":{"ordered":false,"marker":"-"},"children":[{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"OAuth 2.0"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — Client credentials flow"},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Token"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — API token in the "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"Authorization"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" header, formatted as "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"Token token=<token>"},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"API Key"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — API token in the "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"x-api-key"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" header"},"children":[]}]}]}]}]}],"sectionId":"/openapi/section/authentication"},{"nodeType":"overview-section-wrapper","children":[{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"heading","attributes":{"level":2,"id":"section/changelog"},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Changelog"},"children":[]}]}]}]}],"sectionId":"/openapi/section/changelog"},{"nodeType":"overview-section-wrapper","children":[{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"heading","attributes":{"level":3,"id":"section/1.5.0-2026-08-28"},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"1.5.0 — 2026-08-28"},"children":[]}]}]},{"$$mdtype":"Node","type":"list","attributes":{"ordered":false,"marker":"-"},"children":[{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Charge codes returned by "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET /charge-codes"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" now include a required "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"charge_type"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" field classifying the charge as "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"freight"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"origin"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"destination"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", or "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"other"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"."},"children":[]}]}]}]}]}],"sectionId":"/openapi/section/1.5.0-2026-08-28"},{"nodeType":"overview-section-wrapper","children":[{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"heading","attributes":{"level":3,"id":"section/1.4.0-2026-07-17"},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"1.4.0 — 2026-07-17"},"children":[]}]}]},{"$$mdtype":"Node","type":"list","attributes":{"ordered":false,"marker":"-"},"children":[{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Renamed the "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"org"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" reference to "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"creditor"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" on job accruals ("},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET /jobs/{external_id}"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"), payables invoices ("},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET /payables-invoices/{external_id}"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"), and outbound payables invoices ("},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"POST /payables-invoices"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"). The referenced entity is still an org fetched via the "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"/orgs"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" endpoints; the key now reflects the role the org plays on these records."},"children":[]}]}]}]}]}],"sectionId":"/openapi/section/1.4.0-2026-07-17"},{"nodeType":"overview-section-wrapper","children":[{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"heading","attributes":{"level":3,"id":"section/1.3.0-2026-07-16"},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"1.3.0 — 2026-07-16"},"children":[]}]}]},{"$$mdtype":"Node","type":"list","attributes":{"ordered":false,"marker":"-"},"children":[{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Payables invoice responses now include a "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"status"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" field ("},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"draft"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" or "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"posted"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":") — in both "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET /payables-invoices/{external_id}"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" and the "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"POST /payables-invoices"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" response body."},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"POST /payables-invoices"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" charge lines now always include an "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"accrual"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" reference whose "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"external_id"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" matches an accrual returned by "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET /jobs/{external_id}"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" ("},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"null"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" when the charge line has no matching accrual)."},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Job accruals now include a "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"tax_code"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" reference. Like other tax fields, it is optional for non-tax / US-based accounts."},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Added supporting data endpoints — "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET /staff"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET /charge-codes"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", and "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET /tax-codes"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — as an alternative to flat file delivery of staff, charge code, and tax code data."},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"POST /payables-invoices"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" now documents a "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"409"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" response with error code "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"duplicate_invoice"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", returned when an invoice with the same "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"invoice_number"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" already exists for the org."},"children":[]}]}]}]}]}],"sectionId":"/openapi/section/1.3.0-2026-07-16"},{"nodeType":"overview-section-wrapper","children":[{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"heading","attributes":{"level":3,"id":"section/1.2.0-2026-07-08"},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"1.2.0 — 2026-07-08"},"children":[]}]}]},{"$$mdtype":"Node","type":"list","attributes":{"ordered":false,"marker":"-"},"children":[{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"POST /payables-invoices"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" requests no longer include an "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"external_id"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":". Your system generates its own identifier for the created invoice and returns it as "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"external_id"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" in the 200 response. BravoTran stores that identifier and uses it for "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET /payables-invoices/{external_id}"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"."},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"POST /events"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" error responses now use "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"lower_snake"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" error codes ("},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"validation_error"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"invalid_json"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"unauthorized"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"), matching the partner-hosted endpoints."},"children":[]}]}]}]}]}],"sectionId":"/openapi/section/1.2.0-2026-07-08"},{"nodeType":"overview-section-wrapper","children":[{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"heading","attributes":{"level":3,"id":"section/1.1.0-2026-07-07"},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"1.1.0 — 2026-07-07"},"children":[]}]}]},{"$$mdtype":"Node","type":"list","attributes":{"ordered":false,"marker":"-"},"children":[{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"tax"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" is now required on invoice-level and charge-line amounts returned by "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET /payables-invoices/{external_id}"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" for tax-enabled accounts. Non-tax / US-based accounts are unaffected."},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Zero-tax lines must state "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"tax: 0.0"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" explicitly rather than omitting the field or sending "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"null"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"."},"children":[]}]}]}]}]}],"sectionId":"/openapi/section/1.1.0-2026-07-07"}]}]}},{"type":"link","label":"Overview","link":"/openapi/section/overview","routeSlug":"/openapi/section/overview","content":null},{"type":"link","label":"Polling alternative","link":"/openapi/section/polling-alternative","routeSlug":"/openapi/section/polling-alternative","content":null},{"type":"link","label":"Terminology","link":"/openapi/section/terminology","routeSlug":"/openapi/section/terminology","content":null},{"type":"link","label":"Conventions","link":"/openapi/section/conventions","routeSlug":"/openapi/section/conventions","content":null},{"type":"link","label":"Staff","link":"/openapi/section/staff","routeSlug":"/openapi/section/staff","content":null},{"type":"link","label":"Charge Codes","link":"/openapi/section/charge-codes","routeSlug":"/openapi/section/charge-codes","content":null},{"type":"link","label":"Tax Codes","link":"/openapi/section/tax-codes","routeSlug":"/openapi/section/tax-codes","content":null},{"type":"link","label":"Authentication","link":"/openapi/section/authentication","routeSlug":"/openapi/section/authentication","content":null},{"type":"link","label":"Changelog","link":"/openapi/section/changelog","routeSlug":"/openapi/section/changelog","content":null},{"type":"link","label":"1.5.0 — 2026-08-28","link":"/openapi/section/1.5.0-2026-08-28","routeSlug":"/openapi/section/1.5.0-2026-08-28","content":null},{"type":"link","label":"1.4.0 — 2026-07-17","link":"/openapi/section/1.4.0-2026-07-17","routeSlug":"/openapi/section/1.4.0-2026-07-17","content":null},{"type":"link","label":"1.3.0 — 2026-07-16","link":"/openapi/section/1.3.0-2026-07-16","routeSlug":"/openapi/section/1.3.0-2026-07-16","content":null},{"type":"link","label":"1.2.0 — 2026-07-08","link":"/openapi/section/1.2.0-2026-07-08","routeSlug":"/openapi/section/1.2.0-2026-07-08","content":null},{"type":"link","label":"1.1.0 — 2026-07-07","link":"/openapi/section/1.1.0-2026-07-07","routeSlug":"/openapi/section/1.1.0-2026-07-07","content":null},{"type":"group","label":"Events","link":"/openapi/events","routeSlug":"/openapi/events","items":[{"label":"Send event notification to BravoTran","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/openapi/events/sendevent","routeSlug":"/openapi/events/sendevent","metadata":{"seo":{"title":"Send event notification to BravoTran","description":"This endpoint is hosted by BravoTran, not the partner. Required unless you implement the polling alternative (GET /orgs, GET /jobs, GET /payables-invoices). Implement either the events API or the list endpoints — not both."}},"content":{"contentType":"item","itemVariant":"httpItem","meta":{"sourceId":"sendEvent","name":"Send event notification to BravoTran","isWebhook":false,"pointer":"/paths/~1events/post","hasSamples":true},"children":[{"nodeType":"container","children":[{"nodeType":"header","level":2,"label":"Send event notification to BravoTran","isWebhook":false,"showPageActions":true}],"panels":[]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Request","labelTranslationKey":"request","deepLinkSuffix":"request"},{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"This endpoint is hosted by BravoTran"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", not the partner. "},"children":[]},{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Required unless you implement the polling alternative"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" ("},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET /orgs"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET /jobs"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET /payables-invoices"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"). Implement either the events API or the list endpoints — not both."},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Your system calls this endpoint to notify BravoTran that an entity has been created or updated."},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran will then fetch the entity details from your API."},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran validates "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"entity_type"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"external_id"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", and "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"updated_at"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":". Additional JSON fields are rejected."},"children":[]}]}]}]},{"nodeType":"security","requirements":[{"schemes":[{"name":"OAuth2.0-BravoTran","scopes":[],"type":"oauth2","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Partner → BravoTran: OAuth 2.0 client credentials flow."},"children":[]}]}]}],"flows":{"clientCredentials":{"tokenUrl":"https://api.bravotran.com/oauth/token","scopes":{}}}}]},{"schemes":[{"name":"Token-Auth-BravoTran","scopes":[],"type":"apiKey","in":"header","paramName":"Authorization","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Partner → BravoTran: API token in the "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"Authorization"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" header, formatted as "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"Token token=<token>"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"."},"children":[]}]}]}]}]},{"schemes":[{"name":"X-API-Key-BravoTran","scopes":[],"type":"apiKey","in":"header","paramName":"x-api-key","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Partner → BravoTran: API token in the "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"x-api-key"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" header."},"children":[]}]}]}]}]}]},{"nodeType":"item-content","variant":"body","label":"Request Body","labelTranslationKey":"body","required":true,"mediaTypes":["application/json"],"mediaTypeSchemas":{"application/json":{"schemaId":"components/schemas/EventNotification","exampleIds":["paths/~1events/post/requestBody/content/application~1json/example"]}},"schemaId":"components/schemas/EventNotification","exampleIds":["paths/~1events/post/requestBody/content/application~1json/example"],"pointer":"/paths/~1events/post/requestBody"}],"panels":[{"children":[{"kind":"code-sample","source":{"kind":"code-sample","operationType":"http","method":"POST","path":"/events","servers":[{"url":"/_mock/openapi","description":"Mock server","isMockServer":true},{"url":"https://api.bravotran.com","description":"BravoTran-hosted event ingestion endpoint"}],"parameters":{"path":[],"query":[],"querystring":[],"header":[],"cookie":[]},"security":[{"schemes":[{"id":"OAuth2.0-BravoTran","type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"https://api.bravotran.com/oauth/token","scopes":{}}}}],"scopes":[]},{"schemes":[{"id":"Token-Auth-BravoTran","type":"apiKey","name":"Authorization","in":"header"}],"scopes":[]},{"schemes":[{"id":"X-API-Key-BravoTran","type":"apiKey","name":"x-api-key","in":"header"}],"scopes":[]}],"requestBody":{"application/json":{"schemaId":"components/schemas/EventNotification","exampleIds":["paths/~1events/post/requestBody/content/application~1json/example"]}},"responseCodes":["200","400","401"],"pointer":"/events","href":"events/sendevent","openApiOperationId":"sendEvent","summary":"Send event notification to BravoTran","securityGroups":[{"OAuth2.0-BravoTran":[]},{"Token-Auth-BravoTran":[]},{"X-API-Key-BravoTran":[]}]},"isWebhook":false,"hideReplay":false,"servers":[{"url":"/_mock/openapi","description":"Mock server","isMockServer":true},{"url":"https://api.bravotran.com","description":"BravoTran-hosted event ingestion endpoint"}],"schemaId":"components/schemas/EventNotification","exampleIds":["paths/~1events/post/requestBody/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeSchemas":{"application/json":{"schemaId":"components/schemas/EventNotification","exampleIds":["paths/~1events/post/requestBody/content/application~1json/example"]}},"examples":[{}]}]}]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Responses","labelTranslationKey":"responses","deepLinkSuffix":"responses"},{"nodeType":"item-content","variant":"responses","responses":[{"code":"200","description":"Event accepted for processing","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/EventAccepted","exampleIds":["paths/~1events/post/responses/200/content/application~1json/example"]}},"schemaId":"components/schemas/EventAccepted","exampleIds":["paths/~1events/post/responses/200/content/application~1json/example"]},{"code":"400","description":"Invalid event payload","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/EventError","exampleIds":["paths/~1events/post/responses/400/content/application~1json/examples/validation_error","paths/~1events/post/responses/400/content/application~1json/examples/invalid_json"]}},"schemaId":"components/schemas/EventError","exampleIds":["paths/~1events/post/responses/400/content/application~1json/examples/validation_error","paths/~1events/post/responses/400/content/application~1json/examples/invalid_json"]},{"code":"401","description":"Unauthorized","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/UnauthorizedError","exampleIds":["paths/~1events/post/responses/401/content/application~1json/example"]}},"schemaId":"components/schemas/UnauthorizedError","exampleIds":["paths/~1events/post/responses/401/content/application~1json/example"]}],"pointer":"/paths/~1events/post/responses"}],"panels":[{"children":[{"kind":"response","headerTitle":"Response","responseCodes":[{"code":"200","schemaId":"components/schemas/EventAccepted","exampleIds":["paths/~1events/post/responses/200/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/EventAccepted","exampleIds":["paths/~1events/post/responses/200/content/application~1json/example"]}}},{"code":"400","schemaId":"components/schemas/EventError","exampleIds":["paths/~1events/post/responses/400/content/application~1json/examples/validation_error","paths/~1events/post/responses/400/content/application~1json/examples/invalid_json"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/EventError","exampleIds":["paths/~1events/post/responses/400/content/application~1json/examples/validation_error","paths/~1events/post/responses/400/content/application~1json/examples/invalid_json"]}}},{"code":"401","schemaId":"components/schemas/UnauthorizedError","exampleIds":["paths/~1events/post/responses/401/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/UnauthorizedError","exampleIds":["paths/~1events/post/responses/401/content/application~1json/example"]}}}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"feedback","pageSlug":"/events/sendevent"}],"panels":[]}]},"httpPath":"/events"}],"content":{"contentType":"group","meta":{"name":"Events"},"children":[{"nodeType":"container","children":[{"nodeType":"header","level":2,"label":"Events","showPageActions":true},{"nodeType":"markdoc","content":"Event notifications sent from the FFS to BravoTran."}],"panels":[{"children":[{"kind":"group-items","title":"Operations","titleTranslationKey":"operations","items":[{"title":"/events","summary":"Send event notification to BravoTran","prefix":{"name":"post","color":"post"},"badges":[],"link":"/events/sendevent","deprecated":false}]}]}]}]}},{"type":"group","label":"Orgs","link":"/openapi/orgs","routeSlug":"/openapi/orgs","items":[{"label":"List updated orgs","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/openapi/orgs/listorgs","routeSlug":"/openapi/orgs/listorgs","metadata":{"seo":{"title":"List updated orgs","description":"Returns a list of org identifiers, optionally filtered to those updated within a time window."}},"content":{"contentType":"item","itemVariant":"httpItem","meta":{"sourceId":"listOrgs","name":"List updated orgs","isWebhook":false,"pointer":"/paths/~1orgs/get","hasSamples":false},"children":[{"nodeType":"container","children":[{"nodeType":"header","level":2,"label":"List updated orgs","isWebhook":false,"showPageActions":true}],"panels":[]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Request","labelTranslationKey":"request","deepLinkSuffix":"request"},{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Returns a list of org identifiers, optionally filtered to those updated within a time window."},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Optional."},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" Provided as an alternative to "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"POST /events"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" for partners that cannot push live event notifications. Implement either the events API or the list endpoints — not both."},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Response items contain only "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"external_id"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":". To fetch full org details, call "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET /orgs/{external_id}"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" for each entry."},"children":[]}]}]}]},{"nodeType":"security","requirements":[{"schemes":[{"name":"OAuth2.0-Partner","scopes":[],"type":"oauth2","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran → Partner: OAuth 2.0 client credentials flow."},"children":[]}]}]}],"flows":{"clientCredentials":{"tokenUrl":"https://api.yourserver.com/oauth/token","scopes":{}}}}]},{"schemes":[{"name":"Bearer-Token-Partner","scopes":[],"type":"http","scheme":"bearer","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran → Partner: Bearer token in the Authorization header."},"children":[]}]}]}]}]}]},{"nodeType":"item-content","variant":"query","label":"Query","labelTranslationKey":"query","parameters":[{"name":"updated_after","in":"query","schemaId":"schema_8","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Inclusive lower bound on "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"updated_at"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":". ISO 8601 UTC datetime (e.g., "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"2025-02-17T20:32:39Z"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":")."},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Date-only values are not accepted. Optional."},"children":[]}]}]}]},{"name":"updated_before","in":"query","schemaId":"schema_9","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Exclusive upper bound on "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"updated_at"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":". ISO 8601 UTC datetime (e.g., "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"2025-02-18T20:32:39Z"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":")."},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Date-only values are not accepted. Optional, but if provided, "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"updated_after"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" is required."},"children":[]}]}]}]}],"pointer":"/paths/~1orgs/get/parameters"}],"panels":[{"children":[{"kind":"code-sample","source":{"kind":"code-sample","operationType":"http","method":"GET","path":"/orgs","servers":[{"url":"/_mock/openapi","description":"Mock server","isMockServer":true},{"url":"https://api.yourserver.com"}],"parameters":{"path":[],"query":[{"name":"updated_after","in":"query","required":false,"schemaId":"schema_8"},{"name":"updated_before","in":"query","required":false,"schemaId":"schema_9"}],"querystring":[],"header":[],"cookie":[]},"security":[{"schemes":[{"id":"OAuth2.0-Partner","type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"https://api.yourserver.com/oauth/token","scopes":{}}}}],"scopes":[]},{"schemes":[{"id":"Bearer-Token-Partner","type":"http","scheme":"bearer"}],"scopes":[]}],"responseCodes":["200","400","401"],"pointer":"/orgs","href":"orgs/listorgs","openApiOperationId":"listOrgs","summary":"List updated orgs","securityGroups":[{"OAuth2.0-Partner":[]},{"Bearer-Token-Partner":[]}]},"isWebhook":false,"hideReplay":false,"servers":[{"url":"/_mock/openapi","description":"Mock server","isMockServer":true},{"url":"https://api.yourserver.com"}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Responses","labelTranslationKey":"responses","deepLinkSuffix":"responses"},{"nodeType":"item-content","variant":"responses","responses":[{"code":"200","description":"List of org identifiers updated in the given window.","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_10","exampleIds":["paths/~1orgs/get/responses/200/content/application~1json/example"]}},"schemaId":"schema_10","exampleIds":["paths/~1orgs/get/responses/200/content/application~1json/example"]},{"code":"400","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Invalid request. For list endpoints, returned when query parameters are malformed,"},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"when "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"updated_before"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" is provided without "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"updated_after"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", or when a date-only value"},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"is supplied where a UTC datetime is required."},"children":[]}]}]}],"mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1orgs/get/responses/400/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1orgs/get/responses/400/content/application~1json/example"]},{"code":"401","description":"Authentication credentials were missing or invalid.","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1orgs/get/responses/401/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1orgs/get/responses/401/content/application~1json/example"]}],"pointer":"/paths/~1orgs/get/responses"}],"panels":[{"children":[{"kind":"response","headerTitle":"Response","responseCodes":[{"code":"200","schemaId":"schema_10","exampleIds":["paths/~1orgs/get/responses/200/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_10","exampleIds":["paths/~1orgs/get/responses/200/content/application~1json/example"]}}},{"code":"400","schemaId":"components/schemas/Error","exampleIds":["paths/~1orgs/get/responses/400/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1orgs/get/responses/400/content/application~1json/example"]}}},{"code":"401","schemaId":"components/schemas/Error","exampleIds":["paths/~1orgs/get/responses/401/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1orgs/get/responses/401/content/application~1json/example"]}}}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"feedback","pageSlug":"/orgs/listorgs"}],"panels":[]}]},"httpPath":"/orgs"},{"label":"Get an org","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/openapi/orgs/getorg","routeSlug":"/openapi/orgs/getorg","metadata":{"seo":{"title":"Get an org","description":"Returns a single org by its external ID. Implementation is required."}},"content":{"contentType":"item","itemVariant":"httpItem","meta":{"sourceId":"getOrg","name":"Get an org","isWebhook":false,"pointer":"/paths/~1orgs~1{external_id}/get","hasSamples":false},"children":[{"nodeType":"container","children":[{"nodeType":"header","level":2,"label":"Get an org","isWebhook":false,"showPageActions":true}],"panels":[]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Request","labelTranslationKey":"request","deepLinkSuffix":"request"},{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Returns a single org by its external ID. "},"children":[]},{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Implementation is required."},"children":[]}]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"If multiple source tables are combined into the orgs entity, prefix the "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"external_id"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" with the source type to maintain uniqueness (e.g., "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"vendor-123"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":")."},"children":[]}]}]}]},{"nodeType":"security","requirements":[{"schemes":[{"name":"OAuth2.0-Partner","scopes":[],"type":"oauth2","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran → Partner: OAuth 2.0 client credentials flow."},"children":[]}]}]}],"flows":{"clientCredentials":{"tokenUrl":"https://api.yourserver.com/oauth/token","scopes":{}}}}]},{"schemes":[{"name":"Bearer-Token-Partner","scopes":[],"type":"http","scheme":"bearer","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran → Partner: Bearer token in the Authorization header."},"children":[]}]}]}]}]}]},{"nodeType":"item-content","variant":"path","label":"Path","labelTranslationKey":"path","parameters":[{"name":"external_id","in":"path","schemaId":"schema_11","description":"The unique, immutable identifier for the entity in the FFS.","required":true}],"pointer":"/paths/~1orgs~1{external_id}/get/parameters"}],"panels":[{"children":[{"kind":"code-sample","source":{"kind":"code-sample","operationType":"http","method":"GET","path":"/orgs/{external_id}","servers":[{"url":"/_mock/openapi","description":"Mock server","isMockServer":true},{"url":"https://api.yourserver.com"}],"parameters":{"path":[{"name":"external_id","in":"path","required":true,"schemaId":"schema_11"}],"query":[],"querystring":[],"header":[],"cookie":[]},"security":[{"schemes":[{"id":"OAuth2.0-Partner","type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"https://api.yourserver.com/oauth/token","scopes":{}}}}],"scopes":[]},{"schemes":[{"id":"Bearer-Token-Partner","type":"http","scheme":"bearer"}],"scopes":[]}],"responseCodes":["200","401","404"],"pointer":"/orgs/{external_id}","href":"orgs/getorg","openApiOperationId":"getOrg","summary":"Get an org","securityGroups":[{"OAuth2.0-Partner":[]},{"Bearer-Token-Partner":[]}]},"isWebhook":false,"hideReplay":false,"servers":[{"url":"/_mock/openapi","description":"Mock server","isMockServer":true},{"url":"https://api.yourserver.com"}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Responses","labelTranslationKey":"responses","deepLinkSuffix":"responses"},{"nodeType":"item-content","variant":"responses","responses":[{"code":"200","description":"Org details","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Org","exampleIds":["paths/~1orgs~1{external_id}/get/responses/200/content/application~1json/example"]}},"schemaId":"components/schemas/Org","exampleIds":["paths/~1orgs~1{external_id}/get/responses/200/content/application~1json/example"]},{"code":"401","description":"Authentication credentials were missing or invalid.","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1orgs~1{external_id}/get/responses/401/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1orgs~1{external_id}/get/responses/401/content/application~1json/example"]},{"code":"404","description":"Entity not found","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1orgs~1{external_id}/get/responses/404/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1orgs~1{external_id}/get/responses/404/content/application~1json/example"]}],"pointer":"/paths/~1orgs~1{external_id}/get/responses"}],"panels":[{"children":[{"kind":"response","headerTitle":"Response","responseCodes":[{"code":"200","schemaId":"components/schemas/Org","exampleIds":["paths/~1orgs~1{external_id}/get/responses/200/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Org","exampleIds":["paths/~1orgs~1{external_id}/get/responses/200/content/application~1json/example"]}}},{"code":"401","schemaId":"components/schemas/Error","exampleIds":["paths/~1orgs~1{external_id}/get/responses/401/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1orgs~1{external_id}/get/responses/401/content/application~1json/example"]}}},{"code":"404","schemaId":"components/schemas/Error","exampleIds":["paths/~1orgs~1{external_id}/get/responses/404/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1orgs~1{external_id}/get/responses/404/content/application~1json/example"]}}}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"feedback","pageSlug":"/orgs/getorg"}],"panels":[]}]},"httpPath":"/orgs/{external_id}"}],"content":{"contentType":"group","meta":{"name":"Orgs"},"children":[{"nodeType":"container","children":[{"nodeType":"header","level":2,"label":"Orgs","showPageActions":true},{"nodeType":"markdoc","content":"Vendors, carriers, creditors, and debtors that BravoTran fetches from the FFS."}],"panels":[{"children":[{"kind":"group-items","title":"Operations","titleTranslationKey":"operations","items":[{"title":"/orgs","summary":"List updated orgs","prefix":{"name":"get","color":"get"},"badges":[],"link":"/orgs/listorgs","deprecated":false},{"title":"/orgs/{external_id}","summary":"Get an org","prefix":{"name":"get","color":"get"},"badges":[],"link":"/orgs/getorg","deprecated":false}]}]}]}]}},{"type":"group","label":"Jobs","link":"/openapi/jobs","routeSlug":"/openapi/jobs","items":[{"label":"List updated jobs","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/openapi/jobs/listjobs","routeSlug":"/openapi/jobs/listjobs","metadata":{"seo":{"title":"List updated jobs","description":"Returns a list of job identifiers, optionally filtered to those updated within a time window."}},"content":{"contentType":"item","itemVariant":"httpItem","meta":{"sourceId":"listJobs","name":"List updated jobs","isWebhook":false,"pointer":"/paths/~1jobs/get","hasSamples":false},"children":[{"nodeType":"container","children":[{"nodeType":"header","level":2,"label":"List updated jobs","isWebhook":false,"showPageActions":true}],"panels":[]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Request","labelTranslationKey":"request","deepLinkSuffix":"request"},{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Returns a list of job identifiers, optionally filtered to those updated within a time window."},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Optional."},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" Provided as an alternative to "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"POST /events"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" for partners that cannot push live event notifications. Implement either the events API or the list endpoints — not both."},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"A job's "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"updated_at"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" reflects changes to nested data as well (accruals, child shipments linked, etc.), so this endpoint surfaces any change that should trigger a re-sync. Response items contain only "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"external_id"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":". To fetch full job details, call "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET /jobs/{external_id}"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" for each entry."},"children":[]}]}]}]},{"nodeType":"security","requirements":[{"schemes":[{"name":"OAuth2.0-Partner","scopes":[],"type":"oauth2","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran → Partner: OAuth 2.0 client credentials flow."},"children":[]}]}]}],"flows":{"clientCredentials":{"tokenUrl":"https://api.yourserver.com/oauth/token","scopes":{}}}}]},{"schemes":[{"name":"Bearer-Token-Partner","scopes":[],"type":"http","scheme":"bearer","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran → Partner: Bearer token in the Authorization header."},"children":[]}]}]}]}]}]},{"nodeType":"item-content","variant":"query","label":"Query","labelTranslationKey":"query","parameters":[{"name":"updated_after","in":"query","schemaId":"schema_8","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Inclusive lower bound on "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"updated_at"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":". ISO 8601 UTC datetime (e.g., "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"2025-02-17T20:32:39Z"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":")."},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Date-only values are not accepted. Optional."},"children":[]}]}]}]},{"name":"updated_before","in":"query","schemaId":"schema_9","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Exclusive upper bound on "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"updated_at"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":". ISO 8601 UTC datetime (e.g., "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"2025-02-18T20:32:39Z"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":")."},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Date-only values are not accepted. Optional, but if provided, "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"updated_after"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" is required."},"children":[]}]}]}]}],"pointer":"/paths/~1jobs/get/parameters"}],"panels":[{"children":[{"kind":"code-sample","source":{"kind":"code-sample","operationType":"http","method":"GET","path":"/jobs","servers":[{"url":"/_mock/openapi","description":"Mock server","isMockServer":true},{"url":"https://api.yourserver.com"}],"parameters":{"path":[],"query":[{"name":"updated_after","in":"query","required":false,"schemaId":"schema_8"},{"name":"updated_before","in":"query","required":false,"schemaId":"schema_9"}],"querystring":[],"header":[],"cookie":[]},"security":[{"schemes":[{"id":"OAuth2.0-Partner","type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"https://api.yourserver.com/oauth/token","scopes":{}}}}],"scopes":[]},{"schemes":[{"id":"Bearer-Token-Partner","type":"http","scheme":"bearer"}],"scopes":[]}],"responseCodes":["200","400","401"],"pointer":"/jobs","href":"jobs/listjobs","openApiOperationId":"listJobs","summary":"List updated jobs","securityGroups":[{"OAuth2.0-Partner":[]},{"Bearer-Token-Partner":[]}]},"isWebhook":false,"hideReplay":false,"servers":[{"url":"/_mock/openapi","description":"Mock server","isMockServer":true},{"url":"https://api.yourserver.com"}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Responses","labelTranslationKey":"responses","deepLinkSuffix":"responses"},{"nodeType":"item-content","variant":"responses","responses":[{"code":"200","description":"List of job identifiers updated in the given window.","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_10","exampleIds":["paths/~1jobs/get/responses/200/content/application~1json/example"]}},"schemaId":"schema_10","exampleIds":["paths/~1jobs/get/responses/200/content/application~1json/example"]},{"code":"400","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Invalid request. For list endpoints, returned when query parameters are malformed,"},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"when "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"updated_before"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" is provided without "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"updated_after"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", or when a date-only value"},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"is supplied where a UTC datetime is required."},"children":[]}]}]}],"mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1jobs/get/responses/400/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1jobs/get/responses/400/content/application~1json/example"]},{"code":"401","description":"Authentication credentials were missing or invalid.","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1jobs/get/responses/401/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1jobs/get/responses/401/content/application~1json/example"]}],"pointer":"/paths/~1jobs/get/responses"}],"panels":[{"children":[{"kind":"response","headerTitle":"Response","responseCodes":[{"code":"200","schemaId":"schema_10","exampleIds":["paths/~1jobs/get/responses/200/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_10","exampleIds":["paths/~1jobs/get/responses/200/content/application~1json/example"]}}},{"code":"400","schemaId":"components/schemas/Error","exampleIds":["paths/~1jobs/get/responses/400/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1jobs/get/responses/400/content/application~1json/example"]}}},{"code":"401","schemaId":"components/schemas/Error","exampleIds":["paths/~1jobs/get/responses/401/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1jobs/get/responses/401/content/application~1json/example"]}}}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"feedback","pageSlug":"/jobs/listjobs"}],"panels":[]}]},"httpPath":"/jobs"},{"label":"Get a job","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/openapi/jobs/getjob","routeSlug":"/openapi/jobs/getjob","metadata":{"seo":{"title":"Get a job","description":"Returns a single job by its external ID. Implementation is required."}},"content":{"contentType":"item","itemVariant":"httpItem","meta":{"sourceId":"getJob","name":"Get a job","isWebhook":false,"pointer":"/paths/~1jobs~1{external_id}/get","hasSamples":false},"children":[{"nodeType":"container","children":[{"nodeType":"header","level":2,"label":"Get a job","isWebhook":false,"showPageActions":true}],"panels":[]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Request","labelTranslationKey":"request","deepLinkSuffix":"request"},{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Returns a single job by its external ID. "},"children":[]},{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Implementation is required."},"children":[]}]}]}]},{"$$mdtype":"Node","type":"blockquote","attributes":{},"children":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Tax note:"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" Tax-related fields (e.g., "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"tax"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" on amounts, tax code references) are marked as required but are "},"children":[]},{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"optional for non-tax / US-based accounts"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":". BravoTran determines the tax mode based on the authenticated account."},"children":[]}]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Jobs contain nested accruals, container numbers, waybills, and additional references."},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"When a job is updated (including changes to accruals, child shipments added to a consol, etc.),"},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"the "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"updated_at"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" timestamp must reflect the most recent change."},"children":[]}]}]}]},{"nodeType":"security","requirements":[{"schemes":[{"name":"OAuth2.0-Partner","scopes":[],"type":"oauth2","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran → Partner: OAuth 2.0 client credentials flow."},"children":[]}]}]}],"flows":{"clientCredentials":{"tokenUrl":"https://api.yourserver.com/oauth/token","scopes":{}}}}]},{"schemes":[{"name":"Bearer-Token-Partner","scopes":[],"type":"http","scheme":"bearer","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran → Partner: Bearer token in the Authorization header."},"children":[]}]}]}]}]}]},{"nodeType":"item-content","variant":"path","label":"Path","labelTranslationKey":"path","parameters":[{"name":"external_id","in":"path","schemaId":"schema_11","description":"The unique, immutable identifier for the entity in the FFS.","required":true}],"pointer":"/paths/~1jobs~1{external_id}/get/parameters"}],"panels":[{"children":[{"kind":"code-sample","source":{"kind":"code-sample","operationType":"http","method":"GET","path":"/jobs/{external_id}","servers":[{"url":"/_mock/openapi","description":"Mock server","isMockServer":true},{"url":"https://api.yourserver.com"}],"parameters":{"path":[{"name":"external_id","in":"path","required":true,"schemaId":"schema_11"}],"query":[],"querystring":[],"header":[],"cookie":[]},"security":[{"schemes":[{"id":"OAuth2.0-Partner","type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"https://api.yourserver.com/oauth/token","scopes":{}}}}],"scopes":[]},{"schemes":[{"id":"Bearer-Token-Partner","type":"http","scheme":"bearer"}],"scopes":[]}],"responseCodes":["200","401","404"],"pointer":"/jobs/{external_id}","href":"jobs/getjob","openApiOperationId":"getJob","summary":"Get a job","securityGroups":[{"OAuth2.0-Partner":[]},{"Bearer-Token-Partner":[]}]},"isWebhook":false,"hideReplay":false,"servers":[{"url":"/_mock/openapi","description":"Mock server","isMockServer":true},{"url":"https://api.yourserver.com"}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Responses","labelTranslationKey":"responses","deepLinkSuffix":"responses"},{"nodeType":"item-content","variant":"responses","responses":[{"code":"200","description":"Job details","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Job","exampleIds":["paths/~1jobs~1{external_id}/get/responses/200/content/application~1json/examples/shipment","paths/~1jobs~1{external_id}/get/responses/200/content/application~1json/examples/consol"]}},"schemaId":"components/schemas/Job","exampleIds":["paths/~1jobs~1{external_id}/get/responses/200/content/application~1json/examples/shipment","paths/~1jobs~1{external_id}/get/responses/200/content/application~1json/examples/consol"]},{"code":"401","description":"Authentication credentials were missing or invalid.","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1jobs~1{external_id}/get/responses/401/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1jobs~1{external_id}/get/responses/401/content/application~1json/example"]},{"code":"404","description":"Entity not found","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1jobs~1{external_id}/get/responses/404/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1jobs~1{external_id}/get/responses/404/content/application~1json/example"]}],"pointer":"/paths/~1jobs~1{external_id}/get/responses"}],"panels":[{"children":[{"kind":"response","headerTitle":"Response","responseCodes":[{"code":"200","schemaId":"components/schemas/Job","exampleIds":["paths/~1jobs~1{external_id}/get/responses/200/content/application~1json/examples/shipment","paths/~1jobs~1{external_id}/get/responses/200/content/application~1json/examples/consol"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Job","exampleIds":["paths/~1jobs~1{external_id}/get/responses/200/content/application~1json/examples/shipment","paths/~1jobs~1{external_id}/get/responses/200/content/application~1json/examples/consol"]}}},{"code":"401","schemaId":"components/schemas/Error","exampleIds":["paths/~1jobs~1{external_id}/get/responses/401/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1jobs~1{external_id}/get/responses/401/content/application~1json/example"]}}},{"code":"404","schemaId":"components/schemas/Error","exampleIds":["paths/~1jobs~1{external_id}/get/responses/404/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1jobs~1{external_id}/get/responses/404/content/application~1json/example"]}}}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"feedback","pageSlug":"/jobs/getjob"}],"panels":[]}]},"httpPath":"/jobs/{external_id}"}],"content":{"contentType":"group","meta":{"name":"Jobs"},"children":[{"nodeType":"container","children":[{"nodeType":"header","level":2,"label":"Jobs","showPageActions":true},{"nodeType":"markdoc","content":"Consols and shipments, including their accruals, that BravoTran fetches from the FFS."}],"panels":[{"children":[{"kind":"group-items","title":"Operations","titleTranslationKey":"operations","items":[{"title":"/jobs","summary":"List updated jobs","prefix":{"name":"get","color":"get"},"badges":[],"link":"/jobs/listjobs","deprecated":false},{"title":"/jobs/{external_id}","summary":"Get a job","prefix":{"name":"get","color":"get"},"badges":[],"link":"/jobs/getjob","deprecated":false}]}]}]}]}},{"type":"group","label":"Payables Invoices","link":"/openapi/payables-invoices","routeSlug":"/openapi/payables-invoices","items":[{"label":"List updated payables invoices","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/openapi/payables-invoices/listpayablesinvoices","routeSlug":"/openapi/payables-invoices/listpayablesinvoices","metadata":{"seo":{"title":"List updated payables invoices","description":"Returns a list of payables invoice identifiers, optionally filtered to those updated within a time window."}},"content":{"contentType":"item","itemVariant":"httpItem","meta":{"sourceId":"listPayablesInvoices","name":"List updated payables invoices","isWebhook":false,"pointer":"/paths/~1payables-invoices/get","hasSamples":false},"children":[{"nodeType":"container","children":[{"nodeType":"header","level":2,"label":"List updated payables invoices","isWebhook":false,"showPageActions":true}],"panels":[]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Request","labelTranslationKey":"request","deepLinkSuffix":"request"},{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Returns a list of payables invoice identifiers, optionally filtered to those updated within a time window."},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Optional."},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" Provided as an alternative to "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"POST /events"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" for partners that cannot push live event notifications. Implement either the events API or the list endpoints — not both."},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Response items contain only "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"external_id"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":". To fetch full invoice details, call "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET /payables-invoices/{external_id}"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" for each entry."},"children":[]}]}]}]},{"nodeType":"security","requirements":[{"schemes":[{"name":"OAuth2.0-Partner","scopes":[],"type":"oauth2","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran → Partner: OAuth 2.0 client credentials flow."},"children":[]}]}]}],"flows":{"clientCredentials":{"tokenUrl":"https://api.yourserver.com/oauth/token","scopes":{}}}}]},{"schemes":[{"name":"Bearer-Token-Partner","scopes":[],"type":"http","scheme":"bearer","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran → Partner: Bearer token in the Authorization header."},"children":[]}]}]}]}]}]},{"nodeType":"item-content","variant":"query","label":"Query","labelTranslationKey":"query","parameters":[{"name":"updated_after","in":"query","schemaId":"schema_8","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Inclusive lower bound on "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"updated_at"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":". ISO 8601 UTC datetime (e.g., "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"2025-02-17T20:32:39Z"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":")."},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Date-only values are not accepted. Optional."},"children":[]}]}]}]},{"name":"updated_before","in":"query","schemaId":"schema_9","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Exclusive upper bound on "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"updated_at"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":". ISO 8601 UTC datetime (e.g., "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"2025-02-18T20:32:39Z"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":")."},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Date-only values are not accepted. Optional, but if provided, "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"updated_after"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" is required."},"children":[]}]}]}]}],"pointer":"/paths/~1payables-invoices/get/parameters"}],"panels":[{"children":[{"kind":"code-sample","source":{"kind":"code-sample","operationType":"http","method":"GET","path":"/payables-invoices","servers":[{"url":"/_mock/openapi","description":"Mock server","isMockServer":true},{"url":"https://api.yourserver.com"}],"parameters":{"path":[],"query":[{"name":"updated_after","in":"query","required":false,"schemaId":"schema_8"},{"name":"updated_before","in":"query","required":false,"schemaId":"schema_9"}],"querystring":[],"header":[],"cookie":[]},"security":[{"schemes":[{"id":"OAuth2.0-Partner","type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"https://api.yourserver.com/oauth/token","scopes":{}}}}],"scopes":[]},{"schemes":[{"id":"Bearer-Token-Partner","type":"http","scheme":"bearer"}],"scopes":[]}],"responseCodes":["200","400","401"],"pointer":"/payables-invoices","href":"payables-invoices/listpayablesinvoices","openApiOperationId":"listPayablesInvoices","summary":"List updated payables invoices","securityGroups":[{"OAuth2.0-Partner":[]},{"Bearer-Token-Partner":[]}]},"isWebhook":false,"hideReplay":false,"servers":[{"url":"/_mock/openapi","description":"Mock server","isMockServer":true},{"url":"https://api.yourserver.com"}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Responses","labelTranslationKey":"responses","deepLinkSuffix":"responses"},{"nodeType":"item-content","variant":"responses","responses":[{"code":"200","description":"List of payables invoice identifiers updated in the given window.","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_10","exampleIds":["paths/~1payables-invoices/get/responses/200/content/application~1json/example"]}},"schemaId":"schema_10","exampleIds":["paths/~1payables-invoices/get/responses/200/content/application~1json/example"]},{"code":"400","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Invalid request. For list endpoints, returned when query parameters are malformed,"},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"when "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"updated_before"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" is provided without "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"updated_after"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", or when a date-only value"},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"is supplied where a UTC datetime is required."},"children":[]}]}]}],"mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices/get/responses/400/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices/get/responses/400/content/application~1json/example"]},{"code":"401","description":"Authentication credentials were missing or invalid.","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices/get/responses/401/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices/get/responses/401/content/application~1json/example"]}],"pointer":"/paths/~1payables-invoices/get/responses"}],"panels":[{"children":[{"kind":"response","headerTitle":"Response","responseCodes":[{"code":"200","schemaId":"schema_10","exampleIds":["paths/~1payables-invoices/get/responses/200/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_10","exampleIds":["paths/~1payables-invoices/get/responses/200/content/application~1json/example"]}}},{"code":"400","schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices/get/responses/400/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices/get/responses/400/content/application~1json/example"]}}},{"code":"401","schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices/get/responses/401/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices/get/responses/401/content/application~1json/example"]}}}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"feedback","pageSlug":"/payables-invoices/listpayablesinvoices"}],"panels":[]}]},"httpPath":"/payables-invoices"},{"label":"Get a payables invoice","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/openapi/payables-invoices/getpayablesinvoice","routeSlug":"/openapi/payables-invoices/getpayablesinvoice","metadata":{"seo":{"title":"Get a payables invoice","description":"Returns a single payables invoice by its external ID. Implementation is required."}},"content":{"contentType":"item","itemVariant":"httpItem","meta":{"sourceId":"getPayablesInvoice","name":"Get a payables invoice","isWebhook":false,"pointer":"/paths/~1payables-invoices~1{external_id}/get","hasSamples":false},"children":[{"nodeType":"container","children":[{"nodeType":"header","level":2,"label":"Get a payables invoice","isWebhook":false,"showPageActions":true}],"panels":[]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Request","labelTranslationKey":"request","deepLinkSuffix":"request"},{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Returns a single payables invoice by its external ID. "},"children":[]},{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Implementation is required."},"children":[]}]}]}]},{"$$mdtype":"Node","type":"blockquote","attributes":{},"children":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Tax note:"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" Tax-related fields (e.g., "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"tax"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" on amounts, tax code references) are marked as required but are "},"children":[]},{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"optional for non-tax / US-based accounts"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":". BravoTran determines the tax mode based on the authenticated account."},"children":[]}]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Payables invoices contain nested charge lines, each referencing a job and optionally an accrual."},"children":[]}]}]}]},{"nodeType":"security","requirements":[{"schemes":[{"name":"OAuth2.0-Partner","scopes":[],"type":"oauth2","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran → Partner: OAuth 2.0 client credentials flow."},"children":[]}]}]}],"flows":{"clientCredentials":{"tokenUrl":"https://api.yourserver.com/oauth/token","scopes":{}}}}]},{"schemes":[{"name":"Bearer-Token-Partner","scopes":[],"type":"http","scheme":"bearer","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran → Partner: Bearer token in the Authorization header."},"children":[]}]}]}]}]}]},{"nodeType":"item-content","variant":"path","label":"Path","labelTranslationKey":"path","parameters":[{"name":"external_id","in":"path","schemaId":"schema_11","description":"The unique, immutable identifier for the entity in the FFS.","required":true}],"pointer":"/paths/~1payables-invoices~1{external_id}/get/parameters"}],"panels":[{"children":[{"kind":"code-sample","source":{"kind":"code-sample","operationType":"http","method":"GET","path":"/payables-invoices/{external_id}","servers":[{"url":"/_mock/openapi","description":"Mock server","isMockServer":true},{"url":"https://api.yourserver.com"}],"parameters":{"path":[{"name":"external_id","in":"path","required":true,"schemaId":"schema_11"}],"query":[],"querystring":[],"header":[],"cookie":[]},"security":[{"schemes":[{"id":"OAuth2.0-Partner","type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"https://api.yourserver.com/oauth/token","scopes":{}}}}],"scopes":[]},{"schemes":[{"id":"Bearer-Token-Partner","type":"http","scheme":"bearer"}],"scopes":[]}],"responseCodes":["200","401","404"],"pointer":"/payables-invoices/{external_id}","href":"payables-invoices/getpayablesinvoice","openApiOperationId":"getPayablesInvoice","summary":"Get a payables invoice","securityGroups":[{"OAuth2.0-Partner":[]},{"Bearer-Token-Partner":[]}]},"isWebhook":false,"hideReplay":false,"servers":[{"url":"/_mock/openapi","description":"Mock server","isMockServer":true},{"url":"https://api.yourserver.com"}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Responses","labelTranslationKey":"responses","deepLinkSuffix":"responses"},{"nodeType":"item-content","variant":"responses","responses":[{"code":"200","description":"Payables invoice details","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/PayablesInvoice","exampleIds":["paths/~1payables-invoices~1{external_id}/get/responses/200/content/application~1json/example"]}},"schemaId":"components/schemas/PayablesInvoice","exampleIds":["paths/~1payables-invoices~1{external_id}/get/responses/200/content/application~1json/example"]},{"code":"401","description":"Authentication credentials were missing or invalid.","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices~1{external_id}/get/responses/401/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices~1{external_id}/get/responses/401/content/application~1json/example"]},{"code":"404","description":"Entity not found","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices~1{external_id}/get/responses/404/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices~1{external_id}/get/responses/404/content/application~1json/example"]}],"pointer":"/paths/~1payables-invoices~1{external_id}/get/responses"}],"panels":[{"children":[{"kind":"response","headerTitle":"Response","responseCodes":[{"code":"200","schemaId":"components/schemas/PayablesInvoice","exampleIds":["paths/~1payables-invoices~1{external_id}/get/responses/200/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/PayablesInvoice","exampleIds":["paths/~1payables-invoices~1{external_id}/get/responses/200/content/application~1json/example"]}}},{"code":"401","schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices~1{external_id}/get/responses/401/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices~1{external_id}/get/responses/401/content/application~1json/example"]}}},{"code":"404","schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices~1{external_id}/get/responses/404/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices~1{external_id}/get/responses/404/content/application~1json/example"]}}}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"feedback","pageSlug":"/payables-invoices/getpayablesinvoice"}],"panels":[]}]},"httpPath":"/payables-invoices/{external_id}"}],"content":{"contentType":"group","meta":{"name":"Payables Invoices"},"children":[{"nodeType":"container","children":[{"nodeType":"header","level":2,"label":"Payables Invoices","showPageActions":true},{"nodeType":"markdoc","content":"AP invoices from creditors that BravoTran fetches from the FFS."}],"panels":[{"children":[{"kind":"group-items","title":"Operations","titleTranslationKey":"operations","items":[{"title":"/payables-invoices","summary":"List updated payables invoices","prefix":{"name":"get","color":"get"},"badges":[],"link":"/payables-invoices/listpayablesinvoices","deprecated":false},{"title":"/payables-invoices/{external_id}","summary":"Get a payables invoice","prefix":{"name":"get","color":"get"},"badges":[],"link":"/payables-invoices/getpayablesinvoice","deprecated":false}]}]}]}]}},{"type":"group","label":"Outbound Payables Invoices","link":"/openapi/outbound-payables-invoices","routeSlug":"/openapi/outbound-payables-invoices","items":[{"label":"Receive an approved payables invoice from BravoTran","deprecated":false,"httpVerb":"post","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/openapi/outbound-payables-invoices/postpayablesinvoice","routeSlug":"/openapi/outbound-payables-invoices/postpayablesinvoice","metadata":{"seo":{"title":"Receive an approved payables invoice from BravoTran","description":"This endpoint is hosted by the partner, not BravoTran. Implementation is required."}},"content":{"contentType":"item","itemVariant":"httpItem","meta":{"sourceId":"postPayablesInvoice","name":"Receive an approved payables invoice from BravoTran","isWebhook":false,"pointer":"/paths/~1payables-invoices/post","hasSamples":true},"children":[{"nodeType":"container","children":[{"nodeType":"header","level":2,"label":"Receive an approved payables invoice from BravoTran","isWebhook":false,"showPageActions":true}],"panels":[]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Request","labelTranslationKey":"request","deepLinkSuffix":"request"},{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"This endpoint is hosted by the partner"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", not BravoTran. "},"children":[]},{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Implementation is required."},"children":[]}]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran calls this endpoint when an invoice has been approved and is ready for cost posting."},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Your system must create or record the invoice accordingly, then respond with the "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"external_id"},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"your system assigned to the created invoice and its "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"status"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" ("},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"draft"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" or "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"posted"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"). Do not derive"},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"the identifier from the request — BravoTran does not send one."},"children":[]}]}]},{"$$mdtype":"Node","type":"blockquote","attributes":{},"children":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Tax note:"},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" Tax-related fields ("},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"tax"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" on amounts, "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"tax_code"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"tax_rate"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":") are only present for tax-enabled accounts. For non-tax / US-based accounts these fields will be absent or null. BravoTran determines the tax mode based on the authenticated account."},"children":[]}]}]}]}]},{"nodeType":"security","requirements":[{"schemes":[{"name":"OAuth2.0-Partner","scopes":[],"type":"oauth2","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran → Partner: OAuth 2.0 client credentials flow."},"children":[]}]}]}],"flows":{"clientCredentials":{"tokenUrl":"https://api.yourserver.com/oauth/token","scopes":{}}}}]},{"schemes":[{"name":"Bearer-Token-Partner","scopes":[],"type":"http","scheme":"bearer","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran → Partner: Bearer token in the Authorization header."},"children":[]}]}]}]}]}]},{"nodeType":"item-content","variant":"body","label":"Request Body","labelTranslationKey":"body","required":true,"mediaTypes":["application/json"],"mediaTypeSchemas":{"application/json":{"schemaId":"components/schemas/OutboundPayablesInvoice","exampleIds":["paths/~1payables-invoices/post/requestBody/content/application~1json/example"]}},"schemaId":"components/schemas/OutboundPayablesInvoice","exampleIds":["paths/~1payables-invoices/post/requestBody/content/application~1json/example"],"pointer":"/paths/~1payables-invoices/post/requestBody"}],"panels":[{"children":[{"kind":"code-sample","source":{"kind":"code-sample","operationType":"http","method":"POST","path":"/payables-invoices","servers":[{"url":"/_mock/openapi","description":"Mock server","isMockServer":true},{"url":"https://api.yourserver.com"}],"parameters":{"path":[],"query":[],"querystring":[],"header":[],"cookie":[]},"security":[{"schemes":[{"id":"OAuth2.0-Partner","type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"https://api.yourserver.com/oauth/token","scopes":{}}}}],"scopes":[]},{"schemes":[{"id":"Bearer-Token-Partner","type":"http","scheme":"bearer"}],"scopes":[]}],"requestBody":{"application/json":{"schemaId":"components/schemas/OutboundPayablesInvoice","exampleIds":["paths/~1payables-invoices/post/requestBody/content/application~1json/example"]}},"responseCodes":["200","400","401","409"],"pointer":"/payables-invoices","href":"outbound-payables-invoices/postpayablesinvoice","openApiOperationId":"postPayablesInvoice","summary":"Receive an approved payables invoice from BravoTran","securityGroups":[{"OAuth2.0-Partner":[]},{"Bearer-Token-Partner":[]}]},"isWebhook":false,"hideReplay":false,"servers":[{"url":"/_mock/openapi","description":"Mock server","isMockServer":true},{"url":"https://api.yourserver.com"}],"schemaId":"components/schemas/OutboundPayablesInvoice","exampleIds":["paths/~1payables-invoices/post/requestBody/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeSchemas":{"application/json":{"schemaId":"components/schemas/OutboundPayablesInvoice","exampleIds":["paths/~1payables-invoices/post/requestBody/content/application~1json/example"]}},"examples":[{}]}]}]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Responses","labelTranslationKey":"responses","deepLinkSuffix":"responses"},{"nodeType":"item-content","variant":"responses","responses":[{"code":"200","description":"Invoice accepted","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_12","exampleIds":["paths/~1payables-invoices/post/responses/200/content/application~1json/example"]}},"schemaId":"schema_12","exampleIds":["paths/~1payables-invoices/post/responses/200/content/application~1json/example"]},{"code":"400","description":"Bad request","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices/post/responses/400/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices/post/responses/400/content/application~1json/example"]},{"code":"401","description":"Authentication credentials were missing or invalid.","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices/post/responses/401/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices/post/responses/401/content/application~1json/example"]},{"code":"409","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Duplicate invoice. Returned when an invoice with the same "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"invoice_number"},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"already exists for the creditor in your system."},"children":[]}]}]}],"mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices/post/responses/409/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices/post/responses/409/content/application~1json/example"]}],"pointer":"/paths/~1payables-invoices/post/responses"}],"panels":[{"children":[{"kind":"response","headerTitle":"Response","responseCodes":[{"code":"200","schemaId":"schema_12","exampleIds":["paths/~1payables-invoices/post/responses/200/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_12","exampleIds":["paths/~1payables-invoices/post/responses/200/content/application~1json/example"]}}},{"code":"400","schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices/post/responses/400/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices/post/responses/400/content/application~1json/example"]}}},{"code":"401","schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices/post/responses/401/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices/post/responses/401/content/application~1json/example"]}}},{"code":"409","schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices/post/responses/409/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1payables-invoices/post/responses/409/content/application~1json/example"]}}}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"feedback","pageSlug":"/outbound-payables-invoices/postpayablesinvoice"}],"panels":[]}]},"httpPath":"/payables-invoices"}],"content":{"contentType":"group","meta":{"name":"Outbound Payables Invoices"},"children":[{"nodeType":"container","children":[{"nodeType":"header","level":2,"label":"Outbound Payables Invoices","showPageActions":true},{"nodeType":"markdoc","content":"Approved invoices that BravoTran posts to the partner's system for cost posting."}],"panels":[{"children":[{"kind":"group-items","title":"Operations","titleTranslationKey":"operations","items":[{"title":"/payables-invoices","summary":"Receive an approved payables invoice from BravoTran","prefix":{"name":"post","color":"post"},"badges":[],"link":"/outbound-payables-invoices/postpayablesinvoice","deprecated":false}]}]}]}]}},{"type":"group","label":"Supporting Data","link":"/openapi/supporting-data","routeSlug":"/openapi/supporting-data","items":[{"label":"List staff","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/openapi/supporting-data/liststaff","routeSlug":"/openapi/supporting-data/liststaff","metadata":{"seo":{"title":"List staff","description":"Returns the full list of staff members."}},"content":{"contentType":"item","itemVariant":"httpItem","meta":{"sourceId":"listStaff","name":"List staff","isWebhook":false,"pointer":"/paths/~1staff/get","hasSamples":false},"children":[{"nodeType":"container","children":[{"nodeType":"header","level":2,"label":"List staff","isWebhook":false,"showPageActions":true}],"panels":[]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Request","labelTranslationKey":"request","deepLinkSuffix":"request"},{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Returns the full list of staff members."},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Optional."},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" Provided as an alternative to flat file delivery of staff data."},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Jobs and accruals reference staff (operators) by "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"external_id"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"."},"children":[]}]}]}]},{"nodeType":"security","requirements":[{"schemes":[{"name":"OAuth2.0-Partner","scopes":[],"type":"oauth2","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran → Partner: OAuth 2.0 client credentials flow."},"children":[]}]}]}],"flows":{"clientCredentials":{"tokenUrl":"https://api.yourserver.com/oauth/token","scopes":{}}}}]},{"schemes":[{"name":"Bearer-Token-Partner","scopes":[],"type":"http","scheme":"bearer","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran → Partner: Bearer token in the Authorization header."},"children":[]}]}]}]}]}]}],"panels":[{"children":[{"kind":"code-sample","source":{"kind":"code-sample","operationType":"http","method":"GET","path":"/staff","servers":[{"url":"/_mock/openapi","description":"Mock server","isMockServer":true},{"url":"https://api.yourserver.com"}],"parameters":{"path":[],"query":[],"querystring":[],"header":[],"cookie":[]},"security":[{"schemes":[{"id":"OAuth2.0-Partner","type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"https://api.yourserver.com/oauth/token","scopes":{}}}}],"scopes":[]},{"schemes":[{"id":"Bearer-Token-Partner","type":"http","scheme":"bearer"}],"scopes":[]}],"responseCodes":["200","401"],"pointer":"/staff","href":"supporting-data/liststaff","openApiOperationId":"listStaff","summary":"List staff","securityGroups":[{"OAuth2.0-Partner":[]},{"Bearer-Token-Partner":[]}]},"isWebhook":false,"hideReplay":false,"servers":[{"url":"/_mock/openapi","description":"Mock server","isMockServer":true},{"url":"https://api.yourserver.com"}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Responses","labelTranslationKey":"responses","deepLinkSuffix":"responses"},{"nodeType":"item-content","variant":"responses","responses":[{"code":"200","description":"List of staff members.","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_13","exampleIds":["paths/~1staff/get/responses/200/content/application~1json/example"]}},"schemaId":"schema_13","exampleIds":["paths/~1staff/get/responses/200/content/application~1json/example"]},{"code":"401","description":"Authentication credentials were missing or invalid.","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1staff/get/responses/401/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1staff/get/responses/401/content/application~1json/example"]}],"pointer":"/paths/~1staff/get/responses"}],"panels":[{"children":[{"kind":"response","headerTitle":"Response","responseCodes":[{"code":"200","schemaId":"schema_13","exampleIds":["paths/~1staff/get/responses/200/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_13","exampleIds":["paths/~1staff/get/responses/200/content/application~1json/example"]}}},{"code":"401","schemaId":"components/schemas/Error","exampleIds":["paths/~1staff/get/responses/401/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1staff/get/responses/401/content/application~1json/example"]}}}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"feedback","pageSlug":"/supporting-data/liststaff"}],"panels":[]}]},"httpPath":"/staff"},{"label":"List charge codes","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/openapi/supporting-data/listchargecodes","routeSlug":"/openapi/supporting-data/listchargecodes","metadata":{"seo":{"title":"List charge codes","description":"Returns the full list of charge codes."}},"content":{"contentType":"item","itemVariant":"httpItem","meta":{"sourceId":"listChargeCodes","name":"List charge codes","isWebhook":false,"pointer":"/paths/~1charge-codes/get","hasSamples":false},"children":[{"nodeType":"container","children":[{"nodeType":"header","level":2,"label":"List charge codes","isWebhook":false,"showPageActions":true}],"panels":[]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Request","labelTranslationKey":"request","deepLinkSuffix":"request"},{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Returns the full list of charge codes."},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Optional."},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" Provided as an alternative to flat file delivery of charge code data."},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Accruals and charge lines reference charge codes by "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"external_id"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"."},"children":[]}]}]}]},{"nodeType":"security","requirements":[{"schemes":[{"name":"OAuth2.0-Partner","scopes":[],"type":"oauth2","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran → Partner: OAuth 2.0 client credentials flow."},"children":[]}]}]}],"flows":{"clientCredentials":{"tokenUrl":"https://api.yourserver.com/oauth/token","scopes":{}}}}]},{"schemes":[{"name":"Bearer-Token-Partner","scopes":[],"type":"http","scheme":"bearer","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran → Partner: Bearer token in the Authorization header."},"children":[]}]}]}]}]}]}],"panels":[{"children":[{"kind":"code-sample","source":{"kind":"code-sample","operationType":"http","method":"GET","path":"/charge-codes","servers":[{"url":"/_mock/openapi","description":"Mock server","isMockServer":true},{"url":"https://api.yourserver.com"}],"parameters":{"path":[],"query":[],"querystring":[],"header":[],"cookie":[]},"security":[{"schemes":[{"id":"OAuth2.0-Partner","type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"https://api.yourserver.com/oauth/token","scopes":{}}}}],"scopes":[]},{"schemes":[{"id":"Bearer-Token-Partner","type":"http","scheme":"bearer"}],"scopes":[]}],"responseCodes":["200","401"],"pointer":"/charge-codes","href":"supporting-data/listchargecodes","openApiOperationId":"listChargeCodes","summary":"List charge codes","securityGroups":[{"OAuth2.0-Partner":[]},{"Bearer-Token-Partner":[]}]},"isWebhook":false,"hideReplay":false,"servers":[{"url":"/_mock/openapi","description":"Mock server","isMockServer":true},{"url":"https://api.yourserver.com"}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Responses","labelTranslationKey":"responses","deepLinkSuffix":"responses"},{"nodeType":"item-content","variant":"responses","responses":[{"code":"200","description":"List of charge codes.","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_14","exampleIds":["paths/~1charge-codes/get/responses/200/content/application~1json/example"]}},"schemaId":"schema_14","exampleIds":["paths/~1charge-codes/get/responses/200/content/application~1json/example"]},{"code":"401","description":"Authentication credentials were missing or invalid.","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1charge-codes/get/responses/401/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1charge-codes/get/responses/401/content/application~1json/example"]}],"pointer":"/paths/~1charge-codes/get/responses"}],"panels":[{"children":[{"kind":"response","headerTitle":"Response","responseCodes":[{"code":"200","schemaId":"schema_14","exampleIds":["paths/~1charge-codes/get/responses/200/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_14","exampleIds":["paths/~1charge-codes/get/responses/200/content/application~1json/example"]}}},{"code":"401","schemaId":"components/schemas/Error","exampleIds":["paths/~1charge-codes/get/responses/401/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1charge-codes/get/responses/401/content/application~1json/example"]}}}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"feedback","pageSlug":"/supporting-data/listchargecodes"}],"panels":[]}]},"httpPath":"/charge-codes"},{"label":"List tax codes","deprecated":false,"httpVerb":"get","isAdditionalOperation":false,"isWebhook":false,"type":"link","link":"/openapi/supporting-data/listtaxcodes","routeSlug":"/openapi/supporting-data/listtaxcodes","metadata":{"seo":{"title":"List tax codes","description":"Returns the full list of tax codes."}},"content":{"contentType":"item","itemVariant":"httpItem","meta":{"sourceId":"listTaxCodes","name":"List tax codes","isWebhook":false,"pointer":"/paths/~1tax-codes/get","hasSamples":false},"children":[{"nodeType":"container","children":[{"nodeType":"header","level":2,"label":"List tax codes","isWebhook":false,"showPageActions":true}],"panels":[]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Request","labelTranslationKey":"request","deepLinkSuffix":"request"},{"nodeType":"markdoc","content":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Returns the full list of tax codes."},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"strong","inline":true,"attributes":{"marker":"**"},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Optional."},"children":[]}]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" Provided as an alternative to flat file delivery of tax code data."},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Charge codes, accruals, and charge lines reference tax codes by "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"external_id"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"."},"children":[]}]}]}]},{"nodeType":"security","requirements":[{"schemes":[{"name":"OAuth2.0-Partner","scopes":[],"type":"oauth2","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran → Partner: OAuth 2.0 client credentials flow."},"children":[]}]}]}],"flows":{"clientCredentials":{"tokenUrl":"https://api.yourserver.com/oauth/token","scopes":{}}}}]},{"schemes":[{"name":"Bearer-Token-Partner","scopes":[],"type":"http","scheme":"bearer","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran → Partner: Bearer token in the Authorization header."},"children":[]}]}]}]}]}]}],"panels":[{"children":[{"kind":"code-sample","source":{"kind":"code-sample","operationType":"http","method":"GET","path":"/tax-codes","servers":[{"url":"/_mock/openapi","description":"Mock server","isMockServer":true},{"url":"https://api.yourserver.com"}],"parameters":{"path":[],"query":[],"querystring":[],"header":[],"cookie":[]},"security":[{"schemes":[{"id":"OAuth2.0-Partner","type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"https://api.yourserver.com/oauth/token","scopes":{}}}}],"scopes":[]},{"schemes":[{"id":"Bearer-Token-Partner","type":"http","scheme":"bearer"}],"scopes":[]}],"responseCodes":["200","401"],"pointer":"/tax-codes","href":"supporting-data/listtaxcodes","openApiOperationId":"listTaxCodes","summary":"List tax codes","securityGroups":[{"OAuth2.0-Partner":[]},{"Bearer-Token-Partner":[]}]},"isWebhook":false,"hideReplay":false,"servers":[{"url":"/_mock/openapi","description":"Mock server","isMockServer":true},{"url":"https://api.yourserver.com"}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"header","level":4,"label":"Responses","labelTranslationKey":"responses","deepLinkSuffix":"responses"},{"nodeType":"item-content","variant":"responses","responses":[{"code":"200","description":"List of tax codes.","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_15","exampleIds":["paths/~1tax-codes/get/responses/200/content/application~1json/example"]}},"schemaId":"schema_15","exampleIds":["paths/~1tax-codes/get/responses/200/content/application~1json/example"]},{"code":"401","description":"Authentication credentials were missing or invalid.","mediaType":"application/json","mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1tax-codes/get/responses/401/content/application~1json/example"]}},"schemaId":"components/schemas/Error","exampleIds":["paths/~1tax-codes/get/responses/401/content/application~1json/example"]}],"pointer":"/paths/~1tax-codes/get/responses"}],"panels":[{"children":[{"kind":"response","headerTitle":"Response","responseCodes":[{"code":"200","schemaId":"schema_15","exampleIds":["paths/~1tax-codes/get/responses/200/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"schema_15","exampleIds":["paths/~1tax-codes/get/responses/200/content/application~1json/example"]}}},{"code":"401","schemaId":"components/schemas/Error","exampleIds":["paths/~1tax-codes/get/responses/401/content/application~1json/example"],"mediaTypes":["application/json"],"mediaTypeContent":{"application/json":{"schemaId":"components/schemas/Error","exampleIds":["paths/~1tax-codes/get/responses/401/content/application~1json/example"]}}}],"examples":[]}]}]},{"nodeType":"container","children":[{"nodeType":"feedback","pageSlug":"/supporting-data/listtaxcodes"}],"panels":[]}]},"httpPath":"/tax-codes"}],"content":{"contentType":"group","meta":{"name":"Supporting Data"},"children":[{"nodeType":"container","children":[{"nodeType":"header","level":2,"label":"Supporting Data","showPageActions":true},{"nodeType":"markdoc","content":"Staff, charge codes, and tax codes that BravoTran fetches from the FFS as an alternative to flat file delivery."}],"panels":[{"children":[{"kind":"group-items","title":"Operations","titleTranslationKey":"operations","items":[{"title":"/staff","summary":"List staff","prefix":{"name":"get","color":"get"},"badges":[],"link":"/supporting-data/liststaff","deprecated":false},{"title":"/charge-codes","summary":"List charge codes","prefix":{"name":"get","color":"get"},"badges":[],"link":"/supporting-data/listchargecodes","deprecated":false},{"title":"/tax-codes","summary":"List tax codes","prefix":{"name":"get","color":"get"},"badges":[],"link":"/supporting-data/listtaxcodes","deprecated":false}]}]}]}]}}],"store":{"schemaStore":{"components/schemas/EventNotification":{"id":"components/schemas/EventNotification","kind":"json-schema","title":"EventNotification","data":{"type":"object","additionalProperties":false,"required":["entity_type","external_id","updated_at"],"properties":{"entity_type":{"type":"string","enum":["org","job","payables-invoice"],"description":"The entity type that was affected."},"external_id":{"type":"string","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"The external_id of the affected entity."},"children":[]}]}]}]},"updated_at":{"type":"string","format":"date-time","description":"ISO 8601 timestamp of the change."}}}},"components/schemas/EventAccepted":{"id":"components/schemas/EventAccepted","kind":"json-schema","title":"EventAccepted","data":{"type":"object","required":["int_req_id"],"properties":{"int_req_id":{"type":"integer","description":"BravoTran request record ID for this event notification."}}}},"components/schemas/EventError":{"id":"components/schemas/EventError","kind":"json-schema","title":"EventError","data":{"type":"object","required":["int_req_id","error"],"properties":{"int_req_id":{"type":"integer","description":"BravoTran request record ID for this event notification."},"error":{"type":"object","required":["code","message","details"],"properties":{"code":{"type":"string","enum":["validation_error","invalid_json"]},"message":{"type":"string"},"details":{"type":"array","items":{"$ref":"#/components/schemas/EventErrorDetail"}}}}}}},"components/schemas/EventErrorDetail":{"id":"components/schemas/EventErrorDetail","kind":"json-schema","title":"EventErrorDetail","data":{"type":"object","required":["field","message"],"properties":{"field":{"type":["string","null"],"description":"Field that failed validation, or null for request-level errors such as malformed JSON."},"message":{"type":"string"}}}},"components/schemas/UnauthorizedError":{"id":"components/schemas/UnauthorizedError","kind":"json-schema","title":"UnauthorizedError","data":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["unauthorized"]},"message":{"type":"string"}}}}}},"components/schemas/EntityRef":{"id":"components/schemas/EntityRef","kind":"json-schema","title":"EntityRef","data":{"type":"object","required":["external_id"],"properties":{"external_id":{"type":"string","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"The external_id of the referenced entity."},"children":[]}]}]}]}}}},"components/schemas/Amount":{"id":"components/schemas/Amount","kind":"json-schema","title":"Amount","data":{"type":"object","required":["currency","pre_tax","total"],"properties":{"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","examples":["AUD","USD"]},"pre_tax":{"type":"number","description":"Amount before tax."},"tax":{"type":["number","null"],"description":"Tax amount. Optional on outbound invoice-level and charge line amounts."},"total":{"type":"number","description":"Total amount including tax."}}}},"components/schemas/AmountWithTax":{"id":"components/schemas/AmountWithTax","kind":"json-schema","title":"AmountWithTax","data":{"type":"object","required":["currency","pre_tax","tax","total"],"properties":{"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","examples":["AUD","USD"]},"pre_tax":{"type":"number","description":"Amount before tax."},"tax":{"type":"number","description":"Tax amount."},"total":{"type":"number","description":"Total amount including tax."}}}},"components/schemas/Contact":{"id":"components/schemas/Contact","kind":"json-schema","title":"Contact","data":{"type":"object","required":["name","email_address"],"properties":{"name":{"type":"string","description":"Contact person's name."},"email_address":{"type":"string","format":"email","description":"Contact person's email address."}}}},"components/schemas/Org":{"id":"components/schemas/Org","kind":"json-schema","title":"Org","data":{"type":"object","required":["external_id","updated_at","name","code","is_active","is_creditor","is_debtor","country"],"properties":{"external_id":{"type":"string","description":"Unique, immutable identifier for this org."},"updated_at":{"type":"string","format":"date-time","description":"ISO 8601 timestamp of when this org was last updated."},"name":{"type":"string","description":"Full legal name of the org."},"code":{"type":"string","description":"Short code used to identify this org in the FFS UI."},"is_active":{"type":"boolean","description":"Whether this org is currently active."},"is_creditor":{"type":"boolean","description":"Whether this org can submit payables invoices."},"is_debtor":{"type":"boolean","description":"Whether this org will receive receivables invoices."},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 country code."},"days_to_pay":{"type":["integer","null"],"description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Payment scheduling parameter. For "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"n_days_after_invoice_date"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", the number of days"},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"after the invoice date that payment is due. For "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"day_n_month_after_invoice_date"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":","},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"the day of the month (in the month after the invoice date) that payment is due."},"children":[]},{"$$mdtype":"Node","type":"softbreak","inline":true,"attributes":{},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Not used by the other rules."},"children":[]}]}]}]},"payments_scheduling_rule":{"type":["string","null"],"enum":["n_days_after_invoice_date","eom_following_receipt","day_n_month_after_invoice_date","always_ignore",null],"description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Rule governing when payments are scheduled when this org is a creditor:"},"children":[]}]}]},{"$$mdtype":"Node","type":"list","attributes":{"ordered":false,"marker":"-"},"children":[{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"n_days_after_invoice_date"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — payment is due "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"days_to_pay"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" days after the invoice date (BravoTran may snap the date to the account's configured payment day of week)"},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"day_n_month_after_invoice_date"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — payment is due on day "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"days_to_pay"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" of the month after the invoice date"},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"eom_following_receipt"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — payment is due at the end of the month following the invoice date (despite the name, this is computed from the invoice date, not the receipt date)"},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"always_ignore"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — payments for this creditor are always marked ignored and never scheduled"},"children":[]}]}]}]}]},"address_line_1":{"type":["string","null"]},"city":{"type":["string","null"]},"state":{"type":["string","null"]},"postal_code":{"type":["string","null"]},"contacts":{"type":"array","items":{"$ref":"#/components/schemas/Contact"},"description":"Contact persons associated with this org. Helps BravoTran identify the creditor."}}}},"components/schemas/StaffMember":{"id":"components/schemas/StaffMember","kind":"json-schema","title":"StaffMember","data":{"type":"object","required":["external_id","updated_at","name","email_address","is_active"],"properties":{"external_id":{"type":"string","description":"Unique, immutable identifier for this staff member."},"updated_at":{"type":"string","format":"date-time","description":"ISO 8601 timestamp of when this staff member was last updated."},"name":{"type":"string","description":"Staff member's full name."},"email_address":{"type":"string","format":"email","description":"Staff member's email address."},"is_active":{"type":"boolean","description":"Whether this staff member is currently active."}}}},"components/schemas/ChargeCode":{"id":"components/schemas/ChargeCode","kind":"json-schema","title":"ChargeCode","data":{"type":"object","required":["external_id","updated_at","code","description","charge_type","tax_code","is_active"],"properties":{"external_id":{"type":"string","description":"Unique, immutable identifier for this charge code."},"updated_at":{"type":"string","format":"date-time","description":"ISO 8601 timestamp of when this charge code was last updated."},"code":{"type":"string","description":"Short code the user might know for this charge code."},"description":{"type":"string","description":"Human-readable description of the charge code."},"charge_type":{"type":"string","enum":["freight","origin","destination","other"],"description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Classification of the charge:"},"children":[]}]}]},{"$$mdtype":"Node","type":"list","attributes":{"ordered":false,"marker":"-"},"children":[{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"freight"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — freight / carriage charges"},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"origin"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — origin-side charges"},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"destination"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — destination-side charges"},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"other"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — anything else"},"children":[]}]}]}]}]},"tax_code":{"oneOf":[{"$ref":"#/components/schemas/EntityRef"},{"type":"null"}],"description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Reference to the default tax code for this charge code. Must match an "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"external_id"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" from the tax codes data. Required for GST/VAT accounts; may be null for non-tax / US-based accounts."},"children":[]}]}]}]},"is_active":{"type":"boolean","description":"Whether this charge code is currently active."}}}},"components/schemas/TaxCode":{"id":"components/schemas/TaxCode","kind":"json-schema","title":"TaxCode","data":{"type":"object","required":["external_id","updated_at","code","description","tax_rate","is_active"],"properties":{"external_id":{"type":"string","description":"Unique, immutable identifier for this tax code."},"updated_at":{"type":"string","format":"date-time","description":"ISO 8601 timestamp of when this tax code was last updated."},"code":{"type":"string","description":"Short code the user might know for this tax code."},"description":{"type":"string","description":"Human-readable description of the tax code."},"tax_rate":{"type":"number","minimum":0,"maximum":100,"description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Tax rate percentage between 0.0 and 100.0 (e.g., "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"10.0"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" for 10% GST)."},"children":[]}]}]}]},"is_active":{"type":"boolean","description":"Whether this tax code is currently active."}}}},"components/schemas/Accrual":{"id":"components/schemas/Accrual","kind":"json-schema","title":"Accrual","data":{"type":"object","required":["external_id","operator","creditor","charge_code","tax_code","local_amount","overseas_amount","cost_posted"],"properties":{"external_id":{"type":"string","description":"Unique identifier for this accrual."},"operator":{"$ref":"#/components/schemas/EntityRef","description":"Reference to the staff member (operator) for this accrual."},"creditor":{"$ref":"#/components/schemas/EntityRef","description":"Reference to the creditor org (the vendor this accrual is payable to)."},"charge_code":{"$ref":"#/components/schemas/EntityRef","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Reference to the charge code for this accrual. Must match an "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"external_id"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" from the charge codes data."},"children":[]}]}]}]},"tax_code":{"oneOf":[{"$ref":"#/components/schemas/EntityRef"},{"type":"null"}],"description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Reference to the tax code applied to this accrual. Must match an "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"external_id"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" from the tax codes data. Required for tax-enabled accounts; may be null for non-tax / US-based accounts."},"children":[]}]}]}]},"description":{"type":["string","null"],"description":"Human-readable description of the accrual."},"local_amount":{"$ref":"#/components/schemas/AmountWithTax","description":"Amount in the local (account) currency."},"overseas_amount":{"$ref":"#/components/schemas/AmountWithTax","description":"Amount in the overseas (vendor's) currency."},"cost_posted":{"type":"boolean","description":"Whether the cost has been posted."},"cost_invoice_number":{"type":["string","null"],"description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Invoice number for the cost. Required if "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"cost_posted"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" is true."},"children":[]}]}]}]},"cost_invoice_date":{"type":["string","null"],"format":"date","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"ISO 8601 date of the cost invoice. Required if "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"cost_posted"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" is true."},"children":[]}]}]}]}}}},"components/schemas/WayBill":{"id":"components/schemas/WayBill","kind":"json-schema","title":"WayBill","data":{"type":"object","required":["type","number"],"properties":{"type":{"type":"string","enum":["mwb","hwb","mawb","hawb"],"description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Type of waybill:"},"children":[]}]}]},{"$$mdtype":"Node","type":"list","attributes":{"ordered":false,"marker":"-"},"children":[{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"mwb"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — Master Bill of Lading (ocean)"},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"hwb"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — House Bill of Lading (ocean)"},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"mawb"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — Master Air Waybill (air)"},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"hawb"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — House Air Waybill (air)"},"children":[]}]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Ocean entries ("},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"mwb"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"hwb"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":") carry bill of lading numbers; air entries ("},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"mawb"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"hawb"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":") carry air waybill numbers — the "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"way_bills"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" field holds the job's primary transport documents in either mode."},"children":[]}]}]}]},"number":{"type":"string","description":"The waybill number."}}}},"components/schemas/AdditionalReference":{"id":"components/schemas/AdditionalReference","kind":"json-schema","title":"AdditionalReference","data":{"type":"object","required":["label","value"],"properties":{"label":{"type":"string","description":"Label for this reference (e.g., \"Supplier Cost Ref\")."},"value":{"type":"string","description":"Value of this reference."}}}},"components/schemas/Job":{"id":"components/schemas/Job","kind":"json-schema","title":"Job","data":{"type":"object","required":["external_id","updated_at","job_number","job_type","status","operator","accruals"],"properties":{"external_id":{"type":"string","description":"Unique, immutable identifier for this job."},"updated_at":{"type":"string","format":"date-time","description":"ISO 8601 timestamp of when this job was last updated.\nMust update whenever any nested data changes (accrual added/edited, shipment linked, etc.).\n"},"job_number":{"type":"string","description":"Human-friendly identifier for the job."},"job_type":{"type":"string","enum":["consol","shipment"],"description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Type of job:"},"children":[]}]}]},{"$$mdtype":"Node","type":"list","attributes":{"ordered":false,"marker":"-"},"children":[{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"consol"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — Consolidation of child jobs (master)"},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"shipment"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — Stand-alone job or child of a consol (house)"},"children":[]}]}]}]}]},"status":{"type":"string","description":"Current status of the job in the FFS."},"parent_jobs":{"type":"array","items":{"$ref":"#/components/schemas/EntityRef"},"description":"References to parent jobs. Currently contains 0 or 1 parent job, but is modeled as an array to support multiple parent jobs in the future."},"child_jobs":{"type":"array","items":{"$ref":"#/components/schemas/EntityRef"},"description":"References to child jobs. Typically present on consols."},"operator":{"$ref":"#/components/schemas/EntityRef","description":"Reference to the staff member responsible for this job. BravoTran notifies this operator about inaccurate or missing accruals so they can fix them."},"accruals":{"type":"array","items":{"$ref":"#/components/schemas/Accrual"},"description":"Expected charges on this job. Send even if the job has no accruals (empty array)."},"container_numbers":{"type":"array","items":{"type":"string"},"description":"Container numbers associated with this job."},"way_bills":{"type":"array","items":{"$ref":"#/components/schemas/WayBill"},"description":"Waybills associated with this job."},"additional_references":{"type":"array","items":{"$ref":"#/components/schemas/AdditionalReference"},"description":"Any additional reference data for this job."}}}},"components/schemas/ChargeLine":{"id":"components/schemas/ChargeLine","kind":"json-schema","title":"ChargeLine","data":{"type":"object","required":["job","charge_code","description","overseas_amount"],"properties":{"job":{"$ref":"#/components/schemas/EntityRef","description":"Reference to the job this charge line applies to."},"accrual":{"oneOf":[{"$ref":"#/components/schemas/EntityRef"},{"type":"null"}],"description":"Reference to the matching accrual from the job data, if applicable."},"charge_code":{"$ref":"#/components/schemas/EntityRef","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Reference to the charge code for this line. Must match an "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"external_id"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" from the charge codes data."},"children":[]}]}]}]},"description":{"type":"string","description":"Human-readable description of the charge."},"overseas_amount":{"$ref":"#/components/schemas/AmountWithTax","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Amount in the overseas (invoice) currency — the vendor's currency."},"children":[]}]}]}]}}}},"components/schemas/PayablesInvoice":{"id":"components/schemas/PayablesInvoice","kind":"json-schema","title":"PayablesInvoice","data":{"type":"object","required":["external_id","updated_at","creditor","invoice_number","invoice_date","status","overseas_amount","charge_lines"],"properties":{"external_id":{"type":"string","description":"Unique, immutable identifier for this invoice."},"updated_at":{"type":"string","format":"date-time","description":"ISO 8601 timestamp of when this invoice was last updated."},"creditor":{"$ref":"#/components/schemas/EntityRef","description":"Reference to the creditor org that issued this invoice."},"invoice_number":{"type":"string","description":"Invoice number. Must be unique scoped to the creditor."},"invoice_date":{"type":"string","format":"date","description":"ISO 8601 date of the invoice."},"status":{"type":"string","enum":["draft","posted"],"description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Current status of the invoice in the FFS:"},"children":[]}]}]},{"$$mdtype":"Node","type":"list","attributes":{"ordered":false,"marker":"-"},"children":[{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"draft"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — entered but not yet posted to the ledger"},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"posted"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — posted to the ledger"},"children":[]}]}]}]}]},"overseas_amount":{"$ref":"#/components/schemas/AmountWithTax","description":"Total invoice amount in the overseas (invoice) currency."},"charge_lines":{"type":"array","items":{"$ref":"#/components/schemas/ChargeLine"},"minItems":1,"description":"Line items on the invoice."}}}},"components/schemas/OutboundChargeLine":{"id":"components/schemas/OutboundChargeLine","kind":"json-schema","title":"OutboundChargeLine","data":{"type":"object","required":["job","accrual","charge_code","description","overseas_amount"],"properties":{"job":{"$ref":"#/components/schemas/EntityRef","description":"Reference to the job this charge line applies to."},"accrual":{"oneOf":[{"$ref":"#/components/schemas/EntityRef"},{"type":"null"}],"description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Reference to the matching accrual. The "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"external_id"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" matches an accrual returned by "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET /jobs/{external_id}"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"."},"children":[]}]}]},{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Null when the charge line has no matching accrual. A null accrual represents a \"scratch\" charge line that your system should create on the job. Scratch charge lines are enabled on a per-integration basis, so BravoTran may never send them to your integration; when not enabled, "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"accrual"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" always references an existing accrual."},"children":[]}]}]}]},"charge_code":{"$ref":"#/components/schemas/EntityRef","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Reference to the charge code for this line. Must match an "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"external_id"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" from the charge codes data."},"children":[]}]}]}]},"description":{"type":"string","description":"Human-readable description of the charge."},"overseas_amount":{"$ref":"#/components/schemas/Amount","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Amount in the overseas (invoice) currency — the vendor's currency."},"children":[]}]}]}]},"tax_code":{"oneOf":[{"$ref":"#/components/schemas/EntityRef"},{"type":"null"}],"description":"Tax code applied to this charge line. Only present for tax-enabled accounts."},"tax_rate":{"type":["number","null"],"description":"Tax rate percentage applied to this charge line. Only present for tax-enabled accounts."}}}},"components/schemas/OutboundPayablesInvoiceFile":{"id":"components/schemas/OutboundPayablesInvoiceFile","kind":"json-schema","title":"OutboundPayablesInvoiceFile","data":{"type":"object","required":["doc_type","file_type","file_data"],"properties":{"doc_type":{"type":"string","enum":["payables_invoice","other"],"description":"The document category for this attached file."},"file_type":{"type":"string","enum":["application/pdf","application/xml"],"description":"MIME type of the attached file."},"file_data":{"type":"string","format":"byte","description":"Base64-encoded file contents."}}}},"components/schemas/OutboundPayablesInvoice":{"id":"components/schemas/OutboundPayablesInvoice","kind":"json-schema","title":"OutboundPayablesInvoice","data":{"type":"object","required":["creditor","invoice_number","invoice_date","is_credit_note","overseas_amount","due_date","files","charge_lines"],"properties":{"creditor":{"$ref":"#/components/schemas/EntityRef","description":"Reference to the creditor org for this invoice."},"invoice_number":{"type":"string","description":"Invoice number. Unique scoped to the creditor."},"invoice_date":{"type":"string","format":"date","description":"ISO 8601 date of the invoice."},"is_credit_note":{"type":"boolean","description":"Whether this invoice is a credit note. Amounts are always positive regardless."},"overseas_amount":{"$ref":"#/components/schemas/Amount","description":"Total invoice amount in the overseas (invoice) currency."},"due_date":{"type":["string","null"],"format":"date","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Payment due date. Null when "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"is_credit_note"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" is true."},"children":[]}]}]}]},"files":{"type":"array","items":{"$ref":"#/components/schemas/OutboundPayablesInvoiceFile"},"minItems":1,"description":"Files attached to the approved invoice."},"charge_lines":{"type":"array","items":{"$ref":"#/components/schemas/OutboundChargeLine"},"minItems":1,"description":"Line items on the invoice."}}}},"components/schemas/Error":{"id":"components/schemas/Error","kind":"json-schema","title":"Error","data":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Machine-readable error code in lower_snake_case (e.g., "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"not_found"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"bad_request"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":", "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"unauthorized"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":")."},"children":[]}]}]}]},"message":{"type":"string","description":"Human-readable explanation of the error."},"details":{"type":"array","items":{"$ref":"#/components/schemas/ErrorDetail"},"description":"Optional field-level validation errors."}}}}}},"components/schemas/ErrorDetail":{"id":"components/schemas/ErrorDetail","kind":"json-schema","title":"ErrorDetail","data":{"type":"object","required":["field","message"],"properties":{"field":{"type":["string","null"],"description":"Field that failed validation, or null for request-level errors."},"message":{"type":"string"}}}},"schema_8":{"kind":"json-schema","data":{"type":"string","format":"date-time","examples":["2025-02-17T20:32:39Z"]},"id":"schema_8"},"schema_9":{"kind":"json-schema","data":{"type":"string","format":"date-time","examples":["2025-02-18T20:32:39Z"]},"id":"schema_9"},"schema_10":{"kind":"json-schema","data":{"type":"array","items":{"$ref":"#/components/schemas/EntityRef"}},"id":"schema_10"},"schema_11":{"kind":"json-schema","data":{"type":"string"},"id":"schema_11"},"schema_12":{"kind":"json-schema","data":{"type":"object","required":["external_id","status"],"properties":{"external_id":{"type":"string","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"The unique, immutable identifier your system generated for the created invoice. BravoTran stores this identifier and uses it to fetch the invoice via "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"GET /payables-invoices/{external_id}"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"."},"children":[]}]}]}]},"status":{"type":"string","enum":["draft","posted"],"description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Status of the created invoice in your system:"},"children":[]}]}]},{"$$mdtype":"Node","type":"list","attributes":{"ordered":false,"marker":"-"},"children":[{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"draft"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — created but not yet posted to the ledger"},"children":[]}]}]},{"$$mdtype":"Node","type":"item","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"posted"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" — posted to the ledger"},"children":[]}]}]}]}]}}},"id":"schema_12"},"schema_13":{"kind":"json-schema","data":{"type":"array","items":{"$ref":"#/components/schemas/StaffMember"}},"id":"schema_13"},"schema_14":{"kind":"json-schema","data":{"type":"array","items":{"$ref":"#/components/schemas/ChargeCode"}},"id":"schema_14"},"schema_15":{"kind":"json-schema","data":{"type":"array","items":{"$ref":"#/components/schemas/TaxCode"}},"id":"schema_15"}},"exampleStore":{"paths/~1events/post/requestBody/content/application~1json/example":{"value":{"entity_type":"job","external_id":"db3b1f33-2335-4fc5-a874-f8284a95d539","updated_at":"2025-02-17T20:32:39Z"},"id":"paths/~1events/post/requestBody/content/application~1json/example"},"paths/~1events/post/responses/200/content/application~1json/example":{"value":{"int_req_id":12345},"id":"paths/~1events/post/responses/200/content/application~1json/example"},"paths/~1events/post/responses/400/content/application~1json/examples/validation_error":{"value":{"int_req_id":12345,"error":{"code":"validation_error","message":"Request validation failed","details":[{"field":"external_id","message":"is required"}]}},"key":"validation_error","summary":"Missing required field","id":"paths/~1events/post/responses/400/content/application~1json/examples/validation_error"},"paths/~1events/post/responses/400/content/application~1json/examples/invalid_json":{"value":{"int_req_id":12345,"error":{"code":"invalid_json","message":"Request body must be valid JSON","details":[{"field":null,"message":"unexpected token at '{ invalid json'"}]}},"key":"invalid_json","summary":"Malformed JSON","id":"paths/~1events/post/responses/400/content/application~1json/examples/invalid_json"},"paths/~1events/post/responses/401/content/application~1json/example":{"value":{"error":{"code":"unauthorized","message":"Token was incorrect"}},"id":"paths/~1events/post/responses/401/content/application~1json/example"},"paths/~1orgs/get/responses/200/content/application~1json/example":{"value":[{"external_id":"feaa09da-9551-47f8-b30d-6e303b6ad6d5"},{"external_id":"9b2d1ac4-71f2-4f52-9b62-8e3e6c4a1d33"}],"id":"paths/~1orgs/get/responses/200/content/application~1json/example"},"paths/~1orgs/get/responses/400/content/application~1json/example":{"value":{"error":{"code":"bad_request","message":"updated_before requires updated_after to be provided."}},"id":"paths/~1orgs/get/responses/400/content/application~1json/example"},"paths/~1orgs/get/responses/401/content/application~1json/example":{"value":{"error":{"code":"unauthorized","message":"Missing or invalid credentials."}},"id":"paths/~1orgs/get/responses/401/content/application~1json/example"},"paths/~1orgs~1{external_id}/get/responses/200/content/application~1json/example":{"value":{"external_id":"feaa09da-9551-47f8-b30d-6e303b6ad6d5","updated_at":"2024-12-24T19:04:29Z","name":"Mediterranean Shipping Company S.A.","code":"MSC","is_active":true,"is_creditor":true,"is_debtor":false,"country":"CH","days_to_pay":30,"payments_scheduling_rule":"n_days_after_invoice_date","address_line_1":"Chemin Rieu 12","city":"Geneva","state":null,"postal_code":"1202","contacts":[{"name":"Marco Rossi","email_address":"mrossi@msc.com"},{"name":"Elena Bianchi","email_address":"ebianchi@msc.com"}]},"id":"paths/~1orgs~1{external_id}/get/responses/200/content/application~1json/example"},"paths/~1orgs~1{external_id}/get/responses/401/content/application~1json/example":{"value":{"error":{"code":"unauthorized","message":"Missing or invalid credentials."}},"id":"paths/~1orgs~1{external_id}/get/responses/401/content/application~1json/example"},"paths/~1orgs~1{external_id}/get/responses/404/content/application~1json/example":{"value":{"error":{"code":"not_found","message":"Entity with the given external_id does not exist."}},"id":"paths/~1orgs~1{external_id}/get/responses/404/content/application~1json/example"},"paths/~1jobs/get/responses/200/content/application~1json/example":{"value":[{"external_id":"db3b1f33-2335-4fc5-a874-f8284a95d539"},{"external_id":"5f13f433-5228-4ce0-bb23-765285682111"}],"id":"paths/~1jobs/get/responses/200/content/application~1json/example"},"paths/~1jobs/get/responses/400/content/application~1json/example":{"value":{"error":{"code":"bad_request","message":"updated_before requires updated_after to be provided."}},"id":"paths/~1jobs/get/responses/400/content/application~1json/example"},"paths/~1jobs/get/responses/401/content/application~1json/example":{"value":{"error":{"code":"unauthorized","message":"Missing or invalid credentials."}},"id":"paths/~1jobs/get/responses/401/content/application~1json/example"},"paths/~1jobs~1{external_id}/get/responses/200/content/application~1json/examples/shipment":{"value":{"external_id":"db3b1f33-2335-4fc5-a874-f8284a95d539","updated_at":"2025-02-17T20:32:39Z","job_number":"S631234","job_type":"shipment","status":"open","parent_jobs":[{"external_id":"5f13f433-5228-4ce0-bb23-765285682111"}],"child_jobs":[],"operator":{"external_id":"a7ed2209-b471-4c37-90f5-bfea1e7bb464"},"accruals":[{"external_id":"62292d0a-3334-4ecb-9267-5101e1b06c70","operator":{"external_id":"a7ed2209-b471-4c37-90f5-bfea1e7bb464"},"creditor":{"external_id":"feaa09da-9551-47f8-b30d-6e303b6ad6d5"},"charge_code":{"external_id":"eda74483-b7d9-4168-9a20-82155e59395f"},"tax_code":{"external_id":"940dca09-88d4-403e-be23-79a23d37fffd"},"description":"International Freight","local_amount":{"currency":"AUD","pre_tax":1570,"tax":0,"total":1570},"overseas_amount":{"currency":"USD","pre_tax":1000,"tax":0,"total":1000},"cost_posted":true,"cost_invoice_number":"SYD923891","cost_invoice_date":"2025-02-15"},{"external_id":"438e506b-6114-4e2e-bb06-a3df6c18811a","operator":{"external_id":"a7ed2209-b471-4c37-90f5-bfea1e7bb464"},"creditor":{"external_id":"feaa09da-9551-47f8-b30d-6e303b6ad6d5"},"charge_code":{"external_id":"ff815915-de16-4c63-8248-4757aea906e9"},"tax_code":{"external_id":"3c01e205-aecd-4d34-ac19-fe4dea96a195"},"description":"Customs Clearance Fee","local_amount":{"currency":"AUD","pre_tax":100,"tax":10,"total":110},"overseas_amount":{"currency":"AUD","pre_tax":100,"tax":10,"total":110},"cost_posted":false,"cost_invoice_number":null,"cost_invoice_date":null}],"container_numbers":["MEDU5338992","SEGU2901100"],"way_bills":[{"type":"mwb","number":"MEDUUJ111111"}],"additional_references":[{"label":"Supplier Cost Ref","value":"ABC1234"}]},"key":"shipment","summary":"A shipment with accruals","id":"paths/~1jobs~1{external_id}/get/responses/200/content/application~1json/examples/shipment"},"paths/~1jobs~1{external_id}/get/responses/200/content/application~1json/examples/consol":{"value":{"external_id":"5f13f433-5228-4ce0-bb23-765285682111","updated_at":"2025-02-17T20:35:22Z","job_number":"C585234","job_type":"consol","status":"closed","parent_jobs":[],"child_jobs":[{"external_id":"db3b1f33-2335-4fc5-a874-f8284a95d539"}],"operator":{"external_id":"a7ed2209-b471-4c37-90f5-bfea1e7bb464"},"accruals":[],"container_numbers":[],"way_bills":[],"additional_references":[]},"key":"consol","summary":"A consol with a child shipment","id":"paths/~1jobs~1{external_id}/get/responses/200/content/application~1json/examples/consol"},"paths/~1jobs~1{external_id}/get/responses/401/content/application~1json/example":{"value":{"error":{"code":"unauthorized","message":"Missing or invalid credentials."}},"id":"paths/~1jobs~1{external_id}/get/responses/401/content/application~1json/example"},"paths/~1jobs~1{external_id}/get/responses/404/content/application~1json/example":{"value":{"error":{"code":"not_found","message":"Entity with the given external_id does not exist."}},"id":"paths/~1jobs~1{external_id}/get/responses/404/content/application~1json/example"},"paths/~1payables-invoices/get/responses/200/content/application~1json/example":{"value":[{"external_id":"b6d1fdec-81ff-43b9-b422-ae27513047ce"},{"external_id":"4a1f2ec9-2c9e-4f16-9f70-d7e5d3c1a982"}],"id":"paths/~1payables-invoices/get/responses/200/content/application~1json/example"},"paths/~1payables-invoices/get/responses/400/content/application~1json/example":{"value":{"error":{"code":"bad_request","message":"updated_before requires updated_after to be provided."}},"id":"paths/~1payables-invoices/get/responses/400/content/application~1json/example"},"paths/~1payables-invoices/get/responses/401/content/application~1json/example":{"value":{"error":{"code":"unauthorized","message":"Missing or invalid credentials."}},"id":"paths/~1payables-invoices/get/responses/401/content/application~1json/example"},"paths/~1payables-invoices~1{external_id}/get/responses/200/content/application~1json/example":{"value":{"external_id":"b6d1fdec-81ff-43b9-b422-ae27513047ce","updated_at":"2025-02-15T03:18:13Z","creditor":{"external_id":"feaa09da-9551-47f8-b30d-6e303b6ad6d5"},"invoice_number":"SYD923891","invoice_date":"2025-02-15","status":"posted","overseas_amount":{"currency":"AUD","pre_tax":1770,"tax":20,"total":1790},"charge_lines":[{"job":{"external_id":"db3b1f33-2335-4fc5-a874-f8284a95d539"},"accrual":{"external_id":"62292d0a-3334-4ecb-9267-5101e1b06c70"},"charge_code":{"external_id":"eda74483-b7d9-4168-9a20-82155e59395f"},"description":"International Freight","overseas_amount":{"currency":"AUD","pre_tax":1570,"tax":0,"total":1570}},{"job":{"external_id":"db3b1f33-2335-4fc5-a874-f8284a95d539"},"accrual":{"external_id":"438e506b-6114-4e2e-bb06-a3df6c18811a"},"charge_code":{"external_id":"ff815915-de16-4c63-8248-4757aea906e9"},"description":"Customs Clearance Fee","overseas_amount":{"currency":"AUD","pre_tax":200,"tax":20,"total":220}}]},"id":"paths/~1payables-invoices~1{external_id}/get/responses/200/content/application~1json/example"},"paths/~1payables-invoices~1{external_id}/get/responses/401/content/application~1json/example":{"value":{"error":{"code":"unauthorized","message":"Missing or invalid credentials."}},"id":"paths/~1payables-invoices~1{external_id}/get/responses/401/content/application~1json/example"},"paths/~1payables-invoices~1{external_id}/get/responses/404/content/application~1json/example":{"value":{"error":{"code":"not_found","message":"Entity with the given external_id does not exist."}},"id":"paths/~1payables-invoices~1{external_id}/get/responses/404/content/application~1json/example"},"paths/~1payables-invoices/post/requestBody/content/application~1json/example":{"value":{"creditor":{"external_id":"feaa09da-9551-47f8-b30d-6e303b6ad6d5"},"invoice_number":"BT-2025-0042","invoice_date":"2025-03-15","is_credit_note":false,"overseas_amount":{"currency":"AUD","pre_tax":1200,"tax":20,"total":1220},"due_date":"2025-04-14","files":[{"doc_type":"payables_invoice","file_type":"application/pdf","file_data":"JVBERi0xLjQKJcfs..."}],"charge_lines":[{"job":{"external_id":"db3b1f33-2335-4fc5-a874-f8284a95d539"},"accrual":null,"charge_code":{"external_id":"eda74483-b7d9-4168-9a20-82155e59395f"},"description":"International Freight","overseas_amount":{"currency":"AUD","pre_tax":1000,"tax":0,"total":1000},"tax_code":{"external_id":"940dca09-88d4-403e-be23-79a23d37fffd"},"tax_rate":0},{"job":{"external_id":"db3b1f33-2335-4fc5-a874-f8284a95d539"},"accrual":{"external_id":"438e506b-6114-4e2e-bb06-a3df6c18811a"},"charge_code":{"external_id":"ff815915-de16-4c63-8248-4757aea906e9"},"description":"Customs Clearance Fee","overseas_amount":{"currency":"AUD","pre_tax":200,"tax":20,"total":220},"tax_code":{"external_id":"3c01e205-aecd-4d34-ac19-fe4dea96a195"},"tax_rate":10}]},"id":"paths/~1payables-invoices/post/requestBody/content/application~1json/example"},"paths/~1payables-invoices/post/responses/200/content/application~1json/example":{"value":{"external_id":"7f3c9a2e-5b81-4d64-a0c7-1e92d8f4b6a3","status":"posted"},"id":"paths/~1payables-invoices/post/responses/200/content/application~1json/example"},"paths/~1payables-invoices/post/responses/400/content/application~1json/example":{"value":{"error":{"code":"bad_request","message":"Request validation failed.","details":[{"field":"invoice_number","message":"is required"}]}},"id":"paths/~1payables-invoices/post/responses/400/content/application~1json/example"},"paths/~1payables-invoices/post/responses/401/content/application~1json/example":{"value":{"error":{"code":"unauthorized","message":"Missing or invalid credentials."}},"id":"paths/~1payables-invoices/post/responses/401/content/application~1json/example"},"paths/~1payables-invoices/post/responses/409/content/application~1json/example":{"value":{"error":{"code":"duplicate_invoice","message":"An invoice with invoice_number BT-2025-0042 already exists for this creditor."}},"id":"paths/~1payables-invoices/post/responses/409/content/application~1json/example"},"paths/~1staff/get/responses/200/content/application~1json/example":{"value":[{"external_id":"a7ed2209-b471-4c37-90f5-bfea1e7bb464","updated_at":"2024-11-03T08:12:45Z","name":"Sarah Nguyen","email_address":"snguyen@yourcompany.com","is_active":true},{"external_id":"3c1f0b7a-8d24-4e59-9a41-2f6b7c8d9e0a","updated_at":"2024-09-18T22:47:10Z","name":"James Porter","email_address":"jporter@yourcompany.com","is_active":false}],"id":"paths/~1staff/get/responses/200/content/application~1json/example"},"paths/~1staff/get/responses/401/content/application~1json/example":{"value":{"error":{"code":"unauthorized","message":"Missing or invalid credentials."}},"id":"paths/~1staff/get/responses/401/content/application~1json/example"},"paths/~1charge-codes/get/responses/200/content/application~1json/example":{"value":[{"external_id":"eda74483-b7d9-4168-9a20-82155e59395f","updated_at":"2024-08-21T11:30:02Z","code":"FRT","description":"International Freight","charge_type":"freight","tax_code":{"external_id":"940dca09-88d4-403e-be23-79a23d37fffd"},"is_active":true},{"external_id":"ff815915-de16-4c63-8248-4757aea906e9","updated_at":"2024-08-21T11:30:02Z","code":"CCL","description":"Customs Clearance Fee","charge_type":"destination","tax_code":{"external_id":"3c01e205-aecd-4d34-ac19-fe4dea96a195"},"is_active":true}],"id":"paths/~1charge-codes/get/responses/200/content/application~1json/example"},"paths/~1charge-codes/get/responses/401/content/application~1json/example":{"value":{"error":{"code":"unauthorized","message":"Missing or invalid credentials."}},"id":"paths/~1charge-codes/get/responses/401/content/application~1json/example"},"paths/~1tax-codes/get/responses/200/content/application~1json/example":{"value":[{"external_id":"3c01e205-aecd-4d34-ac19-fe4dea96a195","updated_at":"2024-07-02T09:15:33Z","code":"GST","description":"Goods and services tax (10%)","tax_rate":10,"is_active":true},{"external_id":"940dca09-88d4-403e-be23-79a23d37fffd","updated_at":"2024-07-02T09:15:33Z","code":"FRE","description":"GST free","tax_rate":0,"is_active":true}],"id":"paths/~1tax-codes/get/responses/200/content/application~1json/example"},"paths/~1tax-codes/get/responses/401/content/application~1json/example":{"value":{"error":{"code":"unauthorized","message":"Missing or invalid credentials."}},"id":"paths/~1tax-codes/get/responses/401/content/application~1json/example"}},"securitySchemeStore":{"OAuth2.0-Partner":{"id":"OAuth2.0-Partner","type":"oauth2","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran → Partner: OAuth 2.0 client credentials flow."},"children":[]}]}]}],"flows":{"clientCredentials":{"tokenUrl":"https://api.yourserver.com/oauth/token","scopes":{}}}},"Bearer-Token-Partner":{"id":"Bearer-Token-Partner","type":"http","scheme":"bearer","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"BravoTran → Partner: Bearer token in the Authorization header."},"children":[]}]}]}]},"OAuth2.0-BravoTran":{"id":"OAuth2.0-BravoTran","type":"oauth2","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Partner → BravoTran: OAuth 2.0 client credentials flow."},"children":[]}]}]}],"flows":{"clientCredentials":{"tokenUrl":"https://api.bravotran.com/oauth/token","scopes":{}}}},"Token-Auth-BravoTran":{"id":"Token-Auth-BravoTran","type":"apiKey","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Partner → BravoTran: API token in the "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"Authorization"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" header, formatted as "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"Token token=<token>"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"."},"children":[]}]}]}],"in":"header","paramName":"Authorization"},"X-API-Key-BravoTran":{"id":"X-API-Key-BravoTran","type":"apiKey","description":[{"$$mdtype":"Node","type":"paragraph","attributes":{},"children":[{"$$mdtype":"Node","type":"inline","attributes":{},"children":[{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":"Partner → BravoTran: API token in the "},"children":[]},{"$$mdtype":"Node","type":"code","inline":true,"attributes":{"content":"x-api-key"},"children":[]},{"$$mdtype":"Node","type":"text","inline":true,"attributes":{"content":" header."},"children":[]}]}]}],"in":"header","paramName":"x-api-key"}},"servers":[{"url":"/_mock/openapi","isMockServer":true,"description":"Mock server"},{"url":"https://api.yourserver.com"}]},"options":{"hideSidebar":true,"mockServer":{"url":"/_mock/openapi","position":"first","description":"Mock server"},"disableRouter":true,"downloadUrls":[{"url":"/_bundle/openapi.json?download"},{"url":"/_bundle/openapi.yaml?download"}],"excludeFromSearch":false,"specType":"openapi","markdocOptions":{"tags":{},"nodes":{},"components":{}},"metadata":{"title":"Partner Integration API","description":"API specification for freight forwarding system (FFS) partners integrating with BravoTran.\n\n## Overview\n\nBravoTran uses an event-driven pull model to stay in sync with your freight forwarding system:\n\n1. Your system sends an **event notification** to BravoTran when an entity is created or updated.\n2. BravoTran reads the entity type and identifier from the event.\n3. BravoTran issues a `GET` request to your API with the entity type and identifier.\n4. Your API returns the entity as JSON per this specification.\n\nBravoTran also **POSTs approved invoices** to your system for cost posting. When an invoice is approved in BravoTran, it sends a `POST /payables-invoices` request to your API with the invoice details. Your system must create or record the invoice accordingly.\n\n![API Flow Diagram](images/api-flow.png)\n\n### Polling alternative\n\nIf your system cannot reliably push live event notifications, you may instead implement the optional list endpoints `GET /orgs`, `GET /jobs`, and `GET /payables-invoices`. BravoTran will periodically poll them with an `updated_after` window, get back the identifiers of anything that changed, then call the existing single-entity detail endpoints to fetch each one. Implement either the events API or the list endpoints — not both. All three list endpoints must be implemented together; BravoTran's polling assumes complete coverage of all entity types.\n\nCreates and updates are surfaced through the same filter: when an entity is created, set `updated_at` to the creation timestamp and it will appear in any subsequent polling response whose `updated_after` is at or before that timestamp. There is no separate \"creation\" feed.\n\n## Terminology\n\n| Term | Definition |\n|------|-----------|\n| **FFS** | Freight Forwarding System — your system |\n| **Company** | A country-level entity in the FFS; maps to a BravoTran **Account** |\n| **Account** | BravoTran's representation of a company/country |\n| **Org** | A vendor, carrier, creditor, or debtor |\n| **Creditor** | An org that issues payables invoices; referenced as `creditor` on invoices and accruals |\n| **Job** | A consol (consolidation/master) or shipment (house) |\n| **Accrual** | An expected charge on a job |\n| **Charge Line** | A line item on a payables invoice |\n| **Payables Invoice** | AP invoice from a creditor |\n| **Outbound Payables Invoice** | Approved invoice posted from BravoTran to the partner's system for cost posting |\n\nBravoTran maps a **Company** in the FFS to an **Account** in BravoTran. Often a company represents a country. It is acceptable to have more than one account for a country if that country has multiple companies, but a single account must never represent multiple companies or countries.\n\n## Conventions\n\n- **`external_id`** — Unique, immutable identifier for every entity. Used as the foreign key between systems. Typically the primary key in your database. Not visible to end users. The example `external_id` values throughout these docs are GUIDs, but they don't have to be — an `external_id` is whatever the stable identifier for the entity is in the FFS.\n- **`updated_at`** — [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) timestamp of when the entity was last modified. BravoTran uses this as a version marker to prevent overwriting with stale data. For jobs, this must update when any child data changes (e.g., accrual added/edited, shipment added to consol). On creation, `updated_at` must be set to (at least) the creation timestamp so newly created entities appear in polling responses alongside updates — the polling endpoints make no distinction between creates and updates.\n- **Amounts** — Wherever there is an amount, a corresponding `currency` ([ISO 4217](https://en.wikipedia.org/wiki/ISO_4217)) must be provided.\n- **Local vs. overseas amounts** — `local_amount` is in the account's local currency (the currency of the country the forwarder operates in). `overseas_amount` is in the vendor's currency — whatever currency the charge or invoice is denominated in. The two may be the same (e.g., a domestic vendor).\n- **Country codes** — Country fields use [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) two-letter codes.\n- **Nested references** — Related entities are represented as nested objects containing at minimum an `external_id`.\n- **Error codes** — Error responses use `lower_snake` codes in both directions. BravoTran keys off the HTTP status rather than partner error bodies.\n\n## Staff\n\nStaff data is provided via flat file — typically a spreadsheet export from the FFS. Any format your FFS can export works; field names don't matter as long as the required contents are present. If you don't have an existing export, use the [recommended format](https://docs.bravotran.com/File-Definitions-166c5c207d858086b3d0dd89c1ae252b#166c5c207d8580f09c40f841992ebfe5), which lists each field and whether it is required. Alternatively, implement `GET /staff` and BravoTran will fetch staff data from your API instead.\n\n## Charge Codes\n\nCharge code data is provided via flat file — typically a spreadsheet export from the FFS. Any format your FFS can export works; field names don't matter as long as the required contents are present. If you don't have an existing export, use the [recommended format](https://docs.bravotran.com/File-Definitions-166c5c207d858086b3d0dd89c1ae252b#166c5c207d8580699bdbc831d58ba770), which lists each field and whether it is required. Alternatively, implement `GET /charge-codes` and BravoTran will fetch charge code data from your API instead. Accruals and charge lines reference charge codes by `external_id`; the mapping is maintained through the charge code data.\n\n## Tax Codes\n\nTax code data is provided via flat file — typically a spreadsheet export from the FFS. Any format your FFS can export works; field names don't matter as long as the required contents are present. If you don't have an existing export, use the [recommended format](https://docs.bravotran.com/File-Definitions-166c5c207d858086b3d0dd89c1ae252b#166c5c207d85807c9a6ac4ed15211d2e), which lists each field and whether it is required. Alternatively, implement `GET /tax-codes` and BravoTran will fetch tax code data from your API instead.\n\n## Authentication\n\nEach direction of communication supports one of the following authentication methods, agreed upon during onboarding:\n\n**BravoTran → Partner** (partner-hosted endpoints):\n\n- **OAuth 2.0** — Client credentials flow\n- **Bearer Token** — Static token in the `Authorization` header\n\n**Partner → BravoTran** (`POST /events`):\n\n- **OAuth 2.0** — Client credentials flow\n- **Token** — API token in the `Authorization` header, formatted as `Token token=<token>`\n- **API Key** — API token in the `x-api-key` header\n\n## Changelog\n\n### 1.5.0 — 2026-08-28\n\n- Charge codes returned by `GET /charge-codes` now include a required `charge_type` field classifying the charge as `freight`, `origin`, `destination`, or `other`.\n\n### 1.4.0 — 2026-07-17\n\n- Renamed the `org` reference to `creditor` on job accruals (`GET /jobs/{external_id}`), payables invoices (`GET /payables-invoices/{external_id}`), and outbound payables invoices (`POST /payables-invoices`). The referenced entity is still an org fetched via the `/orgs` endpoints; the key now reflects the role the org plays on these records.\n\n### 1.3.0 — 2026-07-16\n\n- Payables invoice responses now include a `status` field (`draft` or `posted`) — in both `GET /payables-invoices/{external_id}` and the `POST /payables-invoices` response body.\n- `POST /payables-invoices` charge lines now always include an `accrual` reference whose `external_id` matches an accrual returned by `GET /jobs/{external_id}` (`null` when the charge line has no matching accrual).\n- Job accruals now include a `tax_code` reference. Like other tax fields, it is optional for non-tax / US-based accounts.\n- Added supporting data endpoints — `GET /staff`, `GET /charge-codes`, and `GET /tax-codes` — as an alternative to flat file delivery of staff, charge code, and tax code data.\n- `POST /payables-invoices` now documents a `409` response with error code `duplicate_invoice`, returned when an invoice with the same `invoice_number` already exists for the org.\n\n### 1.2.0 — 2026-07-08\n\n- `POST /payables-invoices` requests no longer include an `external_id`. Your system generates its own identifier for the created invoice and returns it as `external_id` in the 200 response. BravoTran stores that identifier and uses it for `GET /payables-invoices/{external_id}`.\n- `POST /events` error responses now use `lower_snake` error codes (`validation_error`, `invalid_json`, `unauthorized`), matching the partner-hosted endpoints.\n\n### 1.1.0 — 2026-07-07\n\n- `tax` is now required on invoice-level and charge-line amounts returned by `GET /payables-invoices/{external_id}` for tax-enabled accounts. Non-tax / US-based accounts are unaffected.\n- Zero-tax lines must state `tax: 0.0` explicitly rather than omitting the field or sending `null`.\n"}},"baseSlug":"/openapi","routesMapping":{}}