Create a feature gate
Creates a new gate. Default enabled: true at the supplied rollout_pct (0 = fully dark).
Only name is required. Request fields use snake_case (owner_email); the GET response returns camelCase (ownerEmail, groupName).
Returns 409 if name already exists in the project (case-sensitive).
- Dark create + ramp later —
{ "name": "checkout_v2" }at 0% rollout. Ramp via PATCH after deploy validation. - Targeted rollout — supply
rulesto gate the caller (e.g. onlyplan = prousers) plus arollout_pctto bucket within that audience. - Gatekeeper stack — supply
stackinstead ofrules/rollout_pctforinternal ∪ beta ∪ publicfall-through. Stack entries evaluated top-to-bottom; first match wins. - Dashboard metadata — populate
title,description,folder,group,owner_emailso the admin UI is self-documenting from day one. - Disabled on create — pre-provision with
enabled: falsefor a future launch; flip on withPOST /{id}/enableat go-live.
Authorization
bearerSdkKey Pass an admin SDK key as Authorization: Bearer sdk_admin_…. Mint via POST /api/admin/keys with type: "admin".
In: header
Header Parameters
Project the request operates on. Must match the project the SDK key belongs to.
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
curl -X POST "https://shipeasy.ai/api/admin/gates" \ -H "X-Project-Id: string" \ -H "Content-Type: application/json" \ -d '{ "name": "checkout_v2" }'{
"id": "gat_01j7w7m9q4hxbf6npe6s9zr3vc",
"name": "checkout_v2"
}{
"error": "string",
"code": "string",
"detail": "string"
}{
"error": "string",
"code": "string",
"detail": "string"
}{
"error": "string",
"code": "string",
"detail": "string"
}{
"error": "string",
"code": "string",
"detail": "string"
}{
"error": "string",
"code": "string",
"detail": "string"
}{
"error": "string",
"code": "string",
"detail": "string"
}