Use person operations to synchronize stable profile fields and an optional active company link. List and detail responses are bounded to the public person contract.
Prerequisites
You need contacts:read to list or retrieve people and contacts:write to create or change them. Metadata, custom fields, lifecycle changes, archive, and restore also require Work access.
Set these values once in your shell before running the examples:
Use a personal access token created for this workspace. The examples use synthetic IDs and values; replace them with values returned by your workspace.
Keep FLORAL_TOKEN in a secret manager outside local development. Never commit it to source control or include it in logs.
List people
Filter by lifecycle stage, archive status, or active company. Collections use opaque cursor pagination.
Pass a non-null nextCursor back as cursor for the next page. Use status=archived to find a person before restoring them.
Create a person
Creating a person requires a unique idempotency key. companyId must identify an active company in the same workspace.
A successful request returns 201, a canonical Location, and the new person’s ETag.
Apply a partial update
Retrieve the person first and copy the response ETag:
Send only changed fields with that ETag. Set companyId to null to detach the current company. A customFields object is a typed merge patch; a null entry removes that value.
Replace the saved ETag with the value returned by the update.
Archive and restore
Archive a person with the current ETag and a unique idempotency key:
Restore the same ID with the archive response’s ETag and a new key:
Floral protects writes with two opaque values:
- Send a unique
Idempotency-Key when an operation requires one. Retrying the identical request with the same key replays its result for 24 hours. Within that operation, reusing the key with different canonical input returns 409 IDEMPOTENCY_CONFLICT.
- Send the latest strong
ETag as If-Match when an operation changes an existing resource. A stale value returns 412 VERSION_CONFLICT; a missing value returns 428 PRECONDITION_REQUIRED.
Keep the quote characters around an ETag, and replace your saved value after every successful write. See Reliability and retries for the complete retry rules.