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…
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 client key carrying tickets:public_create, a project that has opted in, and a pending_approval state forced server-side.
The project is the key's own project; there is no X-Project-Id to pass. 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.
An in-product "request a feature" form posts what the user asked for — { "title": "Dark mode", "useCase": "Reduce eye strain at night" }.
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/feature-request" \ -H "Content-Type: application/json" \ -d '{ "title": "Dark mode for the dashboard" }'{
"number": 7,
"deduped": true
}{
"id": "fb_01j7w8a1b2c3d4e5f6g7h8i9j0",
"number": 8
}{
"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"
}