Première impression depuis un serveur
En mode cloud, votre backend envoie le travail au cloud JodaPrint, qui le transmet à l'agent par la connexion que l'agent garde ouverte. Cela fonctionne depuis n'importe quel serveur, derrière n'importe quel NAT, et l'imprimante n'a pas besoin d'être joignable depuis internet.
1. Créer une clé d'API
Tableau de bord → Développeurs → Clés d'API → Créer. Choisissez les portées jobs:write, jobs:read et printers:read. La clé (jp_live_…) n'est affichée qu'une fois ; rangez-la dans JODAPRINT_API_KEY.
Utilisez une clé jp_test_… pour imprimer dans le bac à sable plutôt que sur une vraie imprimante.
2. Trouver l'imprimante
curl https://api.jodaprint.dev/v1/printers -H "Authorization: Bearer $JODAPRINT_API_KEY"
Chaque imprimante a un id cloud (prn_…) et appartient à un appareil (dev_…). Ciblez une imprimante avec printerId, ou un appareil avec deviceId et un alias facultatif (receipt, label…) défini dans la configuration de l'appareil. Sans alias, l'imprimante par défaut de l'appareil imprime.
3. Imprimer
Avec curl
curl https://api.jodaprint.dev/v1/jobs \
-H "Authorization: Bearer $JODAPRINT_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: commande-10492-ticket" \
-d '{
"printerId": "prn_01J8Z2ABCDEF",
"type": "receipt",
"encoding": "json",
"data": { "width": "80mm", "blocks": [
{ "type": "text", "value": "Bonjour !", "align": "center", "bold": true, "size": 2 },
{ "type": "feed", "lines": 3 },
{ "type": "cut", "mode": "partial" }
] }
}'
La réponse est le travail (201). Si l'appareil est en ligne, il imprime en moins d'une seconde ; sinon le travail reste queued jusqu'à la reconnexion de l'appareil ou l'expiration du travail (24 heures par défaut).
Avec le SDK Node
npm install @jodaprint/node
import { JodaPrintClient } from "@jodaprint/node";
const jp = new JodaPrintClient({ apiKey: process.env.JODAPRINT_API_KEY! });
const job = await jp.jobs.create(
{
deviceId: "dev_01J8Z2ABCDEF",
alias: "receipt",
type: "receipt",
encoding: "json",
data: { width: "80mm", blocks: [{ type: "text", value: "Bonjour !" }, { type: "cut" }] },
metadata: { orderId: "10492" },
},
{ idempotencyKey: "commande-10492-ticket" },
);
const latest = await jp.jobs.get(job.id);
console.log(latest.state); // queued, sending, printed, failed ou cancelled
Le client réessaie les limites de débit (429), les erreurs serveur et les erreurs réseau avec un délai croissant. Les créations de travaux portent toujours une clé d'idempotence (la vôtre ou une clé générée) : une nouvelle tentative n'imprime jamais deux fois.
4. Suivre le travail
- Interrogez
GET /v1/jobs/{id}: le travail contient l'historique de ses états dansevents. - Ou recevez les webhooks
job.printedetjob.failed: voir Webhooks.
Idempotence
Un second travail avec la même Idempotency-Key dans les 24 heures renvoie le premier travail et n'imprime rien. Utilisez votre numéro de commande : une requête répétée ou un double clic n'imprime jamais deux fois.
Ensuite
- Référence de l'API REST
- Référence du SDK Node
- Modèles : imprimez une étiquette conçue dans le tableau de bord avec
{ templateId, data }.