BOLD Recycling — MassID Event Reference
Canonical per-event JSON payloads and attribute dictionaries for BOLD Recycling integrations.
Last updated on
Methodology version 1.0.1
How to read this page
Each event below shows the canonical JSON payload integrators send to the Documents API.
The isPublic flags inside each example are Carrot's recommended visibility — see
Privacy & Masking for the model.
Each payload references its participant and address by participantId and addressId. Resolve each one
first — retrieve it by key or create it — via the Participants API;
sending full participant and address objects inline is also supported and find-or-creates the record.
Send exactly one form of each pair — both, or neither, fails with 400 VALIDATION_ERROR. The rule is the same on the single-event and batch endpoints.
Each event that carries metadata attributes also lists them in a table under its payload. Attribute
names are exact: send them as written. Visibility is the recommended isPublic / sensitive
pair for the attribute. Public, masked means isPublic: true with sensitive: true; a dash means
the methodology rules do not check that attribute's visibility. Whether an attribute marked
Conditional is required depends on a condition that its Notes state.
Create MassID document
The initial POST /documents call that creates a MassID. Not an event on the document's
timeline — included here as the starting point for integrator flows. The
Waste Generator is the creator; events are added to this
document afterward.
{ "addressId": "00000000-0000-4000-9000-00000000000a", "category": "MassID", "externalCreatedAt": "2025-12-05T11:02:47Z", "isPublic": true, "isPubliclySearchable": true, "participantId": "00000000-0000-4000-8000-00000000000a", "subtype": "Food, Food Waste and Beverages", "title": "MassID", "type": "Organic"}ACTOR — Waste Generator
{ "externalCreatedAt": "2025-12-05T11:02:47Z", "isPublic": true, "preserveSensitiveData": true, "addressId": "00000000-0000-4000-9000-00000000000a", "label": "Waste Generator", "name": "ACTOR", "participantId": "00000000-0000-4000-8000-00000000000a"}ACTOR — Recycler
{ "externalCreatedAt": "2025-12-05T11:02:47Z", "isPublic": true, "preserveSensitiveData": false, "addressId": "00000000-0000-4000-9000-00000000000d", "label": "Recycler", "name": "ACTOR", "participantId": "00000000-0000-4000-8000-00000000000d"}ACTOR — Processor
{ "externalCreatedAt": "2025-12-05T11:02:47Z", "isPublic": true, "preserveSensitiveData": false, "addressId": "00000000-0000-4000-9000-00000000000c", "label": "Processor", "name": "ACTOR", "participantId": "00000000-0000-4000-8000-00000000000c"}ACTOR — Hauler
{ "externalCreatedAt": "2025-12-05T11:02:47Z", "isPublic": true, "preserveSensitiveData": true, "addressId": "00000000-0000-4000-9000-00000000000b", "label": "Hauler", "name": "ACTOR", "participantId": "00000000-0000-4000-8000-00000000000b"}ACTOR — Integrator
{ "externalCreatedAt": "2025-12-05T11:02:47Z", "isPublic": true, "preserveSensitiveData": false, "addressId": "00000000-0000-4000-9000-00000000000e", "label": "Integrator", "name": "ACTOR", "participantId": "00000000-0000-4000-8000-00000000000e"}Pick-up
{ "externalCreatedAt": "2025-12-05T11:02:47Z", "isPublic": true, "addressId": "00000000-0000-4000-9000-00000000000a", "name": "Pick-up", "participantId": "00000000-0000-4000-8000-00000000000a", "metadata": { "attributes": [ { "isPublic": true, "name": "Description", "value": "Waste picked up at the waste generator site" }, { "isPublic": true, "name": "Local Waste Classification ID", "value": "02 01 03" }, { "isPublic": true, "name": "Local Waste Classification Description", "value": "Resíduos de tecidos vegetais" }, { "sensitive": true, "isPublic": true, "name": "Vehicle License Plate", "value": "ABC1D23" }, { "isPublic": true, "name": "Vehicle Type", "value": "Truck" }, { "sensitive": true, "isPublic": true, "name": "Driver Identifier", "value": "00000000-0000-4000-8000-00000000d21f" } ] }}| Attribute | Required | Type | Accepted values | Visibility | Notes |
|---|---|---|---|---|---|
Description | No | string | Public | ||
Local Waste Classification ID | Yes | string | Public | Ibama waste classification code, such as 02 01 03. It must be a code accepted for the MassID subtype. | |
Local Waste Classification Description | Yes | string | Public | Official Ibama description, in Portuguese, of the code sent in Local Waste Classification ID. | |
Vehicle License Plate | Yes | string | Public, masked | Required for every Vehicle Type: the check for duplicate MassIDs uses it. Unless Vehicle Type is Bicycle, Cart, Sludge Pipes or Others, it must be a plate in the form ABC1D23, ABC1234 or AB1234; for those types any non-empty identifier is accepted. | |
Vehicle Type | Yes | string |
| Public | |
Driver Identifier | Conditional | string | Public, masked | Send either this or Driver Identifier Exemption Justification, never both. Neither is needed when Vehicle Type is Sludge Pipes. | |
Driver Identifier Exemption Justification | Conditional | string | Public | Reason Driver Identifier is not sent. Send it instead of Driver Identifier: sending both is rejected. | |
Vehicle Description | Conditional | string | — | Required when Vehicle Type is Others: describe the vehicle used. | |
Waste Origin | No | string | — | Leave it out, or send any value other than Unidentified. Unidentified is rejected when the MassID has a Waste Generator ACTOR event, and the check for duplicate MassIDs fails every MassID that has no such event. | |
Captured GPS Latitude | No | number | — | Decimal degrees from -90 to 90, used only when Captured GPS Longitude is also sent. A position more than 2 km from the participant's accredited address can fail the audit. | |
Captured GPS Longitude | No | number | — | Decimal degrees from -180 to 180, used only when Captured GPS Latitude is also sent. A position more than 2 km from the participant's accredited address can fail the audit. |
Transport Manifest
{ "externalCreatedAt": "2025-12-05T11:02:47Z", "isPublic": true, "addressId": "00000000-0000-4000-9000-00000000000a", "name": "Transport Manifest", "participantId": "00000000-0000-4000-8000-00000000000a", "value": 1201.925, "metadata": { "attributes": [ { "isPublic": true, "name": "Document Type", "value": "MTR" }, { "isPublic": true, "name": "Document Number", "value": "DOC-EXAMPLE-0001" }, { "format": "DATE", "isPublic": true, "name": "Issue Date", "value": "2025-02-09" } ] }, "attachments": [ { "fileName": "transport-manifest.pdf", "isPublic": false, "label": "Transport Manifest" } ]}| Attribute | Required | Type | Accepted values | Visibility | Notes |
|---|---|---|---|---|---|
Document Type | Conditional | string |
| Public | Required when the manifest file is attached. It is not checked when Exemption Justification replaces the attachment. |
Document Number | Conditional | string | Public | Required when the manifest file is attached. It is not checked when Exemption Justification replaces the attachment. | |
Issue Date | Conditional | stringformat: DATE | Public | Required when the manifest file is attached. It is not checked when Exemption Justification replaces the attachment. | |
Exemption Justification | Conditional | string | Public | Reason the manifest file is not attached. Send it only without the attachment: sending both is rejected, and so is sending neither. |
Weighing
{ "externalCreatedAt": "2025-12-05T11:02:47Z", "isPublic": true, "addressId": "00000000-0000-4000-9000-00000000000a", "name": "Weighing", "participantId": "00000000-0000-4000-8000-00000000000a", "value": 1201.925, "metadata": { "attributes": [ { "isPublic": true, "name": "Description", "value": "Weighing captured at waste generator site" }, { "isPublic": true, "name": "Weighing Capture Method", "value": "Digital" }, { "isPublic": true, "name": "Scale Type", "value": "Floor Scale" }, { "isPublic": true, "name": "Container Type", "value": "Drum" }, { "isPublic": true, "name": "Container Quantity", "value": 1 }, { "format": "KILOGRAM", "isPublic": true, "name": "Container Capacity", "value": 100 }, { "format": "KILOGRAM", "isPublic": true, "name": "Gross Weight", "value": 1211.925 }, { "format": "KILOGRAM", "isPublic": true, "name": "Tare", "value": 10 }, { "sensitive": true, "isPublic": true, "name": "Vehicle License Plate", "value": "ABC1D23" } ] }}| Attribute | Required | Type | Accepted values | Visibility | Notes |
|---|---|---|---|---|---|
Description | Yes | string | Public | ||
Weighing Capture Method | Yes | string |
| Public | |
Scale Type | Yes | string |
| Public | Must be the scale type registered in the recycler's accreditation. A weighing sent as two Weighing events must use Weighbridge (Truck Scale) or Weighbridge. |
Container Type | Yes | string | Public | Must be Truck when the weighing is sent as two Weighing events. | |
Container Quantity | Conditional | number | — | Whole number greater than 0, required unless Container Type is Truck, in which case it must not be sent. An approved exception in the recycler's accreditation also waives it. | |
Container Capacity | Conditional | numberformat: KILOGRAM | — | Greater than 0, required unless the recycler's accreditation carries an approved exception for it. | |
Gross Weight | Conditional | numberformat: KILOGRAM | Public | Greater than 0, required unless the recycler's accreditation carries an approved exception for Tare. When Tare and Container Quantity are also sent, the event value must equal Gross Weight minus (Tare multiplied by Container Quantity). | |
Tare | Conditional | numberformat: KILOGRAM | Public | Weight of one empty container, greater than 0, required unless the recycler's accreditation carries an approved exception for it. | |
Vehicle License Plate | Yes | string | Public, masked | Plate in the form ABC1D23, ABC1234 or AB1234. A weighing sent as two Weighing events must carry the same Vehicle License Plate, Gross Weight, Container Capacity, Container Type, Scale Type and Weighing Capture Method on both. |
Drop-off
{ "externalCreatedAt": "2025-12-05T11:02:47Z", "isPublic": true, "addressId": "00000000-0000-4000-9000-00000000000d", "name": "Drop-off", "participantId": "00000000-0000-4000-8000-00000000000d", "metadata": { "attributes": [ { "isPublic": true, "name": "Description", "value": "Waste deposited in Windrow number 1" }, { "isPublic": true, "name": "Receiving Operator Identifier", "value": "00000000-0000-4000-8000-00000000000c" } ] }}| Attribute | Required | Type | Accepted values | Visibility | Notes |
|---|---|---|---|---|---|
Description | No | string | Public | ||
Receiving Operator Identifier | Yes | string | Public | ||
Captured GPS Latitude | No | number | — | Decimal degrees from -90 to 90, used only when Captured GPS Longitude is also sent. A position more than 2 km from the participant's accredited address can fail the audit. | |
Captured GPS Longitude | No | number | — | Decimal degrees from -180 to 180, used only when Captured GPS Latitude is also sent. A position more than 2 km from the participant's accredited address can fail the audit. |
Sorting
{ "externalCreatedAt": "2025-12-05T11:02:47Z", "isPublic": true, "addressId": "00000000-0000-4000-9000-00000000000c", "name": "Sorting", "participantId": "00000000-0000-4000-8000-00000000000c", "value": 1189.906, "metadata": { "attributes": [ { "isPublic": true, "name": "Description", "value": "Sorting factor determined by a third-party audit" }, { "format": "KILOGRAM", "isPublic": true, "name": "Gross Weight", "value": 1201.925 }, { "format": "KILOGRAM", "isPublic": true, "name": "Deducted Weight", "value": 12.019 } ] }}| Attribute | Required | Type | Accepted values | Visibility | Notes |
|---|---|---|---|---|---|
Description | Yes | string | Public | ||
Gross Weight | Yes | numberformat: KILOGRAM | Public | Greater than 0. It must equal the event value (not the Gross Weight attribute) of the most recent earlier event that carries one, normally the Weighing event. | |
Deducted Weight | Yes | numberformat: KILOGRAM | Public | Greater than 0 and lower than Gross Weight: it must equal Gross Weight multiplied by the sorting factor in the recycler's accreditation. The event value must equal Gross Weight minus Deducted Weight. |
Recycled
{ "externalCreatedAt": "2026-02-22T10:35:12.000Z", "isPublic": true, "addressId": "00000000-0000-4000-9000-00000000000d", "name": "Recycled", "participantId": "00000000-0000-4000-8000-00000000000d", "metadata": { "attributes": [ { "isPublic": true, "name": "Description", "value": "Composting process completed. The recycling completion date is recorded by a conservative estimate determined and verified by a third-party audit for the recycler" } ] }}| Attribute | Required | Type | Accepted values | Visibility | Notes |
|---|---|---|---|---|---|
Description | No | string | Public |
Recycling Manifest
{ "externalCreatedAt": "2025-12-05T11:02:47Z", "isPublic": true, "addressId": "00000000-0000-4000-9000-00000000000d", "name": "Recycling Manifest", "participantId": "00000000-0000-4000-8000-00000000000d", "value": 1201.925, "metadata": { "attributes": [ { "isPublic": true, "name": "Document Type", "value": "CDF" }, { "isPublic": true, "name": "Document Number", "value": "DOC-EXAMPLE-0002" }, { "format": "DATE", "isPublic": true, "name": "Issue Date", "value": "2025-03-10" } ] }, "attachments": [ { "fileName": "recycling-manifest.pdf", "isPublic": false, "label": "Recycling Manifest" } ]}| Attribute | Required | Type | Accepted values | Visibility | Notes |
|---|---|---|---|---|---|
Document Type | Conditional | string |
| Public | Required when the manifest file is attached. It is not checked when Exemption Justification replaces the attachment. |
Document Number | Conditional | string | Public | Required when the manifest file is attached. It is not checked when Exemption Justification replaces the attachment. | |
Issue Date | Conditional | stringformat: DATE | Public | Required when the manifest file is attached. It is not checked when Exemption Justification replaces the attachment. | |
Exemption Justification | Conditional | string | — | Reason the manifest file is not attached. Send it only without the attachment: sending both is rejected, and so is sending neither. |