Skip to content
Logo

POST /orgs

Create a new org. The calling user is automatically added to the new org as owner. The org starts with kyb_status draft. See POST /org/kyb/submit when ready to verify.

Bearer sessions only. API keys can't create orgs (they're already scoped to one).

Request body

{
  "name": "Acme Inc.",
  "compliance_email": "compliance@acme.example"
}
FieldTypeRequiredNotes
namestringyes1–80 characters. Display name. Shown in the dashboard and on the org list. Orgs are addressed by UUID, not name.
compliance_emailstringyesCompliance contact address for the new org. Verification starts immediately: the address is marked verified right away when it belongs to a verified member of the org (the creating owner's own address, typically), otherwise a confirmation link is emailed and compliance_email_verified stays false until it's clicked. Changeable later with PUT /org/compliance-email.

Response 201

{
  "org": {
    "id": "0a2a…",
    "name": "Acme Inc.",
    "kyb_status": "draft",
    "compliance_email": "compliance@acme.example",
    "compliance_email_verified": false,
    "created_at": "2026-05-06T15:04:05Z",
    "updated_at": "2026-05-06T15:04:05Z"
  },
  "role": "owner"
}

Errors

  • 400 InvalidRequest: name failed validation (length), or compliance_email was missing, empty, or malformed.
  • 401: no credential.

Example

curl -X POST "$SEISMIC_ORCHESTRATION_URL/v0/orgs" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Acme Inc.",
    "compliance_email": "compliance@acme.example"
  }'

After creation, subsequent org-scoped requests should pass ?org=<id> to target the new org explicitly, even though the auto-pick would resolve correctly when this is the user's only org, being explicit avoids surprises once they create or join a second one.