iza Intermitente V2 / Guia do parceiro

Integração e homologação da API Intermitente

Seguro por período para entregadores e motoristas: cada entrega ou corrida vira um period aberto e encerrado via API. Este guia reúne tudo o que você precisa — autenticação, endpoints, regras de cada tipo de contratação, o processo de homologação e a virada para produção.

Público: equipe técnica do parceiro Referência de endpoints: intermitente.api.docs.iza.com.vc Autenticação: Basic Saída: credencial de produção

01Visão geral

A integração tem três objetos, criados nesta ordem. Os dois primeiros acontecem uma vez por segurado; o terceiro se repete a cada entrega ou corrida.

Objeto O que é Frequência Chave
Person Cadastro do segurado (entregador / motorista). Uma vez por CPF doc
Contract Equivalente à apólice. Agrupa os períodos daquele segurado. Uma vez por CPF doc
Period Janela de tempo coberta. Uma entrega = um período. A cada entrega / corrida period_id

Ciclo de vida do período

POST   /intermittent/persons/periods              → abre a cobertura, devolve period_id
   │
   ├── POST /intermittent/persons/geolocation     → 1 ponto por minuto enquanto aberto
   │
   ├── PUT  .../periods/{period_id}               → encerra (entrega concluída)
   └── PUT  .../periods/{period_id}/cancel        → cancela (até 2 min após a criação)
Princípio

Um pedido, um período. Saída com quatro pedidos gera quatro períodos em sequência: abre o do pedido 1, encerra ao concluir, abre o do pedido 2, e assim por diante. Ordens de Serviço que agrupam vários pedidos devem ser desmembradas. A cobrança da IZA é por pedido concluído — a exceção é quando todos os pedidos são coletados e entregues no mesmo endereço.

02Ambientes e URLs base

Na documentação de endpoints as requisições aparecem com a variável {{ baseVar }}. Ela é o host do ambiente somado ao prefixo /api/integrations:

Ambiente URL base Uso
Homologação https://intermittent-web-api.hml.iza.com.vc/api/integrations Implementação e janela de 8h
Produção https://intermittent-web-api.iza.com.vc/api/integrations Somente após aprovação na conciliação

Montando um endpoint completo a partir da doc — {{ baseVar }}/intermittent/persons/periods em homologação fica:

https://intermittent-web-api.hml.iza.com.vc/api/integrations/intermittent/persons/periods

Todos os endpoints da integração — cadastro e períodos — respondem nesse mesmo host. Basta apontar para uma única URL base por ambiente.

Atenção

As credenciais são por ambiente: o token de homologação não funciona em produção e vice-versa. Deixe o host e o token em variável de ambiente, nunca fixos no código — assim a virada para produção é só uma troca de configuração.

Todo tráfego é obrigatoriamente HTTPS.

Primeiro teste de conectividade

Vale começar por aqui: confirme que a credencial responde no ambiente certo antes de escrever qualquer código. 200 valida o token e devolve o cadastro do parceiro; 401 indica problema no token.

$ curl -i https://intermittent-web-api.hml.iza.com.vc/api/integrations/partner-info \
    -H "Authorization: Basic $(printf '%s:%s' "$USER_API_ID" "$SECRET_KEY" | base64)"

03Autenticação

URLs base

Os endpoints deste guia são caminhos relativos. As URLs base de homologação e produção estão em Ambientes.

Todos os endpoints exigem autenticação Basic. A IZA entrega, na contratação, um User API ID e uma Secret Key. O token é o Base64 da concatenação dos dois separados por dois-pontos.

# credenciais recebidas da IZA
USER_API_ID=df888dae-6a05-400b-94c2-6962c09f7842
SECRET_KEY=la903yX1Hw+r27RZL5DfOCIvFq0qKvhq...

# token = base64("USER_API_ID:SECRET_KEY")
$ printf '%s:%s' "$USER_API_ID" "$SECRET_KEY" | base64

# enviado em toda requisição
Authorization: Basic ZGY4ODhkYWUtNmEwNS00MDBiLTk0YzItNjk2MmMwOWY3ODQyOmxhOTAz...
Content-Type: application/json

A credencial resolve sozinha a organização do parceiro — não existe parâmetro de organização nos payloads. Guarde a Secret Key em cofre de senhas ou storage criptografado.

Validando a credencial

Use GET /partner-info como teste de fumaça antes de qualquer outra coisa: 200 confirma a credencial e devolve o cadastro do parceiro; 401 indica problema no token.

GET /partner-info Partner Info
{
  "partner_info": {
    "name": "IZA Tecnologia",
    "doc": "35206922000134",
    "date_begin": "2021-04-07",
    "external_id": "FILIAL 01",
    "address": {
      "street": "Avenida Cidade Jardim", "number": 377,
      "city": "São Paulo", "state": "SP", "postal_code": "01017-040"
    }
  }
}

Confira no retorno o CNPJ, o endereço e a data de ativação da credencial. O campo external_id é de uso livre do parceiro — filial, credenciadora, praça.

04Endpoints

Caminhos relativos à URL base do ambiente. Todos exigem o header Authorization.

Cadastro
POST /persons Criar segurado
{
  "doc": "25084932010",           // obrigatório — CPF
  "name": "Maria Souza",          // obrigatório
  "birthed_at": "1992-02-01",      // opcional
  "email": "maria@exemplo.com",   // opcional
  "main_cell_phone": "11999011234" // opcional
}

Esperado: 201 Created.

Situação Retorno Status
CPF já cadastrado {"errors":{"detail":"Conflict"}} 409
CPF inválido {"errors":{"details":"invalid_verifier"}} 400
Idade fora da faixa (<18 ou >70) {"errors":{"details":"unsupported_age"}} 422
E-mail já existente {"errors":{"email":["já existe"]}} 422
Telefone já existente {"errors":{"main_cell_phone":["já existe"]}} 422
Nome em branco {"errors":{"name":["não pode estar em branco"]}} 422

409 não é falha: significa que a pessoa já existe. Trate como sucesso e siga para a criação do contrato.

GET /persons?doc={cpf} Consultar segurado

Retorna os dados do segurado e a lista de contracts. É o endpoint para verificar, de forma idempotente, se pessoa e contrato já existem antes de tentar criá-los.

POST /contracts Criar contrato
// request
{ "doc": "25084932010" }

// 201 Created
{ "id": "f5bbc303-3082-42fd-ab5c-9f54dbb75f9a" }

Se já houver contrato: 400 com {"errors":{"details":"already_has_contract"}} — também deve ser tratado como sucesso.

Períodos
POST /intermittent/persons/periods Abrir período
// request — started_at deve ser enviado em tempo real
{
  "doc": "25084932010",
  "started_at": "2026-08-13T14:22:00",
  "timezone": "America/Sao_Paulo"   // opcional, este é o padrão
}

// 201 Created — guarde o id, é ele que encerra e cancela o período
{ "id": "3b5b13ef-374a-4a4c-9b53-b0990d6afa26" }
Erro Status
invalid token401
api access not active403
organization not registred404
individual not registred — CPF sem cadastro404
the period should be under the contract vigency400
unable to create periods in the future400
period tolerance exceeded — retroatividade estourada400
already exists a period in the specified time409
Fusos horários aceitos em timezone
Timezone Abrangência UTC
America/Sao_PauloGO, DF, MG, ES, RJ, SP, PR, SC, RS−03:00
America/NoronhaIlhas Atlânticas−02:00
America/BelemPará (leste), Amapá−03:00
America/FortalezaMA, PI, CE, RN, PB−03:00
America/RecifePernambuco−03:00
America/AraguainaTocantins−03:00
America/MaceioAlagoas, Sergipe−03:00
America/BahiaBahia−03:00
America/Campo_GrandeMato Grosso do Sul−04:00
America/CuiabaMato Grosso−04:00
America/SantaremPará (oeste)−04:00
America/Porto_VelhoRondônia−04:00
America/Boa_VistaRoraima−04:00
America/ManausAmazonas (leste)−04:00
America/EirunepeAmazonas (oeste)−05:00
America/Rio_BrancoAcre−05:00
PUT /intermittent/persons/periods/{period_id} Encerrar período
{ "finished_at": "2026-08-13T14:51:00" }

Chamado uma única vez — depois de encerrado, o período não aceita nova data de fim.

Erro Status
period not exists404
unable to finish periods in the future406
Period status is not created — já encerrado ou cancelado409
finish time should be higher than the start time409
PUT /intermittent/persons/periods/{period_id}/cancel Cancelar período

Janela de cancelamento: 2 minutos após a criação do período. Fora disso, 409 cancellation tolerance time exceeded. Cancelamento de entrega em até 2 minutos não gera cobrança.

Período já cancelado retorna 409; período inexistente, 404.

GET /intermittent/persons/periods Listar períodos
Filtro Regra
doc CPF do segurado. Sem ele, retorna os períodos de todos os segurados do contratante, agrupados por CPF. CPF fora da base → 404.
started_at Início da janela. No máximo 90 dias atrás. Padrão: 7 dias.
finished_at Fim da janela. Não pode ser anterior a started_at (senão 400 end_date_before_start_date). Padrão: agora.

Este é o endpoint da conciliação. É por ele que o parceiro confere, do próprio lado, quantos períodos a IZA de fato registrou na janela de teste.

Complementares
POST /intermittent/persons/geolocation Enviar geolocalização
{
  "doc": "25084932010",
  "datetime": "2026-08-13T14:23:00",
  "lat": "-23.289173",   // 6 casas decimais
  "long": "-47.313065"   // 6 casas decimais
}

Retorno 204 No Content. Enviar um ponto por minuto enquanto houver período aberto — é o que permite reconstruir o trajeto na análise de sinistro.

05Regras por tipo de contratação

Retroatividade e duração padrão mudam conforme o produto contratado. Confirme qual se aplica ao seu contrato antes de codificar os limites.

Tipo Retroatividade máxima de started_at finished_at automático Cenário típico
Delivery 10 minutos +45 minutos Um período por pedido; incluir o retorno ao estabelecimento
Mobilidade Urbana 10 minutos +2 horas Um período por corrida
Longa Duração 7 dias (168h) +7 dias (168h) Frete: um período por trajeto agendado

O finished_at automático é uma rede de segurança, não o comportamento esperado: o encerramento explícito via PUT é o que reflete a operação real e é o que a conciliação avalia.

Regras que valem para todos

  • Realocação de OS: ao transferir uma Ordem de Serviço para outro prestador, os períodos seguintes devem ser criados com o CPF do novo motorista.
  • Pedido já iniciado não se cancela nem se transfere: o acidente pode ocorrer no deslocamento até a coleta.
  • Entrega cancelada: os períodos seguintes simplesmente não são criados.
  • Mobilidade com cobertura de passageiro: o fluxo de API é idêntico ao de cobertura só do motorista — a diferença aparece apenas no sinistro.
Requisito de log

Guarde por no mínimo 30 dias os logs de toda requisição que resultar em erro inesperado, com URL, payload enviado e corpo da resposta. Sem esses três campos, divergências apontadas na conciliação não têm como ser investigadas.

06Homologação

As fases são sequenciais e a homologação é concluída na conciliação — é a partir dela que a credencial de produção é liberada.

Fase 01

Credencial e conectividade

A IZA envia o User API ID e a Secret Key de homologação. Com eles você monta o token Basic e confirma o acesso.

  • GET /partner-info em homologação retorna 200.
  • CNPJ, endereço e data de ativação conferem com o cadastro do parceiro.
  • Host e token estão em variável de ambiente, não no código.
Fase 02

Implementação da integração

Desenvolvimento no ambiente de homologação, cobrindo o fluxo completo. A lista abaixo é o que a conciliação vai olhar depois.

  • Criação de person, com 409 tratado como sucesso.
  • Criação de contract, com already_has_contract tratado como sucesso.
  • Abertura de period em tempo real, persistindo o period_id junto ao pedido/corrida no seu sistema.
  • Encerramento do período na conclusão da entrega — uma única chamada.
  • Cancelamento quando a entrega não se concretiza, respeitando a janela de 2 minutos.
  • Desmembramento de OS em um período por pedido.
  • Envio de geolocalização a cada minuto enquanto o período estiver aberto.
  • Retentativa com backoff para 5xx e timeouts, sem duplicar períodos já criados.
  • Log de erros com URL, payload e resposta, retido por 30 dias.
Recomendação

Guarde o period_id como chave de negócio no seu lado: é ele que permite encerrar, cancelar e explicar qualquer divergência depois.

Fase 03

Janela de operação contínua — 8 horas

Com a integração pronta, deixe o serviço rodando ininterruptamente por 8 horas, refletindo a operação real: o mesmo volume, o mesmo padrão de abertura e encerramento, os mesmos horários de pico. A ideia não é passar em um teste pontual, e sim ver como a integração se comporta em regime.

  • Janela contínua de 8h, sem reinícios manuais para "consertar" o fluxo.
  • Horário de início e fim da janela anotados e informados à IZA (com o fuso).
  • Volume representativo do dia a dia — não apenas alguns casos felizes.
  • Seus próprios contadores ligados: persons criadas, contracts criados, periods abertos, encerrados e cancelados.
  • Erros ocorridos no período preservados em log.
Durante a janela

Se precisar corrigir algo no meio do caminho, é melhor reiniciar a janela depois do ajuste — uma janela emendada fica difícil de comparar.

Fase 04

Conciliação de volumes

Encerrada a janela, comparamos os números: você extrai os totais do seu sistema e a IZA levanta os mesmos totais do lado dela, pela credencial usada no teste.

Métrica Lado do parceiro Lado da IZA
Persons criadas CPFs cadastrados com sucesso, incluindo os 409 de CPF já existente Persons registradas na janela
Contracts criados Contratos criados ou que já existiam Contracts ativos vinculados à credencial
Periods abertos Chamadas POST com 201 Periods com started_at na janela
Periods encerrados Chamadas PUT com 200 Periods com finished_at preenchido
Periods cancelados Chamadas PUT .../cancel com 200 Periods com status cancelado

Você pode adiantar boa parte dessa conferência sem esperar a IZA:

GET /intermittent/persons/periods
      ?started_at=2026-08-13T08:00:00
      &finished_at=2026-08-13T16:00:00

Sem o doc, a resposta vem agrupada por CPF — dá para conferir CPF a CPF, não só o total.

Se os números não fecharem, não é reprovação: com os logs dos erros em mãos identificamos a causa juntos, você faz o ajuste e roda uma nova janela de 8 horas.

Depois da aprovação

Fechada a conciliação, a IZA emite a credencial de produção. O checklist da virada está em Go-live.

07Go-live

Aprovada a conciliação, a IZA emite a credencial de produção.

  • Nova User API ID / Secret Key de produção recebidas e guardadas em cofre.
  • URL base trocada para o host de produção — ver Ambientes.
  • GET /partner-info em produção retorna 200 com o cadastro correto.
  • Primeiro período real criado e encerrado, conferido via GET /intermittent/persons/periods.
  • Monitoramento e alerta de erro ligados sobre as chamadas à IZA.
  • Retenção de logs de 30 dias ativa em produção.
Primeiros dias

Vale acompanhar diariamente, na primeira semana, a razão entre períodos abertos e encerrados. É o indicador que denuncia mais cedo qualquer regressão na integração.

08Erros comuns e como tratar

Status Causa Tratamento
401 Token inválido ou de outro ambiente Conferir Base64 de id:secret e o host do ambiente. Não repetir a chamada.
403 api access not active Credencial desativada. Acionar a IZA — não é problema de código.
404 individual not registred Criar person e contract antes de abrir o período.
409 CPF ou contrato já existente Sucesso. Seguir o fluxo.
409 already exists a period in the specified time Já há período aberto nesse intervalo. Encerrar o anterior antes de abrir o próximo.
400 period tolerance exceeded started_at retroativo além do limite do produto. Enviar em tempo real.
400 unable to create periods in the future Relógio do servidor adiantado ou fuso errado. Conferir NTP e timezone.
409 Period status is not created Período já encerrado ou cancelado. Não repetir o PUT.
409 cancellation tolerance time exceeded Passou dos 2 minutos. O período segue válido e será cobrado.
5xx Indisponibilidade momentânea Retentar com backoff, sem duplicar períodos já criados com sucesso.