Skip to content

Receive an approved payables invoice from BravoTran

Request

This endpoint is hosted by the partner, not BravoTran. Implementation is required.

BravoTran calls this endpoint when an invoice has been approved and is ready for cost posting. Your system must create or record the invoice accordingly, then respond with the external_id your system assigned to the created invoice and its status (draft or posted). Do not derive the identifier from the request — BravoTran does not send one.

Tax note: Invoice-level and charge-line amounts always include numeric tax, using 0.0 when there is no tax. Every charge line also includes tax_code and tax_rate; both are null for accounts without GST/VAT. These fields are never omitted.

Security
OAuth2.0-Partner or Bearer-Token-Partner
Bodyapplication/jsonrequired

The example submits invoice SYD923891 for cost posting: the first line creates a new accrual, and the second matches an existing accrual. The GET /jobs/{external_id} and GET /payables-invoices/{external_id} examples show the same invoice and its accruals after posting.

One of:
creditorobject(EntityRef)required

Reference to the creditor org for this invoice.

invoice_numberstring, non-emptyrequired

Invoice number. Unique scoped to the creditor.

invoice_datestring, (date)required

ISO 8601 date of the invoice.

is_credit_notebooleanrequired

Whether this invoice is a credit note. Credit-note totals are sent as positive numbers. Individual charge lines retain their sign relative to the document, so a discount line can be negative on an invoice or a credit note.

Value:true
overseas_amountobject(Amount)required

Total invoice amount in the overseas (invoice) currency.

due_datenull, (date)required

Payment due date. Always null when is_credit_note is true. Also null when BravoTran is not configured to send due dates for the account.

filesArray of objects, non-empty(OutboundPayablesInvoiceFile)required

Files attached to the approved invoice.

charge_linesArray of objects, non-empty(OutboundChargeLine)required

Line items on the invoice.

curl -i -X POST \
  https://apidocs.bravotran.com/_mock/openapi/payables-invoices \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "creditor": {
      "external_id": "feaa09da-9551-47f8-b30d-6e303b6ad6d5"
    },
    "invoice_number": "SYD923891",
    "invoice_date": "2025-02-15",
    "is_credit_note": false,
    "overseas_amount": {
      "currency": "AUD",
      "pre_tax": 1770,
      "tax": 20,
      "total": 1790
    },
    "due_date": "2025-03-17",
    "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": 1570,
          "tax": 0,
          "total": 1570
        },
        "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
      }
    ]
  }'

Responses

Invoice accepted

Bodyapplication/json
external_idstring, non-emptyrequired

The unique, immutable identifier your system generated for the created invoice. BravoTran stores this identifier and uses it to fetch the invoice via GET /payables-invoices/{external_id}.

statusstringrequired

Status of the created invoice in your system:

  • draft — created but not yet posted to the ledger
  • posted — posted to the ledger
Enum:"draft""posted"
Response
{ "external_id": "b6d1fdec-81ff-43b9-b422-ae27513047ce", "status": "posted" }