Filiale de Conocido ICT — logiciels développés en interne
info@conocido.nl · +31 70 7820 100
ConoCard · Référence

API REST Zebra ZC350

La spécification REST complète pour piloter l'imprimante de cartes Zebra ZC350 côté serveur — sans pilote, via IP, depuis Linux ou Windows. Y compris la lecture sans contact de l'UID dans la même session et l'enregistrement dans 2N Access Commander.

Pourquoi une API REST pour la Zebra ZC350 ?

La Zebra ZC350 est une excellente imprimante de cartes, mais son pilotage standard ne l'est pas. Quiconque veut intégrer l'imprimante dans son propre workflow se heurte en pratique à trois frictions opérationnelles : un poste Windows par imprimante, un câble USB entre le poste et le matériel, et une pile pilote fournisseur (CardStudio plus Silex SX Virtual Link) à installer et maintenir par poste. Acceptable pour une seule réception ; un cauchemar opérationnel pour un déploiement corporate ou multi-sites.

ConoCard propose une alternative au bon niveau : un serveur HTTP qui pilote l'imprimante via IP. Un appel POST avec les données de carte souhaitées, et le serveur s'occupe de l'impression, l'encodage, la lecture sans contact de l'UID et l'enregistrement dans 2N Access Commander, en renvoyant du JSON. Pas de pilote, pas d'USB, pas d'installations par poste.

L'endpoint principal : POST /api/issue

Un endpoint couvre 90% du besoin opérationnel. Vous transmettez ce qui doit figurer sur la carte, pour qui la carte est destinée, et facultativement quelle imprimante (en configuration multi-imprimante). Le serveur fait le reste.

Authentification

Tous les appels nécessitent un bearer-token dans l'en-tête Authorization. Les tokens sont comparés en temps constant (pas de fuites de timing). Le service est secure by default : sans token configuré, ConoCard refuse de démarrer.

Authorization: Bearer your-token-here

Corps de requête (exemple)

{
  "guest": {
    "name": "Jane Doe",
    "reference": "booking-1234"
  },
  "validity": {
    "from": "2026-06-01T15:00:00Z",
    "until": "2026-06-05T11:00:00Z"
  },
  "printer": "192.168.1.42"
}

Réponse (JSON)

{
  "status": "issued",
  "uid": "04A5B6C7D8E9",
  "printed_at": "2026-05-30T13:42:18Z",
  "registered_in": "2n-access-commander",
  "audit_id": "01HXYZ..."
}

Exemples de code

curl

curl -X POST https://conocard.local/api/issue \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"guest":{"name":"Jane Doe"},"printer":"192.168.1.42"}'

Python (requests)

import requests, os

r = requests.post(
    "https://conocard.local/api/issue",
    headers={"Authorization": f"Bearer {os.environ['CONOCARD_TOKEN']}"},
    json={
        "guest": {"name": "Jane Doe"},
        "printer": "192.168.1.42",
    },
    timeout=30,
)
r.raise_for_status()
print(r.json()["uid"])

PHP

// guzzlehttp/guzzle
$client = new GuzzleHttp\Client();
$resp = $client->post('https://conocard.local/api/issue', [
  'headers' => ['Authorization' => 'Bearer ' . $token],
  'json'    => ['guest' => ['name' => 'Jane Doe'], 'printer' => '192.168.1.42'],
]);
$uid = json_decode($resp->getBody(), true)['uid'];

Journal d'audit : JSON-Lines directement vers votre SIEM

Chaque émission de carte — succès et échec — est écrite dans un journal d'audit append-only au format JSON-Lines. Une ligne par événement, directement ingérable par Splunk, ELK, Microsoft Sentinel ou tout autre SIEM. Pas de parseurs, pas de conversions de schéma.

{"ts":"2026-05-30T13:42:18Z","event":"issue.success","uid":"04A5B6C7D8E9","printer":"192.168.1.42","source":"api/jane.doe"}
{"ts":"2026-05-30T13:43:02Z","event":"issue.error","reason":"printer_unreachable","printer":"192.168.1.43"}

Plusieurs imprimantes depuis un seul serveur

Une instance peut piloter plusieurs ZC350 simultanément, via un plan de contrôle partagé avec démultiplexage par IP source. En pratique : configurez l'IP de l'imprimante par requête, ou prédéfinissez un mappage dans la configuration du service. Pas de relation un-pour-un entre serveur et imprimante.

Pour les scénarios multi-sites, on exécute généralement une instance par site (dans une VM Linux ou serveur Windows), ou une instance centrale avec connectivité VPN. Un tableau de bord central multi-sites est sur la roadmap.

API REST ConoCard vs. la pile Zebra

AspectZebra CardStudio + SilexAPI REST ConoCard
PilotageTether USB par posteHTTP via IP
OSWindows uniquementLinux + Windows
Installation pilote par posteOuiNon
AuthentificationUtilisateur OSBearer-token, secure by default
Piste d'auditRien de standardiséJSON-Lines append-only
Lecture UID dans la même sessionProcessus séparéInline dans la réponse
Multi-imprimante par hôteNon scalableDémultiplexage IP source
Intégration systèmes externesPas d'APIREST + sortie webhook

Questions fréquentes

Ai-je besoin d'un pilote Zebra ?

Non. La ZC350 est pilotée entièrement via IP, par une réimplémentation du protocole USB-over-IP Silex SX-200. Pas de pilote Zebra, pas de CardStudio, pas de Silex SX Virtual Link.

Quels endpoints sont exposés ?

L'endpoint principal est POST /api/issue. En plus, il y a des endpoints health et status (GET /api/health, GET /api/status) pour le monitoring et les vérifications de service.

Que se passe-t-il si l'imprimante est injoignable ?

L'appel retourne un 503 avec une raison d'échec structurée (printer_unreachable). L'événement atterrit également dans le journal d'audit afin que vous puissiez analyser ultérieurement quand et à quelle fréquence cela se produit.

Puis-je appeler depuis une application mobile ?

Oui. L'endpoint est purement HTTP — tout ce qui parle HTTP (une application mobile, une box Access Commander, une tablette de réception) peut demander une émission.

Comment cela se compare-t-il à CardStudio ?

CardStudio est un outil desktop par poste, sans API. ConoCard remplace ce modèle par un service côté serveur via IP. Voir la page alternative à CardStudio pour l'aspect migration.

Démo en direct ou devis ?

Nous montrons volontiers l'API en action sur une ZC350 physique. Planifiez une démo ou posez-nous directement votre question.

Planifier une démo →