MENU navbar-image

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.

Provide a CSV file: include headers for Brand, Model, Description, and External_ID/Product ID (product manufacturer part number)

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.

OBS: You can expand for more detailed information in the API docs. When you see the small black arrow, used for objects such as "⯈ client", or "⯈ devices".

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.

In sandbox mode:

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. The following headers are included in each API response to provide information about your current rate limit status:


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 – environmental invoice

This endpoint is used to generate an e.voice. The e.voice is the counterpart to the well-known financial invoice, and thus you can call the e.voice a carbon invoice. The purpose of the e.voice is to connect the financial transaction with the carbon impact. When utilizing the e.voice API to receive carbon data, you will have multiple options and use cases:

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.

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 "{
    \"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 = {
    "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 = {
    "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 (201):


{
    "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",
        "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."
}
 

Request   

POST api/v3/evoices/generate

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

external_invoice_id   string   

A unique identifier that can connect the e.voice with the invoice sent to the customer. It is recommended to use the actual invoice number stated on the customer invoice. Must be between 1 and 255 characters. Example: 123456789

external_invoice_date   string   

The date of the financial transaction. The date should use the invoicing date in ISO 8601 standard (YYYY-MM-DD). Example: 2023-09-25

country_code   string   

Country code for product delivery. This defines the use phase country, so this should represent the country where products are shipped to and used in. Should be ISO 3166-2 or ISO 3166-2:US - alpha-2 code. US states need to have the prefix "US-". This will determine the use country carbon intensity (gram CO2e per kWh) used for the e.voice. Example: GB

supplier_contact   string   

Contact email for a person or mailbox for you as the supplier to the customer. This contact email address will be visible on the e.voice. Must be between 1 and 80 characters. Example: example@rejoose.com

client   object   

Client information object. Within this client information object, are two crucial identifiers that greatly impact reporting. The organization_id, which identifies your customer on a group level, and the vat_number, which defines the company within the organization. We recommend using unique and static values for organization_id as they are utilized by the e.hub and e.insights reporting portals to group and aggregate data.

name   string   

The name of the customer as on the invoice. This line will be shown on the e.voice. Can be made anonymous by e.g., inserting a dash instead (-) or similar. Must be between 1 and 80 characters. Example: Eco-Friendly Solutions Ltd

organization_id   string   

An identifier for the client group/organization in your system. This identifier is important as it is used to aggregate reporting functions at group level for the customer with several companies in the group (VAT numbers). Must be between 1 and 240 characters. Example: company-4987

vat_number   string   

This defines the company, and as with organization_id is used for reporting purposes. We recommend this to be the VAT number but could be another unique identifier. Must be between 1 and 80 characters. Example: ECOF1234567

address   string   

The address of the customer as on the invoice. This line will be shown on the e.voice. Can be made anonymous by e.g., inserting a dash instead (-) or similar. Must be between 1 and 80 characters. Example: 100 Enviro Way

address2   string  optional  

The second line of the address of the customer as on the invoice. Must be between 1 and 80 characters. Example: Sustainability Lane 3

zip_code   string   

The zip code of the customer as on the invoice. This line will be shown on the e.voice. Can be made anonymous by e.g., inserting a dash instead (-) or similar. Must be between 1 and 80 characters. Example: ECO321

city   string   

The city of the customer as on the invoice. This line will be shown on the e.voice. Can be made anonymous by e.g., inserting a dash instead (-) or similar. Must be between 1 and 80 characters. Example: GreenVille

country   string   

The country of the customer as on the invoice. This line will be shown on the e.voice. Can be made anonymous by e.g., inserting a dash instead (-) or similar. Must be between 1 and 80 characters. Example: Denmark

country_code   string   

The country code of the customer as on the invoice. Should be ISO 3166-2 or ISO 3166-2:US - alpha-2 code. Example: DK

devices   object[]   

This is the list of devices and products from the invoice sent to the customer (Array of device objects).

external_id   string   

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   string  optional  

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   integer   

The number of units sold. This should match the invoiced item line quantity. Must be at least 1. Example: 10

category   string   

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   string   

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   string   

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   boolean  optional  

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

lifetime_months   integer  optional  

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 at least 1. Example: 48

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": "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",
        "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 (404):


{
    "errors": "Evoice with external_invoice_id 3.1415926535 not found"
}
 

Request   

GET api/v3/evoices/{external_invoice_id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

external_invoice_id   string   

The external_invoice_id of the e.voice. Example: 123456789

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:

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."
}
 

Request   

POST api/v3/evoices/circularity/generate

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

external_doc_id   string   

A unique identifier linking the e.voice circularity to the associated document, such as a purchase order or credit note. This may also refer to any other unique identifier. Must not exceed 255 characters. Example: 123456789.

external_doc_date   string   

The date of the document, such as a purchase order or credit note, following the invoicing date in ISO 8601 format (YYYY-MM-DD). Must be a valid date. Example: 2023-09-25.

e_waste_kg   integer  optional  

Weight of recycled electronics in kilograms, used for calculating the carbon emissions related to e-waste. Must be a minimum of 0. Example: 10

country_code   string   

The country code from which the products are sent, following the ISO 3166-2 or ISO 3166-2 alpha-2 standard. US states must include the 'US-' prefix. Example: GB.

supplier_contact   string   

Supplier contact email address, visible to the customer on the e.voice circularity. This can be a person or a general mailbox. Must be between 1 and 80 characters. Example: example@rejoose.com.

client   object   

Client information object. Within this client information object, are two crucial identifiers that greatly impact reporting. The organization_id, which identifies your customer on a group level, and the vat_number, which defines the company within the organization. We recommend using unique and static values for organization_id as they are utilized by the e.hub and e.insights reporting portals to group and aggregate data.

name   string   

The name of the customer as on the invoice. This line will be shown on the e.voice circularity. Can be made anonymous by e.g., inserting a dash instead (-) or similar. Must be between 1 and 80 characters. Example: Eco-Friendly Solutions Ltd

organization_id   string   

An identifier for the client group/organization in your system. This identifier is important as it is used to aggregate reporting functions at group level for the customer with several companies in the group (VAT numbers). Must be between 1 and 240 characters. Example: company-4987

vat_number   string   

This defines the company, and as with organization_id is used for reporting purposes. We recommend this to be the VAT number but could be another unique identifier. Must be between 1 and 80 characters. Example: ECOF1234567

address   string   

The address of the customer as on the invoice. This line will be shown on the e.voice circularity. Can be made anonymous by e.g., inserting a dash instead (-) or similar. Must be between 1 and 80 characters. Example: 100 Enviro Way

address2   string  optional  

The second line of the address of the customer as on the invoice. Must be between 1 and 80 characters. Example: Sustainability Lane 3

zip_code   string   

The zip code of the customer as on the invoice. This line will be shown on the e.voice circularity. Can be made anonymous by e.g., inserting a dash instead (-) or similar. Must be between 1 and 80 characters. Example: ECO321

city   string   

The city of the customer as on the invoice. This line will be shown on the e.voice circularity. Can be made anonymous by e.g., inserting a dash instead (-) or similar. Must be between 1 and 80 characters. Example: GreenVille

country   string   

The country of the customer as on the invoice. This line will be shown on the e.voice circularity. Can be made anonymous by e.g., inserting a dash instead (-) or similar. Must be between 1 and 80 characters. Example: Denmark

country_code   string   

The country code of the customer as on the invoice. Should be ISO 3166-2 or ISO 3166-2:US - alpha-2 code. Example: DK

devices   object[]   

Array of devices.

external_id   string   

Provide the product's original manufacturer part number (MPN). Example: RE8989121

quantity   integer   

Number of units. Example: 10

category   string   

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   string   

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   string   

Product model name. Example: ThinkPad T480

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"
        ]
    }
}
 

Request   

GET api/v3/evoices/circularity/{external_doc_id}/pdf

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/pdf

URL Parameters

external_doc_id   string   

The external document ID. Example: ab57e0f1-2396-430c-ba5a-339d77fda792

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"
        ]
    }
}
 

Request   

GET api/v3/evoices/circularity/{external_doc_id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

external_doc_id   string   

The external document ID. Example: ab57e0f1-2396-430c-ba5a-339d77fda792

e.product

This endpoint retrieves the carbon footprint of products, typically used in e-commerce settings, quotations, and other contexts where a general carbon footprint assessment is sufficient. For more detailed reporting on a per-customer basis, consider using the e.voice API. Both solutions complement each other: e.product is ideal for pre-sales, while e.voice is suited for post-sales.

The carbon footprint is returned using the product's manufacturer part number (MPN), brand, category, and country code.

This API returns the following information:

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."
        ]
    }
}
 

Request   

GET api/v3/products

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

manufacture_part_number   string   

The unique manufacturer part number (SKU/MPN) provided by the vendor or distributor, or an internal part number. Example: 286H8AA

brand   string   

The product manufacturer's name. Used together with the MPN and category to ensure a unique data match. Example: HP Inc

category   string   

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: Docking station

country_code   string   

The ISO 3166-2 (or ISO 3166-2:US) alpha-2 code representing the country where the product is typically used. Determines the carbon intensity used in calculations. Example: DK

refurbished   integer  optional  

optional Indicates whether the product is refurbished (pre-owned). A value of 1 denotes a refurbished product. Example: 1

POST e.product

requires authentication

The POST endpoint returns the carbon footprint data of multiple products.

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\": \"officia\",
            \"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": "officia",
            "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": "officia",
            "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."
        ]
    }
}
 

Request   

POST api/v3/products

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

products   object[]   

The array of products. This array must not exceed 100 items.

manufacture_part_number   string   

The unique manufacturer part number (SKU/MPN) provided by the vendor or distributor, or an internal part number. Example: Example: officia

brand   string   

The product manufacturer's name. Used together with the MPN and category to ensure a unique data match. Example: HP Inc

category   string   

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: Docking station

country_code   string   

The ISO 3166-2 (or ISO 3166-2:US) alpha-2 code representing the country where the product is typically used. Determines the carbon intensity used in calculations. Example: DK

refurbished   boolean  optional  

optional Indicates whether the product is refurbished (pre-owned). A value of 1 denotes a refurbished product. Example: true

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.

If a date is specified, a daily changes file for that date is returned, provided the date is not in the future. Without a date, a summary file for the specified or most recent week is retrieved.

Response Details:

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"
}
 

Request   

GET api/v3/products/changes

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

date   string  optional  

Optional. The date of the changes (in format YYYY-MM-DD). Example: 2024-11-01

week_number   integer  optional  

Optional. The week number of the changes, between 1 and 52. Example: 45