Quotes

Cancel a quote

Withdraws a committed quote (accepted, signed, invoiced, paid), or a platform quote whatever its status, by moving it to cancelled. The quote stays and stops counting in the confirmed revenue. Already cancelled = success. A quote with an active invoice must have it credited first (409 quote_has_active_invoice). No body. Role permission: quotes.manage.

post/quotes/{id}/cancel

Request

  • Base URL: https://joinways.app/api/v1
  • URL: https://joinways.app/api/v1/quotes/{id}/cancel
  • Auth: one of:
    • HTTP bearer
    • OAuth 2 (authorization code, authorization URL https://joinways.app/oauth/authorize, token URL https://joinways.app/api/oauth/token, scopes: mcp.write)

Headers

Idempotency-Keystring

Optional client-generated key (1 to 255 characters, e.g. a UUID v4) that makes the request idempotent for 24 hours: a retry with the same key replays the recorded response (marked Idempotency-Replayed: true) instead of executing the operation again. Same key with another body: 422 idempotency_key_reuse; while the first request runs: 409 idempotency_conflict. See the Idempotency section.

Response

Cancelled.

successboolean
status'cancelled'
previous_status'draft' | 'pending' | 'accepted' | 'signed' | 'rejected' | 'invoiced' | 'paid' | 'cancelled'

draft = not sent yet; pending = sent, awaiting the client; accepted / signed = client agreement (signed = signature recorded); rejected = refused; invoiced = at least one invoice issued (a deposit included); paid = fully settled; cancelled = withdrawn. accepted, signed, invoiced and paid are live contracts counted in the event's confirmed amount (unless replaced, see superseded_by_quote_id).

Example response

{
  "previous_status": "pending"
}

Changes

No recorded changes to this operation across all 1 revision of this API.