Aller au contenu
NouveauDécouvrir comment

Guide RevOps : automatiser l'outbound avec les clés API, la CLI et le CSV

Générez des clés API à portée limitée, importez et synchronisez des contacts par programmation, pilotez les campagnes depuis la CLI, intégrez-le à votre CI/CD, et surveillez l'utilisation des clés et l'autonomie en crédits — via l'API REST et le CSV, la surface disponible aujourd'hui.

  1. Cadrer la surface automatisable (et ce qui ne l'est pas encore)

    Ce qui est actif aujourd'hui : l'API REST, le CLI, et l'import/export de contacts en CSV/JSON. Ce qui ne l'est pas : les webhooks, les connecteurs CRM (Salesforce, HubSpot, Zoho, Pipedrive), et les connecteurs Slack/Teams/Sheets/Airtable/Notion sont tous à venir et renvoient unsupported_operation si vous tentez de les appeler. Construisez votre automatisation sur la surface active : interrogez et exportez via REST/CSV plutôt que d'attendre un connecteur.

  2. Créer une clé API à privilège minimal

    Allez dans Settings → API et créez une clé nommée par consommateur : par exemple ci-contact-sync : avec uniquement les portées (scopes) nécessaires (contacts:read/write, campaigns:read, etc.). La clé n'est affichée qu'une fois ; copiez-la directement dans un gestionnaire de secrets. Révoquez-la immédiatement en cas de fuite : la révocation est instantanée. Voir Create & Manage Developer API Keys.

    Créer une clé API à privilège minimal
  3. Installer et vérifier le CLI

    Installez le CLI et confirmez que la clé se résout avant toute autre action :

    npm install -g @firstsales.io/cli
    export FIRSTSALES_API_KEY="fs_live_..."   # from your secret manager
    firstsales whoami --json
    firstsales doctor
  4. Importer des contacts par programmation depuis un CSV

    Poussez un lot via une tâche d'import avec une clé d'idempotence : la plateforme dédoublonne par e-mail côté serveur, donc une réexécution du même fichier ne créera aucun doublon :

    firstsales contact-imports create --org "$ORG_ID" --workspace "$WS_ID" \
      --data-file ./leads.csv \
      --idempotency-key "leads-import-2026-07"
  5. Garder les contacts synchronisés : la boucle d'or

    L'automatisation suit la même boucle qu'un opérateur humain : inspecter, puis modifier délibérément, puis vérifier. Prévisualisez avec --dry-run avant toute écriture, modifiez avec une clé d'idempotence, puis relisez pour confirmer :

    firstsales contacts list --org "$ORG_ID" --workspace "$WS_ID" --json
    firstsales contacts update --org "$ORG_ID" --workspace "$WS_ID" \
      --contact "$CONTACT_ID" --data '{"job_title":"VP Sales"}' --dry-run
    firstsales contacts update --org "$ORG_ID" --workspace "$WS_ID" \
      --contact "$CONTACT_ID" --data '{"job_title":"VP Sales"}'
    firstsales contacts get --org "$ORG_ID" --workspace "$WS_ID" --contact "$CONTACT_ID"
  6. Piloter les campagnes depuis le CLI ou l'API

    Listez et lisez les campagnes via le CLI, ou appelez directement /api/v1 avec un jeton Bearer quand vous préférez ne pas passer par le CLI :

    firstsales campaigns list --org "$ORG_ID" --workspace "$WS_ID" --json
    
    curl https://api.app.firstsales.io/api/v1/organizations/$ORG_ID/workspaces/$WS_ID/campaigns/$CAMPAIGN_ID/analytics \
      -H "Authorization: Bearer $FIRSTSALES_API_KEY"
  7. L'intégrer dans le CI/CD

    Injectez la clé depuis le gestionnaire de secrets de votre fournisseur CI, ne la codez jamais en dur. Démarrez chaque job par whoami pour qu'une mauvaise clé échoue rapidement, et cantonnez les écritures réelles derrière --dry-run sur les PR contre une mutation réelle sur main, avec des clés d'idempotence dérivées d'une variable CI stable pour qu'une exécution rejouée soit sans effet :

    # GitHub Actions
    - name: FirstSales sync
      env:
        FIRSTSALES_API_KEY: ${{ secrets.FIRSTSALES_API_KEY }}
      run: |
        firstsales whoami --json > /dev/null || { echo "auth failed"; exit 1; }
        firstsales contact-imports create --org "$ORG_ID" --workspace "$WS_ID" \
          --data-file ./leads.csv --idempotency-key "import-${GITHUB_SHA}"
  8. Surveiller l'usage et l'autonomie de crédits

    Surveillez l'usage/logs des clés API sous Settings → API et le solde de crédits de l'org sous Billing, pour qu'un pipeline automatisé ne mette jamais l'org à sec silencieusement. Voir Credits, Plans & Billing et Read Campaign Analytics.

Astuces de pro

  • Une clé à portée limitée par consommateur

    Le CI, votre laptop, et chaque intégration ont chacun leur propre clé nommée : en cas de fuite ou de retrait, vous révoquez uniquement cette clé, pas tout.

  • Les clés d'idempotence sont une assurance gratuite

    Chaque création automatisée porte --idempotency-key pour qu'une étape de pipeline rejouée soit sans effet, pas un enregistrement en double.

  • Ne construisez pas sur des connecteurs à venir

    Les connecteurs webhooks, CRM, Slack et Sheets renvoient aujourd'hui unsupported_operation : interrogez ou exportez via REST + CSV plutôt que de les attendre.

  • Inspecter, dry-run, modifier, vérifier : dans les scripts aussi

    La même boucle qui protège un opérateur humain protège un agent. Utilisez toujours --dry-run avant toute écriture en automatisation, pas seulement en mode interactif.

Questions fréquentes

Que puis-je réellement automatiser aujourd'hui ?

L'API REST, le CLI, et l'import/export de contacts en CSV/JSON, tous authentifiés avec des clés API développeur à portée limitée.

Y a-t-il des webhooks, du CRM ou des intégrations Slack ?

Pas encore : les webhooks, les connecteurs CRM (Salesforce, HubSpot, Zoho, Pipedrive), et les connecteurs Slack/Teams/Sheets/Airtable/Notion sont à venir et renvoient unsupported_operation. Ne construisez pas d'automatisation qui en dépend.

Comment importer des contacts par programmation ?

contact-imports create --data-file avec un fichier CSV ou JSON. Les contacts sont dédoublonnés par e-mail côté serveur, donc réexécuter le même import est sûr.

Comment fonctionne l'authentification pour le CI ?

Stockez la clé API développeur dans le gestionnaire de secrets de votre fournisseur CI et exposez-la comme FIRSTSALES_API_KEY. Pour l'HTTP brut, envoyez-la comme jeton Bearer.

Comment éviter les écritures en double dans un pipeline ?

Passez --idempotency-key (ou l'en-tête Idempotency-Key sur l'HTTP brut) dérivée d'une valeur stable comme un commit SHA : une étape rejouée devient sans effet plutôt qu'un doublon.

Comment empêcher une suppression d'effacer des données en CI ?

Les commandes CLI destructrices nécessitent --confirm : gardez-le hors de toute étape qui ne devrait pas supprimer, pour qu'une tâche de nettoyage ne puisse retirer des données que si le drapeau est explicitement présent.

Comment surveiller l'usage et l'autonomie de crédits ?

Vérifiez l'usage/logs des clés API sous Settings → API et le solde de crédits de l'org sous Billing, pour qu'un pipeline automatisé ne vous mette pas à sec silencieusement.

CLI ou API brute ?

Le CLI est une fine surcouche sur la même surface publique /api/v1. Les deux fonctionnent : le CLI ajoute une gestion pratique de l'authentification, de l'idempotence, et une sortie JSON pour les scripts et les agents.

Prise en main

Une prospection qui continue quand vous vous déconnectez.Leads, emails, relances et réponses, gérés.

Connectez des boîtes illimitées et laissez les agents IA trouver les leads, écrire chaque email et relancer. Ou envoyez vos propres modèles en mode manuel. À partir de $29/mois.

$1 pour 3 jours · Annulez quand vous voulez · Sans engagement

Installer avec l'IA

Votre agent de code installe la CLI et les skills FirstSales pour vous.

Prompt pour Claude Code

I'm setting up FirstSales (https://firstsales.io), an AI outbound sales platform: campaigns, contacts, a reply inbox, deliverability and lead signals. Help me get my workspace sending real, good emails end to end, from Claude Code.

Read these first so you know how FirstSales works:
- Developer docs and API: https://developer.firstsales.io
- CLI: https://www.npmjs.com/package/@firstsales.io/cli
- Skills for coding agents: https://github.com/firstsalesio/firstsales-skills (read README.md and GUIDE.md)

Setup
1. Install the CLI: npm install -g @firstsales.io/cli
2. Install the FirstSales skills:
   claude plugin marketplace add firstsalesio/firstsales-skills
   claude plugin install firstsales@firstsales
3. Ask me if I already have a FirstSales account. If not, send me to https://app.firstsales.io to sign up.
4. Ask me to create an API key under Settings → API → API Keys, with only the scopes we need.
   Never ask me to paste the key into this chat. Tell me to run this in my own terminal, so the key stays hidden:
   read -rs FS_KEY && firstsales auth login --api-key "$FS_KEY"; unset FS_KEY
5. Run `firstsales whoami` and tell me which workspace and organisation we are connected to.

Then ask me about my business: what I sell, who I sell to (roles, company size, countries), my best customers, and what I use today for outbound (tools, lists, mailboxes). Walk me through:
1. Teaching FirstSales my business: website, offer, proof points and case studies in the knowledge base, so the AI writes like someone who knows the product.
2. Connecting my sending mailboxes and checking my sending domain: SPF, DKIM, DMARC and warm-up. If anything is unhealthy, tell me the exact DNS record to add.
3. Bringing in contacts: import my CSV or CRM export into a clean list, remove duplicates and bad emails, and block domains I must never email (customers, competitors, my own).
4. Building my first campaign: the right list, senders, steps and timing. Write the sequence with me, show me the drafts, and do not launch until I say yes.
5. Setting up Signals if it fits: find people engaging with LinkedIn posts about topics my buyers care about, and turn them into leads.
6. Inviting my team and giving each person the right access.

Once campaigns run, show me how to work the reply inbox from here: which replies need an answer, draft responses in my voice, and move good conversations into deals. If I use Cal.com, connect it so follow-ups can offer my booking link (not the first email).

Throughout, as you learn about my business, proactively suggest and help create:
- Reply templates for the questions and objections my prospects are likely to raise, based on my product, site and codebase if you can see them.
- Campaign ideas and segments worth testing, with the reason for each.

Safety rules:
- Show every change as a dry run (--dry-run) first and wait for my yes. Never send emails, launch campaigns or delete anything without my yes.
- Tell me before anything that spends credits, and how many.

Be opinionated. If the docs give a sensible default, just use it. Don't make me choose between five options.