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.

Esta página é um resumo rápido, pensado pra consulta durante o desenvolvimento. Pra ver todos os endpoints, todos os campos disponíveis e testar chamadas diretamente pelo navegador, use a Swagger UI (link na barra lateral).

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.

AmbienteURL base
Produçãohttps://corporate-gateway.swile.com.br
Homologaçãohttps://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.

CampoFormatos aceitosExemplo
CPF
document, contactDocument
11 dígitos, ou pontuado 11111111111
111.111.111-11
CNPJ
document, branchDocument, benefitPayerDocument, campaignPayerDocument
14 dígitos, ou pontuado 12345678000190
12.345.678/0001-90
Telefone
phoneNumber, 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
Email
email, contactEmail, createdBy
somente ASCII, com domínio e um TLD de duas letras ou mais joao.silva@empresa.com.br
CEP
zipCode, postalCode
8 dígitos, ou com traço 01311000
01311-000
UF
state
duas letras maiúsculas SP
Fora desses formatos a resposta é 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.
Isso é o que a API aceita na entrada. Na saída, CPF e CNPJ sempre voltam sem pontuação, independente de como você enviou.

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.

EndpointPor minuto
GET /api/v1/employee180
POST /api/v1/employee/add12
PATCH /api/v1/employee/{employeeId}60
PUT /api/v1/employee/update/status120
GET /api/v1/employee/{employeeId}300
GET /api/v1/employee/inactive120
GET /api/v1/workgroup180
POST /api/v1/workgroup120
GET /api/v1/corporate/branch300
POST /api/v1/corporate/branch/add60
POST /api/v1/logistics/shipment/employee60
GET /api/v1/logistics/parcel/track/{code}300
PUT /api/v1/logistics/shipment/{code}/cancel e /parcel/{code}/cancel300
POST /api/v1/order/summary60
POST /api/v1/order/create e /order/create/express60
POST /api/v1/order/create/import/express12
GET /api/v1/order/group180
GET /api/v1/order/group/{orderGroupCode} e /status/{orderGroupCode}300
GET /api/v1/order/upload/{fileName}120
GET /api/v1/wallet/credit/balance180
GET /api/v1/wallet/credit/statement60
GET /api/v1/auth/login60
Todos os endpoints somados600

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:

HeaderO que traz
X-RateLimit-Limitlimite por minuto
X-RateLimit-Burstlimite na janela de 10 segundos
X-RateLimit-Remainingquantas chamadas ainda cabem agora
X-RateLimit-Resetquando volta a ter saldo (unix time, em segundos)
X-RateLimit-Scopequal 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."
}
Como conviver bem com o limite. Espere o tempo do 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.
Um 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.
Fazendo polling. Para casos como conferir se um pedido já foi pago ou confirmar que um colaborador foi criado, consultar de tempos em tempos até o status mudar é o padrão esperado - só não vale abrir um loop apertado. Comece com um intervalo de uns 5 a 10 segundos entre chamadas, dobrando esse intervalo a cada tentativa sem resultado (até um teto de uns 60 segundos), e desista depois de alguns minutos sem mudança - nesse ponto vale falar com a Central de Ajuda Swile para Empresas em vez de continuar consultando. Isso já fica bem abaixo da cota de qualquer endpoint usado para polling (300 ou 180 por minuto, veja a tabela no início desta seção), mesmo consultando vários pedidos/colaboradores em paralelo - se ainda assim chegar perto do limite, use o 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"
}
CampoPara que serve
tokenJWT enviado em todas as demais chamadas, no header Authorization: Bearer <token>
issuedAt / expiresAtEmissã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"
CNPJ, CEP e UF seguem os formatos de campo. O endereço é validado inteiro nesta chamada, então um 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.
Cada colaborador precisa de pelo menos um meio de contato: envie 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.

Se depois de alguns minutos o colaborador ainda não aparecer, o cadastro provavelmente falhou de um jeito que não gera nenhum dos erros síncronos listados abaixo. Nesse caso, fale com a Central de Ajuda Swile para Empresas em vez de continuar tentando.
Veja em Limites de uso como espaçar essas chamadas de polling sem estourar sua cota.

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
Dois pontos de atenção ao editar. O 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ó.

kindO que aconteceuComo corrigir
MISSING_DATAO colaborador não tem email nem phoneNumber.Informe pelo menos um dos dois.
INVALID_NAMEO 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_DOCUMENTO CPF não é válido.Confira os dígitos do document.
INVALID_PHONEO telefone não é um celular válido.DDD, o dígito 9 e mais 8 dígitos.
INVALID_EMAILO e-mail não é válido.Confira o endereço, sem acentos e com TLD.
INVALID_BIRTH_DATEO colaborador tem menos de 14 anos.Confira o birthDate.
DUPLICATED_DOCUMENT, DUPLICATED_PHONE, DUPLICATED_EMAIL, DUPLICATED_EXTERNAL_IDO 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_PHONEO contato já está registrado para outra pessoa na Swile.Use um contato da própria pessoa.
WORKGROUP_NOT_FOUND, WORKGROUP_CONFLICTO idWorkGroup não existe na sua empresa, ou pertence a outra.Confira o work group (veja "Criar Work Group").
NOT_FOUNDSó em Editar: o colaborador não existe na sua empresa.Confira o id na URL.
IDENTITY_DATA_NOT_UPDATABLE, APP_ALREADY_ACTIVESó 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_EMAILSó em Editar: a sua empresa exige e-mail em todo colaborador.Informe o email.
Novos tipos de validação podem ser adicionados com o tempo. Trate kind como uma lista aberta: mostre o message para quem for corrigir os dados em vez de depender só dos valores acima.
Aqui o 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
StatusSignificado
ACTIVEEmployee pode usar o cartão/carteira normalmente
INACTIVEEmployee desativado
KEEP_ACTIVEReafirma 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:

FluxoQuando usar
Summary + CreateQuando você quer conferir os valores calculados antes de confirmar o pedido (ex: mostrar uma tela de aprovação pro RH)
ExpressChamada única, sem etapa de conferência - envia os dados e já cria o pedido
Express via PlanilhaMesma lógica do Express, mas os dados vêm de um arquivo já enviado - útil pra volumes grandes de colaboradores
paymentMethodRegra de credit_date / due_date
PIXcreditDate pelo menos 1 dia útil no futuro. slipLink (boleto) sempre nulo na resposta.
BANK_SLIPcreditDate 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.
Atenção: envie 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ódigoDescrição
v3Combustível
v5Refeição e Alimentação
v10Home Office
v13Multibenefícios
v51Refeição
v52Alimentação
v104Presente Natal
v131Multibenefícios Natal
v300Saldo Livre
v301Premiação (homologação apenas)
v307Premiação (produção apenas - substitui o v301 de staging)
v502Cesta Natal
v701Saúde
v702Educação
v703Mobilidade

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
Vale a mesma regra de CNPJ do resto da API: veja os formatos de campo.

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"
Existe também 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:

StatusO que significa
DRAFTRascunho - ainda não foi enviado para processamento.
CREATEDCriado, aguardando ser faturado.
FINANCIALLY_INTEGRATEDNota fiscal/fatura já registrada do lado da Swile.
WAITING_PAYMENTFaturado, aguardando o pagamento (boleto ou PIX) ser compensado. Ainda não foi pago.
PAIDPagamento confirmado.
ON_QUEUEPago, na fila para começar a creditar os colaboradores.
PROCESSINGCreditando os colaboradores agora.
APPROVEDFinal - todos os colaboradores foram creditados com sucesso.
APPROVED_PARTIALLYFinal - 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}.
CANCELEDFinal - cancelado antes de creditar, pagamento não chegou a acontecer.
PROCESSING_CANCELCancelamento em andamento.
PROCESSED_ERRORFinal - falhou ao tentar creditar. Fale com a Central de Ajuda Swile para Empresas.
CREATION_ERRORFinal - falhou já na criação, o pedido não chegou a existir de fato. Pode tentar criar de novo.
SENT_TO_ACCOUNTINGEnviado para o financeiro/ERP - só aparece para empresas nesse modelo de faturamento (Netsuite).
BILLED_FROM_ACCOUNTINGFaturado pelo financeiro/ERP - mesmo caso acima.
Consultar uma vez só, logo depois de criar, não é suficiente: entre a criação e o pagamento existem etapas assíncronas. Faça polling - consulte de novo a cada alguns segundos até chegar num status final - em vez de assumir que deu certo pelo 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
CPF, telefone, e-mail, CEP e UF seguem os formatos de campo, tanto no contato responsável quanto em cada colaborador da lista. Essa validação é do próprio Gateway e vem antes das checagens da logística descritas abaixo.

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"
    }
  ]
}
CampoPara que serve
rowPosição do colaborador na lista employees que você enviou, começando em 1. É por aqui que você identifica qual registro corrigir.
fieldCampo que falhou, por exemplo postalCode ou document.
kindTipo da falha, veja a tabela abaixo.
messageExplicação em português, já com os valores que causaram o erro.
allRowsAparece 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.
kindO que aconteceuComo corrigir
INVALID_POSTAL_CODEO CEP informado não pertence ao estado (UF) informado.Confira o CEP e o campo state do endereço desse colaborador.
DUPLICATE_DOCUMENTO mesmo CPF aparece em mais de um colaborador da lista.Remova as linhas repetidas, listadas em allRows.
EMPLOYEE_NOT_FROM_CORPORATEO 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_KYCO 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_REQUESTEDO colaborador já tem uma solicitação de cartão em andamento.Aguarde a entrega da remessa anterior antes de pedir de novo.
CONSTRAINT_VIOLATIONAlgum campo não passou na validação de formato ou tamanho.Veja field e message: eles apontam o campo exato.
Novos tipos de validação podem ser adicionados com o tempo. Trate 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
StatusSignificado
CREATEDRecém criado
PROCESSINGSendo enviado para a transportadora
PROCESSEDRecebido pela transportadora
IN_TRANSITEm posse da transportadora
DELIVEREDFinal - entregue com sucesso
RETURNEDRetornado para a Swile
DELIVERY_ISSUEAlgum problema na entrega, em análise
NOT_DELIVEREDFinal - entrega não pôde ser concluída
CANCELLEDFinal - cancelado manualmente
ON_HOLDEm espera