Capturia mesure ses publicités et la fréquentation du site avec le pixel Meta et Google Analytics. Tu peux refuser en tout temps. En savoir plus

EN

Pipeline

5 endpoints

get/v1/pipeline/deals

Lister les opportunités du pipeline

Retourne la liste paginée des deals (opportunités) du client (cursor v2). Tri stable created_at DESC, id DESC.

Un deal n'est PAS une entité distincte en base : c'est un client_contacts ayant pipeline_stage_id IS NOT NULL. Le sous-ensemble de champs exposé est volontairement réduit aux infos pertinentes pour la vue pipeline (coordonnées + stage + valeur + score). Pour le contact complet (custom_fields, tags, notes), utiliser GET /v1/contacts/{id}.

Filtres

  • ?stage_id (uuid) — filtre exact sur la stage du pipeline.

Fiches fusionnées

Une fiche absorbée par une fusion n'apparaît plus dans la liste : son historique vit dans la fiche conservée, seule à être listée.

Pas de GET single

Aucun endpoint GET /v1/pipeline/deals/{id} n'est exposé — pour récupérer un deal individuel, utiliser GET /v1/contacts/{id} ou filtrer cette liste par ?stage_id.

Scopes requis: pipeline:read

Paramètres de requête

NomTypeObligatoireDescription
stage_idstringoptionnelFiltre exact sur la stage du pipeline.

Responses

StatutDescription
200

Liste paginée des deals.

400

La requête est mal formée (header manquant, JSON invalide, paramètre invalide).

401

Clé API inconnue ou format invalide.

403

Refus d'autorisation. Deux causes, distinguées par code : insufficient_scope (la clé ne possède pas le scope requis — details.required_scope) ou feature_not_available (l'API publique ou le module visé n'est pas inclus dans le forfait du compte — details.feature nomme la fonctionnalité, ex. public_api, quotes). Un refus de forfait est définitif pour la clé : inutile de réessayer, le compte doit changer de forfait.

429

Le quota de requêtes par fenêtre est dépassé pour cette clé API ou cet endpoint.

500

Erreur serveur inattendue. Toujours fournir le request_id au support.

Exemple de requête

curl -X GET 'https://api.capturia.io/v1/pipeline/deals' \
  -H 'Authorization: Bearer cap_live_<your-key>' \
  -H 'Content-Type: application/json'
post/v1/pipeline/deals

Placer un contact dans le pipeline

Place un contact existant dans une stage du pipeline (set pipeline_stage_id). Ne crée pas de contact — contact_id doit déjà exister et appartenir au client appelant (sinon 404 not_found). De même pour stage_id (404 not_found si la stage n'appartient pas au client).

Un contact_id qui désigne une fiche absorbée par une fusion répond 404 not_found : placer la fiche conservée à la place. Si la fusion est annulée depuis le tableau de bord, la fiche redevient accessible sous son ID.

Si le contact est déjà dans une stage du même pipeline, il y est déplacé. Le déplacement passe par le même moteur que le tableau de bord : il apparaît dans la chronologie du contact, déclenche les automatisations d'étape et le webhook, et compte comme une décision humaine (l'agent IA cesse de relancer ce lead).

Un contact rangé dans un autre pipeline que celui de la stage visée n'est pas déplacé : 422 business_rule_violation avec details.reason = other_pipeline (le transfert entre pipelines se fait depuis le tableau de bord). Un contact archivé n'est pas déplacé non plus (details.reason = contact_archived).

Un lead disqualifié ne change pas de stage tant que sa disqualification n'est pas levée : la requête retourne 409 lead_disqualified. Le déplacer vers une stage perdue, ou vers la stage de disqualification, reste accepté. La réouverture se fait depuis la fiche du lead dans le tableau de bord.

Scopes requis: pipeline:write

Corps de requête

PropriétéTypeObligatoireDescription
contact_idstringobligatoireContact à placer dans le pipeline. Doit appartenir au client appelant.
stage_idstringobligatoireStage de destination. Doit appartenir au client appelant.

Responses

StatutDescription
201

Deal placé dans le pipeline.

400

Validation des paramètres ou du body a échoué.

401

Clé API inconnue ou format invalide.

403

Refus d'autorisation. Deux causes, distinguées par code : insufficient_scope (la clé ne possède pas le scope requis — details.required_scope) ou feature_not_available (l'API publique ou le module visé n'est pas inclus dans le forfait du compte — details.feature nomme la fonctionnalité, ex. public_api, quotes). Un refus de forfait est définitif pour la clé : inutile de réessayer, le compte doit changer de forfait.

404

La ressource demandée n'existe pas (ou pas dans le scope du tenant).

409

Le lead visé est disqualifié : son étape ne peut pas changer tant que la disqualification n'est pas levée. Déplacer vers une étape perdue, ou vers l'étape de disqualification, reste accepté.

415

Le header Content-Type est manquant ou non supporté pour cet endpoint.

422

La requête est syntaxiquement valide mais viole une règle métier.

429

Le quota de requêtes par fenêtre est dépassé pour cette clé API ou cet endpoint.

500

Erreur serveur inattendue. Toujours fournir le request_id au support.

Exemple de requête

curl -X POST 'https://api.capturia.io/v1/pipeline/deals' \
  -H 'Authorization: Bearer cap_live_<your-key>' \
  -H 'Content-Type: application/json' \
  -d '{
  "contact_id": "8f3b1a2c-9d4e-4f5a-b6c7-d8e9f0a1b2c3",
  "stage_id": "1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d"
}'
patch/v1/pipeline/deals/{id}

Déplacer un deal vers une autre stage

Déplace un deal (pipeline_stage_id) vers une nouvelle stage. Seul le déplacement de stage est exposé via cet endpoint — pour modifier les autres champs du deal (email, deal_value, etc.) utiliser PATCH /v1/contacts/{id}.

Préconditions

  • Le deal cible doit exister, appartenir au client appelant, et avoir pipeline_stage_id IS NOT NULL, sinon 404 not_found. L'ID d'une fiche absorbée par une fusion répond aussi 404 not_found : déplacer la fiche conservée.
  • La stage cible doit appartenir au client appelant, sinon 404 not_found.
  • Le lead ne doit pas être disqualifié, sinon 409 lead_disqualified. Une stage perdue ou la stage de disqualification reste une cible acceptée ; sinon, rouvrir le lead depuis sa fiche dans le tableau de bord avant de rejouer la requête.
  • La stage cible doit appartenir au pipeline du deal, et le contact ne doit pas être archivé, sinon 422 business_rule_violation (details.reason = other_pipeline ou contact_archived).

Le déplacement passe par le même moteur que le tableau de bord : il apparaît dans la chronologie du contact, déclenche les automatisations d'étape et le webhook, et compte comme une décision humaine (l'agent IA cesse de relancer ce lead).

Scopes requis: pipeline:write

Corps de requête

PropriétéTypeObligatoireDescription
stage_idstringobligatoireStage de destination. Doit appartenir au client appelant.

Responses

StatutDescription
200

Deal déplacé vers la nouvelle stage.

400

Validation des paramètres ou du body a échoué.

401

Clé API inconnue ou format invalide.

403

Refus d'autorisation. Deux causes, distinguées par code : insufficient_scope (la clé ne possède pas le scope requis — details.required_scope) ou feature_not_available (l'API publique ou le module visé n'est pas inclus dans le forfait du compte — details.feature nomme la fonctionnalité, ex. public_api, quotes). Un refus de forfait est définitif pour la clé : inutile de réessayer, le compte doit changer de forfait.

404

La ressource demandée n'existe pas (ou pas dans le scope du tenant).

409

Le lead visé est disqualifié : son étape ne peut pas changer tant que la disqualification n'est pas levée. Déplacer vers une étape perdue, ou vers l'étape de disqualification, reste accepté.

415

Le header Content-Type est manquant ou non supporté pour cet endpoint.

422

La requête est syntaxiquement valide mais viole une règle métier.

429

Le quota de requêtes par fenêtre est dépassé pour cette clé API ou cet endpoint.

500

Erreur serveur inattendue. Toujours fournir le request_id au support.

Exemple de requête

curl -X PATCH 'https://api.capturia.io/v1/pipeline/deals/{id}' \
  -H 'Authorization: Bearer cap_live_<your-key>' \
  -H 'Content-Type: application/json' \
  -d '{
  "stage_id": "2b3c4d5e-6f7a-8b9c-0d1e-2f3a4b5c6d7e"
}'
delete/v1/pipeline/deals/{id}

Retirer un deal du pipeline

Retire le deal du pipeline en mettant pipeline_stage_id = NULL. Le contact n'est PAS supprimé — il reste accessible via GET /v1/contacts/{id}. Pour supprimer définitivement le contact, utiliser DELETE /v1/contacts/{id}.

Le deal cible doit exister, appartenir au client appelant, et avoir pipeline_stage_id IS NOT NULL — sinon 404 not_found. L'ID d'une fiche absorbée par une fusion répond aussi 404 not_found : retirer la fiche conservée. Si la fusion est annulée depuis le tableau de bord, la fiche redevient accessible sous son ID. Un contact archivé reste dans son pipeline : 422 business_rule_violation (details.reason = contact_archived).

Scopes requis: pipeline:write

Responses

StatutDescription
200

Deal retiré du pipeline (le contact n'est pas supprimé).

400

Validation des paramètres ou du body a échoué.

401

Clé API inconnue ou format invalide.

403

Refus d'autorisation. Deux causes, distinguées par code : insufficient_scope (la clé ne possède pas le scope requis — details.required_scope) ou feature_not_available (l'API publique ou le module visé n'est pas inclus dans le forfait du compte — details.feature nomme la fonctionnalité, ex. public_api, quotes). Un refus de forfait est définitif pour la clé : inutile de réessayer, le compte doit changer de forfait.

404

La ressource demandée n'existe pas (ou pas dans le scope du tenant).

422

La requête est syntaxiquement valide mais viole une règle métier.

429

Le quota de requêtes par fenêtre est dépassé pour cette clé API ou cet endpoint.

500

Erreur serveur inattendue. Toujours fournir le request_id au support.

Exemple de requête

curl -X DELETE 'https://api.capturia.io/v1/pipeline/deals/{id}' \
  -H 'Authorization: Bearer cap_live_<your-key>' \
  -H 'Content-Type: application/json'
get/v1/pipeline/stages

Lister les stages du pipeline

Retourne la liste complète des stages des pipelines du client, triées par pipeline (dans l'ordre du dashboard), puis par stage_order ASC. Chaque stage nomme son pipeline (pipeline.name, pipeline.is_default) : un compte à plusieurs pipelines peut avoir deux stages du même nom. Chaque stage est enrichie d'un compteur contact_count calculé en temps réel (nombre de contacts du client actuellement positionnés sur cette stage, sans les contacts archivés ni fusionnés — utile pour les KPI de pipeline). Une stage masquée dans le dashboard reste listée, marquée is_hidden.

Réponse non-paginée

L'endpoint retourne toutes les stages du client en un seul appel (généralement < 20 par client, max 50). Le format de réponse reste compatible list V2 pour la cohérence des intégrations (pagination.next_cursor=null, pagination.has_more=false, pagination.limit et pagination.total_count égalent le nombre de stages retournées).

Lecture seule

Création / édition / réordonnancement des stages passe par le dashboard — aucun endpoint POST/PATCH/DELETE /v1/pipeline/stages n'est exposé.

Scopes requis: pipeline:read

Responses

StatutDescription
200

Liste complète des stages du pipeline (non-paginée).

401

Clé API inconnue ou format invalide.

403

Refus d'autorisation. Deux causes, distinguées par code : insufficient_scope (la clé ne possède pas le scope requis — details.required_scope) ou feature_not_available (l'API publique ou le module visé n'est pas inclus dans le forfait du compte — details.feature nomme la fonctionnalité, ex. public_api, quotes). Un refus de forfait est définitif pour la clé : inutile de réessayer, le compte doit changer de forfait.

429

Le quota de requêtes par fenêtre est dépassé pour cette clé API ou cet endpoint.

500

Erreur serveur inattendue. Toujours fournir le request_id au support.

Exemple de requête

curl -X GET 'https://api.capturia.io/v1/pipeline/stages' \
  -H 'Authorization: Bearer cap_live_<your-key>' \
  -H 'Content-Type: application/json'