Files
PaperClipAI/docs/api/approvals.md
T
Harold KimandPaperclip 98df214917 fix: fail closed on unusable Codex auth during sandbox auth merge
When reusing a Codex sandbox, the workspace-restore step now performs
an auth-merge check before adopting the sandbox's auth.json. The merge
fails closed when:

- host or sandbox Codex auth is unusable (missing token or account)
- the subscription payload shapes differ between host and sandbox
- subscription account identities do not match

Additional hardening: node absence on PATH during the embedded decision
script now exits non-zero instead of silently falling through. Co-change
comments link parseAuth (the embedded script) to hasUsableAuthPayload
(codex-home.ts) so a future auth-format change cannot silently diverge
between the two implementations.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-09 10:08:57 +00:00

1.8 KiB

title, summary
title summary
Approvals Approval workflow endpoints

Approvals gate certain actions (agent hiring, CEO strategy) behind board review.

List Approvals

GET /api/companies/{companyId}/approvals

Query parameters:

Param Description
status Filter by status (e.g. pending)

Get Approval

GET /api/approvals/{approvalId}

Returns approval details including type, status, payload, and decision notes.

Create Approval Request

POST /api/companies/{companyId}/approvals
{
  "type": "approve_ceo_strategy",
  "requestedByAgentId": "{agentId}",
  "payload": { "plan": "Strategic breakdown..." }
}

Create Hire Request

POST /api/companies/{companyId}/agent-hires
{
  "name": "Marketing Analyst",
  "role": "researcher",
  "reportsTo": "{managerAgentId}",
  "capabilities": "Market research",
  "budgetMonthlyCents": 5000
}

Creates a draft agent and a linked hire_agent approval.

Approve

POST /api/approvals/{approvalId}/approve
{ "decisionNote": "Approved. Good hire." }

Reject

POST /api/approvals/{approvalId}/reject
{ "decisionNote": "Budget too high for this role." }

Request Revision

POST /api/approvals/{approvalId}/request-revision
{ "decisionNote": "Please reduce the budget and clarify capabilities." }

Resubmit

POST /api/approvals/{approvalId}/resubmit
{ "payload": { "updated": "config..." } }

Linked Issues

GET /api/approvals/{approvalId}/issues

Returns issues linked to this approval.

Approval Comments

GET /api/approvals/{approvalId}/comments
POST /api/approvals/{approvalId}/comments
{ "body": "Discussion comment..." }

Approval Lifecycle

pending -> approved
        -> rejected
        -> revision_requested -> resubmitted -> pending