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.
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.
RechargerGé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é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 endpointsUn 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: truepour 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 paiementMAIL_PRINTEDimprimé à l'atelierMAIL_POSTEDdéposé au bureau de posteMAIL_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.