🗑️
Sécurité & conformité·Avancé·8 min

Configurer la politique de rétention et déclencher la suppression

Consultez les durées de conservation par catégorie de données et soumettez une demande d'effacement RGPD (Art. 17) via l'API Coffrify.

Télécharger en PDF

L'API Coffrify expose deux endpoints RGPD complémentaires : GET /v1/gdpr/retention retourne la politique de conservation par catégorie de données et par plan (Free, Pro, Ultra, Entreprise) sans nécessiter d'authentification, tandis que POST /v1/gdpr/deletion enregistre une demande d'effacement au sens de l'article 17 du RGPD pour l'ensemble de l'espace de travail. La suppression effective n'est pas immédiate : elle suit un délai de rétractation de 30 jours, après confirmation par e-mail du propriétaire. Toute requête de suppression est tracée dans le journal d'audit et dans la console RGPD/DSAR de l'administration.

GET/v1/gdpr/retentionRetourne la politique de rétention statique par catégorie de données et par plan. Endpoint public, aucune clé API requise.POST/v1/gdpr/deletionDépose une demande d'effacement RGPD Art. 17 pour l'espace de travail courant. Scope requis : gdpr:request. HTTP 202 en cas de succès.

Authentification

L'endpoint GET /v1/gdpr/retention est public et ne nécessite aucune clé. Pour POST /v1/gdpr/deletion, vous devez présenter une clé API dont les scopes incluent gdpr:request. Utilisez le header Authorization: Bearer <clé> avec une clé de production (cof_live_…) ou de test (cof_test_…). Les clés sandbox (cof_sandbox_…) sont également acceptées en environnement de développement. Toute tentative avec un scope absent retourne 403 scope_missing.

Corps de la requête (POST /v1/gdpr/deletion)

La demande d'effacement ne requiert que peu de champs ; l'essentiel est la confirmation explicite de l'intention. Le tableau ci-dessous précise ce qui est attendu.

ChampTypeRequisDescription
confirmbooleanOuiDoit valoir true pour confirmer que la suppression est irréversible après la période de rétractation de 30 jours. Toute autre valeur déclenche une erreur 400 validation_error.
reasonstringNonMotif libre de la demande d'effacement (tronqué à 1 000 caractères). Conservé dans les métadonnées de l'entrée d'audit.

Exemples d'appel

Les exemples ci-dessous montrent les deux appels : lire la politique de rétention (public, sans clé) puis déposer une demande d'effacement (authentifié, scope gdpr:request).

# 1. Consulter la politique de rétention (public)
curl https://api.coffrify.com/api/v1/gdpr/retention
 
# 2. Déclencher une demande d'effacement
curl -X POST https://api.coffrify.com/api/v1/gdpr/deletion \
-H "Authorization: Bearer cof_live_..." \
-H "Content-Type: application/json" \
-d '{"confirm": true, "reason": "Fin de contrat client"}'

Réponse : GET /v1/gdpr/retention

La réponse détaille, par catégorie de données (data_categories), la durée de conservation pour chaque plan. Utilisez-la pour informer vos utilisateurs ou aligner votre propre politique sur celle de Coffrify.

{
"object": "retention_policy",
"data_categories": [
{ "category": "transfer_files", "free": "30 days", "pro": "365 days", "ultra": "7 years", "entreprise": "configurable" },
{ "category": "audit_logs", "free": "30 days", "pro": "365 days", "ultra": "7 years", "entreprise": "7 years or contract" },
{ "category": "webhook_deliveries", "free": "30 days", "pro": "30 days", "ultra": "30 days", "entreprise": "30 days" },
{ "category": "user_sessions", "free": "90 days", "pro": "90 days", "ultra": "90 days", "entreprise": "90 days" },
{ "category": "download_logs", "free": "30 days", "pro": "365 days", "ultra": "7 years", "entreprise": "7 years or contract" },
{ "category": "newsletter_emails", "free": "until unsubscribe", "pro": "until unsubscribe", "ultra": "until unsubscribe", "entreprise": "until unsubscribe" },
{ "category": "billing_invoices", "free": "n/a", "pro": "10 years (legal)", "ultra": "10 years (legal)", "entreprise": "10 years (legal)" }
],
"after_account_deletion": {
"operational_data": "purged within 30 days of confirmed deletion",
"backups": "purged within 90 days",
"legal_required_data": "kept for the legal minimum (typically 10 years for invoices)"
},
"related_tools": [
"coffrify_request_data_deletion",
"coffrify_gdpr_export",
"coffrify_list_consent_log"
],
"notes": "This policy is informational. Exact retention may be overridden by your contract."
}

Réponse : POST /v1/gdpr/deletion (HTTP 202)

Un 202 Accepted confirme l'enregistrement de la demande, pas son exécution immédiate : l'effacement suit le délai légal et opérationnel. Conservez l'identifiant de la demande pour en suivre l'état.

{
"object": "gdpr_deletion_request",
"workspace_id": "ws_01hxyz...",
"workspace_name": "Acme Corp",
"requested_at": "2026-06-06T14:32:00.000Z",
"cooling_off_until": "2026-07-06T14:32:00.000Z",
"next_steps": [
"An email will be sent to the workspace owner within 24h",
"Owner must confirm via the email link",
"Data is permanently deleted after the 30-day cooling-off period",
"To cancel : contact legal@coffrify.com before the cooling-off ends"
],
"dpo_email": "legal@coffrify.com"
}

Erreurs

Les erreurs portent surtout sur l'authentification et le scope gdpr:request, ou sur une demande déjà en cours pour le même workspace. Le tableau ci-dessous indique la résolution.

Code HTTPCode d'erreurQuandRésolution
400validation_errorLe champ confirm est absent ou vaut false.Passez explicitement "confirm": true dans le corps de la requête.
401missing_api_key / invalid_api_keyAucun header Authorization ou clé mal formée.Vérifiez que vous transmettez Bearer cof_live_… ou Bearer cof_test_….
401expired_api_key / revoked_api_keyLa clé a expiré ou a été révoquée.Régénérez une clé dans la console Coffrify.
403scope_missingLa clé ne possède pas le scope gdpr:request.Créez une clé incluant le scope gdpr:request ou modifiez les scopes de la clé existante.
403ip_not_allowedL'IP source n'est pas dans la liste blanche du workspace.Ajoutez l'IP dans les paramètres de sécurité de l'API.
404not_foundAucun propriétaire trouvé pour l'espace de travail (ws.owner_id nul).Vérifiez que l'espace de travail est actif et possède bien un propriétaire enregistré.
429rate_limitedQuota de requêtes dépassé pour la minute en cours.Attendez la durée indiquée dans l'en-tête Retry-After avant de réessayer.
500internal_errorErreur interne inattendue.Consultez l'en-tête X-Request-Id et contactez le support en fournissant cet identifiant.

Voir aussi

  • Exporter les données RGPD (Art. 20)
  • Consulter le journal d'audit
  • Gérer les consentements et les journaux de consentement
  • Référence complète : endpoint POST /v1/gdpr/deletion
  • Référence complète : endpoint GET /v1/gdpr/retention
  • Sécurité et scopes des clés API
Continuer

Autres tutoriels à suivre