CazVid
Documentación de la API

Job Search API

Job Search API v1

Busca empleos públicos de CazVid con una consulta en lenguaje natural y filtros estructurados. Los resultados son empleos públicos que incluyen un applyUrl y un slug estable cuando el empleo tiene página pública, y nunca incluyen datos de contacto del reclutador. El alcance de job-search es gratuito para cualquier cuenta registrada de CazVid.

URL base

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

Descripción general

La v1 tiene dos endpoints públicos. Usa /public/search para encontrar empleos públicos con una consulta y filtros opcionales. Usa /public/usage para consultar tu cuota diaria restante sin gastarla. El contrato OpenAPI se sirve en /public/openapi.json.

POST/public/search
Busca empleos públicos de CazVid con una consulta en lenguaje natural y filtros estructurados opcionales. Devuelve una página de resultados.
GET/public/usage
Consulta la cuota diaria de la organización que llama. Esta llamada no cuenta para la cuota.

Empleos públicos, con un enlace para postularse y sin datos de contacto

Cada resultado es un empleo público de CazVid. Los resultados nunca incluyen datos de contacto del reclutador ni del responsable de contratación - ni correo, ni teléfono, ni LinkedIn. Cuando el empleo tiene página pública, el resultado incluye un applyUrl (la página del empleo en CazVid donde se postula la persona) y un slug estable. Entrega el applyUrl a quien busca empleo; la postulación siempre ocurre en CazVid.

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; los propietarios y administradores las gestionan en la app en Perfil > Developer API, y quienes buscan empleo también pueden crear una. 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. El mismo formato de clave (cazvid_jb_...) sirve para todas las familias de la CazVid Developer API; cada clave lleva solo los alcances que permite tu plan.

x-api-key: cazvid_jb_...
Authorization: Bearer cazvid_jb_...
Content-Type: application/json
El alcance job-search:read es gratuito - cualquier cuenta registrada de CazVid puede generar una clave para él en la app en Perfil > Developer API, sin necesidad de un plan de pago. Las demás familias de la API de CazVid (Job Builder y Candidate Search) requieren un plan Platinum o superior. Una clave que no tenga el alcance de job-search recibe un 403, y cada organización puede tener hasta 10 claves activas.

Estructura del resultado

Cada resultado es un empleo público. Los campos anulables se omiten o son null cuando CazVid no tiene ese dato. Cuando están presentes, slug identifica el empleo en cazvid.com y applyUrl es la página canónica del empleo por la que se postula la persona (https://cazvid.com/job/<slug>, o /empleo/<slug> en español); ambos son null para un empleo sin página pública. Nunca se incluyen ids de plataforma sin procesar ni campos de contacto.

CampoTipoDescripción
titlestring | nullTítulo del empleo.
descriptionstring | nullDescripción del empleo, con los datos de contacto depurados y el HTML eliminado.
companyNamestring | nullNombre de la empresa contratante, cuando está disponible.
authorNamestring | nullNombre público que se muestra en la página del empleo, cuando está disponible.
jobTypestring | nullTipo de empleo (por ejemplo tiempo completo o medio tiempo), cuando está disponible.
typeOfWorkstring | nullClasificación de la modalidad de trabajo, cuando está disponible.
isRemotebooleanSi el empleo es remoto.
remoteWorkScopestring | nullAlcance del trabajo remoto (por ejemplo solo país o mundial), cuando está disponible.
locationNamestring | nullUbicación del empleo en formato legible.
locationCountryCodestring | nullCódigo de país ISO 3166-1 alfa-2, cuando está disponible.
payAmountnumber | nullMonto del pago, cuando está disponible.
payCurrencystring | nullCódigo de moneda ISO 4217 del monto del pago, cuando está disponible.
payTypestring | nullPeriodo de pago (por ejemplo por hora o mensual), cuando está disponible.
isNegotiablebooleanSi el pago es negociable.
languagestring | nullIdioma del empleo ISO 639-1, cuando está disponible.
occupationTitlesstring[]Títulos de ocupación asociados al empleo.
occupationFamiliesstring[]Familias de ocupación a las que pertenece el empleo.
createdAtstring | nullMarca de tiempo ISO 8601 de cuándo se publicó el empleo.
refreshedAtstring | nullMarca de tiempo ISO 8601 de la actualización más reciente del empleo, cuando está disponible.
slugstring | nullSlug público estable que identifica el empleo en cazvid.com, o null cuando el empleo no tiene página pública.
applyUrlstring | nullPágina canónica del empleo en CazVid para postularse (https://cazvid.com/job/<slug>, o /empleo/<slug> en español), o null cuando el empleo no tiene página pública.
videoUrlstring | nullURL del video del empleo alojado en CazVid, cuando está disponible.
thumbnailUrlstring | nullURL de la miniatura del video del empleo alojada en CazVid, cuando está disponible.
{
  "jobs": [
    {
      "title": "Warehouse Operator",
      "description": "Join our Bogota distribution center as a warehouse operator...",
      "companyName": "Andes Logistics",
      "authorName": "Andes Logistics HR",
      "jobType": "full-time",
      "typeOfWork": "on-site",
      "isRemote": false,
      "remoteWorkScope": null,
      "locationName": "Bogota, Colombia",
      "locationCountryCode": "CO",
      "payAmount": 1800000,
      "payCurrency": "COP",
      "payType": "monthly",
      "isNegotiable": false,
      "language": "es",
      "occupationTitles": ["Warehouse Operator", "Logistics Assistant"],
      "occupationFamilies": ["Transportation and Logistics"],
      "createdAt": "2026-07-01T12:30:00.000Z",
      "refreshedAt": "2026-07-08T09:00:00.000Z",
      "slug": "warehouse-operator-bogota-andes-logistics",
      "applyUrl": "https://cazvid.com/empleo/warehouse-operator-bogota-andes-logistics",
      "videoUrl": "https://ik.imagekit.io/cazvid/videos/example.mp4",
      "thumbnailUrl": "https://ik.imagekit.io/cazvid/thumbs/example.jpg"
    }
  ],
  "hasMore": true,
  "page": 1,
  "pageSize": 10
}

Paginación

La respuesta envuelve los resultados con metadatos de paginación. Esta API pagina solo con hasMore - no hay un conteo total.

  • jobs - los empleos de esta página.
  • hasMore - true cuando existe otra página. Solicita la siguiente incrementando page.
  • page - el número de página (base 1) devuelto.
  • pageSize - el tamaño de página devuelto.
  • No hay campo de conteo total. No esperes un total ni un count: sigue solicitando páginas mientras hasMore sea true.

Consultar la cuota restante

GET /public/usage devuelve la cuota diaria de Job Search de la organización que llama. Usa la misma autenticación que la búsqueda 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-search/public/usage \
  -H "x-api-key: cazvid_jb_..."
CampoTipoDescripción
dailyQuotanumberTotal de llamadas de búsqueda exitosas permitidas por organización por día UTC. Predeterminado 500.
usednumberLlamadas de búsqueda que consumen cuota realizadas hoy (UTC) con las claves de esta organización.
remainingnumberLlamadas exitosas restantes antes de que se reinicie la cuota a la medianoche UTC.
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": 500,
  "used": 12,
  "remaining": 488,
  "resetsAt": "2026-07-11T00: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 la ventana del límite. Un 429 de la cuota diaria lleva details.period utc_day; un 429 del límite por minuto o del límite de consultas de uso lleva minute; un 429 del backstop por IP lleva minute con details.scope en ip.

EstadoCódigoSignificado
400VALIDATION_ERROREl cuerpo de la solicitud no pasó la validación, por ejemplo un tipo de campo incorrecto, un formato de language o createdAfter inválido, o un valor de page o pageSize por encima de los límites permitidos.
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.
403SCOPE_FORBIDDENLa clave no lleva el alcance de job-search.
429RATE_LIMIT_EXCEEDEDSe alcanzó un límite: la cuota diaria (details.period utc_day), el límite por minuto o el límite de consultas de uso (details.period minute), o el backstop por IP (details.period minute con details.scope ip).
504SEARCH_TIMEOUTLa búsqueda de empleos tardó demasiado. Reintenta la solicitud.
500JOB_SEARCH_API_ERROROcurrió un error inesperado del servidor, o una dependencia no estaba disponible.
{
  "statusCode": 429,
  "errorCode": "RATE_LIMIT_EXCEEDED",
  "message": "Daily Job Search API quota exceeded.",
  "details": {
    "limit": 500,
    "period": "utc_day"
  },
  "retryAfter": 21600,
  "path": "/api/v3.0/job-search/public/search"
}

Uso aceptable

Los empleos se proporcionan para atender la búsqueda de empleo del usuario final que tienes enfrente, no para copiarse ni revenderse. Al usar esta API aceptas lo siguiente. Estos términos pueden ser reemplazados por términos formales de la API cuando la API pase a disponibilidad general.

  • Sin duplicación masiva ni redistribución. No copies el índice de empleos a tu propio almacén ni construyas una bolsa de empleo o conjunto de datos competidor a partir de él.
  • Sin retención más allá de atender la solicitud. Conserva los resultados solo el tiempo necesario para responder la búsqueda que tienes enfrente; no construyas una copia persistente del índice de empleos.
  • Sin reventa. Los empleos y cualquier campo derivado de ellos no pueden venderse, sublicenciarse ni redistribuirse.
  • Postúlate a través de CazVid. Envía a quienes buscan empleo al applyUrl en cazvid.com; no hagas scraping para evitarlo ni redirijas las postulaciones fuera de la plataforma.
  • Sin evasión de la cuota. No uses varias claves, organizaciones ni cuentas para evadir la cuota diaria por organización, el límite por minuto ni el backstop por IP.

Límites y comportamiento

  • La cuota de la v1 es de 500 llamadas exitosas a search por organización por día UTC. El alcance de job-search es gratuito y está separado de las cuotas de Job Builder y Candidate Search.
  • Un límite por organización de 30 búsquedas por minuto, más un backstop por IP de 60 por minuto, protege el backend de búsqueda compartido. Al exceder cualquiera se devuelve 429 con details.period en minute (el bloqueo por IP añade details.scope en ip).
  • pageSize está limitado a 25 y page a 100. Las solicitudes por encima de esos límites devuelven 400 VALIDATION_ERROR.
  • Los resultados son empleos públicos. Incluyen un applyUrl y un slug cuando el empleo tiene página pública, pero ningún dato de contacto del reclutador ni ids de plataforma sin procesar.
  • Rota las claves creando una clave nueva, actualizando tu integración y luego revocando la anterior. Cada organización puede tener hasta 10 claves activas en todas las familias.

Usar desde un agente (MCP)

¿Prefieres controlar la búsqueda de empleo desde un agente de IA en vez de HTTP directo? El servidor MCP de CazVid expone search_jobs (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