Get a quote

Returns status "ready" (one exact price, an itemized breakdown, expires_at and a signed quote_token) or status "incomplete" with a needs list of exactly which inputs are still missing. Never a range. Unknown inputs are rejected. Call discover first: each service lists the inputs it needs. Every quote is a record: the answer carries transaction_id, quote_id and job_version, and state quoted (or quote_incomplete). Quote again with transaction_id to change the job: the next version, a new quote, the same record; everything the customer asked for earlier is carried forward, never dropped. On a booked job that quote is the change modify commits. A job that ended (declined, cancelled, supplier_cancelled, expired, completed) is never revived: quoting it starts a new job. M-21: a job outside the service's limits (discover services[].takes) is refused with its reason; a limit the job leaves out is a need; a home above an ask-first size, or a limit the owner is not sure of, is quoted with booking_authority approval_required (reason takes.ask.<field> or takes.unsure.<field>). A service whose task list the owner has not confirmed (matchable false) answers SERVICE_UNKNOWN with reason scope_not_confirmed.

post/api/v1/quote

Request

  • Base URL: https://commontape.com
  • URL: https://commontape.com/api/v1/quote
  • Auth: HTTP bearer

Request body

merchant_slugstring required
service_keystring required
transaction_idstring uuid

Optional: quote this job again (its next version).

special_requestsstring[]

Plain-text requests not on the word list. Always need the owner's yes (book answers pending_approval).

idempotency_keystring

Optional. A retry with the same key returns the same quote instead of a second one.

customer_refstring

Optional. Your own label for your customer. Two holds of the same job at one business are refused (HOLD_EXISTS) unless their customer_ref differs, so send one when you serve several customers. Never shown to the owner.

Example request

{
  "property": {
    "spaces": {
      "space.bedroom": 2,
      "space.bathroom.full": 2,
      "space.bathroom.half": 1,
      "space.kitchen": 1
    }
  },
  "scope": {
    "leave_out": [
      "space.garage"
    ],
    "clean_only": [
      "space.kitchen",
      "space.bathroom.full"
    ]
  }
}

Response

Success

OR
OR

Example response

{
  "booking_authority": {
    "reasons": [
      "owner_approves_every_job"
    ]
  },
  "taxonomy_version": 6,
  "scope": {
    "leave_out": [
      "space.garage"
    ],
    "clean_only": [
      "space.kitchen",
      "space.bathroom.full"
    ]
  }
}

Changes

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