CazVid
Documentación de la API

Job Builder API

Job Builder API v1

Genera detalles estructurados de empleo a partir de un prompt breve, guarda un borrador editable de CazVid o publica un empleo estándar a través del pipeline de aprobación existente.

URL base

https://aio-backend-prod.cazvid.app/api/v3.0/job-builder

Descripción general

La v1 tiene tres endpoints públicos. Usa /public/generate cuando solo necesites una vista previa. Usa /public/jobs cuando quieras que CazVid cree un registro de empleo real. Usa /public/usage para consultar tu cuota diaria restante sin gastarla.

POST/public/generate
Previsualiza los detalles normalizados del empleo. Añade includeDescription: true para incluir el HTML de la descripción generada.
POST/public/jobs
Genera los detalles y la descripción, luego crea un borrador editable o un empleo estándar publicado.
GET/public/usage
Consulta la cuota diaria de la organización que llama. Esta llamada no cuenta para la cuota.

Autenticación

Envía tu clave de API con el encabezado x-api-key o como un token Authorization: Bearer. Las claves pertenecen a una organización y pueden limitarse a uno o más workspaces. Las claves en texto plano se muestran una sola vez al crearlas y CazVid las almacena solo como hash. Trata las claves como secretos: no las pongas en código de frontend, apps móviles, capturas de pantalla, registros ni mensajes de soporte.

x-api-key: cazvid_jb_...
Authorization: Bearer cazvid_jb_...
Content-Type: application/json
El acceso a la API en producción requiere un plan Platinum o superior. Los propietarios y administradores de la organización gestionan las claves desde la sección Developer API en CazVid.

Vista previa de los detalles generados

Las llamadas de vista previa no escriben registros de empleo. Devuelven un DTO público normalizado que tu integración puede inspeccionar antes de crear un borrador o publicar.

curl -X POST https://aio-backend-prod.cazvid.app/api/v3.0/job-builder/public/generate \
  -H "x-api-key: cazvid_jb_..." \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "Looking for a remote customer support specialist in Mexico",
    "language": "en",
    "organizationId": "ORG_ID",
    "workspaceId": "WORKSPACE_ID",
    "includeDescription": true
  }'

Crear empleos

El endpoint jobs siempre genera los detalles y la descripción. Las preguntas de filtro se omiten en la v1. Los empleos Premium y Premium+ permanecen en la app porque dependen del flujo de pago.

CampoTipoRequeridoDescripción
promptstringRequeridoSolicitud de contratación en lenguaje natural (de 1 a 10000 caracteres), incluyendo el puesto, la ubicación o la intención de trabajo remoto y los requisitos útiles.
languageen | es | nl | ptRequeridoIdioma para los detalles y la descripción del empleo generados. Las superficies de empleo de CazVid son inglés y español, por lo que se recomienda en o es.
organizationIdObjectIdOpcionalOrganización propietaria del empleo. Si se omite, se usa la organización de la clave de API.
workspaceIdObjectIdOpcionalWorkspace donde se debe crear el empleo. Si se omite, se usa el workspace predeterminado de la clave de API.
publishModedraft | publishOpcionaldraft (el valor predeterminado) guarda un empleo editable. publish crea un empleo estándar y lo envía a la aprobación de CazVid.

Crear un borrador

curl -X POST https://aio-backend-prod.cazvid.app/api/v3.0/job-builder/public/jobs \
  -H "x-api-key: cazvid_jb_..." \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "Looking for a bilingual customer support specialist in Mexico",
    "language": "en",
    "organizationId": "ORG_ID",
    "workspaceId": "WORKSPACE_ID",
    "publishMode": "draft"
  }'

Publicar un empleo estándar

curl -X POST https://aio-backend-prod.cazvid.app/api/v3.0/job-builder/public/jobs \
  -H "x-api-key: cazvid_jb_..." \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "Looking for a bartender in Monterrey",
    "language": "en",
    "organizationId": "ORG_ID",
    "workspaceId": "WORKSPACE_ID",
    "publishMode": "publish"
  }'

Modos de trabajo y ubicación

Remoto dentro del país

Ejemplo de prompt: Looking for a remote customer support specialist in Mexico.

Devuelve workMode.type remote, scope country, countryCode MX, sin coordenadas de ciudad.

Remoto en todo el mundo

Ejemplo de prompt: Looking for a virtual assistant, fully remote worldwide.

Devuelve workMode.type remote, scope worldwide, y borra country, city, GeoName y coordinates.

Presencial o híbrido

Ejemplo de prompt: Looking for a truck driver in Managua.

Devuelve los datos canónicos de la ciudad resueltos a través de los servicios de ubicación de CazVid.

Estructura de la respuesta

Las respuestas de borrador y publicación incluyen el id del post creado, el modo de publicación, el estado del empleo, completePost, jobBuilderProgress y el DTO público del empleo generado. Los borradores conservan jobBuilderProgress para retomarlos en la app; al publicar se pone en null. Los empleos publicados también incluyen listId cuando se crea la lista de empleos (los borradores devuelven listId null).

{
  "postId": "POST_ID",
  "listId": "LIST_ID",
  "publishMode": "publish",
  "status": "pending",
  "completePost": true,
  "jobBuilderProgress": null,
  "job": {
    "title": "Bartender",
    "language": "en",
    "description": "<p>Generated job description...</p>",
    "workMode": {
      "type": "onsite",
      "scope": null,
      "countryCode": "MX",
      "countryName": "Mexico",
      "city": "Monterrey",
      "region": "Nuevo Leon",
      "displayName": "Monterrey, Nuevo Leon, Mexico",
      "geoNameId": "3995465",
      "coordinates": {
        "longitude": -100.3161,
        "latitude": 25.6866
      }
    },
    "salary": {
      "low": 8000,
      "recommended": 10000,
      "high": 12000,
      "period": "monthly",
      "currency": "MXN",
      "currencySymbol": "MX$",
      "negotiable": false,
      "additionalCompensation": []
    },
    "primaryEmploymentType": "fullTime",
    "employmentTypes": ["fullTime", "partTime"],
    "categories": [
      {
        "id": "CATEGORY_ID",
        "name": "Food Service",
        "primary": true
      }
    ],
    "education": ["High School Diploma or equivalent"],
    "skills": ["Customer service", "Attention to detail"]
  }
}

Idempotencia

Envía un encabezado opcional Idempotency-Key en POST /public/jobs para que la creación de empleos sea segura de reintentar. La clave tiene de 1 a 255 caracteres ASCII visibles. La misma clave con el mismo cuerpo de solicitud repite la respuesta almacenada (con un encabezado de respuesta Idempotency-Replayed: true) sin crear un segundo empleo y sin consumir cuota - el reintento aún debe pasar el límite diario, así que una repetición intentada cuando la organización está en su tope diario devuelve 429 RATE_LIMIT_EXCEEDED. Las repeticiones están disponibles durante 24 horas después de que la solicitud original se completa; después de eso la clave se comporta como nueva. La misma clave con un cuerpo diferente devuelve 422 IDEMPOTENCY_KEY_REUSED. Un duplicado concurrente que llega mientras el primero aún se procesa devuelve 409 IDEMPOTENCY_IN_PROGRESS; una solicitud inconclusa retiene la clave como máximo 10 minutos, así que los 409 se resuelven dentro de ese límite. Un encabezado con formato inválido devuelve 400 IDEMPOTENCY_KEY_INVALID. Si el almacén de idempotencia no está disponible, la solicitud no se procesa y devuelve 503 IDEMPOTENCY_STORE_UNAVAILABLE con el cupo de cuota reembolsado - reintenta con la misma clave.

Envía siempre una clave nueva y única para cada intención distinta de crear un empleo. Esto importa sobre todo para agentes y automatizaciones: si una llamada supera el tiempo de espera o se cae la conexión, reintentar con la misma clave garantiza que nunca crees un empleo duplicado.
curl -X POST https://aio-backend-prod.cazvid.app/api/v3.0/job-builder/public/jobs \
  -H "x-api-key: cazvid_jb_..." \
  -H "Idempotency-Key: 7c9e6a2f-unique-per-job-intent" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "Looking for a bartender in Monterrey",
    "language": "en",
    "organizationId": "ORG_ID",
    "workspaceId": "WORKSPACE_ID",
    "publishMode": "publish"
  }'

Consultar la cuota restante

GET /public/usage devuelve la cuota diaria de Job Builder de la organización que llama. Usa la misma autenticación que los demás endpoints y no cuenta para la cuota, así que puedes consultarlo antes de un lote para evitar respuestas 429. Las consultas están limitadas a 60 solicitudes por minuto por clave de API; al excederlo se devuelve la forma estándar de 429 con details.period en minute.

GET/public/usage
Consulta la cuota diaria de la organización que llama. Esta llamada no cuenta para la cuota.
curl https://aio-backend-prod.cazvid.app/api/v3.0/job-builder/public/usage \
  -H "x-api-key: cazvid_jb_..."
CampoTipoDescripción
dailyQuotanumberTotal de llamadas exitosas permitidas por organización por día UTC.
usednumberLlamadas a la API que consumen cuota realizadas hoy (UTC) con las claves de esta organización.
remainingnumberLlamadas exitosas restantes antes de que se reinicie la cuota.
resetsAtstring (ISO 8601)Marca de tiempo ISO 8601 de la próxima medianoche UTC, cuando se reinicia la cuota.
period"utc_day"Ventana de la cuota. Siempre utc_day en la v1.
{
  "dailyQuota": 10,
  "used": 3,
  "remaining": 7,
  "resetsAt": "2026-07-07T00:00:00.000Z",
  "period": "utc_day"
}

Errores

Las respuestas de error usan valores errorCode estables para que las integraciones no tengan que analizar mensajes de texto. Cada error devuelve el path de la solicitud; las respuestas 429 añaden retryAfter, el número de segundos hasta que se reinicia el día UTC.

EstadoCódigoSignificado
400VALIDATION_ERROREl cuerpo de la solicitud no pasó la validación.
400IDEMPOTENCY_KEY_INVALIDEl encabezado Idempotency-Key tiene un formato inválido (debe tener de 1 a 255 caracteres ASCII visibles).
401API_KEY_MISSINGNo se envió ninguna clave de API.
401API_KEY_INVALIDLa clave no existe o no se puede verificar.
401API_KEY_EXPIREDLa clave superó su fecha de expiración.
401API_KEY_REVOKEDLa clave fue revocada.
403ORG_ACCESS_DENIEDLa clave no puede acceder a esta organización.
403WORKSPACE_ACCESS_DENIEDLa clave no puede acceder a este workspace.
403PLAN_REQUIREDEl acceso a la API en producción requiere un plan Platinum o superior.
409IDEMPOTENCY_IN_PROGRESSUna solicitud con el mismo Idempotency-Key aún se está procesando. Reintenta cuando termine.
422IDEMPOTENCY_KEY_REUSEDEl Idempotency-Key ya se usó con un cuerpo de solicitud diferente.
429RATE_LIMIT_EXCEEDEDLa organización alcanzó su cuota diaria de llamadas exitosas.
503IDEMPOTENCY_STORE_UNAVAILABLENo se pudo verificar la idempotencia, así que no se creó nada. Reintenta con la misma clave.
{
  "statusCode": 429,
  "errorCode": "RATE_LIMIT_EXCEEDED",
  "message": "Daily Job Builder API quota exceeded.",
  "details": {
    "limit": 10,
    "period": "utc_day"
  },
  "retryAfter": 21600,
  "path": "/api/v3.0/job-builder/public/jobs"
}

Límites y comportamiento

  • La cuota de la v1 es de 10 llamadas exitosas a generate o jobs por organización por día UTC.
  • publishMode: "publish" crea únicamente empleos estándar. Premium y Premium+ permanecen en la app en la v1.
  • Los empleos publicados entran en el pipeline existente de CazVid de pendiente y aprobación. La API no marca directamente los empleos como aprobados.
  • Rota las claves creando una clave nueva, actualizando tu integración y luego revocando la clave anterior.

¿También usas la Candidate Search API? Revisa sus términos de uso aceptable.

Usar desde un agente (MCP)

¿Prefieres controlar Job Builder desde un agente de IA en vez de HTTP directo? El servidor MCP de CazVid expone preview_job y create_job (además de list_api_usage) a Claude Code, Claude.ai, ChatGPT, Cursor y VS Code, con esta misma clave de API y cuota diaria.

Lee la documentación del servidor MCP