Entrega y SLA de inicio
La entrega controla client_wait — independientemente del SLA de inicio processing_lane. Consulte SLA de inicio.
Slug de la pipeline
Las rutas de los trabajos utilizan handler___command con tres guiones bajos. OCR: POST /job/add/paperoffice_aiocr___generate. IDP: POST /job/add/workflow. Sin puntos ni po-* en la ruta.
La notación de puntos (handler.command) devuelve HTTP 400 (JOB_CONFIG_INVALID).
IDP POST /job/add/workflow acepta solo file multipart o pofid — no hay matrices de URL JSON.
Estándar — Mantener la conexión
POST /job/add/{pipeline} → Verbindung halten bis ~295s → 200 result ODER HTTP 202 + job_id + poll_url
Después de que expire la ventana de retención, el trabajo continúa. Utilice GET /job/get/{job_id} cada 5–10 segundos o use poll_url de la respuesta.
Los trabajos de API pendientes, en ejecución y completados se encuentran bajo Cuenta → API → Cola de trabajos (/paperoffice-account/api-queue).
job_id inmediato
client_wait=false ODER async_only=true
1. POST /job/add/{pipeline} → job_id sofort (~100ms)
2. GET /job/get/{job_id} → Alle 5–10 s pollen, bis job_status = "completed"
3. GET /job/download/{token} → Nur wenn job_result eine Download-URL enthält
HTTP 202 — El trabajo continúa
HTTP 202 es un camino de éxito, no un error. El trabajo permanece activo. Polling de job_id y poll_url hasta que job_status tenga el valor completed. El resultado está en job_result.
Con Connection Hold, el resultado final está en result. Al hacer polling, está en job_result. Los clientes evalúan el código estable, no el texto localizado de message.
Formato de respuesta
Todas las respuestas son JSON e incluyen processing_time.
Éxito:
{
"status": "success",
"job_id": "abc123",
"result": { "text": "…" },
"processing_time": "45.12ms"
}
Polling / HTTP 202:
{
"status": "success",
"job_id": "abc123",
"poll_url": "/job/get/abc123",
"client_wait": false,
"max_wait_seconds": 60,
"message": "Job queued — poll for result",
"processing_time": "45.12ms"
}
Error:
{
"status": "error",
"code": "INSUFFICIENT_CREDITS",
"message": "Not enough credits for this job",
"processing_time": "12.04ms"
}
Códigos de error
| HTTP | Código | Significado | Solución |
|---|---|---|---|
| 400 | INVALID_REQUEST | Parámetros faltantes / inválidos | Verificar el cuerpo de la solicitud |
| 400 | JOB_CONFIG_INVALID | Slug de pipeline inválido | Usar handler___command, no notación de puntos |
| 401 | AUTH_REQUIRED | Sin token Bearer | Establecer Authorization: Bearer YOUR_TOKEN |
| 401 | INVALID_TOKEN | Token inválido | Verificar el formato del token (po_sk_, po_ut_, po_gt_, po_pk_) |
| 401 | BEARERTOKEN_EXPIRED | Token expirado | Solicitar un nuevo token |
| 402 | INSUFFICIENT_CREDITS | Credits insuficiente | Recargar Credits o elegir una lane más baja |
| 402 | BUDGET_EXHAUSTED | Presupuesto de clave publicable agotado | Crear un nuevo po_pk_ o aumentar el límite de presupuesto |
| 403 | FORBIDDEN | Acción no permitida | Verificar alcance, origen o licencia |
| 403 | TIER_RESTRICTED | API del producto sin token (VISITOR) | Establecer token Bearer — esto no es HTTP 401 |
| 403 | JOB_REQUIRES_PAID_TIER | Nivel Free no permitido | Usar un plan de pago |
| 404 | NOT_FOUND | No encontrado | Verificar la ruta de la URL |
| 429 | RATE_LIMIT_EXCEEDED | Demasiadas solicitudes | Respetar Retry-After |
| 429 | QUEUE_LIMIT_REACHED | Cola llena | Reenviar más tarde |
| 500 | INTERNAL_ERROR | Error del servidor | Intentar de nuevo tras una breve pausa |
| 503 | SERVICE_UNAVAILABLE | Servicio no disponible | Intentar de nuevo con backoff |