Referencia de la API
testingapis.com es una API gratuita para probar clientes HTTP. Tiene 360 endpoints en 53 grupos: recursos realistas como productos, libros y países, además de endpoints para códigos de estado, redirecciones, cookies, caché, esquemas de autenticación, formatos de archivo, streaming e inyección de fallos. Echo, los métodos HTTP, los códigos de estado y los recursos products, posts y todos no necesitan cuenta. El resto necesita una cuenta gratuita.
https://api.testingapis.comfetch('https://api.testingapis.com/api/Products?limit=3')
.then(res => res.json())
.then(data => console.log(data))Descubrimiento
| Qué | Dónde |
|---|---|
| Documento OpenAPI 3.0 | https://api.testingapis.com/openapi/v1.jsonInicia sesión para verlo |
| Swagger UI | https://api.testingapis.com/swagger/index.htmlInicia sesión para verlo |
| Catálogo de rutas en vivo | GET https://api.testingapis.com/apiInicia sesión para verlo |
| Health checks | GET https://api.testingapis.com/api/healthGET https://api.testingapis.com/api/health/liveGET https://api.testingapis.com/api/health/ready |
| GraphQL | |
| WebSockets | wss://api.testingapis.com/ws/echowss://api.testingapis.com/ws/ticker |
Autenticación
Los endpoints sin nota de autenticación son públicos. Los endpoints que prueban la autenticación aceptan las credenciales de prueba fijas de abajo. No son secretas.
| Esquema | Cómo enviarlo | Valores de prueba | Lo usan |
|---|---|---|---|
| HTTP Basic | Authorization: Basic base64(user:pass) | apibee / password123 · Admin / Admin@1234 (API original) | /api/auth/basic*, /api/AuthTest/secure-data |
| Bearer (static) | Authorization: Bearer <token> | apibee-token-123 · admin-token · user-token · readonly-token | /api/auth/bearer, /api/auth/roles/* |
| JWT | Authorization: Bearer <jwt> | POST /api/auth/jwt/login con admin / admin123 o user / user123 · POST /api/User/Login con Michael / Thompson | /api/auth/jwt/me, /api/auth/jwt/admin, /api/Admin/authorize |
| API key | Cabecera X-API-Key, ?api_key= o cookie api_key | apibee-key-123 | /api/auth/api-key/* |
| OAuth 2.0 | Authorization: Bearer <access_token> | Clientes apibee-client / apibee-secret y apibee-public (PKCE) · usuarios apibee / password123, jane / jane123 | /api/auth/oauth/protected, /userinfo |
| OAuth 1.0a | Authorization: OAuth oauth_consumer_key="…", oauth_signature="…", … | Consumer apibee-consumer-key / apibee-consumer-secret · token apibee-access-token / apibee-token-secret (no caduca nunca) · HMAC-SHA1, HMAC-SHA256, HMAC-SHA512 o PLAINTEXT | /api/auth/oauth1, /api/auth/oauth1/* |
| Digest | Desafío y respuesta RFC 7616 | apibee / password123 | /api/auth/digest |
| Firma HMAC | Cabeceras X-Timestamp y X-Signature | Secreto apibee-hmac-secret | /api/auth/hmac |
| Cookie de sesión | Cookie apibee_session | POST /api/cookies/login con test / test123 o admin / admin123 | /api/cookies/me |
| CSRF | Cookie XSRF-TOKEN y cabecera X-CSRF-Token | Token de GET /api/auth/csrf/token | /api/auth/csrf/submit |
Un 401 significa que las credenciales faltan o no son válidas. Un 403 significa que son válidas pero no están permitidas, por ejemplo user-token en /api/auth/roles/admin.
Los ejemplos usan estos marcadores para los valores que cambian en cada ejecución:
| Marcador | De dónde sacarlo |
|---|---|
{{userJwt}} / {{adminJwt}} | accessToken de POST /api/auth/jwt/login con user / user123 o admin / admin123. |
{{refreshToken}} | refreshToken de POST /api/auth/jwt/login. |
{{legacyJwt}} | token de POST /api/User/Login con Michael / Thompson (rol Admin). |
{{oauthAccessToken}} | access_token de POST /api/auth/oauth/token. |
{{oauth1RequestToken}} / {{oauth1RequestSecret}} / {{oauth1Verifier}} | oauth_token y oauth_token_secret de POST /api/auth/oauth1/request_token con oauth_callback=oob, y luego oauth_verifier de GET /api/auth/oauth1/authorize. |
{{csrfToken}} | token de GET /api/auth/csrf/token. El mismo valor se guarda como la cookie XSRF-TOKEN. |
{{sessionId}} | Cookie apibee_session que pone POST /api/cookies/login (test / test123). |
{{unixTimestamp}} / {{hmacSignature}} | La hora Unix actual en segundos, y el HMAC-SHA256 en hexadecimal de "{timestamp}.{raw body}" con la clave apibee-hmac-secret. |
{{uuid}} | Cualquier UUID nuevo, usado como Idempotency-Key. |
Inicia sesión para ver los detalles
Los parámetros, los ejemplos de petición y respuesta y el panel Try it en vivo de los endpoints de autenticación son para miembros con sesión iniciada. Las cuentas son gratuitas y se crean en unos segundos.
Retrasos y errores simulados
Dos parámetros de query funcionan en todos los endpoints:
| Parámetro | Efecto | Ejemplo |
|---|---|---|
delay | Espera N segundos antes de responder. Máximo 10. | /api/Products?delay=2 |
error | Devuelve un error simulado en lugar de la respuesta real: 400, 401, 403, 404, 408, 429, 500, 502 o 503. Añade la cabecera X-Simulated: true. | /api/Products?error=503 |
Combinados, como en ?delay=2&error=503, la petición espera y luego falla. Un error simulado tiene este aspecto:
{
"status": 503,
"error": "Service Unavailable",
"message": "Simulated error. Use ?error={code} to test different status codes.",
"simulated": true
}Filtros, ordenación y paginación
Todos los endpoints que listan recursos, como GET /api/Products, aceptan estos parámetros de query:
| Parámetro | Significado | Ejemplo |
|---|---|---|
limit | Tamaño de página, de 1 a 100. Sin él, se devuelven todos los registros. | ?limit=10 |
page | Número de página, empezando en 1. Requiere limit. | ?limit=10&page=2 |
offset | Salta N registros, como alternativa a page. | ?limit=10&offset=20 |
sort, order | Ordena por cualquier campo. order es asc (por defecto) o desc. | ?sort=price&order=desc |
q | Búsqueda sin distinguir mayúsculas en los campos title, name, body, description y text. | ?q=keyboard |
cualquier campo | Filtro exacto, sin distinguir mayúsculas, sobre esa propiedad. | ?category=books&inStock=true |
Las listas devuelven un array JSON simple. Los totales van en las cabeceras X-Total-Count, X-Page, X-Per-Page y X-Total-Pages. La paginación por cursor, cabecera Link, keyset y HAL se muestra en Paginación.
Respuestas y errores
| Situación | Estado | Cuerpo |
|---|---|---|
| Obtener un registro | 200 | El registro |
| Listar registros | 200 | Array de registros, más cabeceras de paginación |
| Crear | 201 | { message, data } |
| Crear en bloque | 201 | { message, data: [ … ] } |
| Reemplazar o actualizar | 200 | { message, data } |
| Actualización parcial (PATCH) | 200 | { message, changed, ignored, data } |
| Borrar | 200 | { message } |
| Borrar en bloque | 200 | { message, deleted, notFound } |
| Error | 4xx o 5xx | { status, error, message } |
| Error de validación del modelo | 400 | application/problem+json con errores por campo |
| Validación de negocio | 422 | application/problem+json (RFC 7807) con errores por campo |
{
"status": 404,
"error": "Not Found",
"message": "Book with ID 999 does not exist."
}Todas las respuestas permiten cualquier origen (Access-Control-Allow-Origin: *, sin credenciales) y exponen al código del navegador las cabeceras de paginación, caché, límite de frecuencia y versionado. Las cabeceras X-RateLimit-* son informativas; el límite real solo se aplica en Límite de frecuencia.
Todos los datos viven en memoria. Crear, actualizar y borrar funciona, pero todo vuelve a los datos iniciales cuando se reinicia el servidor.
Llamadas desde un navegador
- Cookies. Los navegadores no dejan que JavaScript ponga la cabecera Cookie, y las peticiones cross-origin no llevan credenciales. Los endpoints basados en cookies solo funcionan desde el mismo origen o a través del proxy.
- Redirecciones.
fetch()sigue las redirecciones y oculta la respuesta 3xx. Para ver el estado real y la cabecera Location, usa el proxy. - Proxy.
POST /api/Proxy/callreenvía una petición desde el servidor y devuelve su estado y su cuerpo. Evita los límites de CORS, cookies y redirecciones, pero no transmite las cabeceras de la respuesta. - Streams.
/api/stream/ssees Server-Sent Events. Los streams NDJSON, chunked, drip y de array JSON llegan poco a poco; léelos con un lector de streaming. - WebSockets.
/ws/echoy/ws/tickernecesitan la API WebSocket, no fetch. - Autenticación Digest. Los navegadores solo hacen el desafío y la respuesta con su propia ventana de inicio de sesión.
- Inyección de fallos.
/api/chaos/aborty/api/chaos/partialcortan la conexión a propósito./api/chaos/timeouty/api/chaos/slowpueden tardar hasta 60 segundos. - Cabeceras prohibidas. Los navegadores se niegan a poner Host, Content-Length, Accept-Encoding, Cookie y algunas más.
Inicia sesión para ver los detalles
Los parámetros, los ejemplos de petición y respuesta y el panel Try it en vivo de estas notas son para miembros con sesión iniciada. Las cuentas son gratuitas y se crean en unos segundos.
Endpoints
360 endpoints en 53 grupos. Cada grupo abre su referencia, con parámetros y ejemplos de peticiones y respuestas.
Empieza aquí
4 endpointsUn catálogo en vivo de todos los endpoints, más health checks.
Fundamentos de HTTP
44 endpointsMétodos, códigos de estado, redirecciones, cookies, caché y cuerpos de petición.
Formatos y datos
62 endpointsTipos de contenido habituales, descargas de archivos, casos límite de JSON y utilidades.
Autenticación y seguridad
38 endpointsEsquemas de autenticación, OAuth 2.0 y 1.0a, JWT, límite de frecuencia y pagos.
Patrones de API
50 endpointsStreaming, WebSockets, trabajos asíncronos, paginación, inyección de fallos y más.
Recursos
142 endpointsConjuntos de datos realistas como productos, posts, libros y países.
API original
20 endpointsLa primera versión de la API: usuarios en JSON y XML, subidas y pruebas de autenticación.