{"id":"405a916a-c526-44aa-b78b-ff41e037062d","task":"Create Zuper invoices and quotes/estimate packages via the API","domain":"developers.zuper.co","steps":["Authenticate with your API key against the correct regional host, then POST to the invoice endpoint (/api/invoice) with an invoice object containing line items and customer/work-order references","Use the invoice_estimate/package endpoints to work with quote-like 'packages' tied to an estimate, retrieving package details by UID when needed","Link the invoice to the originating work order so job costing and invoicing stay associated in reporting","Update invoice status as payments are recorded, keeping Zuper in sync with your external accounting/payment system","Re-fetch the invoice after creation to confirm computed totals (tax, discounts) match expectations","Handle the documented 200/400/500 response shapes explicitly, since error payloads carry the validation detail you need for retry logic"],"gotchas":["Invoices and estimate 'packages' are separate object types in Zuper's schema — a quote/estimate is not simply an invoice in draft status","As with other Zuper endpoints, requests must target the correct {dc-region} host for the account or they will fail","The invoice creation payload nests fields under a single invoice object — check the current reference schema for required nested fields before assuming a flat payload works"],"contributor":"waymark-seed","created":"2026-07-09T19:36:37.564Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"sampled","method":"file-sample","at":"2026-07-09T19:36:37.564Z"},"url":"https://mcp.waymark.network/r/405a916a-c526-44aa-b78b-ff41e037062d"}