API conversions
API conversions
Utilisez cet endpoint quand la conversion a lieu sur votre serveur. L'autre chemin est le pixel navigateur : Suivi des conversions enregistre PageView et Conversion dans la page, conserve le clic 30 jours, et peut envoyer le même event_id.
Les deux chemins appellent la même ingestion. Envoyez le même event_id depuis le pixel et depuis le serveur pour ne stocker qu'une ligne par commande.
Endpoint
POST https://tyfrhxfejrawgdlhryfu.supabase.co/functions/v1/conversions-api
La clé doit avoir le droit conversions. read et write n'autorisent pas cet appel. Cet endpoint n'utilise pas les 120 requêtes par minute de l'API annonceurs.
curl -X POST 'https://tyfrhxfejrawgdlhryfu.supabase.co/functions/v1/conversions-api' \
-H 'Authorization: Bearer idl_adv_xxx' \
-H 'Content-Type: application/json' \
-d '{
"event_name": "Purchase",
"value": 49.00,
"currency": "EUR",
"click_id": "CAMPAIGN_OR_CLICK_UUID",
"clicked_at": "2026-11-01T12:00:00Z",
"ad_id": "AD_UUID",
"email_sha256": "SHA256_OF_NORMALIZED_EMAIL",
"event_id": "order-1001",
"timestamp": "2026-11-04T08:00:00Z"
}'
Authorization: Bearer et x-api-key fonctionnent tous les deux. L'organisation est celle de la clé.
Le snake case et le camel case sont acceptés : event_name ou eventName, click_id ou clickId, ad_id ou adId, event_id ou eventId, email_sha256 ou emailSha256, clicked_at ou clickedAt. timestamp ou event_time fixe l'heure de l'événement.
Corps
| Champ | Obligatoire | Règle |
|---|---|---|
event_name | Oui | Non vide. L'appel serveur est strict |
value | Non | Nombre. Une valeur non numérique renvoie 400 |
currency | Non | Trois lettres, stockées en majuscules |
click_id | Non | UUID. Soit clicks.id, soit idlen_cid du pixel (l'id de campagne) |
clicked_at | Non | Date du clic. Utilisée quand click_id est un id de campagne |
ad_id | Non | UUID d'une annonce de cette organisation |
email_sha256 | Non | SHA-256 hexadécimal minuscule de l'e-mail normalisé, 64 caractères |
event_id | Non | 1 à 128 caractères, [A-Za-z0-9_.:-]. Déduplique avec le pixel |
timestamp | Non | Heure de l'événement. Une heure à plus de 5 minutes dans le futur est stockée comme maintenant |
event_name est obligatoire. email_sha256 doit être un SHA-256 hexadécimal en minuscules. event_id doit respecter le motif ci-dessus. Une devise invalide renvoie 400. Ces contrôles sont stricts sur cet endpoint.
Attribution
click_id est rapproché d'un clic de cette organisation, ou d'un id de campagne de cette organisation. Un clic connu de plus de 30 jours est ignoré, la même fenêtre que le cookie du pixel. Un événement serveur sans heure de clic est stocké et non attribué.
La réponse :
{
"success": true,
"id": "EVENT_UUID",
"deduplicated": false,
"attributed": true
}
deduplicated vaut true quand cet event_id est déjà stocké pour l'organisation. id est la ligne stockée, ou null.
Erreurs
Cet endpoint n'utilise pas l'objet d'erreur de l'API annonceurs. Les échecs sont { "error": "message" }.
| Statut | error |
|---|---|
400 | Invalid JSON body, value must be a number, event_name is required, Invalid event_id, email_sha256 must be a lowercase hex SHA-256, Invalid currency |
401 | Missing API key, Invalid API key, ou Auth failed |
405 | Method not allowed (POST seulement) |
500 | Server configuration error, ou l'erreur d'ingestion quand ce n'est pas une erreur client |
503 | Conversions API is not deployed yet |
Seul POST est accepté. OPTIONS renvoie 200 pour le preflight navigateur.
Créez la clé dans Ads Manager sous Paramètres → Clés API, avec le droit conversions. La même clé peut aussi avoir read et write si vous appelez l'API annonceurs et le serveur MCP.