Développeurs

API et webhooks bloo.Cards pour les développeurs

Recevez chaque nouvelle entrée bloo.Cards dans vos systèmes. L'API /v1 permet de consulter vos données de contacts sans les modifier. Elle permet également de créer, consulter et supprimer vos abonnements webhook, signés, pour brancher vos contacts, scans et formulaires sur vos outils. Votre clé bloo.Cards identifie votre société. Pour les comptes société Premium et Corporate. Hébergé dans l'UE.

Envoi uniquement · Premium et Corporate · hébergé dans l'UE

Trois secrets, trois rôles

SecretRôleNotes
bc_live_…Clé API bloo.Cards : identifie votre société ; consultation de vos données de contacts sans modification, plus gestion de vos abonnements webhookCréée dans la section Développeurs. Affichée une seule fois, empreinte SHA-256 stockée, révocable.
whsec_…Secret de signature des webhooksSert à vérifier que le webhook vient bien de bloo.Cards (HMAC-SHA256).
Identifiants CRMConservés chiffrés, jamais réaffichésChiffrement par organisation (BlooCrypto). Utilisés seulement pour l'envoi sortant vers votre CRM.

L'API /v1 Disponible (Premium, Corporate)

Base : https://bloo.cards/v1 · Authentification : en-tête Authorization: Bearer bc_live_… (jamais dans l'URL).

MéthodeRôle
GET /v1/meSociété et périmètre de la clé (test de connexion)
GET /v1/contacts?since=…Nouveaux contacts depuis un instant (ISO 8601), avec le chiffre d'affaires saisi dans blooCRM, le mini CRM intégré (deals_total, deals_count, last_deal_at)
GET /v1/hooksListe de vos abonnements webhook
POST /v1/hooksCréer un abonnement { url, events[] } (renvoie le secret une fois)
DELETE /v1/hooks/{id}Désactiver un abonnement

Exemple : tester la connexion

curl -H "Authorization: Bearer bc_live_xxx" \
     https://bloo.cards/v1/me
$ch = curl_init('https://bloo.cards/v1/me');
curl_setopt_array($ch, [
  CURLOPT_HTTPHEADER    => ['Authorization: Bearer bc_live_xxx'],
  CURLOPT_RETURNTRANSFER => true,
]);
$me = json_decode(curl_exec($ch), true);
const r = await fetch('https://bloo.cards/v1/me', {
  headers: { Authorization: 'Bearer bc_live_xxx' }
});
const me = await r.json();
import requests
r = requests.get(
    'https://bloo.cards/v1/me',
    headers={'Authorization': 'Bearer bc_live_xxx'})
me = r.json()

Webhooks Disponible (Premium, Corporate)

Abonnez une URL à des événements ; bloo.Cards y envoie un POST signé à chaque occurrence, avec relances en cas d'échec.

Événements

contact.exchanged · lead.ocr_scanned · form.submitted · booking.requested · contact.deleted

Enveloppe reçue

POST https://votre-serveur.example/bloo-webhook
X-Bloo-Signature: t=1790456846,v1=9f2b…c3

{
  "id": "evt_ab12cd34",
  "type": "contact.exchanged",
  "created_at": "2026-09-26T21:00:00Z",
  "data": {
    "contact": {
      "first_name": "Marie", "last_name": "Dupont",
      "email": "marie@exemple.be", "company": "Exemple SA",
      "job_title": "Directrice", "source": "exchange",
      "context": "Salon de Bruxelles"
    }
  }
}

Vérifier la signature (PHP)

$body   = file_get_contents('php://input');
$header = $_SERVER['HTTP_X_BLOO_SIGNATURE'] ?? '';   // t=…,v1=…
parse_str(strtr($header, ',', '&'), $p);
$expected = hash_hmac('sha256', $p['t'] . '.' . $body, $whsec);
if (!hash_equals($expected, $p['v1'] ?? '')) {
    http_response_code(401); exit;                    // signature invalide
}
// OK : traitez $body (JSON)

Les données publiques des cartes

Les cartes publiques exposent déjà leurs données en JSON-LD et via ?format=json, sans authentification. Idéal pour les agents et l'indexation. Un serveur MCP (Model Context Protocol) permet aussi aux assistants IA de rechercher les cartes publiques : https://bloo.cards/mcp. Voir bloo.Cards pour les IA.

Prêt à brancher bloo.Cards ?

Avec un compte société Premium ou Corporate, créez votre clé dans la section Développeurs de votre compte. Un connecteur natif vers votre CRM est possible sur demande. Assistant de connexion pas à pas · Voir les automatisations.

Créer ma clé API

Aller plus loin

Nous contacter

Carte gratuite à vie, tant que le compte reste actif : un compte gratuit inactif depuis plus de 12 mois peut être clôturé après un préavis d'au moins 30 jours envoyé par e-mail. Voir les conditions d'utilisation.

Langue