API to.co
Pozwól własnemu oprogramowaniu, na przykład stronie, systemowi kasowemu lub skryptowi, odczytywać Twoją firmę na to.co i ją aktualizować. Klucze są w planach Pro i Grow.
- Bazowy URL
https://api.to.co/v1/orgs/{host}- Uwierzytelnianie
Authorization: Bearer toco_ak_…
Utwórz klucz API
Otwórz swoją firmę w my.to.co, wybierz Klucze API, a potem Utwórz klucz. Nadaj mu nazwę, wybierz uprawnienia i datę wygaśnięcia (najwyżej rok) i skopiuj go: jest pokazywany raz, a przechowujemy tylko jego skrót.
Wysyłaj klucz w nagłówku Authorization w każdym żądaniu. Klucz działa tylko dla własnej firmy: każdy inny adres odpowiada „nie znaleziono”. API przyjmuje tylko klucze, nigdy sesji przeglądarki.
Przykładowe wywołanie
curl https://api.to.co/v1/orgs/mybusiness.uk.to.co \
-H "Authorization: Bearer toco_ak_…"
Uprawnienia i plany
Klucz może tylko to, na co pozwalają jego uprawnienia, i tylko to, co obejmuje plan firmy w chwili każdego żądania. Odczyt jest w Pro i Grow, zmiany w Grow.
| Uprawnienie | Co robi | Od planu |
|---|---|---|
company:read | Your company details, services and locations. | Pro |
messages:read | Messages from your contact form (not those held as spam). | Pro |
company:write | Replace your services, and change phone numbers and opening hours. | Grow |
posts:read | The posts you write on to.co, drafts included. | Pro |
posts:write | Write, save, publish, unpublish and delete posts. | Grow |
Ścieżki
Każda ścieżka leży pod bazowym URL, z adresem to.co Twojej firmy w miejscu {host}, na przykład mybusiness.uk.to.co. Żądania i odpowiedzi są w JSON. Zmiany przechodzą te same kontrole, historię i ponowną publikację co zmiany w my.to.co i są zapisywane jako wykonane przez klucz.
| Ścieżka | Co robi | Uprawnienie |
|---|---|---|
GET /v1/orgs/{host} | The company record, with its services and locations. | company:read |
GET /v1/orgs/{host}/services | The services, in order. | company:read |
GET /v1/orgs/{host}/locations | The locations, with phones and opening hours. | company:read |
GET /v1/orgs/{host}/messages | Contact 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}/services | Replace 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}/posts | Posts 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}/posts | A 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}/publish | Publish the If-Match version. It is checked first, as when the owner publishes. | posts:write |
POST /v1/orgs/{host}/posts/{id}/unpublish | Take a post off the page and back to a draft. | posts:write |
Kredyty i limity
- Każde żądanie zużywa jeden kredyt API z tej samej miesięcznej puli co wywołania Twojego asystenta AI do serwera MCP Twojej firmy: 5,000 miesięcznie na firmę w Pro i 50,000 w Grow. Nieudane żądanie zwraca swój kredyt. Kredyty odnawiają się 1. dnia każdego miesiąca (UTC), bez opłat za przekroczenie. Odpowiedzi zawierają X-Credits-Limit, X-Credits-Remaining i X-Credits-Reset.
- Do 120 żądań na minutę na klucz.
- Do 60 zmian na minutę na firmę, liczonych razem ze zmianami w my.to.co i przez MCP.
Błędy
Błąd odpowiada statusem HTTP i JSON: error (komunikat), code (jeden z poniższych) i request_id. Odpowiedź 429 zawiera 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.
Webhooki
W planie Grow to.co może też wysyłać podpisane zdarzenia na Twój serwer, gdy coś się zmieni, na przykład nowa wiadomość lub zmiana danych firmy. Skonfiguruj je w my.to.co w sekcji Webhooki.