Passar para o conteúdo principal

Coodesh Job Feed: guia de desenvolvimento do feed XML de vagas

Especificação do feed XML pelo qual um portal ou ATS publica vagas no quadro da Coodesh: esquema de campos, extensões, considerações de feed e processo de aprovação da fonte.

O Coodesh Job Feed contém as informações necessárias para publicar vagas de um portal ou sistema de recrutamento (ATS) externo no quadro de vagas da Coodesh. O feed é um feed XML de vagas do LinkedIn válido acrescido de um elemento: coodesh:category.

Requisitos para participar

Para publicar vagas pelo Coodesh Job Feed, a plataforma precisa:

  • Ter uma área de trabalho na Coodesh em nome da plataforma. A fonte é cadastrada nela, e uma pessoa da sua equipe com usuário na Coodesh fica como responsável pelas vagas publicadas

  • Publicar vagas de tecnologia. O quadro da Coodesh é voltado a profissionais de tecnologia. As categorias que a fonte pode publicar são combinadas no cadastro, e vaga fora delas é recusada

  • Enviar apenas vagas publicadas pelos próprios empregadores na sua plataforma, sem agregar vagas de outros sites

  • Ter autorização dos empregadores para divulgar na Coodesh as vagas, o nome, os dados e a logo de cada empresa. Ao enviar o feed, a plataforma declara que tem essa autorização

  • Servir o feed em uma URL https estável e pública, sem autenticação, respondendo em até 60 segundos

  • Manter o arquivo como retrato completo das vagas abertas, conforme Considerações sobre o feed

Observação. A Coodesh pode suspender a fonte que descumprir estes requisitos. A suspensão não encerra vagas: elas apenas deixam de ser atualizadas.

Criando o feed XML

O feed é um documento XML servido em uma URL estável e pública, com um elemento <source> na raiz e um elemento <job> por vaga aberta.

O feed contém três tipos de elemento:

  • Obrigatórios — sem eles a vaga é recusada

  • Recomendados — elementos do padrão do LinkedIn que enriquecem a vaga

  • Extensões Coodesh — elementos no espaço de nomes coodesh, opcionais exceto coodesh:category

Declare o espaço de nomes no elemento raiz:

<source xmlns:coodesh="https://help.coodesh.com/articles/17067084">

Cabeçalho do feed

Elementos filhos de <source>, fora de cada <job>. Nenhum é obrigatório, mas expectedJobCount é fortemente recomendado.

Campo

Descrição

Tipo

coodesh:version

Versão do padrão que o arquivo segue. Ausente significa 1.0

Texto

publisher

Nome do seu sistema

Texto

publisherUrl

Endereço público do seu sistema

URL

lastBuildDate

Momento em que o arquivo foi gerado

Texto

expectedJobCount

Quantidade de vagas que o arquivo deveria conter

Inteiro

Por que a versão fica no arquivo. Espaço de nomes é identidade, não versão. Se ele mudasse a cada versão, todo feed já em produção passaria a declarar um que não reconhecemos. Arquivo que declare versão maior do que a suportada é lido assim mesmo, com aviso no relatório.

Por que expectedJobCount importa. A Coodesh compara esse número com a quantidade de <job> que conseguiu ler. Divergência indica download truncado e aborta a leitura sem gravar nada, em vez de encerrar as vagas que faltaram no arquivo.

Esquema de campos da vaga

A tabela lista os campos aceitos em cada <job>.

Campo

Descrição

Obrigatório

Tipo

partnerJobId

Identificador da vaga no sistema do parceiro. Precisa ser estável durante toda a vida da vaga

Sim

Texto, máx. 40 caracteres

company

Razão social ou nome comercial do empregador. Não use o nome do seu sistema

Sim

Texto

companyId

Identificador da empresa no LinkedIn. Chave pela qual a Coodesh agrupa as vagas de um mesmo empregador

Sim

Numérico

title

Título da vaga, sem códigos internos, endereços, datas ou salário

Sim

Texto

description

Descrição das responsabilidades. Aceita um conjunto limitado de tags HTML

Sim

Texto, mín. 100 caracteres

applyUrl

URL onde a candidatura é concluída. Use a URL final, sem encurtador nem redirecionamento

Sim

URL iniciada por https

city

Cidade da vaga

Sim, se location ausente

Texto

country

País da vaga

Sim, se location ausente

Código ISO de 2 letras

location

Localização em texto único, no formato Cidade, UF

Sim, se city e country ausentes

Texto

state

Unidade federativa ou região

Não

Texto

postalCode

Código postal

Não

Texto

workplaceTypes

Natureza do local de trabalho. Valores: On-site, Hybrid, Remote

Não

Texto

jobtype

Jornada. Valores: FULL_TIME, PART_TIME, CONTRACT, INTERNSHIP. VOLUNTEER recusa a vaga

Não

Texto

experienceLevel

Senioridade. Valores: ENTRY_LEVEL, ASSOCIATE, MID_SENIOR_LEVEL, DIRECTOR, EXECUTIVE, INTERNSHIP, NOT_APPLICABLE

Não

Texto

salaries

Faixa salarial. Só é publicada quando period é MONTHLY

Não

Lista de elementos salary

skills

Até dez competências relevantes

Não

Lista de elementos skill

listDate

Data da publicação original

Não

MM/DD/AAAA

expirationDate

Data prevista de encerramento

Não

MM/DD/AAAA

posterEmail

E-mail da pessoa responsável pela vaga. Usado apenas para verificação da origem e nunca exibido

Não

Texto

jobPostingAvailability

Visibilidade. Valores: PUBLIC, INTERNAL. O padrão é PUBLIC

Não

Texto

Observação. Se partnerJobId mudar, a Coodesh interpreta que a vaga anterior foi encerrada e outra foi aberta. Gere o identificador uma vez e mantenha.

Observação. Faixa salarial com period diferente de MONTHLY é ignorada, e a vaga é publicada sem a faixa. O quadro de vagas exibe valor mensal e não armazena o período.

Observação. Vaga com jobPostingAvailability igual a INTERNAL não é publicada, e isso não gera erro no feed. Vagas internas podem permanecer no mesmo arquivo.

O que cada valor vira na vaga publicada

As três enumerações abaixo vêm do padrão do LinkedIn e são traduzidas para o que o candidato vê no quadro de vagas.

Modelo de trabalho, a partir de workplaceTypes:

Valor enviado

Exibido como

On-site

Presencial, com a cidade

Hybrid

Híbrida, com a cidade

Remote

Remota

Sem workplaceTypes, a vaga é tratada como presencial quando você envia cidade, e a localidade exibida passa a ser essa cidade. Se a vaga é remota, declare Remote explicitamente.

Jornada, a partir de jobtype:

Valor enviado

Efeito

FULL_TIME

Jornada integral

PART_TIME

Meio período

CONTRACT

Jornada integral, e sugere contratação PJ

INTERNSHIP

Jornada integral, e sugere estágio

VOLUNTEER

Não tem equivalente no quadro da Coodesh e recusa a vaga

Senioridade, a partir de experienceLevel:

Valor enviado

Exibido como

EXECUTIVE

Expert

DIRECTOR

Especialista

MID_SENIOR_LEVEL

Pleno / Sênior

ASSOCIATE

Pleno

ENTRY_LEVEL

Júnior

INTERNSHIP

Trainee

NOT_APPLICABLE

A vaga entra sem nível

Precisa de mais precisão? coodesh:level tem sete faixas e prevalece sobre experienceLevel.

Como preencher a faixa salarial

O bloco salaries é aninhado. Envie os dois extremos, a moeda em cada um, o período e o 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

Regra

lowEnd/amount

Valor do piso, apenas dígitos

highEnd/amount

Valor do teto, apenas dígitos

currencyCode

Código da moeda, como BRL, EUR ou USD

period

MONTHLY é publicado. Qualquer outro período faz a faixa ser ignorada

type

BASE_SALARY

Faixa incompleta é ignorada. Se faltar o piso, o teto ou a moeda, a vaga entra sem faixa salarial. Ela nunca é publicada pela metade.

Salário confidencial. Para usar a faixa no match sem exibi-la ao candidato, envie <coodesh:salaryScope>private</coodesh:salaryScope>.

Extensões Coodesh

Elementos no espaço de nomes coodesh, para o que o padrão do LinkedIn não modela. Quando presentes, prevalecem sobre o equivalente do LinkedIn.

Campo

Descrição

Obrigatório

Tipo

coodesh:category

Categoria da vaga, pelo código do vocabulário publicado pela Coodesh

Sim

Texto

coodesh:contractType

Tipo de contratação. Valores: clt, pj, intern, freelance, flex, consulting, project, lecture, mvp, co_founder

Não

Texto

coodesh:lookingFor

Área de atuação. Valores: Vocabulário próprio, diferente do de categorias e com sublinhado: backend, frontend, fullstack, devops, datascience, qa, design_ui, design_ux, mobile_android, cyber_security e demais

Não

Texto

coodesh:level

Nível na escala da Coodesh. Valores, do mais sênior ao mais júnior: expert, specialist, intermediary2, intermediary, beginner2, beginner, trainee

Não

Texto

coodesh:salaryScope

Exibição da faixa salarial. Valores: public, private

Não

Texto

coodesh:companyLogo

URL da logo do empregador, acessível por https e sem autenticação

Não

URL

coodesh:companyUrl

Site institucional do empregador

Não

URL

coodesh:languages

Idiomas exigidos

Não

Lista de coodesh:language

coodesh:requirements

Requisitos obrigatórios

Não

Lista de coodesh:requirement

coodesh:differentials

Diferenciais

Não

Lista de coodesh:differential

coodesh:benefits

Benefícios

Não

Lista de coodesh:benefit

Observação. Um código de categoria fora do vocabulário publicado recusa a vaga. A Coodesh não aproxima para a categoria mais parecida.

Observação. coodesh:companyLogo e coodesh:companyUrl descrevem o empregador, não a vaga. Repita o mesmo valor em todas as vagas do mesmo companyId. A imagem é baixada uma vez e passa a ser hospedada pela Coodesh.

Formatação da descrição

Envie a descrição com a mesma formatação HTML usada no seu site, dentro de CDATA. Tags fora da lista abaixo são removidas, e o conteúdo delas é exibido como texto simples.

Tag

Uso

<p>

Parágrafo

<br>

Quebra de linha

<ul>, <li>

Lista

<b>, <strong>

Negrito

<i>, <em>

Itálico

<u>

Sublinhado

Observação. Escreva CDATA de verdade. Enviar a marcação escapada faz o conteúdo chegar como texto literal dentro da descrição.

Por que uma vaga pode ser recusada

A recusa vale para a vaga, nunca para o arquivo: as demais continuam sendo publicadas. O relatório da leitura traz a contagem por motivo.

Motivo

O que corrigir

Falta um campo obrigatório

Preencher o campo. O relatório nomeia qual

partnerJobId acima de 40 caracteres

Encurtar o identificador

Descrição com menos de 100 caracteres

Escrever uma descrição real

applyUrl que não começa com https

Enviar o endereço final em https

Sem localização

Enviar city e country, ou location

Sem coodesh:category

Declarar a categoria

Categoria fora do vocabulário

Usar um código da tabela de categorias

Categoria fora do combinado para a sua fonte

Falar com a Coodesh sobre ampliar as categorias

jobPostingAvailability igual a INTERNAL

Nada. Vaga interna não é publicada por definição

jobtype igual a VOLUNTEER

Nada. Esse tipo não existe no quadro da Coodesh

partnerJobId repetido no mesmo arquivo

Remover a duplicata. A primeira ocorrência é mantida

Empresa com nome já existente na Coodesh

Nada da sua parte. A vaga fica retida para revisão manual

O que a leitura tolera e o que preenche sozinha

Situação

O que a Coodesh faz

Nome de elemento em caixa diferente, como publisherurl

Reconhece do mesmo jeito. A comparação ignora maiúsculas e minúsculas

País por extenso, como BRAZIL em vez de BR

Converte para o código ISO e registra um aviso na leitura

País que não reconhece

A vaga entra sem país

listDate ausente

Usa a data da primeira leitura como data de publicação. Releituras não reescrevem essa data

workplaceTypes ausente com cidade preenchida

Trata como presencial, para não afirmar trabalho remoto que você não declarou

Competência que não existe na taxonomia da Coodesh

Descarta apenas aquela competência. A vaga entra normalmente

Mais de dez competências

Considera as dez primeiras

companyId novo

Cria o perfil da empresa na Coodesh a partir do que o feed traz

O nome da empresa é rótulo, não chave. A Coodesh agrupa as vagas de um empregador pelo companyId. Mudar a grafia do company não cria empresa nova; mudar o companyId cria.

Considerações sobre o feed

A Coodesh lê o arquivo em intervalo regular e o trata como retrato completo das vagas ativas da fonte. Vaga presente no arquivo e ausente na base é criada; presente nas duas é atualizada; ausente do arquivo é encerrada.

  • Liste todas as vagas abertas em toda leitura. Nunca envie uma lista parcial nem apenas o que mudou desde a última leitura

  • Inclua expectedJobCount. A Coodesh o compara com o número de <job> lidos para detectar arquivo truncado

  • Mantenha o feed livre de vagas encerradas e de vagas duplicadas

  • Não reaproveite partnerJobId de uma vaga encerrada em uma vaga nova

  • Não abra e feche a mesma vaga repetidamente

  • Não use URL de redirecionamento em applyUrl

  • Envie apenas vagas publicadas diretamente pelo empregador na sua plataforma. Não inclua vagas agregadas de outros sites

Observação. Como a ausência da vaga no arquivo é o que a encerra, um arquivo parcial encerraria vagas que continuam abertas. Se o feed responder erro, vier malformado ou sem vagas, a leitura é abortada sem escrever nada. Se encolher bruscamente, a fonte é suspensa.

O que acontece quando você altera uma vaga

A cada leitura, a vaga que continua no arquivo é atualizada a partir do que ele traz. Título, descrição, localização, salário, competências e todos os demais campos passam a refletir o arquivo.

Duas exceções, para não reescrever o histórico:

Campo

Comportamento na atualização

Data de publicação

Mantém a data da primeira leitura, a menos que você envie listDate

Endereço da vaga na Coodesh

Não muda, mesmo que o título mude

Para encerrar uma vaga, basta removê-la do arquivo. Enviar expirationDate no passado também a encerra, mesmo que ela continue listada.

Como solicitar o cadastro

Para cadastrar um feed, escreva para help@coodesh.com com o assunto Coodesh Job Feed e estas informações:

  • Nome da plataforma e, se já existir, a área de trabalho dela na Coodesh

  • URL do feed

  • Categorias que a fonte vai publicar, pelos códigos do Vocabulário de categorias

  • Nome e e-mail do contato técnico, que recebe o relatório da leitura de amostra

  • E-mail da pessoa que fica como responsável pelas vagas publicadas

Com essas informações, a Coodesh cadastra a fonte e executa a leitura de amostra descrita em Aprovação da fonte.

Aprovação da fonte

Toda fonte passa por aprovação única antes de publicar.

  1. Cadastro. O parceiro envia a solicitação descrita em Como solicitar o cadastro. A Coodesh registra a fonte como pendente

  2. Leitura de amostra. A primeira leitura não publica. Executa o processo completo e devolve um relatório com o que seria publicado, o que seria recusado e o motivo de cada recusa

  3. Aprovação. A fonte é aprovada a partir do relatório. Havendo problema, o parceiro corrige o feed e uma nova amostra é gerada

  4. Publicação automática. As leituras seguintes publicam sem intervenção

Após a aprovação, duas verificações permanecem ativas:

  • Filtro de categoria. Vaga cuja categoria está fora do que foi acordado é recusada, com o motivo registrado no relatório

  • Proteção contra leitura incompleta. Erro HTTP, XML malformado, divergência de expectedJobCount ou arquivo sem vagas abortam a leitura sem escrever nada e alertam a equipe da Coodesh. Uma queda brusca no número de vagas suspende a fonte e também alerta a equipe

Observação. Fonte suspensa não encerra vaga alguma. Ela apenas deixa de receber atualizações até que o problema seja resolvido.

Quando avisar a Coodesh

Escreva para help@coodesh.com, com o assunto Coodesh Job Feed, antes de:

  • Mudar a URL do feed. A fonte continua lendo a URL cadastrada até ser atualizada

  • Publicar categorias além das combinadas. Vagas de categoria nova são recusadas até a lista da fonte ser atualizada

  • Pausar ou encerrar a integração. Um arquivo sem vagas não encerra as vagas publicadas: a leitura é abortada por proteção. Para retirar as vagas da Coodesh, peça o encerramento da fonte

Se a fonte for suspensa, corrija o feed e peça a reativação pelo mesmo endereço. A fonte suspensa só volta a ser lida quando a Coodesh a reativa.

Como a vaga aparece na Coodesh

Uma vaga que envia apenas a camada obrigatória é publicada assim: categoria, localidade e o botão que leva o candidato ao seu endereço de candidatura.

Vaga que preencheu a camada obrigatoria: categoria e localidade

Cada campo da camada recomendada acrescenta uma informação à mesma vaga. Aqui entraram jornada, senioridade, tipo de contratação, faixa salarial e modelo de trabalho.

Mesma vaga com os campos recomendados preenchidos: seis atributos em vez de dois

Exemplo de feed

A primeira vaga traz apenas os campos obrigatórios. A segunda acrescenta os campos recomendados e algumas extensões.

<?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>Descrição da vaga com no mínimo 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>Descrição da vaga com no mínimo 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>

Vocabulário de categorias

Valores aceitos em coodesh:category. Envie o código, nunca o nome. Código fora desta lista recusa a vaga.

Código

Categoria

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

Referências

Respondeu à sua pergunta?