File a bug
Files one bug onto a project's queue, awaiting human approval. This is the public intake: it authenticates with a *client* SDK key rather than an admin key,…
Files one bug onto a project's queue, awaiting human approval. This is the public intake: it authenticates with a client SDK key rather than an admin key, so it can be called from a CLI, an installer script, a devtools overlay, or any shipped code — the same places a client key already lives.
Three gates decide whether a ticket is filed, and nothing else the caller sends can widen them:
- the key is a
clientkey carrying thetickets:public_createscope, - the key's project has public ticket creation enabled, and
- the item is filed as
pending_approval— parked out of the work queue until a human promotes it in the dashboard.
The project is the key's own project; there is no X-Project-Id to pass and no way to file into someone else's queue. Repeat submissions of the same title dedupe against the open ticket already tracking it, which returns 200 with deduped: true instead of filing again.
This endpoint is served by the Shipeasy edge worker (api.shipeasy.ai), not the admin API — see servers below.
shipeasy setup fails on a customer's machine and self-reports the failure with the user's consent — { "title": "Setup failed at Feature installs", "stepsToReproduce": "…", "actualResult": "…" }.
Authorization
clientSdkKey Pass a client SDK key as X-SDK-Key: sdk_client_…. Used only by the public ticket intake (POST /ops/bug, POST /ops/feature-request), which is served by the edge worker rather than the admin API.
Client keys are designed to be embedded in shipped code — a CLI, an installer, a browser bundle — so presenting one here is safe by construction: it can do nothing but file a rate-limited ticket into its own project, in a state a human must approve. It carries no read access and cannot reach any other operation in this contract.
The key must additionally carry the tickets:public_create scope, and its project must have public ticket creation enabled.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://api.shipeasy.ai/ops/bug" \ -H "Content-Type: application/json" \ -d '{ "title": "Checkout button misaligned on mobile" }'{
"number": 7,
"deduped": true
}{
"id": "fb_01j7w8a1b2c3d4e5f6g7h8i9j0",
"number": 7
}{
"error": "Malformed request (bad JSON, missing project scope).",
"code": "BAD_REQUEST"
}{
"error": "Missing or invalid admin SDK key.",
"code": "UNAUTHORIZED"
}{
"error": "Key is valid but not allowed to act on this project.",
"code": "FORBIDDEN"
}{
"error": "Body too large",
"code": "BAD_REQUEST"
}{
"error": "Too many requests",
"code": "BAD_REQUEST"
}{
"error": "Unavailable"
}File a queue item
Files one queue item — a bug report or a feature request — and fires the project's connectors (GitHub issue / Slack). type selects which; only the two…
File a feature request
Files one feature request onto a project's queue, awaiting human approval. The feature-request counterpart to POST /ops/bug, with the same three gates: a…