Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,539Letters: 14Defects: 1,323counted 2 min ago
teppi

Server definition

Hash
sha256:3ef43925fe787a5d4b6c168e88cc053bb20f4c153263b90cce79279a8365ee2d
What it is
What a remote MCP server returned when asked what it offers: 19 tools

The blob, as servednamed by its sha256

{ "instructions": "This is a business's typed inbox. Start with get_business_profile, then list_services or list_products. For a booking: check_availability, then create_booking with an idempotency_key you generate and keep. Keep the access_token in a create result: it is the only way to read (get_item_status) or cancel that item later. If you carry a pass for the person (sdpass1_…), send it in `pass` on every call, and keep any pass a result hands you (identity.passes). The person is writing to this business and may never have heard of passes: speak to them of the business. The guide: https://surfingdog.ai/for-agents.md. Every refusal names the exact fields to fix; repair the input and retry with the same idempotency_key. When get_item_status shows an offer (another time, a quote, or changes to an order), relay offer.human as the business said it; accept only on your person's clear yes to the summary: accept_offer with its terms_sha and offer_id. Otherwise decline_offer, or make_offer with only what they would change (suggest_time for another time). A price of their own is their answer only where get_business_profile says price_negotiable; otherwise it goes to a person at the business, and what it proposed still stands. When it waits for details, send them with provide_details. A confirmed booking or an accepted order can change: suggest_time (another time) or make_offer (quantities, a delivery date) asks the business, and what was agreed stands until it says yes (requested_change shows it; decline_offer takes it back). When the business asks for a change (offer.kind change), accept_offer takes it and decline_offer keeps what was agreed. get_item_status also carries the conversation (thread): what the business wrote to your person, and what they wrote. Relay the business's replies as they are; a reply marked automated was not written by a person. A booking or an order that carries a price binds your person only once they confirmed it: create_booking and create_order without terms_sha answer with the summary to show them (confirm); call again with its terms_sha on their clear yes. Your person may withdraw from a paid booking or an order within the period the business states (withdrawal on get_item_status): withdraw_from_contract shows the statement first; send confirm_withdrawal on their yes. Once the goods reached them, request_return asks to send them back (faulty goods cost them nothing).", "tools": [ { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "access_token": { "description": "Capability secret returned when the item was created without an account.", "maxLength": 200, "minLength": 16, "type": "string" }, "idempotency_key": { "description": "Same key + same request = same answer. Required for agents.", "maxLength": 200, "minLength": 1, "type": "string" }, "item_id": { "minLength": 1, "type": "string" }, "key": { "description": "The person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.", "maxLength": 200, "type": "string" }, "offer_id": { "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).", "maxLength": 64, "minLength": 1, "type": "string" }, "pass": { "description": "The person's passes (sdpass1_…), 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.", "maxLength": 1608, "type": "string" }, "terms_sha": { "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.", "pattern": "^[A-Za-z0-9_-]{43}$", "type": "string" } }, "required": [ "item_id" ], "type": "object" }, "name": "accept_offer", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "access_token": { "description": "Capability secret returned when the item was created without an account.", "maxLength": 200, "minLength": 16, "type": "string" }, "counter_signature": { "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.", "maxLength": 8192, "minLength": 1, "type": "string" }, "item_id": { "minLength": 1, "type": "string" }, "key": { "description": "The person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.", "maxLength": 200, "type": "string" }, "pass": { "description": "The person's passes (sdpass1_…), 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.", "maxLength": 1608, "type": "string" }, "receipt": { "description": "The receipt JWS being acknowledged, if you want the instance to check it is the one it holds.", "maxLength": 8192, "minLength": 1, "type": "string" }, "receipt_id": { "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.", "maxLength": 64, "minLength": 1, "type": "string" } }, "required": [ "item_id" ], "type": "object" }, "name": "acknowledge_receipt", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "access_token": { "description": "Capability secret returned when the item was created without an account.", "maxLength": 200, "minLength": 16, "type": "string" }, "idempotency_key": { "description": "Same key + same request = same answer. Required for agents.", "maxLength": 200, "minLength": 1, "type": "string" }, "item_id": { "minLength": 1, "type": "string" }, "key": { "description": "The person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.", "maxLength": 200, "type": "string" }, "pass": { "description": "The person's passes (sdpass1_…), 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.", "maxLength": 1608, "type": "string" }, "reason": { "maxLength": 2000, "type": "string" } }, "required": [ "item_id" ], "type": "object" }, "name": "cancel_item", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "from": { "description": "Start of the window to search, ISO 8601.", "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)))$", "type": "string" }, "party_size": { "maximum": 1000, "minimum": 1, "type": "integer" }, "service_id": { "minLength": 1, "type": "string" }, "to": { "description": "End of the window, at most 14 days after from.", "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)))$", "type": "string" } }, "required": [ "service_id", "from", "to" ], "type": "object" }, "name": "check_availability", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "contact": { "properties": { "email": { "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,}$", "type": "string" }, "locale": { "maxLength": 12, "type": "string" }, "name": { "maxLength": 200, "type": "string" }, "phone": { "maxLength": 40, "type": "string" } }, "type": "object" }, "idempotency_key": { "description": "Same key + same request = same answer. Required for agents.", "maxLength": 200, "minLength": 1, "type": "string" }, "key": { "description": "The person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.", "maxLength": 200, "type": "string" }, "message": { "maxLength": 20000, "type": "string" }, "pass": { "description": "The person's passes (sdpass1_…), 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.", "maxLength": 1608, "type": "string" }, "payload": { "properties": { "endTime": { "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)))$", "type": "string" }, "notes": { "maxLength": 5000, "type": "string" }, "partySize": { "maximum": 1000, "minimum": 1, "type": "integer" }, "personalised": { "properties": { "listPrice": { "properties": { "currency": { "maxLength": 3, "minLength": 3, "type": "string" }, "value": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" } }, "required": [ "value", "currency" ], "type": "object" }, "says": { "maxLength": 200, "type": "string" } }, "required": [ "listPrice" ], "type": "object" }, "reservationFor": { "properties": { "name": { "maxLength": 200, "minLength": 1, "type": "string" }, "serviceId": { "minLength": 1, "type": "string" } }, "required": [ "serviceId", "name" ], "type": "object" }, "resourceId": { "type": "string" }, "startTime": { "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)))$", "type": "string" }, "totalPrice": { "properties": { "currency": { "maxLength": 3, "minLength": 3, "type": "string" }, "value": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" } }, "required": [ "value", "currency" ], "type": "object" } }, "required": [ "reservationFor", "startTime", "endTime" ], "type": "object" }, "terms_sha": { "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.", "pattern": "^[A-Za-z0-9_-]{43}$", "type": "string" } }, "required": [ "payload" ], "type": "object" }, "name": "create_booking", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "contact": { "properties": { "email": { "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,}$", "type": "string" }, "locale": { "maxLength": 12, "type": "string" }, "name": { "maxLength": 200, "type": "string" }, "phone": { "maxLength": 40, "type": "string" } }, "type": "object" }, "idempotency_key": { "description": "Same key + same request = same answer. Required for agents.", "maxLength": 200, "minLength": 1, "type": "string" }, "key": { "description": "The person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.", "maxLength": 200, "type": "string" }, "message": { "maxLength": 20000, "type": "string" }, "pass": { "description": "The person's passes (sdpass1_…), 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.", "maxLength": 1608, "type": "string" }, "payload": { "properties": { "billingAddress": { "properties": { "addressCountry": { "maxLength": 2, "minLength": 2, "type": "string" }, "addressLocality": { "maxLength": 100, "type": "string" }, "addressRegion": { "maxLength": 100, "type": "string" }, "postalCode": { "maxLength": 20, "type": "string" }, "streetAddress": { "maxLength": 200, "type": "string" } }, "type": "object" }, "delivery": { "properties": { "method": { "enum": [ "pickup", "delivery", "digital" ], "type": "string" }, "when": { "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)))$", "type": "string" } }, "required": [ "method" ], "type": "object" }, "notes": { "maxLength": 5000, "type": "string" }, "orderedItem": { "items": { "properties": { "listPrice": { "properties": { "currency": { "maxLength": 3, "minLength": 3, "type": "string" }, "value": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" } }, "required": [ "value", "currency" ], "type": "object" }, "name": { "maxLength": 200, "minLength": 1, "type": "string" }, "price": { "properties": { "currency": { "maxLength": 3, "minLength": 3, "type": "string" }, "value": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" } }, "required": [ "value", "currency" ], "type": "object" }, "productId": { "type": "string" }, "quantity": { "maximum": 9007199254740991, "minimum": 1, "type": "integer" }, "sku": { "maxLength": 100, "type": "string" } }, "required": [ "name", "quantity", "price" ], "type": "object" }, "maxItems": 200, "minItems": 1, "type": "array" }, "paymentMethod": { "maxLength": 60, "type": "string" }, "personalised": { "properties": { "listPrice": { "properties": { "currency": { "maxLength": 3, "minLength": 3, "type": "string" }, "value": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" } }, "required": [ "value", "currency" ], "type": "object" }, "says": { "maxLength": 200, "type": "string" } }, "required": [ "listPrice" ], "type": "object" }, "shippingAddress": { "properties": { "addressCountry": { "maxLength": 2, "minLength": 2, "type": "string" }, "addressLocality": { "maxLength": 100, "type": "string" }, "addressRegion": { "maxLength": 100, "type": "string" }, "postalCode": { "maxLength": 20, "type": "string" }, "streetAddress": { "maxLength": 200, "type": "string" } }, "type": "object" }, "totalPrice": { "properties": { "currency": { "maxLength": 3, "minLength": 3, "type": "string" }, "value": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" } }, "required": [ "value", "currency" ], "type": "object" } }, "required": [ "orderedItem", "totalPrice" ], "type": "object" }, "terms_sha": { "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.", "pattern": "^[A-Za-z0-9_-]{43}$", "type": "string" } }, "required": [ "payload" ], "type": "object" }, "name": "create_order", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "access_token": { "description": "Capability secret returned when the item was created without an account.", "maxLength": 200, "minLength": 16, "type": "string" }, "idempotency_key": { "description": "Same key + same request = same answer. Required for agents.", "maxLength": 200, "minLength": 1, "type": "string" }, "item_id": { "minLength": 1, "type": "string" }, "key": { "description": "The person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.", "maxLength": 200, "type": "string" }, "offer_id": { "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).", "maxLength": 64, "minLength": 1, "type": "string" }, "pass": { "description": "The person's passes (sdpass1_…), 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.", "maxLength": 1608, "type": "string" }, "reason": { "description": "Anything your person wants the business to know.", "maxLength": 2000, "type": "string" }, "reason_code": { "description": "Why: price_sensitivity, timing_deferred, quantity, delivery, returns_policy or other.", "enum": [ "price_sensitivity", "timing_deferred", "quantity", "delivery", "returns_policy", "other" ], "type": "string" } }, "required": [ "item_id" ], "type": "object" }, "name": "decline_offer", "outputSchema": null }, { "description": "Name, time zone, currency, languages and the item types this business accepts.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": {}, "type": "object" }, "name": "get_business_profile", "outputSchema": null }, { "description": "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).", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "access_token": { "description": "Capability secret returned when the item was created without an account.", "maxLength": 200, "minLength": 16, "type": "string" }, "item_id": { "minLength": 1, "type": "string" }, "key": { "description": "The person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.", "maxLength": 200, "type": "string" }, "pass": { "description": "The person's passes (sdpass1_…), 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.", "maxLength": 1608, "type": "string" } }, "required": [ "item_id" ], "type": "object" }, "name": "get_item_status", "outputSchema": null }, { "description": "Orderable products with prices in minor units.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "cursor": { "maxLength": 200, "type": "string" }, "limit": { "default": 50, "maximum": 100, "minimum": 1, "type": "integer" }, "q": { "maxLength": 100, "type": "string" } }, "type": "object" }, "name": "list_products", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "cursor": { "maxLength": 200, "type": "string" }, "limit": { "default": 50, "maximum": 100, "minimum": 1, "type": "integer" } }, "type": "object" }, "name": "list_services", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "access_token": { "description": "Capability secret returned when the item was created without an account.", "maxLength": 200, "minLength": 16, "type": "string" }, "idempotency_key": { "description": "Same key + same request = same answer. Required for agents.", "maxLength": 200, "minLength": 1, "type": "string" }, "item_id": { "minLength": 1, "type": "string" }, "key": { "description": "The person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.", "maxLength": 200, "type": "string" }, "note": { "description": "Anything your person wants the business to know.", "maxLength": 2000, "type": "string" }, "offer_id": { "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).", "maxLength": 64, "minLength": 1, "type": "string" }, "pass": { "description": "The person's passes (sdpass1_…), 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.", "maxLength": 1608, "type": "string" }, "reason_code": { "description": "Why: price_sensitivity, timing_deferred, quantity, delivery, returns_policy or other.", "enum": [ "price_sensitivity", "timing_deferred", "quantity", "delivery", "returns_policy", "other" ], "type": "string" }, "terms": { "description": "Only what your person would change.", "properties": { "delivery_when": { "description": "Another delivery date, for an order.", "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)))$", "type": "string" }, "lines": { "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.", "items": { "properties": { "index": { "maximum": 199, "minimum": 0, "type": "integer" }, "quantity": { "maximum": 1000000, "minimum": 0, "type": "integer" }, "unit_price": { "properties": { "currency": { "maxLength": 3, "minLength": 3, "type": "string" }, "value": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" } }, "required": [ "value", "currency" ], "type": "object" } }, "required": [ "index", "quantity" ], "type": "object" }, "maxItems": 200, "type": "array" }, "party_size": { "description": "Another number of people.", "maximum": 1000, "minimum": 1, "type": "integer" }, "quantity": { "description": "How many, for a quote request.", "maximum": 1000000, "minimum": 1, "type": "integer" }, "start_time": { "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.", "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)))$", "type": "string" }, "total_price": { "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.", "properties": { "currency": { "maxLength": 3, "minLength": 3, "type": "string" }, "value": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" } }, "required": [ "value", "currency" ], "type": "object" } }, "type": "object" } }, "required": [ "item_id", "terms" ], "type": "object" }, "name": "make_offer", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "access_token": { "description": "Capability secret returned when the item was created without an account.", "maxLength": 200, "minLength": 16, "type": "string" }, "details": { "description": "The answer to what the business asked.", "maxLength": 5000, "minLength": 1, "type": "string" }, "idempotency_key": { "description": "Same key + same request = same answer. Required for agents.", "maxLength": 200, "minLength": 1, "type": "string" }, "item_id": { "minLength": 1, "type": "string" }, "key": { "description": "The person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.", "maxLength": 200, "type": "string" }, "pass": { "description": "The person's passes (sdpass1_…), 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.", "maxLength": 1608, "type": "string" } }, "required": [ "item_id", "details" ], "type": "object" }, "name": "provide_details", "outputSchema": null }, { "description": "Ask for a price on something custom. Creates a quote_request item.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "contact": { "properties": { "email": { "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,}$", "type": "string" }, "locale": { "maxLength": 12, "type": "string" }, "name": { "maxLength": 200, "type": "string" }, "phone": { "maxLength": 40, "type": "string" } }, "type": "object" }, "idempotency_key": { "description": "Same key + same request = same answer. Required for agents.", "maxLength": 200, "minLength": 1, "type": "string" }, "key": { "description": "The person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.", "maxLength": 200, "type": "string" }, "message": { "maxLength": 20000, "type": "string" }, "pass": { "description": "The person's passes (sdpass1_…), 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.", "maxLength": 1608, "type": "string" }, "payload": { "properties": { "budget": { "properties": { "currency": { "maxLength": 3, "minLength": 3, "type": "string" }, "value": { "maximum": 9007199254740991, "minimum": 0, "type": "integer" } }, "required": [ "value", "currency" ], "type": "object" }, "deliveryAddress": { "properties": { "addressCountry": { "maxLength": 2, "minLength": 2, "type": "string" }, "addressLocality": { "maxLength": 100, "type": "string" }, "addressRegion": { "maxLength": 100, "type": "string" }, "postalCode": { "maxLength": 20, "type": "string" }, "streetAddress": { "maxLength": 200, "type": "string" } }, "type": "object" }, "description": { "maxLength": 5000, "minLength": 1, "type": "string" }, "itemOffered": { "properties": { "name": { "maxLength": 200, "minLength": 1, "type": "string" }, "productId": { "type": "string" }, "serviceId": { "type": "string" }, "sku": { "maxLength": 100, "type": "string" } }, "required": [ "name" ], "type": "object" }, "quantity": { "maximum": 9007199254740991, "minimum": 1, "type": "integer" }, "requestedFor": { "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)))$", "type": "string" } }, "required": [ "itemOffered", "description" ], "type": "object" } }, "required": [ "payload" ], "type": "object" }, "name": "request_quote", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "access_token": { "description": "Capability secret returned when the item was created without an account.", "maxLength": 200, "minLength": 16, "type": "string" }, "idempotency_key": { "description": "Same key + same request = same answer. Required for agents.", "maxLength": 200, "minLength": 1, "type": "string" }, "item_id": { "minLength": 1, "type": "string" }, "key": { "description": "The person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.", "maxLength": 200, "type": "string" }, "lines": { "description": "Which lines of the order (by index in orderedItem), and how many of each; all of them when left out.", "items": { "properties": { "index": { "maximum": 199, "minimum": 0, "type": "integer" }, "quantity": { "maximum": 1000000, "minimum": 1, "type": "integer" } }, "required": [ "index", "quantity" ], "type": "object" }, "maxItems": 200, "type": "array" }, "note": { "maxLength": 2000, "type": "string" }, "pass": { "description": "The person's passes (sdpass1_…), 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.", "maxLength": 1608, "type": "string" }, "reason": { "description": "Why: changed_mind, faulty, wrong_item, not_as_described or other.", "enum": [ "changed_mind", "faulty", "wrong_item", "not_as_described", "other" ], "type": "string" }, "wants": { "description": "What your person would like: a refund, an exchange, or credit.", "enum": [ "refund", "exchange", "credit" ], "type": "string" } }, "required": [ "item_id", "reason" ], "type": "object" }, "name": "request_return", "outputSchema": null }, { "description": "Start a conversation, or reply on an item you own.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "access_token": { "description": "Capability secret returned when the item was created without an account.", "maxLength": 200, "minLength": 16, "type": "string" }, "body": { "maxLength": 20000, "minLength": 1, "type": "string" }, "contact": { "properties": { "email": { "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,}$", "type": "string" }, "locale": { "maxLength": 12, "type": "string" }, "name": { "maxLength": 200, "type": "string" }, "phone": { "maxLength": 40, "type": "string" } }, "type": "object" }, "idempotency_key": { "description": "Same key + same request = same answer. Required for agents.", "maxLength": 200, "minLength": 1, "type": "string" }, "item_id": { "description": "Reply on an existing item; omit to start a new conversation.", "minLength": 1, "type": "string" }, "key": { "description": "The person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.", "maxLength": 200, "type": "string" }, "message_id": { "maxLength": 998, "minLength": 1, "type": "string" }, "pass": { "description": "The person's passes (sdpass1_…), 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.", "maxLength": 1608, "type": "string" }, "subject": { "maxLength": 500, "type": "string" } }, "required": [ "body" ], "type": "object" }, "name": "send_message", "outputSchema": null }, { "description": "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).", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "access_token": { "description": "Capability secret returned when the item was created without an account.", "maxLength": 200, "minLength": 16, "type": "string" }, "idempotency_key": { "description": "Same key + same request = same answer. Required for agents.", "maxLength": 200, "minLength": 1, "type": "string" }, "item_id": { "minLength": 1, "type": "string" }, "key": { "description": "The person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.", "maxLength": 200, "type": "string" }, "note": { "maxLength": 2000, "type": "string" }, "pass": { "description": "The person's passes (sdpass1_…), 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.", "maxLength": 1608, "type": "string" }, "start_time": { "description": "The start your person would like instead: one of the free times check_availability lists. The end follows the service's length.", "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)))$", "type": "string" } }, "required": [ "item_id", "start_time" ], "type": "object" }, "name": "suggest_time", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "access_token": { "description": "Capability secret returned when the item was created without an account.", "maxLength": 200, "minLength": 16, "type": "string" }, "code": { "description": "The six digits the customer received. Omit to have them sent.", "pattern": "^[0-9]{6}$", "type": "string" }, "item_id": { "minLength": 1, "type": "string" } }, "required": [ "item_id" ], "type": "object" }, "name": "verify_customer", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "access_token": { "description": "Capability secret returned when the item was created without an account.", "maxLength": 200, "minLength": 16, "type": "string" }, "confirm_withdrawal": { "description": "true once your person confirmed the statement you were shown. Left out, nothing is sent: you get the statement.", "type": "boolean" }, "idempotency_key": { "description": "Same key + same request = same answer. Required for agents.", "maxLength": 200, "minLength": 1, "type": "string" }, "item_id": { "minLength": 1, "type": "string" }, "key": { "description": "The person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.", "maxLength": 200, "type": "string" }, "lines": { "description": "Once the goods reached them: only these lines (by index in the order's orderedItem), and how many of each.", "items": { "properties": { "index": { "maximum": 199, "minimum": 0, "type": "integer" }, "quantity": { "maximum": 1000000, "minimum": 1, "type": "integer" } }, "required": [ "index", "quantity" ], "type": "object" }, "maxItems": 200, "type": "array" }, "note": { "description": "Anything your person wants to tell the business.", "maxLength": 2000, "type": "string" }, "pass": { "description": "The person's passes (sdpass1_…), 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.", "maxLength": 1608, "type": "string" } }, "required": [ "item_id" ], "type": "object" }, "name": "withdraw_from_contract", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:3ef43925fe787a5d4b6c168e88cc053bb20f4c153263b90cce79279a8365ee2d | sha256sum