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
httpsestável e pública, sem autenticação, respondendo em até 60 segundosManter 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 excetocoodesh: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 |
| Versão do padrão que o arquivo segue. Ausente significa | 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 | Só |
type |
|
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 |
| Encurtar o identificador |
Descrição com menos de 100 caracteres | Escrever uma descrição real |
| Enviar o endereço final em https |
Sem localização | Enviar |
Sem | 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 |
| Nada. Vaga interna não é publicada por definição |
| Nada. Esse tipo não existe no quadro da Coodesh |
| 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 | Reconhece do mesmo jeito. A comparação ignora maiúsculas e minúsculas |
País por extenso, como | Converte para o código ISO e registra um aviso na leitura |
País que não reconhece | A vaga entra sem país |
| Usa a data da primeira leitura como data de publicação. Releituras não reescrevem essa data |
| 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 |
| 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 truncadoMantenha o feed livre de vagas encerradas e de vagas duplicadas
Não reaproveite
partnerJobIdde uma vaga encerrada em uma vaga novaNão abra e feche a mesma vaga repetidamente
Não use URL de redirecionamento em
applyUrlEnvie 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 |
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.
Cadastro. O parceiro envia a solicitação descrita em Como solicitar o cadastro. A Coodesh registra a fonte como pendente
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
Aprovação. A fonte é aprovada a partir do relatório. Havendo problema, o parceiro corrige o feed e uma nova amostra é gerada
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
expectedJobCountou 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.
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.
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 |
| 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 |
Referências
Cadastro de fonte, dúvidas e arquivo de exemplo comentado: help@coodesh.com


