Enregistrer un échange entrant
const url = 'https://example.com/relation-tiers/v1/interactions';const options = { method: 'POST', headers: { 'Idempotency-Key': 'example', Authorization: 'Bearer <token>', 'Content-Type': 'application/json' }, body: '{"direction":"INBOUND","channel":"example","businessAt":"2026-04-15T12:00:00Z","receivedAt":"2026-04-15T12:00:00Z","transportMessageId":"example","contentFingerprint":"example","contentRef":"example","participants":[{"actorId":"example","role":"example"}],"unknownAuthor":true,"summaryRef":"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/interactions \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --header 'Idempotency-Key: example' \ --data '{ "direction": "INBOUND", "channel": "example", "businessAt": "2026-04-15T12:00:00Z", "receivedAt": "2026-04-15T12:00:00Z", "transportMessageId": "example", "contentFingerprint": "example", "contentRef": "example", "participants": [ { "actorId": "example", "role": "example" } ], "unknownAuthor": true, "summaryRef": "example" }'Autorisations
Section intitulée « Autorisations »Paramètres
Section intitulée « Paramètres »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.
Corps de la requêterequired
Section intitulée « Corps de la requêterequired »object
La référence du contenu — jamais le contenu lui-même.
object
Vrai si aucun participant n’est identifiable à la réception.
Réponses
Section intitulée « Réponses »L’échange est durable — l’original est immuable.
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 sur une ressource produit 404 (ne rien révéler), jamais ce code.
Version obsolète, chevauchement interdit ou clé d’idempotence réutilisée avec un contenu différent.
L’enveloppe d’erreur du catalogue (Problem Details).
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, référence externe non résolue ou preuve insuffisante.
L’enveloppe d’erreur du catalogue (Problem Details).
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" } ]}