> ## Documentation Index
> Fetch the complete documentation index at: https://internal.softcrum.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Customer Core — APIs y liberación

> Los endpoints del contacto, su comportamiento y su consentimiento, más la ingesta de eventos, que es la superficie con el presupuesto de latencia más ajustado de la suite.

Cada endpoint declara **exactamente un permiso** (R16) y pertenece a **una sola clase de SLO**
(DEC-D7). Hasta que su entrega esté lista el endpoint no existe, ni siquiera devolviendo 501.

## Cómo se lee la columna *Desde*

Todo lo de esta página pertenece a **[`R1 · Customer Core`](/releases/r1-customer-core)**, una de las cinco entregas de
[Release 1](/releases/overview) (`2026.11`). Las fases F1a/F1b/F2 son **orden de construcción**
dentro del release, no versiones ([ADR-025](/adr/adr-025-release-model)). La columna *Orden* dice
cuándo se construye: `1` lo que bloquea al resto, `2` lo que completa la propuesta.

## Runtime API — ingesta, SLO p95 \<100 ms

Es el endpoint más caliente de la plataforma. Autentica, valida con Zod, aplica rate limit, encola y
devuelve `202`. **Todo el trabajo real ocurre detrás de la cola**
([ADR-013](/adr/adr-013-ingestion-pipeline)).

| Endpoint                 | Permiso               | Respuesta                  | Desde                | Orden | Spec                                                                |
| ------------------------ | --------------------- | -------------------------- | -------------------- | ----- | ------------------------------------------------------------------- |
| `POST /v1/core/track`    | `core.events.write`   | `202` con el id del evento | `R1 · Customer Core` | 1     | [FS-CORE-0006](/modules/core/features/fs-core-0006-event-ingestion) |
| `POST /v1/core/identify` | `core.contacts.write` | `202`                      | `R1 · Customer Core` | 1     | [FS-CORE-0006](/modules/core/features/fs-core-0006-event-ingestion) |
| `POST /v1/core/batch`    | `core.events.write`   | `202`                      | `R1 · Customer Core` | 1     | [FS-CORE-0006](/modules/core/features/fs-core-0006-event-ingestion) |

## Member API — SLO p95 \<150 ms

| Endpoint                                 | Autorización                       | Desde                | Orden | Spec                                                                |
| ---------------------------------------- | ---------------------------------- | -------------------- | ----- | ------------------------------------------------------------------- |
| `POST /v1/core/members/token-exchange`   | token del tenant → token de member | `R1 · Customer Core` | 1     | [FS-CORE-0009](/modules/core/features/fs-core-0009-member-identity) |
| `GET /v1/core/members/me`                | token de member                    | `R1 · Customer Core` | 1     | [FS-CORE-0009](/modules/core/features/fs-core-0009-member-identity) |
| `GET·PATCH /v1/core/members/me/consents` | token de member                    | `R1 · Customer Core` | 1     | [FS-CORE-0004](/modules/core/features/fs-core-0004-consents)        |

## Management API — SLO p95 \<1 s

| Recurso            | Endpoints                                                                                  | Permisos                               | Desde                | Orden | Spec                                                                    |
| ------------------ | ------------------------------------------------------------------------------------------ | -------------------------------------- | -------------------- | ----- | ----------------------------------------------------------------------- |
| Catálogos          | `GET /v1/core/currencies` · `/countries` · `/national-id-types` · `/notification-channels` | `core.catalogs.read`                   | `R1 · Customer Core` | 1     | [FS-CORE-0001](/modules/core/features/fs-core-0001-platform-catalogs)   |
| Contactos          | CRUD `/v1/core/contacts`                                                                   | `core.contacts.{read,create,update}`   | `R1 · Customer Core` | 1     | [FS-CORE-0002](/modules/core/features/fs-core-0002-contacts)            |
| Documento completo | `GET /v1/core/contacts/{id}/national-id`                                                   | `core.contacts.read_national_id`       | `R1 · Customer Core` | 1     | [FS-CORE-0002](/modules/core/features/fs-core-0002-contacts)            |
| Identidades        | `GET·POST·DELETE /v1/core/contacts/{id}/identities`                                        | `core.contacts.update`                 | `R1 · Customer Core` | 1     | [FS-CORE-0003](/modules/core/features/fs-core-0003-identity-resolution) |
| Fusiones           | `POST /v1/core/contacts/merge` · `GET /v1/core/merge-suggestions`                          | `core.contacts.merge`                  | `R1 · Customer Core` | 1     | [FS-CORE-0003](/modules/core/features/fs-core-0003-identity-resolution) |
| Consentimientos    | `GET·POST /v1/core/contacts/{id}/consents`                                                 | `core.consents.{read,write}`           | `R1 · Customer Core` | 1     | [FS-CORE-0004](/modules/core/features/fs-core-0004-consents)            |
| Auditoría          | `GET /v1/core/audit-log`                                                                   | `core.audit.read`                      | `R1 · Customer Core` | 1     | [FS-CORE-0005](/modules/core/features/fs-core-0005-audit-log)           |
| Eventos            | `GET /v1/core/events`                                                                      | `core.events.read`                     | `R1 · Customer Core` | 1     | [FS-CORE-0006](/modules/core/features/fs-core-0006-event-ingestion)     |
| Dead letters       | `GET /v1/core/dead-letters` · `POST /v1/core/dead-letters/{id}/replay`                     | `core.jobs.{read,replay}`              | `R1 · Customer Core` | 1     | [FS-CORE-0007](/modules/core/features/fs-core-0007-job-infrastructure)  |
| Segmentos          | CRUD `/v1/core/segments` · `GET /v1/core/segments/{id}/members`                            | `core.segments.{read,create,update}`   | `R1 · Customer Core` | 1     | [FS-CORE-0008](/modules/core/features/fs-core-0008-segments)            |
| Consumo            | `GET /v1/core/usage`                                                                       | `core.usage.read`                      | `R1 · Customer Core` | 1     | [FS-CORE-0010](/modules/core/features/fs-core-0010-usage-snapshots)     |
| Atributos          | CRUD `/v1/core/attribute-definitions`                                                      | `core.attributes.{read,create,update}` | `R1 · Customer Core` | 2     | [FS-CORE-0011](/modules/core/features/fs-core-0011-custom-attributes)   |
| Taxonomías         | `GET /v1/core/taxonomies` · `POST /v1/core/taxonomies/{id}/install`                        | `core.taxonomies.{read,install}`       | `R1 · Customer Core` | 2     | [FS-CORE-0012](/modules/core/features/fs-core-0012-event-taxonomies)    |
| Importación        | `POST /v1/core/imports` · `GET /v1/core/imports/{id}`                                      | `core.imports.{read,create}`           | `R1 · Customer Core` | 2     | [FS-CORE-0013](/modules/core/features/fs-core-0013-imports)             |
| Derechos ARCO      | `POST /v1/core/subject-requests` · `GET /v1/core/subject-requests/{id}`                    | `core.subject_requests.{read,create}`  | `R1 · Customer Core` | 2     | [FS-CORE-0014](/modules/core/features/fs-core-0014-erasure-portability) |

## La supresión es la excepción del borrado

Un contacto se elimina y se purga como cualquier recurso de forma A. Pero cuando la eliminación
viene de un **derecho de supresión** (Ley 21.719), el perfil y los eventos se borran y **las filas
del ledger se anonimizan a un tombstone, nunca se destruyen**: es lo que reconcilia el derecho del
titular con la integridad contable (`standards/data.md` §5).

## Eliminar y purgar

Todo recurso de forma A expone las dos, con **permisos distintos**
([`standards/data.md`](/standards/data) §1b):

| Endpoint                                   | Qué hace                                                | Permiso                   | Reversible                     |
| ------------------------------------------ | ------------------------------------------------------- | ------------------------- | ------------------------------ |
| `DELETE /v1/core/{{recurso}}/{{id}}`       | Soft delete: escribe `deleted_at`                       | `core.{{recurso}}.delete` | Sí, con `POST /{{id}}/restore` |
| `DELETE /v1/core/{{recurso}}/{{id}}/purge` | Hard delete: borra la fila, `409` si algo la referencia | `core.{{recurso}}.purge`  | **No**                         |

Purgar exige haber eliminado antes. Las tablas append-only no exponen ninguna de las dos.

## Reglas que aplican a todos

* **Un permiso por endpoint** (R16), con la forma `core.{{recurso}}.{{acción}}`.
* **Nuestras propias superficies consumen solo esta API** (R17).
* **Errores como RFC 9457** `problem+json` con un `code` estable, que es parte del contrato.
* **Los presupuestos de latencia son criterio de Definition of Done** (R18), verificados con prueba
  de carga en certificación.
