openapi: 3.0.3 info: title: 'API Reference' description: "Welcome to the Rejoose API Documentation\n\n

Our APIs help you integrate sustainability data into your workflows. This documentation covers the following endpoint groups, each serving a specific purpose. Go to the section relevant to your needs:

\n\n\n\n

Before you send your first document, read Reporting IDs: the ids you send decide the reports you can pull later.

\n\n## How Our APIs Work\n\n\n\n## Getting Started\n\n

Once your contract is signed, we'll begin a thorough onboarding process.

\n\n

If you need support before the contract is finalized, please reach out - we'll do our best to assist. Pre-contract support may incur a cost, depending on scope and hours required (we'll inform you beforehand).

\n\n## Tips for Using the Docs\n\n\n\n" version: 1.0.0 servers: - url: 'https://app.rejoose.com' tags: - name: e.voice description: "\n\n\n\n\n

e.voice – Carbon data on invoice level

\n

The e.voice API enables the generation of an environmental invoice (e.voice), serving as the carbon counterpart to a financial invoice. It bridges financial transactions with their associated carbon impact, allowing businesses to track and report emissions seamlessly.

\n

When using the e.voice API, you have flexible implementation options:

\n\n

Upon a successful transaction, the API provides:

\n\n\n\nKeep in mind that you do not need to save the above data in your ERP system (or similar), as everything is archived for you in the\ne.hub and for your customers via e.insights.\n\n\n

e.voice API – Options Explained

\n\n\n

Quick tips

\n\n

Reading an e.voice

\n\n

Product data validation. After the request validation, each device is checked against the Rejoose product data. When a device is rejected there, the 422 errors object names it by its position in the array you sent, as products.N.<field> (N counts from 0 and follows the order of devices), and manufacturer_part_number stands for the device's external_id. When no single field can be named, errors is a plain message instead.

\n\n

You can access more detailed information in the API documentation by expanding objects marked with a small black arrow (⯈), such as ⯈ client or ⯈ devices. Simply click the arrow to reveal additional data fields.

" - name: 'e.voice - circularity' description: "\n\n\nProvides carbon footprint and avoided emissions data for IT products in the ITAD industry. This API is used when receiving used IT products for refurbishment or selling refurbished products for reuse.\n\n

The response includes:

\n\n\n

The two avoided e-waste figures use different conventions:

\n\n\n

Fields per device. Every caller receives the same fields: e.voice circularities have no enterprise-only fields. Refurbished devices carry refurbishment_impact_basis, variant and rfi_per_unit_kg_co2_eq; devices with recycled=true carry recycling_avoided_e_waste_kg and recycling_avoided_emissions_kg_co2_eq, and the document carries material_flow. The list endpoint returns each document with its totals and devices exactly as the single document endpoint does, without material_flow.

\n

Refurbishment impact. Each refurbished device is paid by your certified facility RFI, the Rejoose standard RFI, or your refurbishment percentage, and its refurbishment_impact_basis tells you which. The document carries the facility and RFI versions used. The refurbishment fields are the values set when the document was generated: the daily update refreshes a device's weight and footprint, but keeps the same RFI. See Refurbishment impact for the details.

\n

Device weight. Transport is the only part of the certified figure that depends on the device's weight, so each device shows two parts: rfi_per_unit_fixed_kg_co2_eq (labour, parts, storage, and packaging) and rfi_transport_co2_eq_per_tonne (kg CO₂e per tonne of device). rfi_per_unit_kg_co2_eq = rfi_per_unit_fixed_kg_co2_eq + rfi_transport_co2_eq_per_tonne × weight_kg / 1000. weight_kg comes from Rejoose's product data (weight_from_product says whether it is the product's own weight or the category average). A device without a known weight uses the variant's average device weight.

\n\nBoth datasets are used for customer reporting and internal documentation." - name: Reports description: "Generate aggregate PDF reports of your e.voice and e.voice circularity data over a period, and fetch reports that were queued.\n\n

For supplier partners only. The report endpoints are available to supplier partners, the organisations that issue e.voices and e.voice circularities. A request from any other partner type is refused with a 403. The RCIBR report needs an API key with the e.voice circularity ability, the CSR report one with the e.voice ability, and the report request endpoints accept either.

\n\n

How a report is delivered:

\n\n\n

The 200 response is always the raw PDF (Content-Type: application/pdf), whatever the Accept header; send base64=true for a JSON body. Treat an unknown status or fallback_reason value as \"not finished\".

\n\n

Only supplier partners can use this endpoint. The API report does not contain the \"Company-Level Carbon Data\" section (the table per company id); the report you generate in e.hub keeps it. The 25 requests per minute and the 10 outstanding reports are shared with the CSR endpoint. An unchanged period is served from a cache, so a repeated request is fast; the X-Report-Cache response header is hit or miss.

" - name: e.product description: "

The e.product API provides carbon footprint data for individual products, making it ideal for use in e-commerce, quotations, and other during-sales scenarios where a general carbon assessment is needed. For more detailed, transaction-specific reporting at the customer level, you should be using the e.voice API, which complements e.product by focusing on post-sales impact and needed documentation.

\n

How Product Identification Works

\n

In this solution, one product is defined as a country-specific dataset based on a combination of:

\n\n

This ensures that the footprint reflects region-specific factors such as electricity mix and product lifecycle variations.

\n\n

API Response

\n

When querying the e.product endpoint, the API returns the following carbon footprint data:

\n\n\n

Reading the response

\n\n\n

Please look through the API docs for more details or contact support@rejoose.com for assistance.

\n\n\n\n

Usage limit

\n

Your subscription covers a number of unique products per subscription period. A product counts once per manufacturer part number, brand and country (refurbished and recycled products once regardless of country), and only when data is returned. Retrieving a product you already retrieved in the period is free and stays possible after the limit is reached; only products new to the period are then refused with a 403 that names them.

\n\n


e.product+

\n

e.product+ is an extended version of e.product that returns full life cycle assessment (LCA) data for a product, rather than the total carbon footprint alone. A standard e.product response provides the total carbon footprint, refurbishment impact, and avoided emissions; e.product+ adds the breakdown behind the total.

\n

Additional fields:

\n\n

Recycled lookups (recycled=1) are available on e.product+ only, and the response includes:

\n\n

e.product+ requires a separate subscription; without it the additional fields are left out of the response entirely (they are not returned as null) and recycled lookups are refused with a 422. To enable access, contact support@rejoose.com.

" - name: Categories description: "

The Categories endpoint lists every category Rejoose recognises, together with the other names each one is known by. Use it to map your own product groups to Rejoose categories before you send devices to e.voice, e.voice circularity, or e.product, and to keep that mapping current as the catalogue grows.

\n

Also available in e.hub

\n

The same list is available in e.hub under Developer → Available categories, for users with the admin or developer role. There you can search it by name or tag without using the API.

" - name: Groups description: "

Enterprise Grouping in e.hub

\n

The e.hub Enterprise Functionality is an advanced feature exclusively available to Enterprise Subscription customers. It is designed for companies operating with multiple ERP systems that do not share common company or organisation identifiers. This is particularly useful for businesses using different ERP systems across regions, such as SAP in the EU and Business Central in the US, where customer naming conventions and identifiers are not aligned.

\n

Seamless Data Consolidation Across Multiple ERP Systems

\n

With this feature, you can link and unify organisation data from multiple disconnected ERP systems into a single Group Structure, ensuring a consistent, company-wide carbon reporting framework.

\n\n

Three-Tiered Reporting Structure

\n

The grouping model enables full organisational alignment across various business units. How the three levels relate to the ids you send is explained under Reporting IDs:

\n\n

Each Group can contain multiple Organisations, and each Organisation can include hundreds of subsidiaries, ensuring scalability for even the largest enterprises.

\n

Data Extraction & Integration

\n

A dedicated data extraction endpoint allows you to:

\n \n\n" components: securitySchemes: default: type: http scheme: bearer description: "You can create an API key in Rejoose e.hub®: open **Developer → API keys** and click **Create API key**.\n\n## API key abilities\n\nWhen you create an API key in e.hub, you choose its abilities. An ability decides which endpoints the key can call. Each endpoint below shows the abilities it accepts next to **API key ability**. When it lists more than one, any one of them is enough. A key without a fitting ability gets `403` with `{\"data\": null, \"errors\": {\"forbidden\": [\"Invalid ability provided.\"]}, \"status\": 403}`.\n\n| Ability | What it opens |\n|---|---|\n| `API_EVOICE` | e.voice: generate, list and fetch e.voices, and the CSR report. Groups also need an e.hub Enterprise subscription. |\n| `API_EVOICE_CIRCULARITY` | e.voice circularity: generate, list and fetch e.voice circularities and their PDF, and the RCIBR report. |\n| `API_PRODUCT` | e.product: product lookup, bulk lookup and product changes. |\n\nSome endpoints accept more than one ability: a queued report's status and download take `API_EVOICE` or `API_EVOICE_CIRCULARITY`, and Categories takes any of the three.\n\nGive each key only the abilities its system needs.\n\n# Errors\n\n

A request that fails answers with an HTTP status code and a JSON body that says what went wrong. Each endpoint shows the errors that are specific to it in its example responses, and lists the shared ones under Other responses. Those link to the sections below.

\n\n\n\n\n\n\n\n\n\n\n\n
StatusWhen
401No or invalid API key
403The key or the account may not call the endpoint
404No record with that id for your organisation
422A parameter failed validation
429Rate limit exceeded
5xxA problem on our side
\n\n## Unauthenticated (401)\n\n
\n

The request carried no API key, or a key that is invalid or revoked. Send the key as Authorization: Bearer {YOUR_API_KEY}; see Authenticating requests.

\n
{\n  \"data\": null,\n  \"errors\": {\n    \"unauthenticated\": [\n      \"Unauthenticated.\"\n    ]\n  },\n  \"status\": 401\n}
\n
\n\n## Forbidden (403)\n\n
\n

The key is valid, but it or your account may not call this endpoint. The cause decides the body.

\n\n

The API key lacks the ability the endpoint needs – every endpoint. See API key abilities.

\n
{\n  \"data\": null,\n  \"errors\": {\n    \"forbidden\": [\n      \"Invalid ability provided.\"\n    ]\n  },\n  \"status\": 403\n}
\n\n

Your subscription usage limit is reached – e.voice and e.voice circularity generate, and the report endpoints. The message names the product. e.product documents its own usage-limit responses on its endpoints.

\n
{\n  \"data\": null,\n  \"errors\": {\n    \"forbidden\": [\n      \"Your max limit on e.voice is reached. Contact us on \\\"sales@rejoose.com\\\" or \\\"+45 71 74 70 30\\\" to change your limit.\"\n    ]\n  },\n  \"status\": 403\n}
\n\n

Your organisation is not a supplier partner – the report endpoints.

\n
{\n  \"data\": null,\n  \"errors\": {\n    \"forbidden\": [\n      \"Only supplier partners can use this endpoint.\"\n    ]\n  },\n  \"status\": 403\n}
\n\n

Your account is restricted to sandbox mode and called the production environment – the report endpoints.

\n
{\n  \"data\": null,\n  \"errors\": {\n    \"forbidden\": [\n      \"Your account is restricted to sandbox mode. Please use the sandbox environment.\"\n    ]\n  },\n  \"status\": 403\n}
\n\n

Your organisation has no e.hub Enterprise subscription – the group endpoints.

\n
{\n  \"data\": null,\n  \"errors\": {\n    \"forbidden\": [\n      \"You are not an enterprise partner.\"\n    ]\n  },\n  \"status\": 403\n}
\n
\n\n## Not found (404)\n\n
\n

The id in the URL does not name a record of your organisation: it was never created, it is spelled differently, or it was not URL-encoded twice as described under IDs in URLs. A queued report also answers 404 once it is older than 7 days. The message names what was looked up.

\n
{\n  \"data\": null,\n  \"errors\": {\n    \"not_found\": [\n      \"Evoice with external_invoice_id 2024-001 not found\"\n    ]\n  },\n  \"status\": 404\n}
\n

The e.product lookup is the exception: a product without data answers 404 with the product echoed back and null carbon values, as shown on that endpoint.

\n
\n\n## Validation failed (422)\n\n
\n

A query or body parameter did not pass the rules in the endpoint's parameter table. The body names each parameter with a dot path, such as client.name or products.0.brand, and lists its messages. Nothing was created or billed.

\n
{\n  \"data\": null,\n  \"errors\": {\n    \"country_code\": [\n      \"The country code field is required.\"\n    ],\n    \"products.0.brand\": [\n      \"The products.0.brand field is required.\"\n    ]\n  },\n  \"status\": 422\n}
\n

An endpoint whose 422 body differs from this shape says so in its own 422 example.

\n
\n\n## Too many requests (429)\n\n
\n

Every endpoint shares the per-minute limit described under Rate Limiting, and the report endpoints have a second limit of their own, 25 requests per minute per partner by default. Both answer with a Retry-After header and this body; the message names the limit.

\n
{\n  \"data\": null,\n  \"errors\": {\n    \"too_many_requests\": [\n      \"Too many requests. Please wait a moment and try again.\"\n    ]\n  },\n  \"status\": 429\n}
\n
\n\n## Server errors (5xx)\n\n
\n

Something went wrong on our side. These are rare and safe to retry after a short wait. If the problem persists, contact support@rejoose.com.

\n

500 – an unexpected error. We are notified automatically.

\n
{\n  \"data\": null,\n  \"errors\": {\n    \"internal_server_error\": [\n      \"Something went wrong. We have been notified and will fix it soon!\"\n    ]\n  },\n  \"status\": 500\n}
\n

503 – a service we depend on is temporarily unavailable: product data for e.product, e.voice, and e.voice circularity; the category catalogue for categories; PDF generation for reports. The message names the service.

\n
{\n  \"data\": null,\n  \"errors\": {\n    \"service_unavailable\": [\n      \"Product data is temporarily unavailable. Please try again in a few minutes.\"\n    ]\n  },\n  \"status\": 503\n}
\n

An error that escapes the handling of the API itself answers with a short body:

\n
{\n  \"data\": null,\n  \"errors\": {\n    \"internal_server_error\": [\n      \"Server Error\"\n    ]\n  },\n  \"status\": 500\n}
\n
\n" schemas: ErrorEnvelope: type: object description: 'The envelope every error the API itself refuses is sent in. `errors` holds one key per cause with a list of messages; validation errors use the parameter name as the key.' required: - data - errors - status properties: data: type: object nullable: true errors: type: object additionalProperties: type: array items: type: string status: type: integer responses: Unauthenticated: description: 'No or invalid API key. See "Errors" in the API reference.' content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' examples: unauthenticated: summary: 'No or invalid API key' value: data: null errors: unauthenticated: - Unauthenticated. status: 401 InvalidAbility: description: 'API key without the required ability. See "Errors" in the API reference.' content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' examples: invalidAbility: summary: 'API key without the required ability' value: data: null errors: forbidden: - 'Invalid ability provided.' status: 403 UsageLimitReached: description: 'Subscription usage limit reached. See "Errors" in the API reference.' content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' examples: evoice: summary: 'Subscription usage limit reached' value: data: null errors: forbidden: - 'Your max limit on e.voice is reached. Contact us on "sales@rejoose.com" or "+45 71 74 70 30" to change your limit.' status: 403 evoiceCircularity: summary: 'Subscription usage limit reached' value: data: null errors: forbidden: - 'Your max limit on e.voice circularity is reached. Contact us on "sales@rejoose.com" or "+45 71 74 70 30" to change your limit.' status: 403 NotSupplierPartner: description: 'Not a supplier partner. See "Errors" in the API reference.' content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' examples: notSupplier: summary: 'Not a supplier partner' value: data: null errors: forbidden: - 'Only supplier partners can use this endpoint.' status: 403 SandboxOnlyAccount: description: 'Account restricted to sandbox mode. See "Errors" in the API reference.' content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' examples: sandboxOnly: summary: 'Account restricted to sandbox mode' value: data: null errors: forbidden: - 'Your account is restricted to sandbox mode. Please use the sandbox environment.' status: 403 NotEnterprisePartner: description: 'Not an e.hub Enterprise partner. See "Errors" in the API reference.' content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' examples: notEnterprise: summary: 'Not an e.hub Enterprise partner' value: data: null errors: forbidden: - 'You are not an enterprise partner.' status: 403 NotFound: description: 'No record with that id for your organisation. See "Errors" in the API reference.' content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' examples: notFound: summary: 'No record with that id for your organisation' value: data: null errors: not_found: - 'Evoice with external_invoice_id 2024-001 not found' status: 404 ValidationFailed: description: 'A parameter failed validation. See "Errors" in the API reference.' content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' examples: validation: summary: 'A parameter failed validation' value: data: null errors: country_code: - 'The country code field is required.' status: 422 TooManyRequests: description: 'Rate limit exceeded. See "Errors" in the API reference.' content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' examples: tooManyRequests: summary: 'Rate limit exceeded' value: data: null errors: too_many_requests: - 'Too many requests. Please wait a moment and try again.' status: 429 tooManyReportRequests: summary: 'Rate limit exceeded' value: data: null errors: too_many_requests: - 'Too many report requests. Please wait a moment and try again.' status: 429 headers: Retry-After: description: 'Seconds to wait before sending the next request.' schema: type: integer ServerError: description: 'A problem on our side or a service we depend on is unavailable. See "Errors" in the API reference.' content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' examples: internalServerError: summary: 'A problem on our side or a service we depend on is unavailable' value: data: null errors: internal_server_error: - 'Something went wrong. We have been notified and will fix it soon!' status: 500 serviceUnavailable: summary: 'A problem on our side or a service we depend on is unavailable' value: data: null errors: service_unavailable: - 'Product data is temporarily unavailable. Please try again in a few minutes.' status: 503 security: - default: [] paths: /api/v3/evoices/generate: post: summary: 'Generate an e.voice' operationId: generateAnEvoice description: 'Generates the e.voice document and returns its data.' parameters: [] responses: 200: description: 'When using deferred' content: application/json: schema: type: object example: success: true data: external_invoice_id: 94825344-eb3a-4b5d-8ac8-6e462f37bba2 properties: success: type: boolean example: true data: type: object properties: external_invoice_id: type: string example: 94825344-eb3a-4b5d-8ac8-6e462f37bba2 201: description: '' content: application/json: schema: oneOf: - description: '' type: object example: success: true data: external_invoice_id: '123456789' external_invoice_date: '2023-09-25' pdf_base64: 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Ci9FbmNvZGluZyAvV2luQW5zaUVuY29kaW5nCj4+CmVuZG9iago5IDAgb2JqCjw8IC9UeXBlIC9Gb250Ci9TdWJ0eXBlIC9UeXBlMQovTmFtZSAvRjIKL0Jhc2VGb250IC9IZWx2ZXRpY2EtQm9sZAovRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZwo+PgplbmRvYmoKMTAgMCBvYmoKPDwgL1R5cGUgL0ZvbnQKL1N1YnR5cGUgL1R5cGUxCi9OYW1lIC9GMwovQmFzZUZvbnQgL1RpbWVzLUJvbGQKL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcKPj4KZW5kb2JqCjExIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovQSAxMiAwIFIKL0JvcmRlciBbMCAwIDBdCi9IIC9JCi9SZWN0IFsgMTk5LjEzNzggMTguMjE4NSAzOTYuMTQyMiAyNy4wMTg1IF0KPj4KZW5kb2JqCjEyIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL1VSSQovVVJJIChodHRwczovL3Jlam9vc2UuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIzLzA2L0V2b2ljZV9FeHBsYWluZXIucGRmKQo+PgplbmRvYmoKeHJlZgowIDEzCjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAwOSAwMDAwMCBuIAowMDAwMDAwMDc0IDAwMDAwIG4gCjAwMDAwMDAxMjAgMDAwMDAgbiAKMDAwMDAwMDI5NSAwMDAwMCBuIAowMDAwMDAwMzI0IDAwMDAwIG4gCjAwMDAwMDA0OTcgMDAwMDAgbiAKMDAwMDAwMDYxOSAwMDAwMCBuIAowMDAwMDAzNTI5IDAwMDAwIG4gCjAwMDAwMDM2MzggMDAwMDAgbiAKMDAwMDAwMzc1MCAwMDAwMCBuIAowMDAwMDAzODU5IDAwMDAwIG4gCjAwMDAwMDM5ODUgMDAwMDAgbiAKdHJhaWxlcgo8PAovU2l6ZSAxMwovUm9vdCAxIDAgUgovSW5mbyA1IDAgUgovSURbPGQ0MjEyYTIwY2E1NTc3NTg1NGNiOWUyNmM3NGRiYjdiPjxkNDIxMmEyMGNhNTU3NzU4NTRjYjllMjZjNzRkYmI3Yj5dCj4+CnN0YXJ0eHJlZgo0MTA0CiUlRU9GCg== country_code: DK facility_external_id: CPH-01 rfi_external_id: CPH-01-2023 rfi_version: 1 standard_rfi_external_id: standard-2023 standard_rfi_version: 1 carbon_intensity_gram: 123 tec_annual_kwh: 478.65 total_kg_co2_eq: 1301.51 manufacturing_kg_co2_eq: 650.25 transportation_kg_co2_eq: 50.13 eol_kg_co2_eq: 53.52 status: finalized type: evoice source_type: api created_at: '2024-01-05T13:11:49.000000Z' updated_at: '2024-01-05T13:11:50.000000Z' unit: metric client: name: 'Eco-Friendly Solutions Ltd' organization_id: EcoFriendly-4987 company_id: ECOF1234567 vat_number: ECOF1234567 address: '100 Enviro Way' address2: 'Sustainability Lane 3' zip_code: ECO321 city: GreenVille country: Denmark sender: name: 'Green Supply Co. Copenhagen Branch' company_id: DK12345678 vat_number: DK12345678 address: 'Havnegade 12' address2: 'Building B' zip_code: '1058' city: Copenhagen country: Denmark devices: - external_id: RE8989121 original_manufacturer_part_number: 62B6MAT3EU brand: Lenovo model_name: 'ThinkPad T480' category: Notebook quantity: 10 lifetime_months: 72 tec_annual_kwh: 377.25 scope_2_kg_co2_eq: 278.41 scope_3_kg_co2_eq: 249.27 total_kg_co2_eq: 527.68 manufacturing_kg_co2_eq: null transportation_kg_co2_eq: null eol_kg_co2_eq: 18.42 refurbished: true variant: full refurbishment_impact_basis: rfi_category excluded: false epeat_tier: silver epeat_climate_plus: true epeat_status: active epeat_certificate_url: 'https://epeat.net/product-details/92ff91678f38486c' tco_certified: true tco_certificate_url: 'https://tcocertified.com/product-finder/?cert=D1010052' avoided_emissions_kg_co2_eq: 256.68 - external_id: SM-S918BZKDEEB original_manufacturer_part_number: null brand: Samsung model_name: 'Galaxy S23 Ultra' category: Smartphone quantity: 10 lifetime_months: 30 tec_annual_kwh: 101.4 scope_2_kg_co2_eq: 31.18 scope_3_kg_co2_eq: 742.65 total_kg_co2_eq: 773.83 manufacturing_kg_co2_eq: 650.25 transportation_kg_co2_eq: 50.13 eol_kg_co2_eq: 35.1 refurbished: false variant: null refurbishment_impact_basis: null excluded: false epeat_tier: null epeat_climate_plus: null epeat_status: null epeat_certificate_url: null tco_certified: null tco_certificate_url: null avoided_emissions_kg_co2_eq: 0 links: self: 'https://app.rejoose.com/api/v3/evoices/123456789' pdf: 'https://app.rejoose.com/api/v3/evoices/123456789/pdf' base_64_pdf: 'https://app.rejoose.com/api/v3/evoices/123456789/pdf?base64=1' properties: success: type: boolean example: true data: type: object properties: external_invoice_id: type: string example: '123456789' external_invoice_date: type: string example: '2023-09-25' pdf_base64: type: string example: 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Ci9FbmNvZGluZyAvV2luQW5zaUVuY29kaW5nCj4+CmVuZG9iago5IDAgb2JqCjw8IC9UeXBlIC9Gb250Ci9TdWJ0eXBlIC9UeXBlMQovTmFtZSAvRjIKL0Jhc2VGb250IC9IZWx2ZXRpY2EtQm9sZAovRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZwo+PgplbmRvYmoKMTAgMCBvYmoKPDwgL1R5cGUgL0ZvbnQKL1N1YnR5cGUgL1R5cGUxCi9OYW1lIC9GMwovQmFzZUZvbnQgL1RpbWVzLUJvbGQKL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcKPj4KZW5kb2JqCjExIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovQSAxMiAwIFIKL0JvcmRlciBbMCAwIDBdCi9IIC9JCi9SZWN0IFsgMTk5LjEzNzggMTguMjE4NSAzOTYuMTQyMiAyNy4wMTg1IF0KPj4KZW5kb2JqCjEyIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL1VSSQovVVJJIChodHRwczovL3Jlam9vc2UuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIzLzA2L0V2b2ljZV9FeHBsYWluZXIucGRmKQo+PgplbmRvYmoKeHJlZgowIDEzCjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAwOSAwMDAwMCBuIAowMDAwMDAwMDc0IDAwMDAwIG4gCjAwMDAwMDAxMjAgMDAwMDAgbiAKMDAwMDAwMDI5NSAwMDAwMCBuIAowMDAwMDAwMzI0IDAwMDAwIG4gCjAwMDAwMDA0OTcgMDAwMDAgbiAKMDAwMDAwMDYxOSAwMDAwMCBuIAowMDAwMDAzNTI5IDAwMDAwIG4gCjAwMDAwMDM2MzggMDAwMDAgbiAKMDAwMDAwMzc1MCAwMDAwMCBuIAowMDAwMDAzODU5IDAwMDAwIG4gCjAwMDAwMDM5ODUgMDAwMDAgbiAKdHJhaWxlcgo8PAovU2l6ZSAxMwovUm9vdCAxIDAgUgovSW5mbyA1IDAgUgovSURbPGQ0MjEyYTIwY2E1NTc3NTg1NGNiOWUyNmM3NGRiYjdiPjxkNDIxMmEyMGNhNTU3NzU4NTRjYjllMjZjNzRkYmI3Yj5dCj4+CnN0YXJ0eHJlZgo0MTA0CiUlRU9GCg== country_code: type: string example: DK facility_external_id: type: string example: CPH-01 rfi_external_id: type: string example: CPH-01-2023 rfi_version: type: integer example: 1 standard_rfi_external_id: type: string example: standard-2023 standard_rfi_version: type: integer example: 1 carbon_intensity_gram: type: integer example: 123 tec_annual_kwh: type: number example: 478.65 total_kg_co2_eq: type: number example: 1301.51 manufacturing_kg_co2_eq: type: number example: 650.25 transportation_kg_co2_eq: type: number example: 50.13 eol_kg_co2_eq: type: number example: 53.52 status: type: string example: finalized type: type: string example: evoice source_type: type: string example: api created_at: type: string example: '2024-01-05T13:11:49.000000Z' updated_at: type: string example: '2024-01-05T13:11:50.000000Z' unit: type: string example: metric client: type: object properties: name: type: string example: 'Eco-Friendly Solutions Ltd' organization_id: type: string example: EcoFriendly-4987 company_id: type: string example: ECOF1234567 vat_number: type: string example: ECOF1234567 address: type: string example: '100 Enviro Way' address2: type: string example: 'Sustainability Lane 3' zip_code: type: string example: ECO321 city: type: string example: GreenVille country: type: string example: Denmark sender: type: object properties: name: type: string example: 'Green Supply Co. Copenhagen Branch' company_id: type: string example: DK12345678 vat_number: type: string example: DK12345678 address: type: string example: 'Havnegade 12' address2: type: string example: 'Building B' zip_code: type: string example: '1058' city: type: string example: Copenhagen country: type: string example: Denmark devices: type: array example: - external_id: RE8989121 original_manufacturer_part_number: 62B6MAT3EU brand: Lenovo model_name: 'ThinkPad T480' category: Notebook quantity: 10 lifetime_months: 72 tec_annual_kwh: 377.25 scope_2_kg_co2_eq: 278.41 scope_3_kg_co2_eq: 249.27 total_kg_co2_eq: 527.68 manufacturing_kg_co2_eq: null transportation_kg_co2_eq: null eol_kg_co2_eq: 18.42 refurbished: true variant: full refurbishment_impact_basis: rfi_category excluded: false epeat_tier: silver epeat_climate_plus: true epeat_status: active epeat_certificate_url: 'https://epeat.net/product-details/92ff91678f38486c' tco_certified: true tco_certificate_url: 'https://tcocertified.com/product-finder/?cert=D1010052' avoided_emissions_kg_co2_eq: 256.68 - external_id: SM-S918BZKDEEB original_manufacturer_part_number: null brand: Samsung model_name: 'Galaxy S23 Ultra' category: Smartphone quantity: 10 lifetime_months: 30 tec_annual_kwh: 101.4 scope_2_kg_co2_eq: 31.18 scope_3_kg_co2_eq: 742.65 total_kg_co2_eq: 773.83 manufacturing_kg_co2_eq: 650.25 transportation_kg_co2_eq: 50.13 eol_kg_co2_eq: 35.1 refurbished: false variant: null refurbishment_impact_basis: null excluded: false epeat_tier: null epeat_climate_plus: null epeat_status: null epeat_certificate_url: null tco_certified: null tco_certificate_url: null avoided_emissions_kg_co2_eq: 0 items: type: object properties: external_id: type: string example: RE8989121 original_manufacturer_part_number: type: string example: 62B6MAT3EU brand: type: string example: Lenovo model_name: type: string example: 'ThinkPad T480' category: type: string example: Notebook quantity: type: integer example: 10 lifetime_months: type: integer example: 72 tec_annual_kwh: type: number example: 377.25 scope_2_kg_co2_eq: type: number example: 278.41 scope_3_kg_co2_eq: type: number example: 249.27 total_kg_co2_eq: type: number example: 527.68 manufacturing_kg_co2_eq: type: string example: null nullable: true transportation_kg_co2_eq: type: string example: null nullable: true eol_kg_co2_eq: type: number example: 18.42 refurbished: type: boolean example: true variant: type: string example: full refurbishment_impact_basis: type: string example: rfi_category excluded: type: boolean example: false epeat_tier: type: string example: silver epeat_climate_plus: type: boolean example: true epeat_status: type: string example: active epeat_certificate_url: type: string example: 'https://epeat.net/product-details/92ff91678f38486c' tco_certified: type: boolean example: true tco_certificate_url: type: string example: 'https://tcocertified.com/product-finder/?cert=D1010052' avoided_emissions_kg_co2_eq: type: number example: 256.68 links: type: object properties: self: type: string example: 'https://app.rejoose.com/api/v3/evoices/123456789' pdf: type: string example: 'https://app.rejoose.com/api/v3/evoices/123456789/pdf' base_64_pdf: type: string example: 'https://app.rejoose.com/api/v3/evoices/123456789/pdf?base64=1' - description: 'When using credit_note' type: object example: success: true data: external_invoice_id: '123456789' external_invoice_date: '2023-09-25' pdf_base64: JVBERi0xLjcKMSAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZwovT3V0bGluZXMgMiAwIFIKL1BhZ2VzIDMgMCBSID4+CmVuZG9iagoyIDAgb2JqCjw8IC9UeXBlIC9PdXRsaW5lcyAvQ291bnQgMCA+PgplbmRvYmoKMyAwIG9iago8PCAvVHlwZSAvUGFnZXMKL0tpZHMgWzYgMCBSCl0KL0NvdW50IDEKL1Jlc291cmNlcyA8PAovUHJvY1NldCA0IDAgUgovRm9udCA8PCAKL0YxIDggMCBSCi9GMiA5IDAgUgovRjMgMTAgMCBSCj4+Cj4+Ci9NZWRpYUJveCBbMC4wMDAgMC4wMDAgNTk1LjI4MCA4NDEuODkwXQogPj4KZW5kb2JqCjQgMCBvYmoKWy9QREYgL1RleHQgXQplbmRvYmoKNSAwIG9iago8PAovUHJvZHVjZXIgKP7/AGQAbwBtAHAAZABmACAAMgAuADAALgAzACAAKwAgAEMAUABEAEYpCi9DcmVhdGlvbkRhdGUgKEQ6MjAyNDAxMDUxMzIzMTArMDAnMDAnKQovTW9kRGF0ZSAoRDoyMDI0MDEwNTEzMjMxMCswMCcwMCcpCi9UaXRsZSAo/v8ARQB2AG8AaQBjAGUpCj4+CmVuZG9iago2IDAgb2JqCjw8IC9UeXBlIC9QYWdlCi9NZWRpYUJveCBbMC4wMDAgMC4wMDAgNTk1LjI4MCA4NDEuODkwXQovUGFyZW50IDMgMCBSCi9Bbm5vdHMgWyAxMSAwIFIgXQovQ29udGVudHMgNyAwIFIKPj4KZW5kb2JqCjcgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUKL0xlbmd0aCAyODM3ID4+CnN0cmVhbQp4nK2b23LcNhKG7/UUqORmt0qiiQNxyNXGsezaHCqxpdhV6/LFaIaSGM2Q8gxlRy+VZ9wGB2iCHhIYU/aFytVmA/g/NNANCD75eMJ0xoUkSuRZLgTZEG/gpjOsSSFlZrgYszin0EKzorNgu97wjtQn8LnSJM9YYeCnEIq8eXUCH5DPJCc/k/eEfIC/rMJBKWMHFfZoLWtycfJ6pLntzcnzS+xbs0wpQS5X5NlLRrjt6PKakPf/elP+1TS7kvx4f/HvD+TyZ3J+af0KCi0yRZQUmZTcO4JVOcerRzJwYAV0m0ccXE+hE4wz01JEhnf+7FNTLQdOhVRZbqAnY7JCMeyJZblz+gc/x0mVhejg46TKgrvZ8EDHLOLAIt00YzPeMGNSZVFkbDCp3oKTmuck/DmcVJZnhso9AE4UQru8rXbEkSPLpm4XVU3a25K0TbtYk/tts3pYtmS52F41NSk31W5XNfUuhOy7sFTzkS6gwW15XW7Lemmb7Vq/rupFvaygh3a7qHeLZQutZsFccFNAUHEipQY4hlBFQQAlBUykKaDBDiLtlIY/ASKE0QFF35xiCkLOAEZR5BnnCi0W45QnNxq+026po4UWGYRy57kfsFLQA5UZg2YgQjQVhMKwqPHjnVp63Chwss4m4/CFYygz7Ri+WLTlD4jn9fHCgV1WaBUIx00hIdx6GskC4WgJhI952h4KUNh7omWADKfAIaPwrxqYHDAbjWxR0Ex33gEzGjC7KO/bcnNVbgnsN4TB9M8BiJEDgzPwWRA5zpKMHCcviJycw/fyy8jJYQuBBTQvcnKYzdwcRs5/6/3ahiX4tABC/RhACf19uHj9aAn0RwMIPdEyIIcz4cjNDKAQXRhAkl8vlTbLM2kWV2eiWOkzky/ZmaDi6roslGHs6kkhBcOmnIYh5SzJkHKC+5CSBvZHmKZhSEkDyRLanRVS0lia+WFI/fSwa5tNuX1aPKF4jKeE+D56vHhvCcVH4wk9vWWIzU+DxzYvngbcwng6XzZnL7dVWa/Wj+SiWT/YpLcjv7arp0SRHSwHCH0UeUsqirzMIIo0hAPVX0YRWI3UM6NIC/iCjkRR81C320coOlZPS209ACyNEgD6uPEA0BIAiEVS74mWATqcCoduZiSF7MJIevHLkyIGBlUYHkaMs8QixldjmonQ01mSseZABLHmKrsvYk2ajBozM9YUzHvORmJtX75WdVvWu6p9fFq8IT6MtwQ+9ER86JnAF8blHh9aAnzRSEVPtAzA9xO5Bz8zUkPyYaRSiJqbZ3fvbgPiySOohFMd5VjMBMc1f1Jpm34KE0cfyaAxmR+eS47YjoNWYBCswE29b+XtoiXf/0DOf/r9JWgVcOIc84ayhYsRbwqjPa8/VduGvFs8klPbDmd0pInCiEzwkSZebcuyflut1+UpeVHWm8X2buBu7MAFKXSRSc29f8CUhCTHpwUWp21jel4uHu7v11VYEkzOipEQrWJ6WiZuGdBvaiLKvxeb+3X5n+3eP1s2m/Bs7yQUWmaiWw69RXUWOLnD4ZLC0hqzyAMLd5a+HW+ZPN7zg8M9+gq/SLH9vSVxZeP9Yfnl/iZlMDGX3TH+1bs/khMj7AYApfV0WxSWOD0tyN0N+en3wTWLgF2A6e66hQWu/YUOG36u9honeyo/xmOSmSw3kghNATmDvUrD0KEF6B4UwJ51ffy27taXMLZNu6tTGJ6BndBbpnZYcFSMdp+5iHIG2HEV3Vcfh6PYw4aBa8PgUzh6aDFyantBvo8jwFEGDLQyAwZjo7Z+TJhAL4NZkzB7Kb3WU0Ku6gWj5QjFVMMxXRTTkv9wV01Vfd0kZt8P2EkvQBFPK2eQ/7TSgXLOYE+kKj3TNq4hvoKp9pYjlDPYGHiup5W/fljULVQlcdU4WKdawr8Dz5RqzkSmpQpVw2YGu2hSte2QCRaoRssRqrkQUNDZ5ZFneqwmu1g29yXh4cbABWwB3LYvMtZfZkCnzud9t/UwUn78kIDlNX4lLEiSWrIAlr12lnk6RGyHjKsQlrccAUvkUP3KIgVrsIsKqClyJr8BLNTYr6dCsyQsIWB8RRhZBcgwPL1z2g4ZDyMLLcfAkiCYimlYv1bXZVtthr8+gMXPeYzWpqnb210CFSr8uriybrABhqjcASCFynoWMtx00RKgih0AAk9vOQJyYdOi4tOQu8Ji+FsdOAJ0W+JXxaNiBeBVSsJPzYswu0uaSSX67A5mriP7u0vkMDW5VmEid5ZUIndz2idymF3jDmcf06OKnZO4PSBaZ2gZRnJ41ciey99+vOTnfwbnpHE4Pvm5cfjkF8A5vvTxGRGRhUkmigzzHzLzliG01Gij0KjcD2aKGs1TtFCP69+v1zm0MJP2tIIsE6PV501PCy0DWsnRRmnZ+h2cJmlB1XfKk8C8pG8BzGdTBBZmmigwzJ0IzFuGwFKjjd5dwKKk0kSAKX0qUsBQUh/hXfKcAwwzKgIL800MWJ8/PTC0DIAlRxsFZuR+MFPAFEvRQj3fILwwqfa0fFJN0OpTqKeFloBWNKn2nt4y4JzUGeNcCMjYsWxRMHWqUqgx+wUJqzsgzmGNp0ZkHR7CYqz7M6InhpYBsfRwY8hohwy8FcuUkSM1YVk3n5qwXkEXaQ8qI5Qvb6v67m1l3zuQcybOQGxQt1BYp3kmC8udwTnHnfVAk7RFOTRqV7JrVGMR9GbOzbOvbAANMyasbJwlVdk4pn1lI+xFnvyisrG3OFrOrGyE7kZ0+Fv4384uDNXP//fLi/Pz57PU+yoF5Yd5MiofaxLU7y1DAD6WHYF5VcoUgUGV8vXVRq86SHYx1X1t4VWjZaAaKTrV86qNKdVKsFM5S7ivGlB4mLSiwrFGQOHeMhTuQc4RLvj+6dekcE5P2RzdmPxRd5hEYrr7VO91o2WgGzn2YT4j+U/qnhXmmMR71T6JJ1T3KdurRkugOprEe09vGfBC/nPiBJP45AJR/FTPQYa5GJGFp6wYsj7zeuFoGQjH9BJkhBm5uOBgHXnMdrHY7B7qm9FkLERm9AitV4v14u9HcsE4+XPdbhfJY7LLabbGp6rPafhbzRm/IbCPcikN06+zRNJv5wiDge0wdHSWVN52/Pu8DX5cqi/y9qTG6O/MXd6G7YyxkUc+3f3O7ugiMxhDFylzOGNgI+gwMcdAoyeSRs8E6XAB7FGjZcA6LdTCTt3ZOGdfX8wKRl8NIaQwj0ej0XsiJPRMhWNQNbl49JZhQKZ0HlVHTUUkO/62x/XvN+w5nLH+6jkHZUOMM3r2nL1ngnNYp+05o2XAOanzqMptirMx9NQcfU/0LVD7ig9Rh5VKFLX3RNTomUIdVIYOtbcMUad0HnXDNIWa52ZQJMdvmPpV1ZVtc1BjkYmowyInhho9ETV6JlCHxegeNVoGqJM6IzssjuUbhCOWpD0jX5ImGKFnz8h7JhiFpeueEVoCRtFitvf0lgHdJKF4MWsfH0X2DPc0ZBDK4035moiq7hnbwTOeN+X1w/aq2t2WK7IqP1XLckcWMDz7rglMn6v2lixq8l3yKobaJ4R2n5vsKfkkhhY2yUcG+1367RQ1sN1C0Qy1sza6vxAy/mniulrekdty2/3fmMUS9O6IfwO1KdvbZtWsm5tH8vm2aktyv7gvt1mk1y6oxeDPQc3jh6S6t8/2SabMqGDesA+1qeJeZ4wW9kZLIxD7H8AOX2+RM2iYwse5hL++rOpdWe8+lX8RGPEZYbZNMG/LVbmt7nZX5fYmG3vAZl8JFXbNsowrOdIlfYbv5f4P4se8CQplbmRzdHJlYW0KZW5kb2JqCjggMCBvYmoKPDwgL1R5cGUgL0ZvbnQKL1N1YnR5cGUgL1R5cGUxCi9OYW1lIC9GMQovQmFzZUZvbnQgL1RpbWVzLVJvbWFuCi9FbmNvZGluZyAvV2luQW5zaUVuY29kaW5nCj4+CmVuZG9iago5IDAgb2JqCjw8IC9UeXBlIC9Gb250Ci9TdWJ0eXBlIC9UeXBlMQovTmFtZSAvRjIKL0Jhc2VGb250IC9IZWx2ZXRpY2EtQm9sZAovRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZwo+PgplbmRvYmoKMTAgMCBvYmoKPDwgL1R5cGUgL0ZvbnQKL1N1YnR5cGUgL1R5cGUxCi9OYW1lIC9GMwovQmFzZUZvbnQgL1RpbWVzLUJvbGQKL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcKPj4KZW5kb2JqCjExIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovQSAxMiAwIFIKL0JvcmRlciBbMCAwIDBdCi9IIC9JCi9SZWN0IFsgMTk5LjEzNzggMTguMjE4NSAzOTYuMTQyMiAyNy4wMTg1IF0KPj4KZW5kb2JqCjEyIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL1VSSQovVVJJIChodHRwczovL3Jlam9vc2UuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIzLzA2L0V2b2ljZV9FeHBsYWluZXIucGRmKQo+PgplbmRvYmoKeHJlZgowIDEzCjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAwOSAwMDAwMCBuIAowMDAwMDAwMDc0IDAwMDAwIG4gCjAwMDAwMDAxMjAgMDAwMDAgbiAKMDAwMDAwMDI5NSAwMDAwMCBuIAowMDAwMDAwMzI0IDAwMDAwIG4gCjAwMDAwMDA0OTcgMDAwMDAgbiAKMDAwMDAwMDYxOSAwMDAwMCBuIAowMDAwMDAzNTI5IDAwMDAwIG4gCjAwMDAwMDM2MzggMDAwMDAgbiAKMDAwMDAwMzc1MCAwMDAwMCBuIAowMDAwMDAzODU5IDAwMDAwIG4gCjAwMDAwMDM5ODUgMDAwMDAgbiAKdHJhaWxlcgo8PAovU2l6ZSAxMwovUm9vdCAxIDAgUgovSW5mbyA1IDAgUgovSURbPGQ0MjEyYTIwY2E1NTc3NTg1NGNiOWUyNmM3NGRiYjdiPjxkNDIxMmEyMGNhNTU3NzU4NTRjYjllMjZjNzRkYmI3Yj5dCj4+CnN0YXJ0eHJlZgo0MTA0CiUlRU9GCg== country_code: DK facility_external_id: CPH-01 rfi_external_id: CPH-01-2023 rfi_version: 1 standard_rfi_external_id: standard-2023 standard_rfi_version: 1 carbon_intensity_gram: 123 tec_annual_kwh: 478.65 total_kg_co2_eq: -1301.51 manufacturing_kg_co2_eq: -650.25 transportation_kg_co2_eq: -50.13 eol_kg_co2_eq: -53.52 status: finalized type: credit_note source_type: api created_at: '2024-01-05T13:11:49.000000Z' updated_at: '2024-01-05T13:11:50.000000Z' unit: metric client: name: 'Eco-Friendly Solutions Ltd' organization_id: EcoFriendly-4987 company_id: ECOF1234567 vat_number: ECOF1234567 address: '100 Enviro Way' address2: 'Sustainability Lane 3' zip_code: ECO321 city: GreenVille country: Denmark sender: name: 'Green Supply Co. Copenhagen Branch' company_id: DK12345678 vat_number: DK12345678 address: 'Havnegade 12' address2: 'Building B' zip_code: '1058' city: Copenhagen country: Denmark devices: - external_id: RE8989121 original_manufacturer_part_number: 62B6MAT3EU brand: Lenovo model_name: 'ThinkPad T480' category: Notebook quantity: 10 lifetime_months: 72 tec_annual_kwh: 377.25 scope_2_kg_co2_eq: -278.41 scope_3_kg_co2_eq: -249.27 total_kg_co2_eq: -527.68 manufacturing_kg_co2_eq: null transportation_kg_co2_eq: null eol_kg_co2_eq: -18.42 refurbished: true variant: full refurbishment_impact_basis: rfi_category excluded: false epeat_tier: silver epeat_climate_plus: true epeat_status: active epeat_certificate_url: 'https://epeat.net/product-details/92ff91678f38486c' tco_certified: true tco_certificate_url: 'https://tcocertified.com/product-finder/?cert=D1010052' avoided_emissions_kg_co2_eq: -256.68 - external_id: SM-S918BZKDEEB original_manufacturer_part_number: null brand: Samsung model_name: 'Galaxy S23 Ultra' category: Smartphone quantity: 10 lifetime_months: 30 tec_annual_kwh: 101.4 scope_2_kg_co2_eq: -31.18 scope_3_kg_co2_eq: -742.65 total_kg_co2_eq: -773.83 manufacturing_kg_co2_eq: -650.25 transportation_kg_co2_eq: -50.13 eol_kg_co2_eq: -35.1 refurbished: false variant: null refurbishment_impact_basis: null excluded: false epeat_tier: null epeat_climate_plus: null epeat_status: null epeat_certificate_url: null tco_certified: null tco_certificate_url: null avoided_emissions_kg_co2_eq: 0 links: self: 'https://app.rejoose.com/api/v3/evoices/123456789' pdf: 'https://app.rejoose.com/api/v3/evoices/123456789/pdf' base_64_pdf: 'https://app.rejoose.com/api/v3/evoices/123456789/pdf?base64=1' properties: success: type: boolean example: true data: type: object properties: external_invoice_id: type: string example: '123456789' external_invoice_date: type: string example: '2023-09-25' pdf_base64: type: string example: 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Ci9FbmNvZGluZyAvV2luQW5zaUVuY29kaW5nCj4+CmVuZG9iago5IDAgb2JqCjw8IC9UeXBlIC9Gb250Ci9TdWJ0eXBlIC9UeXBlMQovTmFtZSAvRjIKL0Jhc2VGb250IC9IZWx2ZXRpY2EtQm9sZAovRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZwo+PgplbmRvYmoKMTAgMCBvYmoKPDwgL1R5cGUgL0ZvbnQKL1N1YnR5cGUgL1R5cGUxCi9OYW1lIC9GMwovQmFzZUZvbnQgL1RpbWVzLUJvbGQKL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcKPj4KZW5kb2JqCjExIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovQSAxMiAwIFIKL0JvcmRlciBbMCAwIDBdCi9IIC9JCi9SZWN0IFsgMTk5LjEzNzggMTguMjE4NSAzOTYuMTQyMiAyNy4wMTg1IF0KPj4KZW5kb2JqCjEyIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL1VSSQovVVJJIChodHRwczovL3Jlam9vc2UuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIzLzA2L0V2b2ljZV9FeHBsYWluZXIucGRmKQo+PgplbmRvYmoKeHJlZgowIDEzCjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAwOSAwMDAwMCBuIAowMDAwMDAwMDc0IDAwMDAwIG4gCjAwMDAwMDAxMjAgMDAwMDAgbiAKMDAwMDAwMDI5NSAwMDAwMCBuIAowMDAwMDAwMzI0IDAwMDAwIG4gCjAwMDAwMDA0OTcgMDAwMDAgbiAKMDAwMDAwMDYxOSAwMDAwMCBuIAowMDAwMDAzNTI5IDAwMDAwIG4gCjAwMDAwMDM2MzggMDAwMDAgbiAKMDAwMDAwMzc1MCAwMDAwMCBuIAowMDAwMDAzODU5IDAwMDAwIG4gCjAwMDAwMDM5ODUgMDAwMDAgbiAKdHJhaWxlcgo8PAovU2l6ZSAxMwovUm9vdCAxIDAgUgovSW5mbyA1IDAgUgovSURbPGQ0MjEyYTIwY2E1NTc3NTg1NGNiOWUyNmM3NGRiYjdiPjxkNDIxMmEyMGNhNTU3NzU4NTRjYjllMjZjNzRkYmI3Yj5dCj4+CnN0YXJ0eHJlZgo0MTA0CiUlRU9GCg== country_code: type: string example: DK facility_external_id: type: string example: CPH-01 rfi_external_id: type: string example: CPH-01-2023 rfi_version: type: integer example: 1 standard_rfi_external_id: type: string example: standard-2023 standard_rfi_version: type: integer example: 1 carbon_intensity_gram: type: integer example: 123 tec_annual_kwh: type: number example: 478.65 total_kg_co2_eq: type: number example: -1301.51 manufacturing_kg_co2_eq: type: number example: -650.25 transportation_kg_co2_eq: type: number example: -50.13 eol_kg_co2_eq: type: number example: -53.52 status: type: string example: finalized type: type: string example: credit_note source_type: type: string example: api created_at: type: string example: '2024-01-05T13:11:49.000000Z' updated_at: type: string example: '2024-01-05T13:11:50.000000Z' unit: type: string example: metric client: type: object properties: name: type: string example: 'Eco-Friendly Solutions Ltd' organization_id: type: string example: EcoFriendly-4987 company_id: type: string example: ECOF1234567 vat_number: type: string example: ECOF1234567 address: type: string example: '100 Enviro Way' address2: type: string example: 'Sustainability Lane 3' zip_code: type: string example: ECO321 city: type: string example: GreenVille country: type: string example: Denmark sender: type: object properties: name: type: string example: 'Green Supply Co. Copenhagen Branch' company_id: type: string example: DK12345678 vat_number: type: string example: DK12345678 address: type: string example: 'Havnegade 12' address2: type: string example: 'Building B' zip_code: type: string example: '1058' city: type: string example: Copenhagen country: type: string example: Denmark devices: type: array example: - external_id: RE8989121 original_manufacturer_part_number: 62B6MAT3EU brand: Lenovo model_name: 'ThinkPad T480' category: Notebook quantity: 10 lifetime_months: 72 tec_annual_kwh: 377.25 scope_2_kg_co2_eq: -278.41 scope_3_kg_co2_eq: -249.27 total_kg_co2_eq: -527.68 manufacturing_kg_co2_eq: null transportation_kg_co2_eq: null eol_kg_co2_eq: -18.42 refurbished: true variant: full refurbishment_impact_basis: rfi_category excluded: false epeat_tier: silver epeat_climate_plus: true epeat_status: active epeat_certificate_url: 'https://epeat.net/product-details/92ff91678f38486c' tco_certified: true tco_certificate_url: 'https://tcocertified.com/product-finder/?cert=D1010052' avoided_emissions_kg_co2_eq: -256.68 - external_id: SM-S918BZKDEEB original_manufacturer_part_number: null brand: Samsung model_name: 'Galaxy S23 Ultra' category: Smartphone quantity: 10 lifetime_months: 30 tec_annual_kwh: 101.4 scope_2_kg_co2_eq: -31.18 scope_3_kg_co2_eq: -742.65 total_kg_co2_eq: -773.83 manufacturing_kg_co2_eq: -650.25 transportation_kg_co2_eq: -50.13 eol_kg_co2_eq: -35.1 refurbished: false variant: null refurbishment_impact_basis: null excluded: false epeat_tier: null epeat_climate_plus: null epeat_status: null epeat_certificate_url: null tco_certified: null tco_certificate_url: null avoided_emissions_kg_co2_eq: 0 items: type: object properties: external_id: type: string example: RE8989121 original_manufacturer_part_number: type: string example: 62B6MAT3EU brand: type: string example: Lenovo model_name: type: string example: 'ThinkPad T480' category: type: string example: Notebook quantity: type: integer example: 10 lifetime_months: type: integer example: 72 tec_annual_kwh: type: number example: 377.25 scope_2_kg_co2_eq: type: number example: -278.41 scope_3_kg_co2_eq: type: number example: -249.27 total_kg_co2_eq: type: number example: -527.68 manufacturing_kg_co2_eq: type: string example: null nullable: true transportation_kg_co2_eq: type: string example: null nullable: true eol_kg_co2_eq: type: number example: -18.42 refurbished: type: boolean example: true variant: type: string example: full refurbishment_impact_basis: type: string example: rfi_category excluded: type: boolean example: false epeat_tier: type: string example: silver epeat_climate_plus: type: boolean example: true epeat_status: type: string example: active epeat_certificate_url: type: string example: 'https://epeat.net/product-details/92ff91678f38486c' tco_certified: type: boolean example: true tco_certificate_url: type: string example: 'https://tcocertified.com/product-finder/?cert=D1010052' avoided_emissions_kg_co2_eq: type: number example: -256.68 links: type: object properties: self: type: string example: 'https://app.rejoose.com/api/v3/evoices/123456789' pdf: type: string example: 'https://app.rejoose.com/api/v3/evoices/123456789/pdf' base_64_pdf: type: string example: 'https://app.rejoose.com/api/v3/evoices/123456789/pdf?base64=1' 401: $ref: '#/components/responses/Unauthenticated' 403: description: 'API key without the required ability; Subscription usage limit reached. See "Errors" in the API reference.' content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' examples: invalidAbility: summary: 'API key without the required ability' value: data: null errors: forbidden: - 'Invalid ability provided.' status: 403 evoice: summary: 'Subscription usage limit reached' value: data: null errors: forbidden: - 'Your max limit on e.voice is reached. Contact us on "sales@rejoose.com" or "+45 71 74 70 30" to change your limit.' status: 403 evoiceCircularity: summary: 'Subscription usage limit reached' value: data: null errors: forbidden: - 'Your max limit on e.voice circularity is reached. Contact us on "sales@rejoose.com" or "+45 71 74 70 30" to change your limit.' status: 403 422: $ref: '#/components/responses/ValidationFailed' 429: $ref: '#/components/responses/TooManyRequests' 5XX: $ref: '#/components/responses/ServerError' tags: - e.voice requestBody: required: true content: application/json: schema: type: object properties: external_invoice_id: type: string description: 'A unique identifier that can connect the e.voice with the invoice sent to the customer. It is recommended to use the actual invoice number stated on the customer invoice. Must be between 1 and 255 characters.' example: '123456789' external_invoice_date: type: string description: 'The date of the financial transaction. The date should use the invoicing date in ISO 8601 standard (YYYY-MM-DD). Must be between 1970-01-02 and 2037-12-31.' example: '2023-09-25' country_code: type: string description: 'Country code for product delivery. This defines the use phase country, so this should represent the country where products are shipped to and used in. Use an ISO 3166-1 alpha-2 country code (e.g. GB), or an ISO 3166-2 subdivision code where state-level emission factors are available: US states use the "US-" prefix (e.g. US-CA) and Australian states use the "AU-" prefix (e.g. AU-VIC, AU-NSW, AU-QLD, AU-SA, AU-WA, AU-TAS, AU-ACT, AU-NT). Bare AU still resolves to the Australian national factor. This will determine the use country carbon intensity (gram CO2e per kWh) used for the e.voice.' example: GB supplier_contact: type: string description: 'Optional. Contact email for a person or mailbox for you as the supplier to the customer. When provided, this contact email address will be visible on the e.voice. Must be between 1 and 80 characters.' example: example@rejoose.com client: type: object description: 'Client information object. It carries two identifiers that decide your reporting: `organization_id`, which identifies your customer, and `company_id`, which identifies the company, branch office, or subsidiary within that customer. All reporting is aggregated on `organization_id`, so use one unique and static value per customer and send it on every document; a customer sent under several values is reported as several customers. Read Reporting IDs first.' example: name: 'Eco-Friendly Solutions Ltd' company_id: ECOF1234567 organization_id: EcoFriendly-4987 address: '100 Enviro Way' address2: 'Sustainability Lane 3' zip_code: ECO321 city: GreenVille country: Denmark country_code: DK properties: name: type: string description: 'The name of the customer as on the invoice. This line will be shown on the e.voice. Can be made anonymous by e.g., inserting a dash instead (-) or similar. Must be between 1 and 80 characters.' example: 'Eco-Friendly Solutions Ltd' organization_id: type: string description: 'The identifier of the customer organisation in your system, such as its customer or account number in your ERP. Every report, dashboard, list filter, and e.insights invitation is keyed on it, so send one unique and static value per customer, the same on every e.voice and e.voice circularity. Not the invoice number and not the company id. Must be between 1 and 240 characters. See Reporting IDs.' example: EcoFriendly-4987 company_id: type: string description: 'This defines the company, branch office, or subsidiary and, as with `organization_id`, is used for reporting purposes. This needs to be a unique static id from your ERP identifying this specific entity; it can also be a new unique identifier made for this specific purpose. Must be between 1 and 80 characters. Formerly `vat_number`, which is still accepted; we recommend `company_id`. See Reporting IDs.' example: ECOF1234567 address: type: string description: 'Optional. The address of the customer as on the invoice. When provided, this line will be shown on the e.voice. Can be made anonymous by e.g., inserting a dash instead (-) or similar. Must be between 1 and 255 characters.' example: '100 Enviro Way' address2: type: string description: 'The second line of the address of the customer as on the invoice. Must be between 1 and 255 characters.' example: 'Sustainability Lane 3' zip_code: type: string description: 'Optional. The zip code of the customer as on the invoice. When provided, this line will be shown on the e.voice. Can be made anonymous by e.g., inserting a dash instead (-) or similar. Must be between 1 and 80 characters.' example: ECO321 city: type: string description: 'Optional. The city of the customer as on the invoice. When provided, this line will be shown on the e.voice. Can be made anonymous by e.g., inserting a dash instead (-) or similar. Must be between 1 and 80 characters.' example: GreenVille country: type: string description: 'The country of the customer as on the invoice. This line will be shown on the e.voice. Can be made anonymous by e.g., inserting a dash instead (-) or similar. Must be between 1 and 80 characters.' example: Denmark country_code: type: string description: "Optional. The country code of the customer as on the invoice. Use an ISO 3166-1 alpha-2 code or supported ISO 3166-2 subdivision code. If omitted or null, the code is looked up from client.country, then falls back to the e.voice's country_code." example: DK required: - name - organization_id - company_id - country sender: type: object description: 'Optional. Use this when your organisation issues documents from more than one office or location, and the document should show the office that sent the invoice. When sent, the sender is shown as the issuing party on the PDF instead of your registered partner details. When not sent, the PDF shows your registered partner details. A sender is identified by its `name`, `company_id`, and `country`: a later request with the same three values reuses the location as first stored, including its address. When sent, `name`, `company_id`, `country`, and `country_code` are required. Returned as `sender`, or `null` when not sent.' example: name: 'Eco-Friendly Solutions Nordic' company_id: DK12345678 address: 'Havnegade 12' address2: '2nd floor' zip_code: '1058' city: Copenhagen country: Denmark country_code: DK properties: name: type: string description: 'The name of the office or location that issues the document. Required when `sender` is sent. Must be between 1 and 80 characters.' example: 'Eco-Friendly Solutions Nordic' company_id: type: string description: 'The company identifier of the office or location, such as its VAT or registration number. Together with `name` and `country`, this identifies the sender. Required when `sender` is sent. Must be between 1 and 80 characters. Formerly `vat_number`, which is still accepted.' example: DK12345678 address: type: string description: 'Optional. The address of the office or location. Shown on the PDF when provided. Must be between 1 and 255 characters.' example: 'Havnegade 12' address2: type: string description: 'Optional. The second line of the address. Shown on the PDF when provided. Must be between 1 and 255 characters.' example: '2nd floor' zip_code: type: string description: 'Optional. The zip code of the office or location. Shown on the PDF when provided. Must be between 1 and 80 characters.' example: '1058' city: type: string description: 'Optional. The city of the office or location. Shown on the PDF when provided. Must be between 1 and 80 characters.' example: Copenhagen country: type: string description: 'The country of the office or location. Required when `sender` is sent. Must be between 1 and 80 characters.' example: Denmark country_code: type: string description: 'The country code of the office or location. Required when `sender` is sent. Use an ISO 3166-1 alpha-2 country code or its alpha-3 form (e.g. DK or DNK; canonicalised to alpha-2 on ingest).' example: DK required: - name - company_id - country - country_code devices: type: array description: 'This is the list of devices and products from the invoice sent to the customer (Array of device objects). A maximum of 500 devices per request applies by default; this limit can be changed — contact Rejoose if you would like it adjusted. Requests exceeding the limit are rejected with a 422 validation error.' example: - [] items: type: object properties: external_id: type: string description: "Provide the product's manufacturer part number (MPN). If another identifier is used, the `original_manufacturer_part_number` should be provided." example: RE8989121 original_manufacturer_part_number: type: string description: 'This is the unique manufacturer part number (MPN). The MPN is a special code that uniquely identifies a product from a specific manufacturer. If another identifier is used as `external_id`, the original manufacturer part number should be provided.' example: 62B6ASD3EU quantity: type: integer description: 'The number of units for the invoiced or credited item: the quantity sold on an e.voice, the quantity reversed on a credit note. A whole number from 1 to 1000000; a decimal such as 2.7 or a 0 is rejected with a 422. A negative number is read as its absolute value, because the direction comes from options.credit_note, not from the sign.' example: 10 category: type: string description: 'The category information serves two purposes: together with the `external_id` and `brand`, it provides a 100% unique data set for secure product matching. In the absence of LCA data, the system can provide CA data for the brand/category. Must be between 1 and 80 characters.' example: Notebook brand: type: string description: 'The name of the manufacturer of the product. This information, together with the `external_id` (MPN) and `category`, provides a unique data set to match carbon data to the specific product. Must be between 1 and 80 characters.' example: Lenovo model_name: type: string description: 'The product model name as on the invoice. This line of text will also be shown on the e.voice to have a 1:1 match with the invoice. Must be between 1 and 240. characters.' example: 'ThinkPad T480' refurbished: type: boolean description: 'Utilize this if you are selling a refurbished product; otherwise, do not add this. Set the parameter as `true` to define this as a refurbished product and you will receive a data set for this.' example: true variant: type: string description: 'The refurbishment process the device went through, for example full (repair) or light (test and wipe). Only used for refurbished devices. Optional: when you leave it out, the facility''s default variant is used. A value the facility does not have is rejected with a 422. Max 64 characters. See Refurbishment impact.' example: full lifetime_months: type: integer description: 'Use this if you know the actual lifespan of the product in months. If not used, Rejoose will utilize the standard EU lifespan. Must be between 1 and 600.' example: 48 excluded: type: boolean description: "Use this if you want to exclude this product's LCA data from the e.voice. Use cases could include products with no carbon footprint or products where the footprint has already been accounted for elsewhere. This defaults to false." example: true required: - external_id - quantity - category - brand - model_name options: type: object description: 'Settings for the request.' example: [] properties: deferred: type: boolean description: 'Specifies whether the e.voice generation should run as a background job. Defaults to false.' example: true include_pdf: type: boolean description: 'Specifies whether the response should include a base64-encoded PDF file. Defaults to true. If the e.voice is saved but its PDF cannot be rendered, the 201 response leaves pdf_base64 out; fetch the PDF later with GET /evoices/{external_invoice_id}.' example: false credit_note: type: boolean description: 'Specifies whether the e.voice is a credit note. If set to true, it will mark the e.voice as a credit note, reversing the carbon data. Defaults to false.' example: true unit: type: string description: "Specifies the unit system for weight measurements in the response. Use 'metric' for kilograms (kg) or 'imperial' for pounds (lbs). Defaults to metric." example: metric facility_external_id: type: string description: 'The external_id of your facility that refurbished the devices. Must be your own facility, not the Rejoose standard facility. Optional: when you leave it out, your default facility is used. See Refurbishment impact.' example: CPH-01 required: - external_invoice_id - external_invoice_date - country_code - client - devices '/api/v3/evoices/{external_invoice_id}': get: summary: 'Retrieve an e.voice' operationId: retrieveAnEvoice description: 'Returns one e.voice with its device lines and, by default, the PDF.' parameters: - in: query name: include_pdf description: 'Whether the response includes the base64-encoded PDF. Defaults to true. Set it to false (or 0) when you only poll for the status.' example: false required: false schema: type: boolean description: 'Whether the response includes the base64-encoded PDF. Defaults to true. Set it to false (or 0) when you only poll for the status.' example: false - in: query name: unit description: 'Unit system for weights and footprints: metric (default) or imperial.' example: imperial required: false schema: type: string description: 'Unit system for weights and footprints: metric (default) or imperial.' example: imperial responses: 200: description: '' content: application/json: schema: oneOf: - description: '' type: object example: success: true data: external_invoice_id: '123456789' external_invoice_date: '2023-09-25' pdf_base64: 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Ci9FbmNvZGluZyAvV2luQW5zaUVuY29kaW5nCj4+CmVuZG9iago5IDAgb2JqCjw8IC9UeXBlIC9Gb250Ci9TdWJ0eXBlIC9UeXBlMQovTmFtZSAvRjIKL0Jhc2VGb250IC9IZWx2ZXRpY2EtQm9sZAovRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZwo+PgplbmRvYmoKMTAgMCBvYmoKPDwgL1R5cGUgL0ZvbnQKL1N1YnR5cGUgL1R5cGUxCi9OYW1lIC9GMwovQmFzZUZvbnQgL1RpbWVzLUJvbGQKL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcKPj4KZW5kb2JqCjExIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovQSAxMiAwIFIKL0JvcmRlciBbMCAwIDBdCi9IIC9JCi9SZWN0IFsgMTk5LjEzNzggMTguMjE4NSAzOTYuMTQyMiAyNy4wMTg1IF0KPj4KZW5kb2JqCjEyIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL1VSSQovVVJJIChodHRwczovL3Jlam9vc2UuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIzLzA2L0V2b2ljZV9FeHBsYWluZXIucGRmKQo+PgplbmRvYmoKeHJlZgowIDEzCjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAwOSAwMDAwMCBuIAowMDAwMDAwMDc0IDAwMDAwIG4gCjAwMDAwMDAxMjAgMDAwMDAgbiAKMDAwMDAwMDI5NSAwMDAwMCBuIAowMDAwMDAwMzI0IDAwMDAwIG4gCjAwMDAwMDA0OTcgMDAwMDAgbiAKMDAwMDAwMDYxOSAwMDAwMCBuIAowMDAwMDAzNTI5IDAwMDAwIG4gCjAwMDAwMDM2MzggMDAwMDAgbiAKMDAwMDAwMzc1MCAwMDAwMCBuIAowMDAwMDAzODU5IDAwMDAwIG4gCjAwMDAwMDM5ODUgMDAwMDAgbiAKdHJhaWxlcgo8PAovU2l6ZSAxMwovUm9vdCAxIDAgUgovSW5mbyA1IDAgUgovSURbPGQ0MjEyYTIwY2E1NTc3NTg1NGNiOWUyNmM3NGRiYjdiPjxkNDIxMmEyMGNhNTU3NzU4NTRjYjllMjZjNzRkYmI3Yj5dCj4+CnN0YXJ0eHJlZgo0MTA0CiUlRU9GCg== country_code: DK facility_external_id: CPH-01 rfi_external_id: CPH-01-2023 rfi_version: 1 standard_rfi_external_id: standard-2023 standard_rfi_version: 1 carbon_intensity_gram: 123 tec_annual_kwh: 478.65 total_kg_co2_eq: 1301.51 manufacturing_kg_co2_eq: 650.25 transportation_kg_co2_eq: 50.13 eol_kg_co2_eq: 53.52 status: finalized type: evoice source_type: api created_at: '2024-01-05T13:11:49.000000Z' updated_at: '2024-01-05T13:11:50.000000Z' unit: metric client: name: 'Eco-Friendly Solutions Ltd' organization_id: EcoFriendly-4987 company_id: ECOF1234567 vat_number: ECOF1234567 address: '100 Enviro Way' address2: 'Sustainability Lane 3' zip_code: ECO321 city: GreenVille country: Denmark sender: name: 'Green Supply Co. Copenhagen Branch' company_id: DK12345678 vat_number: DK12345678 address: 'Havnegade 12' address2: 'Building B' zip_code: '1058' city: Copenhagen country: Denmark devices: - external_id: RE8989121 original_manufacturer_part_number: 62B6MAT3EU brand: Lenovo model_name: 'ThinkPad T480' category: Notebook quantity: 10 lifetime_months: 72 tec_annual_kwh: 377.25 scope_2_kg_co2_eq: 278.41 scope_3_kg_co2_eq: 249.27 total_kg_co2_eq: 527.68 manufacturing_kg_co2_eq: null transportation_kg_co2_eq: null eol_kg_co2_eq: 18.42 refurbished: true variant: full refurbishment_impact_basis: rfi_category excluded: false epeat_tier: silver epeat_climate_plus: true epeat_status: active epeat_certificate_url: 'https://epeat.net/product-details/92ff91678f38486c' tco_certified: true tco_certificate_url: 'https://tcocertified.com/product-finder/?cert=D1010052' avoided_emissions_kg_co2_eq: 256.68 - external_id: SM-S918BZKDEEB original_manufacturer_part_number: null brand: Samsung model_name: 'Galaxy S23 Ultra' category: Smartphone quantity: 10 lifetime_months: 30 tec_annual_kwh: 101.4 scope_2_kg_co2_eq: 31.18 scope_3_kg_co2_eq: 742.65 total_kg_co2_eq: 773.83 manufacturing_kg_co2_eq: 650.25 transportation_kg_co2_eq: 50.13 eol_kg_co2_eq: 35.1 refurbished: false variant: null refurbishment_impact_basis: null excluded: false epeat_tier: null epeat_climate_plus: null epeat_status: null epeat_certificate_url: null tco_certified: null tco_certificate_url: null avoided_emissions_kg_co2_eq: 0 links: self: 'https://app.rejoose.com/api/v3/evoices/123456789' pdf: 'https://app.rejoose.com/api/v3/evoices/123456789/pdf' base_64_pdf: 'https://app.rejoose.com/api/v3/evoices/123456789/pdf?base64=1' properties: success: type: boolean example: true data: type: object properties: external_invoice_id: type: string example: '123456789' external_invoice_date: type: string example: '2023-09-25' pdf_base64: type: string example: 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Ci9FbmNvZGluZyAvV2luQW5zaUVuY29kaW5nCj4+CmVuZG9iago5IDAgb2JqCjw8IC9UeXBlIC9Gb250Ci9TdWJ0eXBlIC9UeXBlMQovTmFtZSAvRjIKL0Jhc2VGb250IC9IZWx2ZXRpY2EtQm9sZAovRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZwo+PgplbmRvYmoKMTAgMCBvYmoKPDwgL1R5cGUgL0ZvbnQKL1N1YnR5cGUgL1R5cGUxCi9OYW1lIC9GMwovQmFzZUZvbnQgL1RpbWVzLUJvbGQKL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcKPj4KZW5kb2JqCjExIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovQSAxMiAwIFIKL0JvcmRlciBbMCAwIDBdCi9IIC9JCi9SZWN0IFsgMTk5LjEzNzggMTguMjE4NSAzOTYuMTQyMiAyNy4wMTg1IF0KPj4KZW5kb2JqCjEyIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL1VSSQovVVJJIChodHRwczovL3Jlam9vc2UuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIzLzA2L0V2b2ljZV9FeHBsYWluZXIucGRmKQo+PgplbmRvYmoKeHJlZgowIDEzCjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAwOSAwMDAwMCBuIAowMDAwMDAwMDc0IDAwMDAwIG4gCjAwMDAwMDAxMjAgMDAwMDAgbiAKMDAwMDAwMDI5NSAwMDAwMCBuIAowMDAwMDAwMzI0IDAwMDAwIG4gCjAwMDAwMDA0OTcgMDAwMDAgbiAKMDAwMDAwMDYxOSAwMDAwMCBuIAowMDAwMDAzNTI5IDAwMDAwIG4gCjAwMDAwMDM2MzggMDAwMDAgbiAKMDAwMDAwMzc1MCAwMDAwMCBuIAowMDAwMDAzODU5IDAwMDAwIG4gCjAwMDAwMDM5ODUgMDAwMDAgbiAKdHJhaWxlcgo8PAovU2l6ZSAxMwovUm9vdCAxIDAgUgovSW5mbyA1IDAgUgovSURbPGQ0MjEyYTIwY2E1NTc3NTg1NGNiOWUyNmM3NGRiYjdiPjxkNDIxMmEyMGNhNTU3NzU4NTRjYjllMjZjNzRkYmI3Yj5dCj4+CnN0YXJ0eHJlZgo0MTA0CiUlRU9GCg== country_code: type: string example: DK facility_external_id: type: string example: CPH-01 rfi_external_id: type: string example: CPH-01-2023 rfi_version: type: integer example: 1 standard_rfi_external_id: type: string example: standard-2023 standard_rfi_version: type: integer example: 1 carbon_intensity_gram: type: integer example: 123 tec_annual_kwh: type: number example: 478.65 total_kg_co2_eq: type: number example: 1301.51 manufacturing_kg_co2_eq: type: number example: 650.25 transportation_kg_co2_eq: type: number example: 50.13 eol_kg_co2_eq: type: number example: 53.52 status: type: string example: finalized type: type: string example: evoice source_type: type: string example: api created_at: type: string example: '2024-01-05T13:11:49.000000Z' updated_at: type: string example: '2024-01-05T13:11:50.000000Z' unit: type: string example: metric client: type: object properties: name: type: string example: 'Eco-Friendly Solutions Ltd' organization_id: type: string example: EcoFriendly-4987 company_id: type: string example: ECOF1234567 vat_number: type: string example: ECOF1234567 address: type: string example: '100 Enviro Way' address2: type: string example: 'Sustainability Lane 3' zip_code: type: string example: ECO321 city: type: string example: GreenVille country: type: string example: Denmark sender: type: object properties: name: type: string example: 'Green Supply Co. Copenhagen Branch' company_id: type: string example: DK12345678 vat_number: type: string example: DK12345678 address: type: string example: 'Havnegade 12' address2: type: string example: 'Building B' zip_code: type: string example: '1058' city: type: string example: Copenhagen country: type: string example: Denmark devices: type: array example: - external_id: RE8989121 original_manufacturer_part_number: 62B6MAT3EU brand: Lenovo model_name: 'ThinkPad T480' category: Notebook quantity: 10 lifetime_months: 72 tec_annual_kwh: 377.25 scope_2_kg_co2_eq: 278.41 scope_3_kg_co2_eq: 249.27 total_kg_co2_eq: 527.68 manufacturing_kg_co2_eq: null transportation_kg_co2_eq: null eol_kg_co2_eq: 18.42 refurbished: true variant: full refurbishment_impact_basis: rfi_category excluded: false epeat_tier: silver epeat_climate_plus: true epeat_status: active epeat_certificate_url: 'https://epeat.net/product-details/92ff91678f38486c' tco_certified: true tco_certificate_url: 'https://tcocertified.com/product-finder/?cert=D1010052' avoided_emissions_kg_co2_eq: 256.68 - external_id: SM-S918BZKDEEB original_manufacturer_part_number: null brand: Samsung model_name: 'Galaxy S23 Ultra' category: Smartphone quantity: 10 lifetime_months: 30 tec_annual_kwh: 101.4 scope_2_kg_co2_eq: 31.18 scope_3_kg_co2_eq: 742.65 total_kg_co2_eq: 773.83 manufacturing_kg_co2_eq: 650.25 transportation_kg_co2_eq: 50.13 eol_kg_co2_eq: 35.1 refurbished: false variant: null refurbishment_impact_basis: null excluded: false epeat_tier: null epeat_climate_plus: null epeat_status: null epeat_certificate_url: null tco_certified: null tco_certificate_url: null avoided_emissions_kg_co2_eq: 0 items: type: object properties: external_id: type: string example: RE8989121 original_manufacturer_part_number: type: string example: 62B6MAT3EU brand: type: string example: Lenovo model_name: type: string example: 'ThinkPad T480' category: type: string example: Notebook quantity: type: integer example: 10 lifetime_months: type: integer example: 72 tec_annual_kwh: type: number example: 377.25 scope_2_kg_co2_eq: type: number example: 278.41 scope_3_kg_co2_eq: type: number example: 249.27 total_kg_co2_eq: type: number example: 527.68 manufacturing_kg_co2_eq: type: string example: null nullable: true transportation_kg_co2_eq: type: string example: null nullable: true eol_kg_co2_eq: type: number example: 18.42 refurbished: type: boolean example: true variant: type: string example: full refurbishment_impact_basis: type: string example: rfi_category excluded: type: boolean example: false epeat_tier: type: string example: silver epeat_climate_plus: type: boolean example: true epeat_status: type: string example: active epeat_certificate_url: type: string example: 'https://epeat.net/product-details/92ff91678f38486c' tco_certified: type: boolean example: true tco_certificate_url: type: string example: 'https://tcocertified.com/product-finder/?cert=D1010052' avoided_emissions_kg_co2_eq: type: number example: 256.68 links: type: object properties: self: type: string example: 'https://app.rejoose.com/api/v3/evoices/123456789' pdf: type: string example: 'https://app.rejoose.com/api/v3/evoices/123456789/pdf' base_64_pdf: type: string example: 'https://app.rejoose.com/api/v3/evoices/123456789/pdf?base64=1' - description: 'The e.voice generation failed' type: object example: success: true data: external_invoice_id: 94825344-eb3a-4b5d-8ac8-6e462f37bba2 status: failed failure_reason: 'Product data service is temporarily unavailable. Please try again later.' properties: success: type: boolean example: true data: type: object properties: external_invoice_id: type: string example: 94825344-eb3a-4b5d-8ac8-6e462f37bba2 status: type: string example: failed failure_reason: type: string example: 'Product data service is temporarily unavailable. Please try again later.' 202: description: 'The e.voice is still processing' content: application/json: schema: type: object example: success: true data: external_invoice_id: 94825344-eb3a-4b5d-8ac8-6e462f37bba2 status: pending properties: success: type: boolean example: true data: type: object properties: external_invoice_id: type: string example: 94825344-eb3a-4b5d-8ac8-6e462f37bba2 status: type: string example: pending 401: $ref: '#/components/responses/Unauthenticated' 403: $ref: '#/components/responses/InvalidAbility' 404: $ref: '#/components/responses/NotFound' 422: $ref: '#/components/responses/ValidationFailed' 429: $ref: '#/components/responses/TooManyRequests' 5XX: $ref: '#/components/responses/ServerError' tags: - e.voice parameters: - in: path name: external_invoice_id description: 'The `external_invoice_id` of the e.voice, URL-encoded twice: `2024/001` is sent as `2024%252F001`. See IDs in URLs.' example: '123456789' required: true schema: type: string '/api/v3/evoices/{external_invoice_id}/pdf': get: summary: 'Download an e.voice as PDF' operationId: downloadAnEvoiceAsPDF description: "Returns the e.voice PDF: the current document, or with changes=true the changes document, which is the same document with an old › new marker on every value an update changed since it was generated (each marker shows the field's most recent change). An e.voice that has never been updated has no changes document yet." parameters: - in: query name: locale description: 'The language of the PDF: en-US (default), en-GB, en-DK (English with Danish number formatting), da-DK, de-DE, es-ES, fr-FR or nb-NO. Any other value is rejected with a 422.' example: da-DK required: false schema: type: string description: 'The language of the PDF: en-US (default), en-GB, en-DK (English with Danish number formatting), da-DK, de-DE, es-ES, fr-FR or nb-NO. Any other value is rejected with a 422.' example: da-DK - in: query name: unit description: 'Unit system for weights and footprints: metric (default) or imperial.' example: imperial required: false schema: type: string description: 'Unit system for weights and footprints: metric (default) or imperial.' example: imperial - in: query name: changes description: 'true returns the changes document instead of the current one. Defaults to false.' example: true required: false schema: type: boolean description: 'true returns the changes document instead of the current one. Defaults to false.' example: true - in: query name: base64 description: 'true (or 1) returns the PDF as base64 in a JSON body ({"data": "..."}) instead of a binary stream. Defaults to false.' example: false required: false schema: type: boolean description: 'true (or 1) returns the PDF as base64 in a JSON body ({"data": "..."}) instead of a binary stream. Defaults to false.' example: false responses: 200: description: '' content: text/plain: schema: type: string example: 'application/pdf The PDF file. The changes document also carries the X-Evoice-Version header with the version it was rendered at.' 202: description: 'The e.voice is still processing' content: application/json: schema: type: object example: success: true data: external_invoice_id: 94825344-eb3a-4b5d-8ac8-6e462f37bba2 status: pending properties: success: type: boolean example: true data: type: object properties: external_invoice_id: type: string example: 94825344-eb3a-4b5d-8ac8-6e462f37bba2 status: type: string example: pending 401: $ref: '#/components/responses/Unauthenticated' 403: $ref: '#/components/responses/InvalidAbility' 404: $ref: '#/components/responses/NotFound' 409: description: '' content: application/json: schema: oneOf: - description: 'The e.voice failed and has no PDF' type: object example: data: null errors: conflict: - 'Evoice with external_invoice_id 123456789 failed and has no PDF. Generate it again to replace it.' status: 409 properties: data: type: string example: null nullable: true errors: type: object properties: conflict: type: array example: - 'Evoice with external_invoice_id 123456789 failed and has no PDF. Generate it again to replace it.' items: type: string status: type: integer example: 409 - description: 'changes=true, but the e.voice has never been updated' type: object example: data: null errors: conflict: - 'Evoice with external_invoice_id 123456789 has no change history yet. The changes document exists once an update has changed it.' status: 409 properties: data: type: string example: null nullable: true errors: type: object properties: conflict: type: array example: - 'Evoice with external_invoice_id 123456789 has no change history yet. The changes document exists once an update has changed it.' items: type: string status: type: integer example: 409 422: $ref: '#/components/responses/ValidationFailed' 429: $ref: '#/components/responses/TooManyRequests' 5XX: $ref: '#/components/responses/ServerError' tags: - e.voice parameters: - in: path name: external_invoice_id description: 'The `external_invoice_id` of the e.voice, URL-encoded twice: `2024/001` is sent as `2024%252F001`. See IDs in URLs.' example: '123456789' required: true schema: type: string /api/v3/evoices: get: summary: 'List e.voices' operationId: listEvoices description: 'One page of your e.voices, newest first, each with its device lines but without the PDF.' parameters: - in: query name: from description: 'The first day of the period (YYYY-MM-DD). Defaults to the first day of your accounting period.' example: '2025-01-01' required: false schema: type: string description: 'The first day of the period (YYYY-MM-DD). Defaults to the first day of your accounting period.' example: '2025-01-01' - in: query name: to description: 'The last day of the period (YYYY-MM-DD). Must be on or after `from`. Defaults to the last day of your accounting period.' example: '2025-12-31' required: false schema: type: string description: 'The last day of the period (YYYY-MM-DD). Must be on or after `from`. Defaults to the last day of your accounting period.' example: '2025-12-31' - in: query name: date_type description: 'The date that places an e.voice in the period: `external_invoice_date` (the invoice date you sent), `created_at` or `last_updated_at`. Defaults to external_invoice_date.' example: external_invoice_date required: false schema: type: string description: 'The date that places an e.voice in the period: `external_invoice_date` (the invoice date you sent), `created_at` or `last_updated_at`. Defaults to external_invoice_date.' example: external_invoice_date - in: query name: organization_id description: 'Only e.voices of this customer organisation (the `client.organization_id` you sent).' example: EcoFriendly-4987 required: false schema: type: string description: 'Only e.voices of this customer organisation (the `client.organization_id` you sent).' example: EcoFriendly-4987 - in: query name: group_slug description: 'Only e.voices of the customer organisations in this group (the `slug` from the groups endpoint). Must be one of your groups.' example: nordic-offices required: false schema: type: string description: 'Only e.voices of the customer organisations in this group (the `slug` from the groups endpoint). Must be one of your groups.' example: nordic-offices - in: query name: company_ids description: 'Only these companies (the `client.company_id` values you sent). At most 100.' example: - ECOF1234567 required: false schema: type: array description: 'Only these companies (the `client.company_id` values you sent). At most 100.' example: - ECOF1234567 items: type: string - in: query name: search description: 'Only e.voices whose invoice ID (`external_invoice_id`) or customer name contains this text.' example: INV-2025-001 required: false schema: type: string description: 'Only e.voices whose invoice ID (`external_invoice_id`) or customer name contains this text.' example: INV-2025-001 - in: query name: status description: 'Only this status: `finalized`, `draft`, `pending`, `updating`, `failed`, `deleted`, or `updated` for e.voices that have a revision, whatever their status. Leave it out for all.' example: finalized required: false schema: type: string description: 'Only this status: `finalized`, `draft`, `pending`, `updating`, `failed`, `deleted`, or `updated` for e.voices that have a revision, whatever their status. Leave it out for all.' example: finalized - in: query name: evoice_type description: '`evoice` or `credit_note`. Leave it out for both.' example: evoice required: false schema: type: string description: '`evoice` or `credit_note`. Leave it out for both.' example: evoice - in: query name: updated_filter description: '`updated` for e.voices changed after creation only, `not_updated` for unchanged e.voices only. Leave it out for all.' example: updated required: false schema: type: string description: '`updated` for e.voices changed after creation only, `not_updated` for unchanged e.voices only. Leave it out for all.' example: updated - in: query name: metric description: 'The total that `metric_min` and `metric_max` apply to, in kg CO2e: `total_kg_co2_eq`, `scope_3_kg_co2_eq` or `use_kg_co2_eq`. Defaults to `total_kg_co2_eq` when a bound is sent without it.' example: total_kg_co2_eq required: false schema: type: string description: 'The total that `metric_min` and `metric_max` apply to, in kg CO2e: `total_kg_co2_eq`, `scope_3_kg_co2_eq` or `use_kg_co2_eq`. Defaults to `total_kg_co2_eq` when a bound is sent without it.' example: total_kg_co2_eq - in: query name: metric_min description: 'Only e.voices whose `metric` is at least this value.' example: 100.0 required: false schema: type: number description: 'Only e.voices whose `metric` is at least this value.' example: 100.0 - in: query name: metric_max description: 'Only e.voices whose `metric` is at most this value. Bounds are in kg, from 0 to 99999999999, and `metric_max` must be at least `metric_min`.' example: 5000.0 required: false schema: type: number description: 'Only e.voices whose `metric` is at most this value. Bounds are in kg, from 0 to 99999999999, and `metric_max` must be at least `metric_min`.' example: 5000.0 - in: query name: sort_by description: '`external_invoice_date` (default) or `external_invoice_id`.' example: external_invoice_date required: false schema: type: string description: '`external_invoice_date` (default) or `external_invoice_id`.' example: external_invoice_date - in: query name: sort_direction description: '`desc` (default) or `asc`.' example: desc required: false schema: type: string description: '`desc` (default) or `asc`.' example: desc - in: query name: page description: 'The page, from 1.' example: 1 required: false schema: type: integer description: 'The page, from 1.' example: 1 - in: query name: per_page description: 'Rows per page, 1 to 100. Defaults to 10.' example: 10 required: false schema: type: integer description: 'Rows per page, 1 to 100. Defaults to 10.' example: 10 - in: query name: unit description: 'Unit system for weights and footprints: `metric` (default) or `imperial`.' example: metric required: false schema: type: string description: 'Unit system for weights and footprints: `metric` (default) or `imperial`.' example: metric responses: 200: description: '' content: application/json: schema: type: object example: data: items: - external_invoice_id: '123456789' external_invoice_date: '2025-09-25' status: finalized type: evoice country_code: GB total_kg_co2_eq: 1234.56 manufacturing_kg_co2_eq: 912.4 transportation_kg_co2_eq: 103.7 eol_kg_co2_eq: 218.46 devices_count: 1 versions_count: 1 created_at: '2025-09-25T10:12:33.000000Z' updated_at: '2025-10-02T08:00:00.000000Z' unit: metric client: name: 'Eco-Friendly Solutions Ltd' organization_id: EcoFriendly-4987 company_id: ECOF1234567 vat_number: ECOF1234567 address: '100 Enviro Way' address2: 'Sustainability Lane 3' zip_code: ECO321 city: GreenVille country: Denmark devices: - external_id: RE8989121 original_manufacturer_part_number: 62B6MAT3EU brand: Lenovo model_name: 'ThinkPad T480' category: Notebook quantity: 10 lifetime_months: 72 tec_annual_kwh: 377.25 scope_2_kg_co2_eq: 278.41 scope_3_kg_co2_eq: 249.27 total_kg_co2_eq: 527.68 manufacturing_kg_co2_eq: null transportation_kg_co2_eq: null eol_kg_co2_eq: 18.42 refurbished: true variant: full refurbishment_impact_basis: rfi_category excluded: false epeat_tier: silver epeat_climate_plus: true epeat_status: active epeat_certificate_url: 'https://epeat.net/product-details/92ff91678f38486c' tco_certified: true tco_certificate_url: 'https://tcocertified.com/product-finder/?cert=D1010052' avoided_emissions_kg_co2_eq: 256.68 links: self: 'https://app.rejoose.com/api/v3/evoices/123456789' pdf: 'https://app.rejoose.com/api/v3/evoices/123456789/pdf' filters: from: '2025-01-01' to: '2025-12-31' date_type: external_invoice_date organization_id: null group_slug: null company_ids: null search: null status: null evoice_type: null updated_filter: null metric: null metric_min: null metric_max: null unit: metric pagination: current_page: 1 last_page: 4 per_page: 10 total: 37 next_page_url: 'https://app.rejoose.com/api/v3/evoices?page=2' prev_page_url: null errors: null status: 200 properties: data: type: object properties: items: type: array example: - external_invoice_id: '123456789' external_invoice_date: '2025-09-25' status: finalized type: evoice country_code: GB total_kg_co2_eq: 1234.56 manufacturing_kg_co2_eq: 912.4 transportation_kg_co2_eq: 103.7 eol_kg_co2_eq: 218.46 devices_count: 1 versions_count: 1 created_at: '2025-09-25T10:12:33.000000Z' updated_at: '2025-10-02T08:00:00.000000Z' unit: metric client: name: 'Eco-Friendly Solutions Ltd' organization_id: EcoFriendly-4987 company_id: ECOF1234567 vat_number: ECOF1234567 address: '100 Enviro Way' address2: 'Sustainability Lane 3' zip_code: ECO321 city: GreenVille country: Denmark devices: - external_id: RE8989121 original_manufacturer_part_number: 62B6MAT3EU brand: Lenovo model_name: 'ThinkPad T480' category: Notebook quantity: 10 lifetime_months: 72 tec_annual_kwh: 377.25 scope_2_kg_co2_eq: 278.41 scope_3_kg_co2_eq: 249.27 total_kg_co2_eq: 527.68 manufacturing_kg_co2_eq: null transportation_kg_co2_eq: null eol_kg_co2_eq: 18.42 refurbished: true variant: full refurbishment_impact_basis: rfi_category excluded: false epeat_tier: silver epeat_climate_plus: true epeat_status: active epeat_certificate_url: 'https://epeat.net/product-details/92ff91678f38486c' tco_certified: true tco_certificate_url: 'https://tcocertified.com/product-finder/?cert=D1010052' avoided_emissions_kg_co2_eq: 256.68 links: self: 'https://app.rejoose.com/api/v3/evoices/123456789' pdf: 'https://app.rejoose.com/api/v3/evoices/123456789/pdf' items: type: object properties: external_invoice_id: type: string example: '123456789' external_invoice_date: type: string example: '2025-09-25' status: type: string example: finalized type: type: string example: evoice country_code: type: string example: GB total_kg_co2_eq: type: number example: 1234.56 manufacturing_kg_co2_eq: type: number example: 912.4 transportation_kg_co2_eq: type: number example: 103.7 eol_kg_co2_eq: type: number example: 218.46 devices_count: type: integer example: 1 versions_count: type: integer example: 1 created_at: type: string example: '2025-09-25T10:12:33.000000Z' updated_at: type: string example: '2025-10-02T08:00:00.000000Z' unit: type: string example: metric client: type: object properties: name: type: string example: 'Eco-Friendly Solutions Ltd' organization_id: type: string example: EcoFriendly-4987 company_id: type: string example: ECOF1234567 vat_number: type: string example: ECOF1234567 address: type: string example: '100 Enviro Way' address2: type: string example: 'Sustainability Lane 3' zip_code: type: string example: ECO321 city: type: string example: GreenVille country: type: string example: Denmark devices: type: array example: - external_id: RE8989121 original_manufacturer_part_number: 62B6MAT3EU brand: Lenovo model_name: 'ThinkPad T480' category: Notebook quantity: 10 lifetime_months: 72 tec_annual_kwh: 377.25 scope_2_kg_co2_eq: 278.41 scope_3_kg_co2_eq: 249.27 total_kg_co2_eq: 527.68 manufacturing_kg_co2_eq: null transportation_kg_co2_eq: null eol_kg_co2_eq: 18.42 refurbished: true variant: full refurbishment_impact_basis: rfi_category excluded: false epeat_tier: silver epeat_climate_plus: true epeat_status: active epeat_certificate_url: 'https://epeat.net/product-details/92ff91678f38486c' tco_certified: true tco_certificate_url: 'https://tcocertified.com/product-finder/?cert=D1010052' avoided_emissions_kg_co2_eq: 256.68 items: type: object properties: external_id: type: string example: RE8989121 original_manufacturer_part_number: type: string example: 62B6MAT3EU brand: type: string example: Lenovo model_name: type: string example: 'ThinkPad T480' category: type: string example: Notebook quantity: type: integer example: 10 lifetime_months: type: integer example: 72 tec_annual_kwh: type: number example: 377.25 scope_2_kg_co2_eq: type: number example: 278.41 scope_3_kg_co2_eq: type: number example: 249.27 total_kg_co2_eq: type: number example: 527.68 manufacturing_kg_co2_eq: type: string example: null nullable: true transportation_kg_co2_eq: type: string example: null nullable: true eol_kg_co2_eq: type: number example: 18.42 refurbished: type: boolean example: true variant: type: string example: full refurbishment_impact_basis: type: string example: rfi_category excluded: type: boolean example: false epeat_tier: type: string example: silver epeat_climate_plus: type: boolean example: true epeat_status: type: string example: active epeat_certificate_url: type: string example: 'https://epeat.net/product-details/92ff91678f38486c' tco_certified: type: boolean example: true tco_certificate_url: type: string example: 'https://tcocertified.com/product-finder/?cert=D1010052' avoided_emissions_kg_co2_eq: type: number example: 256.68 links: type: object properties: self: type: string example: 'https://app.rejoose.com/api/v3/evoices/123456789' pdf: type: string example: 'https://app.rejoose.com/api/v3/evoices/123456789/pdf' filters: type: object properties: from: type: string example: '2025-01-01' to: type: string example: '2025-12-31' date_type: type: string example: external_invoice_date organization_id: type: string example: null nullable: true group_slug: type: string example: null nullable: true company_ids: type: string example: null nullable: true search: type: string example: null nullable: true status: type: string example: null nullable: true evoice_type: type: string example: null nullable: true updated_filter: type: string example: null nullable: true metric: type: string example: null nullable: true metric_min: type: string example: null nullable: true metric_max: type: string example: null nullable: true unit: type: string example: metric pagination: type: object properties: current_page: type: integer example: 1 last_page: type: integer example: 4 per_page: type: integer example: 10 total: type: integer example: 37 next_page_url: type: string example: 'https://app.rejoose.com/api/v3/evoices?page=2' prev_page_url: type: string example: null nullable: true errors: type: string example: null nullable: true status: type: integer example: 200 401: $ref: '#/components/responses/Unauthenticated' 403: $ref: '#/components/responses/InvalidAbility' 422: $ref: '#/components/responses/ValidationFailed' 429: $ref: '#/components/responses/TooManyRequests' 5XX: $ref: '#/components/responses/ServerError' tags: - e.voice /api/v3/evoices/clients: get: summary: 'List e.voice clients' operationId: listEvoiceClients description: "The clients you have sent e.voices to, one row per client.\n\n

Each client is listed once, told apart by organization_id, the customer id you send with each e.voice. subsidiaries lists the names, company IDs and countries your e.voices gave that client, one entry per company ID and country; names joins the names.

\n

Search. search finds clients whose organisation id, or a subsidiary's name or company ID, has a word that starts with each word of the text: search=friendly finds \"Eco-Friendly Solutions Ltd\" and search=DK3333 finds company ID DK33334444, but search=3333 does not.

\n

Paging. 10 clients per page by default, 100 at most. pagination.total is the number of clients found. Rows are sorted by organization_id.

\n

Tip. Use the organization_id of a row as the organization_id filter of List e.voices to get that client's e.voices.

" parameters: - in: query name: search description: 'Find clients whose organisation id, subsidiary name or company ID has a word starting with each word of this text. Up to 255 characters.' example: eco required: false schema: type: string description: 'Find clients whose organisation id, subsidiary name or company ID has a word starting with each word of this text. Up to 255 characters.' example: eco - in: query name: page description: 'The page, from 1.' example: 1 required: false schema: type: integer description: 'The page, from 1.' example: 1 - in: query name: per_page description: 'Clients per page, 1 to 100. Defaults to 10.' example: 10 required: false schema: type: integer description: 'Clients per page, 1 to 100. Defaults to 10.' example: 10 responses: 200: description: '' content: application/json: schema: type: object example: data: items: - organization_id: EcoFriendly-4987 names: 'Eco-Friendly Solutions Ltd' subsidiaries: - name: 'Eco-Friendly Solutions Ltd' company_id: ECOF1234567 vat_number: ECOF1234567 country_code: DK - organization_id: NordicOffice-2210 names: 'Nordic Office AB, Nordic Office Supplies A/S' subsidiaries: - name: 'Nordic Office AB' company_id: SE556677889901 vat_number: SE556677889901 country_code: SE - name: 'Nordic Office Supplies A/S' company_id: DK22104411 vat_number: DK22104411 country_code: DK pagination: current_page: 1 last_page: 4 per_page: 10 total: 37 next_page_url: 'https://app.rejoose.com/api/v3/evoices/clients?page=2' prev_page_url: null errors: null status: 200 properties: data: type: object properties: items: type: array example: - organization_id: EcoFriendly-4987 names: 'Eco-Friendly Solutions Ltd' subsidiaries: - name: 'Eco-Friendly Solutions Ltd' company_id: ECOF1234567 vat_number: ECOF1234567 country_code: DK - organization_id: NordicOffice-2210 names: 'Nordic Office AB, Nordic Office Supplies A/S' subsidiaries: - name: 'Nordic Office AB' company_id: SE556677889901 vat_number: SE556677889901 country_code: SE - name: 'Nordic Office Supplies A/S' company_id: DK22104411 vat_number: DK22104411 country_code: DK items: type: object properties: organization_id: type: string example: EcoFriendly-4987 names: type: string example: 'Eco-Friendly Solutions Ltd' subsidiaries: type: array example: - name: 'Eco-Friendly Solutions Ltd' company_id: ECOF1234567 vat_number: ECOF1234567 country_code: DK items: type: object properties: name: type: string example: 'Eco-Friendly Solutions Ltd' company_id: type: string example: ECOF1234567 vat_number: type: string example: ECOF1234567 country_code: type: string example: DK pagination: type: object properties: current_page: type: integer example: 1 last_page: type: integer example: 4 per_page: type: integer example: 10 total: type: integer example: 37 next_page_url: type: string example: 'https://app.rejoose.com/api/v3/evoices/clients?page=2' prev_page_url: type: string example: null nullable: true errors: type: string example: null nullable: true status: type: integer example: 200 401: $ref: '#/components/responses/Unauthenticated' 403: $ref: '#/components/responses/InvalidAbility' 422: $ref: '#/components/responses/ValidationFailed' 429: $ref: '#/components/responses/TooManyRequests' 5XX: $ref: '#/components/responses/ServerError' tags: - e.voice /api/v3/evoices/circularity/generate: post: summary: 'Generate an e.voice circularity' operationId: generateAnEvoiceCircularity description: 'Generates the e.voice circularity and returns its data.' parameters: [] responses: 201: description: 'Refurbished device paid by the Rejoose standard RFI (no own certified RFI covers the facility and date)' content: application/json: schema: type: object example: data: id: 48213 external_doc_id: ab57e0f1-2396-430c-ba5a-339d77fda792 external_doc_date: '2026-01-22' country_code: DK batch_id: batch-2026-Q1-electronics facility_external_id: null rfi_external_id: null rfi_version: null standard_rfi_external_id: standard-2026 standard_rfi_version: 1 e_waste_kg_co2_eq: 212.81 refurbishment_impact_kg_co2_eq: 75.088 refurbishment_offset_kg_co2_eq: 872.481 refurbishment_avoided_e_waste_kg: 10 recycling_avoided_emissions_kg_co2_eq: 52.404 recycling_avoided_e_waste_kg: 1.93 material_flow: total_input_kg: 352.59 total_recovered_kg: 301.43 recovered_percentage: 85.5 components: - name: 'Ferrous Metal' input_percentage: 0.4 input_kg: 1.53 recovered_kg: 1.2 recovery_rate: 78.4 secondary_summary: 'Steel (85%), Iron (15%)' - name: 'Printed Circuit Board' input_percentage: 0.1 input_kg: 0.36 recovered_kg: 0.29 recovery_rate: 80.6 secondary_summary: 'Copper (45%), Gold (30%), Other (25%)' - name: Plastic input_percentage: 0.1 input_kg: 0.31 recovered_kg: 0.22 recovery_rate: 71.0 secondary_summary: 'Recycled Plastic (100%)' - name: Other input_percentage: 0.1 input_kg: 0.39 recovered_kg: 0.22 recovery_rate: 56.4 secondary_summary: 'Mixed Materials (100%)' - name: 'Batteries (alkaline)' input_percentage: 14.2 input_kg: 50 recovered_kg: 33.5 recovery_rate: 67 secondary_summary: 'Zinc (40%), Manganese (35%), Steel (25%)' - name: 'Batteries (lead-acid)' input_percentage: 14.2 input_kg: 50 recovered_kg: 48 recovery_rate: 96 secondary_summary: 'Lead (70%), Plastic (20%), Sulfuric Acid (10%)' - name: 'Laser cartridges' input_percentage: 14.2 input_kg: 50 recovered_kg: 42.5 recovery_rate: 85 secondary_summary: 'Plastic (60%), Toner (25%), Metal (15%)' - name: 'Metals (ferrous)' input_percentage: 14.2 input_kg: 50 recovered_kg: 49 recovery_rate: 98 secondary_summary: 'Steel (90%), Iron (10%)' - name: 'Metals (non-ferrous)' input_percentage: 14.2 input_kg: 50 recovered_kg: 47.5 recovery_rate: 95 secondary_summary: 'Aluminium (60%), Copper (40%)' - name: 'Cardboard (corrugated)' input_percentage: 14.2 input_kg: 50 recovered_kg: 46.5 recovery_rate: 93 secondary_summary: 'Corrugated Fiber (100%)' - name: 'Plastics (mixed)' input_percentage: 14.2 input_kg: 50 recovered_kg: 32.5 recovery_rate: 65 secondary_summary: 'Mixed Post-Consumer Plastic (100%)' unit: metric client: name: 'Eco-Friendly Solutions Ltd' organization_id: EcoFriendly-4987 company_id: ECOF1234567 vat_number: ECOF1234567 address: '100 Enviro Way' address2: 'Sustainability Lane 3' zip_code: ECO321 city: GreenVille country: Denmark sender: name: 'Green Supply Co. Copenhagen Branch' company_id: DK12345678 vat_number: DK12345678 address: 'Havnegade 12' address2: 'Building B' zip_code: '1058' city: Copenhagen country: Denmark devices: - external_id: 20L5S1HE00 amount: 5 brand: Lenovo model_name: 'ThinkPad T480' category: Notebook weight_kg: 2 weight_from_product: true excluded: false recycled: false variant: full data_method: CA+ epeat_tier: silver epeat_climate_plus: true epeat_status: active epeat_certificate_url: 'https://www.epeat.net/registry/20L5S1HE00' tco_certified: true tco_certificate_url: 'https://tcocertified.com/product-finder/20L5S1HE00' refurbishment_impact_percentage: 0.05 refurbishment_impact_kg_co2_eq: 75.088 refurbishment_offset_kg_co2_eq: 872.481 refurbishment_impact_basis: standard_category rfi_per_unit_kg_co2_eq: 15.017664 rfi_per_unit_fixed_kg_co2_eq: 14.9 rfi_transport_co2_eq_per_tonne: 78.442667 refurbishment_avoided_e_waste_kg: 10 recycling_avoided_e_waste_kg: 0 recycling_avoided_emissions_kg_co2_eq: 0 - external_id: RE8989121 amount: 2 brand: HP model_name: 'EliteBook 840 G5' category: Notebook weight_kg: 2.59 weight_from_product: false excluded: false recycled: true variant: null data_method: CA epeat_tier: null epeat_climate_plus: null epeat_status: null epeat_certificate_url: null tco_certified: null tco_certificate_url: null refurbishment_impact_percentage: null refurbishment_impact_kg_co2_eq: 0 refurbishment_offset_kg_co2_eq: 0 refurbishment_impact_basis: null rfi_per_unit_kg_co2_eq: null rfi_per_unit_fixed_kg_co2_eq: null rfi_transport_co2_eq_per_tonne: null refurbishment_avoided_e_waste_kg: 0 recycling_avoided_e_waste_kg: 1.93 recycling_avoided_emissions_kg_co2_eq: 52.404 created_at: '2026-01-24T11:33:10.000000Z' links: self: 'https://app.rejoose.com/api/v3/evoices/circularity/ab57e0f1-2396-430c-ba5a-339d77fda792' pdf: 'https://app.rejoose.com/api/v3/evoices/circularity/ab57e0f1-2396-430c-ba5a-339d77fda792/pdf' base_64_pdf: 'https://app.rejoose.com/api/v3/evoices/circularity/ab57e0f1-2396-430c-ba5a-339d77fda792/pdf?base64=1' errors: null status: 201 properties: data: type: object properties: id: type: integer example: 48213 external_doc_id: type: string example: ab57e0f1-2396-430c-ba5a-339d77fda792 external_doc_date: type: string example: '2026-01-22' country_code: type: string example: DK batch_id: type: string example: batch-2026-Q1-electronics facility_external_id: type: string example: null nullable: true rfi_external_id: type: string example: null nullable: true rfi_version: type: string example: null nullable: true standard_rfi_external_id: type: string example: standard-2026 standard_rfi_version: type: integer example: 1 e_waste_kg_co2_eq: type: number example: 212.81 refurbishment_impact_kg_co2_eq: type: number example: 75.088 refurbishment_offset_kg_co2_eq: type: number example: 872.481 refurbishment_avoided_e_waste_kg: type: integer example: 10 recycling_avoided_emissions_kg_co2_eq: type: number example: 52.404 recycling_avoided_e_waste_kg: type: number example: 1.93 material_flow: type: object properties: total_input_kg: type: number example: 352.59 total_recovered_kg: type: number example: 301.43 recovered_percentage: type: number example: 85.5 components: type: array example: - name: 'Ferrous Metal' input_percentage: 0.4 input_kg: 1.53 recovered_kg: 1.2 recovery_rate: 78.4 secondary_summary: 'Steel (85%), Iron (15%)' - name: 'Printed Circuit Board' input_percentage: 0.1 input_kg: 0.36 recovered_kg: 0.29 recovery_rate: 80.6 secondary_summary: 'Copper (45%), Gold (30%), Other (25%)' - name: Plastic input_percentage: 0.1 input_kg: 0.31 recovered_kg: 0.22 recovery_rate: 71 secondary_summary: 'Recycled Plastic (100%)' - name: Other input_percentage: 0.1 input_kg: 0.39 recovered_kg: 0.22 recovery_rate: 56.4 secondary_summary: 'Mixed Materials (100%)' - name: 'Batteries (alkaline)' input_percentage: 14.2 input_kg: 50 recovered_kg: 33.5 recovery_rate: 67 secondary_summary: 'Zinc (40%), Manganese (35%), Steel (25%)' - name: 'Batteries (lead-acid)' input_percentage: 14.2 input_kg: 50 recovered_kg: 48 recovery_rate: 96 secondary_summary: 'Lead (70%), Plastic (20%), Sulfuric Acid (10%)' - name: 'Laser cartridges' input_percentage: 14.2 input_kg: 50 recovered_kg: 42.5 recovery_rate: 85 secondary_summary: 'Plastic (60%), Toner (25%), Metal (15%)' - name: 'Metals (ferrous)' input_percentage: 14.2 input_kg: 50 recovered_kg: 49 recovery_rate: 98 secondary_summary: 'Steel (90%), Iron (10%)' - name: 'Metals (non-ferrous)' input_percentage: 14.2 input_kg: 50 recovered_kg: 47.5 recovery_rate: 95 secondary_summary: 'Aluminium (60%), Copper (40%)' - name: 'Cardboard (corrugated)' input_percentage: 14.2 input_kg: 50 recovered_kg: 46.5 recovery_rate: 93 secondary_summary: 'Corrugated Fiber (100%)' - name: 'Plastics (mixed)' input_percentage: 14.2 input_kg: 50 recovered_kg: 32.5 recovery_rate: 65 secondary_summary: 'Mixed Post-Consumer Plastic (100%)' items: type: object properties: name: type: string example: 'Ferrous Metal' input_percentage: type: number example: 0.4 input_kg: type: number example: 1.53 recovered_kg: type: number example: 1.2 recovery_rate: type: number example: 78.4 secondary_summary: type: string example: 'Steel (85%), Iron (15%)' unit: type: string example: metric client: type: object properties: name: type: string example: 'Eco-Friendly Solutions Ltd' organization_id: type: string example: EcoFriendly-4987 company_id: type: string example: ECOF1234567 vat_number: type: string example: ECOF1234567 address: type: string example: '100 Enviro Way' address2: type: string example: 'Sustainability Lane 3' zip_code: type: string example: ECO321 city: type: string example: GreenVille country: type: string example: Denmark sender: type: object properties: name: type: string example: 'Green Supply Co. Copenhagen Branch' company_id: type: string example: DK12345678 vat_number: type: string example: DK12345678 address: type: string example: 'Havnegade 12' address2: type: string example: 'Building B' zip_code: type: string example: '1058' city: type: string example: Copenhagen country: type: string example: Denmark devices: type: array example: - external_id: 20L5S1HE00 amount: 5 brand: Lenovo model_name: 'ThinkPad T480' category: Notebook weight_kg: 2 weight_from_product: true excluded: false recycled: false variant: full data_method: CA+ epeat_tier: silver epeat_climate_plus: true epeat_status: active epeat_certificate_url: 'https://www.epeat.net/registry/20L5S1HE00' tco_certified: true tco_certificate_url: 'https://tcocertified.com/product-finder/20L5S1HE00' refurbishment_impact_percentage: 0.05 refurbishment_impact_kg_co2_eq: 75.088 refurbishment_offset_kg_co2_eq: 872.481 refurbishment_impact_basis: standard_category rfi_per_unit_kg_co2_eq: 15.017664 rfi_per_unit_fixed_kg_co2_eq: 14.9 rfi_transport_co2_eq_per_tonne: 78.442667 refurbishment_avoided_e_waste_kg: 10 recycling_avoided_e_waste_kg: 0 recycling_avoided_emissions_kg_co2_eq: 0 - external_id: RE8989121 amount: 2 brand: HP model_name: 'EliteBook 840 G5' category: Notebook weight_kg: 2.59 weight_from_product: false excluded: false recycled: true variant: null data_method: CA epeat_tier: null epeat_climate_plus: null epeat_status: null epeat_certificate_url: null tco_certified: null tco_certificate_url: null refurbishment_impact_percentage: null refurbishment_impact_kg_co2_eq: 0 refurbishment_offset_kg_co2_eq: 0 refurbishment_impact_basis: null rfi_per_unit_kg_co2_eq: null rfi_per_unit_fixed_kg_co2_eq: null rfi_transport_co2_eq_per_tonne: null refurbishment_avoided_e_waste_kg: 0 recycling_avoided_e_waste_kg: 1.93 recycling_avoided_emissions_kg_co2_eq: 52.404 items: type: object properties: external_id: type: string example: 20L5S1HE00 amount: type: integer example: 5 brand: type: string example: Lenovo model_name: type: string example: 'ThinkPad T480' category: type: string example: Notebook weight_kg: type: integer example: 2 weight_from_product: type: boolean example: true excluded: type: boolean example: false recycled: type: boolean example: false variant: type: string example: full data_method: type: string example: CA+ epeat_tier: type: string example: silver epeat_climate_plus: type: boolean example: true epeat_status: type: string example: active epeat_certificate_url: type: string example: 'https://www.epeat.net/registry/20L5S1HE00' tco_certified: type: boolean example: true tco_certificate_url: type: string example: 'https://tcocertified.com/product-finder/20L5S1HE00' refurbishment_impact_percentage: type: number example: 0.05 refurbishment_impact_kg_co2_eq: type: number example: 75.088 refurbishment_offset_kg_co2_eq: type: number example: 872.481 refurbishment_impact_basis: type: string example: standard_category rfi_per_unit_kg_co2_eq: type: number example: 15.017664 rfi_per_unit_fixed_kg_co2_eq: type: number example: 14.9 rfi_transport_co2_eq_per_tonne: type: number example: 78.442667 refurbishment_avoided_e_waste_kg: type: integer example: 10 recycling_avoided_e_waste_kg: type: integer example: 0 recycling_avoided_emissions_kg_co2_eq: type: integer example: 0 created_at: type: string example: '2026-01-24T11:33:10.000000Z' links: type: object properties: self: type: string example: 'https://app.rejoose.com/api/v3/evoices/circularity/ab57e0f1-2396-430c-ba5a-339d77fda792' pdf: type: string example: 'https://app.rejoose.com/api/v3/evoices/circularity/ab57e0f1-2396-430c-ba5a-339d77fda792/pdf' base_64_pdf: type: string example: 'https://app.rejoose.com/api/v3/evoices/circularity/ab57e0f1-2396-430c-ba5a-339d77fda792/pdf?base64=1' errors: type: string example: null nullable: true status: type: integer example: 201 401: $ref: '#/components/responses/Unauthenticated' 403: description: 'API key without the required ability; Subscription usage limit reached. See "Errors" in the API reference.' content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' examples: invalidAbility: summary: 'API key without the required ability' value: data: null errors: forbidden: - 'Invalid ability provided.' status: 403 evoice: summary: 'Subscription usage limit reached' value: data: null errors: forbidden: - 'Your max limit on e.voice is reached. Contact us on "sales@rejoose.com" or "+45 71 74 70 30" to change your limit.' status: 403 evoiceCircularity: summary: 'Subscription usage limit reached' value: data: null errors: forbidden: - 'Your max limit on e.voice circularity is reached. Contact us on "sales@rejoose.com" or "+45 71 74 70 30" to change your limit.' status: 403 422: $ref: '#/components/responses/ValidationFailed' 429: $ref: '#/components/responses/TooManyRequests' 5XX: $ref: '#/components/responses/ServerError' tags: - 'e.voice - circularity' requestBody: required: true content: application/json: schema: type: object properties: external_doc_id: type: string description: 'A unique identifier linking the e.voice circularity to the associated document, such as a purchase order or credit note. This may also refer to any other unique identifier. Must not exceed 255 characters.' example: '123456789' external_doc_date: type: string description: 'The date of the document, such as a purchase order or credit note, following the invoicing date in ISO 8601 format (YYYY-MM-DD). Must be a valid date.' example: '2023-09-25' e_waste_kg: type: number description: 'Weight of non-recycled electronics in kilograms, used for calculating the carbon emissions related to e-waste. Must be between 0 and 999999.99.' example: 10.0 country_code: type: string description: "The country code from which the products are sent. Use an ISO 3166-1 alpha-2 country code or its alpha-3 form (e.g. GB or GBR; canonicalized to alpha-2 on ingest), or an ISO 3166-2 subdivision code where state-level emission factors are available: US states use the 'US-' prefix (e.g. US-CA) and Australian states use the 'AU-' prefix (e.g. AU-VIC, AU-NSW). Bare AU still resolves to the Australian national factor." example: GB supplier_contact: type: string description: 'Optional. Supplier contact email address, visible to the customer on the e.voice circularity when provided. This can be a person or a general mailbox. Must be between 1 and 80 characters.' example: example@rejoose.com batch_id: type: string description: 'Optional. The batch of products you received as an ITAD, for example one pickup from a customer. Give every e.voice circularity from that batch the same value, and you can filter List e.voice circularities and the circularity report by it. Up to 255 characters. See Reporting IDs.' example: batch-2024-Q1-electronics client: type: object description: 'Client information object. It carries two identifiers that decide your reporting: `organization_id`, which identifies your customer, and `company_id`, which identifies the company, branch office, or subsidiary within that customer. All reporting is aggregated on `organization_id`, so use one unique and static value per customer and send it on every document; a customer sent under several values is reported as several customers. Read Reporting IDs first.' example: name: 'Eco-Friendly Solutions Ltd' company_id: ECOF1234567 organization_id: EcoFriendly-4987 address: '100 Enviro Way' address2: 'Sustainability Lane 3' zip_code: ECO321 city: GreenVille country: Denmark country_code: DK properties: name: type: string description: 'The name of the customer as on the invoice. This line will be shown on the e.voice circularity. Can be made anonymous by e.g., inserting a dash instead (-) or similar. Must be between 1 and 80 characters.' example: 'Eco-Friendly Solutions Ltd' organization_id: type: string description: 'The identifier of the customer organisation in your system, such as its customer or account number in your ERP. Every report, dashboard, list filter, and e.insights invitation is keyed on it, so send one unique and static value per customer, the same on every e.voice and e.voice circularity. Not the invoice number and not the company id. Must be between 1 and 240 characters. See Reporting IDs.' example: EcoFriendly-4987 company_id: type: string description: 'This defines the company, branch office, or subsidiary and, as with `organization_id`, is used for reporting purposes. This needs to be a unique static id from your ERP identifying this specific entity; it can also be a new unique identifier made for this specific purpose. Must be between 1 and 80 characters. Formerly `vat_number`, which is still accepted; we recommend `company_id`. See Reporting IDs.' example: ECOF1234567 address: type: string description: 'Optional. The address of the customer as on the invoice. When provided, this line will be shown on the e.voice circularity. Can be made anonymous by e.g., inserting a dash instead (-) or similar. Must be between 1 and 255 characters.' example: '100 Enviro Way' address2: type: string description: 'The second line of the address of the customer as on the invoice. Must be between 1 and 255 characters.' example: 'Sustainability Lane 3' zip_code: type: string description: 'Optional. The zip code of the customer as on the invoice. When provided, this line will be shown on the e.voice circularity. Can be made anonymous by e.g., inserting a dash instead (-) or similar. Must be between 1 and 80 characters.' example: ECO321 city: type: string description: 'Optional. The city of the customer as on the invoice. When provided, this line will be shown on the e.voice circularity. Can be made anonymous by e.g., inserting a dash instead (-) or similar. Must be between 1 and 80 characters.' example: GreenVille country: type: string description: 'The country of the customer as on the invoice. This line will be shown on the e.voice circularity. Can be made anonymous by e.g., inserting a dash instead (-) or similar. Must be between 1 and 80 characters.' example: Denmark country_code: type: string description: 'The country code of the customer as on the invoice. Use an ISO 3166-1 alpha-2 country code or its alpha-3 form (e.g. DK or DNK; canonicalized to alpha-2 on ingest), or an ISO 3166-2 subdivision code.' example: DK required: - name - organization_id - company_id - country - country_code sender: type: object description: 'Optional. Use this when your organisation issues documents from more than one office or location, and the document should show the office that sent the invoice. When sent, the sender is shown as the issuing party on the PDF instead of your registered partner details. When not sent, the PDF shows your registered partner details. A sender is identified by its `name`, `company_id`, and `country`: a later request with the same three values reuses the location as first stored, including its address. When sent, `name`, `company_id`, `country`, and `country_code` are required. Returned as `sender`, or `null` when not sent.' example: name: 'Eco-Friendly Solutions Nordic' company_id: DK12345678 address: 'Havnegade 12' address2: '2nd floor' zip_code: '1058' city: Copenhagen country: Denmark country_code: DK properties: name: type: string description: 'The name of the office or location that issues the document. Required when `sender` is sent. Must be between 1 and 80 characters.' example: 'Eco-Friendly Solutions Nordic' company_id: type: string description: 'The company identifier of the office or location, such as its VAT or registration number. Together with `name` and `country`, this identifies the sender. Required when `sender` is sent. Must be between 1 and 80 characters. Formerly `vat_number`, which is still accepted.' example: DK12345678 address: type: string description: 'Optional. The address of the office or location. Shown on the PDF when provided. Must be between 1 and 255 characters.' example: 'Havnegade 12' address2: type: string description: 'Optional. The second line of the address. Shown on the PDF when provided. Must be between 1 and 255 characters.' example: '2nd floor' zip_code: type: string description: 'Optional. The zip code of the office or location. Shown on the PDF when provided. Must be between 1 and 80 characters.' example: '1058' city: type: string description: 'Optional. The city of the office or location. Shown on the PDF when provided. Must be between 1 and 80 characters.' example: Copenhagen country: type: string description: 'The country of the office or location. Required when `sender` is sent. Must be between 1 and 80 characters.' example: Denmark country_code: type: string description: 'The country code of the office or location. Required when `sender` is sent. Use an ISO 3166-1 alpha-2 country code or its alpha-3 form (e.g. DK or DNK; canonicalised to alpha-2 on ingest).' example: DK required: - name - company_id - country - country_code devices: type: array description: 'Array of devices. You can submit multiple devices - the response example shows a typical scenario with both refurbished and recycled devices. A maximum of 500 devices per request applies by default; this limit can be changed — contact Rejoose if you would like it adjusted. Requests exceeding the limit are rejected with a 422 validation error.' example: - external_id: 20L5S1HE00 quantity: 5 category: Notebook brand: Lenovo model_name: 'ThinkPad T480' excluded: false recycled: false - external_id: RE8989121 quantity: 2 category: Notebook brand: HP model_name: 'EliteBook 840 G5' excluded: false recycled: true items: type: object properties: external_id: type: string description: "Provide the product's original manufacturer part number (MPN)." example: 20L5S1HE00 quantity: type: integer description: 'Number of units. Between 1 and 1000000.' example: 5 category: type: string description: 'The category information serves two purposes: together with the `external_id` and `brand`, it provides a 100% unique data set for secure product matching. In the absence of LCA data, the system can provide CA data for the brand/category. Must be between 1 and 80 characters.' example: Notebook brand: type: string description: 'The name of the manufacturer of the product. This information, together with the `external_id` (MPN) and `category`, provides a unique data set to match carbon data to the specific product. Must be between 1 and 80 characters.' example: Lenovo model_name: type: string description: 'Product model name.' example: 'ThinkPad T480' excluded: type: boolean description: "Use this if you want to exclude this product's carbon footprint and avoided emissions data from the e.voice circularity. Use cases could include products with no carbon footprint or products where the footprint has already been accounted for elsewhere. This defaults to false." example: false recycled: type: boolean description: 'Use this to indicate whether the device has been recycled. This can be used for tracking and reporting purposes related to circular economy metrics. This defaults to false.' example: false variant: type: string description: 'The refurbishment process the device went through, for example full (repair) or light (test and wipe). Only used for refurbished devices, but checked on every device: a value the facility does not have is rejected with a 422, also on an excluded or recycled device. Optional: when you leave it out, the facility''s default variant is used. Max 64 characters. See Refurbishment impact.' example: full required: - external_id - quantity - category - brand - model_name options: type: object description: 'Settings for the request. Unknown keys are rejected.' example: [] properties: unit: type: string description: "Specifies the unit system for weight measurements in the response. Use 'metric' for kilograms (kg) or 'imperial' for pounds (lbs). Defaults to metric." example: metric facility_external_id: type: string description: 'The external_id of your facility that refurbished the devices. Must be your own facility, not the Rejoose standard facility. Optional: when you leave it out, your default facility is used. See Refurbishment impact.' example: CPH-01 required: - external_doc_id - external_doc_date - country_code - client - devices '/api/v3/evoices/circularity/{external_doc_id}': get: summary: 'Retrieve an e.voice circularity' operationId: retrieveAnEvoiceCircularity description: 'Returns one e.voice circularity with its device lines and material_flow.' parameters: - in: query name: unit description: 'Unit system for weights and footprints: metric (default) or imperial.' example: imperial required: false schema: type: string description: 'Unit system for weights and footprints: metric (default) or imperial.' example: imperial responses: 200: description: 'Refurbished device paid by the Rejoose standard RFI' content: application/json: schema: type: object example: data: id: 48213 external_doc_id: ab57e0f1-2396-430c-ba5a-339d77fda792 external_doc_date: '2026-01-22' country_code: DK batch_id: batch-2026-Q1-electronics facility_external_id: null rfi_external_id: null rfi_version: null standard_rfi_external_id: standard-2026 standard_rfi_version: 1 e_waste_kg_co2_eq: 212.81 refurbishment_impact_kg_co2_eq: 75.088 refurbishment_offset_kg_co2_eq: 872.481 refurbishment_avoided_e_waste_kg: 10 recycling_avoided_emissions_kg_co2_eq: 52.404 recycling_avoided_e_waste_kg: 1.93 material_flow: total_input_kg: 352.59 total_recovered_kg: 301.43 recovered_percentage: 85.5 components: - name: 'Ferrous Metal' input_percentage: 0.4 input_kg: 1.53 recovered_kg: 1.2 recovery_rate: 78.4 secondary_summary: 'Steel (85%), Iron (15%)' - name: 'Printed Circuit Board' input_percentage: 0.1 input_kg: 0.36 recovered_kg: 0.29 recovery_rate: 80.6 secondary_summary: 'Copper (45%), Gold (30%), Other (25%)' - name: Plastic input_percentage: 0.1 input_kg: 0.31 recovered_kg: 0.22 recovery_rate: 71.0 secondary_summary: 'Recycled Plastic (100%)' - name: Other input_percentage: 0.1 input_kg: 0.39 recovered_kg: 0.22 recovery_rate: 56.4 secondary_summary: 'Mixed Materials (100%)' - name: 'Batteries (alkaline)' input_percentage: 14.2 input_kg: 50 recovered_kg: 33.5 recovery_rate: 67 secondary_summary: 'Zinc (40%), Manganese (35%), Steel (25%)' - name: 'Batteries (lead-acid)' input_percentage: 14.2 input_kg: 50 recovered_kg: 48 recovery_rate: 96 secondary_summary: 'Lead (70%), Plastic (20%), Sulfuric Acid (10%)' - name: 'Laser cartridges' input_percentage: 14.2 input_kg: 50 recovered_kg: 42.5 recovery_rate: 85 secondary_summary: 'Plastic (60%), Toner (25%), Metal (15%)' - name: 'Metals (ferrous)' input_percentage: 14.2 input_kg: 50 recovered_kg: 49 recovery_rate: 98 secondary_summary: 'Steel (90%), Iron (10%)' - name: 'Metals (non-ferrous)' input_percentage: 14.2 input_kg: 50 recovered_kg: 47.5 recovery_rate: 95 secondary_summary: 'Aluminium (60%), Copper (40%)' - name: 'Cardboard (corrugated)' input_percentage: 14.2 input_kg: 50 recovered_kg: 46.5 recovery_rate: 93 secondary_summary: 'Corrugated Fiber (100%)' - name: 'Plastics (mixed)' input_percentage: 14.2 input_kg: 50 recovered_kg: 32.5 recovery_rate: 65 secondary_summary: 'Mixed Post-Consumer Plastic (100%)' unit: metric client: name: 'Eco-Friendly Solutions Ltd' organization_id: EcoFriendly-4987 company_id: ECOF1234567 vat_number: ECOF1234567 address: '100 Enviro Way' address2: 'Sustainability Lane 3' zip_code: ECO321 city: GreenVille country: Denmark sender: name: 'Green Supply Co. Copenhagen Branch' company_id: DK12345678 vat_number: DK12345678 address: 'Havnegade 12' address2: 'Building B' zip_code: '1058' city: Copenhagen country: Denmark devices: - external_id: 20L5S1HE00 amount: 5 brand: Lenovo model_name: 'ThinkPad T480' category: Notebook weight_kg: 2 weight_from_product: true excluded: false recycled: false variant: full data_method: CA+ epeat_tier: silver epeat_climate_plus: true epeat_status: active epeat_certificate_url: 'https://www.epeat.net/registry/20L5S1HE00' tco_certified: true tco_certificate_url: 'https://tcocertified.com/product-finder/20L5S1HE00' refurbishment_impact_percentage: 0.05 refurbishment_impact_kg_co2_eq: 75.088 refurbishment_offset_kg_co2_eq: 872.481 refurbishment_impact_basis: standard_category rfi_per_unit_kg_co2_eq: 15.017664 rfi_per_unit_fixed_kg_co2_eq: 14.9 rfi_transport_co2_eq_per_tonne: 78.442667 refurbishment_avoided_e_waste_kg: 10 recycling_avoided_e_waste_kg: 0 recycling_avoided_emissions_kg_co2_eq: 0 - external_id: RE8989121 amount: 2 brand: HP model_name: 'EliteBook 840 G5' category: Notebook weight_kg: 2.59 weight_from_product: false excluded: false recycled: true variant: null data_method: CA epeat_tier: null epeat_climate_plus: null epeat_status: null epeat_certificate_url: null tco_certified: null tco_certificate_url: null refurbishment_impact_percentage: null refurbishment_impact_kg_co2_eq: 0 refurbishment_offset_kg_co2_eq: 0 refurbishment_impact_basis: null rfi_per_unit_kg_co2_eq: null rfi_per_unit_fixed_kg_co2_eq: null rfi_transport_co2_eq_per_tonne: null refurbishment_avoided_e_waste_kg: 0 recycling_avoided_e_waste_kg: 1.93 recycling_avoided_emissions_kg_co2_eq: 52.404 created_at: '2026-01-24T11:33:10.000000Z' links: self: 'https://app.rejoose.com/api/v3/evoices/circularity/ab57e0f1-2396-430c-ba5a-339d77fda792' pdf: 'https://app.rejoose.com/api/v3/evoices/circularity/ab57e0f1-2396-430c-ba5a-339d77fda792/pdf' base_64_pdf: 'https://app.rejoose.com/api/v3/evoices/circularity/ab57e0f1-2396-430c-ba5a-339d77fda792/pdf?base64=1' errors: null status: 200 properties: data: type: object properties: id: type: integer example: 48213 external_doc_id: type: string example: ab57e0f1-2396-430c-ba5a-339d77fda792 external_doc_date: type: string example: '2026-01-22' country_code: type: string example: DK batch_id: type: string example: batch-2026-Q1-electronics facility_external_id: type: string example: null nullable: true rfi_external_id: type: string example: null nullable: true rfi_version: type: string example: null nullable: true standard_rfi_external_id: type: string example: standard-2026 standard_rfi_version: type: integer example: 1 e_waste_kg_co2_eq: type: number example: 212.81 refurbishment_impact_kg_co2_eq: type: number example: 75.088 refurbishment_offset_kg_co2_eq: type: number example: 872.481 refurbishment_avoided_e_waste_kg: type: integer example: 10 recycling_avoided_emissions_kg_co2_eq: type: number example: 52.404 recycling_avoided_e_waste_kg: type: number example: 1.93 material_flow: type: object properties: total_input_kg: type: number example: 352.59 total_recovered_kg: type: number example: 301.43 recovered_percentage: type: number example: 85.5 components: type: array example: - name: 'Ferrous Metal' input_percentage: 0.4 input_kg: 1.53 recovered_kg: 1.2 recovery_rate: 78.4 secondary_summary: 'Steel (85%), Iron (15%)' - name: 'Printed Circuit Board' input_percentage: 0.1 input_kg: 0.36 recovered_kg: 0.29 recovery_rate: 80.6 secondary_summary: 'Copper (45%), Gold (30%), Other (25%)' - name: Plastic input_percentage: 0.1 input_kg: 0.31 recovered_kg: 0.22 recovery_rate: 71 secondary_summary: 'Recycled Plastic (100%)' - name: Other input_percentage: 0.1 input_kg: 0.39 recovered_kg: 0.22 recovery_rate: 56.4 secondary_summary: 'Mixed Materials (100%)' - name: 'Batteries (alkaline)' input_percentage: 14.2 input_kg: 50 recovered_kg: 33.5 recovery_rate: 67 secondary_summary: 'Zinc (40%), Manganese (35%), Steel (25%)' - name: 'Batteries (lead-acid)' input_percentage: 14.2 input_kg: 50 recovered_kg: 48 recovery_rate: 96 secondary_summary: 'Lead (70%), Plastic (20%), Sulfuric Acid (10%)' - name: 'Laser cartridges' input_percentage: 14.2 input_kg: 50 recovered_kg: 42.5 recovery_rate: 85 secondary_summary: 'Plastic (60%), Toner (25%), Metal (15%)' - name: 'Metals (ferrous)' input_percentage: 14.2 input_kg: 50 recovered_kg: 49 recovery_rate: 98 secondary_summary: 'Steel (90%), Iron (10%)' - name: 'Metals (non-ferrous)' input_percentage: 14.2 input_kg: 50 recovered_kg: 47.5 recovery_rate: 95 secondary_summary: 'Aluminium (60%), Copper (40%)' - name: 'Cardboard (corrugated)' input_percentage: 14.2 input_kg: 50 recovered_kg: 46.5 recovery_rate: 93 secondary_summary: 'Corrugated Fiber (100%)' - name: 'Plastics (mixed)' input_percentage: 14.2 input_kg: 50 recovered_kg: 32.5 recovery_rate: 65 secondary_summary: 'Mixed Post-Consumer Plastic (100%)' items: type: object properties: name: type: string example: 'Ferrous Metal' input_percentage: type: number example: 0.4 input_kg: type: number example: 1.53 recovered_kg: type: number example: 1.2 recovery_rate: type: number example: 78.4 secondary_summary: type: string example: 'Steel (85%), Iron (15%)' unit: type: string example: metric client: type: object properties: name: type: string example: 'Eco-Friendly Solutions Ltd' organization_id: type: string example: EcoFriendly-4987 company_id: type: string example: ECOF1234567 vat_number: type: string example: ECOF1234567 address: type: string example: '100 Enviro Way' address2: type: string example: 'Sustainability Lane 3' zip_code: type: string example: ECO321 city: type: string example: GreenVille country: type: string example: Denmark sender: type: object properties: name: type: string example: 'Green Supply Co. Copenhagen Branch' company_id: type: string example: DK12345678 vat_number: type: string example: DK12345678 address: type: string example: 'Havnegade 12' address2: type: string example: 'Building B' zip_code: type: string example: '1058' city: type: string example: Copenhagen country: type: string example: Denmark devices: type: array example: - external_id: 20L5S1HE00 amount: 5 brand: Lenovo model_name: 'ThinkPad T480' category: Notebook weight_kg: 2 weight_from_product: true excluded: false recycled: false variant: full data_method: CA+ epeat_tier: silver epeat_climate_plus: true epeat_status: active epeat_certificate_url: 'https://www.epeat.net/registry/20L5S1HE00' tco_certified: true tco_certificate_url: 'https://tcocertified.com/product-finder/20L5S1HE00' refurbishment_impact_percentage: 0.05 refurbishment_impact_kg_co2_eq: 75.088 refurbishment_offset_kg_co2_eq: 872.481 refurbishment_impact_basis: standard_category rfi_per_unit_kg_co2_eq: 15.017664 rfi_per_unit_fixed_kg_co2_eq: 14.9 rfi_transport_co2_eq_per_tonne: 78.442667 refurbishment_avoided_e_waste_kg: 10 recycling_avoided_e_waste_kg: 0 recycling_avoided_emissions_kg_co2_eq: 0 - external_id: RE8989121 amount: 2 brand: HP model_name: 'EliteBook 840 G5' category: Notebook weight_kg: 2.59 weight_from_product: false excluded: false recycled: true variant: null data_method: CA epeat_tier: null epeat_climate_plus: null epeat_status: null epeat_certificate_url: null tco_certified: null tco_certificate_url: null refurbishment_impact_percentage: null refurbishment_impact_kg_co2_eq: 0 refurbishment_offset_kg_co2_eq: 0 refurbishment_impact_basis: null rfi_per_unit_kg_co2_eq: null rfi_per_unit_fixed_kg_co2_eq: null rfi_transport_co2_eq_per_tonne: null refurbishment_avoided_e_waste_kg: 0 recycling_avoided_e_waste_kg: 1.93 recycling_avoided_emissions_kg_co2_eq: 52.404 items: type: object properties: external_id: type: string example: 20L5S1HE00 amount: type: integer example: 5 brand: type: string example: Lenovo model_name: type: string example: 'ThinkPad T480' category: type: string example: Notebook weight_kg: type: integer example: 2 weight_from_product: type: boolean example: true excluded: type: boolean example: false recycled: type: boolean example: false variant: type: string example: full data_method: type: string example: CA+ epeat_tier: type: string example: silver epeat_climate_plus: type: boolean example: true epeat_status: type: string example: active epeat_certificate_url: type: string example: 'https://www.epeat.net/registry/20L5S1HE00' tco_certified: type: boolean example: true tco_certificate_url: type: string example: 'https://tcocertified.com/product-finder/20L5S1HE00' refurbishment_impact_percentage: type: number example: 0.05 refurbishment_impact_kg_co2_eq: type: number example: 75.088 refurbishment_offset_kg_co2_eq: type: number example: 872.481 refurbishment_impact_basis: type: string example: standard_category rfi_per_unit_kg_co2_eq: type: number example: 15.017664 rfi_per_unit_fixed_kg_co2_eq: type: number example: 14.9 rfi_transport_co2_eq_per_tonne: type: number example: 78.442667 refurbishment_avoided_e_waste_kg: type: integer example: 10 recycling_avoided_e_waste_kg: type: integer example: 0 recycling_avoided_emissions_kg_co2_eq: type: integer example: 0 created_at: type: string example: '2026-01-24T11:33:10.000000Z' links: type: object properties: self: type: string example: 'https://app.rejoose.com/api/v3/evoices/circularity/ab57e0f1-2396-430c-ba5a-339d77fda792' pdf: type: string example: 'https://app.rejoose.com/api/v3/evoices/circularity/ab57e0f1-2396-430c-ba5a-339d77fda792/pdf' base_64_pdf: type: string example: 'https://app.rejoose.com/api/v3/evoices/circularity/ab57e0f1-2396-430c-ba5a-339d77fda792/pdf?base64=1' errors: type: string example: null nullable: true status: type: integer example: 200 401: $ref: '#/components/responses/Unauthenticated' 403: $ref: '#/components/responses/InvalidAbility' 404: $ref: '#/components/responses/NotFound' 422: $ref: '#/components/responses/ValidationFailed' 429: $ref: '#/components/responses/TooManyRequests' 5XX: $ref: '#/components/responses/ServerError' tags: - 'e.voice - circularity' parameters: - in: path name: external_doc_id description: 'The external document ID, URL-encoded twice: `2024/001` is sent as `2024%252F001`. See IDs in URLs.' example: ab57e0f1-2396-430c-ba5a-339d77fda792 required: true schema: type: string '/api/v3/evoices/circularity/{external_doc_id}/pdf': get: summary: 'Download an e.voice circularity as PDF' operationId: downloadAnEvoiceCircularityAsPDF description: "Returns the e.voice circularity PDF: the current document, or with changes=true the changes document, which is the same document with an old › new marker on every value an update changed since it was generated (each marker shows the field's most recent change). A document that has never been updated has no changes document yet." parameters: - in: query name: locale description: 'The language of the PDF: en-US (default), en-GB, en-DK (English with Danish number formatting), da-DK, de-DE, es-ES, fr-FR or nb-NO. Any other value is rejected with a 422.' example: da-DK required: false schema: type: string description: 'The language of the PDF: en-US (default), en-GB, en-DK (English with Danish number formatting), da-DK, de-DE, es-ES, fr-FR or nb-NO. Any other value is rejected with a 422.' example: da-DK - in: query name: unit description: 'Unit system for weights and footprints: metric (default) or imperial.' example: imperial required: false schema: type: string description: 'Unit system for weights and footprints: metric (default) or imperial.' example: imperial - in: query name: changes description: 'true returns the changes document instead of the current one. Defaults to false.' example: true required: false schema: type: boolean description: 'true returns the changes document instead of the current one. Defaults to false.' example: true - in: query name: base64 description: 'true (or 1) returns the PDF as base64 in a JSON body ({"data": "..."}) instead of a binary stream. Defaults to false.' example: false required: false schema: type: boolean description: 'true (or 1) returns the PDF as base64 in a JSON body ({"data": "..."}) instead of a binary stream. Defaults to false.' example: false responses: 200: description: '' content: text/plain: schema: type: string example: 'application/pdf The PDF file' 401: $ref: '#/components/responses/Unauthenticated' 403: $ref: '#/components/responses/InvalidAbility' 404: $ref: '#/components/responses/NotFound' 409: description: '' content: application/json: schema: oneOf: - description: 'The circularity failed and has no PDF' type: object example: data: null errors: conflict: - 'Evoice circularity with external document id ab57e0f1-2396-430c-ba5a-339d77fda792 failed and has no PDF. Generate it again to replace it.' status: 409 meta: external_doc_id: ab57e0f1-2396-430c-ba5a-339d77fda792 status: failed failure_reason: 'E.voice generation failed. Please try again later or contact support if the problem continues.' properties: data: type: string example: null nullable: true errors: type: object properties: conflict: type: array example: - 'Evoice circularity with external document id ab57e0f1-2396-430c-ba5a-339d77fda792 failed and has no PDF. Generate it again to replace it.' items: type: string status: type: integer example: 409 meta: type: object properties: external_doc_id: type: string example: ab57e0f1-2396-430c-ba5a-339d77fda792 status: type: string example: failed failure_reason: type: string example: 'E.voice generation failed. Please try again later or contact support if the problem continues.' - description: 'changes=true, but the circularity has never been updated' type: object example: data: null errors: conflict: - 'Evoice circularity with external document id ab57e0f1-2396-430c-ba5a-339d77fda792 has no change history yet. The changes document exists once an update has changed it.' status: 409 meta: external_doc_id: ab57e0f1-2396-430c-ba5a-339d77fda792 status: finalized versions_count: 0 properties: data: type: string example: null nullable: true errors: type: object properties: conflict: type: array example: - 'Evoice circularity with external document id ab57e0f1-2396-430c-ba5a-339d77fda792 has no change history yet. The changes document exists once an update has changed it.' items: type: string status: type: integer example: 409 meta: type: object properties: external_doc_id: type: string example: ab57e0f1-2396-430c-ba5a-339d77fda792 status: type: string example: finalized versions_count: type: integer example: 0 422: $ref: '#/components/responses/ValidationFailed' 429: $ref: '#/components/responses/TooManyRequests' 5XX: $ref: '#/components/responses/ServerError' tags: - 'e.voice - circularity' parameters: - in: path name: external_doc_id description: 'The external document ID, URL-encoded twice: `2024/001` is sent as `2024%252F001`. See IDs in URLs.' example: ab57e0f1-2396-430c-ba5a-339d77fda792 required: true schema: type: string /api/v3/evoices/circularity: get: summary: 'List e.voice circularities' operationId: listEvoiceCircularities description: 'One page of your e.voice circularities, newest first, each with its device lines but without material_flow.' parameters: - in: query name: from description: 'The first day of the period (YYYY-MM-DD). Defaults to the first day of your accounting period.' example: '2025-01-01' required: false schema: type: string description: 'The first day of the period (YYYY-MM-DD). Defaults to the first day of your accounting period.' example: '2025-01-01' - in: query name: to description: 'The last day of the period (YYYY-MM-DD). Must be on or after `from`. Defaults to the last day of your accounting period.' example: '2025-12-31' required: false schema: type: string description: 'The last day of the period (YYYY-MM-DD). Must be on or after `from`. Defaults to the last day of your accounting period.' example: '2025-12-31' - in: query name: date_type description: 'The date that places a document in the period: `external_doc_date` (the document date you sent), `created_at` or `last_updated_at`. Defaults to external_doc_date.' example: external_doc_date required: false schema: type: string description: 'The date that places a document in the period: `external_doc_date` (the document date you sent), `created_at` or `last_updated_at`. Defaults to external_doc_date.' example: external_doc_date - in: query name: organization_id description: 'Only documents of this customer organisation (the `client.organization_id` you sent).' example: EcoFriendly-4987 required: false schema: type: string description: 'Only documents of this customer organisation (the `client.organization_id` you sent).' example: EcoFriendly-4987 - in: query name: batch_id description: 'Only documents of this batch.' example: batch-2024-Q1-electronics required: false schema: type: string description: 'Only documents of this batch.' example: batch-2024-Q1-electronics - in: query name: company_ids description: 'Only these companies (the `client.company_id` values you sent). At most 100.' example: - ECOF1234567 required: false schema: type: array description: 'Only these companies (the `client.company_id` values you sent). At most 100.' example: - ECOF1234567 items: type: string - in: query name: search description: 'Only documents whose document ID (`external_doc_id`) or customer name contains this text.' example: Eco-Friendly required: false schema: type: string description: 'Only documents whose document ID (`external_doc_id`) or customer name contains this text.' example: Eco-Friendly - in: query name: updated_filter description: '`updated` for documents changed after creation only, `not_updated` for unchanged documents only. Leave it out for all.' example: updated required: false schema: type: string description: '`updated` for documents changed after creation only, `not_updated` for unchanged documents only. Leave it out for all.' example: updated - in: query name: metric description: 'The value that `metric_min` and `metric_max` apply to, in kg: `recycling_avoided_emissions_kg_co2_eq`, `e_waste_kg_co2_eq`, `refurbishment_impact_kg_co2_eq`, `refurbishment_offset_kg_co2_eq`, `refurbishment_avoided_e_waste_kg` or `recycling_avoided_e_waste_kg`. Defaults to `recycling_avoided_emissions_kg_co2_eq` when a bound is sent without it.' example: e_waste_kg_co2_eq required: false schema: type: string description: 'The value that `metric_min` and `metric_max` apply to, in kg: `recycling_avoided_emissions_kg_co2_eq`, `e_waste_kg_co2_eq`, `refurbishment_impact_kg_co2_eq`, `refurbishment_offset_kg_co2_eq`, `refurbishment_avoided_e_waste_kg` or `recycling_avoided_e_waste_kg`. Defaults to `recycling_avoided_emissions_kg_co2_eq` when a bound is sent without it.' example: e_waste_kg_co2_eq - in: query name: metric_min description: 'Only documents whose `metric` is at least this value.' example: 100.0 required: false schema: type: number description: 'Only documents whose `metric` is at least this value.' example: 100.0 - in: query name: metric_max description: 'Only documents whose `metric` is at most this value. Bounds are in kg, from 0 to 99999999999, and `metric_max` must be at least `metric_min`.' example: 5000.0 required: false schema: type: number description: 'Only documents whose `metric` is at most this value. Bounds are in kg, from 0 to 99999999999, and `metric_max` must be at least `metric_min`.' example: 5000.0 - in: query name: sort_by description: '`external_doc_date` (default) or `external_doc_id`.' example: external_doc_date required: false schema: type: string description: '`external_doc_date` (default) or `external_doc_id`.' example: external_doc_date - in: query name: sort_direction description: '`desc` (default) or `asc`.' example: desc required: false schema: type: string description: '`desc` (default) or `asc`.' example: desc - in: query name: page description: 'The page, from 1.' example: 1 required: false schema: type: integer description: 'The page, from 1.' example: 1 - in: query name: per_page description: 'Rows per page, 1 to 100. Defaults to 10.' example: 10 required: false schema: type: integer description: 'Rows per page, 1 to 100. Defaults to 10.' example: 10 - in: query name: unit description: 'Unit system for weights and footprints: `metric` (default) or `imperial`.' example: metric required: false schema: type: string description: 'Unit system for weights and footprints: `metric` (default) or `imperial`.' example: metric responses: 200: description: '' content: application/json: schema: type: object example: data: items: - external_doc_id: '123456789' external_doc_date: '2025-09-25' status: finalized country_code: GB batch_id: batch-2024-Q1-electronics e_waste_kg_co2_eq: 812.4 refurbishment_impact_kg_co2_eq: 96.2 refurbishment_offset_kg_co2_eq: 1540.7 refurbishment_avoided_e_waste_kg: 210.5 recycling_avoided_emissions_kg_co2_eq: 331.9 recycling_avoided_e_waste_kg: 88.3 devices_count: 1 versions_count: 0 last_updated_at: null created_at: '2025-09-25T10:12:33.000000Z' unit: metric client: name: 'Eco-Friendly Solutions Ltd' organization_id: EcoFriendly-4987 company_id: ECOF1234567 vat_number: ECOF1234567 address: '100 Enviro Way' address2: 'Sustainability Lane 3' zip_code: ECO321 city: GreenVille country: Denmark devices: - external_id: 20L5S1HE00 amount: 5 brand: Lenovo model_name: 'ThinkPad T480' category: Notebook weight_kg: 2 weight_from_product: true excluded: false recycled: false variant: full data_method: CA+ epeat_tier: silver epeat_climate_plus: true epeat_status: active epeat_certificate_url: 'https://www.epeat.net/registry/20L5S1HE00' tco_certified: true tco_certificate_url: 'https://tcocertified.com/product-finder/20L5S1HE00' refurbishment_impact_percentage: 0.05 refurbishment_impact_kg_co2_eq: 75.088 refurbishment_offset_kg_co2_eq: 872.481 refurbishment_impact_basis: standard_category rfi_per_unit_kg_co2_eq: 15.017664 rfi_per_unit_fixed_kg_co2_eq: 14.9 rfi_transport_co2_eq_per_tonne: 78.442667 refurbishment_avoided_e_waste_kg: 10 recycling_avoided_e_waste_kg: 0 recycling_avoided_emissions_kg_co2_eq: 0 links: self: 'https://app.rejoose.com/api/v3/evoices/circularity/123456789' pdf: 'https://app.rejoose.com/api/v3/evoices/circularity/123456789/pdf' filters: from: '2025-01-01' to: '2025-12-31' date_type: external_doc_date organization_id: null batch_id: null company_ids: null search: null updated_filter: null metric: null metric_min: null metric_max: null unit: metric pagination: current_page: 1 last_page: 2 per_page: 10 total: 14 next_page_url: 'https://app.rejoose.com/api/v3/evoices/circularity?page=2' prev_page_url: null errors: null status: 200 properties: data: type: object properties: items: type: array example: - external_doc_id: '123456789' external_doc_date: '2025-09-25' status: finalized country_code: GB batch_id: batch-2024-Q1-electronics e_waste_kg_co2_eq: 812.4 refurbishment_impact_kg_co2_eq: 96.2 refurbishment_offset_kg_co2_eq: 1540.7 refurbishment_avoided_e_waste_kg: 210.5 recycling_avoided_emissions_kg_co2_eq: 331.9 recycling_avoided_e_waste_kg: 88.3 devices_count: 1 versions_count: 0 last_updated_at: null created_at: '2025-09-25T10:12:33.000000Z' unit: metric client: name: 'Eco-Friendly Solutions Ltd' organization_id: EcoFriendly-4987 company_id: ECOF1234567 vat_number: ECOF1234567 address: '100 Enviro Way' address2: 'Sustainability Lane 3' zip_code: ECO321 city: GreenVille country: Denmark devices: - external_id: 20L5S1HE00 amount: 5 brand: Lenovo model_name: 'ThinkPad T480' category: Notebook weight_kg: 2 weight_from_product: true excluded: false recycled: false variant: full data_method: CA+ epeat_tier: silver epeat_climate_plus: true epeat_status: active epeat_certificate_url: 'https://www.epeat.net/registry/20L5S1HE00' tco_certified: true tco_certificate_url: 'https://tcocertified.com/product-finder/20L5S1HE00' refurbishment_impact_percentage: 0.05 refurbishment_impact_kg_co2_eq: 75.088 refurbishment_offset_kg_co2_eq: 872.481 refurbishment_impact_basis: standard_category rfi_per_unit_kg_co2_eq: 15.017664 rfi_per_unit_fixed_kg_co2_eq: 14.9 rfi_transport_co2_eq_per_tonne: 78.442667 refurbishment_avoided_e_waste_kg: 10 recycling_avoided_e_waste_kg: 0 recycling_avoided_emissions_kg_co2_eq: 0 links: self: 'https://app.rejoose.com/api/v3/evoices/circularity/123456789' pdf: 'https://app.rejoose.com/api/v3/evoices/circularity/123456789/pdf' items: type: object properties: external_doc_id: type: string example: '123456789' external_doc_date: type: string example: '2025-09-25' status: type: string example: finalized country_code: type: string example: GB batch_id: type: string example: batch-2024-Q1-electronics e_waste_kg_co2_eq: type: number example: 812.4 refurbishment_impact_kg_co2_eq: type: number example: 96.2 refurbishment_offset_kg_co2_eq: type: number example: 1540.7 refurbishment_avoided_e_waste_kg: type: number example: 210.5 recycling_avoided_emissions_kg_co2_eq: type: number example: 331.9 recycling_avoided_e_waste_kg: type: number example: 88.3 devices_count: type: integer example: 1 versions_count: type: integer example: 0 last_updated_at: type: string example: null nullable: true created_at: type: string example: '2025-09-25T10:12:33.000000Z' unit: type: string example: metric client: type: object properties: name: type: string example: 'Eco-Friendly Solutions Ltd' organization_id: type: string example: EcoFriendly-4987 company_id: type: string example: ECOF1234567 vat_number: type: string example: ECOF1234567 address: type: string example: '100 Enviro Way' address2: type: string example: 'Sustainability Lane 3' zip_code: type: string example: ECO321 city: type: string example: GreenVille country: type: string example: Denmark devices: type: array example: - external_id: 20L5S1HE00 amount: 5 brand: Lenovo model_name: 'ThinkPad T480' category: Notebook weight_kg: 2 weight_from_product: true excluded: false recycled: false variant: full data_method: CA+ epeat_tier: silver epeat_climate_plus: true epeat_status: active epeat_certificate_url: 'https://www.epeat.net/registry/20L5S1HE00' tco_certified: true tco_certificate_url: 'https://tcocertified.com/product-finder/20L5S1HE00' refurbishment_impact_percentage: 0.05 refurbishment_impact_kg_co2_eq: 75.088 refurbishment_offset_kg_co2_eq: 872.481 refurbishment_impact_basis: standard_category rfi_per_unit_kg_co2_eq: 15.017664 rfi_per_unit_fixed_kg_co2_eq: 14.9 rfi_transport_co2_eq_per_tonne: 78.442667 refurbishment_avoided_e_waste_kg: 10 recycling_avoided_e_waste_kg: 0 recycling_avoided_emissions_kg_co2_eq: 0 items: type: object properties: external_id: type: string example: 20L5S1HE00 amount: type: integer example: 5 brand: type: string example: Lenovo model_name: type: string example: 'ThinkPad T480' category: type: string example: Notebook weight_kg: type: integer example: 2 weight_from_product: type: boolean example: true excluded: type: boolean example: false recycled: type: boolean example: false variant: type: string example: full data_method: type: string example: CA+ epeat_tier: type: string example: silver epeat_climate_plus: type: boolean example: true epeat_status: type: string example: active epeat_certificate_url: type: string example: 'https://www.epeat.net/registry/20L5S1HE00' tco_certified: type: boolean example: true tco_certificate_url: type: string example: 'https://tcocertified.com/product-finder/20L5S1HE00' refurbishment_impact_percentage: type: number example: 0.05 refurbishment_impact_kg_co2_eq: type: number example: 75.088 refurbishment_offset_kg_co2_eq: type: number example: 872.481 refurbishment_impact_basis: type: string example: standard_category rfi_per_unit_kg_co2_eq: type: number example: 15.017664 rfi_per_unit_fixed_kg_co2_eq: type: number example: 14.9 rfi_transport_co2_eq_per_tonne: type: number example: 78.442667 refurbishment_avoided_e_waste_kg: type: integer example: 10 recycling_avoided_e_waste_kg: type: integer example: 0 recycling_avoided_emissions_kg_co2_eq: type: integer example: 0 links: type: object properties: self: type: string example: 'https://app.rejoose.com/api/v3/evoices/circularity/123456789' pdf: type: string example: 'https://app.rejoose.com/api/v3/evoices/circularity/123456789/pdf' filters: type: object properties: from: type: string example: '2025-01-01' to: type: string example: '2025-12-31' date_type: type: string example: external_doc_date organization_id: type: string example: null nullable: true batch_id: type: string example: null nullable: true company_ids: type: string example: null nullable: true search: type: string example: null nullable: true updated_filter: type: string example: null nullable: true metric: type: string example: null nullable: true metric_min: type: string example: null nullable: true metric_max: type: string example: null nullable: true unit: type: string example: metric pagination: type: object properties: current_page: type: integer example: 1 last_page: type: integer example: 2 per_page: type: integer example: 10 total: type: integer example: 14 next_page_url: type: string example: 'https://app.rejoose.com/api/v3/evoices/circularity?page=2' prev_page_url: type: string example: null nullable: true errors: type: string example: null nullable: true status: type: integer example: 200 401: $ref: '#/components/responses/Unauthenticated' 403: $ref: '#/components/responses/InvalidAbility' 422: $ref: '#/components/responses/ValidationFailed' 429: $ref: '#/components/responses/TooManyRequests' 5XX: $ref: '#/components/responses/ServerError' tags: - 'e.voice - circularity' /api/v3/evoices/circularity/clients: get: summary: 'List e.voice circularity clients' operationId: listEvoiceCircularityClients description: "The clients you have sent circularity documents to, one row per client.\n\n

Each client is listed once, told apart by organization_id, the customer id you send with each circularity document. subsidiaries lists the names, company IDs and countries your circularity documents gave that client, one entry per company ID and country; names joins the names.

\n

Search. search finds clients whose organisation id, or a subsidiary's name or company ID, has a word that starts with each word of the text: search=friendly finds \"Eco-Friendly Solutions Ltd\" and search=DK3333 finds company ID DK33334444, but search=3333 does not.

\n

Paging. 10 clients per page by default, 100 at most. pagination.total is the number of clients found. Rows are sorted by organization_id.

\n

Tip. Use the organization_id of a row as the organization_id filter of List e.voice circularities to get that client's circularity documents.

" parameters: - in: query name: search description: 'Find clients whose organisation id, subsidiary name or company ID has a word starting with each word of this text. Up to 255 characters.' example: eco required: false schema: type: string description: 'Find clients whose organisation id, subsidiary name or company ID has a word starting with each word of this text. Up to 255 characters.' example: eco - in: query name: page description: 'The page, from 1.' example: 1 required: false schema: type: integer description: 'The page, from 1.' example: 1 - in: query name: per_page description: 'Clients per page, 1 to 100. Defaults to 10.' example: 10 required: false schema: type: integer description: 'Clients per page, 1 to 100. Defaults to 10.' example: 10 responses: 200: description: '' content: application/json: schema: type: object example: data: items: - organization_id: EcoFriendly-4987 names: 'Eco-Friendly Solutions Ltd' subsidiaries: - name: 'Eco-Friendly Solutions Ltd' company_id: ECOF1234567 vat_number: ECOF1234567 country_code: DK - organization_id: NordicOffice-2210 names: 'Nordic Office AB, Nordic Office Supplies A/S' subsidiaries: - name: 'Nordic Office AB' company_id: SE556677889901 vat_number: SE556677889901 country_code: SE - name: 'Nordic Office Supplies A/S' company_id: DK22104411 vat_number: DK22104411 country_code: DK pagination: current_page: 1 last_page: 4 per_page: 10 total: 37 next_page_url: 'https://app.rejoose.com/api/v3/evoices/circularity/clients?page=2' prev_page_url: null errors: null status: 200 properties: data: type: object properties: items: type: array example: - organization_id: EcoFriendly-4987 names: 'Eco-Friendly Solutions Ltd' subsidiaries: - name: 'Eco-Friendly Solutions Ltd' company_id: ECOF1234567 vat_number: ECOF1234567 country_code: DK - organization_id: NordicOffice-2210 names: 'Nordic Office AB, Nordic Office Supplies A/S' subsidiaries: - name: 'Nordic Office AB' company_id: SE556677889901 vat_number: SE556677889901 country_code: SE - name: 'Nordic Office Supplies A/S' company_id: DK22104411 vat_number: DK22104411 country_code: DK items: type: object properties: organization_id: type: string example: EcoFriendly-4987 names: type: string example: 'Eco-Friendly Solutions Ltd' subsidiaries: type: array example: - name: 'Eco-Friendly Solutions Ltd' company_id: ECOF1234567 vat_number: ECOF1234567 country_code: DK items: type: object properties: name: type: string example: 'Eco-Friendly Solutions Ltd' company_id: type: string example: ECOF1234567 vat_number: type: string example: ECOF1234567 country_code: type: string example: DK pagination: type: object properties: current_page: type: integer example: 1 last_page: type: integer example: 4 per_page: type: integer example: 10 total: type: integer example: 37 next_page_url: type: string example: 'https://app.rejoose.com/api/v3/evoices/circularity/clients?page=2' prev_page_url: type: string example: null nullable: true errors: type: string example: null nullable: true status: type: integer example: 200 401: $ref: '#/components/responses/Unauthenticated' 403: $ref: '#/components/responses/InvalidAbility' 422: $ref: '#/components/responses/ValidationFailed' 429: $ref: '#/components/responses/TooManyRequests' 5XX: $ref: '#/components/responses/ServerError' tags: - 'e.voice - circularity' /api/v3/reports/supplier-rcibr: post: summary: 'Generate RCIBR report' operationId: generateRCIBRReport description: 'Generates the RCIBR (IT Carbon Impact Benefits Report) of your circularity data as a PDF.' parameters: [] responses: 200: description: 'The PDF file (Content-Type: application/pdf)' content: text/plain: schema: type: string example: '%PDF-1.7 (binary PDF data)' 202: description: 'Queued (deferred=true, or the time limit was reached)' content: application/json: schema: type: object example: data: report_request: id: 9d2f6c1e-4b7a-4c8e-9f3d-2a6b8c0e1f47 type: supplier_rcibr status: queued filters: from: '2025-01-01' to: '2025-12-31' organization_name: 'Eco-Friendly Solutions Ltd' organization_id: EcoFriendly-4987 batch_id: null date_type: external_doc_date company_ids: null search: null updated_filter: null locale: en-US unit: metric fallback_reason: sync_deadline error: null requested_at: '2026-09-23T10:15:02+00:00' started_at: null completed_at: null expires_at: '2026-09-30T10:15:02+00:00' links: status: 'https://app.rejoose.com/api/v3/reports/requests/9d2f6c1e-4b7a-4c8e-9f3d-2a6b8c0e1f47' download: 'https://app.rejoose.com/api/v3/reports/requests/9d2f6c1e-4b7a-4c8e-9f3d-2a6b8c0e1f47/download' errors: null status: 202 properties: data: type: object properties: report_request: type: object properties: id: type: string example: 9d2f6c1e-4b7a-4c8e-9f3d-2a6b8c0e1f47 type: type: string example: supplier_rcibr status: type: string example: queued filters: type: object properties: from: type: string example: '2025-01-01' to: type: string example: '2025-12-31' organization_name: type: string example: 'Eco-Friendly Solutions Ltd' organization_id: type: string example: EcoFriendly-4987 batch_id: type: string example: null nullable: true date_type: type: string example: external_doc_date company_ids: type: string example: null nullable: true search: type: string example: null nullable: true updated_filter: type: string example: null nullable: true locale: type: string example: en-US unit: type: string example: metric fallback_reason: type: string example: sync_deadline error: type: string example: null nullable: true requested_at: type: string example: '2026-09-23T10:15:02+00:00' started_at: type: string example: null nullable: true completed_at: type: string example: null nullable: true expires_at: type: string example: '2026-09-30T10:15:02+00:00' links: type: object properties: status: type: string example: 'https://app.rejoose.com/api/v3/reports/requests/9d2f6c1e-4b7a-4c8e-9f3d-2a6b8c0e1f47' download: type: string example: 'https://app.rejoose.com/api/v3/reports/requests/9d2f6c1e-4b7a-4c8e-9f3d-2a6b8c0e1f47/download' errors: type: string example: null nullable: true status: type: integer example: 202 401: $ref: '#/components/responses/Unauthenticated' 403: description: 'API key without the required ability; Subscription usage limit reached; Not a supplier partner; Account restricted to sandbox mode. See "Errors" in the API reference.' content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' examples: invalidAbility: summary: 'API key without the required ability' value: data: null errors: forbidden: - 'Invalid ability provided.' status: 403 evoice: summary: 'Subscription usage limit reached' value: data: null errors: forbidden: - 'Your max limit on e.voice is reached. Contact us on "sales@rejoose.com" or "+45 71 74 70 30" to change your limit.' status: 403 evoiceCircularity: summary: 'Subscription usage limit reached' value: data: null errors: forbidden: - 'Your max limit on e.voice circularity is reached. Contact us on "sales@rejoose.com" or "+45 71 74 70 30" to change your limit.' status: 403 notSupplier: summary: 'Not a supplier partner' value: data: null errors: forbidden: - 'Only supplier partners can use this endpoint.' status: 403 sandboxOnly: summary: 'Account restricted to sandbox mode' value: data: null errors: forbidden: - 'Your account is restricted to sandbox mode. Please use the sandbox environment.' status: 403 422: description: 'No documents in the period Also returned when: A parameter failed validation. See "Errors" in the API reference.' content: application/json: schema: type: object example: data: null errors: unprocessable: - 'No e.voices found for the organization_id/group for the selected period.' status: 422 properties: data: type: string example: null nullable: true errors: type: object properties: unprocessable: type: array example: - 'No e.voices found for the organization_id/group for the selected period.' items: type: string status: type: integer example: 422 429: description: 'Too many reports in progress Also returned when: Rate limit exceeded. See "Errors" in the API reference.' content: application/json: schema: type: object example: data: null errors: too_many_requests: - 'You already have 10 reports in progress. Wait until one is completed, then try again.' status: 429 properties: data: type: string example: null nullable: true errors: type: object properties: too_many_requests: type: array example: - 'You already have 10 reports in progress. Wait until one is completed, then try again.' items: type: string status: type: integer example: 429 5XX: $ref: '#/components/responses/ServerError' tags: - Reports requestBody: required: true content: application/json: schema: type: object properties: organization_name: type: string description: 'The customer name printed on the report. Must not exceed 255 characters.' example: 'Eco-Friendly Solutions Ltd' from: type: string description: 'The first day of the period (YYYY-MM-DD).' example: '2025-01-01' to: type: string description: 'The last day of the period (YYYY-MM-DD). Must be on or after `from`.' example: '2025-12-31' organization_id: type: string description: 'Only include e.voice circularities of this customer organisation (the `client.organization_id` you sent). Leave it out for all customers. Must not exceed 240 characters.' example: EcoFriendly-4987 batch_id: type: string description: 'Only include e.voice circularities of this batch. Must not exceed 255 characters.' example: batch-2024-Q1-electronics date_type: type: string description: 'The date that places a document in the period: `external_doc_date` (the document date you sent), `created_at` or `last_updated_at`. Defaults to external_doc_date.' example: external_doc_date company_ids: type: array description: 'Only include these companies (the `client.company_id` values you sent). At most 100.' example: - ECOF1234567 items: type: string search: type: string description: 'Only include documents whose document ID (`external_doc_id`) or customer name contains this text. Must not exceed 255 characters.' example: Eco-Friendly updated_filter: type: string description: '`updated` for documents changed after creation only, `not_updated` for unchanged documents only. Leave it out for all.' example: updated metric: type: string description: 'The value that `metric_min` and `metric_max` apply to, in kg: `recycling_avoided_emissions_kg_co2_eq`, `e_waste_kg_co2_eq`, `refurbishment_impact_kg_co2_eq`, `refurbishment_offset_kg_co2_eq`, `refurbishment_avoided_e_waste_kg` or `recycling_avoided_e_waste_kg`.' example: e_waste_kg_co2_eq metric_min: type: number description: 'Only include documents whose `metric` is at least this value.' example: 100.0 metric_max: type: number description: 'Only include documents whose `metric` is at most this value.' example: 5000.0 locale: type: string description: 'The report language. One of en-US, en-GB, en-DK, da-DK, de-DE, es-ES, fr-FR, nb-NO. Defaults to en-US.' example: en-US unit: type: string description: '`metric` or `imperial`. Defaults to metric.' example: metric deferred: type: boolean description: '`true` always queues the report as a background job and returns 202. `false` (default) returns the PDF when it is ready in time.' example: false base64: type: boolean description: 'Synchronous only (not allowed with `deferred=true`). Return the PDF base64-encoded in `data.pdf_base64` of a JSON body instead of the raw file.' example: false required: - organization_name - from - to /api/v3/reports/supplier-csr: post: summary: 'Generate CSR report' operationId: generateCSRReport description: 'Generates the CSR (IT Corporate Sustainability Report) of your e.voice data as a PDF.' parameters: [] responses: 200: description: 'The PDF file (Content-Type: application/pdf)' content: text/plain: schema: type: string example: '%PDF-1.7 (binary PDF data)' 202: description: 'Queued (deferred=true, or the time limit was reached)' content: application/json: schema: type: object example: data: report_request: id: 7c1a9e52-0d3b-4f6e-8a21-5b9d4e7f0c13 type: supplier_csr status: queued filters: from: '2025-01-01' to: '2025-12-31' organization_name: 'Eco-Friendly Solutions Ltd' organization_id: EcoFriendly-4987 group_slug: null date_type: external_invoice_date company_ids: null search: null status: finalized evoice_type: null updated_filter: null locale: en-US unit: metric fallback_reason: sync_deadline error: null requested_at: '2026-10-29T10:15:02+00:00' started_at: null completed_at: null expires_at: '2026-11-05T10:15:02+00:00' links: status: 'https://app.rejoose.com/api/v3/reports/requests/7c1a9e52-0d3b-4f6e-8a21-5b9d4e7f0c13' download: 'https://app.rejoose.com/api/v3/reports/requests/7c1a9e52-0d3b-4f6e-8a21-5b9d4e7f0c13/download' errors: null status: 202 properties: data: type: object properties: report_request: type: object properties: id: type: string example: 7c1a9e52-0d3b-4f6e-8a21-5b9d4e7f0c13 type: type: string example: supplier_csr status: type: string example: queued filters: type: object properties: from: type: string example: '2025-01-01' to: type: string example: '2025-12-31' organization_name: type: string example: 'Eco-Friendly Solutions Ltd' organization_id: type: string example: EcoFriendly-4987 group_slug: type: string example: null nullable: true date_type: type: string example: external_invoice_date company_ids: type: string example: null nullable: true search: type: string example: null nullable: true status: type: string example: finalized evoice_type: type: string example: null nullable: true updated_filter: type: string example: null nullable: true locale: type: string example: en-US unit: type: string example: metric fallback_reason: type: string example: sync_deadline error: type: string example: null nullable: true requested_at: type: string example: '2026-10-29T10:15:02+00:00' started_at: type: string example: null nullable: true completed_at: type: string example: null nullable: true expires_at: type: string example: '2026-11-05T10:15:02+00:00' links: type: object properties: status: type: string example: 'https://app.rejoose.com/api/v3/reports/requests/7c1a9e52-0d3b-4f6e-8a21-5b9d4e7f0c13' download: type: string example: 'https://app.rejoose.com/api/v3/reports/requests/7c1a9e52-0d3b-4f6e-8a21-5b9d4e7f0c13/download' errors: type: string example: null nullable: true status: type: integer example: 202 401: $ref: '#/components/responses/Unauthenticated' 403: description: 'API key without the required ability; Subscription usage limit reached; Not a supplier partner; Account restricted to sandbox mode. See "Errors" in the API reference.' content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' examples: invalidAbility: summary: 'API key without the required ability' value: data: null errors: forbidden: - 'Invalid ability provided.' status: 403 evoice: summary: 'Subscription usage limit reached' value: data: null errors: forbidden: - 'Your max limit on e.voice is reached. Contact us on "sales@rejoose.com" or "+45 71 74 70 30" to change your limit.' status: 403 evoiceCircularity: summary: 'Subscription usage limit reached' value: data: null errors: forbidden: - 'Your max limit on e.voice circularity is reached. Contact us on "sales@rejoose.com" or "+45 71 74 70 30" to change your limit.' status: 403 notSupplier: summary: 'Not a supplier partner' value: data: null errors: forbidden: - 'Only supplier partners can use this endpoint.' status: 403 sandboxOnly: summary: 'Account restricted to sandbox mode' value: data: null errors: forbidden: - 'Your account is restricted to sandbox mode. Please use the sandbox environment.' status: 403 422: description: 'No e.voices in the period Also returned when: A parameter failed validation. See "Errors" in the API reference.' content: application/json: schema: type: object example: data: null errors: unprocessable: - 'No e.voices found for the organization_id/group for the selected period.' status: 422 properties: data: type: string example: null nullable: true errors: type: object properties: unprocessable: type: array example: - 'No e.voices found for the organization_id/group for the selected period.' items: type: string status: type: integer example: 422 429: description: 'Too many reports in progress Also returned when: Rate limit exceeded. See "Errors" in the API reference.' content: application/json: schema: type: object example: data: null errors: too_many_requests: - 'You already have 10 reports in progress. Wait until one is completed, then try again.' status: 429 properties: data: type: string example: null nullable: true errors: type: object properties: too_many_requests: type: array example: - 'You already have 10 reports in progress. Wait until one is completed, then try again.' items: type: string status: type: integer example: 429 5XX: $ref: '#/components/responses/ServerError' tags: - Reports requestBody: required: true content: application/json: schema: type: object properties: organization_name: type: string description: 'The customer name printed on the report. Must not exceed 255 characters.' example: 'Eco-Friendly Solutions Ltd' from: type: string description: 'The first day of the period (YYYY-MM-DD).' example: '2025-01-01' to: type: string description: 'The last day of the period (YYYY-MM-DD). Must be on or after `from`.' example: '2025-12-31' organization_id: type: string description: 'Only include e.voices of this customer organisation (the `client.organization_id` you sent). Leave it out for all customers. Must not exceed 240 characters.' example: EcoFriendly-4987 group_slug: type: string description: 'Only include e.voices of the customer organisations in this group (the `slug` from the groups endpoint). Must be one of your groups.' example: nordic-offices date_type: type: string description: 'The date that places an e.voice in the period: `external_invoice_date` (the invoice date you sent), `created_at` or `last_updated_at`. Defaults to external_invoice_date.' example: external_invoice_date company_ids: type: array description: 'Only include these companies (the `client.company_id` values you sent). At most 100.' example: - ECOF1234567 items: type: string search: type: string description: 'Only include e.voices whose invoice ID (`external_invoice_id`) or customer name contains this text. Must not exceed 255 characters.' example: INV-2025-001 status: type: string description: 'The e.voice status to include: `finalized` (default), `draft`, `pending`, `updating`, `failed`, `deleted`, or `updated` for e.voices that have a revision, whatever their status.' example: finalized evoice_type: type: string description: '`evoice` or `credit_note`. Leave it out for both.' example: evoice updated_filter: type: string description: '`updated` for e.voices changed after creation only, `not_updated` for unchanged e.voices only. Leave it out for all.' example: updated metric: type: string description: 'The total that `metric_min` and `metric_max` apply to, in kg CO2e: `total_kg_co2_eq`, `scope_3_kg_co2_eq` or `use_kg_co2_eq`.' example: total_kg_co2_eq metric_min: type: number description: 'Only include e.voices whose `metric` is at least this value.' example: 100.0 metric_max: type: number description: 'Only include e.voices whose `metric` is at most this value.' example: 5000.0 locale: type: string description: 'The report language. One of en-US, en-GB, en-DK, da-DK, de-DE, es-ES, fr-FR, nb-NO. Defaults to en-US.' example: en-US unit: type: string description: '`metric` or `imperial`. Defaults to metric.' example: metric deferred: type: boolean description: '`true` always queues the report as a background job and returns 202. `false` (default) returns the PDF when it is ready in time.' example: false base64: type: boolean description: 'Synchronous only (not allowed with `deferred=true`). Return the PDF base64-encoded in `data.pdf_base64` of a JSON body instead of the raw file.' example: false required: - organization_name - from - to '/api/v3/reports/requests/{reportRequestId}': get: summary: 'Retrieve a report request' operationId: retrieveAReportRequest description: 'Returns a queued report request and its status: `queued`, `processing`, `completed` or `failed`. A failed request has an `error` text; request the report again. A request older than 7 days is gone (404).' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: 9d2f6c1e-4b7a-4c8e-9f3d-2a6b8c0e1f47 type: supplier_rcibr status: completed filters: from: '2025-01-01' to: '2025-12-31' organization_name: 'Eco-Friendly Solutions Ltd' organization_id: EcoFriendly-4987 batch_id: null date_type: external_doc_date company_ids: null search: null updated_filter: null locale: en-US unit: metric fallback_reason: sync_deadline error: null requested_at: '2026-09-23T10:15:02+00:00' started_at: '2026-09-23T10:15:03+00:00' completed_at: '2026-09-23T10:15:41+00:00' expires_at: '2026-09-30T10:15:02+00:00' links: status: 'https://app.rejoose.com/api/v3/reports/requests/9d2f6c1e-4b7a-4c8e-9f3d-2a6b8c0e1f47' download: 'https://app.rejoose.com/api/v3/reports/requests/9d2f6c1e-4b7a-4c8e-9f3d-2a6b8c0e1f47/download' errors: null status: 200 properties: data: type: object properties: id: type: string example: 9d2f6c1e-4b7a-4c8e-9f3d-2a6b8c0e1f47 type: type: string example: supplier_rcibr status: type: string example: completed filters: type: object properties: from: type: string example: '2025-01-01' to: type: string example: '2025-12-31' organization_name: type: string example: 'Eco-Friendly Solutions Ltd' organization_id: type: string example: EcoFriendly-4987 batch_id: type: string example: null nullable: true date_type: type: string example: external_doc_date company_ids: type: string example: null nullable: true search: type: string example: null nullable: true updated_filter: type: string example: null nullable: true locale: type: string example: en-US unit: type: string example: metric fallback_reason: type: string example: sync_deadline error: type: string example: null nullable: true requested_at: type: string example: '2026-09-23T10:15:02+00:00' started_at: type: string example: '2026-09-23T10:15:03+00:00' completed_at: type: string example: '2026-09-23T10:15:41+00:00' expires_at: type: string example: '2026-09-30T10:15:02+00:00' links: type: object properties: status: type: string example: 'https://app.rejoose.com/api/v3/reports/requests/9d2f6c1e-4b7a-4c8e-9f3d-2a6b8c0e1f47' download: type: string example: 'https://app.rejoose.com/api/v3/reports/requests/9d2f6c1e-4b7a-4c8e-9f3d-2a6b8c0e1f47/download' errors: type: string example: null nullable: true status: type: integer example: 200 401: $ref: '#/components/responses/Unauthenticated' 403: description: 'API key without the required ability; Not a supplier partner; Account restricted to sandbox mode. See "Errors" in the API reference.' content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' examples: invalidAbility: summary: 'API key without the required ability' value: data: null errors: forbidden: - 'Invalid ability provided.' status: 403 notSupplier: summary: 'Not a supplier partner' value: data: null errors: forbidden: - 'Only supplier partners can use this endpoint.' status: 403 sandboxOnly: summary: 'Account restricted to sandbox mode' value: data: null errors: forbidden: - 'Your account is restricted to sandbox mode. Please use the sandbox environment.' status: 403 404: $ref: '#/components/responses/NotFound' 429: $ref: '#/components/responses/TooManyRequests' 5XX: $ref: '#/components/responses/ServerError' tags: - Reports parameters: - in: path name: reportRequestId description: 'The `id` of the report request from the 202 response.' example: 9d2f6c1e-4b7a-4c8e-9f3d-2a6b8c0e1f47 required: true schema: type: string '/api/v3/reports/requests/{reportRequestId}/download': get: summary: 'Get a report download link' operationId: getAReportDownloadLink description: 'Returns a download link for a completed report. The link is valid for 5 minutes; call this endpoint again for a new one. The report is kept for 7 days after the request.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: url: 'https://cdn.rejoose.io/api/reports/a1b2c3/9d2f6c1e-4b7a-4c8e-9f3d-2a6b8c0e1f47.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=300&X-Amz-Signature=...' file_name: supplier_rcibr_2025-01-01-2025-12-31.pdf expires_at: '2026-09-23T10:21:12+00:00' errors: null status: 200 properties: data: type: object properties: url: type: string example: 'https://cdn.rejoose.io/api/reports/a1b2c3/9d2f6c1e-4b7a-4c8e-9f3d-2a6b8c0e1f47.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=300&X-Amz-Signature=...' file_name: type: string example: supplier_rcibr_2025-01-01-2025-12-31.pdf expires_at: type: string example: '2026-09-23T10:21:12+00:00' errors: type: string example: null nullable: true status: type: integer example: 200 401: $ref: '#/components/responses/Unauthenticated' 403: description: 'API key without the required ability; Not a supplier partner; Account restricted to sandbox mode. See "Errors" in the API reference.' content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' examples: invalidAbility: summary: 'API key without the required ability' value: data: null errors: forbidden: - 'Invalid ability provided.' status: 403 notSupplier: summary: 'Not a supplier partner' value: data: null errors: forbidden: - 'Only supplier partners can use this endpoint.' status: 403 sandboxOnly: summary: 'Account restricted to sandbox mode' value: data: null errors: forbidden: - 'Your account is restricted to sandbox mode. Please use the sandbox environment.' status: 403 404: $ref: '#/components/responses/NotFound' 409: description: 'Not completed yet' content: application/json: schema: type: object example: data: null errors: conflict: - 'The report is not ready yet. Poll the status link until the status is completed.' status: 409 properties: data: type: string example: null nullable: true errors: type: object properties: conflict: type: array example: - 'The report is not ready yet. Poll the status link until the status is completed.' items: type: string status: type: integer example: 409 429: $ref: '#/components/responses/TooManyRequests' 5XX: $ref: '#/components/responses/ServerError' tags: - Reports parameters: - in: path name: reportRequestId description: 'The `id` of the report request from the 202 response.' example: 9d2f6c1e-4b7a-4c8e-9f3d-2a6b8c0e1f47 required: true schema: type: string /api/v3/products: get: summary: 'Look up a product' operationId: lookUpAProduct description: 'The GET endpoint returns the carbon footprint data of a single product.' parameters: - in: query name: manufacturer_part_number description: 'The unique manufacturer part number (SKU/MPN) provided by the vendor or distributor, or an internal part number.' example: 21MMSEJC00 required: true schema: type: string description: 'The unique manufacturer part number (SKU/MPN) provided by the vendor or distributor, or an internal part number.' example: 21MMSEJC00 - in: query name: brand description: "The product manufacturer's name. Used together with the MPN and category to ensure a unique data match." example: Lenovo required: true schema: type: string description: "The product manufacturer's name. Used together with the MPN and category to ensure a unique data match." example: Lenovo - in: query name: category description: 'Used alongside the external ID and brand to ensure accurate product matching. Also enables the system to provide carbon data for the category when specific LCA data is unavailable.' example: Notebook required: true schema: type: string description: 'Used alongside the external ID and brand to ensure accurate product matching. Also enables the system to provide carbon data for the category when specific LCA data is unavailable.' example: Notebook - in: query name: country_code description: "The country where the product is typically used. Use an ISO 3166-1 alpha-2 country code, or an ISO 3166-2 subdivision code where state-level emission factors are available: US states use the 'US-' prefix (e.g. US-CA) and Australian states use the 'AU-' prefix (e.g. AU-VIC, AU-NSW). Bare AU still resolves to the Australian national factor. Determines the carbon intensity used in calculations." example: GB required: true schema: type: string description: "The country where the product is typically used. Use an ISO 3166-1 alpha-2 country code, or an ISO 3166-2 subdivision code where state-level emission factors are available: US states use the 'US-' prefix (e.g. US-CA) and Australian states use the 'AU-' prefix (e.g. AU-VIC, AU-NSW). Bare AU still resolves to the Australian national factor. Determines the carbon intensity used in calculations." example: GB - in: query name: refurbished description: 'optional Indicates whether the product is refurbished (pre-owned). A value of 1 denotes a refurbished product. Cannot be combined with recycled.' example: 1 required: false schema: type: integer description: 'optional Indicates whether the product is refurbished (pre-owned). A value of 1 denotes a refurbished product. Cannot be combined with recycled.' example: 1 - in: query name: recycled description: 'optional Indicates whether the product is recycled. A value of 1 denotes a recycled product. Requires e.product+; without it the request is refused with a 422. Cannot be combined with refurbished, so the example request below sends only refurbished. Leave both out for a new product.' example: null required: false schema: type: integer description: 'optional Indicates whether the product is recycled. A value of 1 denotes a recycled product. Requires e.product+; without it the request is refused with a 422. Cannot be combined with refurbished, so the example request below sends only refurbished. Leave both out for a new product.' example: null - in: query name: facility_external_id description: 'optional The external_id of your facility that refurbished the product. Must be your own facility, not the Rejoose standard facility. Only used when refurbished is 1. When you leave it out, your default facility is used. See Refurbishment impact.' example: null required: false schema: type: string description: 'optional The external_id of your facility that refurbished the product. Must be your own facility, not the Rejoose standard facility. Only used when refurbished is 1. When you leave it out, your default facility is used. See Refurbishment impact.' example: null - in: query name: variant description: 'optional The refurbishment process the product went through, for example full (repair) or light (test and wipe). Only used when refurbished is 1. When you leave it out, the facility''s default variant is used. A value the facility does not have is rejected with a 422. Max 64 characters. See Refurbishment impact.' example: null required: false schema: type: string description: 'optional The refurbishment process the product went through, for example full (repair) or light (test and wipe). Only used when refurbished is 1. When you leave it out, the facility''s default variant is used. A value the facility does not have is rejected with a 422. Max 64 characters. See Refurbishment impact.' example: null - in: query name: unit description: "optional Unit preference for the response. Defaults to 'metric', which returns the kg and gram fields only. 'imperial' keeps those fields and adds a converted lb counterpart next to each of them (for example total_lb_co2_eq next to total_kg_co2_eq), so only an imperial response carries both units. Accepted values: 'metric', 'imperial'." example: imperial required: false schema: type: string description: "optional Unit preference for the response. Defaults to 'metric', which returns the kg and gram fields only. 'imperial' keeps those fields and adds a converted lb counterpart next to each of them (for example total_lb_co2_eq next to total_kg_co2_eq), so only an imperial response carries both units. Accepted values: 'metric', 'imperial'." example: imperial responses: 200: description: '' content: application/json: schema: oneOf: - description: 'Refurbished product' type: object example: data: manufacturer_part_number: 21MMSEJC00 brand: Lenovo category: Notebook country_code: GB refurbished: true recycled: false data_match: true product_match: true data_method: MS total_kg_co2_eq: 17.582 carbon_intensity_gram: 130.96 lifetime_month: 48 refurbishment_impact_kg_co2_eq: 8.618 refurbishment_offset_kg_co2_eq: 146.74 refurbishment_impact_basis: standard_category rfi_external_id: standard-2026 rfi_version: 1 variant: full rfi_per_unit_fixed_kg_co2_eq: 8.5 rfi_transport_co2_eq_per_tonne: 78.442667 rfi_weight_basis: device errors: null status: 200 properties: data: type: object properties: manufacturer_part_number: type: string example: 21MMSEJC00 brand: type: string example: Lenovo category: type: string example: Notebook country_code: type: string example: GB refurbished: type: boolean example: true recycled: type: boolean example: false data_match: type: boolean example: true product_match: type: boolean example: true data_method: type: string example: MS total_kg_co2_eq: type: number example: 17.582 carbon_intensity_gram: type: number example: 130.96 lifetime_month: type: integer example: 48 refurbishment_impact_kg_co2_eq: type: number example: 8.618 refurbishment_offset_kg_co2_eq: type: number example: 146.74 refurbishment_impact_basis: type: string example: standard_category rfi_external_id: type: string example: standard-2026 rfi_version: type: integer example: 1 variant: type: string example: full rfi_per_unit_fixed_kg_co2_eq: type: number example: 8.5 rfi_transport_co2_eq_per_tonne: type: number example: 78.442667 rfi_weight_basis: type: string example: device errors: type: string example: null nullable: true status: type: integer example: 200 - description: 'New product (neither refurbished nor recycled)' type: object example: data: manufacturer_part_number: 21MMSEJC00 brand: Lenovo category: Notebook country_code: GB refurbished: false recycled: false data_match: true product_match: true data_method: MS total_kg_co2_eq: 175.984 carbon_intensity_gram: 130.96 lifetime_month: 48 refurbishment_impact_kg_co2_eq: null refurbishment_offset_kg_co2_eq: null refurbishment_impact_basis: null rfi_external_id: null rfi_version: null variant: null rfi_per_unit_fixed_kg_co2_eq: null rfi_transport_co2_eq_per_tonne: null rfi_weight_basis: null errors: null status: 200 properties: data: type: object properties: manufacturer_part_number: type: string example: 21MMSEJC00 brand: type: string example: Lenovo category: type: string example: Notebook country_code: type: string example: GB refurbished: type: boolean example: false recycled: type: boolean example: false data_match: type: boolean example: true product_match: type: boolean example: true data_method: type: string example: MS total_kg_co2_eq: type: number example: 175.984 carbon_intensity_gram: type: number example: 130.96 lifetime_month: type: integer example: 48 refurbishment_impact_kg_co2_eq: type: string example: null nullable: true refurbishment_offset_kg_co2_eq: type: string example: null nullable: true refurbishment_impact_basis: type: string example: null nullable: true rfi_external_id: type: string example: null nullable: true rfi_version: type: string example: null nullable: true variant: type: string example: null nullable: true rfi_per_unit_fixed_kg_co2_eq: type: string example: null nullable: true rfi_transport_co2_eq_per_tonne: type: string example: null nullable: true rfi_weight_basis: type: string example: null nullable: true errors: type: string example: null nullable: true status: type: integer example: 200 - description: "Refurbished product, e.product+ (requires 'e.product-plus' for the detailed LCA breakdown)" type: object example: data: manufacturer_part_number: 21MMSEJC00 brand: Lenovo category: Notebook country_code: GB refurbished: true recycled: false data_match: true product_match: true data_method: MS total_kg_co2_eq: 17.582 carbon_intensity_gram: 130.96 lifetime_month: 48 refurbishment_impact_kg_co2_eq: 8.618 refurbishment_offset_kg_co2_eq: 146.74 refurbishment_impact_basis: standard_category rfi_external_id: standard-2026 rfi_version: 1 variant: full rfi_per_unit_fixed_kg_co2_eq: 8.5 rfi_transport_co2_eq_per_tonne: 78.442667 rfi_weight_basis: device manufacturing_kg_co2_eq: 0 transportation_kg_co2_eq: 0 use_kg_co2_eq: 7.638 end_of_life_kg_co2_eq: 1.326 tec_kwh: null recycling_avoided_e_waste_kg: null recycling_avoided_emissions_kg_co2_eq: null material_flow: null epeat_tier: gold epeat_climate_plus: true epeat_status: active epeat_certificate_url: 'https://epeat.net/product-details/EPEAT-21MMSEJC00' tco_certified: true tco_certificate_url: 'https://tcocertified.com/product-finder/?cert=TCO-21MMSEJC00' errors: null status: 200 properties: data: type: object properties: manufacturer_part_number: type: string example: 21MMSEJC00 brand: type: string example: Lenovo category: type: string example: Notebook country_code: type: string example: GB refurbished: type: boolean example: true recycled: type: boolean example: false data_match: type: boolean example: true product_match: type: boolean example: true data_method: type: string example: MS total_kg_co2_eq: type: number example: 17.582 carbon_intensity_gram: type: number example: 130.96 lifetime_month: type: integer example: 48 refurbishment_impact_kg_co2_eq: type: number example: 8.618 refurbishment_offset_kg_co2_eq: type: number example: 146.74 refurbishment_impact_basis: type: string example: standard_category rfi_external_id: type: string example: standard-2026 rfi_version: type: integer example: 1 variant: type: string example: full rfi_per_unit_fixed_kg_co2_eq: type: number example: 8.5 rfi_transport_co2_eq_per_tonne: type: number example: 78.442667 rfi_weight_basis: type: string example: device manufacturing_kg_co2_eq: type: integer example: 0 transportation_kg_co2_eq: type: integer example: 0 use_kg_co2_eq: type: number example: 7.638 end_of_life_kg_co2_eq: type: number example: 1.326 tec_kwh: type: string example: null nullable: true recycling_avoided_e_waste_kg: type: string example: null nullable: true recycling_avoided_emissions_kg_co2_eq: type: string example: null nullable: true material_flow: type: string example: null nullable: true epeat_tier: type: string example: gold epeat_climate_plus: type: boolean example: true epeat_status: type: string example: active epeat_certificate_url: type: string example: 'https://epeat.net/product-details/EPEAT-21MMSEJC00' tco_certified: type: boolean example: true tco_certificate_url: type: string example: 'https://tcocertified.com/product-finder/?cert=TCO-21MMSEJC00' errors: type: string example: null nullable: true status: type: integer example: 200 - description: 'Recycled product, e.product+ (adds recycling_avoided_e_waste_kg, recycling_avoided_emissions_kg_co2_eq and material_flow)' type: object example: data: manufacturer_part_number: 21MMSEJC00 brand: Lenovo category: Notebook country_code: GB refurbished: false recycled: true data_match: true product_match: true data_method: MS total_kg_co2_eq: null carbon_intensity_gram: null lifetime_month: null refurbishment_impact_kg_co2_eq: null refurbishment_offset_kg_co2_eq: null refurbishment_impact_basis: null rfi_external_id: null rfi_version: null variant: null rfi_per_unit_fixed_kg_co2_eq: null rfi_transport_co2_eq_per_tonne: null rfi_weight_basis: null manufacturing_kg_co2_eq: null transportation_kg_co2_eq: null use_kg_co2_eq: null end_of_life_kg_co2_eq: null tec_kwh: null recycling_avoided_e_waste_kg: 0.547 recycling_avoided_emissions_kg_co2_eq: 1.612 material_flow: total_input_kg: 1.38 total_recovered_kg: 0.547 recovered_percentage: 39.6 primary_components: 'Plastic (27%), Battery (18%), Flat-Panel Display Module (16%), Printed Circuit Board (14%), Aluminum (12%), Ferrous Metal (7%), Other Metals (4%), Copper (2%)' secondary_components: 'Aluminum sheet (28%), Steel sheet (24%), Copper wire (21%), Lithium cobalt oxide (15%), HDPE (6%), Nickel (3%), PET (2%), Precious metals (Au/Ag/Pd) (0.049%)' epeat_tier: null epeat_climate_plus: null epeat_status: null epeat_certificate_url: null tco_certified: null tco_certificate_url: null errors: null status: 200 properties: data: type: object properties: manufacturer_part_number: type: string example: 21MMSEJC00 brand: type: string example: Lenovo category: type: string example: Notebook country_code: type: string example: GB refurbished: type: boolean example: false recycled: type: boolean example: true data_match: type: boolean example: true product_match: type: boolean example: true data_method: type: string example: MS total_kg_co2_eq: type: string example: null nullable: true carbon_intensity_gram: type: string example: null nullable: true lifetime_month: type: string example: null nullable: true refurbishment_impact_kg_co2_eq: type: string example: null nullable: true refurbishment_offset_kg_co2_eq: type: string example: null nullable: true refurbishment_impact_basis: type: string example: null nullable: true rfi_external_id: type: string example: null nullable: true rfi_version: type: string example: null nullable: true variant: type: string example: null nullable: true rfi_per_unit_fixed_kg_co2_eq: type: string example: null nullable: true rfi_transport_co2_eq_per_tonne: type: string example: null nullable: true rfi_weight_basis: type: string example: null nullable: true manufacturing_kg_co2_eq: type: string example: null nullable: true transportation_kg_co2_eq: type: string example: null nullable: true use_kg_co2_eq: type: string example: null nullable: true end_of_life_kg_co2_eq: type: string example: null nullable: true tec_kwh: type: string example: null nullable: true recycling_avoided_e_waste_kg: type: number example: 0.547 recycling_avoided_emissions_kg_co2_eq: type: number example: 1.612 material_flow: type: object properties: total_input_kg: type: number example: 1.38 total_recovered_kg: type: number example: 0.547 recovered_percentage: type: number example: 39.6 primary_components: type: string example: 'Plastic (27%), Battery (18%), Flat-Panel Display Module (16%), Printed Circuit Board (14%), Aluminum (12%), Ferrous Metal (7%), Other Metals (4%), Copper (2%)' secondary_components: type: string example: 'Aluminum sheet (28%), Steel sheet (24%), Copper wire (21%), Lithium cobalt oxide (15%), HDPE (6%), Nickel (3%), PET (2%), Precious metals (Au/Ag/Pd) (0.049%)' epeat_tier: type: string example: null nullable: true epeat_climate_plus: type: string example: null nullable: true epeat_status: type: string example: null nullable: true epeat_certificate_url: type: string example: null nullable: true tco_certified: type: string example: null nullable: true tco_certificate_url: type: string example: null nullable: true errors: type: string example: null nullable: true status: type: integer example: 200 - description: 'New product, e.product+ (the only case that returns tec_kwh)' type: object example: data: manufacturer_part_number: 21MMSEJC00 brand: Lenovo category: Notebook country_code: GB refurbished: false recycled: false data_match: true product_match: true data_method: MS total_kg_co2_eq: 175.984 carbon_intensity_gram: 130.96 lifetime_month: 48 refurbishment_impact_kg_co2_eq: null refurbishment_offset_kg_co2_eq: null refurbishment_impact_basis: null rfi_external_id: null rfi_version: null variant: null rfi_per_unit_fixed_kg_co2_eq: null rfi_transport_co2_eq_per_tonne: null rfi_weight_basis: null manufacturing_kg_co2_eq: 156.28 transportation_kg_co2_eq: 10.74 use_kg_co2_eq: 7.638 end_of_life_kg_co2_eq: 1.326 tec_kwh: 14.58 recycling_avoided_e_waste_kg: null recycling_avoided_emissions_kg_co2_eq: null material_flow: null epeat_tier: null epeat_climate_plus: null epeat_status: null epeat_certificate_url: null tco_certified: true tco_certificate_url: 'https://tcocertified.com/product-finder/?cert=TCO-21MMSEJC00' errors: null status: 200 properties: data: type: object properties: manufacturer_part_number: type: string example: 21MMSEJC00 brand: type: string example: Lenovo category: type: string example: Notebook country_code: type: string example: GB refurbished: type: boolean example: false recycled: type: boolean example: false data_match: type: boolean example: true product_match: type: boolean example: true data_method: type: string example: MS total_kg_co2_eq: type: number example: 175.984 carbon_intensity_gram: type: number example: 130.96 lifetime_month: type: integer example: 48 refurbishment_impact_kg_co2_eq: type: string example: null nullable: true refurbishment_offset_kg_co2_eq: type: string example: null nullable: true refurbishment_impact_basis: type: string example: null nullable: true rfi_external_id: type: string example: null nullable: true rfi_version: type: string example: null nullable: true variant: type: string example: null nullable: true rfi_per_unit_fixed_kg_co2_eq: type: string example: null nullable: true rfi_transport_co2_eq_per_tonne: type: string example: null nullable: true rfi_weight_basis: type: string example: null nullable: true manufacturing_kg_co2_eq: type: number example: 156.28 transportation_kg_co2_eq: type: number example: 10.74 use_kg_co2_eq: type: number example: 7.638 end_of_life_kg_co2_eq: type: number example: 1.326 tec_kwh: type: number example: 14.58 recycling_avoided_e_waste_kg: type: string example: null nullable: true recycling_avoided_emissions_kg_co2_eq: type: string example: null nullable: true material_flow: type: string example: null nullable: true epeat_tier: type: string example: null nullable: true epeat_climate_plus: type: string example: null nullable: true epeat_status: type: string example: null nullable: true epeat_certificate_url: type: string example: null nullable: true tco_certified: type: boolean example: true tco_certificate_url: type: string example: 'https://tcocertified.com/product-finder/?cert=TCO-21MMSEJC00' errors: type: string example: null nullable: true status: type: integer example: 200 401: $ref: '#/components/responses/Unauthenticated' 403: description: 'Also returned when: API key without the required ability. See "Errors" in the API reference.' content: application/json: schema: oneOf: - description: 'No e.product subscription' type: object example: data: null errors: forbidden: - 'E/product is not enabled for your organization. Contact us on "sales@rejoose.com" or "+45 71 74 70 30" to enable it.' status: 403 properties: data: type: string example: null nullable: true errors: type: object properties: forbidden: type: array example: - 'E/product is not enabled for your organization. Contact us on "sales@rejoose.com" or "+45 71 74 70 30" to enable it.' items: type: string status: type: integer example: 403 - description: 'Usage limit reached and the product is new to the subscription period' type: object example: data: null errors: forbidden: - 'Your max limit on E/product is reached. Contact us on "sales@rejoose.com" or "+45 71 74 70 30" to change your limit. Products already retrieved in this subscription period remain available. Not yet retrieved: 21MMSEJC00 (Lenovo, refurbished).' status: 403 properties: data: type: string example: null nullable: true errors: type: object properties: forbidden: type: array example: - 'Your max limit on E/product is reached. Contact us on "sales@rejoose.com" or "+45 71 74 70 30" to change your limit. Products already retrieved in this subscription period remain available. Not yet retrieved: 21MMSEJC00 (Lenovo, refurbished).' items: type: string status: type: integer example: 403 404: description: 'No product or category data was found: data_match is false, the carbon data is null and errors.not_found explains the miss' content: application/json: schema: type: object example: data: manufacturer_part_number: 21MMSEJC00 brand: Lenovo category: Notebook country_code: GB refurbished: false recycled: false data_match: false product_match: false data_method: null total_kg_co2_eq: null carbon_intensity_gram: null lifetime_month: null refurbishment_impact_kg_co2_eq: null refurbishment_offset_kg_co2_eq: null refurbishment_impact_basis: null rfi_external_id: null rfi_version: null variant: null rfi_per_unit_fixed_kg_co2_eq: null rfi_transport_co2_eq_per_tonne: null rfi_weight_basis: null errors: not_found: - 'Product (21MMSEJC00 + Lenovo) and category (Notebook) not found' status: 404 properties: data: type: object properties: manufacturer_part_number: type: string example: 21MMSEJC00 brand: type: string example: Lenovo category: type: string example: Notebook country_code: type: string example: GB refurbished: type: boolean example: false recycled: type: boolean example: false data_match: type: boolean example: false product_match: type: boolean example: false data_method: type: string example: null nullable: true total_kg_co2_eq: type: string example: null nullable: true carbon_intensity_gram: type: string example: null nullable: true lifetime_month: type: string example: null nullable: true refurbishment_impact_kg_co2_eq: type: string example: null nullable: true refurbishment_offset_kg_co2_eq: type: string example: null nullable: true refurbishment_impact_basis: type: string example: null nullable: true rfi_external_id: type: string example: null nullable: true rfi_version: type: string example: null nullable: true variant: type: string example: null nullable: true rfi_per_unit_fixed_kg_co2_eq: type: string example: null nullable: true rfi_transport_co2_eq_per_tonne: type: string example: null nullable: true rfi_weight_basis: type: string example: null nullable: true errors: type: object properties: not_found: type: array example: - 'Product (21MMSEJC00 + Lenovo) and category (Notebook) not found' items: type: string status: type: integer example: 404 422: description: 'Recycled product without e.product+ Also returned when: A parameter failed validation. See "Errors" in the API reference.' content: application/json: schema: type: object example: data: null errors: recycled: - 'Recycled lookups require an e.product+ subscription. To enable access, contact support@rejoose.com.' status: 422 properties: data: type: string example: null nullable: true errors: type: object properties: recycled: type: array example: - 'Recycled lookups require an e.product+ subscription. To enable access, contact support@rejoose.com.' items: type: string status: type: integer example: 422 429: $ref: '#/components/responses/TooManyRequests' 5XX: $ref: '#/components/responses/ServerError' tags: - e.product post: summary: 'Look up products in bulk' operationId: lookUpProductsInBulk description: "Returns the carbon footprint data of 1 to 100 products in one request. Each entry is identified like a single lookup (manufacturer part number, brand, category and country) and carries its own refurbished or recycled flag, facility and variant, so one batch can mix new, refurbished and recycled products from different facilities. The response holds one entry per product, in request order; an entry without product or category data comes back with data_match false and null carbon data while the batch itself still answers 200. For larger catalogues, send several batches.\n\nWhat a product is, how to read an entry, the usage limit and e.product+ are described at the top of this section." parameters: [] responses: 200: description: '' content: application/json: schema: oneOf: - description: "Refurbished, recycled and new product in one batch, e.product+ (recycled requires 'e.product-plus')" type: object example: data: - manufacturer_part_number: 21MMSEJC00 brand: Lenovo category: Notebook country_code: GB refurbished: true recycled: false data_match: true product_match: true data_method: MS total_kg_co2_eq: 17.582 carbon_intensity_gram: 130.96 lifetime_month: 48 refurbishment_impact_kg_co2_eq: 8.618 refurbishment_offset_kg_co2_eq: 146.74 refurbishment_impact_basis: standard_category rfi_external_id: standard-2026 rfi_version: 1 variant: full rfi_per_unit_fixed_kg_co2_eq: 8.5 rfi_transport_co2_eq_per_tonne: 78.442667 rfi_weight_basis: device manufacturing_kg_co2_eq: 0 transportation_kg_co2_eq: 0 use_kg_co2_eq: 7.638 end_of_life_kg_co2_eq: 1.326 tec_kwh: null recycling_avoided_e_waste_kg: null recycling_avoided_emissions_kg_co2_eq: null material_flow: null epeat_tier: gold epeat_climate_plus: true epeat_status: active epeat_certificate_url: 'https://epeat.net/product-details/EPEAT-21MMSEJC00' tco_certified: true tco_certificate_url: 'https://tcocertified.com/product-finder/?cert=TCO-21MMSEJC00' - manufacturer_part_number: 21MMSEJC00 brand: Lenovo category: Notebook country_code: GB refurbished: false recycled: true data_match: true product_match: true data_method: MS total_kg_co2_eq: null carbon_intensity_gram: null lifetime_month: null refurbishment_impact_kg_co2_eq: null refurbishment_offset_kg_co2_eq: null refurbishment_impact_basis: null rfi_external_id: null rfi_version: null variant: null rfi_per_unit_fixed_kg_co2_eq: null rfi_transport_co2_eq_per_tonne: null rfi_weight_basis: null manufacturing_kg_co2_eq: null transportation_kg_co2_eq: null use_kg_co2_eq: null end_of_life_kg_co2_eq: null tec_kwh: null recycling_avoided_e_waste_kg: 0.547 recycling_avoided_emissions_kg_co2_eq: 1.612 material_flow: total_input_kg: 1.38 total_recovered_kg: 0.547 recovered_percentage: 39.6 primary_components: 'Plastic (27%), Battery (18%), Flat-Panel Display Module (16%), Printed Circuit Board (14%), Aluminum (12%), Ferrous Metal (7%), Other Metals (4%), Copper (2%)' secondary_components: 'Aluminum sheet (28%), Steel sheet (24%), Copper wire (21%), Lithium cobalt oxide (15%), HDPE (6%), Nickel (3%), PET (2%), Precious metals (Au/Ag/Pd) (0.049%)' epeat_tier: null epeat_climate_plus: null epeat_status: null epeat_certificate_url: null tco_certified: null tco_certificate_url: null - manufacturer_part_number: 21MMSEJC00 brand: Lenovo category: Notebook country_code: GB refurbished: false recycled: false data_match: true product_match: true data_method: MS total_kg_co2_eq: 175.984 carbon_intensity_gram: 130.96 lifetime_month: 48 refurbishment_impact_kg_co2_eq: null refurbishment_offset_kg_co2_eq: null refurbishment_impact_basis: null rfi_external_id: null rfi_version: null variant: null rfi_per_unit_fixed_kg_co2_eq: null rfi_transport_co2_eq_per_tonne: null rfi_weight_basis: null manufacturing_kg_co2_eq: 156.28 transportation_kg_co2_eq: 10.74 use_kg_co2_eq: 7.638 end_of_life_kg_co2_eq: 1.326 tec_kwh: 14.58 recycling_avoided_e_waste_kg: null recycling_avoided_emissions_kg_co2_eq: null material_flow: null epeat_tier: null epeat_climate_plus: null epeat_status: null epeat_certificate_url: null tco_certified: null tco_certificate_url: null errors: null status: 200 properties: data: type: array example: - manufacturer_part_number: 21MMSEJC00 brand: Lenovo category: Notebook country_code: GB refurbished: true recycled: false data_match: true product_match: true data_method: MS total_kg_co2_eq: 17.582 carbon_intensity_gram: 130.96 lifetime_month: 48 refurbishment_impact_kg_co2_eq: 8.618 refurbishment_offset_kg_co2_eq: 146.74 refurbishment_impact_basis: standard_category rfi_external_id: standard-2026 rfi_version: 1 variant: full rfi_per_unit_fixed_kg_co2_eq: 8.5 rfi_transport_co2_eq_per_tonne: 78.442667 rfi_weight_basis: device manufacturing_kg_co2_eq: 0 transportation_kg_co2_eq: 0 use_kg_co2_eq: 7.638 end_of_life_kg_co2_eq: 1.326 tec_kwh: null recycling_avoided_e_waste_kg: null recycling_avoided_emissions_kg_co2_eq: null material_flow: null epeat_tier: gold epeat_climate_plus: true epeat_status: active epeat_certificate_url: 'https://epeat.net/product-details/EPEAT-21MMSEJC00' tco_certified: true tco_certificate_url: 'https://tcocertified.com/product-finder/?cert=TCO-21MMSEJC00' - manufacturer_part_number: 21MMSEJC00 brand: Lenovo category: Notebook country_code: GB refurbished: false recycled: true data_match: true product_match: true data_method: MS total_kg_co2_eq: null carbon_intensity_gram: null lifetime_month: null refurbishment_impact_kg_co2_eq: null refurbishment_offset_kg_co2_eq: null refurbishment_impact_basis: null rfi_external_id: null rfi_version: null variant: null rfi_per_unit_fixed_kg_co2_eq: null rfi_transport_co2_eq_per_tonne: null rfi_weight_basis: null manufacturing_kg_co2_eq: null transportation_kg_co2_eq: null use_kg_co2_eq: null end_of_life_kg_co2_eq: null tec_kwh: null recycling_avoided_e_waste_kg: 0.547 recycling_avoided_emissions_kg_co2_eq: 1.612 material_flow: total_input_kg: 1.38 total_recovered_kg: 0.547 recovered_percentage: 39.6 primary_components: 'Plastic (27%), Battery (18%), Flat-Panel Display Module (16%), Printed Circuit Board (14%), Aluminum (12%), Ferrous Metal (7%), Other Metals (4%), Copper (2%)' secondary_components: 'Aluminum sheet (28%), Steel sheet (24%), Copper wire (21%), Lithium cobalt oxide (15%), HDPE (6%), Nickel (3%), PET (2%), Precious metals (Au/Ag/Pd) (0.049%)' epeat_tier: null epeat_climate_plus: null epeat_status: null epeat_certificate_url: null tco_certified: null tco_certificate_url: null - manufacturer_part_number: 21MMSEJC00 brand: Lenovo category: Notebook country_code: GB refurbished: false recycled: false data_match: true product_match: true data_method: MS total_kg_co2_eq: 175.984 carbon_intensity_gram: 130.96 lifetime_month: 48 refurbishment_impact_kg_co2_eq: null refurbishment_offset_kg_co2_eq: null refurbishment_impact_basis: null rfi_external_id: null rfi_version: null variant: null rfi_per_unit_fixed_kg_co2_eq: null rfi_transport_co2_eq_per_tonne: null rfi_weight_basis: null manufacturing_kg_co2_eq: 156.28 transportation_kg_co2_eq: 10.74 use_kg_co2_eq: 7.638 end_of_life_kg_co2_eq: 1.326 tec_kwh: 14.58 recycling_avoided_e_waste_kg: null recycling_avoided_emissions_kg_co2_eq: null material_flow: null epeat_tier: null epeat_climate_plus: null epeat_status: null epeat_certificate_url: null tco_certified: null tco_certificate_url: null items: type: object properties: manufacturer_part_number: type: string example: 21MMSEJC00 brand: type: string example: Lenovo category: type: string example: Notebook country_code: type: string example: GB refurbished: type: boolean example: true recycled: type: boolean example: false data_match: type: boolean example: true product_match: type: boolean example: true data_method: type: string example: MS total_kg_co2_eq: type: number example: 17.582 carbon_intensity_gram: type: number example: 130.96 lifetime_month: type: integer example: 48 refurbishment_impact_kg_co2_eq: type: number example: 8.618 refurbishment_offset_kg_co2_eq: type: number example: 146.74 refurbishment_impact_basis: type: string example: standard_category rfi_external_id: type: string example: standard-2026 rfi_version: type: integer example: 1 variant: type: string example: full rfi_per_unit_fixed_kg_co2_eq: type: number example: 8.5 rfi_transport_co2_eq_per_tonne: type: number example: 78.442667 rfi_weight_basis: type: string example: device manufacturing_kg_co2_eq: type: integer example: 0 transportation_kg_co2_eq: type: integer example: 0 use_kg_co2_eq: type: number example: 7.638 end_of_life_kg_co2_eq: type: number example: 1.326 tec_kwh: type: string example: null nullable: true recycling_avoided_e_waste_kg: type: string example: null nullable: true recycling_avoided_emissions_kg_co2_eq: type: string example: null nullable: true material_flow: type: string example: null nullable: true epeat_tier: type: string example: gold epeat_climate_plus: type: boolean example: true epeat_status: type: string example: active epeat_certificate_url: type: string example: 'https://epeat.net/product-details/EPEAT-21MMSEJC00' tco_certified: type: boolean example: true tco_certificate_url: type: string example: 'https://tcocertified.com/product-finder/?cert=TCO-21MMSEJC00' errors: type: string example: null nullable: true status: type: integer example: 200 - description: 'Refurbished and new product without e.product+' type: object example: data: - manufacturer_part_number: 21MMSEJC00 brand: Lenovo category: Notebook country_code: GB refurbished: true recycled: false data_match: true product_match: true data_method: MS total_kg_co2_eq: 17.582 carbon_intensity_gram: 130.96 lifetime_month: 48 refurbishment_impact_kg_co2_eq: 8.618 refurbishment_offset_kg_co2_eq: 146.74 refurbishment_impact_basis: standard_category rfi_external_id: standard-2026 rfi_version: 1 variant: full rfi_per_unit_fixed_kg_co2_eq: 8.5 rfi_transport_co2_eq_per_tonne: 78.442667 rfi_weight_basis: device - manufacturer_part_number: 21MMSEJC00 brand: Lenovo category: Notebook country_code: GB refurbished: false recycled: false data_match: true product_match: true data_method: MS total_kg_co2_eq: 175.984 carbon_intensity_gram: 130.96 lifetime_month: 48 refurbishment_impact_kg_co2_eq: null refurbishment_offset_kg_co2_eq: null refurbishment_impact_basis: null rfi_external_id: null rfi_version: null variant: null rfi_per_unit_fixed_kg_co2_eq: null rfi_transport_co2_eq_per_tonne: null rfi_weight_basis: null errors: null status: 200 properties: data: type: array example: - manufacturer_part_number: 21MMSEJC00 brand: Lenovo category: Notebook country_code: GB refurbished: true recycled: false data_match: true product_match: true data_method: MS total_kg_co2_eq: 17.582 carbon_intensity_gram: 130.96 lifetime_month: 48 refurbishment_impact_kg_co2_eq: 8.618 refurbishment_offset_kg_co2_eq: 146.74 refurbishment_impact_basis: standard_category rfi_external_id: standard-2026 rfi_version: 1 variant: full rfi_per_unit_fixed_kg_co2_eq: 8.5 rfi_transport_co2_eq_per_tonne: 78.442667 rfi_weight_basis: device - manufacturer_part_number: 21MMSEJC00 brand: Lenovo category: Notebook country_code: GB refurbished: false recycled: false data_match: true product_match: true data_method: MS total_kg_co2_eq: 175.984 carbon_intensity_gram: 130.96 lifetime_month: 48 refurbishment_impact_kg_co2_eq: null refurbishment_offset_kg_co2_eq: null refurbishment_impact_basis: null rfi_external_id: null rfi_version: null variant: null rfi_per_unit_fixed_kg_co2_eq: null rfi_transport_co2_eq_per_tonne: null rfi_weight_basis: null items: type: object properties: manufacturer_part_number: type: string example: 21MMSEJC00 brand: type: string example: Lenovo category: type: string example: Notebook country_code: type: string example: GB refurbished: type: boolean example: true recycled: type: boolean example: false data_match: type: boolean example: true product_match: type: boolean example: true data_method: type: string example: MS total_kg_co2_eq: type: number example: 17.582 carbon_intensity_gram: type: number example: 130.96 lifetime_month: type: integer example: 48 refurbishment_impact_kg_co2_eq: type: number example: 8.618 refurbishment_offset_kg_co2_eq: type: number example: 146.74 refurbishment_impact_basis: type: string example: standard_category rfi_external_id: type: string example: standard-2026 rfi_version: type: integer example: 1 variant: type: string example: full rfi_per_unit_fixed_kg_co2_eq: type: number example: 8.5 rfi_transport_co2_eq_per_tonne: type: number example: 78.442667 rfi_weight_basis: type: string example: device errors: type: string example: null nullable: true status: type: integer example: 200 - description: 'No product or category data was found: the batch still returns 200 with data_match false and null carbon data for that entry' type: object example: data: - manufacturer_part_number: 21MMSEJC00 brand: Lenovo category: Notebook country_code: GB refurbished: false recycled: false data_match: false product_match: false data_method: null total_kg_co2_eq: null carbon_intensity_gram: null lifetime_month: null refurbishment_impact_kg_co2_eq: null refurbishment_offset_kg_co2_eq: null refurbishment_impact_basis: null rfi_external_id: null rfi_version: null variant: null rfi_per_unit_fixed_kg_co2_eq: null rfi_transport_co2_eq_per_tonne: null rfi_weight_basis: null errors: null status: 200 properties: data: type: array example: - manufacturer_part_number: 21MMSEJC00 brand: Lenovo category: Notebook country_code: GB refurbished: false recycled: false data_match: false product_match: false data_method: null total_kg_co2_eq: null carbon_intensity_gram: null lifetime_month: null refurbishment_impact_kg_co2_eq: null refurbishment_offset_kg_co2_eq: null refurbishment_impact_basis: null rfi_external_id: null rfi_version: null variant: null rfi_per_unit_fixed_kg_co2_eq: null rfi_transport_co2_eq_per_tonne: null rfi_weight_basis: null items: type: object properties: manufacturer_part_number: type: string example: 21MMSEJC00 brand: type: string example: Lenovo category: type: string example: Notebook country_code: type: string example: GB refurbished: type: boolean example: false recycled: type: boolean example: false data_match: type: boolean example: false product_match: type: boolean example: false data_method: type: string example: null nullable: true total_kg_co2_eq: type: string example: null nullable: true carbon_intensity_gram: type: string example: null nullable: true lifetime_month: type: string example: null nullable: true refurbishment_impact_kg_co2_eq: type: string example: null nullable: true refurbishment_offset_kg_co2_eq: type: string example: null nullable: true refurbishment_impact_basis: type: string example: null nullable: true rfi_external_id: type: string example: null nullable: true rfi_version: type: string example: null nullable: true variant: type: string example: null nullable: true rfi_per_unit_fixed_kg_co2_eq: type: string example: null nullable: true rfi_transport_co2_eq_per_tonne: type: string example: null nullable: true rfi_weight_basis: type: string example: null nullable: true errors: type: string example: null nullable: true status: type: integer example: 200 401: $ref: '#/components/responses/Unauthenticated' 403: description: 'Also returned when: API key without the required ability. See "Errors" in the API reference.' content: application/json: schema: oneOf: - description: 'No e.product subscription' type: object example: data: null errors: forbidden: - 'E/product is not enabled for your organization. Contact us on "sales@rejoose.com" or "+45 71 74 70 30" to enable it.' status: 403 properties: data: type: string example: null nullable: true errors: type: object properties: forbidden: type: array example: - 'E/product is not enabled for your organization. Contact us on "sales@rejoose.com" or "+45 71 74 70 30" to enable it.' items: type: string status: type: integer example: 403 - description: 'Usage limit reached and the batch holds products new to the subscription period' type: object example: data: null errors: forbidden: - 'Your max limit on E/product is reached. Contact us on "sales@rejoose.com" or "+45 71 74 70 30" to change your limit. Products already retrieved in this subscription period remain available. Not yet retrieved: 21MMSEJC00 (Lenovo, refurbished), 21MMSEJC00 (Lenovo, recycled), 21MMSEJC00 (Lenovo, GB).' status: 403 properties: data: type: string example: null nullable: true errors: type: object properties: forbidden: type: array example: - 'Your max limit on E/product is reached. Contact us on "sales@rejoose.com" or "+45 71 74 70 30" to change your limit. Products already retrieved in this subscription period remain available. Not yet retrieved: 21MMSEJC00 (Lenovo, refurbished), 21MMSEJC00 (Lenovo, recycled), 21MMSEJC00 (Lenovo, GB).' items: type: string status: type: integer example: 403 422: description: 'The example batch without e.product+ (the recycled entry is refused) Also returned when: A parameter failed validation. See "Errors" in the API reference.' content: application/json: schema: type: object example: data: null errors: products.1.recycled: - 'Recycled lookups require an e.product+ subscription. To enable access, contact support@rejoose.com.' status: 422 properties: data: type: string example: null nullable: true errors: type: object properties: products.1.recycled: type: array example: - 'Recycled lookups require an e.product+ subscription. To enable access, contact support@rejoose.com.' items: type: string status: type: integer example: 422 429: $ref: '#/components/responses/TooManyRequests' 5XX: $ref: '#/components/responses/ServerError' tags: - e.product requestBody: required: true content: application/json: schema: type: object properties: products: type: array description: 'The array of products. This array must not exceed 100 items. Each entry is documented as either refurbished, recycled, or new — a new product simply omits both flags, as in the third entry below.' example: - manufacturer_part_number: 21MMSEJC00 brand: Lenovo category: Notebook country_code: GB refurbished: true recycled: false - manufacturer_part_number: 21MMSEJC00 brand: Lenovo category: Notebook country_code: GB refurbished: false recycled: true - manufacturer_part_number: 21MMSEJC00 brand: Lenovo category: Notebook country_code: GB items: type: object properties: manufacturer_part_number: type: string description: 'The unique manufacturer part number (SKU/MPN) provided by the vendor or distributor, or an internal part number.' example: 21MMSEJC00 brand: type: string description: "The product manufacturer's name. Used together with the MPN and category to ensure a unique data match." example: Lenovo category: type: string description: 'Used alongside the external ID and brand to ensure accurate product matching. Also enables the system to provide carbon data for the category when specific LCA data is unavailable.' example: Notebook country_code: type: string description: "The country where the product is typically used. Use an ISO 3166-1 alpha-2 country code, or an ISO 3166-2 subdivision code where state-level emission factors are available: US states use the 'US-' prefix (e.g. US-CA) and Australian states use the 'AU-' prefix (e.g. AU-VIC, AU-NSW). Bare AU still resolves to the Australian national factor. Determines the carbon intensity used in calculations." example: GB refurbished: type: boolean description: 'optional Indicates whether the product is refurbished (pre-owned). A value of 1 denotes a refurbished product. Cannot be combined with recycled.' example: true recycled: type: boolean description: 'optional Indicates whether the product is recycled. When set, the response includes recycling_avoided_e_waste_kg, recycling_avoided_emissions_kg_co2_eq, and material_flow. Requires e.product+; without it the request is refused with a 422 naming the entry. Cannot be combined with refurbished. Omit both flags for a new product.' example: false facility_external_id: type: string description: 'optional The external_id of your facility that refurbished this product. Must be your own facility, not the Rejoose standard facility. Only used when refurbished is true. When you leave it out, your default facility is used. See Refurbishment impact.' example: null variant: type: string description: 'optional The refurbishment process this product went through, for example full (repair) or light (test and wipe). Only used when refurbished is true. When you leave it out, the facility''s default variant is used. A value the facility does not have is rejected with a 422. Max 64 characters. See Refurbishment impact.' example: null required: - manufacturer_part_number - brand - category - country_code options: type: object description: 'optional Additional options for the request.' example: [] properties: unit: type: string description: "optional Unit preference for the response. Defaults to 'metric', which returns the kg and gram fields only. 'imperial' keeps those fields and adds a converted lb counterpart next to each of them (for example total_lb_co2_eq next to total_kg_co2_eq), so only an imperial response carries both units. Accepted values: 'metric', 'imperial'." example: imperial required: - products /api/v3/products/changes: get: summary: 'List changed products' operationId: listChangedProducts description: "\n\nRetrieve changed products as a CSV file.\nThis endpoint provides a CSV file listing the changes for a specified date or week.\n The file contains columns for `manufacturer_part_number`, `brand`, and `category`.\n Use this file to check for relevant products and brands, then use the `e.product` API to obtain detailed information.\n\n### Daily File: If a `date` is specified, a daily changes file for that day is returned, specified date cannot be in the future.\n- Example: For `date` = `2024-11-06`, the file will list all products that changed on November 6, 2024.\n\n### Weekly Summary File: Aggregates product changes from Monday to Sunday for a specified week.\nWithout a `date`, a summary file for the specified or most recent week is retrieved.\nThe weekly file aggregates product changes from Monday to Sunday for the specified week.\n\n ### Weekly File Details:\n- Aggregates data from all daily files generated for each day of the specified week.\n- Most recent week means the last full week. If you request a weekly file in any given week without a date, you will receive data from previous week (Monday to Sunday).\n- Example: A weekly file for week 45 of 2024 contains all products that changed from Monday, 2024-11-04, to Sunday, 2024-11-10.\n- Removes duplicate entries to ensure a clean dataset.\n- Combines individual product changes into a single file.\n\n### Weekly File Composition:\nThe weekly file includes:\n- All changes recorded in the daily files from Monday to Sunday of the week.\n- A deduplicated list of products with details such as `manufacturer_part_number`, `brand`, and `category`.\n\n### Recommendations:\n- Use the weekly file for a comprehensive overview of all product changes for the week. We suggest that you get the weekly file every Monday after 12:00 UTC.\n- Refer to the daily file for specific changes on a particular day\n### Response Details:\n - Returns a **302 Redirect** to the CDN URL if the file is accessible there.\n - An invalid `date` or `week_number` is answered with a 422 whose body is a single `error` string, not the one described under [Validation failed (422)](#validation-failed-422)." parameters: - in: query name: date description: 'Optional. The date of the changes (in format YYYY-MM-DD).' example: '2024-11-01' required: false schema: type: string description: 'Optional. The date of the changes (in format YYYY-MM-DD).' example: '2024-11-01' - in: query name: week_number description: "Optional. The ISO week number of the changes, between 1 and 53. A week that has not happened yet this year returns last year's week." example: 45 required: false schema: type: integer description: "Optional. The ISO week number of the changes, between 1 and 53. A week that has not happened yet this year returns last year's week." example: 45 responses: 302: description: '' content: text/plain: schema: type: string example: "manufacturer_part_number,brand,category\nUT04CBE,Lenovo,Notebook\nRE242EP,HP,Notebook\nPSMA2E-00U01DGC,Toshiba,Notebook\nRH324ET#ABY-D30,HP,Notebook\nA3HF-5A027P,ASUS,Notebook\n" 401: $ref: '#/components/responses/Unauthenticated' 403: $ref: '#/components/responses/InvalidAbility' 404: description: 'No file for that date or week' content: application/json: schema: type: object example: data: null errors: not_found: - 'File not found.' status: 404 properties: data: type: string example: null nullable: true errors: type: object properties: not_found: type: array example: - 'File not found.' items: type: string status: type: integer example: 404 422: $ref: '#/components/responses/ValidationFailed' 429: $ref: '#/components/responses/TooManyRequests' 5XX: $ref: '#/components/responses/ServerError' tags: - e.product /api/v3/categories: get: summary: 'List categories' operationId: listCategories description: "One page of the categories, ordered by id, optionally narrowed with search.\n\n

Use search to find a category by any of its names: search=laptop returns Notebook, because \"Laptops\" is one of its tags. pagination.total counts the matches.

\n

The list comes from a weekly snapshot of the category catalogue, taken every Monday. snapshot.date names the snapshot the page was read from. A new snapshot can appear between two of your requests, so compare it when you walk several pages.

" parameters: - in: query name: search description: 'Keep only the categories whose name or any tag contains this text, ignoring case. Up to 255 characters.' example: laptop required: false schema: type: string description: 'Keep only the categories whose name or any tag contains this text, ignoring case. Up to 255 characters.' example: laptop - in: query name: page description: 'The page, from 1.' example: 1 required: false schema: type: integer description: 'The page, from 1.' example: 1 - in: query name: per_page description: 'Categories per page, 1 to 100. Defaults to 10.' example: 10 required: false schema: type: integer description: 'Categories per page, 1 to 100. Defaults to 10.' example: 10 responses: 200: description: '' content: application/json: schema: type: object example: data: items: - id: 41 name: Monitor main_category_id: null tags: - Monitors - 'Computer Monitors' - display default_lifetime_months: 72 default_weight_kg: 5.6 - id: 42 name: Notebook main_category_id: null tags: - Notebooks - Laptops - laptop default_lifetime_months: 48 default_weight_kg: 1.8 snapshot: date: '2026-10-26' pagination: current_page: 1 last_page: 29 per_page: 10 total: 284 next_page_url: 'https://app.rejoose.com/api/v3/categories?page=2' prev_page_url: null errors: null status: 200 properties: data: type: object properties: items: type: array example: - id: 41 name: Monitor main_category_id: null tags: - Monitors - 'Computer Monitors' - display default_lifetime_months: 72 default_weight_kg: 5.6 - id: 42 name: Notebook main_category_id: null tags: - Notebooks - Laptops - laptop default_lifetime_months: 48 default_weight_kg: 1.8 items: type: object properties: id: type: integer example: 41 name: type: string example: Monitor main_category_id: type: string example: null nullable: true tags: type: array example: - Monitors - 'Computer Monitors' - display items: type: string default_lifetime_months: type: integer example: 72 default_weight_kg: type: number example: 5.6 snapshot: type: object properties: date: type: string example: '2026-10-26' pagination: type: object properties: current_page: type: integer example: 1 last_page: type: integer example: 29 per_page: type: integer example: 10 total: type: integer example: 284 next_page_url: type: string example: 'https://app.rejoose.com/api/v3/categories?page=2' prev_page_url: type: string example: null nullable: true errors: type: string example: null nullable: true status: type: integer example: 200 401: $ref: '#/components/responses/Unauthenticated' 403: $ref: '#/components/responses/InvalidAbility' 422: $ref: '#/components/responses/ValidationFailed' 429: $ref: '#/components/responses/TooManyRequests' 5XX: $ref: '#/components/responses/ServerError' tags: - Categories '/api/v3/group/{slug}': get: summary: "List a group's e.voices" operationId: listAGroupsEvoices description: 'Retrieve a paginated list of e.voices for a specific group, filtered by date and pagination options.' parameters: - in: query name: from description: 'date The start date for filtering e.voices.' example: '2024-01-01' required: false schema: type: string description: 'date The start date for filtering e.voices.' example: '2024-01-01' - in: query name: to description: 'date The end date for filtering e.voices. Default: today.' example: '2024-12-31' required: false schema: type: string description: 'date The end date for filtering e.voices. Default: today.' example: '2024-12-31' - in: query name: per_page description: 'The number of items per page (1-100). Default: 10.' example: 20 required: false schema: type: integer description: 'The number of items per page (1-100). Default: 10.' example: 20 - in: query name: pagination description: 'The pagination type: "cursor" for cursor-based pagination or null for smart pagination. Default: smart.' example: cursor required: false schema: type: string description: 'The pagination type: "cursor" for cursor-based pagination or null for smart pagination. Default: smart.' example: cursor - in: query name: cursor description: 'The cursor for cursor-based pagination (cursor pagination only).' example: eyJpZCI6MTIzLCJfcG9pbnRzVG9OZXh0SXRlbXMiOnRydWV9 required: false schema: type: string description: 'The cursor for cursor-based pagination (cursor pagination only).' example: eyJpZCI6MTIzLCJfcG9pbnRzVG9OZXh0SXRlbXMiOnRydWV9 responses: 200: description: '' content: application/json: schema: type: object example: data: items: - external_invoice_id: a6e0f0bb-0285-4a2d-b6d8-93c63543d5a9 external_invoice_date: '2024-07-24T07:39:56.000000Z' country_code: DK carbon_intensity_gram: 123 total_kg_co2_eq: 1301.51 manufacturing_kg_co2_eq: 892.34 transportation_kg_co2_eq: 156.78 eol_kg_co2_eq: 252.39 status: finalized created_at: '2024-07-24T07:39:56.000000Z' updated_at: '2024-07-24T07:39:59.000000Z' group: name: 'Eco Friendly Company' slug: eco-friendly-company client: name: 'Eco-Friendly Solutions Ltd' organization_id: ecofriendly-4987 company_id: ECOF1234567 vat_number: ECOF1234567 address: '100 Enviro Way' address2: 'Sustainability Lane 3' zip_code: ECO321 city: GreenVille country: Denmark devices: - external_id: RE8989121 original_manufacturer_part_number: 62B6MAT3EU quantity: 10 brand: Lenovo model_name: 'ThinkPad T480' category: Notebook lifetime_months: 72 scope_2_kg_co2_eq: 278.41 scope_3_kg_co2_eq: 249.27 total_kg_co2_eq: 527.68 manufacturing_kg_co2_eq: 198.45 transportation_kg_co2_eq: 23.14 eol_kg_co2_eq: 27.68 refurbished: true avoided_emissions_kg_co2_eq: 256.68 - external_id: SM-S918BZKDEEB original_manufacturer_part_number: null quantity: 10 brand: Samsung model_name: 'Galaxy S23 Ultra' category: Smartphone lifetime_months: 30 scope_2_kg_co2_eq: 31.18 scope_3_kg_co2_eq: 742.65 total_kg_co2_eq: 773.83 manufacturing_kg_co2_eq: 693.89 transportation_kg_co2_eq: 133.64 eol_kg_co2_eq: 224.71 refurbished: false avoided_emissions_kg_co2_eq: 0 links: self: 'https://app.rejoose.com/api/v3/evoices/a6e0f0bb-0285-4a2d-b6d8-93c63543d5a9' current_page: 2 last_page: 4522 total: 4522 per_page: 1 next_page: 'https://app.rejoose.com/api/v3/group/eco-friendly-company?page=3' previous_page: 'https://app.rejoose.com/api/v3/group/eco-friendly-company?page=1' errors: null properties: data: type: object properties: items: type: array example: - external_invoice_id: a6e0f0bb-0285-4a2d-b6d8-93c63543d5a9 external_invoice_date: '2024-07-24T07:39:56.000000Z' country_code: DK carbon_intensity_gram: 123 total_kg_co2_eq: 1301.51 manufacturing_kg_co2_eq: 892.34 transportation_kg_co2_eq: 156.78 eol_kg_co2_eq: 252.39 status: finalized created_at: '2024-07-24T07:39:56.000000Z' updated_at: '2024-07-24T07:39:59.000000Z' group: name: 'Eco Friendly Company' slug: eco-friendly-company client: name: 'Eco-Friendly Solutions Ltd' organization_id: ecofriendly-4987 company_id: ECOF1234567 vat_number: ECOF1234567 address: '100 Enviro Way' address2: 'Sustainability Lane 3' zip_code: ECO321 city: GreenVille country: Denmark devices: - external_id: RE8989121 original_manufacturer_part_number: 62B6MAT3EU quantity: 10 brand: Lenovo model_name: 'ThinkPad T480' category: Notebook lifetime_months: 72 scope_2_kg_co2_eq: 278.41 scope_3_kg_co2_eq: 249.27 total_kg_co2_eq: 527.68 manufacturing_kg_co2_eq: 198.45 transportation_kg_co2_eq: 23.14 eol_kg_co2_eq: 27.68 refurbished: true avoided_emissions_kg_co2_eq: 256.68 - external_id: SM-S918BZKDEEB original_manufacturer_part_number: null quantity: 10 brand: Samsung model_name: 'Galaxy S23 Ultra' category: Smartphone lifetime_months: 30 scope_2_kg_co2_eq: 31.18 scope_3_kg_co2_eq: 742.65 total_kg_co2_eq: 773.83 manufacturing_kg_co2_eq: 693.89 transportation_kg_co2_eq: 133.64 eol_kg_co2_eq: 224.71 refurbished: false avoided_emissions_kg_co2_eq: 0 links: self: 'https://app.rejoose.com/api/v3/evoices/a6e0f0bb-0285-4a2d-b6d8-93c63543d5a9' items: type: object properties: external_invoice_id: type: string example: a6e0f0bb-0285-4a2d-b6d8-93c63543d5a9 external_invoice_date: type: string example: '2024-07-24T07:39:56.000000Z' country_code: type: string example: DK carbon_intensity_gram: type: integer example: 123 total_kg_co2_eq: type: number example: 1301.51 manufacturing_kg_co2_eq: type: number example: 892.34 transportation_kg_co2_eq: type: number example: 156.78 eol_kg_co2_eq: type: number example: 252.39 status: type: string example: finalized created_at: type: string example: '2024-07-24T07:39:56.000000Z' updated_at: type: string example: '2024-07-24T07:39:59.000000Z' group: type: object properties: name: type: string example: 'Eco Friendly Company' slug: type: string example: eco-friendly-company client: type: object properties: name: type: string example: 'Eco-Friendly Solutions Ltd' organization_id: type: string example: ecofriendly-4987 company_id: type: string example: ECOF1234567 vat_number: type: string example: ECOF1234567 address: type: string example: '100 Enviro Way' address2: type: string example: 'Sustainability Lane 3' zip_code: type: string example: ECO321 city: type: string example: GreenVille country: type: string example: Denmark devices: type: array example: - external_id: RE8989121 original_manufacturer_part_number: 62B6MAT3EU quantity: 10 brand: Lenovo model_name: 'ThinkPad T480' category: Notebook lifetime_months: 72 scope_2_kg_co2_eq: 278.41 scope_3_kg_co2_eq: 249.27 total_kg_co2_eq: 527.68 manufacturing_kg_co2_eq: 198.45 transportation_kg_co2_eq: 23.14 eol_kg_co2_eq: 27.68 refurbished: true avoided_emissions_kg_co2_eq: 256.68 - external_id: SM-S918BZKDEEB original_manufacturer_part_number: null quantity: 10 brand: Samsung model_name: 'Galaxy S23 Ultra' category: Smartphone lifetime_months: 30 scope_2_kg_co2_eq: 31.18 scope_3_kg_co2_eq: 742.65 total_kg_co2_eq: 773.83 manufacturing_kg_co2_eq: 693.89 transportation_kg_co2_eq: 133.64 eol_kg_co2_eq: 224.71 refurbished: false avoided_emissions_kg_co2_eq: 0 items: type: object properties: external_id: type: string example: RE8989121 original_manufacturer_part_number: type: string example: 62B6MAT3EU quantity: type: integer example: 10 brand: type: string example: Lenovo model_name: type: string example: 'ThinkPad T480' category: type: string example: Notebook lifetime_months: type: integer example: 72 scope_2_kg_co2_eq: type: number example: 278.41 scope_3_kg_co2_eq: type: number example: 249.27 total_kg_co2_eq: type: number example: 527.68 manufacturing_kg_co2_eq: type: number example: 198.45 transportation_kg_co2_eq: type: number example: 23.14 eol_kg_co2_eq: type: number example: 27.68 refurbished: type: boolean example: true avoided_emissions_kg_co2_eq: type: number example: 256.68 links: type: object properties: self: type: string example: 'https://app.rejoose.com/api/v3/evoices/a6e0f0bb-0285-4a2d-b6d8-93c63543d5a9' current_page: type: integer example: 2 last_page: type: integer example: 4522 total: type: integer example: 4522 per_page: type: integer example: 1 next_page: type: string example: 'https://app.rejoose.com/api/v3/group/eco-friendly-company?page=3' previous_page: type: string example: 'https://app.rejoose.com/api/v3/group/eco-friendly-company?page=1' errors: type: string example: null nullable: true 401: $ref: '#/components/responses/Unauthenticated' 403: description: 'API key without the required ability; Not an e.hub Enterprise partner. See "Errors" in the API reference.' content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' examples: invalidAbility: summary: 'API key without the required ability' value: data: null errors: forbidden: - 'Invalid ability provided.' status: 403 notEnterprise: summary: 'Not an e.hub Enterprise partner' value: data: null errors: forbidden: - 'You are not an enterprise partner.' status: 403 404: $ref: '#/components/responses/NotFound' 422: $ref: '#/components/responses/ValidationFailed' 429: $ref: '#/components/responses/TooManyRequests' 5XX: $ref: '#/components/responses/ServerError' tags: - Groups parameters: - in: path name: slug description: 'The group slug used to filter the e.voices.' example: eco-friendly-company required: true schema: type: string /api/v3/groups: get: summary: 'List e.voices by group' operationId: listEvoicesByGroup description: 'Retrieve a paginated list of e.voices for all groups, filtered by date and pagination options.' parameters: - in: query name: from description: 'date The start date for filtering e.voices.' example: '2024-01-01' required: false schema: type: string description: 'date The start date for filtering e.voices.' example: '2024-01-01' - in: query name: to description: 'date The end date for filtering e.voices. Default: today.' example: '2024-12-31' required: false schema: type: string description: 'date The end date for filtering e.voices. Default: today.' example: '2024-12-31' - in: query name: per_page description: 'The number of items per page (1-100). Default: 10.' example: 20 required: false schema: type: integer description: 'The number of items per page (1-100). Default: 10.' example: 20 - in: query name: pagination description: 'The pagination type: "cursor" for cursor-based pagination or null for smart pagination. Default: smart.' example: cursor required: false schema: type: string description: 'The pagination type: "cursor" for cursor-based pagination or null for smart pagination. Default: smart.' example: cursor - in: query name: cursor description: 'The cursor for cursor-based pagination (cursor pagination only).' example: eyJpZCI6MTIzLCJfcG9pbnRzVG9OZXh0SXRlbXMiOnRydWV9 required: false schema: type: string description: 'The cursor for cursor-based pagination (cursor pagination only).' example: eyJpZCI6MTIzLCJfcG9pbnRzVG9OZXh0SXRlbXMiOnRydWV9 responses: 200: description: '' content: application/json: schema: type: object example: data: items: - external_invoice_id: a6e0f0bb-0285-4a2d-b6d8-93c63543d5a9 external_invoice_date: '2024-07-24T07:39:56.000000Z' country_code: DK carbon_intensity_gram: 123 total_kg_co2_eq: 1301.51 manufacturing_kg_co2_eq: 892.34 transportation_kg_co2_eq: 156.78 eol_kg_co2_eq: 252.39 status: finalized created_at: '2024-07-24T07:39:56.000000Z' updated_at: '2024-07-24T07:39:59.000000Z' group: name: 'Eco Friendly Company' slug: eco-friendly-company client: name: 'Eco-Friendly Solutions Ltd' organization_id: ecofriendly-4987 company_id: ECOF1234567 vat_number: ECOF1234567 address: '100 Enviro Way' address2: 'Sustainability Lane 3' zip_code: ECO321 city: GreenVille country: Denmark devices: - external_id: RE8989121 original_manufacturer_part_number: 62B6MAT3EU quantity: 10 brand: Lenovo model_name: 'ThinkPad T480' category: Notebook lifetime_months: 72 scope_2_kg_co2_eq: 278.41 scope_3_kg_co2_eq: 249.27 total_kg_co2_eq: 527.68 manufacturing_kg_co2_eq: 198.45 transportation_kg_co2_eq: 23.14 eol_kg_co2_eq: 27.68 refurbished: true avoided_emissions_kg_co2_eq: 256.68 - external_id: SM-S918BZKDEEB original_manufacturer_part_number: null quantity: 10 brand: Samsung model_name: 'Galaxy S23 Ultra' category: Smartphone lifetime_months: 30 scope_2_kg_co2_eq: 31.18 scope_3_kg_co2_eq: 742.65 total_kg_co2_eq: 773.83 manufacturing_kg_co2_eq: 693.89 transportation_kg_co2_eq: 133.64 eol_kg_co2_eq: 224.71 refurbished: false avoided_emissions_kg_co2_eq: 0 links: self: 'https://app.rejoose.com/api/v3/evoices/a6e0f0bb-0285-4a2d-b6d8-93c63543d5a9' current_page: 2 last_page: 4522 total: 4522 per_page: 1 next_page: 'https://app.rejoose.com/api/v3/groups?page=3' previous_page: 'https://app.rejoose.com/api/v3/groups?page=1' errors: null properties: data: type: object properties: items: type: array example: - external_invoice_id: a6e0f0bb-0285-4a2d-b6d8-93c63543d5a9 external_invoice_date: '2024-07-24T07:39:56.000000Z' country_code: DK carbon_intensity_gram: 123 total_kg_co2_eq: 1301.51 manufacturing_kg_co2_eq: 892.34 transportation_kg_co2_eq: 156.78 eol_kg_co2_eq: 252.39 status: finalized created_at: '2024-07-24T07:39:56.000000Z' updated_at: '2024-07-24T07:39:59.000000Z' group: name: 'Eco Friendly Company' slug: eco-friendly-company client: name: 'Eco-Friendly Solutions Ltd' organization_id: ecofriendly-4987 company_id: ECOF1234567 vat_number: ECOF1234567 address: '100 Enviro Way' address2: 'Sustainability Lane 3' zip_code: ECO321 city: GreenVille country: Denmark devices: - external_id: RE8989121 original_manufacturer_part_number: 62B6MAT3EU quantity: 10 brand: Lenovo model_name: 'ThinkPad T480' category: Notebook lifetime_months: 72 scope_2_kg_co2_eq: 278.41 scope_3_kg_co2_eq: 249.27 total_kg_co2_eq: 527.68 manufacturing_kg_co2_eq: 198.45 transportation_kg_co2_eq: 23.14 eol_kg_co2_eq: 27.68 refurbished: true avoided_emissions_kg_co2_eq: 256.68 - external_id: SM-S918BZKDEEB original_manufacturer_part_number: null quantity: 10 brand: Samsung model_name: 'Galaxy S23 Ultra' category: Smartphone lifetime_months: 30 scope_2_kg_co2_eq: 31.18 scope_3_kg_co2_eq: 742.65 total_kg_co2_eq: 773.83 manufacturing_kg_co2_eq: 693.89 transportation_kg_co2_eq: 133.64 eol_kg_co2_eq: 224.71 refurbished: false avoided_emissions_kg_co2_eq: 0 links: self: 'https://app.rejoose.com/api/v3/evoices/a6e0f0bb-0285-4a2d-b6d8-93c63543d5a9' items: type: object properties: external_invoice_id: type: string example: a6e0f0bb-0285-4a2d-b6d8-93c63543d5a9 external_invoice_date: type: string example: '2024-07-24T07:39:56.000000Z' country_code: type: string example: DK carbon_intensity_gram: type: integer example: 123 total_kg_co2_eq: type: number example: 1301.51 manufacturing_kg_co2_eq: type: number example: 892.34 transportation_kg_co2_eq: type: number example: 156.78 eol_kg_co2_eq: type: number example: 252.39 status: type: string example: finalized created_at: type: string example: '2024-07-24T07:39:56.000000Z' updated_at: type: string example: '2024-07-24T07:39:59.000000Z' group: type: object properties: name: type: string example: 'Eco Friendly Company' slug: type: string example: eco-friendly-company client: type: object properties: name: type: string example: 'Eco-Friendly Solutions Ltd' organization_id: type: string example: ecofriendly-4987 company_id: type: string example: ECOF1234567 vat_number: type: string example: ECOF1234567 address: type: string example: '100 Enviro Way' address2: type: string example: 'Sustainability Lane 3' zip_code: type: string example: ECO321 city: type: string example: GreenVille country: type: string example: Denmark devices: type: array example: - external_id: RE8989121 original_manufacturer_part_number: 62B6MAT3EU quantity: 10 brand: Lenovo model_name: 'ThinkPad T480' category: Notebook lifetime_months: 72 scope_2_kg_co2_eq: 278.41 scope_3_kg_co2_eq: 249.27 total_kg_co2_eq: 527.68 manufacturing_kg_co2_eq: 198.45 transportation_kg_co2_eq: 23.14 eol_kg_co2_eq: 27.68 refurbished: true avoided_emissions_kg_co2_eq: 256.68 - external_id: SM-S918BZKDEEB original_manufacturer_part_number: null quantity: 10 brand: Samsung model_name: 'Galaxy S23 Ultra' category: Smartphone lifetime_months: 30 scope_2_kg_co2_eq: 31.18 scope_3_kg_co2_eq: 742.65 total_kg_co2_eq: 773.83 manufacturing_kg_co2_eq: 693.89 transportation_kg_co2_eq: 133.64 eol_kg_co2_eq: 224.71 refurbished: false avoided_emissions_kg_co2_eq: 0 items: type: object properties: external_id: type: string example: RE8989121 original_manufacturer_part_number: type: string example: 62B6MAT3EU quantity: type: integer example: 10 brand: type: string example: Lenovo model_name: type: string example: 'ThinkPad T480' category: type: string example: Notebook lifetime_months: type: integer example: 72 scope_2_kg_co2_eq: type: number example: 278.41 scope_3_kg_co2_eq: type: number example: 249.27 total_kg_co2_eq: type: number example: 527.68 manufacturing_kg_co2_eq: type: number example: 198.45 transportation_kg_co2_eq: type: number example: 23.14 eol_kg_co2_eq: type: number example: 27.68 refurbished: type: boolean example: true avoided_emissions_kg_co2_eq: type: number example: 256.68 links: type: object properties: self: type: string example: 'https://app.rejoose.com/api/v3/evoices/a6e0f0bb-0285-4a2d-b6d8-93c63543d5a9' current_page: type: integer example: 2 last_page: type: integer example: 4522 total: type: integer example: 4522 per_page: type: integer example: 1 next_page: type: string example: 'https://app.rejoose.com/api/v3/groups?page=3' previous_page: type: string example: 'https://app.rejoose.com/api/v3/groups?page=1' errors: type: string example: null nullable: true 401: $ref: '#/components/responses/Unauthenticated' 403: description: 'API key without the required ability; Not an e.hub Enterprise partner. See "Errors" in the API reference.' content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' examples: invalidAbility: summary: 'API key without the required ability' value: data: null errors: forbidden: - 'Invalid ability provided.' status: 403 notEnterprise: summary: 'Not an e.hub Enterprise partner' value: data: null errors: forbidden: - 'You are not an enterprise partner.' status: 403 422: $ref: '#/components/responses/ValidationFailed' 429: $ref: '#/components/responses/TooManyRequests' 5XX: $ref: '#/components/responses/ServerError' tags: - Groups