Ir al contenido principal

Coodesh Job Feed: guía de desarrollo del feed XML de vacantes

Especificación del feed XML con el que un portal o ATS publica vacantes en el tablero de Coodesh: esquema de campos, extensiones, consideraciones del feed y aprobación de la fuente.

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 https estable y pública, sin autenticación, respondiendo en hasta 60 segundos

  • Mantener 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 excepto coodesh: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

coodesh:version

Versión del estándar que sigue el archivo. Ausente significa 1.0

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

Texto, máx. 40 caracteres

company

Razón social o nombre comercial de la empresa empleadora. No uses el nombre de tu sistema

Texto

companyId

Identificador de la empresa en LinkedIn. Clave con la que Coodesh agrupa las vacantes de un mismo empleador

Numérico

title

Título de la vacante, sin códigos internos, direcciones, fechas ni salario

Texto

description

Descripción de las responsabilidades. Acepta un conjunto limitado de etiquetas HTML

Texto, mín. 100 caracteres

applyUrl

URL donde se completa la postulación. Usa la URL final, sin acortador ni redirección

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 MONTHLY. Cualquier otro período hace que el rango se ignore

type

BASE_SALARY

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

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

partnerJobId con más de 40 caracteres

Acortar el identificador

Descripción con menos de 100 caracteres

Escribir una descripción real

applyUrl que no empieza con https

Enviar la dirección final en https

Sin ubicación

Enviar city y country, o location

Sin coodesh:category

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

jobPostingAvailability igual a INTERNAL

Nada. Una vacante interna no se publica por definición

jobtype igual a VOLUNTEER

Nada. Ese tipo no existe en el tablero de Coodesh

partnerJobId repetido en el mismo archivo

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 publisherurl

Lo reconoce igual. La comparación ignora mayúsculas y minúsculas

País escrito completo, como BRAZIL en lugar de BR

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

listDate ausente

Usa la fecha de la primera lectura como fecha de publicación. Las lecturas siguientes no la reescriben

workplaceTypes ausente con ciudad completada

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 companyId nuevo

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 truncado

  • Mantén el feed libre de vacantes cerradas y de vacantes duplicadas

  • No reutilices el partnerJobId de una vacante cerrada en una vacante nueva

  • No cierres y reabras la misma vacante repetidamente

  • No uses una URL de redirección en applyUrl

  • Enví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 listDate

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.

  1. Registro. El socio envía la solicitud descrita en Cómo solicitar el registro. Coodesh registra la fuente como pendiente

  2. 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

  3. 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

  4. 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 expectedJobCount o 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.

Vacante con solo la capa obligatoria: categoría y ubicació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.

La misma vacante con los campos recomendados: seis atributos en lugar de dos

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

backend

Back-End

db

Banco de Dados

customer-success

Customer Success

cyber-security

Cyber Segurança

datascience

Data Science

design-ui

Design/UI

design-ux

Design/UX

devops

DevOps

financial

Financeiro

frontend

Front-End

fullstack

Full-Stack

management

Gestão

ia

Inteligência Artificial

marketing

Marketing

mobile

Mobile

human-resources

Recursos Humanos

tech-support

Suporte Técnico

qa

Testes/Q.A

sales

Vendas

Referencias

¿Ha quedado contestada tu pregunta?