Changelog

What changed

The contracts on this site only grow. A field or an event is added with a note here; nothing is renamed or removed without a new version and a long overlap.

2 October 2026

  • One-time codes stay out of the inbox. An authentication template sent with POST /v1/messages/template no longer adds a contact or opens a thread. Its answer carries contactId, conversationId and message as null; id is still set, and message.delivered, message.read and message.failed still arrive, naming it, with conversationId and customer as null. Notices are unchanged.
  • Send-only numbers. A workspace can make a WhatsApp number send-only in its channel settings. Anything sent from it through POST /v1/messages/template is answered the way a one-time code is — no contact, no thread, receipts still delivered — and what customers write to it opens no conversation.

1 October 2026

  • Templates belong to a WhatsApp account. Only that account's numbers can send one. GET /v1/templates now carries each template's account and the numbers that can send it, and a workspace with two accounts may list a name twice, once per account.
  • from on POST /v1/messages/template says which number sends it; the answer says which did. Two new refusals: unknown_sender and template_not_on_number.
  • Teams inside a workspace. A workspace can be divided into teams — sales, support — and a thread can be sent to one. The conversation object, in /v1 and in every conversation.* webhook, now carries group: the team's id and name, or null.
  • conversation.sent_to_group. A new event, said when a thread moves into a team.
  • groupId on GET /v1/conversations lists one team's threads.
  • Workspace. The dashboard now calls the account a workspace. The API keeps its name for it, team; no field was renamed.

28 September 2026

  • One-time codes. Authentication templates can be made in the dashboard and sent with code on POST /v1/messages/template. Seler delivers your code; it never makes or checks one.
  • Template sends. variables may be an object keyed by the template's own variable names; header and buttonVariables fill text and media headers and URL buttons; reference is echoed in every webhook about the message. Refusals carry a fixed code and details. The answer now includes id, status, to, contactId and reference beside the message.
  • Idempotency. Idempotency-Key on a template send: the same key within 24 hours sends once.
  • GET /v1/templates. Every template with its status, variables by name, and what its header and buttons need.
  • Delivery events. message.delivered, message.read and message.failed, each with the message id and your reference.

14 September 2026

  • REST API v1. Keys with scopes, /v1/me, contacts, conversations, messages, and WhatsApp templates to any number. 600 requests per minute per key.
  • Webhooks. Ten events, a signed envelope, retries over about an hour, a delivery log with redelivery, and a test ping.
  • Custom API contract version 2. Adds capabilities to /verify, and the customers and appointments halves. Version 1 servers keep working unchanged; the header now reads X-Seler-Contract: 2.
  • MCP servers. Streamable HTTP, tool discovery, per-tool enable and confirmation, read-only annotations honoured.
  • Call log. Every call the assistant makes to a connected system is visible to the team for a month.

Earlier

Custom store contract version 1 — six routes for a catalogue and orders. Documented in the dashboard; now folded into version 2 above.