Documentation API Manuscry - v1.0

L'API Manuscry permet d'ajouter des contacts à vos campagnes de courriers personnalisés de manière programmatique.

Introduction

L'API Manuscry permet d'ajouter des contacts à vos campagnes de courriers personnalisés de manière programmatique. Cette API vous permet d'intégrer facilement l'ajout de contacts dans vos workflows existants.

Rate Limiting :

L'API est limitée à 100 requêtes par minute par utilisateur pour garantir la stabilité du service.

Limitations importantes :

Les campagnes en pause (status: paused) peuvent être consultées via l'API mais aucune action d'écriture n'est autorisée. Ces actions retourneront une erreur HTTP 403 avec le message "Campaign paused".

Les campagnes annulées (status: cancelled) peuvent être consultées via l'API mais aucune action d'écriture n'est autorisée (ajout de contacts, validation de courriers, etc.). Ces actions retourneront une erreur HTTP 403 avec le message "Campaign cancelled".

Terminologie et compatibilité :

Manuscry utilise le terme "campaign" (campagne) dans toute son API pour désigner une campagne de courriers.

Par compatibilité technique, l'alias agent_filter est également accepté mais campaign_filter est recommandé.

Si les deux paramètres sont fournis, campaign_filter est prioritaire.

Authentification

L'API utilise l'authentification par clé API. Vous devez créer une clé API depuis votre espace utilisateur, et l'utiliser dans vos requêtes d'une des façons suivantes.

  • Header Authorization : Authorization: Bearer YOUR_API_KEY
  • Paramètre URL : ?api_key=YOUR_API_KEY

Pour créer une clé API, rendez-vous sur votre espace puis dans la section "API", créez votre clé, et copiez la (elle ne sera affichée qu'une fois). Gardez votre clé API confidentielle et ne la partagez jamais publiquement.

Récupérer la configuration d'une campagne

Récupère les champs personnalisés et la configuration d'une campagne spécifique. Les champs retournés dépendent du type de campagne et de la configuration de la lettre.

GET https://manuscry.com/api/api/campaigns/{campaign_id}/settings

Paramètres

Nom Type Requis Description
campaign_id string Oui ID hashé de la campagne (visible dans l'URL de votre campagne)

Exemple de requête

Exemple de réponse

Champs dynamiques :

Les champs retournés dépendent de plusieurs facteurs :

  1. Type de campagne : manual, birthday, linkedin, self-print
  1. Configuration de la lettre : Variables {custom} détectées dans le contenu
  1. Mode de personnalisation : IA complète (ai_context) ou texte à trous (variables)

Utilité pour la validation :

Cet endpoint est essentiel avant d'ajouter des contacts. La structure de validation_errors retournée lors d'un échec vous permet de savoir exactement quels champs sont manquants (missing_fields) ou invalides (invalid_fields).

Champ can_add_contacts :

Ce champ indique si la campagne accepte l'ajout manuel de contacts via API.

  • true : Vous pouvez ajouter des contacts (manual, birthday, linkedin manuel, self-print)
  • false : Ajout manuel interdit (linkedin auto, bases de données automatiques)

Campagnes avec ciblage automatique :

Les campagnes avec ciblage automatique retournent can_add_contacts: false et fields: [].

Ces campagnes génèrent leurs contacts automatiquement selon les critères de ciblage configurés.

Champ ai_context :

Présent uniquement si le contenu principal de la lettre est en mode IA (génération complète).

Ce champ est toujours optionnel et permet de fournir un contexte personnalisé qui sera fusionné avec :

  • Pour LinkedIn : le contexte extrait automatiquement du profil
  • Pour les autres types : le contexte général de la campagne

Variables personnalisées :

Si votre lettre contient des variables {custom} (exemple: {secteur_activite}, {chiffre_affaires}),

un champ sera généré pour chaque variable avec :

  • is_custom: true
  • is_in_letter: true
  • required: true (car utilisé dans la lettre)

Utilisation recommandée :

Appelez cet endpoint AVANT d'ajouter des contacts pour :

  1. Vérifier que can_add_contacts est à true
  1. Récupérer la liste exacte des champs requis
  1. Connaître les validations à appliquer
  1. Comprendre quels champs sont utilisés dans la lettre (is_in_letter: true)

Statistiques d'une campagne

Récupère les statistiques de performance d'une campagne.

GET https://manuscry.com/api/api/campaigns/{campaignId}/stats

Paramètres

Nom Type Requis Description
campaignId string Oui ID hashé de la campagne
period string Non Période d'analyse (7d, 14d, 30d, 60d, 90d, 120d, 180d, 365d)

Exemple de requête

Exemple de réponse

Endpoints disponibles:

  • /api/campaigns/{campaignId}/stats (recommandé pour Manuscry)
  • /api/agents/{campaignId}/stats (alias fonctionnel pour compatibilité)

Ajouter un contact manuel

Ajoute un contact avec adresse postale complète à une campagne de type manuel.

POST https://manuscry.com/api/api/campaigns/{campaign_id}/contacts

Paramètres

Nom Type Requis Description
campaign_id string Oui ID hashé de la campagne (type: manual)

Exemple de requête

Exemple de réponse

Type de campagne : manual

Champs obligatoires :

  • address_line1 : Nom ou raison sociale du destinataire
  • address_line2 : Numéro et nom de rue
  • address_zip : Code postal
  • address_city : Ville (en majuscules)
  • address_country : Code pays ISO 3166-1 alpha-2 (FR, BE, CH, etc.)

Champs optionnels :

  • identifier : Identifiant unique (auto-généré si vide)
  • address_line3 : Complément d'adresse (étage, appartement, etc.)
  • scheduled_at : Date d'envoi programmée au format YYYY-MM-DD (optionnel)
  • ai_context : Contexte personnalisé pour la génération IA (si mode IA activé)
  • Variables personnalisées : Si votre lettre contient {nom_variable}, ajoutez le champ correspondant

Gestion des erreurs de validation :

En cas d'erreur de validation (HTTP 422), la réponse inclut :

  • validation_errors : Objet avec chaque champ en erreur et son message explicite
  • missing_fields : Tableau des champs obligatoires manquants
  • invalid_fields : Tableau des champs présents mais invalides (format incorrect, etc.)

Exemple de réponse d'erreur :

{

"success": false,

"error": "Validation failed",

"message": "The provided contact data contains errors",

"validation_errors": {

"address_zip": "Le champ Code postal est obligatoire",
"address_city": "Le champ Ville est obligatoire",
"linkedin_url": "Le champ URL LinkedIn doit être une URL valide"

},

"missing_fields": ["address_zip", "address_city"],

"invalid_fields": ["linkedin_url"]

}

Programmation d'envoi :

Le paramètre scheduled_at permet de programmer l'envoi à une date spécifique (format: YYYY-MM-DD).

Si fourni, cette date est prioritaire sur agent.min_scheduled_date.

Dates passées acceptées (envoi immédiat si date passée).

Champs dynamiques :

Les champs requis dépendent de la configuration de votre lettre. Utilisez GET /api/campaigns/{campaign_id}/settings pour récupérer la liste complète des champs avec leurs validations.

Champ ai_context :

Le champ ai_context est optionnel. Si le contenu principal de votre lettre est en mode IA, ce champ permet de fournir un contexte personnalisé qui sera utilisé pour personnaliser le contenu généré automatiquement.

Variables personnalisées :

Si votre lettre contient des variables {custom} (par exemple {secteur_activite}), vous devez inclure les champs correspondants dans la requête (secteur_activite dans cet exemple).

Ajouter un contact anniversaire

Ajoute un contact avec date d'anniversaire pour envoi automatique programmé.

POST https://manuscry.com/api/api/campaigns/{campaign_id}/contacts

Paramètres

Nom Type Requis Description
campaign_id string Oui ID hashé de la campagne (type: birthday)

Exemple de requête

Exemple de réponse

Type de campagne : birthday

Champs obligatoires :

  • birthday_date : Date d'anniversaire au format YYYY-MM-DD (exemple: 1985-03-15)
  • address_line1 : Nom du destinataire
  • address_line2 : Numéro et nom de rue
  • address_zip : Code postal
  • address_city : Ville (en majuscules)
  • address_country : Code pays ISO 3166-1 alpha-2 (FR, BE, CH, etc.)

Champs optionnels :

  • identifier : Identifiant unique (auto-généré si vide)
  • address_line3 : Complément d'adresse
  • ai_context : Contexte personnalisé pour la génération IA (si mode IA activé)
  • Variables personnalisées selon la configuration de votre lettre

Envoi automatique :

Les cartes d'anniversaire sont envoyées automatiquement 5 jours avant la date pour la France, 10 jours avant pour l'international.

Format de date :

La date doit être au format ISO 8601 (YYYY-MM-DD). Exemples valides : 1985-03-15, 1990-12-25.

Champs dynamiques :

Utilisez GET /api/campaigns/{campaign_id}/settings pour récupérer la liste complète des champs requis selon votre configuration de lettre.

Gestion des erreurs de validation :

En cas d'erreur (HTTP 422), la réponse détaille précisément les problèmes avec chaque champ manquant ou invalide pour faciliter le debugging.

Ajouter un contact LinkedIn

Ajoute un contact via son URL LinkedIn pour enrichissement automatique et envoi de courrier.

POST https://manuscry.com/api/api/campaigns/{campaign_id}/contacts

Paramètres

Nom Type Requis Description
campaign_id string Oui ID hashé de la campagne (type: linkedin en mode manuel uniquement)

Exemple de requête

Exemple de réponse

Type de campagne : linkedin en mode manuel uniquement

Limitation importante :

Les campagnes LinkedIn avec ciblage automatique (leads_sub_source_type = linkedin_auto) ne supportent PAS l'ajout manuel.

Seules les campagnes LinkedIn en mode manuel (leads_sub_source_type = linkedin_manual) acceptent l'ajout de contacts via API.

Utilisez GET /api/campaigns/{campaign_id}/settings et vérifiez que can_add_contacts est à true avant d'ajouter un contact.

Champs obligatoires :

  • linkedin_url : URL complète du profil LinkedIn (format: https://www.linkedin.com/in/nom-prenom)

Champs optionnels :

  • identifier : Identifiant unique (auto-généré si vide)
  • ai_context : Contexte personnalisé complémentaire

Champ ai_context - Utilisation recommandée :

Le champ ai_context est optionnel mais recommandé. Il permet d'ajouter des informations spécifiques qui ne sont pas disponibles sur le profil LinkedIn public :

  • Contexte de rencontre (événement, conférence, recommandation)
  • Intérêts spécifiques exprimés lors d'échanges
  • Informations complémentaires sur les besoins

Ce contexte sera fusionné avec les informations extraites automatiquement du profil LinkedIn (parcours, expériences, compétences, entreprise actuelle).

Traitement asynchrone :

Le contact est d'abord ajouté au sheet, puis traité automatiquement toutes les 30 minutes par la commande all:leads-create-from-linkedin-manual-sheets qui :

  1. Récupère les informations du profil LinkedIn
  1. Recherche l'adresse postale
  1. Crée le lead enrichi
  1. Génère le courrier personnalisé

Le délai entre l'ajout via API et la génération du courrier peut donc être de 30 minutes maximum.

Gestion des erreurs de validation :

En cas d'erreur (HTTP 422), la réponse inclut validation_errors (messages détaillés), missing_fields (champs manquants) et invalid_fields (champs au format incorrect).

Ajouter un contact (impression autonome)

Ajoute un contact à une campagne en mode impression autonome pour récupération des fichiers haute définition.

POST https://manuscry.com/api/api/campaigns/{campaign_id}/contacts

Paramètres

Nom Type Requis Description
campaign_id string Oui ID hashé de la campagne (self-print)

Exemple de requête

Exemple de réponse

Type de campagne : Campagne en mode impression autonome (self-print)

Fonctionnement :

Les campagnes en impression autonome permettent de générer les fichiers haute définition des cartes sans envoi postal.

Vous récupérez les fichiers PNG haute résolution via l'API pour les imprimer vous-même.

Champs obligatoires :

Identiques aux contacts manuels :

  • address_line1 : Nom du destinataire
  • address_line2 : Numéro et nom de rue
  • address_zip : Code postal
  • address_city : Ville
  • address_country : Code pays ISO

Champs optionnels :

  • identifier : Identifiant unique (auto-généré si vide)
  • address_line3 : Complément d'adresse
  • ai_context : Contexte pour personnalisation IA
  • Variables personnalisées selon votre configuration

Limitation programmation :

Les campagnes self-print ne supportent PAS le paramètre scheduled_at.

Les fichiers sont générés et disponibles immédiatement après validation.

Pour des envois programmés, utilisez une campagne manuelle standard.

Récupération des fichiers :

Une fois le courrier généré, utilisez GET /api/letters?campaign_filter={campaign_id}&category=delivered pour récupérer les URLs des fichiers haute définition.

Les fichiers sont accessibles dans campaign.print_files de chaque lettre.

Dimensions : A6 (2400x1702px / 148x105mm) ou A4 (2400x3394px / 210x297mm).

Marquage impression :

Après avoir téléchargé et imprimé un courrier, utilisez POST /api/letters/mark-printed/{letterId} pour le marquer comme imprimé dans votre suivi.

Gestion des erreurs de validation :

En cas d'erreur (HTTP 422), la réponse inclut validation_errors (messages détaillés), missing_fields (champs manquants) et invalid_fields (champs au format incorrect).

Informations utilisateur

Récupère les informations de l'utilisateur connecté et la liste de ses campagnes (hors brouillons).

GET https://manuscry.com/api/api/me

Exemple de requête

Exemple de réponse

Campagnes retournées :

  • Seules les campagnes publiées sont retournées (status != draft)
  • Les brouillons ne sont pas inclus dans les résultats

Champs des campagnes :

  • is_active : true si status = "active"
  • is_self_print : true si la campagne est en mode impression autonome

Liste des contacts

Récupère la liste des contacts avec pagination et filtres.

GET https://manuscry.com/api/api/contacts

Paramètres

Nom Type Requis Description
page integer Non Numéro de page
per_page integer Non Éléments par page (1-100)
search string Non Recherche textuelle
status_filter string Non Filtre par statut
source_filter string Non Filtre par source
campaign_filter string Non ID hashé de la campagne (recommandé - alias agent_filter accepté)
sort_field string Non Champ de tri
sort_direction string Non Direction (asc/desc)
semantic_search boolean Non Recherche par IA

Exemple de requête

Exemple de réponse

Statuts disponibles :

  • enrich : Contacts en enrichissement
  • contact : Contacts enrichis, prêts pour génération
  • validation : En attente de validation

Champs additionnels :

  • relevance : Score de pertinence (0-10, nullable)
  • linkedin_url : URL du profil LinkedIn (nullable)
  • picture : URL de la photo de profil (nullable)

Propriétés de touchpoints :

  • has_touchpoint_letter : Courrier livré au contact (boolean)
  • has_touchpoint_letter_flash : QR code flashé par le contact (boolean)
  • has_returned_letter : Courrier retourné (NPAI/PND) (boolean)

Bloquer un contact

Bloque un contact et tous ses doublons, annule les contenus en attente et ajoute à la blocklist.

DELETE https://manuscry.com/api/api/contacts/{leadId}/block

Paramètres

Nom Type Requis Description
leadId string Oui ID hashé du contact

Exemple de requête

Exemple de réponse

Actions automatiques :

  • Le contact et tous ses doublons (même email) sont bloqués
  • L'email est ajouté à votre blocklist
  • L'adresse postale est ajoutée à la blocklist si disponible
  • Toutes les lettres en attente (avant génération) sont annulées

Retour :

  • duplicates_blocked : Nombre de doublons bloqués en plus du contact principal
  • emails_cancelled : Toujours 0 pour Manuscry
  • letters_cancelled : Nombre de lettres annulées

Liste de blocage

Récupère la liste de blocage.

GET https://manuscry.com/api/api/blocklist

Paramètres

Nom Type Requis Description
type string Non Type de blocage (email, domain, company, siren, address, all)
page integer Non Numéro de page
per_page integer Non Éléments par page

Exemple de requête

Exemple de réponse

Types disponibles :

  • email : Adresse email exacte
  • domain : Nom de domaine
  • company : Nom d'entreprise (recherche approximative)
  • siren : Numéro SIREN (9 chiffres)
  • address : Identité complète (format: firstname_slug|lastname_slug|zip)

Ajouter à la blocklist

Ajoute un élément à bloquer.

POST https://manuscry.com/api/api/blocklist

Paramètres

Nom Type Requis Description
type string Oui Type (email, domain, company, siren, address)
value string Oui Valeur à bloquer

Exemple de requête

Exemple de réponse

Supprimer de la blocklist

Supprime un élément de la blocklist par ID ou par valeur.

DELETE https://manuscry.com/api/api/blocklist

Paramètres

Nom Type Requis Description
id string Non ID hashé de l'élément à supprimer
value string Non Valeur à débloquer (alternative à id)

Exemple de requête

Exemple de réponse

Méthodes de suppression :

  • Par ID : Utilisez le paramètre id avec l'ID hashé récupéré depuis GET /api/blocklist
  • Par valeur : Utilisez le paramètre value avec la valeur exacte

Note : Au moins un des deux paramètres (id ou value) doit être fourni. Si les deux sont fournis, id est prioritaire.

Liste des courriers

Récupère les courriers de toutes vos campagnes.

GET https://manuscry.com/api/api/letters

Paramètres

Nom Type Requis Description
category string Non Catégorie de courriers
page integer Non Numéro de page
per_page integer Non Éléments par page (1-100)
search string Non Recherche textuelle
campaign_filter string Non ID hashé de la campagne (recommandé - alias agent_filter accepté)

Exemple de requête

Exemple de réponse

Catégories disponibles :

  • to_validate : Courriers en attente de validation
  • validated : Courriers validés en attente d'envoi
  • rejected : Courriers refusés en attente de suppression
  • error : Courriers en erreur
  • insufficient_funds : Courriers en attente de crédits
  • in_preparation : Courriers en génération, impression ou attente d'envoi
  • transiting : Courriers en transit postal
  • delivered : Courriers délivrés
  • returned : Courriers retournés (NPAI/PND)
  • scanned : Courriers avec QR code flashé
  • not_scanned : Courriers avec QR code non flashé

Statuts disponibles :

  • validating : En attente de validation utilisateur
  • generating : En cours de génération des visuels
  • printing : En attente d'impression
  • sending : En attente d'envoi
  • transiting : En transit chez la poste
  • delivered : Livré
  • returned : Retourné (NPAI/PND)
  • cancelled : Annulé
  • error : Erreur technique

Courriers en attente de validation

Récupère la liste des courriers en attente de validation.

GET https://manuscry.com/api/api/letters/to-validate

Paramètres

Nom Type Requis Description
page integer Non Numéro de page
per_page integer Non Éléments par page (1-100)
campaign_filter string Non ID hashé de la campagne (recommandé - alias agent_filter accepté)

Exemple de requête

Exemple de réponse

Valider un courrier

Valide un courrier pour envoi automatique.

POST https://manuscry.com/api/api/letters/validate/{letterId}

Paramètres

Nom Type Requis Description
letterId string Oui ID hashé du courrier
blocks array Non Blocs de contenu personnalisés

Exemple de requête

Exemple de réponse

Délai de carence :

Le courrier sera validé définitivement après 60 minutes.

Pendant ce délai, vous pouvez encore le refuser.

Refuser un courrier

Refuse un courrier.

POST https://manuscry.com/api/api/letters/reject/{letterId}

Paramètres

Nom Type Requis Description
letterId string Oui ID hashé du courrier

Exemple de requête

Exemple de réponse

Délai de carence :

Le courrier sera supprimé définitivement après 60 minutes.

Pendant ce délai, vous pouvez encore le valider.

Liste des courriers impression autonome

Récupère les courriers d'une campagne en impression autonome avec les URLs des fichiers haute définition à imprimer.

GET https://manuscry.com/api/api/letters

Paramètres

Nom Type Requis Description
campaign_filter string Oui ID hashé de la campagne self-print (recommandé - alias agent_filter accepté)
category string Non Catégorie (delivered recommandé pour récupérer les courriers prêts)
page integer Non Numéro de page
per_page integer Non Éléments par page (1-100)

Exemple de requête

Exemple de réponse

Spécificités impression autonome :

Pour les campagnes en mode impression autonome (is_self_print: true), l'objet campaign contient des champs additionnels :

  • is_self_print : Indique qu'il s'agit d'une campagne impression autonome
  • print_files : URLs des fichiers haute définition à télécharger et imprimer
  • front_url : Image du recto à imprimer
  • back_url : Image du verso (null pour format A4)

Workflow d'impression :

  1. Utilisez category=delivered pour récupérer uniquement les courriers générés et prêts à imprimer
  1. Téléchargez les fichiers depuis les URLs fournies dans print_files
  1. Imprimez les fichiers en haute qualité (300 DPI recommandé)
  1. Une fois imprimé, marquez le courrier comme tel via /api/letters/mark-printed/{letterId}

Dimensions des fichiers :

  • Format A6 : 2400px x 1702px (148mm x 105mm en mode paysage)
  • Format A4 : 2400px x 3394px (210mm x 297mm en mode portrait)
  • Images PNG haute résolution, prêtes pour impression directe
  • Pas d'enveloppe fournie (impression client uniquement)

Marquer un courrier comme imprimé

Marque un courrier comme imprimé dans votre système. Permet de suivre les courriers que vous avez déjà imprimés.

POST https://manuscry.com/api/api/letters/mark-printed/{letterId}

Paramètres

Nom Type Requis Description
letterId string Oui ID hashé du courrier à marquer comme imprimé

Exemple de requête

Exemple de réponse

Fonctionnement :

  • Cet endpoint est réservé exclusivement aux campagnes en impression autonome
  • Permet de tracker les courriers que vous avez déjà imprimés dans votre système
  • Le champ is_printed passe à true et printed_at est automatiquement enregistré avec l'horodatage
  • Cette action est irréversible mais n'affecte pas le statut du courrier (reste delivered)

Restrictions :

  • Disponible uniquement pour les campagnes avec is_self_print: true
  • Impossible de modifier les courriers de campagnes annulées (status: cancelled)
  • Retourne une erreur 403 si utilisé sur une campagne non self-print

Utilisation recommandée :

Appelez cet endpoint après avoir téléchargé et imprimé physiquement le courrier pour maintenir un suivi précis de vos impressions.

Webhook courrier impression autonome prêt

Webhook déclenché automatiquement quand un courrier en impression autonome est généré et prêt au téléchargement.

Événement : self_print_letter_ready

Déclenchement : Ce webhook est envoyé automatiquement quand un courrier d'une campagne self-print est généré avec succès. Les URLs des images haute définition sont incluses dans le payload pour téléchargement immédiat.

Configuration : Configurez ce webhook dans Manuscry > Paramètres > Webhooks

Payload envoyé

Utilisation recommandée :

  • Téléchargez automatiquement les fichiers depuis les URLs fournies
  • Déclenchez votre flux d'impression automatique
  • Notifiez vos équipes logistiques qu'un nouveau courrier est prêt

Historique des rendez-vous calendrier

Récupère l'historique des rendez-vous pris via la page de booking calendrier d'une campagne.

GET https://manuscry.com/api/api/campaigns/{campaignId}/calendar-events

Paramètres

Nom Type Requis Description
campaignId string Oui ID hashé de la campagne
page integer Non Numéro de page
per_page integer Non Éléments par page (1-50)

Exemple de requête

Exemple de réponse

Endpoints disponibles :

  • /api/campaigns/{campaignId}/calendar-events (recommandé pour Manuscry)
  • /api/agents/{agentId}/calendar-events (alias fonctionnel pour compatibilité)

Statuts possibles :

  • success : Événement créé avec succès dans Google Calendar
  • failed : Échec de création dans Google Calendar (événement sauvegardé localement)
  • calendar_disconnected : Calendrier Google non connecté (événement sauvegardé localement)

Important :

Cet historique est un log local des réservations effectuées via la page de booking.

Il n'est pas synchronisé avec Google Calendar et sert uniquement de journal d'audit.

Webhooks

Les webhooks permettent de recevoir des notifications en temps réel des événements de vos campagnes Manuscry.

Configuration : Interface Manuscry > Paramètres > Webhooks

Webhooks disponibles :

  • Filtrage par campagne configurable
  • Stockés dans votre compte utilisateur
  • Configuration d'URL par type d'événement

Format général des webhooks : Chaque webhook est envoyé en POST avec le format JSON suivant :

Format général

Événements courriers disponibles :

1. letter_ready_for_validation - Courrier prêt à être validé

Déclenché lorsqu'un courrier a été généré et attend validation.

Payload letter_ready_for_validation

2. letter_sent - Courrier envoyé au service postal

Déclenché lorsqu'un courrier validé est envoyé à l'impression et à la poste.

Payload letter_sent

3. letter_delivered - Courrier livré au destinataire

Déclenché lorsque le courrier est confirmé livré par La Poste.

Payload letter_delivered

4. letter_returned - Courrier retourné (NPAI/PND)

Déclenché lorsqu'un courrier est retourné par La Poste (adresse incorrecte).

Payload letter_returned

5. qr_code_scanned - QR code flashé sur un courrier

Déclenché lorsqu'un destinataire scanne le QR code sur un courrier.

Payload qr_code_scanned

6. new_calendar_event - Nouveau rendez-vous calendrier

Déclenché lorsqu'un rendez-vous est pris via la page de réservation calendrier.

Payload new_calendar_event

Statuts possibles :

  • success : Événement créé avec succès dans Google Calendar
  • failed : Échec de création dans Google Calendar (événement sauvegardé localement)
  • calendar_disconnected : Calendrier Google non connecté (événement sauvegardé localement)

Rechercher une adresse postale

Lance une recherche d'adresse postale à partir d'une URL LinkedIn ou d'informations de contact.

POST https://manuscry.com/api/api/find-postal-address

Paramètres

Nom Type Requis Description
linkedin_url string Non URL complète du profil LinkedIn (requis si contact_info absent)
contact_info object Non Informations de contact (requis si linkedin_url absent)
contact_info.first_name string Oui Prénom de la personne
contact_info.last_name string Oui Nom de la personne
contact_info.company_name string Oui Nom de l'entreprise
contact_info.additional_info string Non Informations complémentaires (poste, secteur, localisation)

Exemple de requête

Exemple de réponse

Coût : 1 crédit par recherche (0.25€ HT)

Traitement asynchrone :

Les recherches sont traitées de manière asynchrone et prennent généralement entre 5 et 10 minutes.

Utilisez l'endpoint de récupération des résultats pour obtenir les adresses trouvées.

Types de recherche :

  • Par URL LinkedIn : Envoyez uniquement le paramètre linkedin_url
  • Par informations de contact : Envoyez l'objet contact_info avec first_name, last_name, company_name et optionnellement additional_info

Workflows utilisés :

Le système utilise plusieurs sources pour maximiser les chances de trouver des adresses :

  • Analyse LinkedIn (profil et entreprise)
  • Recherche intelligente sur le web avec IA
  • Crawling de sites web d'entreprise
  • Déduplication et scoring automatique

Réponses d'erreur :

  • 402 : Crédits insuffisants (besoin d'au moins 1 crédit)
  • 422 : Validation échouée (paramètres manquants ou invalides)

Récupérer les résultats d'une recherche

Récupère les résultats d'une recherche d'adresse en utilisant l'ID retourné lors de la création.

GET https://manuscry.com/api/api/find-postal-address/{search_id}

Paramètres

Nom Type Requis Description
search_id string Oui ID de la recherche retourné lors de la création

Exemple de requête

Exemple de réponse

Statuts de recherche :

  • processing : La recherche est en cours. Le champ processed_at est null. Attendez 5-10 minutes avant de rappeler l'API.
  • completed : La recherche est terminée avec succès. Le champ results contient les adresses trouvées.
  • failed : La recherche a échoué. Le champ error_details contient plus d'informations.

Scores de confiance :

Chaque adresse trouvée est accompagnée d'un score de confiance sur 10 :

  • 9-10 : Très haute confiance (source officielle comme LinkedIn API)
  • 7-8 : Haute confiance (sites web officiels, sources multiples)
  • 5-6 : Confiance moyenne (sources secondaires fiables)
  • 3-4 : Faible confiance (sources non vérifiées)

Polling recommandé :

Implémentez un polling avec un intervalle de 20 secondes pour vérifier régulièrement le statut des recherches en cours.

Réponse en cours de traitement :

Si la recherche est toujours en cours (status: processing), le champ processed_at sera null et results ne sera pas présent.

Meetlane Créez votre agent IA de prospection multicanal dès maintenant
Découvrir