Clôturer le rattachement
const url = 'https://example.com/relation-tiers/v1/contact-assignments/example:close';const options = { method: 'POST', headers: { 'Idempotency-Key': 'example', 'If-Match': 'example', Authorization: 'Bearer <token>', 'Content-Type': 'application/json' }, body: '{"reasonCode":"example","effectiveAt":"2026-04-15T12:00:00Z","comment":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://example.com/relation-tiers/v1/contact-assignments/example:close \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --header 'Idempotency-Key: example' \ --header 'If-Match: example' \ --data '{ "reasonCode": "example", "effectiveAt": "2026-04-15T12:00:00Z", "comment": "example" }'Autorisations
Section intitulée « Autorisations »Paramètres
Section intitulée « Paramètres »Paramètres (path)
Section intitulée « Paramètres (path) »Paramètres (header)
Section intitulée « Paramètres (header) »Facultatif — le tenant fait foi dans le jeton ; s’il est fourni, il doit être identique, et le corps ne peut jamais le choisir.
La clé d’idempotence de la commande — liée à l’intention métier, pas à la tentative réseau ; même clé et même contenu rejouent le résultat initial, même clé et contenu différent font 409 IDEMPOTENCY_CONFLICT.
La version d’agrégat attendue — 409 CONCURRENT_MODIFICATION sinon.
Corps de la requêterequired
Section intitulée « Corps de la requêterequired »object
Examplegenerated
{ "reasonCode": "example", "effectiveAt": "2026-04-15T12:00:00Z", "comment": "example"}Réponses
Section intitulée « Réponses »Le rattachement est clôturé.
object
Examplegenerated
{ "id": "example", "aggregateVersion": 1, "status": "example"}Aucune identité présentée (401).
L’identité présentée n’a pas la famille d’accès requise (403). Les 403 croisés entre familles sont prouvés par les tests d’assemblage. Un écart de tenant ne produit jamais ce code sur une ressource — il produit 404 (ne rien révéler).
Ressource absente ou invisible — y compris une ressource d’un autre tenant : le régime de la muraille ne révèle pas l’existence (404, jamais 403).
L’enveloppe d’erreur du catalogue (Problem Details) — le texte n’expose ni l’existence d’un objet d’un autre tenant, ni une donnée sensible.
object
object
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "code": "example", "detail": "example", "instance": "example", "correlationId": "example", "retryable": true, "violations": [ { "field": "example", "reason": "example", "ruleId": "example" } ]}Version obsolète (CONCURRENT_MODIFICATION), chevauchement interdit (PERIOD_OVERLAP) ou clé d’idempotence réutilisée avec un contenu différent (IDEMPOTENCY_CONFLICT).
L’enveloppe d’erreur du catalogue (Problem Details) — le texte n’expose ni l’existence d’un objet d’un autre tenant, ni une donnée sensible.
object
object
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "code": "example", "detail": "example", "instance": "example", "correlationId": "example", "retryable": true, "violations": [ { "field": "example", "reason": "example", "ruleId": "example" } ]}Donnée comprise mais non admissible — règle identifiée (BUSINESS_RULE_VIOLATION), référence externe non résolue (REFERENCE_UNRESOLVED) ou preuve insuffisante (CAPACITY_INDETERMINATE).
L’enveloppe d’erreur du catalogue (Problem Details) — le texte n’expose ni l’existence d’un objet d’un autre tenant, ni une donnée sensible.
object
object
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "code": "example", "detail": "example", "instance": "example", "correlationId": "example", "retryable": true, "violations": [ { "field": "example", "reason": "example", "ruleId": "example" } ]}