PASE API v1

REST API para verificación de formación y descarga de certificados — Base URL: https://api.paselearning.com

Descripción general

PASE API permite a organizaciones autorizadas consultar el estado de formación de personas registradas en la plataforma PASE y descargar los certificados emitidos en formato PDF.

La integración se basa en dos operaciones:

Convenciones

ElementoDetalle
ProtocoloHTTPS obligatorio
FormatoJSON (UTF-8) para requests y responses. PDF binario para descargas.
Content-Typeapplication/json; charset=utf-8
VersiónPrefijo /v1/ en todas las rutas
FechasISO 8601 — YYYY-MM-DD HH:MM:SS (UTC-3 Buenos Aires)

Autenticación

Todos los endpoints requieren un Bearer token en el header Authorization. Cada organización cliente recibe un token único que no debe compartirse ni exponerse en código del lado del cliente.

# Header requerido en cada request
Authorization: Bearer {tu_token}
Los tokens son de uso exclusivo del operador asignado. Todas las requests quedan registradas con el identificador de cliente. El mal uso puede resultar en la suspensión del acceso.

Obtención de credenciales

Los tokens son provistos por PASE al momento de la habilitación del acceso. Para solicitar acceso o reportar un token comprometido, contactar a administracion@paseaog.com.

Códigos de error

La API usa códigos HTTP estándar. Todos los errores devuelven un objeto JSON con status y message.

{
  "status":  "error",
  "message": "Descripción del error"
}
CódigoSignificadoCausa común
400 Bad Request JSON malformado, operator_id incorrecto, batch de más de 1000 DNIs.
401 Unauthorized Header Authorization ausente o Bearer token inválido.
403 Forbidden El operator_id del body no coincide con el token Bearer usado.
404 Not Found Ruta inexistente.
410 Gone Token de descarga vencido (más de 10 min) o con usos agotados.
429 Too Many Requests Se superó la cuota por minuto o la cuota diaria.
500 Internal Server Error Error interno. Si persiste, contactar soporte.
503 Service Unavailable El servicio (o solo las descargas de PDF) fue pausado temporalmente por mantenimiento. No es un error del cliente: reintentar más tarde.
Ante un 503, la consulta de estado puede seguir disponible aunque la descarga de PDF esté pausada. Recomendamos implementar reintento con espera (backoff) y no interpretar el 503 como "sin datos".

Cuotas y límites

LímiteValorAlcance
DNIs por request1 000Límite fijo por llamada al endpoint de status
Requests por minutoSegún contratoPor cliente
DNIs por díaSegún contratoPor cliente
PDFs por díaSegún contratoPor cliente
Vigencia token descarga10 minutosDesde la emisión
Usos token descarga3Por token
Los límites por minuto y por día se configuran por cliente según el contrato. Los valores asignados a tu token se comunican al momento de la habilitación del acceso. Al superarlos, la API responde 429.
💡
Los tokens de descarga deben usarse dentro de los 10 minutos. Si vencen, volvé a llamar al endpoint de status para obtener nuevos tokens — el certificado no se pierde.

POST /v1/certificates/status

Consulta el estado de formación para una lista de DNIs. Devuelve los cursos completados y un token de descarga para cada certificado disponible.

Request

HeaderValor
AuthorizationBearer {token}requerido
Content-Typeapplication/jsonrequerido

Body

CampoTipoDescripción
operator_idstringIdentificador del operador asignado a tu cuenta (ej: "VISTA").requerido
peoplearrayLista de personas a consultar. Máx. 1000 elementos.requerido
people[].dnistringDNI del empleado o contratista.requerido
Request POST /v1/certificates/status
{
  "operator_id": "VISTA",
  "people": [
    { "dni": "2591137" },
    { "dni": "30456789" },
    { "dni": "99999999" }
  ]
}

Response 200 OK

CampoTipoDescripción
statusstring"success"
operator_idstringOperador de la consulta.
total_requestedintegerCantidad de DNIs enviados.
resultsarrayUn objeto por cada DNI consultado.
results[].dnistringDNI consultado.
results[].foundbooleantrue si el DNI existe en la plataforma.
results[].coursesarrayLista de certificados emitidos. Vacío si no tiene o no fue encontrado.
courses[].course_idintegerIdentificador interno del curso.
courses[].course_namestringNombre del curso.
courses[].certificate_codestringCódigo único del certificado.
courses[].approvedbooleanSiempre true cuando aparece en la lista.
courses[].approved_atstringFecha y hora de aprobación.
courses[].pdf_availablebooleantrue si el PDF puede descargarse.
courses[].download_tokenstringToken de 64 caracteres para descargar el PDF. Válido por 10 min, máx. 3 usos.
Response 200 OK
{
  "status": "success",
  "operator_id": "VISTA",
  "total_requested": 3,
  "results": [
    {
      "dni": "2591137",
      "found": true,
      "courses": [
        {
          "course_id": 141,
          "course_name": "SGA Etiquetado Químico",
          "certificate_code": "mj285TvggX",
          "approved": true,
          "approved_at": "2026-05-12 08:29:13",
          "pdf_available": true,
          "download_token": "4428f2fc4d74516e06897f49ed41aacf..."
        },
        {
          "course_id": 136,
          "course_name": "Línea de Fuego",
          "certificate_code": "KGGSJwdWyy",
          "approved": true,
          "approved_at": "2024-09-04 11:22:47",
          "pdf_available": true,
          "download_token": "98318d8da2713ca6156a345079fc39..."
        }
      ]
    },
    {
      "dni": "30456789",
      "found": true,
      "courses": []
    },
    {
      "dni": "99999999",
      "found": false,
      "courses": []
    }
  ]
}
Los cursos se ordenan por fecha de aprobación descendente (más reciente primero). Si un DNI no se encuentra en la plataforma, found es false y courses es un array vacío — no se devuelve error.

GET /v1/certificates/download/{token}

Descarga el PDF del certificado asociado al token obtenido en el endpoint de status. Devuelve el binario del PDF directamente.

Parámetros de URL

ParámetroTipoDescripción
tokenstring (64 hex)Token de descarga obtenido en /v1/certificates/status.

Request

Request GET /v1/certificates/download/{token}
GET /v1/certificates/download/4428f2fc4d74516e06897f49ed41aacf312595e0e3776bdd86b25d555556c4f5
Host: api.paselearning.com
Authorization: Bearer {tu_token}

Response 200 OK

HeaderValor
Content-Typeapplication/pdf
Content-Dispositioninline; filename="certificado_{codigo}.pdf"

El cuerpo de la respuesta es el binario del PDF. Guardarlo con extensión .pdf.

Errores posibles

CódigoMensajeCausa
410 Download token has expired. Han pasado más de 10 minutos desde que se generó el token.
410 Download token maximum uses reached. El token ya fue usado 3 veces.
401 Token does not belong to this client. El token fue generado por otro cliente.
Cada download_token es válido por 10 minutos y hasta 3 usos. Si el token vence, llamar nuevamente a /v1/certificates/status para obtener tokens frescos. El certificado no se pierde, solo el token expira.

Ejemplo con curl

# Descargar un certificado y guardarlo como PDF
curl -s \
  -H "Authorization: Bearer {tu_token}" \
  "https://api.paselearning.com/v1/certificates/download/{download_token}" \
  -o certificado_mj285TvggX.pdf

Objetos de respuesta

Objeto course

CampoTipoDescripción
course_idintegerIdentificador único del curso en la plataforma.
course_namestringNombre del curso tal como aparece en el certificado.
certificate_codestringCódigo alfanumérico único del certificado emitido. Puede usarse para verificación independiente.
approvedbooleanSiempre true. Solo se devuelven cursos con certificado emitido.
approved_atstringFecha y hora de emisión del certificado en formato YYYY-MM-DD HH:MM:SS.
pdf_availablebooleanIndica si el PDF está disponible para descarga.
download_tokenstringToken de 64 caracteres hexadecimales para descargar el PDF vía /v1/certificates/download.

Ejemplos completos

Flujo completo: consulta y descarga

# Paso 1: Consultar estado de formación para 2 DNIs
curl -s -X POST \
  -H "Authorization: Bearer {tu_token}" \
  -H "Content-Type: application/json" \
  -d '{"operator_id":"VISTA","people":[{"dni":"2591137"},{"dni":"30456789"}]}' \
  "https://api.paselearning.com/v1/certificates/status"

# Paso 2: Descargar el PDF de cada certificado usando su download_token
curl -s \
  -H "Authorization: Bearer {tu_token}" \
  "https://api.paselearning.com/v1/certificates/download/{download_token}" \
  -o certificado.pdf

Batch de múltiples DNIs (Python)

import requests

BASE_URL = "https://api.paselearning.com"
TOKEN    = "{tu_token}"
HEADERS  = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}

# 1. Consultar estado
resp = requests.post(
    f"{BASE_URL}/v1/certificates/status",
    headers=HEADERS,
    json={"operator_id": "VISTA", "people": [{"dni": d} for d in ["2591137", "30456789"]]}
)
data = resp.json()

# 2. Descargar cada certificado
for person in data["results"]:
    for course in person.get("courses", []):
        if course["pdf_available"]:
            pdf = requests.get(
                f"{BASE_URL}/v1/certificates/download/{course['download_token']}",
                headers=HEADERS
            )
            filename = f"cert_{course['certificate_code']}.pdf"
            with open(filename, "wb") as f:
                f.write(pdf.content)
            print(f"✓ {person['dni']} — {course['course_name']} → {filename}")
💡
Para batches grandes, llamar al endpoint de status con hasta 1000 DNIs por request, luego iterar sobre los tokens de descarga. Los tokens se generan en el momento de la consulta, por lo que el proceso completo debe terminar dentro de los 10 minutos de vida de cada token.

PASE API v1 · Documentación técnica · Última actualización: