/v1/quotesCreate a Quote
Creates a draft Quote. Supply patient_id for a Patient Quote, or omit it and supply alternative_payor_id to quote another organisation. Supply booking_ids to generate line items from those Bookings, or supply line_items to quote custom charges. Bookings require a Patient. Sending, accepting, and converting remain in the Carebit staff and Patient Portal interfaces.
Required API scopes: quotes.create
Parameters
Idempotency-Key
header · required
string
Client-generated idempotency key. Required for every POST/PATCH write. Replay of the same key with the same body returns the stored response with an
Idempotency-Replayed: trueheader. Same key + different body returns422 idempotency_key_reused. A duplicate that arrives while the first request is still in flight returns409 idempotency_conflictwithRetry-After: 1.
Request body
application/json
alternative_payor_idstring | null · uuidRequired when
payor_typeisalternative_payor, and whenpatient_idis omitted. For Patient Quotes it must be available through a Patient Payor. For Quotes without a Patient it identifies the organisation being quoted.booking_idsarrayOptional unique Booking IDs in the Organization that belong to the Quote's Patient. Omit this field when the Quote has no Patient.
itemsstring · uuid
clinician_idstring | null · uuidThe optional Clinician attributed to the Quote. When omitted, Carebit infers it only if every supplied Booking shares one Clinician.
expires_onstring · dateThe date the Quote remains valid through. Defaults to the Organization's default quote validity, which is 28 days unless changed.
line_itemsarrayOptional custom charges. When omitted and
booking_idsis supplied, Carebit generates line items from those Bookings. Amounts are minor currency units.itemsobjectbooking_idstring | null · uuidThe optional Booking associated with this line item. The Booking must be included in
booking_ids.discount_amountintegerThe discount in minor currency units.
external_provider_namestring | nullThe provider that collects an external fee.
is_billed_by_another_providerbooleanWhether another provider bills this line instead of the practice that issued the Quote.
quantitynumberThe quantity quoted. Defaults to 1.
tax_treatmentstring | nullThe tax treatment for the line item.
Allowed values:
exempt | no_vat | standard | zero_ratedtitlestringrequiredThe line item description.
unit_priceintegerrequiredThe unit price in minor currency units, excluding tax.
notesstring | nullHTML notes shown on the Quote.
patient_idstring | null · uuidThe Patient with an active connection to the Organization. Omit this field to quote another organisation, and supply
alternative_payor_idinstead.payor_typestringThe party the Quote is issued to. Defaults from linked Bookings, to
patientfor a standalone Patient Quote, or toalternative_payorwhenpatient_idis omitted.Allowed values:
patient | alternative_payorquoted_onstring · dateThe Quote date. Defaults to today.
termsstring | nullHTML terms. When omitted, Carebit copies the Clinician or Organization default.
titlestring | nullThe Quote title.
Responses
The requested Quote.
accepted_atstring | null · date-timerequiredAn ISO 8601 timestamp in UTC, with a
Zsuffix. For example,2026-07-01T09:00:00Z.alternative_payor_idstring | null · uuidrequiredThe AlternativePayor for an alternative-payor Quote.
booking_idsarrayrequiredThe Bookings linked to the Quote.
itemsstring · uuid
cancel_reasonstring | nullrequiredWhy the Quote was canceled.
staffis a staff cancellation.supersededis set when a revised Quote replaces it.Allowed values:
staff | superseded | nullcanceled_atstring | null · date-timerequiredAn ISO 8601 timestamp in UTC, with a
Zsuffix. For example,2026-07-01T09:00:00Z.clinician_idstring | null · uuidrequiredThe Clinician attributed to the Quote.
created_atstring · date-timerequiredAn ISO 8601 timestamp in UTC, with a
Zsuffix. For example,2026-07-01T09:00:00Z.creation_sourcestring | nullrequiredHow the Quote was created.
Allowed values:
staff_member | api | nullcurrencystring | nullrequiredThe ISO 4217 currency code.
current_invoice_idstring | null · uuidrequiredThe current non-cancelled Invoice generated from the Quote.
declined_atstring | null · date-timerequiredAn ISO 8601 timestamp in UTC, with a
Zsuffix. For example,2026-07-01T09:00:00Z.expired_atstring | null · date-timerequiredAn ISO 8601 timestamp in UTC, with a
Zsuffix. For example,2026-07-01T09:00:00Z.expires_onstring | null · daterequiredThe date the Quote remains valid through.
idstring · uuidrequiredThe resource's unique identifier, formatted as an RFC 4122 version 4 UUID.
invoice_idstring | null · uuidrequiredThe Invoice created by the first conversion or acceptance.
invoice_idsarrayrequiredEvery Invoice generated from the Quote, including cancelled generations.
itemsstring · uuid
invoiced_atstring | null · date-timerequiredAn ISO 8601 timestamp in UTC, with a
Zsuffix. For example,2026-07-01T09:00:00Z.line_itemsarrayrequiredThe proposed charges on the Quote.
itemsobjectbooking_idstring | null · uuidrequiredThe Booking associated with the line item.
created_atstring · date-timerequiredAn ISO 8601 timestamp in UTC, with a
Zsuffix. For example,2026-07-01T09:00:00Z.currencystring | nullrequiredThe ISO 4217 currency code.
discount_amountinteger | nullrequiredThe discount in minor currency units.
external_provider_namestring | nullrequiredThe provider that collects an external fee.
idstring · uuidrequiredThe resource's unique identifier, formatted as an RFC 4122 version 4 UUID.
is_billed_by_another_providerbooleanrequiredWhether another provider bills this line instead of the practice that issued the Quote.
objectanyrequiredDiscriminator value emitted at
object.quantitynumber | nullrequiredThe quantity quoted.
titlestring | nullrequiredThe line item description.
totalinteger | nullrequiredThe line total in minor currency units.
unit_priceinteger | nullrequiredThe unit price in minor currency units.
updated_atstring · date-timerequiredAn ISO 8601 timestamp in UTC, with a
Zsuffix. For example,2026-07-01T09:00:00Z.
linksobjectrequiredURLs to related resources.
alternative_payorstring | null · urirequiredThe full URL of a related resource.
bookingsarrayrequiredDeveloper Platform URLs for linked Bookings.
itemsstring · uriThe full URL of a related resource.
clinicianstring | null · urirequiredThe full URL of a related resource.
current_invoicestring | null · urirequiredThe full URL of a related resource.
invoicestring | null · urirequiredThe full URL of a related resource.
invoicesarrayrequiredDeveloper Platform URLs for every generated Invoice.
itemsstring · uriThe full URL of a related resource.
patientstring | null · urirequiredThe full URL of a related resource.
notesstring | nullrequiredSanitized HTML notes on the Quote.
objectanyrequiredDiscriminator value emitted at
object.patient_idstring | null · uuidrequiredThe Patient associated with the Quote.
payor_typestring | nullrequiredThe party the Quote is issued to.
Allowed values:
patient | alternative_payor | nullquote_numberstring | nullrequiredThe Quote number, unique within the Organization.
quoted_onstring | null · daterequiredThe date the Quote was issued or drafted.
recipient_display_namestring | nullrequiredThe display name of the live Patient or AlternativePayor the Quote is sent to.
sent_atstring | null · date-timerequiredAn ISO 8601 timestamp in UTC, with a
Zsuffix. For example,2026-07-01T09:00:00Z.statusstring | nullrequiredThe Quote's current status.
Allowed values:
draft | sent | accepted | declined | expired | canceled | invoiced | nulltermsstring | nullrequiredSanitized HTML terms copied onto the Quote.
titlestring | nullrequiredThe Quote title.
totalintegerrequiredThe Quote total in minor currency units, including lines billed by another provider.
total_collectible_by_issuing_organizationintegerrequiredThe amount the issuing Organization will collect, in minor currency units. Excludes lines billed by another provider.
updated_atstring · date-timerequiredAn ISO 8601 timestamp in UTC, with a
Zsuffix. For example,2026-07-01T09:00:00Z.
Example
{
"id": "f72cd09f-9bdc-4341-8184-bf2f900a8669",
"object": "quote",
"accepted_at": "2026-01-01T09:00:00Z",
"alternative_payor_id": null,
"booking_ids":
"00000000-0000-4000-8000-000000000001"
],
"cancel_reason": "staff",
"canceled_at": "2026-01-01T09:00:00Z",
"clinician_id": "00000000-0000-4000-8000-000000000002",
"created_at": "2026-01-01T09:00:00Z",
"creation_source": "staff_member",
"currency": "GBP",
"current_invoice_id": "b478fd43-d3a3-4599-8444-e55e805e96fe",
"declined_at": "2026-01-01T09:00:00Z",
"expired_at": "2026-01-01T09:00:00Z",
"expires_on": "2026-01-01",
"invoice_id": "00000000-0000-4000-8000-000000000027",
"invoice_ids":
"00000000-0000-4000-8000-000000000027"
],
"invoiced_at": "2026-01-01T09:00:00Z",
"line_items":
"id": "a2811c16-a221-45cd-8c38-176432273234",
"object": "quote_line_item",
"booking_id": "00000000-0000-4000-8000-000000000001",
"created_at": "2026-01-01T09:00:00Z",
"currency": "GBP",
"discount_amount": 1,
"external_provider_name": "London Bridge Hospital",
"is_billed_by_another_provider": true,
"quantity": 1.5,
"title": "Dr",
"total": 1,
"unit_price": 1,
"updated_at": "2026-01-01T09:00:00Z"
}
],
"links":
"alternative_payor": "https://api.carebit.co/v1/alternative_payors/815dfc1e-6eaf-4b71-8a94-ec2a13224fca",
"bookings":
"https://api.carebit.co/v1/bookings/00000000-0000-4000-8000-000000000001"
],
"clinician": "https://api.carebit.co/v1/clinicians/00000000-0000-4000-8000-000000000002",
"current_invoice": "https://api.carebit.co/v1/current_invoices/b478fd43-d3a3-4599-8444-e55e805e96fe",
"invoice": "https://api.carebit.co/v1/invoices/00000000-0000-4000-8000-000000000027",
"invoices":
"https://api.carebit.co/v1/invoices/00000000-0000-4000-8000-000000000027"
],
"patient": "https://api.carebit.co/v1/patients/00000000-0000-4000-8000-000000000004"
},
"notes": "Please confirm the appointment by email.",
"patient_id": "00000000-0000-4000-8000-000000000004",
"payor_type": "insurance_company",
"quote_number": "QUO-1001",
"quoted_on": "2026-01-01",
"recipient_display_name": "Alex Morgan",
"sent_at": "2026-01-01T09:00:00Z",
"status": "draft",
"terms": "<p>This quote is valid until the expiry date shown.</p>",
"title": "Initial consultation quote",
"total": 1,
"total_collectible_by_issuing_organization": 1,
"updated_at": "2026-01-01T09:00:00Z"
}The Idempotency-Key header is missing (idempotency_key_required) or exceeds 255 characters (idempotency_key_too_long).
errorobjectrequiredThe structured details that describe why the request failed.
codestringrequiredThe machine-readable error code.
errorsarray | nullAdditional errors from a failed validation.
itemsobjectcodestringThe machine-readable code for this validation error.
messagestringA message that explains this validation error.
paramstring | nullThe name of the parameter that caused this validation error, when known.
messagestringrequiredA message that explains the error and how to resolve it.
paramstring | nullThe name of the parameter that caused the error, when known.
typestringrequiredThe high-level category of the error.
Allowed values:
authentication_error | permission_error | invalid_request_error | rate_limit_error | api_error
Example
{
"error":
"code": "resource_missing",
"errors":
"code": "resource_missing",
"message": "The requested resource was not found.",
"param": "patient_id"
}
],
"message": "The requested resource was not found.",
"param": "patient_id",
"type": "authentication_error"
}
}The access token is missing, invalid, expired, or revoked.
errorobjectrequiredThe structured details that describe why the request failed.
codestringrequiredThe machine-readable error code.
errorsarray | nullAdditional errors from a failed validation.
itemsobjectcodestringThe machine-readable code for this validation error.
messagestringA message that explains this validation error.
paramstring | nullThe name of the parameter that caused this validation error, when known.
messagestringrequiredA message that explains the error and how to resolve it.
paramstring | nullThe name of the parameter that caused the error, when known.
typestringrequiredThe high-level category of the error.
Allowed values:
authentication_error | permission_error | invalid_request_error | rate_limit_error | api_error
Example
{
"error":
"code": "resource_missing",
"errors":
"code": "resource_missing",
"message": "The requested resource was not found.",
"param": "patient_id"
}
],
"message": "The requested resource was not found.",
"param": "patient_id",
"type": "authentication_error"
}
}The access token lacks the required scope, or the project is disabled.
errorobjectrequiredThe structured details that describe why the request failed.
codestringrequiredThe machine-readable error code.
errorsarray | nullAdditional errors from a failed validation.
itemsobjectcodestringThe machine-readable code for this validation error.
messagestringA message that explains this validation error.
paramstring | nullThe name of the parameter that caused this validation error, when known.
messagestringrequiredA message that explains the error and how to resolve it.
paramstring | nullThe name of the parameter that caused the error, when known.
typestringrequiredThe high-level category of the error.
Allowed values:
authentication_error | permission_error | invalid_request_error | rate_limit_error | api_error
Example
{
"error":
"code": "resource_missing",
"errors":
"code": "resource_missing",
"message": "The requested resource was not found.",
"param": "patient_id"
}
],
"message": "The requested resource was not found.",
"param": "patient_id",
"type": "authentication_error"
}
}The Patient, Clinician, Booking, or AlternativePayor was not found in the Organization.
errorobjectrequiredThe structured details that describe why the request failed.
codestringrequiredThe machine-readable error code.
errorsarray | nullAdditional errors from a failed validation.
itemsobjectcodestringThe machine-readable code for this validation error.
messagestringA message that explains this validation error.
paramstring | nullThe name of the parameter that caused this validation error, when known.
messagestringrequiredA message that explains the error and how to resolve it.
paramstring | nullThe name of the parameter that caused the error, when known.
typestringrequiredThe high-level category of the error.
Allowed values:
authentication_error | permission_error | invalid_request_error | rate_limit_error | api_error
Example
{
"error":
"code": "resource_missing",
"errors":
"code": "resource_missing",
"message": "The requested resource was not found.",
"param": "patient_id"
}
],
"message": "The requested resource was not found.",
"param": "patient_id",
"type": "authentication_error"
}
}A concurrent request holds the idempotency lease (idempotency_conflict). Retry after the delay indicated by Retry-After.
errorobjectrequiredThe structured details that describe why the request failed.
codestringrequiredThe machine-readable error code.
errorsarray | nullAdditional errors from a failed validation.
itemsobjectcodestringThe machine-readable code for this validation error.
messagestringA message that explains this validation error.
paramstring | nullThe name of the parameter that caused this validation error, when known.
messagestringrequiredA message that explains the error and how to resolve it.
paramstring | nullThe name of the parameter that caused the error, when known.
typestringrequiredThe high-level category of the error.
Allowed values:
authentication_error | permission_error | invalid_request_error | rate_limit_error | api_error
Example
{
"error":
"code": "resource_missing",
"errors":
"code": "resource_missing",
"message": "The requested resource was not found.",
"param": "patient_id"
}
],
"message": "The requested resource was not found.",
"param": "patient_id",
"type": "authentication_error"
}
}The Quote cannot be created. payor_type must be patient or alternative_payor.
errorobjectrequiredThe structured details that describe why the request failed.
codestringrequiredThe machine-readable error code.
errorsarray | nullAdditional errors from a failed validation.
itemsobjectcodestringThe machine-readable code for this validation error.
messagestringA message that explains this validation error.
paramstring | nullThe name of the parameter that caused this validation error, when known.
messagestringrequiredA message that explains the error and how to resolve it.
paramstring | nullThe name of the parameter that caused the error, when known.
typestringrequiredThe high-level category of the error.
Allowed values:
authentication_error | permission_error | invalid_request_error | rate_limit_error | api_error
Example
{
"error":
"code": "resource_missing",
"errors":
"code": "resource_missing",
"message": "The requested resource was not found.",
"param": "patient_id"
}
],
"message": "The requested resource was not found.",
"param": "patient_id",
"type": "authentication_error"
}
}Too many requests. Retry after the delay indicated by Retry-After.
errorobjectrequiredThe structured details that describe why the request failed.
codestringrequiredThe machine-readable error code.
errorsarray | nullAdditional errors from a failed validation.
itemsobjectcodestringThe machine-readable code for this validation error.
messagestringA message that explains this validation error.
paramstring | nullThe name of the parameter that caused this validation error, when known.
messagestringrequiredA message that explains the error and how to resolve it.
paramstring | nullThe name of the parameter that caused the error, when known.
typestringrequiredThe high-level category of the error.
Allowed values:
authentication_error | permission_error | invalid_request_error | rate_limit_error | api_error
Example
{
"error":
"code": "resource_missing",
"errors":
"code": "resource_missing",
"message": "The requested resource was not found.",
"param": "patient_id"
}
],
"message": "The requested resource was not found.",
"param": "patient_id",
"type": "authentication_error"
}
}