/v1/admin/customers/{customer_id}/jobsA customer's jobs
Needs the jobs.read permission.
Parameters
customer_idstring, in the path, required
Response 200 · object
Done.
jobsarray of Job or null, requiredquote_idinteger (int64)uuidstringjob_typestringOne of:
houseofficeitemsparcelswastedeliveryhouse_bystringFor a house, how it is described; the firm's choice when left out. A customer's quote must use the firm's.
One of:
sizeroomservice_datestringYYYY-MM-DD, the business's day of the job; a timed job's follows its appointment_time.
appointment_timestringEmpty on a parcels or delivery job, whose time the planner sets.
legsarray of LegAt least one. Several collections or drops only where the firm's job type allows them.
leg_idinteger (int64)positionintegerThe leg's place in the quote, from 0; set from the order sent.
from_addressAddressaddress_idinteger (int64)customer_idinteger (int64)quote_idinteger (int64)house_numberintegerhouse_namestringstreetstringtownstringcitystringcountystringpostcodestringMust be a live postcode in England, Scotland or Wales; stored as "AB1 2CD".
latitudenumberSent with longitude and match_level from a chosen suggestion; otherwise the address is found when saved.
longitudenumbermatch_levelstringHow the position was found. postcode means the postcode's centre was used.
One of:
housestreetpostcodemanualneeds_checkbooleanSet when staff should check the position. Ignored when sent.
to_addressAddressOn a waste leg, the first disposal site chosen; a customer can't set it.
address_idinteger (int64)customer_idinteger (int64)quote_idinteger (int64)house_numberintegerhouse_namestringstreetstringtownstringcitystringcountystringpostcodestringMust be a live postcode in England, Scotland or Wales; stored as "AB1 2CD".
latitudenumberSent with longitude and match_level from a chosen suggestion; otherwise the address is found when saved.
longitudenumbermatch_levelstringHow the position was found. postcode means the postcode's centre was used.
One of:
housestreetpostcodemanualneeds_checkbooleanSet when staff should check the position. Ignored when sent.
from_yard_idinteger (int64)The yard a delivery sent without a collection address is collected from, the one nearest its drop. Ignored when sent.
from_accessAccessWhat a crew meets at one end of a leg.
property_typestringnotesstringAccess notes, such as narrow stairs or no parking.
floorintegerliftbooleancarry_mintegerHow far, in metres, things are carried between the door and the vehicle.
to_accessAccessWhat a crew meets at one end of a leg.
property_typestringnotesstringAccess notes, such as narrow stairs or no parking.
floorintegerliftbooleancarry_mintegerHow far, in metres, things are carried between the door and the vehicle.
recipient_namestringrecipient_phonestringsize_keystringOne of the firm's active sizes for the type (GET /v1/config job_types); needed for parcels, waste and a house by size; a delivery's is standard when left out; none for office and items.
waste_kindsarray of stringOn a waste leg, at least one of the firm's waste kinds; none on other types.
window_startstringHH:MM, the business's local time. Only on parcels and delivery.
window_endstringHH:MM, after window_start.
load_kgintegerA waste load's weight, its size's cubic metres at the price book's rubble_kg_per_m3 when it holds rubble_soil, otherwise kg_per_m3. Ignored when a customer sends it.
itemsarray of Itemitem_idinteger (int64)leg_idinteger (int64)On a quote, the leg the item travels on. Ignored when sent.
typestringcategorystringquantityintegerweightintegerKilograms.
lengthintegerCentimetres.
widthintegerheightintegerfragilebooleanhandling_minutesintegerOne person's minutes to handle the item; left out, they come from its size (20 a cubic metre).
floorintegerOn a quote, the floor the item is on; -1 is a basement and 0, the default, the ground floor.
roomintegerOn a quote moved room by room, the index in its rooms of the item's room.
roomsarray of stringIn the catalogue, the room types the item is usually found in.
largebooleanIn the catalogue, whether the item is large or awkward to move.
special_instructionsstringfullnessstringFor a house by size, how full the property is.
One of:
lightaveragepackedroomsarray of RoomFor a house by room, on a quote with one leg, at least one room.
typestring, requiredOne of:
bedroomkitchenloungedining_roombathroomofficeloftgarageshedfloorinteger, requireditemsarray of ItemSent with a new quote, the room's items; they are stored with the leg's items, on the room's floor and naming the room. Returned rooms have none.
item_idinteger (int64)leg_idinteger (int64)On a quote, the leg the item travels on. Ignored when sent.
typestringcategorystringquantityintegerweightintegerKilograms.
lengthintegerCentimetres.
widthintegerheightintegerfragilebooleanhandling_minutesintegerOne person's minutes to handle the item; left out, they come from its size (20 a cubic metre).
floorintegerOn a quote, the floor the item is on; -1 is a basement and 0, the default, the ground floor.
roomintegerOn a quote moved room by room, the index in its rooms of the item's room.
roomsarray of stringIn the catalogue, the room types the item is usually found in.
largebooleanIn the catalogue, whether the item is large or awkward to move.
customerCustomercustomer_idinteger (int64)titlestringfirst_namestringlast_namestringemailstring (email)email_confirmed_atstringWhen the customer first signed in by a link sent to the email; cleared when the email changes. Ignored when sent.
phonestringThe latest number given.
phonesarray of stringEvery number the customer has given, oldest first, each once however spaced. Ignored when sent.
crewinteger or nullStaff's crew; null works it out from the firm's crew rules. Staff only.
vehicle_idinteger (int64) or nullThe job's assignment, set with PUT /v1/admin/job/{id}/assignment; vehicle_id, driver_id, crew_ids and pinned are ignored when sent with a job.
hours_minutesinteger or nullThe time staff charge, in minutes; null works it out. Staff only.
extrasarray of QuoteExtra or nullidinteger (int64), requiredquantityinteger, requirednamestringAs priced. Ignored when sent.
priceinteger (int64)Pence each, as priced. Ignored when sent.
total_valueinteger (int64)What the customer pays, in pence.
price_linesarray of PriceLine or nullThe price's parts. To customers only when the firm shows its breakdown and staff haven't set the price.
kindstring, requiredOne of:
timefixedmilesfloorsheavyfragileextraadjustmentbooking_feeroad_chargesgate_feefreelabelstring, requiredquantitynumber, requiredunitinteger (int64), requiredamountinteger (int64), required
vatVATPriceA price excluding VAT with the VAT the firm adds at the standard 20%; registered is the firm's vat_registered setting, and without it vat is 0 and gross is net.
registeredboolean, requirednetinteger (int64), requiredvatinteger (int64), requiredgrossinteger (int64), required
displayPriceDisplay or nullHow the price is shown to the customer, in pence. An estimate gives the hourly rate; a range its upper end.
kindstring, requiredOne of:
fixedestimaterangeamountinteger (int64), requiredupperinteger (int64)hourly_rateinteger (int64)
pricedPriced or nullWhat a quote was priced with. Staff only.
crewintegervehiclesarray of objectvehicle_idinteger (int64)tripsinteger
hoursnumber
calculatedinteger (int64)The worked-out price, beside staff's override. Staff only.
estimated_costinteger (int64)Staff only.
margininteger (int64)Staff only.
below_marginbooleanUnder the firm's minimum margin. Staff only.
price_overrideinteger (int64) or nullStaff only; set with PUT /v1/admin/quote/{id}/price.
deposit_penceinteger (int64)The deposit due to book, in pence, from the firm's deposit rule or staff's override, capped at the gross price; 0 when there is none or it is under 30 pence.
deposit_onlinestringSet by GET /v1/quote/{id} when accepting takes deposit_pence online first, through the checkout_url accepting answers; "pay" takes it at once, "hold" holds it on the card until staff confirm the booking.
One of:
payholdpay_witharray of stringSet by GET /v1/quote/{id} with deposit_online; the providers the deposit can be paid with, in the order to offer them.
One of:
stripepaypalcard_balanceobjectSet by GET /v1/quote/{id} when accepting pays the deposit online at a firm that charges the balance to the card before the move; accepting with Stripe then needs agree_card.
amount_penceinteger (int64), requiredonstring (date), requiredThe date the balance is taken, from 08:00.
deposit_overrideinteger (int64) or nullStaff only; set with PUT /v1/admin/quote/{id}/deposit.
deposit_holdobjectSet by GET /v1/admin/quote/{id} while the deposit is held on the customer's card, waiting for staff to confirm the booking.
amount_penceinteger (int64), requiredhold_untilstring, requiredUTC, YYYY-MM-DD HH:MM:SS, when the hold lapses.
override_reasonstringStaff only.
statusstring"quoted price" when priced. "accepted" when booked or a delivery, once priced. "awaiting route" while HERE can't be reached: the route is tried again every 5 minutes and the customer is emailed the price when it arrives. "needs pricing" when staff must price it by hand (see pricing_reason); the customer is told their price will follow by email. "expired" once a priced quote is past valid_until, worked out when read. "acceptance received" when the customer accepted online and the business confirms bookings itself.
distanceintegerMetres.
durationintegerMinutes.
duration_in_trafficintegerpricing_reasonstringWhy staff must price the quote by hand, when its status is "needs pricing".
disposal_stopsarray of objectThe sites a waste job's load goes to, in order, with their addresses; the first is its drop. Given on a single job.
positionintegersite_idinteger (int64)namestringgate_fee_penceinteger (int64)addressAddressaddress_idinteger (int64)customer_idinteger (int64)quote_idinteger (int64)house_numberintegerhouse_namestringstreetstringtownstringcitystringcountystringpostcodestringMust be a live postcode in England, Scotland or Wales; stored as "AB1 2CD".
latitudenumberSent with longitude and match_level from a chosen suggestion; otherwise the address is found when saved.
longitudenumbermatch_levelstringHow the position was found. postcode means the postcode's centre was used.
One of:
housestreetpostcodemanualneeds_checkbooleanSet when staff should check the position. Ignored when sent.
job_idsarray of integer (int64)The jobs a quote booked when it was made became, one per leg.
created_atstringupdated_atstringsent_atstringWhen the quote was last emailed to the customer. A website quote is emailed when priced; a staff quote when staff send it. Ignored when sent, as are valid_until, accepted_at, accepted_by and terms_version.
valid_untilstring (date)The last day the quote can be accepted, set when it is priced from the business's quote_valid_days and never after the move date.
accepted_atstringaccepted_bystringOne of:
customerstaffterms_versionintegerThe version of the terms and conditions a customer accepted the quote under.
deposit_duebooleanSet by GET /v1/admin/jobs and GET /v1/admin/job/{id} while the job's quote has a sent deposit invoice still owed.
balance_duebooleanSet by GET /v1/admin/jobs and GET /v1/admin/job/{id} while the job's quote has a balance invoice, sent before the move, still owed.
leg_idinteger (int64) or nullwindow_startstringwindow_endstringfrom_yard_idinteger (int64)The yard a delivery is collected from.
load_kgintegerA waste load's weight, counted in the cargo's weight_kg.
recipient_namestringFrom the job's leg.
recipient_phonestringFrom the job's leg.
waste_kindsarray of stringFrom the job's leg.
from_addressAddressaddress_idinteger (int64)customer_idinteger (int64)quote_idinteger (int64)house_numberintegerhouse_namestringstreetstringtownstringcitystringcountystringpostcodestringMust be a live postcode in England, Scotland or Wales; stored as "AB1 2CD".
latitudenumberSent with longitude and match_level from a chosen suggestion; otherwise the address is found when saved.
longitudenumbermatch_levelstringHow the position was found. postcode means the postcode's centre was used.
One of:
housestreetpostcodemanualneeds_checkbooleanSet when staff should check the position. Ignored when sent.
to_addressAddressaddress_idinteger (int64)customer_idinteger (int64)quote_idinteger (int64)house_numberintegerhouse_namestringstreetstringtownstringcitystringcountystringpostcodestringMust be a live postcode in England, Scotland or Wales; stored as "AB1 2CD".
latitudenumberSent with longitude and match_level from a chosen suggestion; otherwise the address is found when saved.
longitudenumbermatch_levelstringHow the position was found. postcode means the postcode's centre was used.
One of:
housestreetpostcodemanualneeds_checkbooleanSet when staff should check the position. Ignored when sent.
from_property_typestringto_property_typestringfrom_accessstringto_accessstringfrom_floorintegerto_floorintegerfrom_liftbooleanto_liftbooleanfrom_carry_mintegerto_carry_mintegeritemsarray of Item or nullThe leg's items.
item_idinteger (int64)leg_idinteger (int64)On a quote, the leg the item travels on. Ignored when sent.
typestringcategorystringquantityintegerweightintegerKilograms.
lengthintegerCentimetres.
widthintegerheightintegerfragilebooleanhandling_minutesintegerOne person's minutes to handle the item; left out, they come from its size (20 a cubic metre).
floorintegerOn a quote, the floor the item is on; -1 is a basement and 0, the default, the ground floor.
roomintegerOn a quote moved room by room, the index in its rooms of the item's room.
roomsarray of stringIn the catalogue, the room types the item is usually found in.
largebooleanIn the catalogue, whether the item is large or awkward to move.
stepsarray of JobStepThe steps the driver recorded, earliest first. Given on a single job.
idinteger (int64), requiredclient_idstring, requiredkindstring, requiredOne of:
arrived_collectionloadedarrived_deliverydeliveredarrived_disposaltippedstopintegerThe disposal stop's position, on arrived_disposal and tipped.
driver_idinteger (int64) or null, requiredhappened_atstring, requiredreceived_atstring, requiredno_signature_reasonstringWhy a delivery has no signature, when the driver gave one.
proofarray of ProofLinkThe photos and signature it names, on staff's job read only.
idstring (uuid), requiredkindstring, requiredOne of:
photosignaturecontent_typestring, requiredurlstring, requiredexpires_atstring, required
issuesarray of JobIssueThe issues the driver reported, earliest first. Given on a single job.
idinteger (int64), requiredclient_idstring, requirednotestring, requireddriver_idinteger (int64) or null, requiredhappened_atstring, requiredreceived_atstring, requiredproofarray of ProofLinkThe photos and signature it names, on staff's job read only.
idstring (uuid), requiredkindstring, requiredOne of:
photosignaturecontent_typestring, requiredurlstring, requiredexpires_atstring, required
clockarray of ClockEventThe clock events on the job, earliest first, voided ones included. Given on a single job.
idinteger (int64), requiredclient_idstring, requiredjob_idinteger (int64), requiredstaff_idinteger (int64), requiredkindstring, requiredOne of:
inoutdriver_idinteger (int64) or null, requiredhappened_atstring, requiredreceived_atstring, requiredsourcestring, requiredOne of:
phoneofficeadded_byinteger (int64) or null, requiredThe staff member who added an office event.
notestring or null, requiredWhy the office added it.
replaces_idinteger (int64) or null, requiredThe event an office fix voided.
voided_atstring or null, requiredvoided_byinteger (int64) or null, requiredvoid_reasonstring or null, required
cargoCargoweight_kginteger, requiredFrom the job's items, by quantity. Ignored when sent.
volume_m3number, requiredFrom the job's items' length by width by height, by quantity. Ignored when sent.
hazardous_goodsarray of string, requiredOne of:
explosivegasflammablecombustibleorganicpoisonradioactivecorrosivepoisonousInhalationharmfulToWaterothertunnel_categorystringThe ADR tunnel restriction for what the job carries, B the strictest; left out when there is none.
One of:
BCDE
handlingHandlingLoading and unloading minutes. The estimate is each item's minutes, more for floors and carry, divided by the crew and multiplied by the business's handling_factor; a planner's override replaces it. Ignored when sent with a job.
loading_minutesintegerunloading_minutesintegerestimated_loading_minutesintegerestimated_unloading_minutesintegerloading_overrideintegerunloading_overrideinteger
signatureSignatureA job's signature rule, the job's override when set, otherwise the business's. Ignored when sent with a job.
rulestring, requiredWhat a driver must record on Delivered. The business's setting signature_rule is the default (signature_or_reason unless set).
One of:
signature_requiredsignature_or_reasonsignature_optionaloverrideSignatureRule or null, required
job_idinteger (int64)invoice_idinteger (int64)total_costinteger (int64)The estimated cost, in pence, on the first job of a quote.
net_totalinteger (int64)status_reasonstringgrand_totalinteger (int64)What the customer pays, in pence, on the first job of a quote.
job_descriptionstringnumber_of_staffintegerThe job's crew size, its driver included.
driver_idinteger (int64) or nullcrew_idsarray of integer (int64)Staff besides the driver.
pinnedboolean
{
"jobs": [
{
"quote_id": 0,
"uuid": "string",
"job_type": "house",
"house_by": "size",
"service_date": "string",
"appointment_time": "string",
"legs": [
{
"leg_id": 0,
"position": 0,
"from_address": {
"address_id": 0,
"customer_id": 0,
"quote_id": 0,
"house_number": 0,
"house_name": "string",
"street": "string",
"town": "string",
"city": "string",
"county": "string",
"postcode": "string",
"latitude": 0,
"longitude": 0,
"match_level": "house",
"needs_check": true
},
"to_address": {
"address_id": 0,
"customer_id": 0,
"quote_id": 0,
"house_number": 0,
"house_name": "string",
"street": "string",
"town": "string",
"city": "string",
"county": "string",
"postcode": "string",
"latitude": 0,
"longitude": 0,
"match_level": "house",
"needs_check": true
},
"from_yard_id": 0,
"from_access": {
"property_type": "string",
"notes": "string",
"floor": 0,
"lift": true,
"carry_m": 0
},
"to_access": {
"property_type": "string",
"notes": "string",
"floor": 0,
"lift": true,
"carry_m": 0
},
"recipient_name": "string",
"recipient_phone": "string",
"size_key": "string",
"waste_kinds": [
"string"
],
"window_start": "string",
"window_end": "string",
"load_kg": 0,
"items": [
{
"item_id": 0,
"leg_id": 0,
"type": "string",
"category": "string",
"quantity": 0,
"weight": 0,
"length": 0,
"width": 0,
"height": 0,
"fragile": true,
"handling_minutes": 0,
"floor": 0,
"room": 0,
"rooms": [
"bedroom"
],
"large": true
}
]
}
],
"special_instructions": "string",
"fullness": "light",
"rooms": [
{
"type": "bedroom",
"floor": 0,
"items": [
{
"item_id": 0,
"leg_id": 0,
"type": "string",
"category": "string",
"quantity": 0,
"weight": 0,
"length": 0,
"width": 0,
"height": 0,
"fragile": true,
"handling_minutes": 0,
"floor": 0,
"room": 0,
"rooms": [
"bedroom"
],
"large": true
}
]
}
],
"customer": {
"customer_id": 0,
"title": "string",
"first_name": "string",
"last_name": "string",
"email": "email",
"email_confirmed_at": "string",
"phone": "string",
"phones": [
"string"
]
},
"crew": 0,
"vehicle_id": 0,
"hours_minutes": 0,
"extras": [
{
"id": 0,
"quantity": 0,
"name": "string",
"price": 0
}
],
"total_value": 0,
"price_lines": [
{
"kind": "time",
"label": "string",
"quantity": 0,
"unit": 0,
"amount": 0
}
],
"vat": {
"registered": true,
"net": 0,
"vat": 0,
"gross": 0
},
"display": {
"kind": "fixed",
"amount": 0,
"upper": 0,
"hourly_rate": 0
},
"priced": {
"crew": 0,
"vehicles": [
{
"vehicle_id": 0,
"trips": 0
}
],
"hours": 0
},
"calculated": 0,
"estimated_cost": 0,
"margin": 0,
"below_margin": true,
"price_override": 0,
"deposit_pence": 0,
"deposit_online": "pay",
"pay_with": [
"stripe"
],
"card_balance": {
"amount_pence": 0,
"on": "date"
},
"deposit_override": 0,
"deposit_hold": {
"amount_pence": 0,
"hold_until": "string"
},
"override_reason": "string",
"status": "string",
"distance": 0,
"duration": 0,
"duration_in_traffic": 0,
"pricing_reason": "string",
"disposal_stops": [
{
"position": 0,
"site_id": 0,
"name": "string",
"gate_fee_pence": 0,
"address": {
"address_id": 0,
"customer_id": 0,
"quote_id": 0,
"house_number": 0,
"house_name": "string",
"street": "string",
"town": "string",
"city": "string",
"county": "string",
"postcode": "string",
"latitude": 0,
"longitude": 0,
"match_level": "house",
"needs_check": true
}
}
],
"job_ids": [
0
],
"created_at": "string",
"updated_at": "string",
"sent_at": "string",
"valid_until": "date",
"accepted_at": "string",
"accepted_by": "customer",
"terms_version": 0,
"deposit_due": true,
"balance_due": true,
"leg_id": 0,
"window_start": "string",
"window_end": "string",
"from_yard_id": 0,
"load_kg": 0,
"recipient_name": "string",
"recipient_phone": "string",
"waste_kinds": [
"general"
],
"from_address": {
"address_id": 0,
"customer_id": 0,
"quote_id": 0,
"house_number": 0,
"house_name": "string",
"street": "string",
"town": "string",
"city": "string",
"county": "string",
"postcode": "string",
"latitude": 0,
"longitude": 0,
"match_level": "house",
"needs_check": true
},
"to_address": {
"address_id": 0,
"customer_id": 0,
"quote_id": 0,
"house_number": 0,
"house_name": "string",
"street": "string",
"town": "string",
"city": "string",
"county": "string",
"postcode": "string",
"latitude": 0,
"longitude": 0,
"match_level": "house",
"needs_check": true
},
"from_property_type": "string",
"to_property_type": "string",
"from_access": "string",
"to_access": "string",
"from_floor": 0,
"to_floor": 0,
"from_lift": true,
"to_lift": true,
"from_carry_m": 0,
"to_carry_m": 0,
"items": [
{
"item_id": 0,
"leg_id": 0,
"type": "string",
"category": "string",
"quantity": 0,
"weight": 0,
"length": 0,
"width": 0,
"height": 0,
"fragile": true,
"handling_minutes": 0,
"floor": 0,
"room": 0,
"rooms": [
"bedroom"
],
"large": true
}
],
"steps": [
{
"id": 0,
"client_id": "string",
"kind": "arrived_collection",
"stop": 0,
"driver_id": 0,
"happened_at": "string",
"received_at": "string",
"no_signature_reason": "string",
"proof": [
{
"id": "uuid",
"kind": "photo",
"content_type": "string",
"url": "string",
"expires_at": "string"
}
]
}
],
"issues": [
{
"id": 0,
"client_id": "string",
"note": "string",
"driver_id": 0,
"happened_at": "string",
"received_at": "string",
"proof": [
{
"id": "uuid",
"kind": "photo",
"content_type": "string",
"url": "string",
"expires_at": "string"
}
]
}
],
"clock": [
{
"id": 0,
"client_id": "string",
"job_id": 0,
"staff_id": 0,
"kind": "in",
"driver_id": 0,
"happened_at": "string",
"received_at": "string",
"source": "phone",
"added_by": 0,
"note": "string",
"replaces_id": 0,
"voided_at": "string",
"voided_by": 0,
"void_reason": "string"
}
],
"cargo": {
"weight_kg": 0,
"volume_m3": 0,
"hazardous_goods": [
"explosive"
],
"tunnel_category": "B"
},
"handling": {
"loading_minutes": 0,
"unloading_minutes": 0,
"estimated_loading_minutes": 0,
"estimated_unloading_minutes": 0,
"loading_override": 0,
"unloading_override": 0
},
"signature": {
"rule": "signature_required",
"override": {}
},
"job_id": 0,
"invoice_id": 0,
"total_cost": 0,
"net_total": 0,
"status_reason": "string",
"grand_total": 0,
"job_description": "string",
"number_of_staff": 0,
"driver_id": 0,
"crew_ids": [
0
],
"pinned": true
}
]
}Response 400 · Error
The request is not valid.
errorobject, requiredcodestring, requiredA short machine-readable name, such as not_found.
messagestring, requiredWhat went wrong, for people.
request_idstring, requiredMatches the X-Request-ID response header.
{
"error": {
"code": "string",
"message": "string"
},
"request_id": "string"
}Response 401 · Error
No tenant key, or no valid session.
Fields as in A customer's jobs
Response 403 · Error
The session may not do this.
Fields as in A customer's jobs
Response 404 · Error
Not found, or not yours.
Fields as in A customer's jobs
Response 500 · Error
Something failed on our side.
Fields as in A customer's jobs