> ## Documentation Index
> Fetch the complete documentation index at: https://developers.mypilotindex.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Empleos

> Busca los empleos abiertos, publica los empleos de tu empresa y muestra a un piloto los empleos que mejor encajan con él.

Los empleos funcionan de tres formas. Cualquier socio con `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

```bash theme={null}
curl "https://{api-host}/v1/partner/jobs?q=citation&position_type=first_officer&page=1&page_size=20" \
  -H "Authorization: Bearer $ACCESS_TOKEN"
```

```json theme={null}
{
  "items": [
    {
      "id": "6f1c2a9e-3b7d-4c51-9e2a-0d4b8f6a1c33",
      "title": "First Officer, Citation Latitude",
      "company": { "id": "9a7e2c10-5b3d-4f6a-8c21-7d0e4b6f1a52", "name": "Example Air", "logo_url": null },
      "position_type": "first_officer",
      "base_airport_code": "KTEB",
      "min_total_hours": 1500,
      "required_licenses": ["ATP"],
      "posted_at": "2026-11-05T14:00:00Z",
      "url": "https://mypilotindex.com/jobs/6f1c2a9e-3b7d-4c51-9e2a-0d4b8f6a1c33?src=share"
    }
  ],
  "page": 1,
  "page_size": 20,
  "has_more": false
}
```

La lista contiene anuncios activos y no vencidos, primero los destacados y luego los más recientes. `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 es `403 forbidden` con el motivo `partner_not_bound`.

```bash theme={null}
curl -X POST https://{api-host}/v1/partner/jobs \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "client_ref": "req-2291",
    "title": "First Officer, Citation Latitude",
    "position_type": "first_officer",
    "base_airport_code": "KTEB",
    "min_total_hours": 1500,
    "min_pic_hours": 500,
    "required_licenses": ["ATP"],
    "application_url": "https://careers.example.com/2291",
    "status": "active"
  }'
```

```json theme={null}
{ "job_id": "6f1c2a9e-3b7d-4c51-9e2a-0d4b8f6a1c33", "replayed": false }
```

`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](https://developers.mypilotindex.com/es/api-reference/introduction.md) 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](https://developers.mypilotindex.com/es/publishing.md#reintentar-sin-riesgo): 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

```bash theme={null}
curl "https://{api-host}/v1/partner/grants/{grant_id}/job-matches?limit=10" \
  -H "Authorization: Bearer $ACCESS_TOKEN"
```

```json theme={null}
{
  "items": [
    {
      "id": "6f1c2a9e-3b7d-4c51-9e2a-0d4b8f6a1c33",
      "title": "First Officer, Citation Latitude",
      "match": {
        "overall": 86,
        "matchLabel": "good_match",
        "engine_version": "jobmatch.web.1",
        "detail": "plan_required"
      }
    }
  ]
}
```

La respuesta sale de los 50 anuncios activos más recientes y los ordena por compatibilidad, de mayor a menor. `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.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.