Enviando um MassID
Guia completo para envio de um MassID — resolver participantes, criar documento, adicionar eventos e fechar.
Last updated on
Use esta sequência como padrão base de implementação para enviar o ciclo de vida completo de um MassID através da Carrot API.
Pré-requisitos
Antes de começar, certifique-se de ter:
- Uma conta de Integrador registrada com credenciais de API válidas
- Dados de participante e endereço prontos — resolva cada um primeiro (recupere por chave ou crie) para poder
referenciá-lo por
participantIdeaddressId, como mostrado na Etapa 1 - Familiaridade com os conceitos fundamentais — especialmente o modelo imutável baseado em eventos
Etapa 1: Resolver participantes e endereços
Documentos e eventos referenciam participantes e endereços por ID (alguns eventos, como o CLOSE, precisam apenas de um participante). Antes de enviar, resolva cada
um — busque por chave ou crie — e guarde o participantId e o addressId retornados.
Recuperar por chave. Busque um participante existente pela chave natural — código do país, tipo de documento e número do documento:
GET /participants?countryCode=BR&taxIdType=CNPJ&taxId=11111111111111Se existir, reutilize o participantId retornado e liste seus endereços para encontrar o addressId:
GET /participants/{participantId}/addressesCriar quando não existir. Se o participante ainda não existir, crie-o e depois adicione um endereço a ele:
POST /participants
{
"countryCode": "BR",
"name": "Empresa Exemplo",
"taxId": "11111111111111",
"taxIdType": "CNPJ",
"type": "COMPANY"
}POST /participants/{participantId}/addresses
{
"name": "Unidade Principal",
"street": "Rua das Colinas",
"number": "500",
"neighborhood": "Centro",
"city": "São Paulo",
"countryState": "São Paulo",
"countryCode": "BR",
"zipCode": "08575720",
"latitude": -23.5489,
"longitude": -46.6388
}Cada chamada de criação retorna o id gerado — use-o como participantId / addressId nas próximas etapas.
Campos obrigatórios: participante — countryCode, name, taxId, taxIdType, type; endereço — city,
countryCode, countryState, name, number, street. Consulte a
API de Participantes para o schema completo de requisição e resposta.
Reutilizando registros existentes
Criar um participante ou endereço que já existe só é seguro se você enviar dados idênticos — a plataforma casa pela chave natural e rejeita valores conflitantes. Prefira recuperar por chave e reutilizar o ID retornado.
Etapa 2: Criar o documento
Crie o registro raiz com classificação e campos de visibilidade base, referenciando o participante e o endereço que você resolveu na Etapa 1:
POST /v1/documents
{
"category": "MassID",
"type": "SEU_TIPO_DE_RESÍDUO",
"measurementUnit": "kg",
"externalCreatedAt": "2026-03-01T10:00:00.000Z",
"isPublic": true,
"isPubliclySearchable": true,
"participantId": "id-do-participante-da-etapa-1",
"addressId": "id-do-endereço-da-etapa-1",
"externalId": "seu-id-interno-de-rastreamento",
"deduplicationId": "id-único-gerado-antes-da-primeira-tentativa"
}| Campo | Obrigatório | Descrição |
|---|---|---|
category | Sim | Sempre MassID para documentos de rastreamento de massa |
type | Sim | Tipo de resíduo — definido por metodologia (veja a nota abaixo) |
measurementUnit | Sim | kg para reciclagem, kg CO₂e para carbono |
externalCreatedAt | Sim | Timestamp ISO 8601 da criação real do documento |
isPublic | Sim | Se o documento é publicamente visível |
isPubliclySearchable | Sim | Se o documento aparece em buscas públicas |
participantId | Sim | ID do participante resolvido na Etapa 1 |
addressId | Sim | ID do endereço resolvido na Etapa 1 |
externalId | Não | Seu ID interno para reconciliação — útil para mapear de volta ao seu sistema |
deduplicationId | Não | Chave de idempotência — veja a dica abaixo |
Descontinuado: participant e address inline
Você ainda pode enviar objetos completos participant e address inline em vez de
participantId/addressId, e a plataforma os cria no primeiro uso. Essa forma inline está
descontinuada e será removida em uma versão futura — resolva participantes e endereços na
Etapa 1 e referencie-os por ID.
Valores específicos por metodologia
O campo type (tipo de resíduo) e measurementUnit são definidos pela sua metodologia alvo.
Consulte os guias de integração por metodologia
para os valores específicos necessários.
Referência: API de Documentos.
Etapa 3: Adicionar eventos à linha do tempo
Adicione eventos em ordem cronológica para representar as etapas operacionais. Cada evento é imutável após criado.
Eventos ACTOR
Eventos ACTOR registram papéis de participantes na linha do tempo do documento. Cada um requer um label identificando o papel, além do participante e endereço a que se aplica, referenciados por ID:
POST /v1/documents/{documentId}/events
{
"name": "ACTOR",
"label": "SEU_LABEL_DE_PAPEL",
"externalCreatedAt": "2026-03-01T10:05:00.000Z",
"isPublic": true,
"participantId": "id-do-participante-ator",
"addressId": "id-do-endereço-ator"
}O valor de label (ex. "Waste Generator", "Hauler", "Processor") é definido por cada metodologia. Consulte o guia da sua metodologia para os papéis obrigatórios e seus labels.
Resolva o participante e o endereço de cada ator da mesma forma que na Etapa 1, e então referencie-os por participantId e addressId.
Eventos CUSTOM
Eventos CUSTOM representam etapas operacionais específicas da metodologia. O nome do evento, atributos de metadados obrigatórios e a sequência são todos definidos pela metodologia:
POST /v1/documents/{documentId}/events
{
"name": "NOME_DO_SEU_EVENTO",
"externalCreatedAt": "2026-03-01T11:00:00.000Z",
"isPublic": true,
"participantId": "id-do-participante-da-etapa-1",
"addressId": "id-do-endereço-da-etapa-1",
"metadata": {
"attributes": [
{ "name": "NOME_DO_SEU_ATRIBUTO", "value": "valor-do-atributo" }
]
},
"value": 150.5
}O campo value nos eventos contribui para o currentValue do documento. Por exemplo, um evento de pesagem com value: 150.5 define o peso rastreado.
Descontinuado: participant e address inline
Eventos aceitam os mesmos objetos participant e address inline descontinuados que os
documentos. Referencie participantId e addressId em vez disso — a forma inline será removida
em uma versão futura.
Guias de metodologia
Cada metodologia define a sequência específica de eventos, nomes de eventos e atributos de metadados obrigatórios. Consulte os guias de integração por metodologia para os valores necessários por cada metodologia.
Ciclo de vida do status do documento
Documentos seguem um ciclo de vida de status estrito:
OPEN— Status padrão após a criação. Eventos podem ser adicionados livremente.- Evento
CLOSE— Transiciona o documento paraCLOSED. Após o fechamento, apenas eventosRELATEDsão aceitos. - Evento
CANCEL— Transiciona o documento paraCANCELLED. Nenhum evento adicional é aceito.
Envie um evento CLOSE quando o ciclo de vida da cadeia de suprimentos estiver completo:
POST /v1/documents/{documentId}/events
{
"name": "CLOSE",
"externalCreatedAt": "2026-03-02T16:00:00.000Z",
"isPublic": true,
"participantId": "id-do-participante-integrador"
}Consulte a Especificação de Eventos para a lista completa de categorias de eventos.
Referência: API de Eventos.
Para integrações de alto volume, considere o endpoint de eventos em lote para enviar múltiplos eventos por requisição.
Etapa 4: Anexar arquivos de evidência (opcional)
Algumas regras de metodologia exigem anexos de evidência (ex. tickets de balança, manifestos de transporte). O padrão é:
- Solicitar uma URL de upload pré-assinada via a API de Anexos
- Fazer upload do arquivo diretamente para a URL pré-assinada
- Referenciar o anexo no array
attachmentsdo evento relevante
Anexos são vinculados a eventos específicos, não ao documento como um todo. Isso garante que cada evidência esteja vinculada à etapa operacional que ela documenta.
Referência: API de Anexos.
Etapa 5: Recuperar e validar o estado final
Consulte o documento e verifique antes de considerar o envio completo:
- Contagem e ordenação de eventos — todos os eventos esperados estão presentes em ordem cronológica
- Status é
CLOSED— o documento foi devidamente fechado currentValue> 0 — o documento tem um valor rastreado positivo- Pelo menos um evento
ACTOR— os papéis de participante obrigatórios estão registrados - Links de participante e endereço — todas as referências resolvem corretamente
- Completude dos metadados — atributos obrigatórios estão presentes em cada evento conforme a metodologia
Referência: GET documento por ID.
Dicas operacionais
deduplicationId
Sempre envie deduplicationId em chamadas de escrita com retentativa (criação de documento e
criação de evento). Gere um ID único antes da primeira tentativa, armazene-o e reutilize o
mesmo ID em cada retentativa. O ID tem escopo por integrador — dois integradores diferentes
podem usar o mesmo ID sem conflito. Isso garante semântica at-most-once: se o servidor recebeu sua
primeira requisição mas a resposta foi perdida, a retentativa retornará o resultado original em
vez de criar uma duplicata.
- Use
externalIdem documentos e eventos para reconciliação com seus sistemas internos. - Trate
4xxcomo problemas de dados/integração e5xxcomo falhas transitórias — veja Tratamento de Erros. - Mantenha sua estratégia de timestamps determinística — veja Formatos de Dados.