Développeurs

Recevez chaque nouvelle entrée bloo.Cards dans vos systèmes.

Une API en lecture seule et des webhooks signés pour brancher vos contacts, scans et formulaires sur vos outils. Simple, sûr, hébergé dans l'UE.

Envoi uniquement · lecture seule · hébergé dans l'UE

Trois secrets, trois rôles

SecretRôleNotes
bc_live_…Clé API : identifie votre société, en lecture seuleCréé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 Accès anticipé

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)
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 Accès anticipé

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. Voir bloo.Cards pour les IA.

Prêt à brancher bloo.Cards ?

Créez votre clé dans la section Développeurs de votre compte, ou demandez un accès anticipé. Voir les automatisations.

Créer ma clé API