PUT /org/kyb/profile
Save the org's KYB profile. Every field is optional: the wizard saves partial drafts as the user works through it, and the server stores whatever's in the body without checking for completeness. Required-field enforcement happens at submit time. See POST /org/kyb/submit.
Saving is available whatever the org's verification status — a saved profile is a draft and files nothing upstream. Submission is what's gated: a terminally_rejected or paused org can still be edited but never resubmitted.
PUT replaces the saved profile with the request body: the body is the profile in full, and any field you omit is stored as empty (clearing whatever was there before). This is how you clear an optional field — send the document without it. To change one field without dropping the rest, fetch with GET, edit that field, and PUT the whole document back.
Requires admin or owner role.
Request body: a KybProfile document. Every leaf is nullable and may be incomplete (completeness is only enforced at submit). Absent fields persist as null/empty.
Response 200: the saved KybProfile (canonicalized: empty strings normalized to absent, addresses re-shaped).
Errors:
400: schema invalid. Body had a wrong type (e.g.rolesas a string instead of an array). The error message names the bad path.403: not an admin/owner.
Example: a minimal first save. Because PUT replaces the whole document, this stores the legal name and tax id and leaves every other field empty — to update an existing profile without clearing it, GET it first, change the fields you want, and PUT the merged document.
curl -X PUT "$SEISMIC_ORCHESTRATION_URL/v0/org/kyb/profile" \
-H "Api-Key: $SEISMIC_ORCHESTRATION_API_KEY" \
-H "content-type: application/json" \
--data '{
"business": {
"legal_name": "Acme Inc.",
"tax_id": "82-1234567"
}
}'