Guia de Integração - Corporate Gateway API
Bienvenue! Este guia foi feito para o time de engenharia da sua empresa integrar com a API
do Corporate Gateway da Swile. Ele reúne exemplos práticos com curl pros
principais fluxos, na ordem em que normalmente são usados durante uma integração - login,
cadastro de filiais e colaboradores, criação de pedidos e solicitação de cartão físico.
Ambientes
Use o ambiente de homologação pra desenvolver e testar sua integração, e só troque para produção depois que tudo estiver validado.
| Ambiente | URL base |
|---|---|
| Produção | https://corporate-gateway.swile.com.br |
| Homologação | https://corporate-gateway-staging.swile.com.br |
Os exemplos abaixo usam o ambiente de homologação. Basta trocar a URL base para produção quando estiver tudo certo.
Formatos de campo
Estes seis campos aparecem em quase toda chamada da API e cada um aceita um conjunto fechado de formatos. Vale a mesma regra em todos os endpoints, então dá pra conferir aqui uma vez e seguir.
| Campo | Formatos aceitos | Exemplo |
|---|---|---|
CPFdocument, contactDocument |
11 dígitos, ou pontuado | 11111111111111.111.111-11 |
CNPJdocument, branchDocument, benefitPayerDocument,
campaignPayerDocument |
14 dígitos, ou pontuado | 1234567800019012.345.678/0001-90 |
TelefonephoneNumber, contactPhone |
11 dígitos (DDD + celular de 9), ou entre parênteses com traço, com ou sem espaço | 11987654321(11) 98765-4321(11)98765-4321 |
Emailemail, contactEmail, createdBy |
somente ASCII, com domínio e um TLD de duas letras ou mais | joao.silva@empresa.com.br |
CEPzipCode, postalCode |
8 dígitos, ou com traço | 0131100001311-000 |
UFstate |
duas letras maiúsculas | SP |
400 com o código 40016, e o campo
details diz qual campo falhou. Quatro casos que costumam pegar quem está migrando:
pontuação parcial não vale (12.345678/0001-90, 111111111-11), telefone
fixo de 8 dígitos não é aceito (só celular), sp minúsculo não passa como UF, e e-mail
com acento (joão@empresa.com.br) ou sem TLD (joao@empresa) é recusado.
Limites de uso
Cada credencial tem um limite de chamadas por minuto. O limite é por endpoint, porque endpoints diferentes custam coisas diferentes do lado da Swile: cada endpoint tem a sua própria cota, então estourar o limite de um não impede o uso dos outros. Existe também um teto que vale para a soma de todas as chamadas da credencial.
| Endpoint | Por minuto |
|---|---|
GET /api/v1/employee | 180 |
POST /api/v1/employee/add | 12 |
PATCH /api/v1/employee/{employeeId} | 60 |
PUT /api/v1/employee/update/status | 120 |
GET /api/v1/employee/{employeeId} | 300 |
GET /api/v1/employee/inactive | 120 |
GET /api/v1/workgroup | 180 |
POST /api/v1/workgroup | 120 |
GET /api/v1/corporate/branch | 300 |
POST /api/v1/corporate/branch/add | 60 |
POST /api/v1/logistics/shipment/employee | 60 |
GET /api/v1/logistics/parcel/track/{code} | 300 |
PUT /api/v1/logistics/shipment/{code}/cancel e /parcel/{code}/cancel | 300 |
POST /api/v1/order/summary | 60 |
POST /api/v1/order/create e /order/create/express | 60 |
POST /api/v1/order/create/import/express | 12 |
GET /api/v1/order/group | 180 |
GET /api/v1/order/group/{orderGroupCode} e /status/{orderGroupCode} | 300 |
GET /api/v1/order/upload/{fileName} | 120 |
GET /api/v1/wallet/credit/balance | 180 |
GET /api/v1/wallet/credit/statement | 60 |
GET /api/v1/auth/login | 60 |
| Todos os endpoints somados | 600 |
Cada endpoint tem também um limite de rajada, numa janela de 10 segundos, para evitar que o orçamento de um minuto inteiro seja gasto de uma vez. Toda resposta traz os números exatos nos headers, então dá pra se guiar por eles em vez de fixar os valores no código:
| Header | O que traz |
|---|---|
X-RateLimit-Limit | limite por minuto |
X-RateLimit-Burst | limite na janela de 10 segundos |
X-RateLimit-Remaining | quantas chamadas ainda cabem agora |
X-RateLimit-Reset | quando volta a ter saldo (unix time, em segundos) |
X-RateLimit-Scope | qual limite está mais apertado: endpoint ou account |
Ao estourar, a resposta é 429 com o código 42900 e o header
Retry-After, em segundos:
{
"error": { "code": 42900, "type": "RATE_LIMIT_EXCEEDED" },
"message": "Rate limit exceeded.",
"details": "You have exceeded your rate limit: 180 requests per minute, 30 per 10 seconds. You can try again in 6 seconds."
}
Retry-After antes
de tentar de novo, em vez de repetir a chamada na hora. Em sincronizações grandes, prefira
páginas maiores (pageSize aceita até 100) a muitas chamadas pequenas: buscar 60 mil
colaboradores de 10 em 10 gasta 6 mil chamadas, de 100 em 100 gasta 600. E o token de login vale
120 minutos, então não é preciso chamar /auth/login a cada requisição.
400 custa 3 chamadas a mais do seu limite, para desestimular retry em loop com
dado inválido. Um 404 não custa nada a mais, porque é a resposta esperada quando
você checa se um colaborador já existe.
X-RateLimit-Remaining da própria resposta para frear antes de tomar um
429.
Autenticação
Toda integração começa por aqui. Você vai usar o username e password
que a Swile forneceu pra sua empresa pra pedir um token de acesso (JWT) - e esse token é o que
você envia em todas as outras chamadas da API, provando que a requisição é sua. Não existe
cadastro self-service: as credenciais de acesso são fornecidas pela Swile. Se sua empresa ainda
não as recebeu, entre em contato com a
Central de Ajuda Swile para Empresas
pra solicitá-las.
sequenceDiagram
participant C as Sistema da sua empresa
participant G as Corporate Gateway
C->>G: GET /api/v1/auth/login (Basic Auth)
G->>C: 200 OK - token JWT, validade 120 min
Note over G: Todas as chamadas seguintes usam Authorization: Bearer token
C->>G: Qualquer endpoint /api/v1/**
G->>C: 200 OK ou erro de negocio
Requisição
As credenciais vão como HTTP Basic Auth:
curl -u "usuario:senha" \
https://corporate-gateway-staging.swile.com.br/api/v1/auth/login
Resposta
{
"token": "eyJhbGciOiJIUzI1NiJ9...",
"issuedAt": "2026-07-13T12:00:00.000+00:00",
"expiresAt": "2026-07-13T14:00:00.000+00:00"
}
| Campo | Para que serve |
|---|---|
token | JWT enviado em todas as demais chamadas, no header Authorization: Bearer <token> |
issuedAt / expiresAt | Emissão/expiração em UTC. Vale por 120 minutos. Sem endpoint de refresh - chame /auth/login de novo quando expirar. |
Criar Filial
Uma filial representa uma unidade ou CNPJ específico da sua empresa dentro do Corporate Gateway. Se sua empresa opera com mais de um CNPJ (matriz e filiais, por exemplo), cadastrar cada uma separadamente permite organizar work groups, pedidos e faturamento de forma independente por unidade - útil se cada filial tem orçamento ou responsável próprio. Se sua empresa tem só um CNPJ, esse passo pode não ser necessário; confirme com o time da Swile responsável pela sua implantação antes de pular pra próxima etapa.
curl -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Filial São Paulo",
"nameOnCard": "Empresa SP",
"document": "12345678000190",
"createdBy": "rh@empresa.com.br",
"address": {
"street": "Av. Paulista",
"number": "123",
"neighborhood": "Bela Vista",
"zipCode": "01311000",
"city": "São Paulo",
"state": "SP"
}
}' \
https://corporate-gateway-staging.swile.com.br/api/v1/corporate/branch/add
Resposta: 202 Accepted, sem corpo - a criação é assíncrona. Confirme que a filial foi criada com:
curl -H "Authorization: Bearer $TOKEN" \
"https://corporate-gateway-staging.swile.com.br/api/v1/corporate/branch?branchDocument=12345678000190"
state minúsculo ou um CEP com espaços derruba a criação da
filial com 400.
Criar Work Group
Um work group é como você organiza os colaboradores da sua empresa dentro do Corporate Gateway - normalmente por departamento, cargo, ou qualquer critério que faça sentido pro seu negócio. Todo colaborador precisa pertencer a um work group antes de poder receber benefícios, então esse é o próximo passo depois de autenticar (e, se for o seu caso, criar a filial). Você pode criar um work group direto sob a sua empresa principal, ou vinculado a uma filial específica.
curl -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Novo Grupo",
"description": "Grupo para colaboradores do time X",
"document": "12345678000190"
}' \
https://corporate-gateway-staging.swile.com.br/api/v1/workgroup
Resposta: 200 OK com o id do grupo - guarde-o, é o idWorkGroup que você vai usar ao adicionar colaboradores.
Adicionar e Editar Employees
Employees são os colaboradores da sua empresa que vão receber os benefícios Swile (carteira digital, cartão físico, etc). Antes de criar pedidos ou solicitar cartões, cada colaborador precisa estar cadastrado aqui, vinculado a um work group.
Adicionar
curl -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"employees": [
{
"idWorkGroup": 1,
"name": "João da Silva",
"email": "joao@empresa.com.br",
"phoneNumber": "(11) 99999-9999",
"document": "11111111111",
"birthDate": "1990-01-01",
"externalId": "abc123"
}
]
}' \
https://corporate-gateway-staging.swile.com.br/api/v1/employee/add
Resposta: 202 Accepted, sem corpo - o cadastro é assíncrono, veja como confirmar que deu certo logo abaixo.
document, phoneNumber e email seguem os
formatos de campo. Atenção ao telefone: precisa ser celular, número fixo
de 8 dígitos é recusado.
email,
phoneNumber, ou os dois. Enviar nenhum dos dois é um 400.
Confirmando a criação
O 202 Accepted confirma só que a Swile aceitou o pedido de cadastro para
processar - não que o colaborador já existe de fato. O processamento é assíncrono, então pode
levar alguns segundos até ele aparecer.
Depois de chamar /employee/add, faça polling em
GET /api/v1/employee filtrando pelo CPF em identifier, até o
colaborador aparecer na lista:
curl -H "Authorization: Bearer $TOKEN" \
"https://corporate-gateway-staging.swile.com.br/api/v1/employee?identifier=11111111111&page=0&pageSize=1"
Quando ele aparecer, guarde o idEmployee retornado - é ele que você vai usar em
praticamente todas as outras operações (editar, solicitar cartão, criar pedido etc), não o CPF.
Editar
Atualização parcial - envie só os campos que quer alterar:
curl -X PATCH \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "novo-email@empresa.com.br",
"phoneNumber": "(11) 98888-8888"
}' \
https://corporate-gateway-staging.swile.com.br/api/v1/employee/123
document está descontinuado: o
CPF de um colaborador já cadastrado não pode mais ser alterado, então enviar o campo devolve
422 com o código 42200 - o campo continua no schema só para não quebrar
quem já o envia. E se o colaborador já tiver o KYC aprovado, alterar name ou
birthDate devolve 400 com o kind
IDENTITY_DATA_NOT_UPDATABLE; antes esses dois campos eram ignorados em silêncio.
Erros de validação
Vale para Adicionar e Editar. Antes de gravar qualquer coisa a
Swile valida a lista inteira: se algum colaborador não passar, nada é gravado e a resposta é um
400 com o código 40028 e a lista errors, com um item para
cada problema encontrado.
{
"error": { "code": 40028, "type": "INVALID_EMPLOYEES" },
"message": "Invalid employees in the request",
"details": "1 invalid employee found",
"errors": [
{
"row": 2,
"kind": "MISSING_DATA",
"message": "The employee needs at least one contact method: send email or phoneNumber"
}
]
}
Os campos funcionam igual aos da remessa de cartões: row é a
posição do colaborador na lista employees que você enviou, começando em 1,
field é o campo que falhou e kind é o tipo da falha. Em
Editar não existe row, já que a chamada trata de um colaborador só.
| kind | O que aconteceu | Como corrigir |
|---|---|---|
MISSING_DATA | O colaborador não tem email nem phoneNumber. | Informe pelo menos um dos dois. |
INVALID_NAME | O nome não tem nome e sobrenome, tem números ou símbolos, ou é um nome genérico (Teste, Fulano...). | Envie o nome completo da pessoa. |
INVALID_DOCUMENT | O CPF não é válido. | Confira os dígitos do document. |
INVALID_PHONE | O telefone não é um celular válido. | DDD, o dígito 9 e mais 8 dígitos. |
INVALID_EMAIL | O e-mail não é válido. | Confira o endereço, sem acentos e com TLD. |
INVALID_BIRTH_DATE | O colaborador tem menos de 14 anos. | Confira o birthDate. |
DUPLICATED_DOCUMENT, DUPLICATED_PHONE, DUPLICATED_EMAIL, DUPLICATED_EXTERNAL_ID | O valor já pertence a outro colaborador da sua empresa, ou está repetido na própria lista. | Remova a repetição ou use outro valor. |
DUPLICATED_USER_EMAIL, DUPLICATED_USER_PHONE | O contato já está registrado para outra pessoa na Swile. | Use um contato da própria pessoa. |
WORKGROUP_NOT_FOUND, WORKGROUP_CONFLICT | O idWorkGroup não existe na sua empresa, ou pertence a outra. | Confira o work group (veja "Criar Work Group"). |
NOT_FOUND | Só em Editar: o colaborador não existe na sua empresa. | Confira o id na URL. |
IDENTITY_DATA_NOT_UPDATABLE, APP_ALREADY_ACTIVE | Só em Editar: nome e data de nascimento não podem mais ser alterados para esse colaborador. | Não dá para resolver pela API. Fale com a Central de Ajuda Swile para Empresas. |
REQUIRED_EMAIL | Só em Editar: a sua empresa exige e-mail em todo colaborador. | Informe o email. |
kind como uma lista
aberta: mostre o message para quem for corrigir os dados em vez de depender só dos
valores acima.
message vem em inglês, porque é o próprio Gateway que o escreve. Na remessa de
cartões ele vem em português, porque lá a mensagem é repassada do serviço de logística.
Recusas que não estão ligadas a um colaborador específico vêm como 400 com o código
40000 (ao adicionar) ou 40007 (ao editar) e a explicação em
details, sem a lista errors. Outros tipos de recusa são repassados com o
mesmo status HTTP que a Swile recebeu internamente, com o código 40029.
Alterar Status
Ativa ou desativa employees em lote:
curl -X PUT \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"status": "INACTIVE",
"employeeIds": [123, 456]
}' \
https://corporate-gateway-staging.swile.com.br/api/v1/employee/update/status
| Status | Significado |
|---|---|
ACTIVE | Employee pode usar o cartão/carteira normalmente |
INACTIVE | Employee desativado |
KEEP_ACTIVE | Reafirma um employee já ACTIVE sem disparar a notificação de ativação - usado tipicamente por jobs de sincronização em lote. Não pode ser usado em um employee que já está INACTIVE. |
Criação de Pedidos
Um pedido (order) é a operação que efetivamente credita valores nas carteiras dos colaboradores - é assim que o benefício chega até eles. Existem 3 formas de criar um pedido; todas terminam no mesmo lugar, mas com fluxos diferentes dependendo de como sua empresa quer operar:
| Fluxo | Quando usar |
|---|---|
| Summary + Create | Quando você quer conferir os valores calculados antes de confirmar o pedido (ex: mostrar uma tela de aprovação pro RH) |
| Express | Chamada única, sem etapa de conferência - envia os dados e já cria o pedido |
| Express via Planilha | Mesma lógica do Express, mas os dados vêm de um arquivo já enviado - útil pra volumes grandes de colaboradores |
| paymentMethod | Regra de credit_date / due_date |
|---|---|
PIX | creditDate pelo menos 1 dia útil no futuro. slipLink (boleto) sempre nulo na resposta. |
BANK_SLIP | creditDate pelo menos 2 dias úteis no futuro E dueDate pelo menos 1 dia antes do creditDate. Único método que retorna slipLink (boleto) na resposta. |
creditDate/dueDate sempre em UTC.
Códigos de carteira (wallet codes)
O campo card em cardValues identifica o tipo de carteira/benefício a
creditar. Não é uma lista fechada - sua empresa pode ter códigos adicionais provisionados
especificamente pra ela; confira o campo cardTypes de GET /api/v1/workgroup
pra ver os códigos disponíveis pra sua empresa/filial. Códigos conhecidos:
| Código | Descrição |
|---|---|
v3 | Combustível |
v5 | Refeição e Alimentação |
v10 | Home Office |
v13 | Multibenefícios |
v51 | Refeição |
v52 | Alimentação |
v104 | Presente Natal |
v131 | Multibenefícios Natal |
v300 | Saldo Livre |
v301 | Premiação (homologação apenas) |
v307 | Premiação (produção apenas - substitui o v301 de staging) |
v502 | Cesta Natal |
v701 | Saúde |
v702 | Educação |
v703 | Mobilidade |
Faturamento para uma filial (opcional)
Por padrão, o pedido é faturado/agrupado pra sua empresa principal. Se quiser que ele seja
faturado e agrupado por uma filial específica, informe o CNPJ dela em
benefitPayerDocument (pedidos de benefício) e/ou campaignPayerDocument
(pedidos de campanha) - use o que fizer sentido pro seu caso. Os dois campos existem em
/order/create, /order/create/express e
/order/create/import/express:
curl -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"data": [
{ "document": "11111111111", "cardValues": [{ "card": "v4", "value": 200.00 }] }
],
"paymentMethod": "PIX",
"creditDate": "2026-07-14T00:00:00",
"campaignPayerDocument": "12345678000195"
}' \
https://corporate-gateway-staging.swile.com.br/api/v1/order/create/express
Fluxo 1: Summary + Create
sequenceDiagram
participant C as Sistema da sua empresa
participant G as Corporate Gateway
C->>G: POST /api/v1/order/summary
G->>C: 200 OK - summaryId e valores calculados
Note over C: Você confere os valores antes de confirmar
C->>G: POST /api/v1/order/create (com o summaryId)
G->>C: 200 OK - status do pedido
curl -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"data": [
{ "document": "11111111111", "cardValues": [{ "card": "v4", "value": 200.00 }] }
]
}' \
https://corporate-gateway-staging.swile.com.br/api/v1/order/summary
Guarde o summaryId retornado e confirme:
curl -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"summaryId": "SUM123456",
"paymentMethod": "PIX",
"creditDate": "2026-07-14T00:00:00"
}' \
https://corporate-gateway-staging.swile.com.br/api/v1/order/create
Fluxo 2: Express
sequenceDiagram
participant C as Sistema da sua empresa
participant G as Corporate Gateway
C->>G: POST /api/v1/order/create/express (dados completos)
G->>C: 200 OK - status do pedido
curl -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"data": [
{ "document": "11111111111", "cardValues": [{ "card": "v4", "value": 200.00 }] }
],
"paymentMethod": "PIX",
"creditDate": "2026-07-14T00:00:00"
}' \
https://corporate-gateway-staging.swile.com.br/api/v1/order/create/express
Fluxo 3: Express via Planilha
sequenceDiagram
participant C as Sistema da sua empresa
participant G as Corporate Gateway
participant S3 as Storage (S3)
C->>G: GET /api/v1/order/upload/arquivo.csv
G->>C: 200 OK - URL pré-assinada e file key
C->>S3: PUT do arquivo na URL pré-assinada
C->>G: POST /api/v1/order/create/import/express (fileKey e mapping)
G->>C: 200 OK - status do pedido
curl -H "Authorization: Bearer $TOKEN" \
"https://corporate-gateway-staging.swile.com.br/api/v1/order/upload/pedido-julho.csv"
Depois de subir o arquivo na URL retornada, crie o pedido:
curl -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"fileKey": "orders/imports/abc123-pedido-julho.csv",
"mapping": { "document": 0, "v4": 1 },
"paymentMethod": "PIX",
"creditDate": "2026-07-14T00:00:00"
}' \
https://corporate-gateway-staging.swile.com.br/api/v1/order/create/import/express
Consultando o status (e confirmando o pagamento)
As três chamadas de criação respondem na hora, mas o status que elas devolvem é
só uma foto do instante da criação - o processamento continua depois disso de forma
assíncrona (cobrança do pagamento, crédito nas carteiras dos colaboradores etc). "O pedido foi
criado" não é a mesma coisa que "o pedido foi pago": pra saber isso é preciso consultar de
novo, mais tarde.
Guarde o orderGroupCode retornado na criação e use ele pra consultar:
curl -H "Authorization: Bearer $TOKEN" \
"https://corporate-gateway-staging.swile.com.br/api/v1/order/group?code=SWO123456789&page=0&size=10"
GET /api/v1/order/group/status/{orderGroupCode}, que devolve só o
status (sem o detalhe interno das orders) e tem uma cota maior - veja
a tabela em Limites de uso. Prefira ele quando o único que interessa é
"esse pedido já chegou nesse status", que é exatamente o caso de ficar consultando em loop.
Pra saber se o pedido foi pago, olhe o status retornado: o
pagamento já está confirmado assim que ele sai de WAITING_PAYMENT e chega em
PAID (ou em qualquer status posterior no fluxo, como ON_QUEUE,
PROCESSING ou APPROVED). Veja o significado de cada um:
| Status | O que significa |
|---|---|
DRAFT | Rascunho - ainda não foi enviado para processamento. |
CREATED | Criado, aguardando ser faturado. |
FINANCIALLY_INTEGRATED | Nota fiscal/fatura já registrada do lado da Swile. |
WAITING_PAYMENT | Faturado, aguardando o pagamento (boleto ou PIX) ser compensado. Ainda não foi pago. |
PAID | Pagamento confirmado. |
ON_QUEUE | Pago, na fila para começar a creditar os colaboradores. |
PROCESSING | Creditando os colaboradores agora. |
APPROVED | Final - todos os colaboradores foram creditados com sucesso. |
APPROVED_PARTIALLY | Final - a maior parte dos colaboradores foi creditada, mas algum ficou pendente (ex: KYC não aprovado). Veja quem faltou em GET /api/v1/order/group/{orderGroupCode}. |
CANCELED | Final - cancelado antes de creditar, pagamento não chegou a acontecer. |
PROCESSING_CANCEL | Cancelamento em andamento. |
PROCESSED_ERROR | Final - falhou ao tentar creditar. Fale com a Central de Ajuda Swile para Empresas. |
CREATION_ERROR | Final - falhou já na criação, o pedido não chegou a existir de fato. Pode tentar criar de novo. |
SENT_TO_ACCOUNTING | Enviado para o financeiro/ERP - só aparece para empresas nesse modelo de faturamento (Netsuite). |
BILLED_FROM_ACCOUNTING | Faturado pelo financeiro/ERP - mesmo caso acima. |
200 OK
da criação. Veja como espaçar essas chamadas em Limites de uso.
Solicitação de Cartão - Logística
Se sua empresa oferece cartão físico Swile pros colaboradores (além ou no lugar da carteira digital), é aqui que você solicita a emissão e o envio dele. O pedido de cartão físico e o endereço de entrega são feitos juntos, numa única chamada - não existe um "criar cartão" separado do "pedir entrega".
sequenceDiagram
participant C as Sistema da sua empresa
participant G as Corporate Gateway
participant T as Transportadora
C->>G: POST /api/v1/logistics/shipment/employee
G->>C: 200 OK - code da remessa e status inicial
G-->>T: Processamento interno do envio
C->>G: GET /api/v1/logistics/parcel/track/code
G->>C: status atualizado (PROCESSING, IN_TRANSIT, DELIVERED...)
curl -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"contactName": "Raquel Milena",
"contactPhone": "(11) 99999-9999",
"contactEmail": "raquel@empresa.com.br",
"contactDocument": "11111111111",
"delivered": false,
"employees": [
{
"name": "João da Silva",
"phoneNumber": "(11) 99999-9999",
"email": "joao@empresa.com.br",
"document": "11111111111",
"externalId": "abc123",
"address": {
"postalCode": "01121000",
"buildingNumber": "966",
"street": "Rua Prates",
"neighborhood": "Bom Retiro",
"city": "São Paulo",
"state": "SP"
}
}
]
}' \
https://corporate-gateway-staging.swile.com.br/api/v1/logistics/shipment/employee
Erros de validação
Antes de criar a remessa, a Swile valida cada colaborador da lista: confere o CPF, o endereço e se a pessoa
está cadastrada na sua empresa. Se algum colaborador não passar, nada é criado e a resposta é um
400 com o código 40026 e a lista errors, com um item para cada
problema encontrado.
{
"error": { "code": 40026, "type": "INVALID_SHIPMENT_EMPLOYEES" },
"message": "Invalid employees in the shipment request",
"details": "2 invalid employees found",
"errors": [
{
"row": 1,
"field": "postalCode",
"kind": "INVALID_POSTAL_CODE",
"message": "O CEP não corresponde ao Estado informado. CEP: 72600-411, Estado: SP"
},
{
"row": 3,
"field": "document",
"kind": "EMPLOYEE_NOT_FROM_CORPORATE",
"message": "O CPF 111.111.111-11 não foi encontrado entre os colaboradores da empresa informada"
}
]
}
| Campo | Para que serve |
|---|---|
row | Posição do colaborador na lista employees que você enviou, começando em 1. É por aqui que você identifica qual registro corrigir. |
field | Campo que falhou, por exemplo postalCode ou document. |
kind | Tipo da falha, veja a tabela abaixo. |
message | Explicação em português, já com os valores que causaram o erro. |
allRows | Aparece quando o mesmo erro envolve mais de um colaborador (é o caso de CPF duplicado). O row traz só a primeira ocorrência, o allRows traz todas. |
| kind | O que aconteceu | Como corrigir |
|---|---|---|
INVALID_POSTAL_CODE | O CEP informado não pertence ao estado (UF) informado. | Confira o CEP e o campo state do endereço desse colaborador. |
DUPLICATE_DOCUMENT | O mesmo CPF aparece em mais de um colaborador da lista. | Remova as linhas repetidas, listadas em allRows. |
EMPLOYEE_NOT_FROM_CORPORATE | O CPF não está entre os colaboradores cadastrados na sua empresa. | Cadastre o colaborador antes (veja "Adicionar e Editar Employees") ou corrija o CPF. |
USER_WITH_INVALID_KYC | O colaborador não está elegível ao cartão físico por pendência na análise cadastral. | Não dá para resolver pela API. Fale com a Central de Ajuda Swile para Empresas. |
ALREADY_REQUESTED | O colaborador já tem uma solicitação de cartão em andamento. | Aguarde a entrega da remessa anterior antes de pedir de novo. |
CONSTRAINT_VIOLATION | Algum campo não passou na validação de formato ou tamanho. | Veja field e message: eles apontam o campo exato. |
kind como uma lista aberta:
mostre o message para quem for corrigir os dados em vez de depender só dos valores acima.
Se a requisição for recusada sem estar ligada a um colaborador específico, a resposta vem como
400 com o código 40013 e a explicação no campo details, sem a lista
errors.
Recusas de outros tipos são repassadas com o mesmo status HTTP que a Swile recebeu internamente (por
exemplo 409 ou 422), com o código 40027 e a explicação em
details. Um 500 significa falha do nosso lado, não do seu payload: nesse caso vale
tentar de novo antes de abrir chamado.
Acompanhando a entrega
Guarde o code de cada parcel (não o da remessa como um todo) para rastrear a entrega:
curl -H "Authorization: Bearer $TOKEN" \
https://corporate-gateway-staging.swile.com.br/api/v1/logistics/parcel/track/SWB123456789P
| Status | Significado |
|---|---|
CREATED | Recém criado |
PROCESSING | Sendo enviado para a transportadora |
PROCESSED | Recebido pela transportadora |
IN_TRANSIT | Em posse da transportadora |
DELIVERED | Final - entregue com sucesso |
RETURNED | Retornado para a Swile |
DELIVERY_ISSUE | Algum problema na entrega, em análise |
NOT_DELIVERED | Final - entrega não pôde ser concluída |
CANCELLED | Final - cancelado manualmente |
ON_HOLD | Em espera |