Quotes

Change a quote status

Same service as the app: timeline entries, amendments, Slack message of an amendment confirmed by hand, quote.status_changed webhook. accepted and signed are exclusive per event: when another live contract (accepted, signed, invoiced, paid) exists and force_confirm is false, nothing is written and the answer is 200 with success: false, conflict: EXISTING_ACCEPTED_QUOTES and the competing quotes. Call again with force_confirm: true: competing accepted quotes go back to pending; signed, invoiced and paid ones stay and their amounts add up. A platform quote (source: platform) only takes accepted or rejected; anything else, or a live contract next to it, is a 409 that force_confirm does not lift. invoiced, paid and cancelled are set by invoicing and POST /quotes/{id}/cancel. Role permission: quotes.manage.

post/quotes/{id}/status

Request

  • Base URL: https://joinways.app/api/v1
  • URL: https://joinways.app/api/v1/quotes/{id}/status
  • 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.

Request body

status'draft' | 'pending' | 'accepted' | 'signed' | 'rejected' required
force_confirmboolean

Proceed although another live contract exists on the event (see above).

Response

Status written (success: true), or not written because of a competing contract (success: false).

OR

Example response

{
  "status": "pending"
}

Changes

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