API v1
Une API pour des codes qui restent imprimés.
{ "id": "qr_8841ce2mxk", "type": "url", "dynamic": true, "status": "active", "shortUrl": "https://dotwick.co/Xq7mK2p", "createdAt": "2026-09-10T09:41:08.000Z"}Une API REST sur les mêmes objets que ceux de l’application. Créez des codes, changez les destinations, récupérez les scans et exportez des fichiers prêts à imprimer : aucun SDK nécessaire, curl, fetch ou requests suffisent.
incluse à partir de Pro · 60 req/min sur Pro, 600 sur Business
Créez les clés dans l’application sous Settings → API, avec uniquement les scopes dont elles ont besoin.
curl -X POST https://api.dotwick.com/v1/codes \ -H "Authorization: Bearer sk_live_…" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: van-014-2026-09-10" \ -d '{ "name": "Van fleet – unit 14", "content": { "type": "url", "url": "https://example.com/fleet/van-014" }, "design": { "pattern": "rounded", "eyes": { "frame": "circle", "ball": "circle" }, "colors": { "fg": "#18181B", "bg": "#FFFFFF" } }, "folderId": "fld_8k2m4q7x" }'{ "id": "qr_8841ce2mxk", "name": "Van fleet – unit 14", "type": "url", "dynamic": true, "status": "active", "slug": "Xq7mK2p", "shortUrl": "https://dotwick.co/Xq7mK2p", "content": { "type": "url", "url": "https://example.com/fleet/van-014" }, "folderId": "fld_8k2m4q7x", "createdAt": "2026-09-10T09:41:08.000Z"}api.dotwick.com/v1
REST sur JSON
Des ressources prévisibles, une pagination par curseur, des clés d’idempotence sur chaque POST. Les erreurs reviennent sous la forme { error: { code, message, requestId } }.
11 types d’événements
Webhooks
Scans, modifications de codes, séries en masse et exports terminés, statut des domaines et réponses de formulaires. Signés selon Standard Webhooks et réessayés pendant 24 heures.
POST /v1/codes/bulk
Création en masse et exports
Créez jusqu’à 500 codes en une seule requête, puis téléchargez-les en SVG, PNG, PDF ou EPS dans un seul ZIP généré en arrière-plan.
api.dotwick.com/openapi.json
OpenAPI
Chaque route publique est décrite en OpenAPI 3.1, générée à partir des mêmes contrats que ceux avec lesquels l’API valide les requêtes, chaque opération étant étiquetée avec le scope dont elle a besoin.
- POST/v1/codes
- GET/v1/codes
- GET/v1/codes/{id}
- PATCH/v1/codes/{id}
- DELETE/v1/codes/{id}
- POST/v1/codes/bulk
- GET/v1/codes/{id}/scans
- POST/v1/webhooks
Endpoints
Toutes les routes qu’une clé d’API peut appeler. Tout le reste (facturation, membres, gestion des clés) reste dans l’application.
| Méthode | Chemin | Scope | Objet |
|---|---|---|---|
| Codes | |||
| GET | /v1/codes | codes:read | Lister les codes, filtrer par dossier, type ou statut |
| POST | /v1/codes | codes:write | Créer un code |
| GET | /v1/codes/{id} | codes:read | Récupérer un code avec son design et ses règles |
| PATCH | /v1/codes/{id} | codes:write | Modifier la destination, le nom, le design, les règles |
| DELETE | /v1/codes/{id} | codes:write | Supprimer un code (son lien court répond 410) |
| POST | /v1/codes/move | codes:write | Déplacer des codes vers un dossier |
| POST | /v1/codes/move-domain | codes:write | Déplacer des codes vers un autre domaine |
| POST | /v1/codes/tags | codes:write | Ajouter ou retirer des étiquettes sur plusieurs codes |
| POST | /v1/codes/{id}/duplicate | codes:write | Dupliquer un code |
| PATCH | /v1/codes/bulk | codes:write | Mettre en pause, reprendre, archiver, étiqueter, déplacer ou supprimer plusieurs codes |
| GET | /v1/utm-presets | codes:read | Lister les préréglages UTM enregistrés |
| GET | /v1/codes/{id}/versions | codes:read | Historique des destinations d’un code |
| GET | /v1/codes/{id}/activity | codes:read | Fil d’activité d’un code |
| GET | /v1/codes/{id}/export | codes:read | Télécharger en SVG, PNG, PDF ou EPS |
| GET | /v1/codes/{id}/hosted-stats | codes:read | Compteurs d’un code hébergé |
| GET | /v1/codes/{id}/submissions | submissions:read | Réponses à un code formulaire |
| GET | /v1/codes/{id}/submissions/export | submissions:read | Réponses du formulaire en CSV |
| GET | /v1/gs1/products | codes:read | Lister les produits GS1 (les codes gs1) |
| GET | /v1/codes/{id}/gs1/qualifiers | codes:read | Niveaux lot, CPV et numéro de série d’un code GS1 |
| GET | /v1/codes/{id}/gs1/print-runs | codes:read | Tirages d’impression d’un code GS1 |
| GET | /v1/codes/{id}/gs1/print-runs/{runId} | codes:read | Suivre un tirage d’impression et obtenir les liens de ses fichiers |
| Séries en masse | |||
| POST | /v1/codes/bulk | codes:write | Créer jusqu’à 500 codes en une seule série |
| GET | /v1/bulk-imports | codes:read | Lister les séries en masse |
| GET | /v1/bulk-imports/{id} | codes:read | Interroger une série en masse |
| GET | /v1/bulk-imports/{id}/rows | codes:read | Lignes d’une série en masse |
| GET | /v1/bulk-imports/{id}/results.csv | codes:read | Résultats d’une série en CSV |
| POST | /v1/bulk-imports/{id}/cancel | codes:write | Annuler une série en file d’attente ou en cours |
| POST | /v1/bulk-imports/{id}/retry | codes:write | Réessayer les lignes échouées d’une série |
| Statistiques | |||
| GET | /v1/analytics/summary | analytics:read | Totaux de scans sur une période |
| GET | /v1/analytics/timeseries | analytics:read | Scans dans le temps |
| GET | /v1/analytics/breakdown | analytics:read | Principaux pays, appareils, … |
| GET | /v1/analytics/scans | analytics:read | Enregistrements par scan |
| GET | /v1/analytics/sparklines | analytics:read | Compteurs quotidiens des codes |
| GET | /v1/analytics/compare | analytics:read | Comparer jusqu’à 4 codes |
| GET | /v1/analytics/export | analytics:read | Scans en CSV (périodes courtes) |
| POST | /v1/analytics/exports | analytics:read | Scans en CSV, préparés en arrière-plan |
| GET | /v1/codes/{id}/analytics/summary | analytics:read | Totaux d’un code |
| GET | /v1/codes/{id}/analytics/timeseries | analytics:read | Un code dans le temps |
| GET | /v1/codes/{id}/analytics/breakdown | analytics:read | Principaux classements d’un code |
| GET | /v1/codes/{id}/scans | analytics:read | Enregistrements par scan d’un code |
| GET | /v1/codes/{id}/gs1/batches | analytics:read | Scans par lot d’un code GS1 |
| GET | /v1/codes/{id}/downloads | analytics:read | Téléchargements par fichier d’un code Documents |
| GET | /v1/analytics/locations | analytics:read | Carte GPS des scans avec consentement |
| GET | /v1/codes/{id}/analytics/locations | analytics:read | La carte GPS d’un code |
| GET | /v1/alerts | analytics:read | Lister les règles d’alerte de scans |
| Exports | |||
| POST | /v1/exports | codes:read | Exporter plusieurs codes dans un seul ZIP |
| GET | /v1/exports | codes:read | Lister les exports |
| GET | /v1/exports/{id} | codes:read | Interroger un export et obtenir le lien du ZIP |
| Dossiers | |||
| GET | /v1/folders | folders:read | Lister les dossiers |
| POST | /v1/folders | folders:write | Créer un dossier |
| GET | /v1/folders/{id} | folders:read | Récupérer un dossier |
| PATCH | /v1/folders/{id} | folders:write | Renommer ou déplacer un dossier |
| DELETE | /v1/folders/{id} | folders:write | Supprimer un dossier (les codes remontent) |
| Modèles | |||
| GET | /v1/templates | templates:read | Lister les modèles de design |
| POST | /v1/templates | templates:write | Créer un modèle |
| GET | /v1/templates/{id} | templates:read | Récupérer un modèle |
| PATCH | /v1/templates/{id} | templates:write | Modifier un modèle |
| DELETE | /v1/templates/{id} | templates:write | Supprimer un modèle |
| Envois de fichiers | |||
| POST | /v1/assets | codes:write | Envoyer un logo ou un fichier |
| GET | /v1/assets/{id} | codes:read | Récupérer un fichier envoyé avec une URL signée |
| Domaines | |||
| GET | /v1/domains | domains:read | Lister les domaines personnalisés |
| GET | /v1/domains/{id} | domains:read | Récupérer un domaine et son statut |
| GET | /v1/subdomain | domains:read | Le sous-domaine de l’espace de travail et ses liens |
| GET | /v1/subdomain/availability | domains:read | Vérifier si un nom de sous-domaine est libre |
| Espace de travail | |||
| GET | /v1/workspaces/current | n’importe quelle clé | L’espace de travail de la clé et son offre |
| GET | /v1/usage | n’importe quelle clé | Limites de l’offre et utilisation ce mois-ci |
| Webhooks | |||
| GET | /v1/webhooks | webhooks:read | Lister les endpoints de webhooks |
| POST | /v1/webhooks | webhooks:write | Enregistrer un endpoint et ses types d’événements |
| GET | /v1/webhooks/{id} | webhooks:read | Récupérer un endpoint |
| PATCH | /v1/webhooks/{id} | webhooks:write | Modifier ou réactiver un endpoint |
| DELETE | /v1/webhooks/{id} | webhooks:write | Supprimer un endpoint |
| POST | /v1/webhooks/{id}/test | webhooks:write | Envoyer un événement webhook.test |
| GET | /v1/webhooks/{id}/deliveries | webhooks:read | Envois d’un endpoint |
| GET | /v1/webhooks/{id}/deliveries/{deliveryId} | webhooks:read | Un envoi avec ses tentatives |
| POST | /v1/webhooks/{id}/deliveries/{deliveryId}/redeliver | webhooks:write | Renvoyer un envoi |
| POST | /v1/webhooks/{id}/recover | webhooks:write | Renvoyer les envois échoués |
| Étiquettes | |||
| GET | /v1/tags | tags:read | Lister les étiquettes |
| POST | /v1/tags | tags:write | Créer une étiquette |
| GET | /v1/tags/{id} | tags:read | Récupérer une étiquette |
| PATCH | /v1/tags/{id} | tags:write | Renommer ou recolorer une étiquette |
| DELETE | /v1/tags/{id} | tags:write | Supprimer une étiquette (retirée de ses codes) |
| Rapports | |||
| POST | /v1/reports | analytics:read | Générer un rapport statistique en PDF ou CSV |
| GET | /v1/reports | analytics:read | Lister les rapports générés |
| GET | /v1/reports/{id} | analytics:read | Consulter un rapport et obtenir son lien |
| Hooks Zapier et Make | |||
| GET | /v1/hooks | webhooks:read | Lister les hooks d’intégration |
| POST | /v1/hooks | webhooks:write | Abonner un hook à un événement |
| DELETE | /v1/hooks/{id} | webhooks:write | Désabonner un hook |
| GET | /v1/hooks/samples/{event} | webhooks:read | Événements récents d’un type, comme exemple pour un déclencheur |
| Cartes de visite | |||
| GET | /v1/cards | cards:read | Lister les cartes de visite de l’équipe |
| POST | /v1/cards | cards:write | Créer une carte de visite |
| GET | /v1/cards/{id} | cards:read | Récupérer une carte de visite |
| PATCH | /v1/cards/{id} | cards:write | Modifier une carte de visite |
| POST | /v1/cards/{id}/deactivate | cards:write | Désactiver une carte de visite |
| GET | /v1/cards/{id}/analytics | cards:read | Vues, enregistrements et clics d’une carte |
| Conversions | |||
| POST | /v1/conversions | conversions:write | Enregistrer une conversion |
| GET | /v1/analytics/funnel | analytics:read | Entonnoir du scan au chiffre d’affaires |
| Tags NFC | |||
| GET | /v1/nfc/tags | codes:read | Lister les tags NFC |
| POST | /v1/nfc/tags | codes:write | Enregistrer un tag NFC sur un code |
Les schémas des requêtes et des réponses de chaque route se trouvent dans la référence de l’API et le document OpenAPI. Référence de l’API →
Limites de débit
- Pro
- 60 req / min · rafale 20 / 10 s
- Business
- 600 req / min · rafale 200 / 10 s
- Enterprise
- sur mesure
- Tâches d’export et de création en masse · Pro / Business
- 2 simultanées / 5 simultanées
- Les limites s’appliquent par espace de travail, partagées par toutes ses clés d’API
- Rafales : au plus 2× le débit par minute sur 10 secondes
- Les réponses 429 contiennent Retry-After en secondes
- Chaque réponse contient X-RateLimit-Limit, -Remaining et -Reset (secondes avant la réinitialisation de la fenêtre)
- Chaque POST accepte un en-tête Idempotency-Key, pris en compte pendant 24 heures
Authentification
Envoyez votre clé secrète comme jeton bearer. Les clés commencent par sk_live_, ne sont affichées qu’une fois à leur création, portent des scopes et agissent dans leur espace de travail avec le rôle de leur créateur, au plus Editor.
Authentification et scopes →