API v1
Una API para códigos que siguen impresos.
{ "id": "qr_8841ce2mxk", "type": "url", "dynamic": true, "status": "active", "shortUrl": "https://dotwick.co/Xq7mK2p", "createdAt": "2026-09-10T09:41:08.000Z"}Una API REST sobre los mismos objetos que usa la app. Crea códigos, cambia destinos, obtén escaneos y exporta archivos listos para imprimir. No hace falta ningún SDK: curl, fetch o requests bastan.
incluida desde Pro · 60 req/min en Pro, 600 en Business
Crea claves en la app, en Settings → API, solo con los scopes que necesiten.
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 sobre JSON
Recursos predecibles, paginación con cursor y claves de idempotencia en cada POST. Los errores vuelven como { error: { code, message, requestId } }.
11 tipos de evento
Webhooks
Escaneos, cambios de códigos, tandas en lote y exportaciones terminadas, estado de dominios y respuestas de formularios. Firmados según Standard Webhooks y reintentados durante 24 horas.
POST /v1/codes/bulk
Creación en lote y exportaciones
Crea hasta 500 códigos en una solicitud y descárgalos como SVG, PNG, PDF o EPS en un solo ZIP generado en segundo plano.
api.dotwick.com/openapi.json
OpenAPI
Cada ruta pública se describe en OpenAPI 3.1, generado a partir de los mismos contratos con los que valida la API, con cada operación etiquetada con el scope que necesita.
- 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
Todas las rutas que puede llamar una clave de API. Todo lo demás (facturación, miembros, gestión de claves) se queda en la app.
| Método | Ruta | Scope | Para qué sirve |
|---|---|---|---|
| Códigos | |||
| GET | /v1/codes | codes:read | Lista los códigos, con filtro por carpeta, tipo o estado |
| POST | /v1/codes | codes:write | Crea un código |
| GET | /v1/codes/{id} | codes:read | Obtiene un código con su diseño y sus reglas |
| PATCH | /v1/codes/{id} | codes:write | Cambia el destino, el nombre, el diseño y las reglas |
| DELETE | /v1/codes/{id} | codes:write | Elimina un código (su enlace corto responde 410) |
| POST | /v1/codes/move | codes:write | Mueve códigos a una carpeta |
| POST | /v1/codes/move-domain | codes:write | Mueve códigos a otro dominio |
| POST | /v1/codes/tags | codes:write | Añade o quita etiquetas en varios códigos |
| POST | /v1/codes/{id}/duplicate | codes:write | Duplica un código |
| PATCH | /v1/codes/bulk | codes:write | Pausa, reanuda, archiva, etiqueta, mueve o elimina varios códigos |
| GET | /v1/utm-presets | codes:read | Lista los ajustes UTM guardados |
| GET | /v1/codes/{id}/versions | codes:read | Historial de destinos de un código |
| GET | /v1/codes/{id}/activity | codes:read | Registro de actividad de un código |
| GET | /v1/codes/{id}/export | codes:read | Descarga en SVG, PNG, PDF o EPS |
| GET | /v1/codes/{id}/hosted-stats | codes:read | Contadores de un código alojado |
| GET | /v1/codes/{id}/submissions | submissions:read | Respuestas a un código de formulario |
| GET | /v1/codes/{id}/submissions/export | submissions:read | Respuestas del formulario en CSV |
| GET | /v1/gs1/products | codes:read | Lista los productos GS1 (los códigos gs1) |
| GET | /v1/codes/{id}/gs1/qualifiers | codes:read | Niveles de lote, CPV y número de serie de un código GS1 |
| GET | /v1/codes/{id}/gs1/print-runs | codes:read | Tiradas de impresión de un código GS1 |
| GET | /v1/codes/{id}/gs1/print-runs/{runId} | codes:read | Consulta una tirada de impresión y obtiene los enlaces a sus archivos |
| Tandas en lote | |||
| POST | /v1/codes/bulk | codes:write | Crea hasta 500 códigos en una sola tanda |
| GET | /v1/bulk-imports | codes:read | Lista las tandas en lote |
| GET | /v1/bulk-imports/{id} | codes:read | Consulta el estado de una tanda |
| GET | /v1/bulk-imports/{id}/rows | codes:read | Filas de una tanda |
| GET | /v1/bulk-imports/{id}/results.csv | codes:read | Resultados de una tanda en CSV |
| POST | /v1/bulk-imports/{id}/cancel | codes:write | Cancela una tanda en cola o en curso |
| POST | /v1/bulk-imports/{id}/retry | codes:write | Reintenta las filas fallidas de una tanda |
| Estadísticas | |||
| GET | /v1/analytics/summary | analytics:read | Totales de escaneos de un periodo |
| GET | /v1/analytics/timeseries | analytics:read | Escaneos a lo largo del tiempo |
| GET | /v1/analytics/breakdown | analytics:read | Principales países, dispositivos, … |
| GET | /v1/analytics/scans | analytics:read | Registros por escaneo |
| GET | /v1/analytics/sparklines | analytics:read | Recuentos diarios de los códigos |
| GET | /v1/analytics/compare | analytics:read | Compara hasta 4 códigos |
| GET | /v1/analytics/export | analytics:read | Escaneos en CSV (periodos cortos) |
| POST | /v1/analytics/exports | analytics:read | Escaneos en CSV, preparados en segundo plano |
| GET | /v1/codes/{id}/analytics/summary | analytics:read | Totales de un código |
| GET | /v1/codes/{id}/analytics/timeseries | analytics:read | Un código a lo largo del tiempo |
| GET | /v1/codes/{id}/analytics/breakdown | analytics:read | Listas principales de un código |
| GET | /v1/codes/{id}/scans | analytics:read | Registros por escaneo de un código |
| GET | /v1/codes/{id}/gs1/batches | analytics:read | Escaneos por lote de un código GS1 |
| GET | /v1/codes/{id}/downloads | analytics:read | Descargas por archivo de un código de Documentos |
| GET | /v1/analytics/locations | analytics:read | Mapa GPS de los escaneos con consentimiento |
| GET | /v1/codes/{id}/analytics/locations | analytics:read | El mapa GPS de un código |
| GET | /v1/alerts | analytics:read | Lista las reglas de alerta de escaneos |
| Exportaciones | |||
| POST | /v1/exports | codes:read | Exporta muchos códigos en un solo ZIP |
| GET | /v1/exports | codes:read | Lista las exportaciones |
| GET | /v1/exports/{id} | codes:read | Consulta una exportación y obtiene el enlace del ZIP |
| Carpetas | |||
| GET | /v1/folders | folders:read | Lista las carpetas |
| POST | /v1/folders | folders:write | Crea una carpeta |
| GET | /v1/folders/{id} | folders:read | Obtiene una carpeta |
| PATCH | /v1/folders/{id} | folders:write | Cambia el nombre de una carpeta o la mueve |
| DELETE | /v1/folders/{id} | folders:write | Elimina una carpeta (los códigos suben de nivel) |
| Plantillas | |||
| GET | /v1/templates | templates:read | Lista las plantillas de diseño |
| POST | /v1/templates | templates:write | Crea una plantilla |
| GET | /v1/templates/{id} | templates:read | Obtiene una plantilla |
| PATCH | /v1/templates/{id} | templates:write | Cambia una plantilla |
| DELETE | /v1/templates/{id} | templates:write | Elimina una plantilla |
| Subidas | |||
| POST | /v1/assets | codes:write | Sube un logotipo o un archivo |
| GET | /v1/assets/{id} | codes:read | Obtiene una subida con una URL firmada |
| Dominios | |||
| GET | /v1/domains | domains:read | Lista los dominios personalizados |
| GET | /v1/domains/{id} | domains:read | Obtiene un dominio y su estado |
| GET | /v1/subdomain | domains:read | El subdominio del espacio de trabajo y sus enlaces |
| GET | /v1/subdomain/availability | domains:read | Comprueba si un nombre de subdominio está libre |
| Espacio de trabajo | |||
| GET | /v1/workspaces/current | cualquier clave | El espacio de trabajo de la clave y su plan |
| GET | /v1/usage | cualquier clave | Límites del plan y uso de este mes |
| Webhooks | |||
| GET | /v1/webhooks | webhooks:read | Lista los endpoints de webhook |
| POST | /v1/webhooks | webhooks:write | Registra un endpoint y los tipos de evento |
| GET | /v1/webhooks/{id} | webhooks:read | Obtiene un endpoint |
| PATCH | /v1/webhooks/{id} | webhooks:write | Cambia o reactiva un endpoint |
| DELETE | /v1/webhooks/{id} | webhooks:write | Elimina un endpoint |
| POST | /v1/webhooks/{id}/test | webhooks:write | Envía un evento webhook.test |
| GET | /v1/webhooks/{id}/deliveries | webhooks:read | Entregas de un endpoint |
| GET | /v1/webhooks/{id}/deliveries/{deliveryId} | webhooks:read | Una entrega con sus intentos |
| POST | /v1/webhooks/{id}/deliveries/{deliveryId}/redeliver | webhooks:write | Reenvía una entrega |
| POST | /v1/webhooks/{id}/recover | webhooks:write | Reenvía las entregas fallidas |
| Etiquetas | |||
| GET | /v1/tags | tags:read | Lista las etiquetas |
| POST | /v1/tags | tags:write | Crea una etiqueta |
| GET | /v1/tags/{id} | tags:read | Obtiene una etiqueta |
| PATCH | /v1/tags/{id} | tags:write | Cambia el nombre o el color de una etiqueta |
| DELETE | /v1/tags/{id} | tags:write | Elimina una etiqueta (se quita de sus códigos) |
| Informes | |||
| POST | /v1/reports | analytics:read | Genera un informe de estadísticas en PDF o CSV |
| GET | /v1/reports | analytics:read | Lista los informes generados |
| GET | /v1/reports/{id} | analytics:read | Consulta un informe y obtén su enlace |
| Hooks de Zapier y Make | |||
| GET | /v1/hooks | webhooks:read | Lista los hooks de integración |
| POST | /v1/hooks | webhooks:write | Suscribe un hook a un evento |
| DELETE | /v1/hooks/{id} | webhooks:write | Cancela un hook |
| GET | /v1/hooks/samples/{event} | webhooks:read | Eventos recientes de un tipo, como muestra para un disparador |
| Tarjetas de visita | |||
| GET | /v1/cards | cards:read | Lista las tarjetas de visita del equipo |
| POST | /v1/cards | cards:write | Crea una tarjeta de visita |
| GET | /v1/cards/{id} | cards:read | Obtiene una tarjeta de visita |
| PATCH | /v1/cards/{id} | cards:write | Cambia una tarjeta de visita |
| POST | /v1/cards/{id}/deactivate | cards:write | Desactiva una tarjeta de visita |
| GET | /v1/cards/{id}/analytics | cards:read | Vistas, guardados y toques de una tarjeta |
| Conversiones | |||
| POST | /v1/conversions | conversions:write | Registra una conversión |
| GET | /v1/analytics/funnel | analytics:read | Embudo del escaneo a los ingresos |
| Etiquetas NFC | |||
| GET | /v1/nfc/tags | codes:read | Lista las etiquetas NFC |
| POST | /v1/nfc/tags | codes:write | Registra una etiqueta NFC en un código |
Los esquemas de solicitud y respuesta de cada ruta están en la referencia de la API y en el documento OpenAPI. Referencia de la API →
Límites de solicitudes
- Pro
- 60 req / min · ráfaga 20 / 10 s
- Business
- 600 req / min · ráfaga 200 / 10 s
- Enterprise
- a medida
- Tareas de exportación y de creación en lote · Pro / Business
- 2 simultáneas / 5 simultáneas
- Los límites son por espacio de trabajo, compartidos por todas sus claves de API
- Ráfagas: como máximo 2× la tasa por minuto en cualquier intervalo de 10 segundos
- Las respuestas 429 llevan Retry-After en segundos
- Cada respuesta lleva X-RateLimit-Limit, -Remaining y -Reset (segundos hasta que se reinicia la ventana)
- Cada POST acepta una cabecera Idempotency-Key, respetada durante 24 horas
Autenticación
Envía tu clave secreta como token bearer. Las claves empiezan por sk_live_, se muestran una sola vez al crearlas, llevan scopes y actúan en su espacio de trabajo con el rol de quien las creó, como máximo Editor.
Autenticación y scopes →