Busca empleo fintech desde Claude
Conecta Claude con el tablero y pregunta en español: vacantes, salarios y el estado de tus postulaciones, en una sola conversación. Es gratis.
Conéctalo
- 1
Crea tu cuenta y genera tu clave
En API y MCP dentro de tu cuenta. Es personal: no la compartas. Se muestra una sola vez.
- 2
Agrega el servidor remoto
El endpoint es
https://fintech.us.com/api/mcpy la clave va en el encabezadox-api-key. También se aceptaAuthorization: Bearer. - 3
Pregunta
Claude decide qué herramienta usar. No necesitas saber sus nombres.
Claude Code
claude mcp add --transport http fintechjobs https://fintech.us.com/api/mcp --header "x-api-key: TU_CLAVE"
Claude Desktop
En claude_desktop_config.json, con el puente mcp-remote.
{
"mcpServers": {
"fintechjobs": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://fintech.us.com/api/mcp",
"--header",
"x-api-key:${FTC_API_KEY}"
],
"env": {
"FTC_API_KEY": "TU_CLAVE"
}
}
}
}Tres cosas que puedes hacer hoy
01
Buscar vacantes
Pega esto en Claude:
Busca vacantes de ingeniería backend en Ciudad de México que publiquen el rango en MXN.
Una lista corta de vacantes reales con empresa, ciudad, rango en USD al año (y el original en MXN) y el enlace a cada una; luego el detalle de la que elijas.
Herramientas:
search_jobs,get_job02
Saber si un salario es justo
Pega esto en Claude:
Me ofrecen MXN 55,000 al mes como analista de riesgo semi senior en Ciudad de México. ¿Está dentro del rango del mercado?
La oferta convertida a USD al año, la mediana y los percentiles del área y el mercado con el número de datos detrás, y las vacantes abiertas que publican un rango para comparar.
Herramientas:
get_salaries,search_jobs03
Postular y dar seguimiento
Pega esto en Claude:
¿Qué postulaciones tengo en entrevista y a cuáles debo dar seguimiento esta semana?
Tus postulaciones por etapa con la fecha de seguimiento de cada una; Claude mueve una de etapa o le pone recordatorio cuando se lo pides, y postula por ti solo a las vacantes que reciben postulaciones aquí, después de que confirmes.
Herramientas:
solo_pro_pipeline,solo_pro_update,submit_application
¿Una demo no responde así? Revisa la tabla de errores o escríbenos a info@fintech.us.com.
Qué puedes pedirle
- «Busca vacantes de ingeniería backend en Ciudad de México que publiquen el rango en MXN.»
- «¿Qué fintechs en Bogotá están contratando para cumplimiento y riesgo?»
- «Compara el salario de datos y analítica semi senior en Buenos Aires con el de Ciudad de México.»
- «Muéstrame vacantes de producto en remoto LATAM pagadas en USD.»
- «¿Qué postulaciones tengo en entrevista y a cuáles debo dar seguimiento esta semana?»
¿Cómo consulta un agente de IA las vacantes fintech de Fintech Careers?
Con una clave personal gratuita, creada en tu cuenta, y dos puertas: la API REST en /api/v1, con vacantes, empresas, sueldos y novedades y su documento OpenAPI, y el servidor MCP remoto en /api/mcp, que Claude y otros clientes MCP usan para buscar vacantes, leer sueldos y llevar tu pipeline de postulaciones en una conversación en español.
- ¿La API o el conector MCP pueden postular por mí?
- Solo en las vacantes que se postulan dentro de la plataforma. Cuando la postulación se hace en el sitio de la empresa, la API y el conector no la envían: devuelven el enlace para que la hagas allá y nunca afirman que una postulación se envió. Tú revisas la vacante y tú postulas; el agente prepara y organiza.
- ¿Cuánto cuesta usar la API y el servidor MCP?
- Nada. La clave personal es gratuita, se crea en tu cuenta y se muestra una sola vez. Buscar vacantes, leer sueldos y empresas y llevar tu pipeline por la API o por MCP no tiene costo; la única regla es un límite de peticiones por minuto. Una vacante que se postula en el sitio de la empresa trae su enlace.
- ¿Cómo debe citar un agente los datos del tablero?
- Con el nombre Fintech Careers y la URL exacta de la vacante, el listado o la página de salarios, más la fecha de consulta. Un sueldo se cita en USD al año con el mercado o el área, la n y la fecha del tipo de cambio; si repites la cifra original, lleva su código de moneda.
Herramientas
Todas son gratis, incluidas las de seguimiento de tus postulaciones (solo_pro_pipeline y solo_pro_update). Si una vacante se postula en el sitio de la empresa, el conector no envía nada: te da el enlace para que postules allá. Antes de enviar una postulación, Claude te pide confirmación.
search_jobs- Busca vacantes por palabra clave, área, mercado, ciudad, modalidad remota, nivel y pago.
get_job- Trae el detalle de una vacante: descripción, rango de pago y cómo se postula.
submit_application- Postula con tu nombre, correo y CV a las vacantes que reciben postulaciones en la plataforma, después de que confirmes. Si la empresa recibe postulaciones en su propio sitio, te devuelve el enlace para postular allá.
get_salaries- Promedio, mediana y percentiles de salario por área y mercado, siempre en USD anuales.
get_companies- Empresas que contratan, con cuántas vacantes abiertas tiene cada una.
get_feed- Lo nuevo en el tablero: vacantes recién publicadas, salarios validados, empresas verificadas, noticias y eventos. Con types te quedas solo con lo que pidas.
recommended_jobs- Tus vacantes recomendadas según tus búsquedas guardadas, las vacantes que guardaste, tus postulaciones y tu perfil, con el motivo de cada una. Solo lee: no postula.
solo_pro_pipeline- Tus postulaciones con su etapa y fecha de seguimiento.
solo_pro_update- Mueve una postulación de etapa, ponle un recordatorio o un seguimiento, o registra una vacante de otro sitio.
solo_pro_gap- Las palabras clave que pide una vacante y no están en las habilidades de tu perfil.
kit_del_dia- Una vacante al día elegida para ti, con un prompt para evaluarla y adaptar tu CV con tus datos reales. Tú postulas.
Alternativa local (stdio)
Si tu cliente solo habla stdio, usa la configuración de Claude Desktop de arriba: mcp-remote corre en tu equipo por stdio y habla con el servidor remoto. Esta otra configuración es para quien tiene acceso al repositorio, que no es público: después de npm ci, apunta tu cliente a mcp-server/index.ts. Habla con la misma API y usa la misma clave. Necesitas Node.js 20 o superior.
{
"mcpServers": {
"fintechjobs": {
"command": "npx",
"args": [
"-y",
"tsx",
"/ruta/a/fintechjobs/mcp-server/index.ts"
],
"env": {
"FINTECHCAREERS_URL": "https://fintech.us.com",
"FINTECHCAREERS_API_KEY": "TU_CLAVE"
}
}
}
}Referencia
La API REST y las herramientas MCP hacen exactamente lo mismo: cada herramienta llama a un endpoint. Versión del servidor MCP: 2.8.0. La clave va en el encabezado x-api-key y nunca en la URL. Ejemplo:
curl -H "x-api-key: TU_CLAVE" \ "https://fintech.us.com/api/v1/jobs?region=MX&limit=3"
Endpoints
Para programas: la API está descrita en OpenAPI 3.1 y el servidor MCP en .well-known/mcp.json.
| Endpoint | Herramienta MCP | Qué hace |
|---|---|---|
GET /api/v1/jobs | search_jobs | Busca vacantes públicas. Mismos filtros que el tablero. En cada resultado, salary es la cifra del empleador en su moneda y su periodo (period: YEAR o MONTH) y salary_usd es siempre anual en USD. |
GET /api/v1/jobs/{id} | get_job | Una vacante por id o slug, con description_markdown y cómo se postula. |
GET /api/v1/companies | get_companies | Empresas con vacantes abiertas, con cuántas tiene cada una y si está verificada. |
GET /api/v1/salaries | get_salaries | Promedio, mediana y percentiles de salarios validados de un área, en USD anuales, solo con 10 datos o más de esa área. Si no, insufficient_data con n, min_n y reason. |
GET /api/v1/feed | get_feed | Lo nuevo: vacantes, salarios validados, empresas verificadas, artículos y eventos. Cada elemento trae su type; las vacantes nunca se mezclan con noticias ni eventos salvo que pidas varios tipos. |
POST /api/v1/apply | submit_application | Postula a una vacante onsite con nombre, correo y un CV o LinkedIn. Una vacante offsite responde 409 offsite_apply con apply_url y no guarda nada. |
GET /api/v1/solo-pro | solo_pro_pipeline | Tus postulaciones (enviadas aquí o marcadas en el sitio de la empresa), con etapa y fecha de seguimiento. |
POST /api/v1/solo-pro | solo_pro_update | Cambia la etapa de una postulación, su recordatorio o su nota, anota un seguimiento o la descarta. Con url registra una vacante de otro sitio, solo para ti. |
GET /api/v1/solo-pro/gap | solo_pro_gap | Qué palabras clave pide una vacante y no están en las habilidades de tu perfil, con una puntuación de 0 a 100 y la diferencia con el sueldo que buscas, en USD. Se compara con las habilidades del perfil, no con un CV. Guarda el resultado en tu postulación. |
GET /api/v1/kit | kit_del_dia | Kit del día: una vacante abierta elegida para ti hoy (fecha de Ciudad de México), la misma en cada llamada del día, con apply_url para que postules tú. No envía postulaciones. |
GET /api/v1/recommendations | recommended_jobs | Tus vacantes recomendadas, con el motivo de cada una: según tus búsquedas guardadas, las vacantes que guardaste, tus postulaciones y las habilidades y el nivel de tu perfil. Solo lee: no postula a nada. |
POST /api/v1/keys | ninguna | Genera o cambia tu clave. Se autentica con tu sesión en el sitio, no con una clave. La clave se muestra una sola vez. |
Parámetros
Los nombres documentados van en snake_case. En MCP, los mismos nombres salvo donde se indica. En REST, un valor que no se entiende se ignora y ningún filtro produce un error; en GET /api/v1/jobs vuelve como null en filters de la respuesta. En MCP, los valores de una lista (region, level, currency, types, status y el canal de un seguimiento) y los límites numéricos (limit, offset, compare) se validan: otro valor se rechaza antes de llamar a la API.
GET /api/v1/jobs y search_jobs
| Parámetro | Valores | Por defecto | Descripción |
|---|---|---|---|
q | texto | ninguno | Texto libre sobre título, empresa, descripción y habilidades (hasta 100 caracteres). En MCP se llama query. |
role | slug | ninguno | Familia de rol, en español o inglés: ingenieria-de-software o software-engineering. |
region | MX, CO, AR, LATAM | ninguno | Mercado. LATAM es remoto en cualquier país de la región. |
city | texto | ninguno | Ciudad, por ejemplo Ciudad de México, Bogotá, Buenos Aires. |
remote | true | ninguno | Solo vacantes remotas. |
min_salary | entero | ninguno | Mínimo del rango publicado, en USD anuales. minSalary sigue funcionando como alias. |
level | intern, entry, mid, senior, lead, exec | ninguno | Nivel. |
tag | slug | ninguno | Habilidad, por ejemplo typescript o payments. |
cert | slug | ninguno | Certificación. |
sort | recent, pay | recent | Orden: más recientes o mejor pagadas (en USD). |
currency | MXN, COP, ARS, USD | ninguno | Obsoleto desde 2026-10-06. Si llega con min_salary, el mínimo se lee en esa moneda y se convierte a USD. |
limit | entero | 20 (REST), 10 (MCP) | Hasta 50 resultados por llamada. |
offset | entero | 0 | Desplazamiento, hasta 10 000. |
GET /api/v1/jobs/{id} y get_job
| Parámetro | Valores | Por defecto | Descripción |
|---|---|---|---|
id | id o slug | ninguno | Lo devuelve search_jobs en los campos id y slug. |
GET /api/v1/companies y get_companies
| Parámetro | Valores | Por defecto | Descripción |
|---|---|---|---|
verified | true | ninguno | Solo empresas verificadas. En MCP se llama verifiedOnly. |
limit | entero | 30 | Hasta 100. |
GET /api/v1/salaries y get_salaries
| Parámetro | Valores | Por defecto | Descripción |
|---|---|---|---|
role | slug | ninguno | Familia de rol, en español o inglés. Sin role no hay cifra resumen: no se mezclan áreas. |
city | texto | ninguno | Ciudad. El mínimo sigue siendo 10 datos del área. |
region | MX, CO, AR | ninguno | Mercado. También se acepta country. |
level | intern, entry, mid, senior, lead, exec | ninguno | Nivel. El mínimo sigue siendo 10 datos del área. |
compare | entero | ninguno | Una compensación anual para ubicarla en la distribución; devuelve su percentil. |
currency | MXN, COP, ARS, USD | USD | Moneda de compare. No filtra: la estadística siempre es en USD. |
GET /api/v1/feed y get_feed
| Parámetro | Valores | Por defecto | Descripción |
|---|---|---|---|
limit | entero | 30 (REST), 20 (MCP) | Hasta 100. |
types | lista separada por comas | todos | Solo estos tipos: JOB_NEW, JOB_BOOSTED, SALARY_APPROVED, ARTICLE_PUBLISHED, COMPANY_VERIFIED, COMPANY_JOINED, EVENT_PUBLISHED. En REST, un nombre desconocido se ignora; en MCP se rechaza. |
POST /api/v1/apply y submit_application
| Parámetro | Valores | Por defecto | Descripción |
|---|---|---|---|
job | id o slug | ninguno | Obligatorio. |
name | texto | ninguno | Obligatorio, de 2 a 100 caracteres. |
email | correo | el de la cuenta | Solo con la clave maestra. Una clave personal siempre postula con el correo de su cuenta. |
resume_url | URL https | ninguno | Enlace al CV. Se puede omitir si la cuenta tiene un CV principal. |
linkedin_url | URL https | ninguno | Perfil de LinkedIn. |
note | texto | ninguno | Mensaje para la empresa, hasta 2000 caracteres. |
confirm | true | ninguno | Solo en MCP. Sin confirm: true la herramienta responde 409 confirmation_required y no envía nada. REST no lo usa. |
GET /api/v1/solo-pro y solo_pro_pipeline
| Parámetro | Valores | Por defecto | Descripción |
|---|---|---|---|
limit | entero | 25 | Hasta 100. |
due | 1 | ninguno | Solo las que ya tienen seguimiento pendiente. En MCP se llama dueOnly. |
POST /api/v1/solo-pro y solo_pro_update
| Parámetro | Valores | Por defecto | Descripción |
|---|---|---|---|
application_id | id | ninguno | El id que devuelve solo_pro_pipeline. Si falta, se usa job o url. |
job | id o slug | ninguno | La vacante, cuando no tienes el id de la postulación. No se combina con url. |
url | URL https | ninguno | Una vacante de otro sitio. Si es una vacante de la bolsa, se usa tu postulación a ella. La bolsa lee el título una sola vez, salvo en LinkedIn, Indeed, Glassdoor, OCC, Computrabajo y Bumeran: ahí envía title. |
title | texto | ninguno | Con url: el título de la vacante, hasta 200 caracteres. Obligatorio si la bolsa no puede leerlo. |
company | texto | ninguno | Con url: la empresa, hasta 120 caracteres. |
description | texto | ninguno | Con url: la descripción de la vacante que pegas, hasta 20000 caracteres. Alimenta solo_pro_gap. |
followup | objeto | ninguno | Un seguimiento que hiciste: { at: fecha ISO 8601, channel: email, linkedin, phone u other, note: texto }. Se guardan los últimos 50; los más antiguos se descartan. |
discard | true | ninguno | Descarta la postulación. La etapa no cambia. |
status | SUBMITTED, REVIEWING, INTERVIEW, OFFER, REJECTED, HIRED, WITHDRAWN | ninguno | Solo en postulaciones marcadas en el sitio de la empresa; las enviadas por la bolsa las actualiza la empresa. WITHDRAWN: retiraste tu postulación (no desde HIRED; una retirada solo se reabre desde tu panel). |
followup_at | fecha ISO 8601 | ninguno | Con zona horaria, por ejemplo 2026-10-20T15:00:00-06:00. |
note | texto | ninguno | Hasta 2000 caracteres. |
GET /api/v1/solo-pro/gap y solo_pro_gap
| Parámetro | Valores | Por defecto | Descripción |
|---|---|---|---|
job | id o slug | ninguno | Una vacante de la bolsa. Indica job o url, no los dos. |
url | URL https | ninguno | Una vacante de otro sitio, registrada antes con solo_pro_update y su descripción. |
ad_hoc_skills | lista | ninguno | Habilidades que tienes y no están en tu perfil. En REST, separadas por comas. Si tu perfil no tiene habilidades, envía al menos una. |
GET /api/v1/kit y kit_del_dia
| Parámetro | Valores | Por defecto | Descripción |
|---|---|---|---|
region | MX, CO, AR, LATAM | ninguno | Mercado. |
role | slug | ninguno | Familia de rol, en español o inglés. |
GET /api/v1/recommendations y recommended_jobs
| Parámetro | Valores | Por defecto | Descripción |
|---|---|---|---|
limit | entero | 10 | De 1 a 20. |
Límites
- Postulaciones por cuenta y semana (ventana de 7 días, solo en el sitio; con CANDIDATE_LIMITS_LIVE=1)
- Gratis 1 · Lite 5 · Fintech Insiders 5 · Pro sin límite
- Llamadas MCP por clave (cada llamada de un lote cuenta; hasta 10 por lote)
- 120 por minuto
- Llamadas REST por clave
- 120 por minuto
- Postulaciones por clave (REST y MCP)
- 30 por hora
- Claves generadas por dirección
- 3 por hora
Al superar un límite la respuesta es 429 rate_limited con retry_after_seconds y el encabezado Retry-After.
Errores
Todo error trae error (un código estable), hint (qué pasó y qué hacer, en español) y docs (el enlace a su fila aquí). Los errores de validación agregan details por campo; internal_error agrega request_id. En MCP, los errores de transporte (401, 405, 429, 500) llegan como errores JSON-RPC con el mismo texto y data.docs.
| Código | HTTP | Cuándo | Qué hacer |
|---|---|---|---|
missing_or_invalid_api_key | 401 | No llegó una clave, o la clave no existe. | Envía tu clave en el encabezado x-api-key. Genera una en tu panel, en API y MCP. |
signin_required | 401 | POST /api/v1/keys sin sesión iniciada. | Ingresa al sitio y genera la clave desde tu panel. |
email_verification_required | 403 | La cuenta no confirmó su correo y el envío de correo está activo. | Confirma tu correo para crear una clave API. Reenvía el correo desde tu panel. |
rate_limited | 429 | Se superó el límite del recurso: 120 llamadas MCP por minuto y 120 llamadas REST por minuto por clave (cada llamada de un lote MCP cuenta), 30 postulaciones por hora, 3 claves por hora. | Espera los segundos de retry_after_seconds (también en el encabezado Retry-After) e intenta de nuevo. |
invalid_json | 400 | El cuerpo de un POST no es JSON. | Envía un objeto JSON válido con Content-Type: application/json. |
batch_too_large | 400 | Un lote JSON-RPC en /api/mcp trae más de 10 llamadas. | Un lote admite hasta 10 llamadas y cada una cuenta para el límite por minuto. Divide el lote o envía una llamada a la vez. |
validation_failed | 422 | Un campo de la postulación falta o no es válido. | Revisa details: trae cada campo con su error. job es obligatorio; name tiene entre 2 y 100 caracteres. |
job_not_found | 404 | El id o slug no corresponde a una vacante pública. | No hay una vacante pública con ese id o slug. Usa el campo slug o id que devuelve search_jobs. |
offsite_apply | 409 | La vacante se postula en el sitio de la empresa (apply_mode offsite). | No se envió ninguna postulación: abre apply_url para postular en el sitio de la empresa. |
confirmation_required | 409 | submit_application en MCP sin confirm: true. | Pide confirmación a la persona y vuelve a llamar con confirm: true. |
duplicate_application | 409 | Ese correo ya se postuló a esa vacante. | No se envió nada nuevo. Revisa el estado en solo_pro_pipeline. |
email_mismatch | 403 | Una clave personal envió un correo (email) distinto al de la cuenta. | Con una clave de usuario solo puedes postular con el correo de tu cuenta. Omite email o usa el de tu cuenta. |
evidence_required | 422 | La postulación no trae CV ni LinkedIn y la cuenta no tiene CV principal. | Incluye resume_url o linkedin_url, o sube un CV principal a tu perfil. |
user_key_required | 400 | El seguimiento de postulaciones (solo_pro_pipeline o solo_pro_update) con la clave maestra. | El seguimiento de postulaciones pertenece a una persona: usa una clave personal, no la clave maestra. |
invalid_body | 400 | Un campo de solo_pro_update no es válido, o llegaron job y url a la vez; o el cuerpo de /api/ai/v1/messages no sigue el subconjunto de texto de Messages. | Revisa details: status debe ser una etapa válida y followup_at una fecha ISO 8601 con zona horaria. Indica job o url, no los dos. |
missing_target | 400 | solo_pro_update o solo_pro_gap sin application_id, job ni url. | Indica application_id, job o url. |
application_not_found | 404 | La postulación no existe o no es de esta cuenta. | No hay una postulación tuya con ese id o vacante. Revisa solo_pro_pipeline. |
profile_skills_required | 422 | solo_pro_gap de una cuenta sin habilidades en el perfil y sin ad_hoc_skills. | Agrega tus habilidades en tu perfil, o envía ad_hoc_skills con las que tienes. Sin ellas no se puede comparar. |
description_unavailable | 422 | solo_pro_gap de una vacante sin descripción o sin habilidades que la bolsa reconozca, o de un enlace que no registraste antes con solo_pro_update. | Registra el enlace con solo_pro_update (url y title) y pega la descripción de la vacante en description. Puedes enviar la descripción en una llamada posterior con el mismo url. Luego vuelve a llamar. |
summary_too_large | 413 | El resumen del asistente que pegaste en una postulación pesa más de 16 KB. | Pega un resumen de hasta 16 KB. Conserva lo esencial: la nota global, los puntos fuertes y lo que falta. El resumen anterior se queda guardado. |
invalid_url | 400 | El campo url no es un enlace http o https válido. | Envía el enlace completo de la vacante, con https://. |
external_title_required | 422 | Una vacante externa llegó sin title y la bolsa no pudo leerlo, o el sitio no permite que lo lea (LinkedIn, Indeed, Glassdoor, OCC, Computrabajo, Bumeran). | Envía title, y description si quieres el análisis de habilidades. La bolsa no vuelve a pedir esa página. |
application_limit | 402 | La cuenta ya usó las postulaciones de su semana: 1 en Gratis, 5 en Lite y en Fintech Insiders, sin límite en Pro (ventana de 7 días; solo cuentan las postulaciones en el sitio). Solo se emite con CANDIDATE_LIMITS_LIVE=1. | Lee resets_at (fecha ISO 8601 con zona) y espera a esa fecha, o abre upgrade_url para subir de nivel. No se guardó nada ni se descontó del límite por hora. |
plus_required | 402 | Una generación de Fintech Insiders de una cuenta sin suscripción activa. | Hazte miembro de Fintech Insiders desde tu pipeline o desde /precios. Las herramientas gratis de Premium no la necesitan. |
quota_exhausted | 403 | Ya no se emite desde 2026-10-22: el presupuesto de IA reemplazó el tope de 30 generaciones (ver budget_exhausted). | Trata budget_exhausted. Este código queda documentado para los clientes que ya lo manejan. |
budget_exhausted | 402 | La cuenta ya usó el presupuesto de IA de su periodo de Fintech Insiders, o la generación pedida no cabe en lo que queda. | Espera al siguiente periodo de tu suscripción. Una generación que falla no se descuenta. |
ai_suspended | 403 | Un administrador pausó la IA de esta cuenta. | Escríbenos desde /contacto si crees que es un error. |
input_too_large | 413 | El CV y la vacante juntos pasan de lo que cabe en una llamada al modelo (100,000 tokens a lo más). | Envía una versión más corta del CV, o de la descripción si la vacante es tuya. |
scope_required | 403 | El token del agente no tiene el permiso que pide esta ruta (por ejemplo model en /api/ai/v1/messages). | Pide a la bolsa un token con ese permiso. El token del agente nunca puede postular ni enviar mensajes por ti. |
model_error | 502 | El modelo no respondió a tiempo o rechazó la solicitud, aun después de un reintento. | Intenta de nuevo en unos minutos. Esa llamada no se descontó de tu presupuesto. |
ceiling_reached | 503 | La IA de la bolsa llegó a su tope diario o mensual (UTC), o esa función no está activa: está en pausa hasta el día o el mes siguiente. | Lee hint: dice si vuelve mañana o el día 1 del mes siguiente. Nada se descontó de tu presupuesto. |
cv_text_required | 400 | Una generación sin el texto de tu CV: no lo pegaste y no hay un documento tuyo del que leerlo. | Pega el texto de tu CV en cv_text, o indica un documento tuyo con document_id. |
cv_too_large | 413 | El texto del CV pasa de 60,000 caracteres. | Envía un CV más corto. Son unas 20 páginas de texto. |
generation_failed | 502 | El modelo no respondió a tiempo o rechazó la solicitud, aun después de un reintento. | Intenta de nuevo en unos minutos. Esa generación no se descontó de tu cuota. |
duplicate_target | 400 | solo_pro_gap con job y url a la vez. | Indica job o url, no los dos. |
status_controlled_by_employer | 403 | Se intentó cambiar el estado de una postulación enviada por la bolsa. | Esta postulación se envió por la bolsa: la empresa actualiza su estado. Puedes cambiar followup_at y note. |
invalid_transition | 409 | solo_pro_update pidió WITHDRAWN sobre una postulación contratada (HIRED), o cambiar el estado de una postulación ya retirada (WITHDRAWN). | Una postulación contratada no se puede retirar y una retirada no cambia de estado por la API: reábrela desde tu panel. Revisa details.from y details.to. |
method_not_allowed | 405 | GET o DELETE en /api/mcp. | El endpoint MCP es sin estado: envía JSON-RPC con POST. |
internal_error | 500 | Falló algo de nuestro lado. | Intenta de nuevo. Si persiste, escríbenos con el request_id de la respuesta. |
unreachable | 503 | Solo el servidor local (stdio): no pudo conectar con FINTECHCAREERS_URL (conexión rechazada, DNS, certificado o 15 segundos sin respuesta). No hay estado HTTP. | Revisa FINTECHCAREERS_URL y que el sitio responda, e intenta de nuevo. cause dice qué falló: TimeoutError es un sitio lento, un código como ECONNREFUSED o CERT_HAS_EXPIRED viene de la red. |
invalid_response | 502 | Solo el servidor local (stdio): el sitio respondió algo que no es JSON, como la página de error de un proxy. status trae el estado HTTP que llegó. | Revisa que FINTECHCAREERS_URL apunte al sitio de Fintech Careers, e intenta de nuevo en unos minutos. |
Cambios
La v1 nunca quita ni renombra un campo de respuesta; los campos nuevos se suman. Un parámetro obsoleto sigue funcionando al menos seis meses desde su fecha aquí y solo se retira tras 90 días sin uso. Cada cambio en las herramientas MCP sube la versión del servidor.
Descubrimiento: la API REST está descrita en OpenAPI 3.1 en /api/v1/openapi.json, generado de los mismos validadores que usan los endpoints; el servidor MCP en /.well-known/mcp.json; y /.well-known/security.txt dice dónde reportar una vulnerabilidad. robots.txt permite /api/mcp. Ningún endpoint ni esquema cambia; la versión sigue en 2.8.0.
Qué hacer: Ninguna. Un generador de clientes puede leer el documento OpenAPI; un cliente MCP puede leer mcp.json en vez de esta guía.
submit_application y POST /api/v1/apply responden application_limit (402, submitted: false) cuando la cuenta ya usó las postulaciones de su semana: 1 en Gratis, 5 en Lite y en Fintech Insiders, sin límite en Pro. El cuerpo trae tier, limit, used, window_days, resets_at (ISO 8601 con zona) y upgrade_url. Solo se emite con CANDIDATE_LIMITS_LIVE=1; hasta entonces nada cambia. Versión 2.8.0.
Qué hacer: Qué hacer: lee resets_at y vuelve a intentarlo desde esa fecha, o abre upgrade_url para subir de nivel. No reintentes antes: la llamada rechazada no guarda nada ni descuenta del límite por hora.
El servidor remoto (/api/mcp) y el paquete stdio (mcp-server) pasan de @modelcontextprotocol/sdk 1.30.0 a 1.32.1, que corrige el aviso GHSA-6qxp-vccf-f47h (el cliente OAuth del SDK podía enviar credenciales a un servidor de autorización elegido por el servidor MCP). Ninguna herramienta ni esquema cambia; la versión sigue en 2.7.0.
Qué hacer: Ninguna. Este conector no usa el cliente OAuth del SDK. Si tu propio cliente MCP usa el SDK, actualízalo a 1.31 o superior.
Nuevo: solo_pro_gap (GET /api/v1/solo-pro/gap), vacantes externas por url en solo_pro_update y el historial followups, next_followup_proposed, urgency y evaluation en solo_pro_pipeline. Versión 2.7.0.
Qué hacer: Ninguna, es aditivo.
solo_pro_update y POST /api/v1/solo-pro aceptan WITHDRAWN en status: retiraste tu postulación. No se puede retirar una postulación contratada (HIRED) ni cambiar el estado de una ya retirada: ambos casos responden invalid_transition (409) con details.from y details.to. Es un valor nuevo, ningún campo cambia. Versión 2.6.0.
Qué hacer: Ninguna si no lo usas. Para retirar una postulación marcada en el sitio de la empresa, envía status WITHDRAWN; para reabrirla, hazlo desde tu panel.
El feed (GET /api/v1/feed y get_feed) incluye eventos (type EVENT_PUBLISHED) y noticias con resumen propio (type ARTICLE_PUBLISHED, url en /noticia/...). Nuevo parámetro opcional types para quedarte solo con vacantes, por ejemplo types=JOB_NEW,JOB_BOOSTED. La respuesta añade el campo types. Versión 2.5.0.
Qué hacer: Si tu cliente trata cada elemento del feed como vacante, filtra por type o pide types=JOB_NEW,JOB_BOOSTED. Nada se quita ni se renombra.
get_salaries y GET /api/v1/salaries siguen la regla de salarios: promedio, mediana y percentiles solo para un área (role) con 10 datos o más. Sin role, o con menos, la respuesta trae insufficient_data, n, min_n y el campo nuevo reason (mixed_areas o below_min_n). Versión 2.4.0.
Qué hacer: Envía role. Con insufficient_data, muestra la n y no des una cifra.
Las vacantes tienen direcciones en español (título, empresa y lugar). slug y url traen la nueva; un slug anterior sigue funcionando en get_job, submit_application y solo_pro_update, y su página responde 308.
Qué hacer: Ninguna. Si guardas slugs, puedes reemplazarlos por el que devuelve la respuesta.
Límites: cada llamada de un lote JSON-RPC en /api/mcp cuenta para las 120 por minuto, un lote admite hasta 10 llamadas (más responde 400 batch_too_large) y un cuerpo hasta 64 KB. Las llamadas REST con clave también tienen límite: 120 por minuto. Versión 2.3.1.
Qué hacer: Si tu cliente envía lotes, divídelos en lotes de 10 o menos. Ante 429 rate_limited, espera retry_after_seconds.
Nuevo: GET /api/v1/recommendations y la herramienta MCP recommended_jobs, con el motivo de cada vacante. Versión 2.3.0.
Qué hacer: Ninguna. Es un endpoint nuevo; los demás no cambian.
Nueva herramienta y prompt kit_del_dia (GET /api/v1/kit): una vacante al día con apply_url etiquetado. Las marcas EMPLOYER_TEXT ya no pueden cerrarse desde el texto del empleador. Versión 2.2.0.
Qué hacer: Ninguna. Es aditivo.
salary trae period (YEAR o MONTH): la cifra del empleador se publica en su propio periodo. salary_usd sigue siendo anual.
Qué hacer: Si muestras salary.min o salary.max, acompáñalos de salary.period. Para comparar, usa salary_usd.
submit_application en MCP exige confirm: true y responde 409 confirmation_required sin él. POST /api/v1/apply no cambia. Versión 2.1.0.
Qué hacer: Si tu cliente MCP postula, pide confirmación a la persona y vuelve a llamar con confirm: true.
min_salary es el nombre documentado del filtro de pago. minSalary sigue aceptado como alias.
Qué hacer: Ninguna. El alias no se retirará antes de 2027-04-06 y solo cuando lleve 90 días sin uso.
Todo error trae error, hint (en español) y docs (el enlace a esta tabla). internal_error trae request_id.
Qué hacer: Ninguna. Los campos anteriores se conservan; muestra hint a la persona y guarda request_id para reportar.
currency en la búsqueda queda obsoleto: el pago se filtra en USD.
Qué hacer: Envía min_salary en USD. Si sigues enviando currency, el mínimo se convierte. No se retirará antes de 2027-04-06.
get_job en MCP envuelve description_markdown y company.about entre marcas EMPLOYER_TEXT: son texto del empleador, no instrucciones.
Qué hacer: Ninguna en REST. En MCP, lee el contenido como datos.
¿Algo no funciona? Escríbenos a info@fintech.us.com con el request_id del error.