El Coodesh Job Feed contiene la información necesaria para publicar vacantes de un portal de empleo o sistema de reclutamiento (ATS) externo en el tablero de vacantes de Coodesh. El feed es un feed XML de vacantes de LinkedIn válido más un elemento: coodesh:category.
Requisitos para participar
Para publicar vacantes a través del Coodesh Job Feed, la plataforma necesita:
Tener un área de trabajo en Coodesh a nombre de la plataforma. La fuente se registra en ella, y una persona de tu equipo con usuario en Coodesh queda como responsable de las vacantes publicadas
Publicar vacantes de tecnología. El tablero de Coodesh está dirigido a profesionales de tecnología. Las categorías que la fuente puede publicar se acuerdan en el registro, y una vacante fuera de ellas se rechaza
Enviar solo vacantes publicadas por los propios empleadores en tu plataforma, sin agregar vacantes de otros sitios
Tener la autorización de los empleadores para divulgar en Coodesh las vacantes y el nombre, los datos y el logo de cada empresa. Al enviar el feed, la plataforma declara que tiene esa autorización
Servir el feed en una URL
httpsestable y pública, sin autenticación, respondiendo en hasta 60 segundosMantener el archivo como retrato completo de las vacantes abiertas, según Consideraciones sobre el feed
Nota. Coodesh puede suspender la fuente que no cumpla estos requisitos. La suspensión no cierra vacantes: solo dejan de actualizarse.
Creación del feed XML
El feed es un documento XML servido en una URL estable y pública, con un elemento <source> en la raíz y un elemento <job> por cada vacante abierta.
El feed contiene tres tipos de elemento:
Obligatorios — sin ellos la vacante se rechaza
Recomendados — elementos del estándar de LinkedIn que enriquecen la vacante
Extensiones Coodesh — elementos en el espacio de nombres
coodesh, opcionales exceptocoodesh:category
Declara el espacio de nombres en el elemento raíz:
<source xmlns:coodesh="https://help.coodesh.com/articles/17067084">
Encabezado del feed
Elementos hijos de <source>, fuera de cada <job>. Ninguno es obligatorio, pero expectedJobCount es muy recomendable.
Campo | Descripción | Tipo |
| Versión del estándar que sigue el archivo. Ausente significa | Texto |
publisher | Nombre de tu sistema | Texto |
publisherUrl | Dirección pública de tu sistema | URL |
lastBuildDate | Momento en que se generó el archivo | Texto |
expectedJobCount | Cantidad de vacantes que el archivo debería traer | Entero |
Por qué la versión va en el archivo. El espacio de nombres es identidad, no versión. Si cambiara con cada versión, todo feed ya en producción declararía uno que no reconocemos. Un archivo que declare una versión mayor que la soportada se lee igual, con aviso en el informe.
Por qué importa expectedJobCount. Coodesh lo compara con la cantidad de elementos <job> que logró leer. Una divergencia indica descarga truncada y aborta la lectura sin escribir nada, en lugar de cerrar las vacantes que faltaron en el archivo.
Esquema de campos de la vacante
La tabla enumera los campos aceptados dentro de cada <job>.
Campo | Descripción | Obligatorio | Tipo |
partnerJobId | Identificador de la vacante en el sistema del socio. Debe ser estable durante toda su vida | Sí | Texto, máx. 40 caracteres |
company | Razón social o nombre comercial de la empresa empleadora. No uses el nombre de tu sistema | Sí | Texto |
companyId | Identificador de la empresa en LinkedIn. Clave con la que Coodesh agrupa las vacantes de un mismo empleador | Sí | Numérico |
title | Título de la vacante, sin códigos internos, direcciones, fechas ni salario | Sí | Texto |
description | Descripción de las responsabilidades. Acepta un conjunto limitado de etiquetas HTML | Sí | Texto, mín. 100 caracteres |
applyUrl | URL donde se completa la postulación. Usa la URL final, sin acortador ni redirección | Sí | URL que empieza por https |
city | Ciudad de la vacante | Sí, si location está ausente | Texto |
country | País de la vacante | Sí, si location está ausente | Código ISO de 2 letras |
location | Ubicación en un solo texto, en formato Ciudad, Región | Sí, si city y country están ausentes | Texto |
state | Estado o región | No | Texto |
postalCode | Código postal | No | Texto |
workplaceTypes | Naturaleza del lugar de trabajo. Valores: On-site, Hybrid, Remote | No | Texto |
jobtype | Jornada. Valores: FULL_TIME, PART_TIME, CONTRACT, INTERNSHIP. VOLUNTEER rechaza la vacante | No | Texto |
experienceLevel | Seniority. Valores: ENTRY_LEVEL, ASSOCIATE, MID_SENIOR_LEVEL, DIRECTOR, EXECUTIVE, INTERNSHIP, NOT_APPLICABLE | No | Texto |
salaries | Rango salarial. Solo se publica cuando period es MONTHLY | No | Lista de elementos salary |
skills | Hasta diez competencias relevantes | No | Lista de elementos skill |
listDate | Fecha de publicación original | No | MM/DD/AAAA |
expirationDate | Fecha prevista de cierre | No | MM/DD/AAAA |
posterEmail | Correo de la persona responsable de la vacante. Se usa solo para verificar el origen y nunca se muestra | No | Texto |
jobPostingAvailability | Visibilidad. Valores: PUBLIC, INTERNAL. Por defecto PUBLIC | No | Texto |
Nota. Si partnerJobId cambia, Coodesh interpreta que la vacante anterior se cerró y se abrió otra. Genera el identificador una vez y mantenlo.
Nota. Un rango salarial cuyo period no sea MONTHLY se ignora, y la vacante se publica sin el rango. El tablero muestra un valor mensual y no almacena el período.
Nota. Una vacante con jobPostingAvailability igual a INTERNAL no se publica, y eso no genera error en el feed. Las vacantes internas pueden permanecer en el mismo archivo.
En qué se convierte cada valor en la vacante publicada
Las tres enumeraciones siguientes vienen del estándar de LinkedIn y se traducen a lo que la persona candidata ve en el tablero.
Modelo de trabajo, a partir de workplaceTypes:
Valor enviado | Se muestra como |
On-site | Presencial, con la ciudad |
Hybrid | Híbrida, con la ciudad |
Remote | Remota |
Sin workplaceTypes, la vacante se trata como presencial cuando envías ciudad, y esa ciudad pasa a ser la ubicación mostrada. Si la vacante es remota, declara Remote explícitamente.
Jornada, a partir de jobtype:
Valor enviado | Efecto |
FULL_TIME | Jornada completa |
PART_TIME | Media jornada |
CONTRACT | Jornada completa, y sugiere contratación por servicios |
INTERNSHIP | Jornada completa, y sugiere prácticas |
VOLUNTEER | No tiene equivalente en el tablero de Coodesh y rechaza la vacante |
Seniority, a partir de experienceLevel:
Valor enviado | Se muestra como |
EXECUTIVE | Experto |
DIRECTOR | Especialista |
MID_SENIOR_LEVEL | Semi sénior / Sénior |
ASSOCIATE | Semi sénior |
ENTRY_LEVEL | Junior |
INTERNSHIP | Trainee |
NOT_APPLICABLE | La vacante se publica sin nivel |
¿Necesitas más precisión? coodesh:level tiene siete niveles y prevalece sobre experienceLevel.
Cómo completar el rango salarial
El bloque salaries es anidado. Envía los dos extremos, la moneda en cada uno, el período y el tipo.
<salaries>
<salary>
<lowEnd>
<amount><![CDATA[12000]]></amount>
<currencyCode><![CDATA[BRL]]></currencyCode>
</lowEnd>
<highEnd>
<amount><![CDATA[16000]]></amount>
<currencyCode><![CDATA[BRL]]></currencyCode>
</highEnd>
<period><![CDATA[MONTHLY]]></period>
<type><![CDATA[BASE_SALARY]]></type>
</salary>
</salaries>
Elemento | Regla |
lowEnd/amount | Valor mínimo, solo dígitos |
highEnd/amount | Valor máximo, solo dígitos |
currencyCode | Código de moneda, como BRL, EUR o USD |
period | Solo se publica |
type |
|
Un rango incompleto se ignora. Si falta el mínimo, el máximo o la moneda, la vacante se publica sin rango salarial. Nunca se publica a medias.
Salario confidencial. Para usar el rango en el match sin mostrarlo a la persona candidata, envía <coodesh:salaryScope>private</coodesh:salaryScope>.
Extensiones Coodesh
Elementos en el espacio de nombres coodesh, para lo que el estándar de LinkedIn no modela. Cuando están presentes, prevalecen sobre el equivalente de LinkedIn.
Campo | Descripción | Obligatorio | Tipo |
coodesh:category | Categoría de la vacante, por el código del vocabulario publicado por Coodesh | Sí | Texto |
coodesh:contractType | Tipo de contratación. Valores: clt, pj, intern, freelance, flex, consulting, project, lecture, mvp, co_founder | No | Texto |
coodesh:lookingFor | Área de actuación. Valores: Vocabulario propio, distinto del de categorías y con guion bajo: backend, frontend, fullstack, devops, datascience, qa, design_ui, design_ux, mobile_android, cyber_security y otros | No | Texto |
coodesh:level | Nivel en la escala de Coodesh. Valores, de mayor a menor seniority: expert, specialist, intermediary2, intermediary, beginner2, beginner, trainee | No | Texto |
coodesh:salaryScope | Visibilidad del rango salarial. Valores: public, private | No | Texto |
coodesh:companyLogo | URL del logo de la empresa empleadora, accesible por https y sin autenticación | No | URL |
coodesh:companyUrl | Sitio institucional de la empresa empleadora | No | URL |
coodesh:languages | Idiomas exigidos | No | Lista de coodesh:language |
coodesh:requirements | Requisitos obligatorios | No | Lista de coodesh:requirement |
coodesh:differentials | Diferenciales | No | Lista de coodesh:differential |
coodesh:benefits | Beneficios | No | Lista de coodesh:benefit |
Nota. Un código de categoría fuera del vocabulario publicado rechaza la vacante. Coodesh no aproxima a la categoría más parecida.
Nota. coodesh:companyLogo y coodesh:companyUrl describen a la empresa empleadora, no a la vacante. Repite el mismo valor en todas las vacantes del mismo companyId. La imagen se descarga una vez y pasa a ser alojada por Coodesh.
Formato de la descripción
Envía la descripción con el mismo formato HTML que usas en tu sitio, dentro de CDATA. Las etiquetas fuera de la lista siguiente se eliminan, y su contenido se muestra como texto simple.
Etiqueta | Uso |
<p> | Párrafo |
<br> | Salto de línea |
<ul>, <li> | Lista |
<b>, <strong> | Negrita |
<i>, <em> | Cursiva |
<u> | Subrayado |
Nota. Escribe CDATA de verdad. Enviar el marcado escapado hace que el contenido llegue como texto literal dentro de la descripción.
Por qué se puede rechazar una vacante
El rechazo aplica a la vacante, nunca al archivo: las demás se siguen publicando. El informe de la lectura trae el conteo por motivo.
Motivo | Qué corregir |
Falta un campo obligatorio | Completar el campo. El informe indica cuál |
| Acortar el identificador |
Descripción con menos de 100 caracteres | Escribir una descripción real |
| Enviar la dirección final en https |
Sin ubicación | Enviar |
Sin | Declarar la categoría |
Categoría fuera del vocabulario | Usar un código de la tabla de categorías |
Categoría fuera de lo acordado para tu fuente | Hablar con Coodesh para ampliar las categorías |
| Nada. Una vacante interna no se publica por definición |
| Nada. Ese tipo no existe en el tablero de Coodesh |
| Quitar el duplicado. Se mantiene la primera aparición |
Una empresa con ese nombre ya existe en Coodesh | Nada de tu parte. La vacante queda retenida para revisión manual |
Qué tolera la lectura y qué completa sola
Situación | Qué hace Coodesh |
Nombre de elemento en otra caja, como | Lo reconoce igual. La comparación ignora mayúsculas y minúsculas |
País escrito completo, como | Lo convierte al código ISO y registra un aviso en la lectura |
País que no reconoce | La vacante se publica sin país |
| Usa la fecha de la primera lectura como fecha de publicación. Las lecturas siguientes no la reescriben |
| La trata como presencial, para no afirmar trabajo remoto que no declaraste |
Una competencia que no existe en la taxonomía de Coodesh | Descarta solo esa competencia. La vacante se publica con normalidad |
Más de diez competencias | Toma las diez primeras |
Un | Crea el perfil de la empresa en Coodesh a partir de lo que trae el feed |
El nombre de la empresa es una etiqueta, no una clave. Coodesh agrupa las vacantes de una empresa empleadora por companyId. Cambiar la grafía de company no crea una empresa nueva; cambiar el companyId sí.
Consideraciones sobre el feed
Coodesh lee el archivo en un intervalo regular y lo trata como una foto completa de las vacantes activas de la fuente. Una vacante presente en el archivo y ausente en la base se crea; presente en ambos se actualiza; ausente del archivo se cierra.
Enumera todas las vacantes abiertas en cada lectura. Nunca envíes una lista parcial ni solo lo que cambió desde la última lectura
Incluye
expectedJobCount. Coodesh lo compara con la cantidad de elementos<job>leídos, para detectar un archivo truncadoMantén el feed libre de vacantes cerradas y de vacantes duplicadas
No reutilices el
partnerJobIdde una vacante cerrada en una vacante nuevaNo cierres y reabras la misma vacante repetidamente
No uses una URL de redirección en
applyUrlEnvía solo vacantes publicadas directamente por la empresa empleadora en tu plataforma. No incluyas vacantes agregadas de otros sitios
Nota. Como la ausencia de la vacante en el archivo es lo que la cierra, un archivo parcial cerraría vacantes que siguen abiertas. Si el feed responde con error, llega mal formado o sin vacantes, la lectura se aborta sin escribir nada. Si se reduce bruscamente, la fuente se suspende.
Qué pasa cuando cambias una vacante
En cada lectura, la vacante que sigue en el archivo se actualiza a partir de lo que este trae. Título, descripción, ubicación, salario, competencias y todos los demás campos pasan a reflejar el archivo.
Dos excepciones, para no reescribir el historial:
Campo | Comportamiento en la actualización |
Fecha de publicación | Mantiene la fecha de la primera lectura, salvo que envíes |
La dirección de la vacante en Coodesh | No cambia, aunque cambie el título |
Para cerrar una vacante, basta con quitarla del archivo. Enviar expirationDate en el pasado también la cierra, aunque siga listada.
Cómo solicitar el registro
Para registrar un feed, escribe a help@coodesh.com con el asunto Coodesh Job Feed y esta información:
Nombre de la plataforma y, si ya existe, su área de trabajo en Coodesh
URL del feed
Categorías que la fuente va a publicar, con los códigos del Vocabulario de categorías
Nombre y correo del contacto técnico, que recibe el informe de la lectura de muestra
Correo de la persona que queda como responsable de las vacantes publicadas
Con esta información, Coodesh registra la fuente y ejecuta la lectura de muestra descrita en Aprobación de la fuente.
Aprobación de la fuente
Toda fuente pasa por una aprobación única antes de publicar.
Registro. El socio envía la solicitud descrita en Cómo solicitar el registro. Coodesh registra la fuente como pendiente
Lectura de muestra. La primera lectura no publica. Ejecuta el proceso completo y devuelve un informe con lo que se publicaría, lo que se rechazaría y el motivo de cada rechazo
Aprobación. La fuente se aprueba a partir del informe. Si hay un problema, el socio corrige el feed y se genera una nueva muestra
Publicación automática. Las lecturas siguientes publican sin intervención
Tras la aprobación, dos verificaciones permanecen activas:
Filtro de categoría. La vacante cuya categoría queda fuera de lo acordado se rechaza, con el motivo registrado en el informe
Protección contra lectura incompleta. Un error HTTP, XML mal formado, una divergencia de
expectedJobCounto un archivo sin vacantes abortan la lectura sin escribir nada y alertan al equipo de Coodesh. Una caída brusca en la cantidad de vacantes suspende la fuente y también alerta al equipo
Nota. Una fuente suspendida no cierra ninguna vacante. Solo deja de recibir actualizaciones hasta que se resuelva el problema.
Cuándo avisar a Coodesh
Escribe a help@coodesh.com, con el asunto Coodesh Job Feed, antes de:
Cambiar la URL del feed. La fuente sigue leyendo la URL registrada hasta que se actualice
Publicar categorías además de las acordadas. Las vacantes de una categoría nueva se rechazan hasta que se actualice la lista de la fuente
Pausar o terminar la integración. Un archivo sin vacantes no cierra las vacantes publicadas: la lectura se aborta como protección. Para retirar las vacantes de Coodesh, solicita el cierre de la fuente
Si la fuente se suspende, corrige el feed y solicita la reactivación en la misma dirección. Una fuente suspendida solo vuelve a leerse cuando Coodesh la reactiva.
Cómo aparece la vacante en Coodesh
Una vacante que envía solo la capa obligatoria se publica así: categoría, ubicación y el botón que lleva a la persona candidata a tu dirección de postulación.
Cada campo de la capa recomendada añade un atributo más a la misma vacante. Aquí sumó jornada, seniority, tipo de contratación, rango salarial y modelo de trabajo.
Ejemplo de feed
La primera vacante trae solo los campos obligatorios. La segunda añade los campos recomendados y algunas extensiones.
<?xml version="1.0" encoding="UTF-8"?>
<source xmlns:coodesh="https://help.coodesh.com/articles/17067084">
<publisher><![CDATA[Nome do parceiro]]></publisher>
<publisherUrl><![CDATA[https://parceiro.com]]></publisherUrl>
<lastBuildDate><![CDATA[2026-09-22T15:10:36.186Z]]></lastBuildDate>
<expectedJobCount><![CDATA[2]]></expectedJobCount>
<job>
<partnerJobId><![CDATA[a7f3c2e1-9b44-4d10-8e55-1c0d7f2a9b31]]></partnerJobId>
<company><![CDATA[BLIV Gestão e Negócios]]></company>
<companyId><![CDATA[101543998]]></companyId>
<title><![CDATA[Pessoa Desenvolvedora Back-end Pleno]]></title>
<description><![CDATA[<p>Descripción de la vacante con un mínimo de 100 caracteres.</p>]]></description>
<applyUrl><![CDATA[https://bliv.parceiro.com/vagas/BLI000165]]></applyUrl>
<city><![CDATA[João Pessoa]]></city>
<state><![CDATA[PB]]></state>
<country><![CDATA[BR]]></country>
<coodesh:category><![CDATA[backend]]></coodesh:category>
</job>
<job>
<partnerJobId><![CDATA[b81d4f0e-2c37-4a59-9f61-3e7a8c5d0b44]]></partnerJobId>
<company><![CDATA[TSEA Energia]]></company>
<companyId><![CDATA[2535577]]></companyId>
<title><![CDATA[Pessoa Engenheira de Dados Sênior]]></title>
<description><![CDATA[<p>Descripción de la vacante con un mínimo de 100 caracteres.</p>]]></description>
<applyUrl><![CDATA[https://tsea.parceiro.com/vagas/TSE000431]]></applyUrl>
<city><![CDATA[São Paulo]]></city>
<state><![CDATA[SP]]></state>
<country><![CDATA[BR]]></country>
<postalCode><![CDATA[04538-133]]></postalCode>
<workplaceTypes><![CDATA[Hybrid]]></workplaceTypes>
<jobtype><![CDATA[FULL_TIME]]></jobtype>
<experienceLevel><![CDATA[MID_SENIOR_LEVEL]]></experienceLevel>
<salaries>
<salary>
<lowEnd><amount><![CDATA[12000]]></amount><currencyCode><![CDATA[BRL]]></currencyCode></lowEnd>
<highEnd><amount><![CDATA[16000]]></amount><currencyCode><![CDATA[BRL]]></currencyCode></highEnd>
<period><![CDATA[MONTHLY]]></period>
<type><![CDATA[BASE_SALARY]]></type>
</salary>
</salaries>
<expirationDate><![CDATA[11/15/2026]]></expirationDate>
<posterEmail><![CDATA[recrutamento@tsea.com.br]]></posterEmail>
<jobPostingAvailability><![CDATA[PUBLIC]]></jobPostingAvailability>
<coodesh:category><![CDATA[data-science]]></coodesh:category>
<coodesh:contractType><![CDATA[clt]]></coodesh:contractType>
<coodesh:companyLogo><![CDATA[https://cdn.parceiro.com/tsea/logo.png]]></coodesh:companyLogo>
</job>
</source>
Vocabulario de categorías
Valores aceptados en coodesh:category. Envía el código, nunca el nombre. Un código fuera de esta lista rechaza la vacante.
Código | Categoría |
| Back-End |
| Banco de Dados |
| Customer Success |
| Cyber Segurança |
| Data Science |
| Design/UI |
| Design/UX |
| DevOps |
| Financeiro |
| Front-End |
| Full-Stack |
| Gestão |
| Inteligência Artificial |
| Marketing |
| Mobile |
| Recursos Humanos |
| Suporte Técnico |
| Testes/Q.A |
| Vendas |
Referencias
Registro de fuentes, dudas y archivo de ejemplo comentado: help@coodesh.com


