Solvey.

Getting started

The Solvey API

Everything the console can do to tickets, comments, users and tags, the API can do — on every plan. Both call the same code, so parity is structural, not a promise.

1. Get a key

An admin mints keys in Admin center → API keys. Choose a scope: read allows every GET; read_write allows whatever the key's creator may do in the console. The key is shown once and stored only as a hash. It acts as the person who created it, with their current role, and stops working the moment it is revoked or they leave the organization.

2. Make the first request

Send the key as a bearer token. Start with /me, which tells you who the key is.

curl
curl https://solvey.io/api/v1/me \
  -H "Authorization: Bearer sk_live_…"
200 OK
{
  "data": {
    "tenantId": "01a0…",
    "key": { "id": "…", "name": "Zapier", "prefix": "sk_live_ab12cd", "scope": "read_write" },
    "actor": { "id": "…", "role": "admin" }
  }
}

3. Create a ticket

curl
curl https://solvey.io/api/v1/tickets \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "subject": "Printer on floor 3 jams", "description": "Every second page.", "priority": "high", "tags": ["printer"] }'

The answer is 201 with the ticket, its human key (SLV-1043) and source: "api". From here, the reference has every endpoint.

Conventions

Base URL
https://solvey.io/api/v1. The version is in the path. Additive changes — new fields, new endpoints — arrive in v1 without notice; anything that would break a client becomes v2 alongside it.
Bodies
JSON in, JSON out. Timestamps are ISO-8601 in UTC. Ids are UUIDs; tickets also have a human key.
Ticket references
Wherever a path says {id}, the uuid or the human key both work.
Rate limit
600 requests per minute per key. Every answer carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (epoch seconds).

Errors

One shape, always:

{ "error": { "code": "invalid_input", "message": "Invalid input", "issues": [ … ] } }
StatusCodeWhen
400invalid_inputvalidation failed (issues lists what) or malformed JSON
401unauthorizedmissing, unknown or revoked key
403insufficient_scopea write with a read-only key
403forbiddenthe key's creator may not do this
404not_foundno such object in your organization — the same answer whether it exists elsewhere or not
429rate_limitedmore than 600 requests in a minute; Retry-After says when
500internal_errorour fault; it is logged

What is not on the API

Inviting people and joining an organization stay in the console: an API key is a staff credential, not an identity provider. Everything else that exists in the console exists here, in the same release.