GET/api/v6/urlshortener/links

Listar enlaces cortos

Tus enlaces paginados, con búsqueda, filtros, orden y sus contadores de visitas.

Alcance y límites

Alcance

API key con el servicio urlshortener habilitado

Límite de uso

30 solicitudes por minuto

  • Hasta 100 ítems por página; un valor mayor se recorta a 100.
  • total es exacto hasta 10.000; por encima, totalIsExact es false.
  • Con page se llega hasta el enlace 10.000; para seguir, cursor.
  • Una búsqueda o un orden demasiado costosos para una organización muy grande se detienen a los pocos segundos con 504.

Lista los enlaces de tu organización —nunca los eliminados— con sus contadores ya consolidados. Por defecto, del más nuevo al más viejo. Todos los filtros son opcionales y se combinan entre sí.

status conserva su significado de siempre: active incluye los vencidos, porque vencer no cambia el estado guardado. Para separar los vigentes de los vencidos usa state.

Para recorrer muchos enlaces, pagina con `cursor`. Cada respuesta trae nextCursor mientras haya más: pásalo en la siguiente petición, con los mismos filtros, sort y order, y la página empieza justo después del último enlace de la anterior. page sigue funcionando como siempre, pero solo hasta el enlace 10.000 (con perPage=100, hasta la página 100); más allá responde 400 y hay que seguir con cursor, que no tiene tope.

`total` es exacto hasta 10.000. Si los enlaces que cumplen los filtros son más, total llega en 10000 y totalIsExact en false: «más de 10.000». hasMore dice siempre, sin error, si hay otra página.

Parámetros de consulta

page
integeropcional
Número de página (empieza en 1). Llega hasta el enlace 10.000: la página tiene que empezar, como mucho, en el enlace 10.000. Con cursor se ignora.

Por defecto: 1

perPage
integeropcional
Ítems por página (máximo 100).

Por defecto: 20

cursor
stringopcional
El nextCursor de la respuesta anterior, tal cual. La página empieza justo después del último enlace de esa respuesta. Tiene que ir con el mismo sort y order; un cursor que no es de esta organización o de este orden responde 400.
search
stringopcional
Busca en el código y en la URL de destino, por fragmento y sin distinguir mayúsculas ni tildes (mínimo 2 caracteres; con menos se ignora). Si pegas una URL corta completa (h0b.co/a1b2c3d o https://h0b.co/a1b2c3d), trae exactamente ese enlace, también si su dominio ya no es de tu organización (domainStatus: released).
domain
stringopcional
Solo los enlaces de este dominio. Los de un dominio que ya no es de tu organización (domainStatus: released) no entran aunque se llamen igual: para encontrar uno, pega su URL corta en search.
state
stringopcional
Estado tal como lo vive quien visita: active (activo y sin vencer), expired (activo con el vencimiento ya pasado: ya no redirige), disabled o blocked (bloqueado por Hablame).
activeexpireddisabledblocked
status
stringopcional
Estado guardado. active incluye los vencidos. Se conserva por compatibilidad; prefiere state.
activedisabledblocked
kind
stringopcional
Enlaces con alias elegido, o con código generado.
aliasgenerated
traffic
stringopcional
none: los que nunca han recibido una visita. some: los que han recibido al menos una.
nonesome
createdFrom
stringopcional
Creados desde este día (AAAA-MM-DD, hora de Colombia), incluido.
createdTo
stringopcional
Creados hasta este día (AAAA-MM-DD, hora de Colombia), incluido.
sort
stringopcional
Orden: por fecha de creación, por visitas de toda la vida, por última visita o por vencimiento. Con lastClick y expires, los enlaces sin ese dato van al final en los dos sentidos.
createdclickslastClickexpires

Por defecto: created

order
stringopcional
Sentido del orden.
descasc

Por defecto: desc

Respuestas

200

Página de enlaces.

{
  "success": true,
  "data": {
    "items": [
      {
        "domain": "h0b.co",
        "code": "a1b2c3d",
        "shortUrl": "https://h0b.co/a1b2c3d",
        "longUrl": "https://example.com/landing",
        "isAlias": false,
        "status": "active",
        "domainStatus": "active",
        "expiresAt": null,
        "createdAt": "2026-09-20T15:04:05Z",
        "clicks": 128,
        "uniqueClicks": 96,
        "firstClickAt": "2026-09-20T15:31:40Z",
        "lastClickAt": "2026-09-23T18:22:10Z"
      }
    ],
    "page": 1,
    "perPage": 20,
    "total": 1,
    "totalIsExact": true,
    "hasMore": false,
    "nextCursor": null
  },
  "meta": {
    "requestId": "8f0c0e2a4b1d4c8fae2b7a91e0c5d3f6",
    "timestamp": "2026-09-23T18:30:00+00:00",
    "responseTimeMs": 7.2
  }
}
400

Un filtro trae un valor que no existe (el mensaje dice cuál y qué valores acepta), una fecha que no es AAAA-MM-DD, una page más allá del enlace 10.000 o un cursor que no vale.

401

Credenciales inválidas o faltantes.

403

La 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.

429

Se excedió el límite de solicitudes.

504

La 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.

Errores posibles

Códigos que este endpoint puede devolver en error.code. El detalle completo está en el catálogo.

Ver el catálogo completo
GET /api/v6/urlshortener/links
curl -X GET 'https://developers.hablame.co/api/v6/urlshortener/links?perPage=20&sort=created' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer hk_TU_API_KEY'

Try-It

Ejecuta la petición contra la API real con tu propia API key.

La key se usa solo en tu navegador para esta petición. No se guarda ni se envía a ningún otro lado.

Parámetros

Número de página (empieza en 1). Llega hasta el enlace 10.000: la página tiene que empezar, como mucho, en el enlace 10.000. Con cursor se ignora.

Ítems por página (máximo 100).

El nextCursor de la respuesta anterior, tal cual. La página empieza justo después del último enlace de esa respuesta. Tiene que ir con el mismo sort y order; un cursor que no es de esta organización o de este orden responde 400.

Busca en el código y en la URL de destino, por fragmento y sin distinguir mayúsculas ni tildes (mínimo 2 caracteres; con menos se ignora). Si pegas una URL corta completa (h0b.co/a1b2c3d o https://h0b.co/a1b2c3d), trae exactamente ese enlace, también si su dominio ya no es de tu organización (domainStatus: released).

Solo los enlaces de este dominio. Los de un dominio que ya no es de tu organización (domainStatus: released) no entran aunque se llamen igual: para encontrar uno, pega su URL corta en search.

Estado tal como lo vive quien visita: active (activo y sin vencer), expired (activo con el vencimiento ya pasado: ya no redirige), disabled o blocked (bloqueado por Hablame).

Estado guardado. active incluye los vencidos. Se conserva por compatibilidad; prefiere state.

Enlaces con alias elegido, o con código generado.

none: los que nunca han recibido una visita. some: los que han recibido al menos una.

Creados desde este día (AAAA-MM-DD, hora de Colombia), incluido.

Creados hasta este día (AAAA-MM-DD, hora de Colombia), incluido.

Orden: por fecha de creación, por visitas de toda la vida, por última visita o por vencimiento. Con lastClick y expires, los enlaces sin ese dato van al final en los dos sentidos.

Sentido del orden.

GET https://developers.hablame.co/api/v6/urlshortener/links?perPage=20&sort=created

Respuesta

Todavía no has enviado ninguna petición.