Tool reference
This reference is generated from the public server's registered tools. Use Getting started to connect and the Booking flow for a complete example.
Input schemas describe tool arguments. Output schemas describe the result's
structuredContent. Business failures set isError: true; inspect the
structured error before continuing. Tool annotations describe behavior and
do not grant authorization.
cancel_booking
Cancel a booking when the customer wants to stop the service, not change its time. Requires the confirmation number and the booking customer's phone number or email; a contact for an individual stop does not qualify. If both are supplied, either match suffices. Cancellation stops the booking, triggers cancellation notifications, and handles eligible payment releases or refunds. Fulfilled and completed bookings cannot be cancelled through this tool; other bookings remain subject to cancellation eligibility. An already-cancelled booking returns success without repeating cancellation.
Access: Anonymous access is allowed.
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"confirmation_number": {
"type": "string",
"description": "The 6-character booking confirmation number (e.g., 'ABC123'). Case-insensitive. Found in confirmation emails and SMS."
},
"phone_number": {
"type": "string",
"description": "Booking customer’s phone number, including country code. Provide this or email."
},
"email": {
"type": "string",
"description": "Booking customer’s email address. Provide this or phone_number."
},
"reason": {
"type": "string",
"description": "Reason for cancellation. Used for internal tracking, analytics, and included in crew notifications. If not provided, defaults to 'Other'.",
"enum": [
"Vehicle",
"Long ETA",
"I'm not ready",
"Other"
]
}
},
"required": [
"confirmation_number"
],
"anyOf": [
{
"required": [
"phone_number"
]
},
{
"required": [
"email"
]
}
]
}
Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"success": {
"type": "boolean",
"const": true
},
"confirmation_number": {
"type": "string"
},
"state": {
"type": "string",
"const": "cancelled"
},
"already_cancelled": {
"type": "boolean"
},
"error": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"type",
"message"
]
}
},
"anyOf": [
{
"required": [
"success",
"confirmation_number",
"state",
"already_cancelled"
]
},
{
"required": [
"error"
]
}
]
}
Annotations
{
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": false,
"readOnlyHint": false
}
create_booking
Book a booking session as stored, at the revision the customer confirmed, with a shared payment token. Use the session_id and revision from create_booking_session, get_booking_session, or update_booking_session, once its missing list is empty. The session's payment requirements give the amount and deadline the token must cover. This may authorize payment before scheduling or dispatch. Arrival means arrival at the stop the session's window is for. Use a new UUID idempotency key for each intended booking; retry the identical request with the same key. Reusing a key does not update the original booking. Change the session with update_booking_session, then book its new revision with a new key.
Access: Anonymous access is allowed.
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"session_id": {
"type": "string",
"pattern": "\\S",
"description": "Session ID returned by create_booking_session or create_estimates."
},
"expected_revision": {
"type": "integer",
"minimum": 0,
"description": "The session revision the customer confirmed. Booking fails if the session changed since."
},
"payment": {
"type": "object",
"additionalProperties": false,
"properties": {
"type": {
"type": "string",
"enum": [
"stripe_shared_payment_token"
],
"description": "Shared-token payment handler advertised by the session."
},
"shared_payment_token": {
"type": "string",
"pattern": "\\S",
"description": "Already-issued Stripe shared payment token covering the session's requested_amount_cents and confirmation_required_at. This tool consumes the token; it does not issue one."
}
},
"required": [
"type",
"shared_payment_token"
]
},
"idempotency_key": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
"description": "A UUID for this booking request. Reuse it only when retrying the same inputs."
}
},
"required": [
"session_id",
"expected_revision",
"payment",
"idempotency_key"
]
}
Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"success": {
"type": "boolean",
"const": true
},
"booking": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"confirmation_number": {
"type": "string"
},
"state": {
"type": "string"
},
"tip": {
"type": "integer",
"minimum": 0,
"description": "Agreed upfront crew tip in cents."
},
"time_zone": {
"type": "string"
},
"route": {
"type": "object",
"properties": {
"stops": {
"type": "array",
"items": {
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "Resolved formatted address."
},
"address2": {
"type": [
"string",
"null"
],
"description": "Effective apartment, suite, or unit."
},
"floor": {
"type": [
"string",
"null"
]
},
"elevator": {
"type": [
"boolean",
"null"
],
"description": "Null means unknown."
},
"approximate": {
"type": "boolean",
"description": "Whether this location is approximate rather than a precise booking address."
}
},
"required": [
"address",
"address2",
"floor",
"elevator",
"approximate"
]
}
},
"distance_miles": {
"type": "number",
"description": "Total travel distance across the ordered route, in miles."
},
"duration_minutes": {
"type": "number",
"description": "Travel time across the ordered route, in minutes; excludes loading and unloading."
}
},
"required": [
"stops",
"distance_miles",
"duration_minutes"
]
},
"quote": {
"type": "object",
"properties": {
"estimate_id": {
"type": "string",
"description": "Saved estimate for this option. Pass it as quote_id to pick this option on a session."
},
"product": {
"type": "string"
},
"product_slug": {
"type": "string",
"description": "Product identifier."
},
"description": {
"type": [
"string",
"null"
]
},
"price_display": {
"type": "string"
},
"price_range": {
"type": "string"
},
"pricing_type": {
"type": "string",
"enum": [
"fixed",
"variable"
]
},
"crew_size": {
"type": "integer"
},
"dimensions_display": {
"type": [
"string",
"null"
]
},
"pricing": {
"type": "object",
"description": "Quoted service totals include applicable fees and discounts. Tips are additional; account credits are not assumed. Variable prices estimate the work; fixed prices include labor.",
"properties": {
"currency": {
"type": "string",
"const": "usd"
},
"total_low_cents": {
"type": "integer"
},
"total_high_cents": {
"type": "integer"
},
"labor": {
"type": [
"object",
"null"
],
"description": "Estimated billed labor minutes, rounded at each stop; excludes route travel time. Null for fixed pricing, where labor is included.",
"properties": {
"per_minute_cents": {
"type": "integer"
},
"minutes_low": {
"type": "integer"
},
"minutes_high": {
"type": "integer"
}
},
"required": [
"per_minute_cents",
"minutes_low",
"minutes_high"
]
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"kind": {
"type": "string"
},
"name": {
"type": "string"
},
"low_cents": {
"type": "integer"
},
"high_cents": {
"type": "integer"
}
},
"required": [
"kind",
"name",
"low_cents",
"high_cents"
]
}
}
},
"required": [
"currency",
"total_low_cents",
"total_high_cents",
"labor",
"lines"
]
},
"addons": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"amount_cents": {
"type": "integer"
}
},
"required": [
"slug",
"name",
"description",
"amount_cents"
]
},
"description": "Selected services at their saved quoted amounts, already included in pricing totals."
}
},
"required": [
"estimate_id",
"product",
"product_slug",
"description",
"price_display",
"price_range",
"pricing_type",
"crew_size",
"dimensions_display",
"pricing",
"addons"
]
},
"arrival_window": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"start_at": {
"type": "string"
},
"end_at": {
"type": "string"
},
"label": {
"type": "string"
}
},
"required": [
"id",
"start_at",
"end_at",
"label"
]
}
},
"required": [
"id",
"confirmation_number",
"state",
"tip",
"time_zone",
"route",
"quote",
"arrival_window"
]
},
"error": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"type",
"message"
]
}
},
"anyOf": [
{
"required": [
"success",
"booking"
]
},
{
"required": [
"error"
]
}
]
}
Annotations
{
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true,
"readOnlyHint": false
}
create_booking_session
Start one booking session for a job: its stops in visit order and any add-ons. Returns the session with a quote for each option that serves those choices, its revision, and what it still needs. One stop gets labor-only help at that address (1 Lugger or 2 Luggers, no truck); two or more stops get vehicles. Pick an option with update_booking_session quote_id, choose a time with get_availability, add the customer and details, then book with create_booking. Approximate locations work for quotes; booking requires precise street addresses. This creates a draft, not a booking or an availability reservation.
Access: Anonymous access is allowed.
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"stops": {
"type": "array",
"minItems": 1,
"maxItems": 7,
"description": "Stops in visit order. One stop means work at a single location. Order is preserved.",
"items": {
"type": "object",
"properties": {
"address": {
"type": "string",
"pattern": "\\S",
"description": "Address, business, or landmark, including city and state. Approximate locations are accepted for quotes.",
"examples": [
"IKEA Emeryville, CA"
]
},
"address2": {
"type": "string",
"description": "Apartment, suite, or unit at this stop.",
"examples": [
"Apt 4B"
]
},
"floor": {
"type": "string",
"description": "Floor where items are picked up or delivered.",
"examples": [
"3",
"Ground",
"Basement"
]
},
"elevator": {
"type": "boolean",
"description": "Whether an elevator is available for moving the items. Omit if unknown."
}
},
"required": [
"address"
]
}
},
"addons": {
"type": "array",
"items": {
"type": "string",
"pattern": "\\S"
},
"description": "Complete selection of add-on slugs from available_addons. Selected services are included in the new quote; [] selects none."
}
},
"required": [
"stops"
]
}
Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"session": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"state": {
"type": "string"
},
"url": {
"type": "string"
},
"revision": {
"type": "integer",
"description": "Changes with every change to the session's choices or quote. Send it with update_booking_session and create_booking."
},
"product": {
"type": [
"string",
"null"
]
},
"customer": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"phone_number": {
"type": "string"
},
"email": {
"type": "string"
}
}
},
"description": {
"type": [
"string",
"null"
]
},
"instructions": {
"type": [
"string",
"null"
]
},
"tip_cents": {
"type": "integer"
},
"route": {
"type": [
"object",
"null"
],
"properties": {
"stops": {
"type": "array",
"items": {
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "Resolved formatted address."
},
"address2": {
"type": [
"string",
"null"
],
"description": "Effective apartment, suite, or unit."
},
"floor": {
"type": [
"string",
"null"
]
},
"elevator": {
"type": [
"boolean",
"null"
],
"description": "Null means unknown."
},
"approximate": {
"type": "boolean",
"description": "Whether this location is approximate rather than a precise booking address."
}
},
"required": [
"address",
"address2",
"floor",
"elevator",
"approximate"
]
}
},
"distance_miles": {
"type": "number",
"description": "Total travel distance across the ordered route, in miles."
},
"duration_minutes": {
"type": "number",
"description": "Travel time across the ordered route, in minutes; excludes loading and unloading."
}
},
"required": [
"stops",
"distance_miles",
"duration_minutes"
]
},
"quote": {
"type": [
"object",
"null"
],
"properties": {
"estimate_id": {
"type": "string",
"description": "Saved estimate for this option. Pass it as quote_id to pick this option on a session."
},
"product": {
"type": "string"
},
"product_slug": {
"type": "string",
"description": "Product identifier."
},
"description": {
"type": [
"string",
"null"
]
},
"price_display": {
"type": "string"
},
"price_range": {
"type": "string"
},
"pricing_type": {
"type": "string",
"enum": [
"fixed",
"variable"
]
},
"crew_size": {
"type": "integer"
},
"dimensions_display": {
"type": [
"string",
"null"
]
},
"pricing": {
"type": "object",
"description": "Quoted service totals include applicable fees and discounts. Tips are additional; account credits are not assumed. Variable prices estimate the work; fixed prices include labor.",
"properties": {
"currency": {
"type": "string",
"const": "usd"
},
"total_low_cents": {
"type": "integer"
},
"total_high_cents": {
"type": "integer"
},
"labor": {
"type": [
"object",
"null"
],
"description": "Estimated billed labor minutes, rounded at each stop; excludes route travel time. Null for fixed pricing, where labor is included.",
"properties": {
"per_minute_cents": {
"type": "integer"
},
"minutes_low": {
"type": "integer"
},
"minutes_high": {
"type": "integer"
}
},
"required": [
"per_minute_cents",
"minutes_low",
"minutes_high"
]
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"kind": {
"type": "string"
},
"name": {
"type": "string"
},
"low_cents": {
"type": "integer"
},
"high_cents": {
"type": "integer"
}
},
"required": [
"kind",
"name",
"low_cents",
"high_cents"
]
}
}
},
"required": [
"currency",
"total_low_cents",
"total_high_cents",
"labor",
"lines"
]
},
"addons": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"amount_cents": {
"type": "integer"
}
},
"required": [
"slug",
"name",
"description",
"amount_cents"
]
},
"description": "Selected services at their saved quoted amounts, already included in pricing totals."
}
},
"required": [
"estimate_id",
"product",
"product_slug",
"description",
"price_display",
"price_range",
"pricing_type",
"crew_size",
"dimensions_display",
"pricing",
"addons"
]
},
"quotes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"estimate_id": {
"type": "string",
"description": "Saved estimate for this option. Pass it as quote_id to pick this option on a session."
},
"product": {
"type": "string"
},
"product_slug": {
"type": "string",
"description": "Product identifier."
},
"description": {
"type": [
"string",
"null"
]
},
"price_display": {
"type": "string"
},
"price_range": {
"type": "string"
},
"pricing_type": {
"type": "string",
"enum": [
"fixed",
"variable"
]
},
"crew_size": {
"type": "integer"
},
"dimensions_display": {
"type": [
"string",
"null"
]
},
"pricing": {
"type": "object",
"description": "Quoted service totals include applicable fees and discounts. Tips are additional; account credits are not assumed. Variable prices estimate the work; fixed prices include labor.",
"properties": {
"currency": {
"type": "string",
"const": "usd"
},
"total_low_cents": {
"type": "integer"
},
"total_high_cents": {
"type": "integer"
},
"labor": {
"type": [
"object",
"null"
],
"description": "Estimated billed labor minutes, rounded at each stop; excludes route travel time. Null for fixed pricing, where labor is included.",
"properties": {
"per_minute_cents": {
"type": "integer"
},
"minutes_low": {
"type": "integer"
},
"minutes_high": {
"type": "integer"
}
},
"required": [
"per_minute_cents",
"minutes_low",
"minutes_high"
]
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"kind": {
"type": "string"
},
"name": {
"type": "string"
},
"low_cents": {
"type": "integer"
},
"high_cents": {
"type": "integer"
}
},
"required": [
"kind",
"name",
"low_cents",
"high_cents"
]
}
}
},
"required": [
"currency",
"total_low_cents",
"total_high_cents",
"labor",
"lines"
]
},
"addons": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"amount_cents": {
"type": "integer"
}
},
"required": [
"slug",
"name",
"description",
"amount_cents"
]
},
"description": "Selected services at their saved quoted amounts, already included in pricing totals."
}
},
"required": [
"estimate_id",
"product",
"product_slug",
"description",
"price_display",
"price_range",
"pricing_type",
"crew_size",
"dimensions_display",
"pricing",
"addons"
]
},
"description": "One quote per option these choices can book. Listed until an option is picked; get_booking_session always lists them. Pick one with update_booking_session quote_id."
},
"arrival_window": {
"description": "Scheduled windows have exact start and end times. On-demand windows have null times; their label is the arrival duration from booking, such as Within 1 hour. available says whether the window is still offered.",
"type": [
"object",
"null"
],
"properties": {
"id": {
"type": "string"
},
"start_at": {
"type": [
"string",
"null"
]
},
"end_at": {
"type": [
"string",
"null"
]
},
"label": {
"type": [
"string",
"null"
]
},
"available": {
"type": "boolean"
},
"arrival_window_ref": {
"type": "string",
"enum": [
"origin",
"destination"
]
}
},
"required": [
"id",
"start_at",
"end_at",
"label",
"available",
"arrival_window_ref"
]
},
"missing": {
"type": "array",
"items": {
"type": "string"
},
"description": "What the session still needs before booking. Payment requirements appear once this is empty."
},
"payment": {
"type": "object",
"properties": {
"handlers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "stripe_shared_payment_token"
},
"config": {
"type": "object",
"properties": {
"network_business_profile": {
"type": "string"
}
},
"required": [
"network_business_profile"
]
},
"requirements": {
"type": "object",
"properties": {
"currency": {
"type": "string",
"const": "usd"
},
"requested_amount_cents": {
"type": "integer"
},
"confirmation_required_at": {
"type": "string"
}
},
"required": [
"currency",
"requested_amount_cents",
"confirmation_required_at"
]
}
},
"required": [
"type",
"config",
"requirements"
]
}
}
},
"required": [
"handlers"
]
},
"attempt_status": {
"type": [
"string",
"null"
],
"enum": [
null,
"active",
"failed",
"unknown",
"succeeded"
]
},
"booking": {
"type": [
"object",
"null"
],
"properties": {
"id": {
"type": "string"
},
"confirmation_number": {
"type": "string"
},
"state": {
"type": "string"
},
"tip": {
"type": "integer",
"minimum": 0,
"description": "Agreed upfront crew tip in cents."
},
"time_zone": {
"type": "string"
},
"route": {
"type": "object",
"properties": {
"stops": {
"type": "array",
"items": {
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "Resolved formatted address."
},
"address2": {
"type": [
"string",
"null"
],
"description": "Effective apartment, suite, or unit."
},
"floor": {
"type": [
"string",
"null"
]
},
"elevator": {
"type": [
"boolean",
"null"
],
"description": "Null means unknown."
},
"approximate": {
"type": "boolean",
"description": "Whether this location is approximate rather than a precise booking address."
}
},
"required": [
"address",
"address2",
"floor",
"elevator",
"approximate"
]
}
},
"distance_miles": {
"type": "number",
"description": "Total travel distance across the ordered route, in miles."
},
"duration_minutes": {
"type": "number",
"description": "Travel time across the ordered route, in minutes; excludes loading and unloading."
}
},
"required": [
"stops",
"distance_miles",
"duration_minutes"
]
},
"quote": {
"type": "object",
"properties": {
"estimate_id": {
"type": "string",
"description": "Saved estimate for this option. Pass it as quote_id to pick this option on a session."
},
"product": {
"type": "string"
},
"product_slug": {
"type": "string",
"description": "Product identifier."
},
"description": {
"type": [
"string",
"null"
]
},
"price_display": {
"type": "string"
},
"price_range": {
"type": "string"
},
"pricing_type": {
"type": "string",
"enum": [
"fixed",
"variable"
]
},
"crew_size": {
"type": "integer"
},
"dimensions_display": {
"type": [
"string",
"null"
]
},
"pricing": {
"type": "object",
"description": "Quoted service totals include applicable fees and discounts. Tips are additional; account credits are not assumed. Variable prices estimate the work; fixed prices include labor.",
"properties": {
"currency": {
"type": "string",
"const": "usd"
},
"total_low_cents": {
"type": "integer"
},
"total_high_cents": {
"type": "integer"
},
"labor": {
"type": [
"object",
"null"
],
"description": "Estimated billed labor minutes, rounded at each stop; excludes route travel time. Null for fixed pricing, where labor is included.",
"properties": {
"per_minute_cents": {
"type": "integer"
},
"minutes_low": {
"type": "integer"
},
"minutes_high": {
"type": "integer"
}
},
"required": [
"per_minute_cents",
"minutes_low",
"minutes_high"
]
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"kind": {
"type": "string"
},
"name": {
"type": "string"
},
"low_cents": {
"type": "integer"
},
"high_cents": {
"type": "integer"
}
},
"required": [
"kind",
"name",
"low_cents",
"high_cents"
]
}
}
},
"required": [
"currency",
"total_low_cents",
"total_high_cents",
"labor",
"lines"
]
},
"addons": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"amount_cents": {
"type": "integer"
}
},
"required": [
"slug",
"name",
"description",
"amount_cents"
]
},
"description": "Selected services at their saved quoted amounts, already included in pricing totals."
}
},
"required": [
"estimate_id",
"product",
"product_slug",
"description",
"price_display",
"price_range",
"pricing_type",
"crew_size",
"dimensions_display",
"pricing",
"addons"
]
},
"arrival_window": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"start_at": {
"type": "string"
},
"end_at": {
"type": "string"
},
"label": {
"type": "string"
}
},
"required": [
"id",
"start_at",
"end_at",
"label"
]
}
},
"required": [
"id",
"confirmation_number",
"state",
"tip",
"time_zone",
"route",
"quote",
"arrival_window"
]
}
},
"required": [
"id",
"state",
"url",
"revision",
"product",
"customer",
"description",
"instructions",
"tip_cents",
"route",
"quote",
"quotes",
"arrival_window",
"missing",
"payment",
"attempt_status",
"booking"
]
},
"error": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"type",
"message"
]
}
},
"anyOf": [
{
"required": [
"session"
]
},
{
"required": [
"error"
]
}
]
}
Annotations
{
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true,
"readOnlyHint": false
}
create_estimates
Get moving and delivery quotes before choosing a service or booking a crew. Supply one to seven stops in visit order. Returns saved estimates for available options, route details, and a booking session_id and checkout url for each estimate. One stop quotes labor-only help at that address (1 Lugger or 2 Luggers, no truck); two or more stops quote vehicles. Supply addons to return only options supporting every selected service. Each estimate's session_id is a booking session for that option: share its url so the customer can book on Lugg, or continue it with update_booking_session, get_availability and create_booking like any session. To keep every option's quote in one session instead, call create_booking_session. This creates quotes and booking sessions, not bookings or availability reservations.
Access: Anonymous access is allowed.
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"stops": {
"type": "array",
"minItems": 1,
"maxItems": 7,
"description": "Stops in visit order. One stop means work at a single location. Order is preserved.",
"items": {
"type": "object",
"properties": {
"address": {
"type": "string",
"pattern": "\\S",
"description": "Address, business, or landmark, including city and state. Approximate locations are accepted for quotes.",
"examples": [
"IKEA Emeryville, CA"
]
},
"address2": {
"type": "string",
"description": "Apartment, suite, or unit at this stop.",
"examples": [
"Apt 4B"
]
},
"floor": {
"type": "string",
"description": "Floor where items are picked up or delivered.",
"examples": [
"3",
"Ground",
"Basement"
]
},
"elevator": {
"type": "boolean",
"description": "Whether an elevator is available for moving the items. Omit if unknown."
}
},
"required": [
"address"
]
}
},
"addons": {
"type": "array",
"items": {
"type": "string",
"pattern": "\\S"
},
"description": "Complete selection of add-on slugs from available_addons. Selected services are included in the new quote; [] selects none."
},
"move_size": {
"type": "string",
"enum": [
"small",
"medium",
"large",
"xl"
],
"description": "Only changes the order of options; it does not select an option or change pricing. small: few items/furniture. medium: partial move. large/xl: full apartment/house."
}
},
"required": [
"stops"
]
}
Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"route": {
"type": "object",
"properties": {
"stops": {
"type": "array",
"items": {
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "Resolved formatted address."
},
"address2": {
"type": [
"string",
"null"
],
"description": "Effective apartment, suite, or unit."
},
"floor": {
"type": [
"string",
"null"
]
},
"elevator": {
"type": [
"boolean",
"null"
],
"description": "Null means unknown."
},
"approximate": {
"type": "boolean",
"description": "Whether this location is approximate rather than a precise booking address."
}
},
"required": [
"address",
"address2",
"floor",
"elevator",
"approximate"
]
},
"minItems": 1,
"maxItems": 7
},
"distance_miles": {
"type": "number",
"description": "Total travel distance across the ordered route, in miles."
},
"duration_minutes": {
"type": "number",
"description": "Travel time across the ordered route, in minutes; excludes loading and unloading."
}
},
"required": [
"stops",
"distance_miles",
"duration_minutes"
]
},
"estimates": {
"type": "array",
"items": {
"type": "object",
"properties": {
"estimate_id": {
"type": "string",
"description": "Saved estimate for this option. Pass it as quote_id to pick this option on a session."
},
"product": {
"type": "string"
},
"product_slug": {
"type": "string",
"description": "Product identifier."
},
"description": {
"type": [
"string",
"null"
]
},
"price_display": {
"type": "string"
},
"price_range": {
"type": "string"
},
"pricing_type": {
"type": "string",
"enum": [
"fixed",
"variable"
]
},
"crew_size": {
"type": "integer"
},
"dimensions_display": {
"type": [
"string",
"null"
]
},
"pricing": {
"type": "object",
"description": "Quoted service totals include applicable fees and discounts. Tips are additional; account credits are not assumed. Variable prices estimate the work; fixed prices include labor.",
"properties": {
"currency": {
"type": "string",
"const": "usd"
},
"total_low_cents": {
"type": "integer"
},
"total_high_cents": {
"type": "integer"
},
"labor": {
"type": [
"object",
"null"
],
"description": "Estimated billed labor minutes, rounded at each stop; excludes route travel time. Null for fixed pricing, where labor is included.",
"properties": {
"per_minute_cents": {
"type": "integer"
},
"minutes_low": {
"type": "integer"
},
"minutes_high": {
"type": "integer"
}
},
"required": [
"per_minute_cents",
"minutes_low",
"minutes_high"
]
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"kind": {
"type": "string"
},
"name": {
"type": "string"
},
"low_cents": {
"type": "integer"
},
"high_cents": {
"type": "integer"
}
},
"required": [
"kind",
"name",
"low_cents",
"high_cents"
]
}
}
},
"required": [
"currency",
"total_low_cents",
"total_high_cents",
"labor",
"lines"
]
},
"addons": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"amount_cents": {
"type": "integer"
}
},
"required": [
"slug",
"name",
"description",
"amount_cents"
]
},
"description": "Selected services at their saved quoted amounts, already included in pricing totals."
},
"available_addons": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"amount_cents": {
"type": "integer"
}
},
"required": [
"slug",
"name",
"description",
"amount_cents"
]
},
"description": "Eligible optional services. Add them to this estimate's session with update_booking_session addons, or request new estimates with the complete list of slugs."
},
"session_id": {
"type": "string",
"description": "Booking session for this option. Continue it with get_booking_session, update_booking_session, get_availability and create_booking."
},
"url": {
"type": "string",
"description": "Checkout page for this estimate's booking session. Share it so the customer can review the option and book on Lugg."
}
},
"required": [
"estimate_id",
"product",
"product_slug",
"description",
"price_display",
"price_range",
"pricing_type",
"crew_size",
"dimensions_display",
"pricing",
"addons",
"available_addons",
"session_id",
"url"
]
}
}
},
"anyOf": [
{
"required": [
"route",
"estimates"
]
},
{
"properties": {
"error": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"type",
"message"
]
}
},
"required": [
"error"
]
}
]
}
Annotations
{
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true,
"readOnlyHint": false
}
get_availability
Find arrival windows for a booking session's chosen option and stops. Omit date to browse today through six days later, within the booking horizon: up to three scheduled windows per day, plus today's on-demand options. Supply a date to see every scheduled window that day. Dates use the service region's timezone. Windows describe arrival at the first stop, or at the last stop with arrival_window_ref destination, and do not reserve availability. Save the selected window's id with update_booking_session; the window keeps the stop it is for.
Access: Anonymous access is allowed.
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"session_id": {
"type": "string",
"pattern": "\\S",
"description": "Booking session ID. The session needs a chosen option and a pickup first."
},
"date": {
"type": "string",
"description": "Date in the service region’s timezone, YYYY-MM-DD. Omit for a seven-day summary. Must be between today and latest_bookable_date."
},
"arrival_window_ref": {
"type": "string",
"enum": [
"origin",
"destination"
],
"description": "origin (default) lists windows for the crew's arrival at the first stop; destination lists windows for arrival at the last stop."
}
},
"required": [
"session_id"
]
}
Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"session_id": {
"type": "string"
},
"time_zone": {
"type": "string",
"description": "Service region timezone used for dates and arrival windows."
},
"arrival_window_ref": {
"type": "string",
"enum": [
"origin",
"destination"
]
},
"start_date": {
"type": "string"
},
"end_date": {
"type": "string"
},
"latest_bookable_date": {
"type": "string",
"description": "Last date currently accepted by get_availability, YYYY-MM-DD in time_zone."
},
"on_demand": {
"type": "array",
"description": "Available on-demand options for today; empty when searching only a future date.",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Pass unchanged as update_booking_session.arrival_window_id for this session. Availability is not reserved."
},
"start_at": {
"type": "string",
"description": "Arrival window start, ISO 8601 with the service region’s timezone offset."
},
"end_at": {
"type": "string",
"description": "Arrival window end, ISO 8601 with the service region’s timezone offset."
},
"label": {
"type": "string",
"description": "Human-readable arrival window."
}
},
"required": [
"id",
"start_at",
"end_at",
"label"
]
}
},
"days": {
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string"
},
"has_more": {
"type": "boolean",
"description": "More scheduled windows exist for this day. Call get_availability with this date to see all of them; false for explicit-date responses."
},
"arrival_windows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Pass unchanged as update_booking_session.arrival_window_id for this session. Availability is not reserved."
},
"start_at": {
"type": "string",
"description": "Arrival window start, ISO 8601 with the service region’s timezone offset."
},
"end_at": {
"type": "string",
"description": "Arrival window end, ISO 8601 with the service region’s timezone offset."
},
"label": {
"type": "string",
"description": "Human-readable arrival window."
}
},
"required": [
"id",
"start_at",
"end_at",
"label"
]
}
}
},
"required": [
"date",
"has_more",
"arrival_windows"
]
}
},
"error": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"type",
"message"
]
}
},
"anyOf": [
{
"required": [
"session_id",
"time_zone",
"arrival_window_ref",
"start_date",
"end_date",
"latest_bookable_date",
"on_demand",
"days"
]
},
{
"required": [
"error"
]
}
]
}
Annotations
{
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true,
"readOnlyHint": true
}
get_booking_session
Read a booking session's choices, quotes, revision, missing details, and payment requirements once complete. Does not book, reserve a window, or charge the customer.
Access: Anonymous access is allowed.
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"session_id": {
"type": "string",
"pattern": "\\S",
"description": "Session ID returned by create_booking_session or create_estimates."
}
},
"required": [
"session_id"
]
}
Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"session": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"state": {
"type": "string"
},
"url": {
"type": "string"
},
"revision": {
"type": "integer",
"description": "Changes with every change to the session's choices or quote. Send it with update_booking_session and create_booking."
},
"product": {
"type": [
"string",
"null"
]
},
"customer": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"phone_number": {
"type": "string"
},
"email": {
"type": "string"
}
}
},
"description": {
"type": [
"string",
"null"
]
},
"instructions": {
"type": [
"string",
"null"
]
},
"tip_cents": {
"type": "integer"
},
"route": {
"type": [
"object",
"null"
],
"properties": {
"stops": {
"type": "array",
"items": {
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "Resolved formatted address."
},
"address2": {
"type": [
"string",
"null"
],
"description": "Effective apartment, suite, or unit."
},
"floor": {
"type": [
"string",
"null"
]
},
"elevator": {
"type": [
"boolean",
"null"
],
"description": "Null means unknown."
},
"approximate": {
"type": "boolean",
"description": "Whether this location is approximate rather than a precise booking address."
}
},
"required": [
"address",
"address2",
"floor",
"elevator",
"approximate"
]
}
},
"distance_miles": {
"type": "number",
"description": "Total travel distance across the ordered route, in miles."
},
"duration_minutes": {
"type": "number",
"description": "Travel time across the ordered route, in minutes; excludes loading and unloading."
}
},
"required": [
"stops",
"distance_miles",
"duration_minutes"
]
},
"quote": {
"type": [
"object",
"null"
],
"properties": {
"estimate_id": {
"type": "string",
"description": "Saved estimate for this option. Pass it as quote_id to pick this option on a session."
},
"product": {
"type": "string"
},
"product_slug": {
"type": "string",
"description": "Product identifier."
},
"description": {
"type": [
"string",
"null"
]
},
"price_display": {
"type": "string"
},
"price_range": {
"type": "string"
},
"pricing_type": {
"type": "string",
"enum": [
"fixed",
"variable"
]
},
"crew_size": {
"type": "integer"
},
"dimensions_display": {
"type": [
"string",
"null"
]
},
"pricing": {
"type": "object",
"description": "Quoted service totals include applicable fees and discounts. Tips are additional; account credits are not assumed. Variable prices estimate the work; fixed prices include labor.",
"properties": {
"currency": {
"type": "string",
"const": "usd"
},
"total_low_cents": {
"type": "integer"
},
"total_high_cents": {
"type": "integer"
},
"labor": {
"type": [
"object",
"null"
],
"description": "Estimated billed labor minutes, rounded at each stop; excludes route travel time. Null for fixed pricing, where labor is included.",
"properties": {
"per_minute_cents": {
"type": "integer"
},
"minutes_low": {
"type": "integer"
},
"minutes_high": {
"type": "integer"
}
},
"required": [
"per_minute_cents",
"minutes_low",
"minutes_high"
]
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"kind": {
"type": "string"
},
"name": {
"type": "string"
},
"low_cents": {
"type": "integer"
},
"high_cents": {
"type": "integer"
}
},
"required": [
"kind",
"name",
"low_cents",
"high_cents"
]
}
}
},
"required": [
"currency",
"total_low_cents",
"total_high_cents",
"labor",
"lines"
]
},
"addons": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"amount_cents": {
"type": "integer"
}
},
"required": [
"slug",
"name",
"description",
"amount_cents"
]
},
"description": "Selected services at their saved quoted amounts, already included in pricing totals."
}
},
"required": [
"estimate_id",
"product",
"product_slug",
"description",
"price_display",
"price_range",
"pricing_type",
"crew_size",
"dimensions_display",
"pricing",
"addons"
]
},
"quotes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"estimate_id": {
"type": "string",
"description": "Saved estimate for this option. Pass it as quote_id to pick this option on a session."
},
"product": {
"type": "string"
},
"product_slug": {
"type": "string",
"description": "Product identifier."
},
"description": {
"type": [
"string",
"null"
]
},
"price_display": {
"type": "string"
},
"price_range": {
"type": "string"
},
"pricing_type": {
"type": "string",
"enum": [
"fixed",
"variable"
]
},
"crew_size": {
"type": "integer"
},
"dimensions_display": {
"type": [
"string",
"null"
]
},
"pricing": {
"type": "object",
"description": "Quoted service totals include applicable fees and discounts. Tips are additional; account credits are not assumed. Variable prices estimate the work; fixed prices include labor.",
"properties": {
"currency": {
"type": "string",
"const": "usd"
},
"total_low_cents": {
"type": "integer"
},
"total_high_cents": {
"type": "integer"
},
"labor": {
"type": [
"object",
"null"
],
"description": "Estimated billed labor minutes, rounded at each stop; excludes route travel time. Null for fixed pricing, where labor is included.",
"properties": {
"per_minute_cents": {
"type": "integer"
},
"minutes_low": {
"type": "integer"
},
"minutes_high": {
"type": "integer"
}
},
"required": [
"per_minute_cents",
"minutes_low",
"minutes_high"
]
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"kind": {
"type": "string"
},
"name": {
"type": "string"
},
"low_cents": {
"type": "integer"
},
"high_cents": {
"type": "integer"
}
},
"required": [
"kind",
"name",
"low_cents",
"high_cents"
]
}
}
},
"required": [
"currency",
"total_low_cents",
"total_high_cents",
"labor",
"lines"
]
},
"addons": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"amount_cents": {
"type": "integer"
}
},
"required": [
"slug",
"name",
"description",
"amount_cents"
]
},
"description": "Selected services at their saved quoted amounts, already included in pricing totals."
}
},
"required": [
"estimate_id",
"product",
"product_slug",
"description",
"price_display",
"price_range",
"pricing_type",
"crew_size",
"dimensions_display",
"pricing",
"addons"
]
},
"description": "One quote per option these choices can book. Listed until an option is picked; get_booking_session always lists them. Pick one with update_booking_session quote_id."
},
"arrival_window": {
"description": "Scheduled windows have exact start and end times. On-demand windows have null times; their label is the arrival duration from booking, such as Within 1 hour. available says whether the window is still offered.",
"type": [
"object",
"null"
],
"properties": {
"id": {
"type": "string"
},
"start_at": {
"type": [
"string",
"null"
]
},
"end_at": {
"type": [
"string",
"null"
]
},
"label": {
"type": [
"string",
"null"
]
},
"available": {
"type": "boolean"
},
"arrival_window_ref": {
"type": "string",
"enum": [
"origin",
"destination"
]
}
},
"required": [
"id",
"start_at",
"end_at",
"label",
"available",
"arrival_window_ref"
]
},
"missing": {
"type": "array",
"items": {
"type": "string"
},
"description": "What the session still needs before booking. Payment requirements appear once this is empty."
},
"payment": {
"type": "object",
"properties": {
"handlers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "stripe_shared_payment_token"
},
"config": {
"type": "object",
"properties": {
"network_business_profile": {
"type": "string"
}
},
"required": [
"network_business_profile"
]
},
"requirements": {
"type": "object",
"properties": {
"currency": {
"type": "string",
"const": "usd"
},
"requested_amount_cents": {
"type": "integer"
},
"confirmation_required_at": {
"type": "string"
}
},
"required": [
"currency",
"requested_amount_cents",
"confirmation_required_at"
]
}
},
"required": [
"type",
"config",
"requirements"
]
}
}
},
"required": [
"handlers"
]
},
"attempt_status": {
"type": [
"string",
"null"
],
"enum": [
null,
"active",
"failed",
"unknown",
"succeeded"
]
},
"booking": {
"type": [
"object",
"null"
],
"properties": {
"id": {
"type": "string"
},
"confirmation_number": {
"type": "string"
},
"state": {
"type": "string"
},
"tip": {
"type": "integer",
"minimum": 0,
"description": "Agreed upfront crew tip in cents."
},
"time_zone": {
"type": "string"
},
"route": {
"type": "object",
"properties": {
"stops": {
"type": "array",
"items": {
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "Resolved formatted address."
},
"address2": {
"type": [
"string",
"null"
],
"description": "Effective apartment, suite, or unit."
},
"floor": {
"type": [
"string",
"null"
]
},
"elevator": {
"type": [
"boolean",
"null"
],
"description": "Null means unknown."
},
"approximate": {
"type": "boolean",
"description": "Whether this location is approximate rather than a precise booking address."
}
},
"required": [
"address",
"address2",
"floor",
"elevator",
"approximate"
]
}
},
"distance_miles": {
"type": "number",
"description": "Total travel distance across the ordered route, in miles."
},
"duration_minutes": {
"type": "number",
"description": "Travel time across the ordered route, in minutes; excludes loading and unloading."
}
},
"required": [
"stops",
"distance_miles",
"duration_minutes"
]
},
"quote": {
"type": "object",
"properties": {
"estimate_id": {
"type": "string",
"description": "Saved estimate for this option. Pass it as quote_id to pick this option on a session."
},
"product": {
"type": "string"
},
"product_slug": {
"type": "string",
"description": "Product identifier."
},
"description": {
"type": [
"string",
"null"
]
},
"price_display": {
"type": "string"
},
"price_range": {
"type": "string"
},
"pricing_type": {
"type": "string",
"enum": [
"fixed",
"variable"
]
},
"crew_size": {
"type": "integer"
},
"dimensions_display": {
"type": [
"string",
"null"
]
},
"pricing": {
"type": "object",
"description": "Quoted service totals include applicable fees and discounts. Tips are additional; account credits are not assumed. Variable prices estimate the work; fixed prices include labor.",
"properties": {
"currency": {
"type": "string",
"const": "usd"
},
"total_low_cents": {
"type": "integer"
},
"total_high_cents": {
"type": "integer"
},
"labor": {
"type": [
"object",
"null"
],
"description": "Estimated billed labor minutes, rounded at each stop; excludes route travel time. Null for fixed pricing, where labor is included.",
"properties": {
"per_minute_cents": {
"type": "integer"
},
"minutes_low": {
"type": "integer"
},
"minutes_high": {
"type": "integer"
}
},
"required": [
"per_minute_cents",
"minutes_low",
"minutes_high"
]
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"kind": {
"type": "string"
},
"name": {
"type": "string"
},
"low_cents": {
"type": "integer"
},
"high_cents": {
"type": "integer"
}
},
"required": [
"kind",
"name",
"low_cents",
"high_cents"
]
}
}
},
"required": [
"currency",
"total_low_cents",
"total_high_cents",
"labor",
"lines"
]
},
"addons": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"amount_cents": {
"type": "integer"
}
},
"required": [
"slug",
"name",
"description",
"amount_cents"
]
},
"description": "Selected services at their saved quoted amounts, already included in pricing totals."
}
},
"required": [
"estimate_id",
"product",
"product_slug",
"description",
"price_display",
"price_range",
"pricing_type",
"crew_size",
"dimensions_display",
"pricing",
"addons"
]
},
"arrival_window": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"start_at": {
"type": "string"
},
"end_at": {
"type": "string"
},
"label": {
"type": "string"
}
},
"required": [
"id",
"start_at",
"end_at",
"label"
]
}
},
"required": [
"id",
"confirmation_number",
"state",
"tip",
"time_zone",
"route",
"quote",
"arrival_window"
]
}
},
"required": [
"id",
"state",
"url",
"revision",
"product",
"customer",
"description",
"instructions",
"tip_cents",
"route",
"quote",
"quotes",
"arrival_window",
"missing",
"payment",
"attempt_status",
"booking"
]
},
"error": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"type",
"message"
]
}
},
"anyOf": [
{
"required": [
"session"
]
},
{
"required": [
"error"
]
}
]
}
Annotations
{
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true,
"readOnlyHint": false
}
update_booking_session
Change a booking session's choices at the revision you last read; a stale revision fails with session_changed. Omitted fields keep their values; null clears a field. Customer fields merge individually. Changing stops or add-ons re-prices the chosen option; an option that can't serve the new choices, such as a vehicle when the stops drop to one, loses its quote and must be picked again. Does not book, reserve a window, or charge the customer.
Access: Anonymous access is allowed.
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"session_id": {
"type": "string",
"pattern": "\\S"
},
"expected_revision": {
"type": "integer",
"minimum": 0,
"description": "The session revision you last read."
},
"stops": {
"type": "array",
"minItems": 1,
"maxItems": 7,
"description": "Stops in visit order. One stop means work at a single location. Order is preserved.",
"items": {
"type": "object",
"properties": {
"address": {
"type": "string",
"pattern": "\\S",
"description": "Address, business, or landmark, including city and state. Approximate locations are accepted for quotes.",
"examples": [
"IKEA Emeryville, CA"
]
},
"address2": {
"type": "string",
"description": "Apartment, suite, or unit at this stop.",
"examples": [
"Apt 4B"
]
},
"floor": {
"type": "string",
"description": "Floor where items are picked up or delivered.",
"examples": [
"3",
"Ground",
"Basement"
]
},
"elevator": {
"type": "boolean",
"description": "Whether an elevator is available for moving the items. Omit if unknown."
}
},
"required": [
"address"
]
}
},
"quote_id": {
"type": "string",
"pattern": "\\S",
"description": "estimate_id of a quote from this session's quotes; picks that option at that price."
},
"arrival_window_id": {
"type": [
"string",
"null"
],
"pattern": "\\S",
"description": "A window id from get_availability; null clears the window."
},
"addons": {
"type": "array",
"items": {
"type": "string",
"pattern": "\\S"
},
"description": "Complete selection of add-on slugs from available_addons. Selected services are included in the new quote; [] selects none."
},
"customer": {
"type": [
"object",
"null"
],
"additionalProperties": false,
"properties": {
"name": {
"type": [
"string",
"null"
]
},
"phone_number": {
"type": [
"string",
"null"
]
},
"email": {
"type": [
"string",
"null"
]
}
}
},
"description": {
"type": [
"string",
"null"
]
},
"instructions": {
"type": [
"string",
"null"
]
},
"tip_cents": {
"type": "integer",
"anyOf": [
{
"const": 0
},
{
"minimum": 100
}
]
}
},
"required": [
"session_id",
"expected_revision"
]
}
Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"session": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"state": {
"type": "string"
},
"url": {
"type": "string"
},
"revision": {
"type": "integer",
"description": "Changes with every change to the session's choices or quote. Send it with update_booking_session and create_booking."
},
"product": {
"type": [
"string",
"null"
]
},
"customer": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"phone_number": {
"type": "string"
},
"email": {
"type": "string"
}
}
},
"description": {
"type": [
"string",
"null"
]
},
"instructions": {
"type": [
"string",
"null"
]
},
"tip_cents": {
"type": "integer"
},
"route": {
"type": [
"object",
"null"
],
"properties": {
"stops": {
"type": "array",
"items": {
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "Resolved formatted address."
},
"address2": {
"type": [
"string",
"null"
],
"description": "Effective apartment, suite, or unit."
},
"floor": {
"type": [
"string",
"null"
]
},
"elevator": {
"type": [
"boolean",
"null"
],
"description": "Null means unknown."
},
"approximate": {
"type": "boolean",
"description": "Whether this location is approximate rather than a precise booking address."
}
},
"required": [
"address",
"address2",
"floor",
"elevator",
"approximate"
]
}
},
"distance_miles": {
"type": "number",
"description": "Total travel distance across the ordered route, in miles."
},
"duration_minutes": {
"type": "number",
"description": "Travel time across the ordered route, in minutes; excludes loading and unloading."
}
},
"required": [
"stops",
"distance_miles",
"duration_minutes"
]
},
"quote": {
"type": [
"object",
"null"
],
"properties": {
"estimate_id": {
"type": "string",
"description": "Saved estimate for this option. Pass it as quote_id to pick this option on a session."
},
"product": {
"type": "string"
},
"product_slug": {
"type": "string",
"description": "Product identifier."
},
"description": {
"type": [
"string",
"null"
]
},
"price_display": {
"type": "string"
},
"price_range": {
"type": "string"
},
"pricing_type": {
"type": "string",
"enum": [
"fixed",
"variable"
]
},
"crew_size": {
"type": "integer"
},
"dimensions_display": {
"type": [
"string",
"null"
]
},
"pricing": {
"type": "object",
"description": "Quoted service totals include applicable fees and discounts. Tips are additional; account credits are not assumed. Variable prices estimate the work; fixed prices include labor.",
"properties": {
"currency": {
"type": "string",
"const": "usd"
},
"total_low_cents": {
"type": "integer"
},
"total_high_cents": {
"type": "integer"
},
"labor": {
"type": [
"object",
"null"
],
"description": "Estimated billed labor minutes, rounded at each stop; excludes route travel time. Null for fixed pricing, where labor is included.",
"properties": {
"per_minute_cents": {
"type": "integer"
},
"minutes_low": {
"type": "integer"
},
"minutes_high": {
"type": "integer"
}
},
"required": [
"per_minute_cents",
"minutes_low",
"minutes_high"
]
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"kind": {
"type": "string"
},
"name": {
"type": "string"
},
"low_cents": {
"type": "integer"
},
"high_cents": {
"type": "integer"
}
},
"required": [
"kind",
"name",
"low_cents",
"high_cents"
]
}
}
},
"required": [
"currency",
"total_low_cents",
"total_high_cents",
"labor",
"lines"
]
},
"addons": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"amount_cents": {
"type": "integer"
}
},
"required": [
"slug",
"name",
"description",
"amount_cents"
]
},
"description": "Selected services at their saved quoted amounts, already included in pricing totals."
}
},
"required": [
"estimate_id",
"product",
"product_slug",
"description",
"price_display",
"price_range",
"pricing_type",
"crew_size",
"dimensions_display",
"pricing",
"addons"
]
},
"quotes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"estimate_id": {
"type": "string",
"description": "Saved estimate for this option. Pass it as quote_id to pick this option on a session."
},
"product": {
"type": "string"
},
"product_slug": {
"type": "string",
"description": "Product identifier."
},
"description": {
"type": [
"string",
"null"
]
},
"price_display": {
"type": "string"
},
"price_range": {
"type": "string"
},
"pricing_type": {
"type": "string",
"enum": [
"fixed",
"variable"
]
},
"crew_size": {
"type": "integer"
},
"dimensions_display": {
"type": [
"string",
"null"
]
},
"pricing": {
"type": "object",
"description": "Quoted service totals include applicable fees and discounts. Tips are additional; account credits are not assumed. Variable prices estimate the work; fixed prices include labor.",
"properties": {
"currency": {
"type": "string",
"const": "usd"
},
"total_low_cents": {
"type": "integer"
},
"total_high_cents": {
"type": "integer"
},
"labor": {
"type": [
"object",
"null"
],
"description": "Estimated billed labor minutes, rounded at each stop; excludes route travel time. Null for fixed pricing, where labor is included.",
"properties": {
"per_minute_cents": {
"type": "integer"
},
"minutes_low": {
"type": "integer"
},
"minutes_high": {
"type": "integer"
}
},
"required": [
"per_minute_cents",
"minutes_low",
"minutes_high"
]
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"kind": {
"type": "string"
},
"name": {
"type": "string"
},
"low_cents": {
"type": "integer"
},
"high_cents": {
"type": "integer"
}
},
"required": [
"kind",
"name",
"low_cents",
"high_cents"
]
}
}
},
"required": [
"currency",
"total_low_cents",
"total_high_cents",
"labor",
"lines"
]
},
"addons": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"amount_cents": {
"type": "integer"
}
},
"required": [
"slug",
"name",
"description",
"amount_cents"
]
},
"description": "Selected services at their saved quoted amounts, already included in pricing totals."
}
},
"required": [
"estimate_id",
"product",
"product_slug",
"description",
"price_display",
"price_range",
"pricing_type",
"crew_size",
"dimensions_display",
"pricing",
"addons"
]
},
"description": "One quote per option these choices can book. Listed until an option is picked; get_booking_session always lists them. Pick one with update_booking_session quote_id."
},
"arrival_window": {
"description": "Scheduled windows have exact start and end times. On-demand windows have null times; their label is the arrival duration from booking, such as Within 1 hour. available says whether the window is still offered.",
"type": [
"object",
"null"
],
"properties": {
"id": {
"type": "string"
},
"start_at": {
"type": [
"string",
"null"
]
},
"end_at": {
"type": [
"string",
"null"
]
},
"label": {
"type": [
"string",
"null"
]
},
"available": {
"type": "boolean"
},
"arrival_window_ref": {
"type": "string",
"enum": [
"origin",
"destination"
]
}
},
"required": [
"id",
"start_at",
"end_at",
"label",
"available",
"arrival_window_ref"
]
},
"missing": {
"type": "array",
"items": {
"type": "string"
},
"description": "What the session still needs before booking. Payment requirements appear once this is empty."
},
"payment": {
"type": "object",
"properties": {
"handlers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "stripe_shared_payment_token"
},
"config": {
"type": "object",
"properties": {
"network_business_profile": {
"type": "string"
}
},
"required": [
"network_business_profile"
]
},
"requirements": {
"type": "object",
"properties": {
"currency": {
"type": "string",
"const": "usd"
},
"requested_amount_cents": {
"type": "integer"
},
"confirmation_required_at": {
"type": "string"
}
},
"required": [
"currency",
"requested_amount_cents",
"confirmation_required_at"
]
}
},
"required": [
"type",
"config",
"requirements"
]
}
}
},
"required": [
"handlers"
]
},
"attempt_status": {
"type": [
"string",
"null"
],
"enum": [
null,
"active",
"failed",
"unknown",
"succeeded"
]
},
"booking": {
"type": [
"object",
"null"
],
"properties": {
"id": {
"type": "string"
},
"confirmation_number": {
"type": "string"
},
"state": {
"type": "string"
},
"tip": {
"type": "integer",
"minimum": 0,
"description": "Agreed upfront crew tip in cents."
},
"time_zone": {
"type": "string"
},
"route": {
"type": "object",
"properties": {
"stops": {
"type": "array",
"items": {
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "Resolved formatted address."
},
"address2": {
"type": [
"string",
"null"
],
"description": "Effective apartment, suite, or unit."
},
"floor": {
"type": [
"string",
"null"
]
},
"elevator": {
"type": [
"boolean",
"null"
],
"description": "Null means unknown."
},
"approximate": {
"type": "boolean",
"description": "Whether this location is approximate rather than a precise booking address."
}
},
"required": [
"address",
"address2",
"floor",
"elevator",
"approximate"
]
}
},
"distance_miles": {
"type": "number",
"description": "Total travel distance across the ordered route, in miles."
},
"duration_minutes": {
"type": "number",
"description": "Travel time across the ordered route, in minutes; excludes loading and unloading."
}
},
"required": [
"stops",
"distance_miles",
"duration_minutes"
]
},
"quote": {
"type": "object",
"properties": {
"estimate_id": {
"type": "string",
"description": "Saved estimate for this option. Pass it as quote_id to pick this option on a session."
},
"product": {
"type": "string"
},
"product_slug": {
"type": "string",
"description": "Product identifier."
},
"description": {
"type": [
"string",
"null"
]
},
"price_display": {
"type": "string"
},
"price_range": {
"type": "string"
},
"pricing_type": {
"type": "string",
"enum": [
"fixed",
"variable"
]
},
"crew_size": {
"type": "integer"
},
"dimensions_display": {
"type": [
"string",
"null"
]
},
"pricing": {
"type": "object",
"description": "Quoted service totals include applicable fees and discounts. Tips are additional; account credits are not assumed. Variable prices estimate the work; fixed prices include labor.",
"properties": {
"currency": {
"type": "string",
"const": "usd"
},
"total_low_cents": {
"type": "integer"
},
"total_high_cents": {
"type": "integer"
},
"labor": {
"type": [
"object",
"null"
],
"description": "Estimated billed labor minutes, rounded at each stop; excludes route travel time. Null for fixed pricing, where labor is included.",
"properties": {
"per_minute_cents": {
"type": "integer"
},
"minutes_low": {
"type": "integer"
},
"minutes_high": {
"type": "integer"
}
},
"required": [
"per_minute_cents",
"minutes_low",
"minutes_high"
]
},
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"kind": {
"type": "string"
},
"name": {
"type": "string"
},
"low_cents": {
"type": "integer"
},
"high_cents": {
"type": "integer"
}
},
"required": [
"kind",
"name",
"low_cents",
"high_cents"
]
}
}
},
"required": [
"currency",
"total_low_cents",
"total_high_cents",
"labor",
"lines"
]
},
"addons": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"amount_cents": {
"type": "integer"
}
},
"required": [
"slug",
"name",
"description",
"amount_cents"
]
},
"description": "Selected services at their saved quoted amounts, already included in pricing totals."
}
},
"required": [
"estimate_id",
"product",
"product_slug",
"description",
"price_display",
"price_range",
"pricing_type",
"crew_size",
"dimensions_display",
"pricing",
"addons"
]
},
"arrival_window": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"start_at": {
"type": "string"
},
"end_at": {
"type": "string"
},
"label": {
"type": "string"
}
},
"required": [
"id",
"start_at",
"end_at",
"label"
]
}
},
"required": [
"id",
"confirmation_number",
"state",
"tip",
"time_zone",
"route",
"quote",
"arrival_window"
]
}
},
"required": [
"id",
"state",
"url",
"revision",
"product",
"customer",
"description",
"instructions",
"tip_cents",
"route",
"quote",
"quotes",
"arrival_window",
"missing",
"payment",
"attempt_status",
"booking"
]
},
"error": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"type",
"message"
]
}
},
"anyOf": [
{
"required": [
"session"
]
},
{
"required": [
"error"
]
}
]
}
Annotations
{
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true,
"readOnlyHint": false
}