Identities
Understand identities, the KYC/AML records (persons, companies, governments) that everything in Seqlense is scoped to, and learn how to create, search, and manage them.
An identity is the core KYC/AML record in Seqlense. It represents a real-world party you need to know about: a person, a company, or a government body. Wallets, alerts, and monitoring rules all attach back to identities, so this is usually the first thing you create.
Every identity belongs to your organization. The API resolves your organization from the API key on the request; you never pass an org ID, and you can only ever see or touch your own identities.
The three types
Each identity has a type, and a matching block of type-specific fields.
| Type | Represents | Required fields | Notable fields |
|---|---|---|---|
PERSON | An individual | first_name, last_name | date_of_birth, nationality, gender, pep_status |
COMPANY | A legal entity | legal_name | registration_number, country_of_incorporation, legal_form |
GOVERNMENT | A public/state body | official_name | country_code, institution_type, jurisdiction_level |
A few field conventions apply across the board:
- Country codes are ISO 3166-1 alpha-2 (
FR,US,DE…). - Dates are ISO
YYYY-MM-DD. pep_status(persons) flags a Politically Exposed Person: one ofNONE,PEP,RELATIVE, orCLOSE_ASSOCIATE. Defaults toNONE.display_nameis computed by the platform from the type-specific fields (person name, company legal name, or government official name) and returned on list responses; you don't set it directly.
Create an identity
POST /v1/identity/ with a type and that type's required fields. The response
returns the new identity's UUID.
Create a person
curl -X POST "https://api.seqlense.com/v1/identity/" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "PERSON",
"first_name": "Alice",
"last_name": "Martin",
"nationality": "FR",
"date_of_birth": "1990-05-14",
"pep_status": "NONE"
}'{ "status": "ok", "id": "6f9619ff-8b86-d011-b42d-00c04fc964ff" }Create a company
For a French company, put a valid SIRET in registration_number, and Seqlense
enriches it automatically (see SIRET enrichment).
curl -X POST "https://api.seqlense.com/v1/identity/" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "COMPANY",
"legal_name": "ACME SAS",
"registration_number": "55210055400013",
"country_of_incorporation": "FR"
}'List, search, and paginate
GET /v1/identity/ returns your active identities, 20 per page, newest first.
Filter with type, search names with q, and page with page.
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.seqlense.com/v1/identity/?type=COMPANY&q=acme&page=1"{
"identities": [
{
"id": "…",
"type": "COMPANY",
"display_name": "ACME SAS",
"country": "FR",
"created_at": "2026-07-27T10:00:00Z",
"updated_at": "2026-07-27T10:00:00Z"
}
],
"pagination": {
"page": 1, "page_size": 20, "total": 1,
"total_pages": 1, "has_next": false, "has_prev": false
}
}Use GET /v1/identity/detail?id=… for the full record (including the
type-specific block), and GET /v1/identity/count for dashboard totals by type.
Update
PUT /v1/identity/ is a partial update: pass the id plus only the fields
you want to change. The type itself cannot change.
curl -X PUT "https://api.seqlense.com/v1/identity/" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "id": "6f9619ff-8b86-d011-b42d-00c04fc964ff", "pep_status": "PEP" }'Delete, trash, and restore
Deletes are soft: the API never hard-deletes an identity. This keeps your audit trail intact and lets you recover from mistakes.
DELETE /v1/identity/?id=…moves an identity to the trash (is_active = false).GET /v1/identity/deletedlists trashed identities.POST /v1/identity/restore({ "id": "…" }) brings one back.
For human users signed into the dashboard, delete, restore, trash, bulk, and SIRET-refresh operations require admin privileges. API keys are treated as trusted server-to-server callers and are always allowed.
Bulk import
Onboarding an existing book of clients? Use the bulk endpoints instead of looping:
POST /v1/identity/bulk: up to 1000 identities in one call. Each item is validated independently; the response reportssuccess,failed, and a per-itemerrorsarray (with the offending index and reason).POST /v1/identity/bulk-delete: soft-delete up to 500 identities byid.
curl -X POST "https://api.seqlense.com/v1/identity/bulk" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"items": [
{ "type": "PERSON", "first_name": "Alice", "last_name": "Martin" },
{ "type": "COMPANY", "legal_name": "ACME SAS" }
]
}'Audit trail
Every mutation (create, update, delete, restore, SIRET refresh) is recorded.
GET /v1/identity/activity returns that history, newest first, 50 per page. Pass
id to scope it to a single identity, or q to search titles, details, and
actor names. Each event records the actor: a user ID, or api_key when the
change came from an API key.
SIRET enrichment (French companies)
When a COMPANY has a valid French SIRET in registration_number (and the
country is FR or left unset), Seqlense fetches its official
SIRENE registry data in the background: legal form, NAF
activity code, headcount, address, geolocation, status, and more.
GET /v1/identity/siret?id=…returns the stored enrichment.POST /v1/identity/siret/refresh({ "id": "…" }) forces a re-fetch.
Enrichment is best-effort: a failed lookup never blocks the identity write. If a
company's registration number is later changed to something that isn't a valid FR
SIRET, the stale enrichment is dropped. For security, the refresh endpoint only
accepts an identity id (never a raw SIRET), so it can't be used as an open
proxy to the upstream registry.
Full reference
Every endpoint, parameter, schema, and a live "try it" console are in the API Reference.