Introduction
Welcome to our API documentation!
The Rejoose API’s is organized around REST. A RESTful API should use standardized REST-oriented URLs and responses. Rejoose API’s accepts form-encoded request bodies, returns JSON-encoded responses. It also offers authentication, security tokens, and other standard HTTP verbs. These docs provide example API and code to showcase test data. The API’s and their respective docs can subject to change, we will advise in good time, to make you aware of any changes or additions to the API’s. We try to change as little as possible.
To get you started quickly with our API, we recommend providing a list of your most popular devices or product. This will help us ensure a smooth experience by pre-mapping them for your account.
CSV File Requirements
Your CSV file must include the following headers:
- Brand
- Category
- Model
- Description
- External_ID / Product ID
(This field represents the product manufacturer part number.)
Category Field Details
For the Category column, please include all classification tiers for each product. This means that if your product belongs to a hierarchy—such as a main category, a subcategory, and even further nested subcategories—each tier should be represented. You can separate these tiers with a consistent delimiter (for example, a forward slash / or a pipe |) so that our system can accurately parse and recognize the complete category structure.
Once we have this information, your devices/products will be properly identified and managed within your account, allowing you to take full advantage of the API's features.
The developer who needs to set up the API, will need access to our e/hub where they can generate the relevant API tokens for authentication. Please contact support@rejoose.com for this login. A login for e/hub® (https://e-hub.rejoose.com) requires an agreement with Rejoose.
Please note: 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.
Sandbox mode
When accessing e.hub® (https://e-hub.rejoose.com),
you have the option to switch between production and sandbox modes.
Sandbox mode allows you to test and explore features without affecting your live data.
This mode is ideal for tasks like setting up APIs, testing integrations, and generating reports before going live.
Please note: When in Sandbox mode and if you do not have an active subscription, you will only receive sample data for API testing. So do not conduct data quality testing when testing the API in Sandbox mode
In sandbox mode:
- Data created or modified won't impact your production environment.
- The Life Cycle Assessment (LCA) data mirrors the production environment but is limited to category average values. During your testing phase, you can use the following categories if you want some LCA data returned:
- Server
- Notebook
- Smartphone
- Docking Station
- Monitor
Utilize sandbox mode to ensure your integration is robust and ready for production use.
Rate Limiting
Our API enforces rate limiting to ensure fair usage and prevent abuse. The current rate limit is set to 600 requests/min.
Please note: For Enterprise solutions, we can adjust rate limitation according to SLA. Please contact our support@rejoose.com or your regional manager.
The following headers are included in each API response to provide information about your current rate limit status:
-
X-RateLimit-Limit
- This header indicates the maximum number of requests you are permitted to make in a given time window.
- Example:
X-RateLimit-Limit: 100
-
X-RateLimit-Remaining
- This header shows the number of requests remaining in the current rate limit window.
- Example:
X-RateLimit-Remaining: 50
-
Retry-After
- This header is included in the response only when your rate limit has been exceeded. It indicates how many seconds you should wait before making a new request.
-
Example:
Retry-After: 55
-
Response Example
-
When a request exceeds the rate limit, the API will return a
429 Too Many Requests
status code. The response will include theRetry-After
header, as shown below:- HTTP/1.1 429 Too Many Requests
- Content-Type: application/json
- Retry-After: 55
- X-RateLimit-Limit: 100
- X-RateLimit-Remaining: 0
-
Body:
{ "message": "Too Many Attempts." }
-
When a request exceeds the rate limit, the API will return a
Authenticating requests
To authenticate requests, include an Authorization
header with the value "Bearer {YOUR_AUTH_KEY}"
.
All authenticated endpoints are marked with a requires authentication
badge in the documentation below.
You can retrieve your API token by logging into Rejoose e/hub® https://e-hub.rejoose.com and visiting your admin dashboard and clicking "Create API Key".
e.voice
e.voice – Carbon data on invoice level
The e.voice API enables the generation of an environmental invoice (e.voice), serving as the carbon counterpart to a financial invoice. It bridges financial transactions with their associated carbon impact, allowing businesses to track and report emissions seamlessly.
When using the e.voice API, you have flexible implementation options:
- The solution can be fully anonymized, using only unique identifiers known to you, or it can include customer names.
- Rejoose does not receive a copy of the financial invoice. Instead, only specific extracted data points are transmitted—just enough to determine the carbon footprint and link the e.voice with its corresponding financial transaction.
Upon a successful transaction, the API provides:
- Transaction details confirming all is good or other relevant error responses (see example response).
- Carbon data for the total transaction and individual products (raw data format). (optional)
- A base64-encoded PDF file (the e.voice document). (optional)
Keep 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
e.hub and for your customers via e.insights.
e.voice API – Options Explained
- deferred Specifies whether the e.voice generation should run as a background job.
Useful for large batches or when you want to avoid delays in your primary process flow. By setting deferred to true, you can offload the generation process, letting it run asynchronously without impacting real-time operations - include Specifies whether the API response should include a base64-encoded PDF file of the e.voice document.
Great for scenarios where you only need raw carbon data and want to reduce payload size. Set include_pdf to false if you’re storing PDFs separately or handling document generation downstream. - 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)
Ideal for returns, corrections, or adjustments where you need to negate previously recorded carbon impacts. Setting credit_note to true ensures your carbon accounting stays accurate and reflects true net impacts.
Quick tips
- Use
deferred: true
for better system performance and faster responses (a sustainable choice). - Set
include_pdf: false
if you only want to minimize response size and rely on retrieving data from e.hub and e.insights - Mark transactions as
credit_note: true
to define this is an credit note and return of products, and this will be visible in the carbon reporting.
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.
Generate e.voice
requires authentication
Example request:
curl --request POST \
"https://app.rejoose.com/api/v3/evoices/generate" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"options\": {
\"deferred\": true,
\"include_pdf\": false,
\"credit_note\": true
},
\"external_invoice_id\": \"123456789\",
\"external_invoice_date\": \"2023-09-25\",
\"country_code\": \"GB\",
\"supplier_contact\": \"example@rejoose.com\",
\"client\": {
\"name\": \"Eco-Friendly Solutions Ltd\",
\"vat_number\": \"ECOF1234567\",
\"organization_id\": \"EcoFriendly-4987\",
\"address\": \"100 Enviro Way\",
\"address2\": \"Sustainability Lane 3\",
\"zip_code\": \"ECO321\",
\"city\": \"GreenVille\",
\"country\": \"Denmark\",
\"country_code\": \"DK\"
},
\"devices\": [
{
\"external_id\": \"RE8989121\",
\"original_manufacturer_part_number\": \"62B6ASD3EU\",
\"quantity\": 10,
\"category\": \"Notebook\",
\"brand\": \"Lenovo\",
\"model_name\": \"ThinkPad T480\",
\"refurbished\": true,
\"lifetime_months\": 48
}
]
}"
const url = new URL(
"https://app.rejoose.com/api/v3/evoices/generate"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"options": {
"deferred": true,
"include_pdf": false,
"credit_note": true
},
"external_invoice_id": "123456789",
"external_invoice_date": "2023-09-25",
"country_code": "GB",
"supplier_contact": "example@rejoose.com",
"client": {
"name": "Eco-Friendly Solutions Ltd",
"vat_number": "ECOF1234567",
"organization_id": "EcoFriendly-4987",
"address": "100 Enviro Way",
"address2": "Sustainability Lane 3",
"zip_code": "ECO321",
"city": "GreenVille",
"country": "Denmark",
"country_code": "DK"
},
"devices": [
{
"external_id": "RE8989121",
"original_manufacturer_part_number": "62B6ASD3EU",
"quantity": 10,
"category": "Notebook",
"brand": "Lenovo",
"model_name": "ThinkPad T480",
"refurbished": true,
"lifetime_months": 48
}
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json
url = 'https://app.rejoose.com/api/v3/evoices/generate'
payload = {
"options": {
"deferred": true,
"include_pdf": false,
"credit_note": true
},
"external_invoice_id": "123456789",
"external_invoice_date": "2023-09-25",
"country_code": "GB",
"supplier_contact": "example@rejoose.com",
"client": {
"name": "Eco-Friendly Solutions Ltd",
"vat_number": "ECOF1234567",
"organization_id": "EcoFriendly-4987",
"address": "100 Enviro Way",
"address2": "Sustainability Lane 3",
"zip_code": "ECO321",
"city": "GreenVille",
"country": "Denmark",
"country_code": "DK"
},
"devices": [
{
"external_id": "RE8989121",
"original_manufacturer_part_number": "62B6ASD3EU",
"quantity": 10,
"category": "Notebook",
"brand": "Lenovo",
"model_name": "ThinkPad T480",
"refurbished": true,
"lifetime_months": 48
}
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (200, When using deferred):
{
"success": true,
"data": {
"external_invoice_id": "94825344-eb3a-4b5d-8ac8-6e462f37bba2"
}
}
Example response (201):
{
"success": true,
"data": {
"external_invoice_id": "123456789",
"external_invoice_date": "2023-09-25",
"country_code": "DK",
"supplier_contact": "example@rejoose.com",
"pdf_base64": "JVBERi0xLjcKMSAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZwovT3V0bGluZXMgMiAwIFIKL1BhZ2VzIDMgMCBSID4+CmVuZG9iagoyIDAgb2JqCjw8IC9UeXBlIC9PdXRsaW5lcyAvQ291bnQgMCA+PgplbmRvYmoKMyAwIG9iago8PCAvVHlwZSAvUGFnZXMKL0tpZHMgWzYgMCBSCl0KL0NvdW50IDEKL1Jlc291cmNlcyA8PAovUHJvY1NldCA0IDAgUgovRm9udCA8PCAKL0YxIDggMCBSCi9GMiA5IDAgUgovRjMgMTAgMCBSCj4+Cj4+Ci9NZWRpYUJveCBbMC4wMDAgMC4wMDAgNTk1LjI4MCA4NDEuODkwXQogPj4KZW5kb2JqCjQgMCBvYmoKWy9QREYgL1RleHQgXQplbmRvYmoKNSAwIG9iago8PAovUHJvZHVjZXIgKP7/AGQAbwBtAHAAZABmACAAMgAuADAALgAzACAAKwAgAEMAUABEAEYpCi9DcmVhdGlvbkRhdGUgKEQ6MjAyNDAxMDUxMzIzMTArMDAnMDAnKQovTW9kRGF0ZSAoRDoyMDI0MDEwNTEzMjMxMCswMCcwMCcpCi9UaXRsZSAo/v8ARQB2AG8AaQBjAGUpCj4+CmVuZG9iago2IDAgb2JqCjw8IC9UeXBlIC9QYWdlCi9NZWRpYUJveCBbMC4wMDAgMC4wMDAgNTk1LjI4MCA4NDEuODkwXQovUGFyZW50IDMgMCBSCi9Bbm5vdHMgWyAxMSAwIFIgXQovQ29udGVudHMgNyAwIFIKPj4KZW5kb2JqCjcgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUKL0xlbmd0aCAyODM3ID4+CnN0cmVhbQp4nK2b23LcNhKG7/UUqORmt0qiiQNxyNXGsezaHCqxpdhV6/LFaIaSGM2Q8gxlRy+VZ9wGB2iCHhIYU/aFytVmA/g/NNANCD75eMJ0xoUkSuRZLgTZEG/gpjOsSSFlZrgYszin0EKzorNgu97wjtQn8LnSJM9YYeCnEIq8eXUCH5DPJCc/k/eEfIC/rMJBKWMHFfZoLWtycfJ6pLntzcnzS+xbs0wpQS5X5NlLRrjt6PKakPf/elP+1TS7kvx4f/HvD+TyZ3J+af0KCi0yRZQUmZTcO4JVOcerRzJwYAV0m0ccXE+hE4wz01JEhnf+7FNTLQdOhVRZbqAnY7JCMeyJZblz+gc/x0mVhejg46TKgrvZ8EDHLOLAIt00YzPeMGNSZVFkbDCp3oKTmuck/DmcVJZnhso9AE4UQru8rXbEkSPLpm4XVU3a25K0TbtYk/tts3pYtmS52F41NSk31W5XNfUuhOy7sFTzkS6gwW15XW7Lemmb7Vq/rupFvaygh3a7qHeLZQutZsFccFNAUHEipQY4hlBFQQAlBUykKaDBDiLtlIY/ASKE0QFF35xiCkLOAEZR5BnnCi0W45QnNxq+026po4UWGYRy57kfsFLQA5UZg2YgQjQVhMKwqPHjnVp63Chwss4m4/CFYygz7Ri+WLTlD4jn9fHCgV1WaBUIx00hIdx6GskC4WgJhI952h4KUNh7omWADKfAIaPwrxqYHDAbjWxR0Ex33gEzGjC7KO/bcnNVbgnsN4TB9M8BiJEDgzPwWRA5zpKMHCcviJycw/fyy8jJYQuBBTQvcnKYzdwcRs5/6/3ahiX4tABC/RhACf19uHj9aAn0RwMIPdEyIIcz4cjNDKAQXRhAkl8vlTbLM2kWV2eiWOkzky/ZmaDi6roslGHs6kkhBcOmnIYh5SzJkHKC+5CSBvZHmKZhSEkDyRLanRVS0lia+WFI/fSwa5tNuX1aPKF4jKeE+D56vHhvCcVH4wk9vWWIzU+DxzYvngbcwng6XzZnL7dVWa/Wj+SiWT/YpLcjv7arp0SRHSwHCH0UeUsqirzMIIo0hAPVX0YRWI3UM6NIC/iCjkRR81C320coOlZPS209ACyNEgD6uPEA0BIAiEVS74mWATqcCoduZiSF7MJIevHLkyIGBlUYHkaMs8QixldjmonQ01mSseZABLHmKrsvYk2ajBozM9YUzHvORmJtX75WdVvWu6p9fFq8IT6MtwQ+9ER86JnAF8blHh9aAnzRSEVPtAzA9xO5Bz8zUkPyYaRSiJqbZ3fvbgPiySOohFMd5VjMBMc1f1Jpm34KE0cfyaAxmR+eS47YjoNWYBCswE29b+XtoiXf/0DOf/r9JWgVcOIc84ayhYsRbwqjPa8/VduGvFs8klPbDmd0pInCiEzwkSZebcuyflut1+UpeVHWm8X2buBu7MAFKXSRSc29f8CUhCTHpwUWp21jel4uHu7v11VYEkzOipEQrWJ6WiZuGdBvaiLKvxeb+3X5n+3eP1s2m/Bs7yQUWmaiWw69RXUWOLnD4ZLC0hqzyAMLd5a+HW+ZPN7zg8M9+gq/SLH9vSVxZeP9Yfnl/iZlMDGX3TH+1bs/khMj7AYApfV0WxSWOD0tyN0N+en3wTWLgF2A6e66hQWu/YUOG36u9honeyo/xmOSmSw3kghNATmDvUrD0KEF6B4UwJ51ffy27taXMLZNu6tTGJ6BndBbpnZYcFSMdp+5iHIG2HEV3Vcfh6PYw4aBa8PgUzh6aDFyantBvo8jwFEGDLQyAwZjo7Z+TJhAL4NZkzB7Kb3WU0Ku6gWj5QjFVMMxXRTTkv9wV01Vfd0kZt8P2EkvQBFPK2eQ/7TSgXLOYE+kKj3TNq4hvoKp9pYjlDPYGHiup5W/fljULVQlcdU4WKdawr8Dz5RqzkSmpQpVw2YGu2hSte2QCRaoRssRqrkQUNDZ5ZFneqwmu1g29yXh4cbABWwB3LYvMtZfZkCnzud9t/UwUn78kIDlNX4lLEiSWrIAlr12lnk6RGyHjKsQlrccAUvkUP3KIgVrsIsKqClyJr8BLNTYr6dCsyQsIWB8RRhZBcgwPL1z2g4ZDyMLLcfAkiCYimlYv1bXZVtthr8+gMXPeYzWpqnb210CFSr8uriybrABhqjcASCFynoWMtx00RKgih0AAk9vOQJyYdOi4tOQu8Ji+FsdOAJ0W+JXxaNiBeBVSsJPzYswu0uaSSX67A5mriP7u0vkMDW5VmEid5ZUIndz2idymF3jDmcf06OKnZO4PSBaZ2gZRnJ41ciey99+vOTnfwbnpHE4Pvm5cfjkF8A5vvTxGRGRhUkmigzzHzLzliG01Gij0KjcD2aKGs1TtFCP69+v1zm0MJP2tIIsE6PV501PCy0DWsnRRmnZ+h2cJmlB1XfKk8C8pG8BzGdTBBZmmigwzJ0IzFuGwFKjjd5dwKKk0kSAKX0qUsBQUh/hXfKcAwwzKgIL800MWJ8/PTC0DIAlRxsFZuR+MFPAFEvRQj3fILwwqfa0fFJN0OpTqKeFloBWNKn2nt4y4JzUGeNcCMjYsWxRMHWqUqgx+wUJqzsgzmGNp0ZkHR7CYqz7M6InhpYBsfRwY8hohwy8FcuUkSM1YVk3n5qwXkEXaQ8qI5Qvb6v67m1l3zuQcybOQGxQt1BYp3kmC8udwTnHnfVAk7RFOTRqV7JrVGMR9GbOzbOvbAANMyasbJwlVdk4pn1lI+xFnvyisrG3OFrOrGyE7kZ0+Fv4384uDNXP//fLi/Pz57PU+yoF5Yd5MiofaxLU7y1DAD6WHYF5VcoUgUGV8vXVRq86SHYx1X1t4VWjZaAaKTrV86qNKdVKsFM5S7ivGlB4mLSiwrFGQOHeMhTuQc4RLvj+6dekcE5P2RzdmPxRd5hEYrr7VO91o2WgGzn2YT4j+U/qnhXmmMR71T6JJ1T3KdurRkugOprEe09vGfBC/nPiBJP45AJR/FTPQYa5GJGFp6wYsj7zeuFoGQjH9BJkhBm5uOBgHXnMdrHY7B7qm9FkLERm9AitV4v14u9HcsE4+XPdbhfJY7LLabbGp6rPafhbzRm/IbCPcikN06+zRNJv5wiDge0wdHSWVN52/Pu8DX5cqi/y9qTG6O/MXd6G7YyxkUc+3f3O7ugiMxhDFylzOGNgI+gwMcdAoyeSRs8E6XAB7FGjZcA6LdTCTt3ZOGdfX8wKRl8NIaQwj0ej0XsiJPRMhWNQNbl49JZhQKZ0HlVHTUUkO/62x/XvN+w5nLH+6jkHZUOMM3r2nL1ngnNYp+05o2XAOanzqMptirMx9NQcfU/0LVD7ig9Rh5VKFLX3RNTomUIdVIYOtbcMUad0HnXDNIWa52ZQJMdvmPpV1ZVtc1BjkYmowyInhho9ETV6JlCHxegeNVoGqJM6IzssjuUbhCOWpD0jX5ImGKFnz8h7JhiFpeueEVoCRtFitvf0lgHdJKF4MWsfH0X2DPc0ZBDK4035moiq7hnbwTOeN+X1w/aq2t2WK7IqP1XLckcWMDz7rglMn6v2lixq8l3yKobaJ4R2n5vsKfkkhhY2yUcG+1367RQ1sN1C0Qy1sza6vxAy/mniulrekdty2/3fmMUS9O6IfwO1KdvbZtWsm5tH8vm2aktyv7gvt1mk1y6oxeDPQc3jh6S6t8/2SabMqGDesA+1qeJeZ4wW9kZLIxD7H8AOX2+RM2iYwse5hL++rOpdWe8+lX8RGPEZYbZNMG/LVbmt7nZX5fYmG3vAZl8JFXbNsowrOdIlfYbv5f4P4se8CQplbmRzdHJlYW0KZW5kb2JqCjggMCBvYmoKPDwgL1R5cGUgL0ZvbnQKL1N1YnR5cGUgL1R5cGUxCi9OYW1lIC9GMQovQmFzZUZvbnQgL1RpbWVzLVJvbWFuCi9FbmNvZGluZyAvV2luQW5zaUVuY29kaW5nCj4+CmVuZG9iago5IDAgb2JqCjw8IC9UeXBlIC9Gb250Ci9TdWJ0eXBlIC9UeXBlMQovTmFtZSAvRjIKL0Jhc2VGb250IC9IZWx2ZXRpY2EtQm9sZAovRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZwo+PgplbmRvYmoKMTAgMCBvYmoKPDwgL1R5cGUgL0ZvbnQKL1N1YnR5cGUgL1R5cGUxCi9OYW1lIC9GMwovQmFzZUZvbnQgL1RpbWVzLUJvbGQKL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcKPj4KZW5kb2JqCjExIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovQSAxMiAwIFIKL0JvcmRlciBbMCAwIDBdCi9IIC9JCi9SZWN0IFsgMTk5LjEzNzggMTguMjE4NSAzOTYuMTQyMiAyNy4wMTg1IF0KPj4KZW5kb2JqCjEyIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL1VSSQovVVJJIChodHRwczovL3Jlam9vc2UuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIzLzA2L0V2b2ljZV9FeHBsYWluZXIucGRmKQo+PgplbmRvYmoKeHJlZgowIDEzCjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAwOSAwMDAwMCBuIAowMDAwMDAwMDc0IDAwMDAwIG4gCjAwMDAwMDAxMjAgMDAwMDAgbiAKMDAwMDAwMDI5NSAwMDAwMCBuIAowMDAwMDAwMzI0IDAwMDAwIG4gCjAwMDAwMDA0OTcgMDAwMDAgbiAKMDAwMDAwMDYxOSAwMDAwMCBuIAowMDAwMDAzNTI5IDAwMDAwIG4gCjAwMDAwMDM2MzggMDAwMDAgbiAKMDAwMDAwMzc1MCAwMDAwMCBuIAowMDAwMDAzODU5IDAwMDAwIG4gCjAwMDAwMDM5ODUgMDAwMDAgbiAKdHJhaWxlcgo8PAovU2l6ZSAxMwovUm9vdCAxIDAgUgovSW5mbyA1IDAgUgovSURbPGQ0MjEyYTIwY2E1NTc3NTg1NGNiOWUyNmM3NGRiYjdiPjxkNDIxMmEyMGNhNTU3NzU4NTRjYjllMjZjNzRkYmI3Yj5dCj4+CnN0YXJ0eHJlZgo0MTA0CiUlRU9GCg==",
"carbon_intensity_gram": 123,
"total_kg_co2_eq": 1301.51,
"status": "finalized",
"type": "evoice",
"created_at": "2024-01-05T13:11:49.000000Z",
"client": {
"name": "Eco-Friendly Solutions Ltd",
"vat_number": "ECOF1234567",
"organization_id": "EcoFriendly-4987",
"address": "100 Enviro Way",
"address2": "Sustainability Lane 3",
"zip_code": "ECO321",
"city": "GreenVille",
"country": "Denmark",
"country_code": "DK"
},
"devices": [
{
"external_id": "RE8989121",
"original_manufacturer_part_number": "62B6MAT3EU",
"quantity": 10,
"brand": "Lenovo",
"model_name": "ThinkPad T480",
"category": "Notebook",
"lifetime_months": 72,
"scope_2_kg_co2_eq": 278.41,
"scope_3_kg_co2_eq": 249.27,
"total_kg_co2_eq": 527.68,
"refurbished": true,
"avoided_emissions_kg_co2_eq": 256.68
},
{
"external_id": "SM-S918BZKDEEB",
"original_manufacturer_part_number": null,
"quantity": 10,
"brand": "Samsung",
"model_name": "Galaxy S23 Ultra",
"category": "Smartphone",
"lifetime_months": 30,
"scope_2_kg_co2_eq": 31.18,
"scope_3_kg_co2_eq": 742.65,
"total_kg_co2_eq": 773.83,
"refurbished": false,
"avoided_emissions_kg_co2_eq": 0
}
],
"links": {
"self": "https://app.rejoose.com/api/v3/evoices/123456789"
}
}
}
Example response (201, When using credit_note):
{
"success": true,
"data": {
"external_invoice_id": "123456789",
"external_invoice_date": "2023-09-25",
"country_code": "DK",
"supplier_contact": "example@rejoose.com",
"pdf_base64": "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Ci9FbmNvZGluZyAvV2luQW5zaUVuY29kaW5nCj4+CmVuZG9iago5IDAgb2JqCjw8IC9UeXBlIC9Gb250Ci9TdWJ0eXBlIC9UeXBlMQovTmFtZSAvRjIKL0Jhc2VGb250IC9IZWx2ZXRpY2EtQm9sZAovRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZwo+PgplbmRvYmoKMTAgMCBvYmoKPDwgL1R5cGUgL0ZvbnQKL1N1YnR5cGUgL1R5cGUxCi9OYW1lIC9GMwovQmFzZUZvbnQgL1RpbWVzLUJvbGQKL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcKPj4KZW5kb2JqCjExIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovQSAxMiAwIFIKL0JvcmRlciBbMCAwIDBdCi9IIC9JCi9SZWN0IFsgMTk5LjEzNzggMTguMjE4NSAzOTYuMTQyMiAyNy4wMTg1IF0KPj4KZW5kb2JqCjEyIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL1VSSQovVVJJIChodHRwczovL3Jlam9vc2UuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIzLzA2L0V2b2ljZV9FeHBsYWluZXIucGRmKQo+PgplbmRvYmoKeHJlZgowIDEzCjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAwOSAwMDAwMCBuIAowMDAwMDAwMDc0IDAwMDAwIG4gCjAwMDAwMDAxMjAgMDAwMDAgbiAKMDAwMDAwMDI5NSAwMDAwMCBuIAowMDAwMDAwMzI0IDAwMDAwIG4gCjAwMDAwMDA0OTcgMDAwMDAgbiAKMDAwMDAwMDYxOSAwMDAwMCBuIAowMDAwMDAzNTI5IDAwMDAwIG4gCjAwMDAwMDM2MzggMDAwMDAgbiAKMDAwMDAwMzc1MCAwMDAwMCBuIAowMDAwMDAzODU5IDAwMDAwIG4gCjAwMDAwMDM5ODUgMDAwMDAgbiAKdHJhaWxlcgo8PAovU2l6ZSAxMwovUm9vdCAxIDAgUgovSW5mbyA1IDAgUgovSURbPGQ0MjEyYTIwY2E1NTc3NTg1NGNiOWUyNmM3NGRiYjdiPjxkNDIxMmEyMGNhNTU3NzU4NTRjYjllMjZjNzRkYmI3Yj5dCj4+CnN0YXJ0eHJlZgo0MTA0CiUlRU9GCg==",
"carbon_intensity_gram": 123,
"total_kg_co2_eq": -1301.51,
"status": "finalized",
"type": "credit_note",
"created_at": "2024-01-05T13:11:49.000000Z",
"client": {
"name": "Eco-Friendly Solutions Ltd",
"vat_number": "ECOF1234567",
"organization_id": "EcoFriendly-4987",
"address": "100 Enviro Way",
"address2": "Sustainability Lane 3",
"zip_code": "ECO321",
"city": "GreenVille",
"country": "Denmark",
"country_code": "DK"
},
"devices": [
{
"external_id": "RE8989121",
"original_manufacturer_part_number": "62B6MAT3EU",
"quantity": 10,
"brand": "Lenovo",
"model_name": "ThinkPad T480",
"category": "Notebook",
"lifetime_months": 72,
"scope_2_kg_co2_eq": -278.41,
"scope_3_kg_co2_eq": -249.27,
"total_kg_co2_eq": -527.68,
"refurbished": true,
"avoided_emissions_kg_co2_eq": -256.68
},
{
"external_id": "SM-S918BZKDEEB",
"original_manufacturer_part_number": null,
"quantity": 10,
"brand": "Samsung",
"model_name": "Galaxy S23 Ultra",
"category": "Smartphone",
"lifetime_months": 30,
"scope_2_kg_co2_eq": -31.18,
"scope_3_kg_co2_eq": -742.65,
"total_kg_co2_eq": -773.83,
"refurbished": false,
"avoided_emissions_kg_co2_eq": 0
}
],
"links": {
"self": "https://app.rejoose.com/api/v3/evoices/123456789"
}
}
}
Example response (422, Validation Error):
{
"errors": {
"external_invoice_id": [
"The external invoice id field is required."
],
"external_invoice_date": [
"The external invoice date field is required."
],
"client.name": [
"The client.name field is required."
]
}
}
Example response (429, Too Many Attempts):
{
"message": "Too Many Attempts."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET e.voice data
requires authentication
Returns the e.voice data
Example request:
curl --request GET \
--get "https://app.rejoose.com/api/v3/evoices/123456789" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://app.rejoose.com/api/v3/evoices/123456789"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://app.rejoose.com/api/v3/evoices/123456789'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"success": true,
"data": {
"external_invoice_id": "123456789",
"external_invoice_date": "2023-09-25",
"country_code": "DK",
"supplier_contact": "example@rejoose.com",
"pdf_base64": "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Ci9FbmNvZGluZyAvV2luQW5zaUVuY29kaW5nCj4+CmVuZG9iago5IDAgb2JqCjw8IC9UeXBlIC9Gb250Ci9TdWJ0eXBlIC9UeXBlMQovTmFtZSAvRjIKL0Jhc2VGb250IC9IZWx2ZXRpY2EtQm9sZAovRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZwo+PgplbmRvYmoKMTAgMCBvYmoKPDwgL1R5cGUgL0ZvbnQKL1N1YnR5cGUgL1R5cGUxCi9OYW1lIC9GMwovQmFzZUZvbnQgL1RpbWVzLUJvbGQKL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcKPj4KZW5kb2JqCjExIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovQSAxMiAwIFIKL0JvcmRlciBbMCAwIDBdCi9IIC9JCi9SZWN0IFsgMTk5LjEzNzggMTguMjE4NSAzOTYuMTQyMiAyNy4wMTg1IF0KPj4KZW5kb2JqCjEyIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL1VSSQovVVJJIChodHRwczovL3Jlam9vc2UuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIzLzA2L0V2b2ljZV9FeHBsYWluZXIucGRmKQo+PgplbmRvYmoKeHJlZgowIDEzCjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAwOSAwMDAwMCBuIAowMDAwMDAwMDc0IDAwMDAwIG4gCjAwMDAwMDAxMjAgMDAwMDAgbiAKMDAwMDAwMDI5NSAwMDAwMCBuIAowMDAwMDAwMzI0IDAwMDAwIG4gCjAwMDAwMDA0OTcgMDAwMDAgbiAKMDAwMDAwMDYxOSAwMDAwMCBuIAowMDAwMDAzNTI5IDAwMDAwIG4gCjAwMDAwMDM2MzggMDAwMDAgbiAKMDAwMDAwMzc1MCAwMDAwMCBuIAowMDAwMDAzODU5IDAwMDAwIG4gCjAwMDAwMDM5ODUgMDAwMDAgbiAKdHJhaWxlcgo8PAovU2l6ZSAxMwovUm9vdCAxIDAgUgovSW5mbyA1IDAgUgovSURbPGQ0MjEyYTIwY2E1NTc3NTg1NGNiOWUyNmM3NGRiYjdiPjxkNDIxMmEyMGNhNTU3NzU4NTRjYjllMjZjNzRkYmI3Yj5dCj4+CnN0YXJ0eHJlZgo0MTA0CiUlRU9GCg==",
"carbon_intensity_gram": 123,
"total_kg_co2_eq": 1301.51,
"status": "finalized",
"type": "evoice",
"created_at": "2024-01-05T13:11:49.000000Z",
"client": {
"name": "Eco-Friendly Solutions Ltd",
"vat_number": "ECOF1234567",
"organization_id": "EcoFriendly-4987",
"address": "100 Enviro Way",
"address2": "Sustainability Lane 3",
"zip_code": "ECO321",
"city": "GreenVille",
"country": "Denmark",
"country_code": "DK"
},
"devices": [
{
"external_id": "RE8989121",
"original_manufacturer_part_number": "62B6MAT3EU",
"quantity": 10,
"brand": "Lenovo",
"model_name": "ThinkPad T480",
"category": "Notebook",
"lifetime_months": 72,
"scope_2_kg_co2_eq": 278.41,
"scope_3_kg_co2_eq": 249.27,
"total_kg_co2_eq": 527.68,
"refurbished": true,
"avoided_emissions_kg_co2_eq": 256.68
},
{
"external_id": "SM-S918BZKDEEB",
"original_manufacturer_part_number": null,
"quantity": 10,
"brand": "Samsung",
"model_name": "Galaxy S23 Ultra",
"category": "Smartphone",
"lifetime_months": 30,
"scope_2_kg_co2_eq": 31.18,
"scope_3_kg_co2_eq": 742.65,
"total_kg_co2_eq": 773.83,
"refurbished": false,
"avoided_emissions_kg_co2_eq": 0
}
],
"links": {
"self": "https://app.rejoose.com/api/v3/evoices/123456789"
}
}
}
Example response (202, The e.voice is still processing):
{
"success": true,
"data": {
"external_invoice_id": "94825344-eb3a-4b5d-8ac8-6e462f37bba2",
"status": "pending"
}
}
Example response (404):
{
"errors": "Evoice with external_invoice_id 3.1415926535 not found"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
e.voice - circularity
Provides 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.
The response includes:
- Avoided emissions from refurbishing the products (kg CO2e).
- Carbon impact of the refurbishment process itself (kg CO2e).
Both datasets are used for customer reporting and internal documentation.
POST e.voice circularity
requires authentication
Generates the e.voice circularity
Example request:
curl --request POST \
"https://app.rejoose.com/api/v3/evoices/circularity/generate" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"external_doc_id\": \"123456789.\",
\"external_doc_date\": \"2023-09-25.\",
\"e_waste_kg\": 10,
\"country_code\": \"GB.\",
\"supplier_contact\": \"example@rejoose.com.\",
\"client\": {
\"name\": \"Eco-Friendly Solutions Ltd\",
\"vat_number\": \"ECOF1234567\",
\"organization_id\": \"EcoFriendly-4987\",
\"address\": \"100 Enviro Way\",
\"address2\": \"Sustainability Lane 3\",
\"zip_code\": \"ECO321\",
\"city\": \"GreenVille\",
\"country\": \"Denmark\",
\"country_code\": \"DK\"
},
\"devices\": [
{
\"external_id\": \"RE8989121\",
\"quantity\": 10,
\"category\": \"Notebook\",
\"brand\": \"Lenovo\",
\"model_name\": \"ThinkPad T480\"
}
]
}"
const url = new URL(
"https://app.rejoose.com/api/v3/evoices/circularity/generate"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"external_doc_id": "123456789.",
"external_doc_date": "2023-09-25.",
"e_waste_kg": 10,
"country_code": "GB.",
"supplier_contact": "example@rejoose.com.",
"client": {
"name": "Eco-Friendly Solutions Ltd",
"vat_number": "ECOF1234567",
"organization_id": "EcoFriendly-4987",
"address": "100 Enviro Way",
"address2": "Sustainability Lane 3",
"zip_code": "ECO321",
"city": "GreenVille",
"country": "Denmark",
"country_code": "DK"
},
"devices": [
{
"external_id": "RE8989121",
"quantity": 10,
"category": "Notebook",
"brand": "Lenovo",
"model_name": "ThinkPad T480"
}
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json
url = 'https://app.rejoose.com/api/v3/evoices/circularity/generate'
payload = {
"external_doc_id": "123456789.",
"external_doc_date": "2023-09-25.",
"e_waste_kg": 10,
"country_code": "GB.",
"supplier_contact": "example@rejoose.com.",
"client": {
"name": "Eco-Friendly Solutions Ltd",
"vat_number": "ECOF1234567",
"organization_id": "EcoFriendly-4987",
"address": "100 Enviro Way",
"address2": "Sustainability Lane 3",
"zip_code": "ECO321",
"city": "GreenVille",
"country": "Denmark",
"country_code": "DK"
},
"devices": [
{
"external_id": "RE8989121",
"quantity": 10,
"category": "Notebook",
"brand": "Lenovo",
"model_name": "ThinkPad T480"
}
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (201):
{
"data": {
"id": 31,
"external_doc_id": "ab57e0f1-2396-430c-ba5a-339d77fda792",
"external_doc_date": "2024-01-22",
"country_code": "DK",
"e_waste_kg_co2_eq": 212.81,
"refurbishment_impact_kg_co2_eq": 180.42866,
"refurbishment_offset_kg_co2_eq": 3053.34679,
"client": {
"name": "Rejoose ApS",
"organization_id": "rejoose_aps",
"vat_number": "39121506",
"address": "Finsensvej 78",
"address2": "Finsensvej 78",
"zip_code": "2000",
"city": "Frederiksberg",
"country": "Denmark",
"country_code": "DK"
},
"devices": [
{
"external_id": "X220-DEHO",
"amount": 5,
"brand": "LENOVO",
"model_name": "Lenovo X220",
"category": "Laptop",
"refurbishment_impact_percentage": 0.0516,
"refurbishment_impact_kg_co2_eq": 75.08832,
"refurbishment_offset_kg_co2_eq": 1380.11168
},
{
"external_id": "X3T23AV",
"amount": 2,
"brand": "HP",
"model_name": "HP EliteBook 820 G4",
"category": "Notebook",
"refurbishment_impact_percentage": 0.0516,
"refurbishment_impact_kg_co2_eq": 105.34034,
"refurbishment_offset_kg_co2_eq": 1673.23511
}
],
"created_at": "2024-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
}
Example response (422, Validation Error):
{
"data": null,
"errors": {
"external_doc_id": [
"The external doc id field is required."
],
"external_doc_date": [
"The external doc date field is required."
],
"client.name": [
"The client.name field is required."
]
}
}
Example response (429, Too Many Attempts):
{
"message": "Too Many Attempts."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET e.voices circularity PDF
requires authentication
Returns the e.voice circularity PDF
Example request:
curl --request GET \
--get "https://app.rejoose.com/api/v3/evoices/circularity/ab57e0f1-2396-430c-ba5a-339d77fda792/pdf" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/pdf"
const url = new URL(
"https://app.rejoose.com/api/v3/evoices/circularity/ab57e0f1-2396-430c-ba5a-339d77fda792/pdf"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/pdf",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://app.rejoose.com/api/v3/evoices/circularity/ab57e0f1-2396-430c-ba5a-339d77fda792/pdf'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/pdf'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
application/pdf The PDF file
Example response (404):
{
"data": null,
"errors": {
"not_found": [
"Evoice Circularity with external document id 1 not found for your partner"
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET e.voice circularity data
requires authentication
Returns the e.voice circularity data
Example request:
curl --request GET \
--get "https://app.rejoose.com/api/v3/evoices/circularity/ab57e0f1-2396-430c-ba5a-339d77fda792" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://app.rejoose.com/api/v3/evoices/circularity/ab57e0f1-2396-430c-ba5a-339d77fda792"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://app.rejoose.com/api/v3/evoices/circularity/ab57e0f1-2396-430c-ba5a-339d77fda792'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"data": {
"id": 31,
"external_doc_id": "ab57e0f1-2396-430c-ba5a-339d77fda792",
"external_doc_date": "2024-01-22",
"country_code": "DK",
"e_waste_kg_co2_eq": 212.81,
"refurbishment_impact_kg_co2_eq": 180.42866,
"refurbishment_offset_kg_co2_eq": 3053.34679,
"client": {
"name": "Rejoose ApS",
"organization_id": "rejoose_aps",
"vat_number": "39121506",
"address": "Finsensvej 78",
"address2": "Finsensvej 78",
"zip_code": "2000",
"city": "Frederiksberg",
"country": "Denmark",
"country_code": "DK"
},
"devices": [
{
"external_id": "X220-DEHO",
"amount": 5,
"brand": "LENOVO",
"model_name": "Lenovo X220",
"category": "Laptop",
"refurbishment_impact_percentage": 0.0516,
"refurbishment_impact_kg_co2_eq": 75.08832,
"refurbishment_offset_kg_co2_eq": 1380.11168
},
{
"external_id": "X3T23AV",
"amount": 2,
"brand": "HP",
"model_name": "HP EliteBook 820 G4",
"category": "Notebook",
"refurbishment_impact_percentage": 0.0516,
"refurbishment_impact_kg_co2_eq": 105.34034,
"refurbishment_offset_kg_co2_eq": 1673.23511
}
],
"created_at": "2024-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
}
Example response (404):
{
"data": null,
"errors": {
"not_found": [
"Evoice Circularity with external document id 1 not found for your partner"
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
e.product
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.
How Product Identification Works
In this solution, one product is defined as a country-specific dataset based on a combination of:
- Manufacturer Part Number (MPN): The unique manufacturer part number (SKU/MPN) provided by the vendor or distributor, or an internal part number.
- Brand: The product manufacturer's name. Used together with the MPN and category to ensure a unique data match.
- Category: 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.
This ensures that the footprint reflects region-specific factors such as electricity mix and product lifecycle variations.
API Response
When querying the e.product endpoint, the API returns the following carbon footprint data:
- Total carbon footprint (LCA) – The full lifecycle emissions of a new product, e.g., 33.3 kg CO₂e.
- Refurbishment impact (LCA) – The emissions from refurbishing the product instead of manufacturing a new one, e.g., 3.5 kg CO₂e
- Avoided emissions by choosing refurbished – The emissions savings when selecting a refurbished product over a new one, e.g., 28.0 kg CO₂e.
Please look through the API docs for more details or contact support@rejoose.com for assistance.
GET e.product
requires authentication
The GET endpoint returns the carbon footprint data of a single product.
Example request:
curl --request GET \
--get "https://app.rejoose.com/api/v3/products?manufacture_part_number=286H8AA&brand=HP+Inc&category=Docking+station&country_code=DK&refurbished=1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://app.rejoose.com/api/v3/products"
);
const params = {
"manufacture_part_number": "286H8AA",
"brand": "HP Inc",
"category": "Docking station",
"country_code": "DK",
"refurbished": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://app.rejoose.com/api/v3/products'
params = {
'manufacture_part_number': '286H8AA',
'brand': 'HP Inc',
'category': 'Docking station',
'country_code': 'DK',
'refurbished': '1',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()
Example response (200, NOTE: refurbishment_impact_kg_co2_eq and refurbishment_offset_kg_co2_eq will only be included when product is refurbished):
{
"data": {
"manufacture_part_number": "286H8AA",
"brand": "HP Inc",
"category": "Docking station",
"country_code": "DK",
"refurbished": true,
"data_match": true,
"data_method": "CA",
"total_kg_co2_eq": 33.32004288,
"carbon_intensity_gram": 123.42,
"lifetime_month": 48,
"refurbishment_impact_kg_co2_eq": 3.457734144,
"refurbishment_offset_kg_co2_eq": 28.03242874
},
"errors": null
}
Example response (200, NOTE: Requires 'e.product-plus' to retrieve detailed LCA (Life Cycle Assessment) data.):
{
"data": {
"manufacture_part_number": "286H8AA",
"brand": "HP Inc",
"category": "Docking station",
"country_code": "DK",
"refurbished": false,
"data_match": true,
"data_method": "CA",
"total_kg_co2_eq": 40.23551117,
"manufacturing_kg_co2_eq": 29.86230874,
"transportation_kg_co2_eq": 5.457734144,
"use_kg_co2_eq": 3.457734144,
"end_of_life_kg_co2_eq": 1.457734144,
"carbon_intensity_gram": 123.42,
"lifetime_month": 48,
"refurbishment_impact_kg_co2_eq": null,
"refurbishment_offset_kg_co2_eq": null
},
"errors": null
}
Example response (200, NOTE: The carbon data will be null when no product was found):
{
"data": {
"manufacture_part_number": "286H8AA",
"brand": "HP Inc",
"category": "Docking station",
"country_code": "DK",
"refurbished": true,
"data_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
},
"errors": null
}
Example response (422):
{
"data": null,
"errors": {
"manufacture_part_number": [
"The manufacture part number field is required."
],
"brand": [
"The brand field is required."
],
"category": [
"The category field is required."
],
"refurbished": [
"The refurbished field must not be greater than 1."
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
POST e.product
requires authentication
e.product – Batch Product-Level Carbon Footprint API
The e.product API allows you to retrieve carbon footprint data for multiple products in a single request, making it efficient for e-commerce, quotations, and bulk assessments. This minimizes processing time and optimizes performance when extracting carbon data at scale.
Batch Processing
- You can send between 1 and 100 products per request to streamline large-scale data extractions.
- Each product must be identified using a combination of Brand name, Manufacturer Part Number (MPN), and Country code to ensure accuracy.
- For larger datasets, consider splitting the request into multiple batches.
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.
Example request:
curl --request POST \
"https://app.rejoose.com/api/v3/products" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"products\": [
{
\"manufacture_part_number\": \"modi\",
\"brand\": \"HP Inc\",
\"category\": \"Docking station\",
\"country_code\": \"DK\",
\"refurbished\": true
}
]
}"
const url = new URL(
"https://app.rejoose.com/api/v3/products"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"products": [
{
"manufacture_part_number": "modi",
"brand": "HP Inc",
"category": "Docking station",
"country_code": "DK",
"refurbished": true
}
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json
url = 'https://app.rejoose.com/api/v3/products'
payload = {
"products": [
{
"manufacture_part_number": "modi",
"brand": "HP Inc",
"category": "Docking station",
"country_code": "DK",
"refurbished": true
}
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (200, Note: refurbishment_impact_kg_co2_eq and refurbishment_offset_kg_co2_eq will only be included when product is refurbished):
{
"data": [
{
"manufacture_part_number": "286H8AA",
"brand": "HP Inc",
"category": "Docking station",
"country_code": "DK",
"refurbished": true,
"data_match": true,
"data_method": "CA+",
"total_kg_co2_eq": 3.7941664000000004,
"carbon_intensity_gram": 103,
"lifetime_month": 48,
"refurbishment_impact_kg_co2_eq": 0.3267312,
"refurbishment_offset_kg_co2_eq": 6.0052688
}
],
"errors": null
}
Example response (200, NOTE: Requires 'e.product-plus' to retrieve detailed LCA (Life Cycle Assessment) data.):
{
"data": [
{
"manufacture_part_number": "286H8AA",
"brand": "HP Inc",
"category": "Docking station",
"country_code": "DK",
"refurbished": false,
"data_match": true,
"data_method": "CA",
"total_kg_co2_eq": 40.23551117,
"manufacturing_kg_co2_eq": 29.86230874,
"transportation_kg_co2_eq": 5.457734144,
"use_kg_co2_eq": 3.457734144,
"end_of_life_kg_co2_eq": 1.457734144,
"carbon_intensity_gram": 123.42,
"lifetime_month": 48,
"refurbishment_impact_kg_co2_eq": null,
"refurbishment_offset_kg_co2_eq": null
}
],
"errors": null
}
Example response (200, Note: The carbon footprint data will be null when the product was not found.):
{
"data": [
{
"manufacture_part_number": "286H8AA",
"brand": "HP Inc",
"category": "Docking station",
"country_code": "DK",
"refurbished": true,
"data_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
}
],
"errors": null
}
Example response (422):
{
"data": null,
"errors": {
"products.0.manufacture_part_number": [
"The products.0.manufacture_part_number field is required."
],
"products.0.brand": [
"The products.0.brand field is required."
],
"products.0.category": [
"The products.0.category field is required."
],
"products.0.country_code": [
"The products.0.country_code field is required."
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET changed products
requires authentication
Retrieve changed products as a CSV file.
This endpoint provides a CSV file listing the changes for a specified date or week.
The file contains columns for manufacturer_part_number
, brand
, and category
.
Use this file to check for relevant products and brands, then use the e.product
API to obtain detailed information.
Daily File: If a date
is specified, a daily changes file for that day is returned, specified date cannot be in the future.
- Example: For
date
=2024-11-06
, the file will list all products that changed on November 6, 2024.
Weekly Summary File: Aggregates product changes from Monday to Sunday for a specified week.
Without a date
, a summary file for the specified or most recent week is retrieved.
The weekly file aggregates product changes from Monday to Sunday for the specified week.
Weekly File Details:
- Aggregates data from all daily files generated for each day of the specified week.
- 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).
- Example: A weekly file for week 45 of 2024 contains all products that changed from Monday, 2024-11-04, to Sunday, 2024-11-10.
- Removes duplicate entries to ensure a clean dataset.
- Combines individual product changes into a single file.
Weekly File Composition:
The weekly file includes:
- All changes recorded in the daily files from Monday to Sunday of the week.
- A deduplicated list of products with details such as
manufacturer_part_number
,brand
, andcategory
.
Recommendations:
- 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.
- Refer to the daily file for specific changes on a particular day
Response Details:
- Returns a 302 Redirect to the CDN URL if the file is accessible there.
Example request:
curl --request GET \
--get "https://app.rejoose.com/api/v3/products/changes?date=2024-11-01&week_number=45" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://app.rejoose.com/api/v3/products/changes"
);
const params = {
"date": "2024-11-01",
"week_number": "45",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://app.rejoose.com/api/v3/products/changes'
params = {
'date': '2024-11-01',
'week_number': '45',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()
Example response (302):
manufacturer_part_number,brand,category
UT04CBE,Lenovo,Notebook
RE242EP,HP,Notebook
PSMA2E-00U01DGC,Toshiba,Notebook
RH324ET#ABY-D30,HP,Notebook
A3HF-5A027P,ASUS,Notebook
Example response (404):
{
"error": "File not found"
}
Example response (404):
Show headers
cache-control: no-cache, private
content-type: application/json
{
"message": "The route localhost/api/v3/products/changes could not be found."
}
Example response (422):
{
"error": "Invalid week number. The week number should be no higher than last week"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Groups
Enterprise Grouping in e.hub
The e.hub Enterprise Functionality is an advanced feature exclusively available to Enterprise Subscription customers. It is designed for companies operating with multiple ERP systems that do not share common company or organization 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.
Seamless Data Consolidation Across Multiple ERP Systems
With this feature, you can link and unify organization data from multiple disconnected ERP systems into a single Group Structure, ensuring a consistent, company-wide carbon reporting framework.
Three-Tiered Reporting Structure
The grouping model enables full organizational alignment across various business units:
- Group: The top-level entity, representing the entire enterprise. (unique to Enterprise Grouping)
- Organization: Major business divisions or regions, each containing multiple companies. (standard e.voice function).
- Companies: TIndividual subsidiaries or business units. (standard e.voice function)
Each Group can contain multiple Organizations, and each Organization can include hundreds of subsidiaries, ensuring scalability for even the largest enterprises.
Data Extraction & Integration
A dedicated data extraction endpoint allows you to:
- Retrieve grouped and structured data for data warehouse integration.
- Extract e.voice records and filter reports by Group, Organization, or Company.
- Seamlessly integrate consolidated data into your internal analytics or reporting systems.
GET group e.voices by slug
requires authentication
Retrieve a paginated list of e.voices for a specific group, filtered by date and pagination options.
Example request:
curl --request GET \
--get "https://app.rejoose.com/api/v3/group/eco-friendly-company?from=2024-01-01&to=2024-12-31&page=2&per_page=20" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://app.rejoose.com/api/v3/group/eco-friendly-company"
);
const params = {
"from": "2024-01-01",
"to": "2024-12-31",
"page": "2",
"per_page": "20",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://app.rejoose.com/api/v3/group/eco-friendly-company'
params = {
'from': '2024-01-01',
'to': '2024-12-31',
'page': '2',
'per_page': '20',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()
Example response (200):
{
"data": {
"items": [
{
"external_invoice_id": "a6e0f0bb-0285-4a2d-b6d8-93c63543d5a9",
"external_invoice_date": "2024-07-24T07:39:56.000000Z",
"country_code": "DK",
"carbon_intensity_gram": 123,
"total_kg_co2_eq": 1301.51,
"status": "finalized",
"created_at": "2024-07-24T07:39:56.000000Z",
"updated_at": "2024-07-24T07:39:59.000000Z",
"group": {
"name": "Eco Friendly Company",
"slug": "eco-friendly-company"
},
"client": {
"name": "Eco-Friendly Solutions Ltd",
"organization_id": "ecofriendly-4987",
"address": "100 Enviro Way",
"address2": "Sustainability Lane 3",
"zip_code": "ECO321",
"city": "GreenVille",
"country": "Denmark",
"vat_number": "ECOF1234567"
},
"devices": [
{
"external_id": "RE8989121",
"original_manufacturer_part_number": "62B6MAT3EU",
"quantity": 10,
"brand": "Lenovo",
"model_name": "ThinkPad T480",
"category": "Notebook",
"lifetime_months": 72,
"scope_2_kg_co2_eq": 278.41,
"scope_3_kg_co2_eq": 249.27,
"total_kg_co2_eq": 527.68,
"refurbished": true,
"avoided_emissions_kg_co2_eq": 256.68
},
{
"external_id": "SM-S918BZKDEEB",
"original_manufacturer_part_number": null,
"quantity": 10,
"brand": "Samsung",
"model_name": "Galaxy S23 Ultra",
"category": "Smartphone",
"lifetime_months": 30,
"scope_2_kg_co2_eq": 31.18,
"scope_3_kg_co2_eq": 742.65,
"total_kg_co2_eq": 773.83,
"refurbished": false,
"avoided_emissions_kg_co2_eq": 0
}
],
"links": {
"self": "https://app.rejoose.com/api/v3/evoices/a6e0f0bb-0285-4a2d-b6d8-93c63543d5a9"
}
}
],
"current_page": 2,
"last_page": 4522,
"total": 4522,
"per_page": 1,
"next_page": "https://app.rejoose.com/api/v3/group/eco-friendly-company?page=3",
"previous_page": "https://app.rejoose.com/api/v3/group/eco-friendly-company?page=1"
},
"errors": null
}
Example response (404):
{
"data": null,
"errors": {
"not_found": "Group with slug company-123 not found."
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET groups e.voices
requires authentication
Retrieve a paginated list of e.voices for all groups, filtered by date and pagination options.
Example request:
curl --request GET \
--get "https://app.rejoose.com/api/v3/groups?from=2024-01-01&to=2024-12-31&page=2&per_page=20" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://app.rejoose.com/api/v3/groups"
);
const params = {
"from": "2024-01-01",
"to": "2024-12-31",
"page": "2",
"per_page": "20",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://app.rejoose.com/api/v3/groups'
params = {
'from': '2024-01-01',
'to': '2024-12-31',
'page': '2',
'per_page': '20',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()
Example response (200):
{
"data": {
"items": [
{
"external_invoice_id": "a6e0f0bb-0285-4a2d-b6d8-93c63543d5a9",
"external_invoice_date": "2024-07-24T07:39:56.000000Z",
"country_code": "DK",
"carbon_intensity_gram": 123,
"total_kg_co2_eq": 1301.51,
"status": "finalized",
"created_at": "2024-07-24T07:39:56.000000Z",
"updated_at": "2024-07-24T07:39:59.000000Z",
"group": {
"name": "Eco Friendly Company",
"slug": "eco-friendly-company"
},
"client": {
"name": "Eco-Friendly Solutions Ltd",
"organization_id": "ecofriendly-4987",
"address": "100 Enviro Way",
"address2": "Sustainability Lane 3",
"zip_code": "ECO321",
"city": "GreenVille",
"country": "Denmark",
"vat_number": "ECOF1234567"
},
"devices": [
{
"external_id": "RE8989121",
"original_manufacturer_part_number": "62B6MAT3EU",
"quantity": 10,
"brand": "Lenovo",
"model_name": "ThinkPad T480",
"category": "Notebook",
"lifetime_months": 72,
"scope_2_kg_co2_eq": 278.41,
"scope_3_kg_co2_eq": 249.27,
"total_kg_co2_eq": 527.68,
"refurbished": true,
"avoided_emissions_kg_co2_eq": 256.68
},
{
"external_id": "SM-S918BZKDEEB",
"original_manufacturer_part_number": null,
"quantity": 10,
"brand": "Samsung",
"model_name": "Galaxy S23 Ultra",
"category": "Smartphone",
"lifetime_months": 30,
"scope_2_kg_co2_eq": 31.18,
"scope_3_kg_co2_eq": 742.65,
"total_kg_co2_eq": 773.83,
"refurbished": false,
"avoided_emissions_kg_co2_eq": 0
}
],
"links": {
"self": "https://app.rejoose.com/api/v3/evoices/a6e0f0bb-0285-4a2d-b6d8-93c63543d5a9"
}
}
],
"current_page": 2,
"last_page": 4522,
"total": 4522,
"per_page": 1,
"next_page": "https://app.rejoose.com/api/v3/groups?page=3",
"previous_page": "https://app.rejoose.com/api/v3/groups?page=1"
},
"errors": null
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.