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.

URL base
https://api.testingapis.com
Inicio rápido
fetch('https://api.testingapis.com/api/Products?limit=3')
  .then(res => res.json())
  .then(data => console.log(data))

Descubrimiento

QuéDónde
Documento OpenAPI 3.0https://api.testingapis.com/openapi/v1.jsonInicia sesión para verlo
Swagger UIhttps://api.testingapis.com/swagger/index.htmlInicia sesión para verlo
Catálogo de rutas en vivoGET 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
POST https://api.testingapis.com/graphql
Queries y mutations
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.

EsquemaCómo enviarloValores de pruebaLo usan
HTTP BasicAuthorization: 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/*
JWTAuthorization: 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 keyCabecera X-API-Key, ?api_key= o cookie api_keyapibee-key-123/api/auth/api-key/*
OAuth 2.0Authorization: Bearer <access_token>Clientes apibee-client / apibee-secret y apibee-public (PKCE) · usuarios apibee / password123, jane / jane123/api/auth/oauth/protected, /userinfo
OAuth 1.0aAuthorization: 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/*
DigestDesafío y respuesta RFC 7616apibee / password123/api/auth/digest
Firma HMACCabeceras X-Timestamp y X-SignatureSecreto apibee-hmac-secret/api/auth/hmac
Cookie de sesiónCookie apibee_sessionPOST /api/cookies/login con test / test123 o admin / admin123/api/cookies/me
CSRFCookie XSRF-TOKEN y cabecera X-CSRF-TokenToken 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:

MarcadorDe 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ámetroEfectoEjemplo
delayEspera N segundos antes de responder. Máximo 10./api/Products?delay=2
errorDevuelve 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:

Error simulado
{
  "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ámetroSignificadoEjemplo
limitTamaño de página, de 1 a 100. Sin él, se devuelven todos los registros.?limit=10
pageNúmero de página, empezando en 1. Requiere limit.?limit=10&page=2
offsetSalta N registros, como alternativa a page.?limit=10&offset=20
sort, orderOrdena por cualquier campo. order es asc (por defecto) o desc.?sort=price&order=desc
qBúsqueda sin distinguir mayúsculas en los campos title, name, body, description y text.?q=keyboard
cualquier campoFiltro 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ónEstadoCuerpo
Obtener un registro200El registro
Listar registros200Array de registros, más cabeceras de paginación
Crear201{ message, data }
Crear en bloque201{ message, data: [ … ] }
Reemplazar o actualizar200{ message, data }
Actualización parcial (PATCH)200{ message, changed, ignored, data }
Borrar200{ message }
Borrar en bloque200{ message, deleted, notFound }
Error4xx o 5xx{ status, error, message }
Error de validación del modelo400application/problem+json con errores por campo
Validación de negocio422application/problem+json (RFC 7807) con errores por campo
Error
{
  "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/call reenví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/sse es 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/echo y /ws/ticker necesitan 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/abort y /api/chaos/partial cortan la conexión a propósito. /api/chaos/timeout y /api/chaos/slow pueden 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 endpoints

Un catálogo en vivo de todos los endpoints, más health checks.