
# Importer des enregistrements de consentement

`POST /v1/jobs/consent-imports` · autorisation `consent-records:write`

Importe les acceptations de vos documents juridiques qui ont été enregistrées dans un autre système, par exemple lorsque vous migrez des utilisateurs vers KeenAuth. La requête est synchrone : de 1 à 500 enregistrements sont écrits dans une seule transaction, de sorte que soit tous sont écrits, soit aucun ne l'est. Chaque enregistrement importé comporte `method = import`, et `occurred_at` conserve l'heure du système source. La version, le hachage du contenu et la langue sont repris du document ; vous ne pouvez pas les fournir. Les enregistrements importés sont en ajout seul, comme tous les autres enregistrements de consentement. Pour enregistrer une seule acceptation obtenue à l'instant, utilisez [Enregistrer un consentement](/docs/api/management/users/create-consent-record).

`Idempotency-Key` est obligatoire. Une nouvelle tentative avec la même clé et la même requête renvoie la même réponse (avec `Idempotent-Replayed: true`) et n'écrit rien une seconde fois.

## Requête

Corps JSON (les champs inconnus sont rejetés avec `400 unknown_field`) :

| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| `records` | object[] | oui | De 1 à 500 enregistrements, écrits dans cet ordre. |
| `records[].user_id` | string | oui | Identifiant de l'utilisateur (`usr_…`). |
| `records[].subject_type` | string | oui | Uniquement `document`. |
| `records[].subject_id` | string | oui | Identifiant du document juridique (`ldoc_…`). |
| `records[].state` | string | oui | `presented`, `accepted` ou `declined`. |
| `records[].application_id` | string \| null | non | Application (`app_…`) ; si ce champ est omis et que le document est propre à une application, l'application du document est enregistrée. |
| `records[].occurred_at` | string (date-time) | oui | Moment de l'événement dans le système source ; ne doit pas être dans le futur. |

## Réponse

`201 Created` avec les enregistrements écrits (`records`), dans l'ordre de la requête.

```json
{
  "imported_count": 1,
  "records": [
    {
      "id": "crec_01j9xk3m7q8r2s4t6v8w0y2z4b",
      "user_id": "usr_01j9xk3m7q8r2s4t6v8w0y2z4c",
      "subject_type": "document",
      "subject_id": "ldoc_01j9xk3m7q8r2s4t6v8w0y2z4a",
      "subject_version": "2026-10",
      "content_sha256": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
      "locale": "en",
      "state": "accepted",
      "method": "import",
      "application_id": null,
      "occurred_at": "2025-03-14T08:00:00Z"
    }
  ]
}
```

## Erreurs

| HTTP | code | Quand |
|---|---|---|
| 400 | `malformed_request`, `unknown_field` | L'en-tête `Idempotency-Key` est absent ou mal formé, le corps n'est pas du JSON valide, ou il contient un champ inconnu. |
| 401 | `unauthenticated` | Les identifiants sont absents, invalides ou révoqués. |
| 403 | `insufficient_permissions` | Les identifiants ne disposent pas de l'autorisation requise. |
| 413 | `payload_too_large` | Le corps dépasse 1 Mio. |
| 415 | `unsupported_media_type` | Le type de contenu n'est pas `application/json`. |
| 422 | `validation_failed` | Un enregistrement est invalide ; `errors[].pointer` vaut `/records/<index>/<field>`. Un utilisateur inconnu donne `unknown_user`, une application inconnue `unknown_application`, un document inconnu `unknown_subject` ; moins de 1 ou plus de 500 enregistrements donne `out_of_range` à `/records`. Rien n'est écrit. |
| 422 | `idempotency_key_reuse` | La `Idempotency-Key` a été utilisée avec une autre requête. |
| 429 | `rate_limited` | La limite de débit a été dépassée ; réessayez après la période `Retry-After`. |
| 503 | `service_unavailable` | Une dépendance est temporairement indisponible ; réessayez après la période `Retry-After`. |

## Exemple

```bash
curl -X POST https://api.eu.keenauth.com/v1/jobs/consent-imports \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"records":[{"user_id":"usr_01j9xk3m7q8r2s4t6v8w0y2z4c","subject_type":"document","subject_id":"ldoc_01j9xk3m7q8r2s4t6v8w0y2z4a","state":"accepted","occurred_at":"2025-03-14T08:00:00Z"}]}'
```

CLI : `keenauth jobs consent-imports create --data records.json`

## Données personnelles

Ce point de terminaison contient des données personnelles : des enregistrements de consentement. [Données personnelles dans les API KeenAuth](/docs/policies/personal-data) décrit ce qui est stocké, la durée de conservation et la manière dont elles sont supprimées. N'envoyez aucune catégorie particulière de données personnelles (santé, données biométriques, religion, opinions politiques, orientation sexuelle) dans aucun champ.
