Surfing Dog Inbox

Message, ask for a quote or book a call with Surfing Dog, through its open-source inbox.

Should I use this

Quality & Safety

A
Description quality
96%
Schema completeness
87%
Naming quality
93%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'get_business_profile' description lacks action verbin get_business_profile

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~6,967Tokens (tool definitions)
~3.6 KBTypical response size
Significant attention impact (5.44% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "inbox": {
      "url": "https://inbox.surfingdog.ai/mcp"
    }
  }
}

Remote endpoints

https://inbox.surfingdog.ai/mcpstreamable-http

What it can do

Tool inventory

Tools (16)

๐ŸŸข Read-only๐ŸŸก Write๐Ÿ”ด Deleteโšช Unknown
๐ŸŸขget_business_profile

Name, time zone, currency, languages and the item types this business accepts.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
๐ŸŸขlist_services(cursor, limit)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "maxLength": 200
    },
    "limit": {
      "default": 50,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
๐ŸŸขlist_products(cursor, limit, q)

Orderable products with prices in minor units.

Input Schema

{
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "maxLength": 200
    },
    "limit": {
      "default": 50,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "q": {
      "type": "string",
      "maxLength": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
๐ŸŸขcheck_availability(service_id, from, to, party_size)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "service_id": {
      "type": "string",
      "minLength": 1
    },
    "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."
    },
    "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."
    },
    "party_size": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    }
  },
  "required": [
    "service_id",
    "from",
    "to"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
โšชrequest_quote(payload, contact, message, idempotency_key, pass, ...)

Ask for a price on something custom. Creates a quote_request item.

Input Schema

{
  "type": "object",
  "properties": {
    "payload": {
      "type": "object",
      "properties": {
        "itemOffered": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            },
            "sku": {
              "type": "string",
              "maxLength": 100
            },
            "serviceId": {
              "type": "string"
            },
            "productId": {
              "type": "string"
            }
          },
          "required": [
            "name"
          ]
        },
        "quantity": {
          "type": "integer",
          "minimum": 1,
          "maximum": 9007199254740991
        },
        "description": {
          "type": "string",
          "minLength": 1,
          "maxLength": 5000
        },
        "budget": {
          "type": "object",
          "properties": {
            "value": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "currency": {
              "type": "string",
              "minLength": 3,
              "maxLength": 3
            }
          },
          "required": [
            "value",
            "currency"
          ]
        },
        "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": {
            "streetAddress": {
              "type": "string",
              "maxLength": 200
            },
            "addressLocality": {
              "type": "string",
              "maxLength": 100
            },
            "addressRegion": {
              "type": "string",
              "maxLength": 100
            },
            "postalCode": {
              "type": "string",
              "maxLength": 20
            },
            "addressCountry": {
              "type": "string",
              "minLength": 2,
              "maxLength": 2
            }
          }
        }
      },
      "required": [
        "itemOffered",
        "description"
      ]
    },
    "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
    },
    "idempotency_key": {
      "description": "Same key + same request = same answer. Required for agents.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "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.",
      "type": "string",
      "maxLength": 1608
    },
    "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.",
      "type": "string",
      "maxLength": 200
    }
  },
  "required": [
    "payload"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
๐ŸŸกcreate_booking(payload, contact, message, idempotency_key, pass, ...)

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. Returns the item and, if you have no account, an access_token.

Input Schema

{
  "type": "object",
  "properties": {
    "payload": {
      "type": "object",
      "properties": {
        "reservationFor": {
          "type": "object",
          "properties": {
            "serviceId": {
              "type": "string",
              "minLength": 1
            },
            "name": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          },
          "required": [
            "serviceId",
            "name"
          ]
        },
        "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)))$"
        },
        "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",
          "minimum": 1,
          "maximum": 1000
        },
        "totalPrice": {
          "type": "object",
          "properties": {
            "value": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "currency": {
              "type": "string",
              "minLength": 3,
              "maxLength": 3
            }
          },
          "required": [
            "value",
            "currency"
          ]
        },
        "resourceId": {
          "type": "string"
        },
        "notes": {
          "type": "string",
          "maxLength": 5000
        }
      },
      "required": [
        "reservationFor",
        "startTime",
        "endTime"
      ]
    },
    "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
    },
    "idempotency_key": {
      "description": "Same key + same request = same answer. Required for agents.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "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.",
      "type": "string",
      "maxLength": 1608
    },
    "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.",
      "type": "string",
      "maxLength": 200
    }
  },
  "required": [
    "payload"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
๐ŸŸกcreate_order(payload, contact, message, idempotency_key, pass, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "payload": {
      "type": "object",
      "properties": {
        "orderedItem": {
          "minItems": 1,
          "maxItems": 200,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "productId": {
                "type": "string"
              },
              "sku": {
                "type": "string",
                "maxLength": 100
              },
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              "quantity": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "price": {
                "type": "object",
                "properties": {
                  "value": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "currency": {
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 3
                  }
                },
                "required": [
                  "value",
                  "currency"
                ]
              }
            },
            "required": [
              "name",
              "quantity",
              "price"
            ]
          }
        },
        "totalPrice": {
          "type": "object",
          "properties": {
            "value": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "currency": {
              "type": "string",
              "minLength": 3,
              "maxLength": 3
            }
          },
          "required": [
            "value",
            "currency"
          ]
        },
        "billingAddress": {
          "type": "object",
          "properties": {
            "streetAddress": {
              "type": "string",
              "maxLength": 200
            },
            "addressLocality": {
              "type": "string",
              "maxLength": 100
            },
            "addressRegion": {
              "type": "string",
              "maxLength": 100
            },
            "postalCode": {
              "type": "string",
              "maxLength": 20
            },
            "addressCountry": {
              "type": "string",
              "minLength": 2,
              "maxLength": 2
            }
          }
        },
        "shippingAddress": {
          "type": "object",
          "properties": {
            "streetAddress": {
              "type": "string",
              "maxLength": 200
            },
            "addressLocality": {
              "type": "string",
              "maxLength": 100
            },
            "addressRegion": {
              "type": "string",
              "maxLength": 100
            },
            "postalCode": {
              "type": "string",
              "maxLength": 20
            },
            "addressCountry": {
              "type": "string",
              "minLength": 2,
              "maxLength": 2
            }
          }
        },
        "delivery": {
          "type": "object",
          "properties": {
            "method": {
              "type": "string",
              "enum": [
                "pickup",
                "delivery",
                "digital"
              ]
            },
            "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)))$"
            }
          },
          "required": [
            "method"
          ]
        },
        "paymentMethod": {
          "type": "string",
          "maxLength": 60
        },
        "notes": {
          "type": "string",
          "maxLength": 5000
        }
      },
      "required": [
        "orderedItem",
        "totalPrice"
      ]
    },
    "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
    },
    "idempotency_key": {
      "description": "Same key + same request = same answer. Required for agents.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "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.",
      "type": "string",
      "maxLength": 1608
    },
    "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.",
      "type": "string",
      "maxLength": 200
    }
  },
  "required": [
    "payload"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
๐ŸŸขget_item_status(item_id, access_token, pass, key)

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).

Input Schema

{
  "type": "object",
  "properties": {
    "item_id": {
      "type": "string",
      "minLength": 1
    },
    "access_token": {
      "description": "Capability secret returned when the item was created without an account.",
      "type": "string",
      "minLength": 16,
      "maxLength": 200
    },
    "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.",
      "type": "string",
      "maxLength": 1608
    },
    "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.",
      "type": "string",
      "maxLength": 200
    }
  },
  "required": [
    "item_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
๐ŸŸกaccept_offer(item_id, terms_sha, access_token, idempotency_key, pass, ...)

Accept another time the business proposed for a booking, or its quote. This binds your person, so send terms_sha โ€” offer.terms_sha from get_item_status โ€” only after they said yes to offer.human. Without terms_sha nothing is booked: you get the terms to show them. An accepted quote becomes a confirmed booking or order (linked).

Input Schema

{
  "type": "object",
  "properties": {
    "item_id": {
      "type": "string",
      "minLength": 1
    },
    "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.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{43}$"
    },
    "access_token": {
      "description": "Capability secret returned when the item was created without an account.",
      "type": "string",
      "minLength": 16,
      "maxLength": 200
    },
    "idempotency_key": {
      "description": "Same key + same request = same answer. Required for agents.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "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.",
      "type": "string",
      "maxLength": 1608
    },
    "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.",
      "type": "string",
      "maxLength": 200
    }
  },
  "required": [
    "item_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
๐Ÿ”ดdecline_offer(item_id, reason, access_token, idempotency_key, pass, ...)

Say no to another time the business proposed (the booking request is closed) or to its quote. Add reason for anything your person wants the business to know.

Input Schema

{
  "type": "object",
  "properties": {
    "item_id": {
      "type": "string",
      "minLength": 1
    },
    "reason": {
      "description": "Anything your person wants the business to know.",
      "type": "string",
      "maxLength": 2000
    },
    "access_token": {
      "description": "Capability secret returned when the item was created without an account.",
      "type": "string",
      "minLength": 16,
      "maxLength": 200
    },
    "idempotency_key": {
      "description": "Same key + same request = same answer. Required for agents.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "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.",
      "type": "string",
      "maxLength": 1608
    },
    "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.",
      "type": "string",
      "maxLength": 200
    }
  },
  "required": [
    "item_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
๐ŸŸขsuggest_time(item_id, start_time, note, access_token, idempotency_key, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "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."
    },
    "note": {
      "type": "string",
      "maxLength": 2000
    },
    "access_token": {
      "description": "Capability secret returned when the item was created without an account.",
      "type": "string",
      "minLength": 16,
      "maxLength": 200
    },
    "idempotency_key": {
      "description": "Same key + same request = same answer. Required for agents.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "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.",
      "type": "string",
      "maxLength": 1608
    },
    "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.",
      "type": "string",
      "maxLength": 200
    }
  },
  "required": [
    "item_id",
    "start_time"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
โšชprovide_details(item_id, details, access_token, idempotency_key, pass, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "item_id": {
      "type": "string",
      "minLength": 1
    },
    "details": {
      "type": "string",
      "minLength": 1,
      "maxLength": 5000,
      "description": "The answer to what the business asked."
    },
    "access_token": {
      "description": "Capability secret returned when the item was created without an account.",
      "type": "string",
      "minLength": 16,
      "maxLength": 200
    },
    "idempotency_key": {
      "description": "Same key + same request = same answer. Required for agents.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "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.",
      "type": "string",
      "maxLength": 1608
    },
    "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.",
      "type": "string",
      "maxLength": 200
    }
  },
  "required": [
    "item_id",
    "details"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
๐Ÿ”ดcancel_item(item_id, reason, access_token, idempotency_key, pass, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "item_id": {
      "type": "string",
      "minLength": 1
    },
    "reason": {
      "type": "string",
      "maxLength": 2000
    },
    "access_token": {
      "description": "Capability secret returned when the item was created without an account.",
      "type": "string",
      "minLength": 16,
      "maxLength": 200
    },
    "idempotency_key": {
      "description": "Same key + same request = same answer. Required for agents.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "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.",
      "type": "string",
      "maxLength": 1608
    },
    "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.",
      "type": "string",
      "maxLength": 200
    }
  },
  "required": [
    "item_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
๐ŸŸกsend_message(item_id, subject, body, contact, message_id, ...)

Start a conversation, or reply on an item you own.

Input Schema

{
  "type": "object",
  "properties": {
    "item_id": {
      "description": "Reply on an existing item; omit to start a new conversation.",
      "type": "string",
      "minLength": 1
    },
    "subject": {
      "type": "string",
      "maxLength": 500
    },
    "body": {
      "type": "string",
      "minLength": 1,
      "maxLength": 20000
    },
    "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_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 998
    },
    "access_token": {
      "description": "Capability secret returned when the item was created without an account.",
      "type": "string",
      "minLength": 16,
      "maxLength": 200
    },
    "idempotency_key": {
      "description": "Same key + same request = same answer. Required for agents.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "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.",
      "type": "string",
      "maxLength": 1608
    },
    "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.",
      "type": "string",
      "maxLength": 200
    }
  },
  "required": [
    "body"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
๐ŸŸกacknowledge_receipt(item_id, counter_signature, receipt_id, receipt, access_token, ...)

Counter-sign a receipt this item earned, so both sides hold it. 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.

Input Schema

{
  "type": "object",
  "properties": {
    "item_id": {
      "type": "string",
      "minLength": 1
    },
    "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.",
      "type": "string",
      "minLength": 1,
      "maxLength": 8192
    },
    "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.",
      "type": "string",
      "minLength": 1,
      "maxLength": 64
    },
    "receipt": {
      "description": "The receipt JWS being acknowledged, if you want the instance to check it is the one it holds.",
      "type": "string",
      "minLength": 1,
      "maxLength": 8192
    },
    "access_token": {
      "description": "Capability secret returned when the item was created without an account.",
      "type": "string",
      "minLength": 16,
      "maxLength": 200
    },
    "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.",
      "type": "string",
      "maxLength": 1608
    },
    "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.",
      "type": "string",
      "maxLength": 200
    }
  },
  "required": [
    "item_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
โšชverify_customer(item_id, access_token, code)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "item_id": {
      "type": "string",
      "minLength": 1
    },
    "access_token": {
      "description": "Capability secret returned when the item was created without an account.",
      "type": "string",
      "minLength": 16,
      "maxLength": 200
    },
    "code": {
      "description": "The six digits the customer received. Omit to have them sent.",
      "type": "string",
      "pattern": "^[0-9]{6}$"
    }
  },
  "required": [
    "item_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded16 tools