Bjet24

API publique · v1 · OpenAPI 3.1

Envoyez du courrier postal depuis votre CRM

Une API REST simple pour intégrer l'impression et l'envoi de courrier dans n'importe quel outil. Auth par clé, facturation par wallet, statut en temps réel via webhooks.

Démarrage en 3 étapes

De la clé à votre premier envoi en quelques minutes.

1

Rechargez votre wallet

Depuis votre tableau de bord, créditez votre portefeuille Bjet24. Chaque envoi via API est débité de ce solde — pas de carte bancaire à chaque appel.

Recharger
2

Générez une clé API

Créez une clé avec le scope send. Le secret n'est affiché qu'une seule fois — copiez-le immédiatement.

Créer une clé
3

Envoyez votre premier courrier

Trois appels : devis (optionnel), upload du PDF via URL pré-signée, puis création + envoi. Le statut remonte par webhook.

Voir les endpoints

Un seul appel pour envoyer

Donnez l'adresse, attachez votre PDF, choisissez le service. Le courrier est mis en file, imprimé puis déposé en bureau de poste — vous êtes notifié à chaque étape.

  • Calcul de prix côté serveur — vous ne pouvez pas tomber à côté du tarif officiel.
  • Upload PDF via URL S3 pré-signée — pas de gros payloads à gérer côté serveur.
  • Idempotence native via externalId — rejouez sans risquer un double envoi.
  • Mode dryRun: true pour valider et obtenir le tarif sans débiter.
curl -X POST https://bjet24.com/api/v1/mails \
  -H "Authorization: Bearer $BJET24_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "zone": "NATIONAL",
    "serviceType": "registered",
    "pages": 3,
    "color": false,
    "recipients": [{
      "name": "Jean Dupont",
      "line1": "Rue de la Loi 16",
      "zip": "1000",
      "city": "Bruxelles",
      "country": "BE"
    }],
    "files": [{
      "s3Key": "<key from /v1/uploads>",
      "filename": "contrat.pdf",
      "mimeType": "application/pdf",
      "sizeBytes": 124532
    }],
    "externalId": "crm-contract-7281"
  }'

Ce qui est inclus

Latence faible

Création + débit + queue en un seul POST. Réponse sous 500 ms en moyenne.

Sécurité

Clé bcrypt côté serveur, HTTPS only, signature HMAC-SHA256 sur tous les webhooks.

Webhooks signés

5 événements (queued, printed, posted, delivered, failed). Header X-Bjet24-Signature à vérifier.

Idempotence

Passez un externalId (id de votre CRM) — les rejouages renvoient le même envoi sans doubler la charge.

Webhooks signés

Chaque transition de statut peut déclencher un POST sur votre URL. Le payload est signé en HMAC-SHA256 — vérifiez la signature avant de traiter.

Événements

  • MAIL_QUEUEDmis en file après paiement
  • MAIL_PRINTEDimprimé à l'atelier
  • MAIL_POSTEDdéposé au bureau de poste
  • MAIL_DELIVEREDdistribué (recommandé)
  • MAIL_FAILEDéchec ou annulation

Vérification de la signature (Node.js)

import crypto from 'node:crypto'

export function verifyBjet24(req, secret) {
  const header = req.headers['x-bjet24-signature']
  // header looks like: t=1714940000,v1=<hmac-sha256-hex>
  const [tPart, sPart] = header.split(',')
  const ts = tPart.split('=')[1]
  const sig = sPart.split('=')[1]

  const expected = crypto
    .createHmac('sha256', secret)
    .update(`${ts}.${req.rawBody}`)
    .digest('hex')

  if (!crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected))) {
    throw new Error('Bad signature')
  }
  // Reject deliveries older than 5 minutes
  if (Date.now() / 1000 - Number(ts) > 300) {
    throw new Error('Replay')
  }
}

Prêt à intégrer ?

La référence interactive vous laisse tester chaque endpoint depuis votre navigateur, avec votre propre clé API.