/docs on any running deployment, and the OpenAPI document is at /openapi.json. This page covers the conventions and invariants that the schema alone cannot express: why money is a string, what it means when cost.visible is false, and what the health endpoints tell you about the deployment’s readiness.
Base URL
/api/v1/. The two health endpoints (/healthz, /readyz) and the webhook receivers (/webhooks/...) live outside this prefix.
Content type
All request and response bodies useapplication/json. Requests with a body must set Content-Type: application/json.
Money is always a string
Monetary amounts cross the wire as strings —"649.38", not 649.38. A JSON number is an IEEE-754 double-precision float, which cannot represent values like 1234.56 exactly. Because these figures end up in finance reports, MeetCost serialises every amount as a decimal string. Parse them with a decimal library, not a float.
total, annualised_total, initial_total, final_total, estimated_saving, and all report totals.
Redaction is not an error
Every cost response carries acost.visible flag. When visible is false, the deployment’s disclosure policy withheld the total from this caller — a normal, expected outcome, not a failure condition. The redactions array tells you which rule applied.
Redaction codes
Health and bootstrap endpoints
These endpoints require no authentication.GET /healthz
Liveness probe. Returns
{"status": "ok", "version": "..."}. A load balancer should route to instances where this returns 200.GET /readyz
Readiness probe. Touches the database, reports the active egress allowlist, and confirms whether the encryption key is configured. Use this for startup and rolling-update gates.
GET /api/v1/client-config
Bootstrap payload for add-in clients. Requires authentication. Returns the org’s currency, nudge thresholds, the caller’s role, and the service version — nothing about pay data.
/readyz response:
/api/v1/client-config deliberately contains nothing about pay data. A compromised add-in client learns the org’s nudge thresholds and nothing else.