Nombre
Estadísticas del enlace
Totales del rango, serie por día o por hora y desgloses por país, dispositivo, sistema, navegador u origen.
Método HTTP y ruta
/ api/ v6/ urlshortener/ links/ {domain}/ {code}/ statshttps:
Qué pasa al ejecutarlo
- Solo consulta: no cambia datos de tu organización.
- La llamada no se cobra.
Qué hace
Analítica de un enlace en una ventana de días: los totales del rango, una serie por día o por hora y los valores con más visitas de cada dimensión. Los días y las horas son de Colombia (America/).
totals.yclicks totals.son los del rango;uniqueClicks firstClickAtylastClickAt, los de toda la vida del enlace.- La serie es dispersa: los días u horas sin visitas no vienen. Complétalos en cero si vas a graficar.
- Cada dimensión trae los
topvalores con más visitas y, si queda resto, una fila__other. Una visita sin dato para una dimensión (sin país, o llegada sin origen) no aparece en ella: sus filas pueden sumar menos que el total. referreres solo el dominio de origen (www.), sin la ruta. Las visitas directas no tienen fila: sonfacebook. com totals.menos la suma declicks referrer.deviceesmobile,tabletodesktop;os,Android,iOS,Windows,macOS,Linux,ChromeOSuOther;browser,Chrome,Safari,Firefox,Edge,Opera,Samsung Internet,UC BrowseruOther.countryes el código ISO (CO).
Disponibilidad y requisitos previos
- Publicado y disponible en la API v6 de producción.
- Todas las rutas parten de
https:./ / developers. hablame. co - Necesitas una API key de Hablame para llamarlo.
Autenticación y permisos
- Envía tu API key en la cabecera
Authorizationcon el esquema Bearer.
Quién puede llamarlo: Una API key con el servicio urlshortener habilitado.
Límites y consideraciones operativas
Límite de uso: 120 solicitudes por minuto.
- Ventanas de hasta 366 días por día, y de hasta 31 días por hora.
- Hasta 100 valores por dimensión.
- Además, cada consulta gasta unidades de un cupo de 120 por minuto de tu organización, según su costo: 2 por la consulta y 3 por cada 31 días del rango. 30 días gastan 5; un año, 38. Sin unidades,
429conRetry-After.
Parámetros de ruta
| Nombre | Tipo | Descripción y reglas |
|---|---|---|
domainObligatorio | string | Dominio del enlace, tal como lo devuelve la API en Ejemplo: |
codeObligatorio | string | Código o alias del enlace. Se compara en minúsculas. Ejemplo: |
Parámetros de consulta
| Nombre | Tipo | Descripción y reglas |
|---|---|---|
domainStatusOpcional | string | Con Valores permitidos: |
fromOpcional | string | Primer día de la ventana, Formato: |
toOpcional | string | Último día de la ventana, Formato: |
granularityOpcional | string | Tamaño de cada punto de la serie. Valores permitidos: |
dimensionsOpcional | string | Dimensiones de desglose, separadas por coma: Ejemplo: |
topOpcional | integer | Cuántos valores trae cada dimensión (y cada ranking). Máximo 100. Valor por omisión: |
Encabezados HTTP
| Nombre | Tipo | Descripción y reglas |
|---|---|---|
AuthorizationObligatorio | string | Tu API key con el esquema Bearer. Ejemplo: |
Cuerpo de la petición
Este endpoint no recibe cuerpo en la petición.
Respuestas satisfactorias
200
Analítica del enlace.
{
"success": true,
"data": {
"domain": "h0b.co",
"code": "a1b2c3d",
"shortUrl": "https://h0b.co/a1b2c3d",
"range": { "from": "2026-08-25", "to": "2026-09-23", "granularity": "day", "timezone": "America/Bogota" },
"totals": {
"clicks": 128,
"uniqueClicks": 96,
"firstClickAt": "2026-09-20T15:31:40Z",
"lastClickAt": "2026-09-23T18:22:10Z"
},
"series": [
{ "at": "2026-09-20", "clicks": 40, "uniqueClicks": 31 },
{ "at": "2026-09-23", "clicks": 88, "uniqueClicks": 65 }
],
"dimensions": {
"country": [{ "value": "CO", "clicks": 110 }, { "value": "__other", "clicks": 12 }],
"device": [{ "value": "mobile", "clicks": 101 }, { "value": "desktop", "clicks": 27 }]
}
},
"meta": {
"requestId": "8f0c0e2a4b1d4c8f",
"clientIp": "203.0.113.45",
"timestamp": "2026-09-23T18:30:00+00:00",
"responseTimeMs": 7.2
}
}Los valores del ejemplo son ilustrativos.
Campos de la respuesta
| Nombre | Tipo | Descripción y reglas |
|---|---|---|
successSiempre presente | boolean | |
dataSiempre presente | object | |
data.Siempre presente | string | |
data.Siempre presente | string | |
data.Siempre presente | string | Formato: |
data.Siempre presente | object | La ventana que se consultó, ya resuelta. |
data.Siempre presente | string | Formato: |
data.Siempre presente | string | Formato: |
data.Siempre presente | string | Valores permitidos: |
data.Siempre presente | string | Ejemplo: |
data.Siempre presente | object | |
data.Siempre presente | integer | Visitas del rango. |
data.Siempre presente | integer | Únicas del rango (suma diaria). |
data.Siempre presente | string | Puede llegar en Formato: |
data.Siempre presente | string | Puede llegar en Formato: |
data.Siempre presente | array<object> | |
data.Siempre presente | string |
Ejemplo: |
data.Siempre presente | integer | |
data.Siempre presente | integer | |
data.Siempre presente | object | Un arreglo por cada dimensión pedida. |
data. | array<object> | |
data.Siempre presente | string | El valor tal como se registró ( |
data.Siempre presente | integer | |
metaSiempre presente | object | Metadatos de la respuesta. |
meta.Siempre presente | string | Identificador único de la solicitud (16 caracteres hexadecimales). Es el mismo de la cabecera Ejemplo: |
meta.Siempre presente | string | IP con la que la API vio tu solicitud. Útil si tu API key solo admite ciertas redes. Ejemplo: |
meta.Siempre presente | string | Fecha y hora en que se construyó la respuesta (ISO 8601 con offset). Formato: |
meta.Siempre presente | number | Tiempo (ms) que tomó procesar la solicitud en el servidor. Ejemplo: |
Códigos de error
Todas las respuestas de error tienen la misma forma: success en false y un objeto error cuyo code dice qué pasó. Aquí están agrupadas por tipo, con los códigos que este endpoint puede devolver.
Forma de una respuesta de error
| Nombre | Tipo | Descripción y reglas |
|---|---|---|
successSiempre presente | boolean | Valor fijo: |
metaSiempre presente | object | Metadatos de la respuesta. |
meta.Siempre presente | string | Identificador único de la solicitud (16 caracteres hexadecimales). Es el mismo de la cabecera Ejemplo: |
meta.Siempre presente | string | IP con la que la API vio tu solicitud. Útil si tu API key solo admite ciertas redes. Ejemplo: |
meta.Siempre presente | string | Fecha y hora en que se construyó la respuesta (ISO 8601 con offset). Formato: |
meta.Siempre presente | number | Tiempo (ms) que tomó procesar la solicitud en el servidor. Ejemplo: |
errorSiempre presente | object | |
error.Siempre presente | string | Identificador estable en UPPER_SNAKE_CASE. Los clientes ramifican sobre este valor. Ejemplo: |
error. | integer | Código numérico legacy v5, solo cuando hay puente. Se omite en los códigos nacidos en v6. Ejemplo: |
error.Siempre presente | string | URL a la documentación del error. Formato: |
error.Siempre presente | string | Texto legible en inglés. Es para el log del desarrollador, no para el usuario final: no lo parsees. |
error.Siempre presente | array<object> | Contexto estructurado (validaciones, recurso afectado). Arreglo vacío cuando no hay contexto extra. |
Validación
- 400Una fecha que no es
AAAA-MM-DD,fromposterior ato, una ventana mayor a la permitida o una granularidad que no existe.
El rango o la granularidad de estadísticas son inválidos.
Mensaje que devuelve la API: The requested statistics range or granularity is invalid.
Autenticación
- 401Credenciales inválidas o faltantes.
No se envió un token Bearer y cada llamada lo requiere.
Mensaje que devuelve la API: Authentication is required. Send your API key as `Authorization: Bearer <token>`.
La clave de API no se reconoce: formato equivocado, revocada o vencida.
Mensaje que devuelve la API: The provided API key is invalid or has expired. Please verify the value sent in the `Authorization: Bearer` header.
Permisos
- 403La API key no tiene habilitado el acortador (o está apagado para tu organización), la key no se puede usar desde la red de la petición, o la organización no está activa.
La clave no tiene permitido el servicio detrás de este endpoint.
Mensaje que devuelve la API: This API key is not authorized to use the requested service.
La clave solo funciona desde ciertas redes y tu IP no está entre ellas.
Mensaje que devuelve la API: This API key cannot be used from this IP address. The address we saw is in `meta.clientIp`: call from one of the networks allowed for the key, or use a key that allows this one.
Tu organización está suspendida o cerrada.
Mensaje que devuelve la API: The organization associated with this API key is not active. Please contact support.
Límites de uso
- 429Se excedió el límite de solicitudes.
Excediste el cupo de tu organización para este endpoint.
Mensaje que devuelve la API: You have exceeded the allowed request rate for this endpoint. Please wait before retrying.
Recurso inexistente
- 404No existe un enlace de tu organización con ese dominio y código (o fue eliminado). Un enlace de otra organización también responde
404: no se revela que exista.
No hay un enlace con ese dominio y código.
Mensaje que devuelve la API: No short link was found for that domain and code.
Errores internos y disponibilidad
- 504La consulta tardó demasiado y la detuvimos. Pasa con consultas muy grandes para organizaciones con muchos enlaces: acótala (menos días, menos secciones, más filtros). Repetirla igual no ayuda.
Una consulta interna tardó demasiado y se cortó.
Otras respuestas
Este endpoint no declara respuestas de este tipo.
Consideraciones especiales
uniqueClicks cuenta la primera visita del día desde cada navegador. En un rango de varios días es la suma de cada día, no personas distintas. Las respuestas pueden tener hasta un minuto de antigüedad (cabecera X-Cache).