v1Authentication and Rate limiting

Authentication and Rate limiting

Authentication

Every request to /api/v1/* is authenticated with an API key, passed as a Bearer token in the Authorization header:

Authorization: Bearer sy_...

API keys start with sy_ and are shown in full only once — right when you create them. After that, you'll only ever see the first and last four characters. Keys expire after 30, 90 (the default), or 365 days; using an expired key returns a 401.

Create a key from Settings → Developer → API Keys. Every key is issued with a scope preset and a client-access setting:

Read-onlyRead access to every resource — no writes, no publishing.

Full accessRead and write access everywhere, including publishing and team management. Reserve this for systems you fully control.

CustomPick read, read and write, or no access for each resource. You'll see the full list when you create the key.

All clientsThe key can reach every client in your agency, including ones you add later.

Specific clients The key is limited to a fixed list of clients you choose at creation. Requests for any other client return a 403.

Rate limiting

Rate limits apply per agency, not per key, and scale with your plan. If you're not sure what yours is, reach out to your account team.

Go over your limit and you'll get a 429 response with a Retry-After header telling you how many seconds to wait before trying again.

Every error response includes an error field describing what went wrong. Some error types add extra fields with more detail:

{
  "error": "locationId is required"
}

Status codes

200The request succeeded.
201A resource was created.
400The request is missing a required parameter or is otherwise malformed.
401The API key is missing, invalid, expired, or revoked.
403The key doesn't have the scope this request needs, or isn't authorized for the client or location involved.
404The requested resource doesn't exist, or doesn't belong to your agency.
409The request conflicts with the resource's current state — for example, trying to delete something that's already archived.
422The request is well-formed but doesn't pass validation — for example, an invalid client ID.
429You've hit the rate limit. Wait for the number of seconds in Retry-After, then try again.