MCP-Server

Surfing Dog Inbox

ai.surfingdog/inbox
Commerce & Retail Kommunikation Öffentlich und erreichbar MCP 2025-11-25

Was dieses MCP kann

Communicates with a business, requests quotes, books services, places product orders, and checks order status.

accept_offer
Accept what the business proposed
Accept another time the business proposed for a booking, its quote, its changes to an order, or a change it asks for to a confirmed booking or an accepted order (offer.kind change: the promise moves). This binds your person, so send terms_sha — offer.terms_sha from get_item_status — only after they said yes to offer.human, and offer_id (offer.id) so an answer to an offer since replaced does nothing. Without terms_sha nothing is booked: you get the terms to show them. An accepted quote becomes a confirmed booking or order (linked). A yes to a change that can no longer be made online goes to a person there instead (passed_on), and what was agreed stands.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['item_id'], 'properties': {'key': {'type': 'string', 'maxLength': 200, 'description': "The person's key (sdkey1_â\x80¦), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes â\x80\x94 keep the pass and send it next time instead. Never stored."}, 'pass': {'type': 'string', 'maxLength': 1608, 'description': "The person's passes (sdpass1_â\x80¦), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored."}, 'item_id': {'type': 'string', 'minLength': 1}, 'offer_id': {'type': 'string', 'maxLength': 64, 'minLength': 1, 'description': 'The offer you answer: offer.id from get_item_status. If the business has replaced it since, nothing is done (409 offer_changed, with the current one).'}, 'terms_sha': {'type': 'string', 'pattern': '^[A-Za-z0-9_-]{43}$', 'description': 'The fingerprint of the terms your person said yes to: offer.terms_sha from get_item_status. Leave it out to be told the terms first; nothing is booked without it.'}, 'access_token': {'type': 'string', 'maxLength': 200, 'minLength': 16, 'description': 'Capability secret returned when the item was created without an account.'}, 'idempotency_key': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Same key + same request = same answer. Required for agents.'}}}
acknowledge_receipt
Acknowledge a receipt
Counter-sign a receipt this item earned, so both sides hold it: a promise, a change both sides agreed to it (kind amended), how it ended, or a refund's. Read the item to find its receipts; then send a compact JWS signed with your own Ed25519 key — header {alg:'EdDSA', typ:'sdi-receipt-ack+jws', jwk:<your public jwk>}, payload {rcp:<receipt id>, sha:<base64url(SHA-256(receipt jws))>, iat:<unix seconds>}. The instance verifies it against the key you carry and keeps it. Acknowledging twice is harmless.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['item_id'], 'properties': {'key': {'type': 'string', 'maxLength': 200, 'description': "The person's key (sdkey1_â\x80¦), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes â\x80\x94 keep the pass and send it next time instead. Never stored."}, 'pass': {'type': 'string', 'maxLength': 1608, 'description': "The person's passes (sdpass1_â\x80¦), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored."}, 'item_id': {'type': 'string', 'minLength': 1}, 'receipt': {'type': 'string', 'maxLength': 8192, 'minLength': 1, 'description': 'The receipt JWS being acknowledged, if you want the instance to check it is the one it holds.'}, 'receipt_id': {'type': 'string', 'maxLength': 64, 'minLength': 1, 'description': 'The receipt to acknowledge, for an agent that signs this request (sdi-agent/1) with a key delegated to the pass reference it sends: the inbox forwards the signature to the network (ADR-017 §3.4). Send this or counter_signature.'}, 'access_token': {'type': 'string', 'maxLength': 200, 'minLength': 16, 'description': 'Capability secret returned when the item was created without an account.'}, 'counter_signature': {'type': 'string', 'maxLength': 8192, 'minLength': 1, 'description': 'A compact JWS by the customer\'s agent, EdDSA, header carrying its Ed25519 public `jwk`, payload `{"rcp": "<receipt id>", "sha": "<base64url(SHA-256(receipt JWS))>", "iat": <unix seconds>}`. Or, for an agent that signs its requests instead (sdi-agent/1) and carries a pass reference, `receipt_id` alone.'}}}
cancel_item
Cancel
Cancel an item you created. After the business's cancellation window, a confirmed booking is cancelled late where the business records late cancellations (it may count against the customer), and refused where it does not.
Destruktiv Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['item_id'], 'properties': {'key': {'type': 'string', 'maxLength': 200, 'description': "The person's key (sdkey1_â\x80¦), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes â\x80\x94 keep the pass and send it next time instead. Never stored."}, 'pass': {'type': 'string', 'maxLength': 1608, 'description': "The person's passes (sdpass1_â\x80¦), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored."}, 'reason': {'type': 'string', 'maxLength': 2000}, 'item_id': {'type': 'string', 'minLength': 1}, 'access_token': {'type': 'string', 'maxLength': 200, 'minLength': 16, 'description': 'Capability secret returned when the item was created without an account.'}, 'idempotency_key': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Same key + same request = same answer. Required for agents.'}}}
check_availability
Check availability
Free start times for a service between two instants (at most 14 days). A time that has started, or that starts within the business's minimum notice, is not offered.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['service_id', 'from', 'to'], 'properties': {'to': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$', 'description': 'End of the window, at most 14 days after from.'}, 'from': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$', 'description': 'Start of the window to search, ISO 8601.'}, 'party_size': {'type': 'integer', 'maximum': 1000, 'minimum': 1}, 'service_id': {'type': 'string', 'minLength': 1}}}
create_booking
Request a booking
Request a service at a time. Check availability first. A fixed-price service costs the business's price from list_services; a different totalPrice you send is only noted for the business. A priced booking binds your person only once they confirmed it: without terms_sha nothing is sent, and you get the summary to show them (confirm.summary, confirm.terms_sha); call again with that terms_sha on their clear yes. Returns the item and, if you have no account, an access_token.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['payload'], 'properties': {'key': {'type': 'string', 'maxLength': 200, 'description': "The person's key (sdkey1_â\x80¦), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes â\x80\x94 keep the pass and send it next time instead. Never stored."}, 'pass': {'type': 'string', 'maxLength': 1608, 'description': "The person's passes (sdpass1_â\x80¦), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored."}, 'contact': {'type': 'object', 'properties': {'name': {'type': 'string', 'maxLength': 200}, 'email': {'type': 'string', 'format': 'email', 'pattern': "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}, 'phone': {'type': 'string', 'maxLength': 40}, 'locale': {'type': 'string', 'maxLength': 12}}}, 'message': {'type': 'string', 'maxLength': 20000}, 'payload': {'type': 'object', 'required': ['reservationFor', 'startTime', 'endTime'], 'properties': {'notes': {'type': 'string', 'maxLength': 5000}, 'endTime': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$'}, 'partySize': {'type': 'integer', 'maximum': 1000, 'minimum': 1}, 'startTime': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$'}, 'resourceId': {'type': 'string'}, 'totalPrice': {'type': 'object', 'required': ['value', 'currency'], 'properties': {'value': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'currency': {'type': 'string', 'maxLength': 3, 'minLength': 3}}}, 'personalised': {'type': 'object', 'required': ['listPrice'], 'properties': {'says': {'type': 'string', 'maxLength': 200}, 'listPrice': {'type': 'object', 'required': ['value', 'currency'], 'properties': {'value': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'currency': {'type': 'string', 'maxLength': 3, 'minLength': 3}}}}}, 'reservationFor': {'type': 'object', 'required': ['serviceId', 'name'], 'properties': {'name': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'serviceId': {'type': 'string', 'minLength': 1}}}}}, 'terms_sha': {'type': 'string', 'pattern': '^[A-Za-z0-9_-]{43}$', 'description': 'The fingerprint of the terms your person confirmed (details.terms_sha of the 409 confirm_terms a priced request without it gets). Nothing is sent to the business without it when the request carries a price.'}, 'idempotency_key': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Same key + same request = same answer. Required for agents.'}}}
create_order
Place an order
Order products. Prices are in minor units. A line naming a product (productId or sku) costs the business's price from list_products, and the total follows; a different price you send is only noted for the business. A line naming no product waits for the business to price it. A priced order binds your person only once they confirmed it: without terms_sha nothing is sent, and you get the summary to show them (confirm.summary, confirm.terms_sha); call again with that terms_sha on their clear yes.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['payload'], 'properties': {'key': {'type': 'string', 'maxLength': 200, 'description': "The person's key (sdkey1_â\x80¦), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes â\x80\x94 keep the pass and send it next time instead. Never stored."}, 'pass': {'type': 'string', 'maxLength': 1608, 'description': "The person's passes (sdpass1_â\x80¦), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored."}, 'contact': {'type': 'object', 'properties': {'name': {'type': 'string', 'maxLength': 200}, 'email': {'type': 'string', 'format': 'email', 'pattern': "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}, 'phone': {'type': 'string', 'maxLength': 40}, 'locale': {'type': 'string', 'maxLength': 12}}}, 'message': {'type': 'string', 'maxLength': 20000}, 'payload': {'type': 'object', 'required': ['orderedItem', 'totalPrice'], 'properties': {'notes': {'type': 'string', 'maxLength': 5000}, 'delivery': {'type': 'object', 'required': ['method'], 'properties': {'when': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$'}, 'method': {'enum': ['pickup', 'delivery', 'digital'], 'type': 'string'}}}, 'totalPrice': {'type': 'object', 'required': ['value', 'currency'], 'properties': {'value': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'currency': {'type': 'string', 'maxLength': 3, 'minLength': 3}}}, 'orderedItem': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'quantity', 'price'], 'properties': {'sku': {'type': 'string', 'maxLength': 100}, 'name': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'price': {'type': 'object', 'required': ['value', 'currency'], 'properties': {'value': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'currency': {'type': 'string', 'maxLength': 3, 'minLength': 3}}}, 'quantity': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}, 'listPrice': {'type': 'object', 'required': ['value', 'currency'], 'properties': {'value': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'currency': {'type': 'string', 'maxLength': 3, 'minLength': 3}}}, 'productId': {'type': 'string'}}}, 'maxItems': 200, 'minItems': 1}, 'personalised': {'type': 'object', 'required': ['listPrice'], 'properties': {'says': {'type': 'string', 'maxLength': 200}, 'listPrice': {'type': 'object', 'required': ['value', 'currency'], 'properties': {'value': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'currency': {'type': 'string', 'maxLength': 3, 'minLength': 3}}}}}, 'paymentMethod': {'type': 'string', 'maxLength': 60}, 'billingAddress': {'type': 'object', 'properties': {'postalCode': {'type': 'string', 'maxLength': 20}, 'addressRegion': {'type': 'string', 'maxLength': 100}, 'streetAddress': {'type': 'string', 'maxLength': 200}, 'addressCountry': {'type': 'string', 'maxLength': 2, 'minLength': 2}, 'addressLocality': {'type': 'string', 'maxLength': 100}}}, 'shippingAddress': {'type': 'object', 'properties': {'postalCode': {'type': 'string', 'maxLength': 20}, 'addressRegion': {'type': 'string', 'maxLength': 100}, 'streetAddress': {'type': 'string', 'maxLength': 200}, 'addressCountry': {'type': 'string', 'maxLength': 2, 'minLength': 2}, 'addressLocality': {'type': 'string', 'maxLength': 100}}}}}, 'terms_sha': {'type': 'string', 'pattern': '^[A-Za-z0-9_-]{43}$', 'description': 'The fingerprint of the terms your person confirmed (details.terms_sha of the 409 confirm_terms a priced request without it gets). Nothing is sent to the business without it when the request carries a price.'}, 'idempotency_key': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Same key + same request = same answer. Required for agents.'}}}
decline_offer
Decline what the business proposed
Say no to another time or to changes the business proposed (the booking request or the order is closed) or to its quote. To a change it asks for to a confirmed booking or an accepted order, no keeps what was agreed; on a change your person asked for (requested_change), it takes that back. Add reason (and reason_code) for anything your person wants the business to know.
Destruktiv Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['item_id'], 'properties': {'key': {'type': 'string', 'maxLength': 200, 'description': "The person's key (sdkey1_â\x80¦), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes â\x80\x94 keep the pass and send it next time instead. Never stored."}, 'pass': {'type': 'string', 'maxLength': 1608, 'description': "The person's passes (sdpass1_â\x80¦), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored."}, 'reason': {'type': 'string', 'maxLength': 2000, 'description': 'Anything your person wants the business to know.'}, 'item_id': {'type': 'string', 'minLength': 1}, 'offer_id': {'type': 'string', 'maxLength': 64, 'minLength': 1, 'description': 'The offer you answer: offer.id from get_item_status. If the business has replaced it since, nothing is done (409 offer_changed, with the current one).'}, 'reason_code': {'enum': ['price_sensitivity', 'timing_deferred', 'quantity', 'delivery', 'returns_policy', 'other'], 'type': 'string', 'description': 'Why: price_sensitivity, timing_deferred, quantity, delivery, returns_policy or other.'}, 'access_token': {'type': 'string', 'maxLength': 200, 'minLength': 16, 'description': 'Capability secret returned when the item was created without an account.'}, 'idempotency_key': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Same key + same request = same answer. Required for agents.'}}}
get_business_profile
Business profile
Name, time zone, currency, languages and the item types this business accepts.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
get_item_status
Item status
The current state of an item you created, in the business's words: what it proposed and waits for your person to answer (offer, with its terms_sha), who it waits on, what they can do next, and the conversation so far (thread: the business's replies and your person's messages).
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['item_id'], 'properties': {'key': {'type': 'string', 'maxLength': 200, 'description': "The person's key (sdkey1_â\x80¦), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes â\x80\x94 keep the pass and send it next time instead. Never stored."}, 'pass': {'type': 'string', 'maxLength': 1608, 'description': "The person's passes (sdpass1_â\x80¦), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored."}, 'item_id': {'type': 'string', 'minLength': 1}, 'access_token': {'type': 'string', 'maxLength': 200, 'minLength': 16, 'description': 'Capability secret returned when the item was created without an account.'}}}
list_products
Products
Orderable products with prices in minor units.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'q': {'type': 'string', 'maxLength': 100}, 'limit': {'type': 'integer', 'default': 50, 'maximum': 100, 'minimum': 1}, 'cursor': {'type': 'string', 'maxLength': 200}}}
list_services
Services
Bookable services with duration and price. A price per person (price.per = person) is for each person in the booking: send partySize, and the total is the price times it.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'default': 50, 'maximum': 100, 'minimum': 1}, 'cursor': {'type': 'string', 'maxLength': 200}}}
make_offer
Suggest a change
Answer what the business proposed with only what your person would change: another start_time (a booking: one of the free times check_availability lists; a quote request: the time it is for), other quantities for the lines of changes it suggested to an order (by index in offer.terms.lines; 0 drops one), another delivery_when, or how many (quantity) for a quote request. It goes back to the business as their request. On a confirmed booking or an accepted order it asks for a change to what was agreed (lines by index in the order's orderedItem), which stands until the business says yes. A price of their own is their answer only where get_business_profile says price_negotiable: total_price for a time it proposed (start_time optional), unit_price on lines of changes to an order; it goes back to the business, which takes it or answers. Otherwise — a price where the business sets its prices, on a quote, on something it does not haggle, or asked too often — it goes to a person there as their message, as do a note alone and a suggestion after a few rounds (passed_on): never refused, and what the business proposed, or what was agreed, still stands.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['item_id', 'terms'], 'properties': {'key': {'type': 'string', 'maxLength': 200, 'description': "The person's key (sdkey1_â\x80¦), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes â\x80\x94 keep the pass and send it next time instead. Never stored."}, 'note': {'type': 'string', 'maxLength': 2000, 'description': 'Anything your person wants the business to know.'}, 'pass': {'type': 'string', 'maxLength': 1608, 'description': "The person's passes (sdpass1_â\x80¦), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored."}, 'terms': {'type': 'object', 'properties': {'lines': {'type': 'array', 'items': {'type': 'object', 'required': ['index', 'quantity'], 'properties': {'index': {'type': 'integer', 'maximum': 199, 'minimum': 0}, 'quantity': {'type': 'integer', 'maximum': 1000000, 'minimum': 0}, 'unit_price': {'type': 'object', 'required': ['value', 'currency'], 'properties': {'value': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'currency': {'type': 'string', 'maxLength': 3, 'minLength': 3}}}}}, 'maxItems': 200, 'description': "For changes the business suggested to an order: other quantities for its lines, by index in offer.terms.lines; 0 drops a line. unit_price, a price of your own for a line, only where the business's profile says price_negotiable."}, 'quantity': {'type': 'integer', 'maximum': 1000000, 'minimum': 1, 'description': 'How many, for a quote request.'}, 'party_size': {'type': 'integer', 'maximum': 1000, 'minimum': 1, 'description': 'Another number of people.'}, 'start_time': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$', 'description': "Another start: for a booking, one of the free times check_availability lists (the end follows the service's length); for a quote request, the time it is for."}, 'total_price': {'type': 'object', 'required': ['value', 'currency'], 'properties': {'value': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'currency': {'type': 'string', 'maxLength': 3, 'minLength': 3}}, 'description': "A price of your own for a time the business proposed. Taken as your answer only where the business's profile says price_negotiable; otherwise it goes to a person there as your message, and what it proposed still stands."}, 'delivery_when': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$', 'description': 'Another delivery date, for an order.'}}, 'description': 'Only what your person would change.'}, 'item_id': {'type': 'string', 'minLength': 1}, 'offer_id': {'type': 'string', 'maxLength': 64, 'minLength': 1, 'description': 'The offer you answer: offer.id from get_item_status. If the business has replaced it since, nothing is done (409 offer_changed, with the current one).'}, 'reason_code': {'enum': ['price_sensitivity', 'timing_deferred', 'quantity', 'delivery', 'returns_policy', 'other'], 'type': 'string', 'description': 'Why: price_sensitivity, timing_deferred, quantity, delivery, returns_policy or other.'}, 'access_token': {'type': 'string', 'maxLength': 200, 'minLength': 16, 'description': 'Capability secret returned when the item was created without an account.'}, 'idempotency_key': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Same key + same request = same answer. Required for agents.'}}}
provide_details
Send the details
Answer what the business asked about an item (get_item_status says it needs a detail). The item moves on; on any other item your details are kept as a message for the business.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['item_id', 'details'], 'properties': {'key': {'type': 'string', 'maxLength': 200, 'description': "The person's key (sdkey1_â\x80¦), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes â\x80\x94 keep the pass and send it next time instead. Never stored."}, 'pass': {'type': 'string', 'maxLength': 1608, 'description': "The person's passes (sdpass1_â\x80¦), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored."}, 'details': {'type': 'string', 'maxLength': 5000, 'minLength': 1, 'description': 'The answer to what the business asked.'}, 'item_id': {'type': 'string', 'minLength': 1}, 'access_token': {'type': 'string', 'maxLength': 200, 'minLength': 16, 'description': 'Capability secret returned when the item was created without an account.'}, 'idempotency_key': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Same key + same request = same answer. Required for agents.'}}}
request_quote
Request a quote
Ask for a price on something custom. Creates a quote_request item.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['payload'], 'properties': {'key': {'type': 'string', 'maxLength': 200, 'description': "The person's key (sdkey1_â\x80¦), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes â\x80\x94 keep the pass and send it next time instead. Never stored."}, 'pass': {'type': 'string', 'maxLength': 1608, 'description': "The person's passes (sdpass1_â\x80¦), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored."}, 'contact': {'type': 'object', 'properties': {'name': {'type': 'string', 'maxLength': 200}, 'email': {'type': 'string', 'format': 'email', 'pattern': "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}, 'phone': {'type': 'string', 'maxLength': 40}, 'locale': {'type': 'string', 'maxLength': 12}}}, 'message': {'type': 'string', 'maxLength': 20000}, 'payload': {'type': 'object', 'required': ['itemOffered', 'description'], 'properties': {'budget': {'type': 'object', 'required': ['value', 'currency'], 'properties': {'value': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'currency': {'type': 'string', 'maxLength': 3, 'minLength': 3}}}, 'quantity': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}, 'description': {'type': 'string', 'maxLength': 5000, 'minLength': 1}, 'itemOffered': {'type': 'object', 'required': ['name'], 'properties': {'sku': {'type': 'string', 'maxLength': 100}, 'name': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'productId': {'type': 'string'}, 'serviceId': {'type': 'string'}}}, 'requestedFor': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$'}, 'deliveryAddress': {'type': 'object', 'properties': {'postalCode': {'type': 'string', 'maxLength': 20}, 'addressRegion': {'type': 'string', 'maxLength': 100}, 'streetAddress': {'type': 'string', 'maxLength': 200}, 'addressCountry': {'type': 'string', 'maxLength': 2, 'minLength': 2}, 'addressLocality': {'type': 'string', 'maxLength': 100}}}}}, 'idempotency_key': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Same key + same request = same answer. Required for agents.'}}}
request_return
Send goods back
Once an order's goods reached your person: ask to send them back. reason faulty, not_as_described or wrong_item (the legal guarantee: it costs them nothing), or changed_mind (a withdrawal while the period runs, agreed at once; after it, a return the business answers under its own policy). lines: which, by index in orderedItem, and how many; all when left out. The return comes back as linked; get_item_status lists it under refunds.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['item_id', 'reason'], 'properties': {'key': {'type': 'string', 'maxLength': 200, 'description': "The person's key (sdkey1_â\x80¦), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes â\x80\x94 keep the pass and send it next time instead. Never stored."}, 'note': {'type': 'string', 'maxLength': 2000}, 'pass': {'type': 'string', 'maxLength': 1608, 'description': "The person's passes (sdpass1_â\x80¦), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored."}, 'lines': {'type': 'array', 'items': {'type': 'object', 'required': ['index', 'quantity'], 'properties': {'index': {'type': 'integer', 'maximum': 199, 'minimum': 0}, 'quantity': {'type': 'integer', 'maximum': 1000000, 'minimum': 1}}}, 'maxItems': 200, 'description': 'Which lines of the order (by index in orderedItem), and how many of each; all of them when left out.'}, 'wants': {'enum': ['refund', 'exchange', 'credit'], 'type': 'string', 'description': 'What your person would like: a refund, an exchange, or credit.'}, 'reason': {'enum': ['changed_mind', 'faulty', 'wrong_item', 'not_as_described', 'other'], 'type': 'string', 'description': 'Why: changed_mind, faulty, wrong_item, not_as_described or other.'}, 'item_id': {'type': 'string', 'minLength': 1}, 'access_token': {'type': 'string', 'maxLength': 200, 'minLength': 16, 'description': 'Capability secret returned when the item was created without an account.'}, 'idempotency_key': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Same key + same request = same answer. Required for agents.'}}}
send_message
Send a message
Start a conversation, or reply on an item you own.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['body'], 'properties': {'key': {'type': 'string', 'maxLength': 200, 'description': "The person's key (sdkey1_â\x80¦), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes â\x80\x94 keep the pass and send it next time instead. Never stored."}, 'body': {'type': 'string', 'maxLength': 20000, 'minLength': 1}, 'pass': {'type': 'string', 'maxLength': 1608, 'description': "The person's passes (sdpass1_â\x80¦), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored."}, 'contact': {'type': 'object', 'properties': {'name': {'type': 'string', 'maxLength': 200}, 'email': {'type': 'string', 'format': 'email', 'pattern': "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}, 'phone': {'type': 'string', 'maxLength': 40}, 'locale': {'type': 'string', 'maxLength': 12}}}, 'item_id': {'type': 'string', 'minLength': 1, 'description': 'Reply on an existing item; omit to start a new conversation.'}, 'subject': {'type': 'string', 'maxLength': 500}, 'message_id': {'type': 'string', 'maxLength': 998, 'minLength': 1}, 'access_token': {'type': 'string', 'maxLength': 200, 'minLength': 16, 'description': 'Capability secret returned when the item was created without an account.'}, 'idempotency_key': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Same key + same request = same answer. Required for agents.'}}}
suggest_time
Ask for another time
Instead of the time the business proposed, ask for another: start_time must be one of the free times check_availability lists (the end follows the service's length). The business confirms it or proposes again. On a confirmed booking it asks the business to move it (the end keeps the booking's length), and the booking stays as agreed until the business says yes. After a few rounds, or past the changes a booking may have, a person there answers it instead (passed_on).
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['item_id', 'start_time'], 'properties': {'key': {'type': 'string', 'maxLength': 200, 'description': "The person's key (sdkey1_â\x80¦), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes â\x80\x94 keep the pass and send it next time instead. Never stored."}, 'note': {'type': 'string', 'maxLength': 2000}, 'pass': {'type': 'string', 'maxLength': 1608, 'description': "The person's passes (sdpass1_â\x80¦), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored."}, 'item_id': {'type': 'string', 'minLength': 1}, 'start_time': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$', 'description': "The start your person would like instead: one of the free times check_availability lists. The end follows the service's length."}, 'access_token': {'type': 'string', 'maxLength': 200, 'minLength': 16, 'description': 'Capability secret returned when the item was created without an account.'}, 'idempotency_key': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Same key + same request = same answer. Required for agents.'}}}
verify_customer
Prove a known customer
When a result says identity.recognised is weak, the person gave the email of a customer the business knows. Call this with item_id and access_token to email them six digits; ask the person for the code and call it again with code. Then the business recognises them.
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['item_id'], 'properties': {'code': {'type': 'string', 'pattern': '^[0-9]{6}$', 'description': 'The six digits the customer received. Omit to have them sent.'}, 'item_id': {'type': 'string', 'minLength': 1}, 'access_token': {'type': 'string', 'maxLength': 200, 'minLength': 16, 'description': 'Capability secret returned when the item was created without an account.'}}}
withdraw_from_contract
Withdraw from contract here
Your person withdraws from their booking (one they paid for) or order, within the period the business states (withdrawal on get_item_status). Two steps: without confirm_withdrawal nothing is sent and you get the statement to show them (confirm.statement); send confirm_withdrawal: true on their yes. Before the goods went out the order ends and what was paid is refunded; once they reached your person, the goods come back (lines: only some of them) and are refunded. The business emails a copy. Never refused: past the period, or for something that cannot be returned, it goes to a person there instead (passed_on), or becomes a return under the business's own policy.
Destruktiv Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['item_id'], 'properties': {'key': {'type': 'string', 'maxLength': 200, 'description': "The person's key (sdkey1_â\x80¦), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes â\x80\x94 keep the pass and send it next time instead. Never stored."}, 'note': {'type': 'string', 'maxLength': 2000, 'description': 'Anything your person wants to tell the business.'}, 'pass': {'type': 'string', 'maxLength': 1608, 'description': "The person's passes (sdpass1_â\x80¦), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored."}, 'lines': {'type': 'array', 'items': {'type': 'object', 'required': ['index', 'quantity'], 'properties': {'index': {'type': 'integer', 'maximum': 199, 'minimum': 0}, 'quantity': {'type': 'integer', 'maximum': 1000000, 'minimum': 1}}}, 'maxItems': 200, 'description': "Once the goods reached them: only these lines (by index in the order's orderedItem), and how many of each."}, 'item_id': {'type': 'string', 'minLength': 1}, 'access_token': {'type': 'string', 'maxLength': 200, 'minLength': 16, 'description': 'Capability secret returned when the item was created without an account.'}, 'idempotency_key': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Same key + same request = same answer. Required for agents.'}, 'confirm_withdrawal': {'type': 'boolean', 'description': 'true once your person confirmed the statement you were shown. Left out, nothing is sent: you get the statement.'}}}
Geändert
acknowledge_receipt
30. September 2026 02:41
Hinzugefügt
request_return
30. September 2026 02:41
Hinzugefügt
withdraw_from_contract
30. September 2026 02:41
Hinzugefügt
make_offer
30. September 2026 02:41
Geändert
suggest_time
30. September 2026 02:41
Geändert
decline_offer
30. September 2026 02:41
Geändert
accept_offer
30. September 2026 02:41
Geändert
create_order
30. September 2026 02:41
Geändert
create_booking
30. September 2026 02:41
Hinzugefügt
provide_details
26. September 2026 02:40
Hinzugefügt
suggest_time
26. September 2026 02:40
Hinzugefügt
decline_offer
26. September 2026 02:40
Hinzugefügt
accept_offer
26. September 2026 02:40
Geändert
get_item_status
26. September 2026 02:40
Geändert
check_availability
26. September 2026 02:40
Geändert
list_services
26. September 2026 02:40
Hinzugefügt
verify_customer
24. September 2026 02:40
Hinzugefügt
acknowledge_receipt
24. September 2026 02:40
Hinzugefügt
send_message
24. September 2026 02:40
Hinzugefügt
cancel_item
24. September 2026 02:40
Hinzugefügt
get_item_status
24. September 2026 02:40
Hinzugefügt
create_order
24. September 2026 02:40
Hinzugefügt
create_booking
24. September 2026 02:40
Hinzugefügt
request_quote
24. September 2026 02:40
Hinzugefügt
check_availability
24. September 2026 02:40
Hinzugefügt
list_products
24. September 2026 02:40
Hinzugefügt
list_services
24. September 2026 02:40
Hinzugefügt
get_business_profile
24. September 2026 02:40