PENDING → APPROVED / REJECTED status. The parent approval transitions to Approved only when every step resolves to APPROVED.
List approvals
Returns a cursor-paginated list of approval requests for your organization. Filter bystatus or entityType to narrow results.
GET /api/v1/approvals
Create an approval
Creates a new approval request in Draft state. You can optionally provide initial steps in the same request.POST /api/v1/approvals
Requires role: EDITOR. Idempotent with an Idempotency-Key header.
string
required
Human-readable title for the approval (e.g.
"Q1 option grants — engineering cohort"). Maximum 200 characters.string
required
The type of equity event this approval covers. One of:
Stock Issuance, Option Grant, RSU Grant, Warrant Issuance, Convertible Issuance, Stock Transfer, Exercise, Conversion, Cancellation, Repurchase, Valuation, Equity Plan, Stock Split, Other.string
Deadline for completing this approval (
YYYY-MM-DD).string
Free-text context or instructions. Maximum 2000 characters.
array
Initial steps to create alongside the approval. Each element requires a
name (string, max 100 chars). Steps can also be added later via POST /approvals/{id}/steps.201 Created
Get an approval
Retrieves a single approval by ID.GET /api/v1/approvals/{id}
Requires role: VIEWER.
Update an approval
Updates a Draft approval’s metadata. You cannot update an approval that has been submitted or locked.PATCH /api/v1/approvals/{id}
Requires role: EDITOR. Returns 409 Conflict if the approval is not in Draft state.
string
Updated title. Maximum 200 characters.
string
Updated entity type.
string
Updated deadline (
YYYY-MM-DD).string
Updated notes. Maximum 2000 characters.
Delete an approval
Permanently deletes a Draft approval and all its steps. Returns409 Conflict if the approval has been submitted.
DELETE /api/v1/approvals/{id}
Requires role: EDITOR.
204 No Content
Submit for review
Moves a Draft approval to Submitted, signalling that it is ready for step decisions. Returns409 Conflict if the approval is already past Draft state.
POST /api/v1/approvals/{id}/submit
Requires role: EDITOR. No request body.
200 OK
Returns the updated approval object with state: "Submitted".
Add a step
Appends a new approval step to an existing approval. Steps can only be added while the approval is in Draft or Submitted state.POST /api/v1/approvals/{id}/steps
Requires role: EDITOR. Returns 409 Conflict if the approval is locked.
string
required
Display name for the step (e.g.
"CFO sign-off"). Maximum 100 characters.201 Created
string (uuid)
Unique step ID. Reference this as
{stepId} when updating or deleting the step.string
PENDING, APPROVED, or REJECTED.integer
1-based position of this step in the approval sequence.
Lock an approval
Locks an Approved approval, making it immutable and eligible to gate token minting. Returns409 Conflict if the approval is not in Approved state (i.e. all steps must be approved first).
POST /api/v1/approvals/{id}/lock
Requires role: EDITOR. No request body.
200 OK
Returns the updated approval object with state: "Locked" and lockedAt set to the current timestamp.
Approval lifecycle
The diagram below shows the valid state transitions:An approval must reach
Locked status before it can authorize token minting in the Securities table. Approvals in Draft, Submitted, or Approved state are not yet eligible.