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 https://solvey.io/api/v1/me \ -H "Authorization: Bearer sk_live_…"
{
"data": {
"tenantId": "01a0…",
"key": { "id": "…", "name": "Zapier", "prefix": "sk_live_ab12cd", "scope": "read_write" },
"actor": { "id": "…", "role": "admin" }
}
}3. Create a ticket
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 inv1without notice; anything that would break a client becomesv2alongside 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-RemainingandX-RateLimit-Reset(epoch seconds).
Errors
One shape, always:
{ "error": { "code": "invalid_input", "message": "Invalid input", "issues": [ … ] } }| Status | Code | When |
|---|---|---|
| 400 | invalid_input | validation failed (issues lists what) or malformed JSON |
| 401 | unauthorized | missing, unknown or revoked key |
| 403 | insufficient_scope | a write with a read-only key |
| 403 | forbidden | the key's creator may not do this |
| 404 | not_found | no such object in your organization — the same answer whether it exists elsewhere or not |
| 429 | rate_limited | more than 600 requests in a minute; Retry-After says when |
| 500 | internal_error | our 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.