Seqlense docs

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.

TypeRepresentsRequired fieldsNotable fields
PERSONAn individualfirst_name, last_namedate_of_birth, nationality, gender, pep_status
COMPANYA legal entitylegal_nameregistration_number, country_of_incorporation, legal_form
GOVERNMENTA public/state bodyofficial_namecountry_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 of NONE, PEP, RELATIVE, or CLOSE_ASSOCIATE. Defaults to NONE.
  • display_name is 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/deleted lists 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 reports success, failed, and a per-item errors array (with the offending index and reason).
  • POST /v1/identity/bulk-delete: soft-delete up to 500 identities by id.
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.

On this page