Référence APITrancher une demande d'approbation (alias POST)
POST/v1/approvals/{id}/decide

Trancher une demande d'approbation (alias POST)

Alias POST de la décision d'approbation, pour les clients HTTP ne supportant pas PATCH.

1 min de lectureTélécharger en PDF

Requête exemple

{
"decision": "reject",
"decision_reason": "Destinataire non autorisé pour ce niveau de sensibilité."
}

Réponse exemple

{
"id": "appr_9f2c1a7e-4b8d-4e21-9a3c-2f6e0b1d5c44",
"type": "transfer",
"reason": "Transfert externe vers un destinataire hors UE",
"status": "rejected",
"metadata": {
"type": "transfer",
"sensitivity": "high"
},
"created_at": "2026-06-05T09:12:44.000Z",
"decided_at": "2026-06-05T10:03:22.108Z",
"decided_by": "usr_88990011-2233-4455-6677-8899aabbccdd",
"expires_at": null,
"resource_id": "trf_5e6f7a8b-9c0d-4e1f-2a3b-4c5d6e7f8091",
"sensitivity": "high",
"requested_at": "2026-06-05T09:12:44.000Z",
"requested_by": "usr_a1b2c3d4-e5f6-4789-9abc-def012345678",
"workspace_id": "ws_3d8a2b1c-7e54-4f09-8c2a-1b6d9e3f0a21",
"decision_note": "Destinataire non autorisé pour ce niveau de sensibilité."
}

Cette route est un alias strict de la méthode PATCH (export const POST = PATCH). Elle existe pour les clients HTTP qui ne savent pas émettre de requête PATCH. Le comportement est identique en tout point : elle tranche une demande d'approbation en attente, applique le principe des quatre yeux et l'owner-exempt, écrit la double piste d'audit, notifie le demandeur et propage la décision aux transferts concernés. Une approbation produit également un token de réversibilité valable 5 minutes.

Authentification

Cette route exige une clé API valide disposant du scope workspace:manage, portant un contexte utilisateur (le décideur enregistré dans decided_by).

Corps de la requête

ChampTypeRequisDescription
decisionstringOuiDécision à appliquer. Valeurs acceptées : approve ou reject. Toute autre valeur renvoie 400 validation_error.
decision_reasonstring | nullConditionnelMotif de la décision. Obligatoire (non vide) lorsque decision = reject, sinon facultatif. Enregistré dans decision_note, l'audit et la notification du demandeur.
notestring | nullNonAlias legacy de decision_reason. Utilisé en repli si decision_reason est absent.

L'identifiant de la demande est porté par le chemin (/v1/approvals/{id}/decide). Un id manquant renvoie 400 validation_error.

Réponse

La réponse est l'objet ApprovalRecord mis à jour, renvoyé directement sans enveloppe. Les champs notables sont status (approved ou rejected), decided_by, decided_at, decision_note, ainsi que type, resource_id et sensitivity. Pour une demande de transfert, coffrify_transfers.approval_status est mis à jour côté serveur en cohérence.

Erreurs

CodeQuandRésolution
400 validation_errorid absent du chemin, decision invalide, motif manquant sur un reject, ou clé API sans contexte utilisateur.Corrigez l'URL/le corps et utilisez une clé liée à un utilisateur.
403 forbiddenAuto-approbation (quatre yeux) ou demande issue du propriétaire du workspace (owner-exempt).Faites trancher par un autre membre habilité.
404 not_foundAucune demande avec cet id dans le workspace de la clé.Vérifiez l'identifiant et le périmètre du workspace.
409 conflictDemande déjà décidée (approved, rejected, expired ou revoked).Aucune action : la décision est définitive.
429 rate_limitedQuota d'écriture du workspace dépassé.Respectez Retry-After et lissez les appels.
500 internal_errorÉchec inattendu de la mise à jour en base.Réessayez ; persistant, contactez le support avec le request_id.

Voir aussi

PATCH/v1/approvals/{id}/decideMéthode canonique de cette route ; POST en est l'alias strict.GET/v1/approvalsLister les demandes d'approbation et filtrer celles en attente.POST/v1/approvals/{id}/approveRoute legacy d'approbation, proxiant la logique unifiée.