jobs.read busca entre los anuncios abiertos. Una empresa con jobs.write publica los suyos. Una app de piloto con un grant que incluye jobs.match pregunta qué empleos abiertos encajan con ese piloto.
Busca los empleos abiertos
page_size llega hasta 50. GET /v1/partner/jobs/{job_id} lee un anuncio; un anuncio que no está activo responde 404 not_found.
Publica un empleo
MyPilotIndex vincula tu cuenta de socio a tu empresa, y el empleo se publica en nombre de esa empresa. Sin el vínculo, la respuesta es403 forbidden con el motivo partner_not_bound.
title y position_type son obligatorios. status es active, que sale al aire de inmediato, o draft, que nadie lee hasta que un cambio lo active. La referencia de la API lista cada campo; un miembro fuera de esa lista, como company_id o featured, responde 400 invalid_request.
client_ref funciona igual que en las publicaciones: un reintento con el mismo cuerpo responde 200 con replayed: true y no publica nada. Un socio publica como máximo 50 empleos en 24 horas; pasado ese límite, la respuesta es 429 rate_limited con el motivo publication_throttled y Retry-After.
Cambia o cierra un empleo
PATCH /v1/partner/jobs/{job_id} cambia los miembros que envías y responde con el empleo. POST /v1/partner/jobs/{job_id}/close lo archiva, y cerrar un empleo ya cerrado responde 200.
Solo cambias los empleos que creaste, para la empresa vinculada a tu cuenta. Cualquier otro caso responde 404 not_found, exactamente igual que un empleo que no existe.
Volver a poner un empleo cerrado en active lo reabre por 30 días más, salvo que envíes tu propio expires_at.
Muestra a un piloto los empleos que encajan
limit llega hasta 20.
La compatibilidad es la que el piloto ve en MyPilotIndex, según su propio plan. La de un piloto con plan gratuito lleva overall, matchLabel y detail: "plan_required". La de un piloto de pago reemplaza detail por breakdown y missingRequirements. match es null para un empleo que el motor no puntúa, como uno para mecánicos, y esos empleos van al final.
