Errores y respuestas
Éxito
Una respuesta correcta envuelve el resultado en data. Las listas añaden pagination.
json
{
"data": [ { "id": "…", "slug": "spring", "shortLink": "https://rvlnk.link/spring" } ],
"pagination": { "page": 1, "limit": 50, "total": 1 }
}
Errores
Los errores llegan con el estado HTTP correspondiente y siempre tienen esta forma:
json
{
"error": {
"code": "conflict",
"message": "This slug is already taken."
}
}
| HTTP | code | Significado |
|---|---|---|
| 400 | invalid_request | La petición es incorrecta. message indica qué. |
| 401 | unauthorized | No hay clave, o la clave no es válida o ha caducado. |
| 403 | forbidden | La clave no tiene un permiso (error.requiredPermission), o el rol del propietario de la clave no puede hacerlo. |
| 403 | license_limit_reached | Se alcanzó un límite del plan. error.licenseLimitReached es true. error.licenseExpired es true cuando el plan ha caducado. |
| 404 | not_found | No existe ese elemento en este espacio de trabajo. |
| 409 | conflict | Ya existe, por ejemplo un slug o un nombre de etiqueta ocupado. |
| 429 | rate_limited | Más de 300 peticiones por minuto para la clave. Consulta Retry-After. |
| 5xx | internal_error | Algo falló de nuestra parte. |
Peticiones masivas
La creación, actualización y eliminación masivas devuelven HTTP 200 e informan de cada elemento por separado. Un elemento fallido no detiene a los demás. Un elemento fallido tiene error y code (los mismos códigos de arriba), además de index (posición en el array de la petición, al crear) o id (al actualizar y eliminar).
json
{
"data": {
"created": [ { "id": "…", "slug": "a1", "shortLink": "https://rvlnk.link/a1" } ],
"failed": [ { "index": 1, "error": "This slug is already taken.", "code": "conflict" } ]
}
}
Paginación
GET /links acepta page (por defecto 1) y limit (por defecto 50, máximo 200).