Skip to main content

Tango Project Invoice Outbound API

Generated from Tango Project Invoice Outbound API Integration Design Specification V1.1.docx in SharePoint folder 04 Projects Integrations. OAS spec: invoice-outbound-api.yaml

Overview

Async REST API used by the client to fetch approved invoices from Tango. Two-call pattern: a GET against the invoices endpoint returns a gu_id immediately; a subsequent GET to the Status endpoint returns the full record set. The same gu_id can be polled multiple times to retrieve the same records. Owner: Tango Analytics Spec version: 1.1 Status: Draft (auto-generated from design doc — needs review)

Base URLs

Authentication

x-client and x-api-key headers, required on every call.

Endpoints

GET /v1/projectmgmt/batch/invoices

Response — 200 OK
On error the response omits gu_id.

GET /v1/batch/status?gu_id=...

Returns the invoice records. Null fields in Tango are omitted from the response. Sample response (truncated)

Integration logic

  • Only approved invoices are returned.
  • After successful export the invoice is flagged Exported in Tango.
  • A field with a null/unconfigured value is omitted from the JSON entirely (not sent as empty).
  • The gu_id can be re-polled — the response is idempotent for a given gu_id.

Data model — Invoice (header)

Data model — Invoice Detail

Open Questions / Assumptions

  • No required annotation on outbound fields — the data-mapping table for this integration doesn’t have a “Required?” column. Treating all as optional.
  • nattr1/nattr2 type mismatch: the sample JSON shows numeric values, but the mapping table lists them as VARCHAR. Schema mirrors the mapping table (VARCHAR); confirm.
  • status allowed values are not enumerated; the example shows APPROVED.
  • tax_group allowed values are not enumerated.
  • Pagination behavior: the doc does not say whether the Status response is paginated for large batches (the Project Attributes API explicitly is — this one is silent).
  • No explicit error response shape for the initial GET when it produces status: "Error"; modelled as the same envelope minus gu_id.

Changelog