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\nBefore 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\nOnce your contract is signed, we'll begin a thorough onboarding process.
\n\nIf 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\ne.voice – Carbon data on invoice level
\nThe 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.
\nWhen using the e.voice API, you have flexible implementation options:
\nUpon a successful transaction, the API provides:
\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\ne.voice API – Options Explained
\ndeferred: Specifies whether the e.voice generation should run as a background (deferred) job.\n deferred to true allows the generation process to run asynchronously, reducing impact on real-time operations.\n GET api/v3/evoices/{external_invoice_id} for the result: 202 while pending, 200 with the full e.voice when finalized or while it has status: \"updating\", or 200 with status: \"failed\" and a failure_reason if generation failed — the same external_invoice_id can then be re-submitted. During an update, top-level totals may not yet match the device rows.\n include_pdf: Specifies whether the API response should include a base64-encoded PDF file of the e.voice document.\n include_pdf to false if you’re storing PDFs separately or handling document generation downstream.\n credit_note: Specifies whether the e.voice is a credit note, which reverses the carbon data recorded for a transaction. (amounts will be handled as absolute numbers)\n credit_note to true ensures your carbon accounting stays accurate and reflects true net impacts.\n facility_external_id: Specifies which of your refurbishment facilities refurbished the devices on the e.voice, using the facility's external_id from e.hub.\n external_invoice_date. When you leave it out, your default facility is used. It must be your own facility; the Rejoose standard facility cannot be used. See Refurbishment impact.\n Quick tips
\ndeferred: true for better system performance and faster responses (a sustainable choice).include_pdf: false if you only want to minimize response size and rely on retrieving data from e.hub and e.insightscredit_note: true to define this is an credit note and return of products, and this will be visible in the carbon reporting.Reading an e.voice
\nfinalized is the normal state. A deferred generation answers 202 while it is pending. A refresh returns the full resource with status: \"updating\"; while it runs, top-level totals may not yet match the device rows. A failed generation returns status: \"failed\" with a failure_reason, and the same external_invoice_id can be re-submitted.refurbishment_impact_basis and variant tell you which. The e.voice carries the facility and RFI versions used. See Refurbishment impact for the details.manufacturing_kg_co2_eq, transportation_kg_co2_eq, and eol_kg_co2_eq at e.voice and device level.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.
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\nThe response includes:
\nrecycled=true: avoided e-waste (kg), avoided emissions from recycling (kg CO2e), and material_flow with detailed component breakdown at the document level.The two avoided e-waste figures use different conventions:
\nrefurbishment_avoided_e_waste_kg is the full device weight retained in use, because refurbishing keeps the whole device out of the waste stream.recycling_avoided_e_waste_kg is the mass actually recovered as secondary material, so it is smaller than the device weight and matches the recovered mass in material_flow.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.
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.
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.
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\nHow a report is delivered:
\nreport_request. Its fallback_reason tells you why.deferred=true to run the report as a background job and always get 202 at once. This is the same deferred flag as in e.voice generation, but here false can still answer 202 when the time limit is reached.links.status (also in the Location header; wait the Retry-After seconds between polls) until status is completed, then call links.download for a download link. The link is valid for 5 minutes. A queued report is kept for 7 days.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\".
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.
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.
\nHow Product Identification Works
\nIn this solution, one product is defined as a country-specific dataset based on a combination of:
\nThis ensures that the footprint reflects region-specific factors such as electricity mix and product lifecycle variations.
\n\nAPI Response
\nWhen querying the e.product endpoint, the API returns the following carbon footprint data:
\nrefurbishment_impact_basis tells you whether your certified facility RFI, the Rejoose standard RFI, or your refurbishment percentage was used, and rfi_external_id, rfi_version, and variant name the figure. The answer uses the RFI that applies today and is not stored. See Refurbishment impact.Reading the response
\nrefurbished nor recycled. This is the default path, and the only one where tec_kwh is returned; it is null for refurbished and recycled products.manufacturing_kg_co2_eq and transportation_kg_co2_eq are 0 and total_kg_co2_eq = refurbishment_impact_kg_co2_eq + use_kg_co2_eq + end_of_life_kg_co2_eq.recycled and nothing is billed. recycling_avoided_e_waste_kg is the mass actually recovered as secondary material, so it equals material_flow.total_recovered_kg and is smaller than the device weight. This is the opposite convention to refurbishment avoided e-waste (refurbishment_avoided_e_waste_kg, reported by the e.voice circularity API), which is the full device weight retained in use.refurbished and recycled cannot be combined on one product: on e.product+ the request is accepted, but the recycled flag suppresses the carbon intensity, lifetime and life cycle stage values, so query the product as either refurbished or recycled, never both.Please look through the API docs for more details or contact support@rejoose.com for assistance.
\n\n\n\nUsage limit
\nYour 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+
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.
\nAdditional fields:
\nmanufacturing_kg_co2_eqtransportation_kg_co2_equse_kg_co2_eqend_of_life_kg_co2_eqtec_kwhRecycled lookups (recycled=1) are available on e.product+ only, and the response includes:
recycling_avoided_e_waste_kgrecycling_avoided_emissions_kg_co2_eqmaterial_flowe.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.
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.
\nAlso available in e.hub
\nThe 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
\nThe 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.
\nSeamless Data Consolidation Across Multiple ERP Systems
\nWith 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\nThree-Tiered Reporting Structure
\nThe 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:
\nclient.organization_id, typically one per ERP or platform, each containing multiple companies. (standard e.voice function)client.company_id. (standard e.voice function)Each Group can contain multiple Organisations, and each Organisation can include hundreds of subsidiaries, ensuring scalability for even the largest enterprises.
\nData Extraction & Integration
\nA dedicated data extraction endpoint allows you to:
\nA 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| Status | When |
|---|---|
| 401 | No or invalid API key |
| 403 | The key or the account may not call the endpoint |
| 404 | No record with that id for your organisation |
| 422 | A parameter failed validation |
| 429 | Rate limit exceeded |
| 5xx | A problem on our side |
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 \"data\": null,\n \"errors\": {\n \"unauthenticated\": [\n \"Unauthenticated.\"\n ]\n },\n \"status\": 401\n}\nThe key is valid, but it or your account may not call this endpoint. The cause decides the body.
\n\nThe 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\nYour 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\nYour 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\nYour 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\nYour 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}\nThe 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}\nThe 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.
\nA 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 \"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}\nAn endpoint whose 422 body differs from this shape says so in its own 422 example.
\nEvery 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 \"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}\nSomething went wrong on our side. These are rare and safe to retry after a short wait. If the problem persists, contact support@rejoose.com.
\n500 – 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}\n503 – 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}\nAn 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}\nclient.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\nEach 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.
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.
Paging. 10 clients per page by default, 100 at most. pagination.total is the number of clients found. Rows are sorted by organization_id.
Tip. Use the organization_id of a row as the organization_id filter of List e.voices to get that client's e.voices.
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\nEach 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.
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.
Paging. 10 clients per page by default, 100 at most. pagination.total is the number of clients found. Rows are sorted by organization_id.
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.
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\nUse 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.
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.