to.co home
Aan de slag

De to.co API

Laat je eigen software, zoals een website, een kassasysteem of een script, je bedrijf op to.co lezen en bijwerken. Sleutels zitten in Pro en Grow.

Een API-sleutel maken Routes

Basis-URL
https://api.to.co/v1/orgs/{host}
Authenticatie
Authorization: Bearer toco_ak_…

Een API-sleutel maken

Open je bedrijf in my.to.co, kies API-sleutels en daarna Sleutel maken. Geef hem een naam, kies zijn rechten en wanneer hij verloopt (hooguit een jaar), en kopieer hem: hij wordt één keer getoond en alleen een hash ervan wordt bewaard.

Stuur de sleutel bij elk verzoek in de Authorization-header. Een sleutel werkt alleen voor zijn eigen bedrijf: elk ander adres antwoordt met ‘niet gevonden’. De API neemt alleen sleutels aan, nooit een browsersessie.

Voorbeeldaanroep

curl https://api.to.co/v1/orgs/mybusiness.uk.to.co \
  -H "Authorization: Bearer toco_ak_…"

Rechten en abonnementen

Een sleutel kan alleen wat zijn rechten toestaan, en alleen wat het abonnement van het bedrijf op het moment van elk verzoek omvat. Lezen zit in Pro en Grow; wijzigen in Grow.

RechtWat het doetVanaf abonnement
company:readYour company details, services and locations.Pro
messages:readMessages from your contact form (not those held as spam).Pro
company:writeReplace your services, and change phone numbers and opening hours.Grow
posts:readThe posts you write on to.co, drafts included.Pro
posts:writeWrite, save, publish, unpublish and delete posts.Grow

Routes

Elke route staat onder de basis-URL, met het to.co-adres van je bedrijf in plaats van {host}, bijvoorbeeld mybusiness.uk.to.co. Verzoeken en antwoorden zijn JSON. Wijzigingen doorlopen dezelfde controles, geschiedenis en herpublicatie als wijzigingen in my.to.co, vastgelegd als gedaan door de sleutel.

RouteWat het doetRecht
GET /v1/orgs/{host}The company record, with its services and locations.company:read
GET /v1/orgs/{host}/servicesThe services, in order.company:read
GET /v1/orgs/{host}/locationsThe locations, with phones and opening hours.company:read
GET /v1/orgs/{host}/messagesContact form messages. Filter with ?status=new|read|replied|archived.messages:read
GET /v1/orgs/{host}/messages/{id}One message.messages:read
PATCH /v1/orgs/{host}Change the company phone numbers: JSON { "phones": … }.company:write
PUT /v1/orgs/{host}/servicesReplace the whole list of services, in order: JSON { "services": [ … ] }.company:write
PATCH /v1/orgs/{host}/locations/{location}Change a location: JSON with any of phones, normal_hours and special_hours. Every value is checked, and the answer carries the checks. The registered office comes from the register and cannot be changed.company:write
GET /v1/orgs/{host}/postsPosts written on to.co, newest change first, a page at a time: ?limit, ?state and ?cursor (next_cursor from the page before).posts:read
GET /v1/orgs/{host}/posts/{id}One post, its body as blocks, with its version as the ETag.posts:read
POST /v1/orgs/{host}/postsA new draft: JSON { "title", "standfirst", "body" }, or the body as text/markdown.posts:write
PATCH /v1/orgs/{host}/posts/{id}Save a post. Send the version you are changing as If-Match; JSON, or the body as text/markdown.posts:write
DELETE /v1/orgs/{host}/posts/{id}Move a post to the bin. The owner can restore it in my.to.co for 30 days.posts:write
POST /v1/orgs/{host}/posts/{id}/publishPublish the If-Match version. It is checked first, as when the owner publishes.posts:write
POST /v1/orgs/{host}/posts/{id}/unpublishTake a post off the page and back to a draft.posts:write

Credits en limieten

  • Elk verzoek gebruikt één API-credit, uit hetzelfde maandtegoed als de aanroepen van je eigen AI-assistent naar de MCP-server van je bedrijf: 5,000 per maand per bedrijf op Pro en 50,000 op Grow. Een mislukt verzoek geeft zijn credit terug. Credits beginnen opnieuw op de 1e van elke maand (UTC) en er zijn geen extra kosten. Antwoorden bevatten X-Credits-Limit, X-Credits-Remaining en X-Credits-Reset.
  • Tot 120 verzoeken per minuut per sleutel.
  • Tot 60 wijzigingen per minuut per bedrijf, samen geteld met wijzigingen in my.to.co en via MCP.

Fouten

Een fout antwoordt met een HTTP-status en JSON: error (een melding), code (een van de codes hieronder) en request_id. Een 429 bevat Retry-After.

  • invalid_request (400) — The body or a query value is not valid; the message says which field.
  • cookie_not_accepted (400) — The request carried a browser session. This API takes an API key only.
  • if_match_required (400) — A post change without If-Match.
  • not_ready (400) — The post cannot be published yet; problems lists why.
  • image_unknown (400) — A post body shows an image the post does not have. A key cannot upload images.
  • invalid_key (401) — No key, or one that is unknown, revoked or expired.
  • insufficient_scope (403) — The key does not have the scope this route needs.
  • plan_required (403) — The company plan does not include this scope now; plan_needed names the plan that does.
  • insufficient_role (403) — The person who made the key no longer has the role for this; an owner makes a new key.
  • not_found (404) — Not found. A host other than the key's own company is always not found.
  • registered_office (409) — The registered office comes from the company register and cannot be changed with a key.
  • post_changed (409) — The post changed since the If-Match version. Read it again.
  • post_deleted (409) — The post is in the bin.
  • not_draft (409) — Only a draft can be scheduled.
  • slug_taken (409) — Another post already uses that address.
  • rate_limited (429) — Too many requests. Wait for Retry-After.
  • credits_exhausted (429) — This month's API credits are used. They start again on the first of next month; there are no overage charges.
  • credits_unavailable (503) — The API cannot count credits right now. Try again later.

Webhooks

Op Grow kan to.co ook ondertekende events naar je eigen server sturen als er iets verandert, zoals een nieuw bericht of gewijzigde bedrijfsgegevens. Stel ze in via my.to.co onder Webhooks.

Volgende stappen

Taal

Kies uit de talen die de site en de app volledig ondersteunen.