Encabezados de respuesta
Cada respuesta de la API de FourA incluye un pequeño conjunto de encabezados personalizados. Son útiles para el rastreo, soporte, conciliación de facturación y análisis posterior.
Encabezados que establece FourA
| Encabezado | Establecido en | Descripción |
|---|---|---|
X-Foura-Request-Id |
Cada respuesta de la /api/*, incluidos los errores y los 401 |
Un UUID que identifica esta solicitud. Regístralo de tu lado. |
X-FourA-Credits |
Cada respuesta de la /api/* que llegó al backend |
Créditos gastados en esta llamada. Devuelto en caso de éxito y de fracaso (el trabajo se realizó de cualquier manera). |
Content-Type |
Cada respuesta | Siempre application/json para el envelope. El content-type del objetivo regresa dentro del campo headers del envelope. |
X-Foura-Request-Id
Cada llamada a POST /api/auto/, POST /api/single/, POST /api/proxy/ o POST /api/browser/ está etiquetada con un UUID. El encabezado se establece incluso cuando falla la autenticación, por lo que también puedes correlacionar llamadas mal configuradas.
curl -i -X POST https://eu.api.foura.ai/api/single/ \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"method": "GET", "url": "https://example.com"}'
HTTP/1.1 200 OK
X-Foura-Request-Id: 9f1c4e6c-7b2a-4d3e-8a1f-2c9d8e4a3b15
X-FourA-Credits: 2
Content-Type: application/json
...
Cuándo usarlo
- Tickets de soporte: incluye el request ID y podremos encontrar la llamada exacta en nuestros registros.
- Tus propios registros: guárdalo junto a la línea de registro de tu aplicación. Si la queja de un cliente dice "los datos eran incorrectos a las 14:32", puedes reproducir la solicitud exacta.
- Rastreo en el panel de control: el mismo ID aparece en el feed de actividad para las claves que administras, de modo que puedes abrir la fila correspondiente e inspeccionar la solicitud y respuesta capturadas.
Ejemplo: registro de tu lado
import logging
import requests
log = logging.getLogger(__name__)
def fetch(url, api_key):
resp = requests.post(
"https://eu.api.foura.ai/api/single/",
headers={"X-API-Key": api_key, "Content-Type": "application/json"},
json={"method": "GET", "url": url},
)
request_id = resp.headers.get("X-Foura-Request-Id", "no-id")
credits = resp.headers.get("X-FourA-Credits", "0")
log.info("foura request_id=%s url=%s status=%s credits=%s", request_id, url, resp.status_code, credits)
resp.raise_for_status()
return resp.json()
async function fetchPage(url, apiKey) {
const resp = await fetch('https://eu.api.foura.ai/api/single/', {
method: 'POST',
headers: { 'X-API-Key': apiKey, 'Content-Type': 'application/json' },
body: JSON.stringify({ method: 'GET', url })
});
const requestId = resp.headers.get('X-Foura-Request-Id') || 'no-id';
const credits = resp.headers.get('X-FourA-Credits') || '0';
console.log(`foura request_id=${requestId} url=${url} status=${resp.status} credits=${credits}`);
return resp.json();
}
X-FourA-Credits
X-FourA-Credits reporta el costo en créditos de la llamada que acabas de hacer. Es un medidor, no una factura: el encabezado refleja lo que gastó el trabajo sin importar el resultado. La capa de facturación del panel de control solo cuenta los resultados facturables contra tu plan (consulta Resultados de solicitudes para saber qué resultados son facturables).
Referencia de costos
| Motor | Base | Con unblocker |
|---|---|---|
| Single | 1 | 2 |
| Proxy | 5 | 10 |
| Browser | 15 | 30 (cuando se resolvió una defensa) |
/api/auto/ no agrega una fila facturable separada. Su costo en créditos es la suma de las subllamadas que realizó internamente (una simple repetición en un objetivo cálido puede terminar en 2; una resolución fría en un sitio difícil puede gastar mucho más). El valor X-FourA-Credits en la respuesta auto equivale a meta.credits en el body y rastrea el costo total de la escalera.
¿Por qué tanto un campo de encabezado como uno de body?
El encabezado es conveniente: puedes leerlo antes de analizar el body, registrarlo junto a tu línea de solicitud o sumarlo en muchas llamadas sin analizar el JSON. El meta.credits (Auto) del body o los metadatos por motor (paneles Single, Proxy, Browser) contienen el mismo número, pero legibles dentro del envelope de la respuesta.
Comportamiento de caché
La API no establece Cache-Control ni ETag en las respuestas. Cada llamada llega al backend. Si necesitas almacenamiento en caché, agrégalo de tu lado.
Encabezados de respuesta del objetivo
Los encabezados que devolvió el sitio objetivo no están en la respuesta de la API de FourA. Regresan dentro del envelope JSON como el campo headers. Para los endpoints Single y Proxy, este es un array de objetos de encabezado por salto (una entrada por paso de redirección). Para el endpoint Browser, es un objeto plano de los encabezados de respuesta finales.
{
"status": 200,
"headers": [
{ "Content-Type": "text/html; charset=utf-8", "Server": "..." }
],
"data": "<!doctype html>...",
"total_time": 0.42
}
Si necesitas un encabezado de objetivo específico, léelo del campo headers del envelope, no de la respuesta HTTP de la llamada a la API en sí.
Relacionado
- Endpoints de la API: Formas del envelope de solicitud y respuesta
- Errores de la API: Cómo se estructuran las respuestas de error
- Resultados de solicitudes: Qué resultados son facturables
- Registro de actividad: Historial por solicitud codificado por request ID