> ## Documentation Index
> Fetch the complete documentation index at: https://docs.isometric.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Introduction

> OpenAPI-based REST APIs for Isometric Certify and Registry services with authentication, endpoints, and integration examples

Welcome to the documentation for the Isometric Certify and Registry API services.

This reference covers what you need to know to integrate with the Certify and Registry APIs. For product user guides, please review the [Isometric Platform documentation](/user-guides/introduction).

## Our APIs

Isometric's APIs are [OpenAPI](https://en.wikipedia.org/wiki/OpenAPI_Specification)-based. This documentation covers the available API endpoints, including usage examples, and instructions around concepts such as authentication and error handling.

We provide APIs for both of our products:

<CardGroup cols={2}>
  <Card title="Certify" icon="microscope" href="/api-reference/certify/certify-introduction">
    Submit data for Isometric verification
  </Card>

  <Card title="Registry" icon="landmark" href="/api-reference/registry/registry-introduction">
    Query, deliver and retire credits
  </Card>
</CardGroup>

Isometric does not currently publish SDKs, but we do provide OpenAPI specs for each API. You can download the specs in JSON format here:

<CardGroup cols={2}>
  <Card title="Certify API" icon="brackets-curly" horizontal href="https://api.isometric.com/mrv/v0/mrv.openapi.json" />

  <Card title="Registry API" icon="brackets-curly" horizontal href="https://api.isometric.com/registry/v0/openapi.json" />
</CardGroup>

The OpenAPI files can be used to autogenerate a client library in your language of choice, import as a collection into API testing software or generate a local copy of the API documentation.

## Credentials

Suppliers and MRV partners with a Certify account or buyers with a Registry account can manage API credentials via the Team Settings menu.

Other organization types, such as market intelligence platforms, academic bodies or NGOs, may [request access to our APIs via this form](https://isometric.com/partner-with-isometric).

## Environments

The Production API is hosted at:

```
https://api.isometric.com/
```

There is also a Sandbox environment available at:

```
https://api.sandbox.isometric.com/
```

<Info>
  Accounts and API credentials are independent across the two environments.
  Please ensure you are using the correct credentials and endpoints for the
  environment you are building against.
</Info>

## API introduction

<CardGroup cols={2}>
  <Card title="Authentication" icon="key" href="/api-reference/authentication">
    Learn how to authenticate requests to our API services
  </Card>

  <Card title="Standards" icon="clipboard" href="/api-reference/standards">
    Review common standards used across our APIs
  </Card>
</CardGroup>

## Rate limits

Our Production and Sandbox environments run on infrastructure that scales according to request load,
however steep increases in request rate may trigger `429` responses.

API integrations should implement exponential backoff strategies if rate limits are triggered. A
conservative rate limit that should avoid triggering `429` responses is around 120 requests per
minute.

## Sending your first request

Once you have your API keys, you can start sending requests to the Isometric API. An example query to [get all projects](/api-reference/registry/projects) would look like this:

<CodeGroup>
  ```bash bash theme={null}
  curl --request GET \
    --url https://api.sandbox.isometric.com/registry/v0/projects \
    --header 'Authorization: Bearer <token>' \
    --header 'x-client-secret: <x-client-secret>'
  ```

  ```python Python theme={null}
  import requests

  url = "https://api.sandbox.isometric.com/registry/v0/projects"

  headers = {
  "x-client-secret": "<x-client-secret>",
  "Authorization": "Bearer <token>"
  }

  response = requests.request("GET", url, headers=headers)

  print(response.text)

  ```

  ```js JavaScript theme={null}
  const options = {
    method: 'GET',
    headers: {'x-client-secret': '<x-client-secret>', Authorization: 'Bearer <token>'}
  };

  fetch('https://api.sandbox.isometric.com/registry/v0/projects', options)
    .then(response => response.json())
    .then(response => console.log(response))
    .catch(err => console.error(err));
  ```

  ```PHP PHP theme={null}
  <?php

  $curl = curl_init();

  curl_setopt_array($curl, [
  CURLOPT_URL => "https://api.sandbox.isometric.com/registry/v0/projects",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
  "Authorization: Bearer <token>",
  "x-client-secret: <x-client-secret>"
  ],
  ]);

  $response = curl_exec($curl);
  $err = curl_error($curl);

  curl_close($curl);

  if ($err) {
  echo "cURL Error #:" . $err;
  } else {
  echo $response;
  }
  ```

  ```go Go theme={null}
  package main

  import (
  	"fmt"
  	"net/http"
  	"io/ioutil"
  )

  func main() {

  	url := "https://api.sandbox.isometric.com/registry/v0/projects"

  	req, _ := http.NewRequest("GET", url, nil)

  	req.Header.Add("x-client-secret", "<x-client-secret>")
  	req.Header.Add("Authorization", "Bearer <token>")

  	res, _ := http.DefaultClient.Do(req)

  	defer res.Body.Close()
  	body, _ := ioutil.ReadAll(res.Body)

  	fmt.Println(res)
  	fmt.Println(string(body))

  }
  ```

  ```Java Java theme={null}
  HttpResponse<String> response = Unirest.get("https://api.sandbox.isometric.com/registry/v0/projects")
    .header("x-client-secret", "<x-client-secret>")
    .header("Authorization", "Bearer <token>")
    .asString();
  ```
</CodeGroup>

## Terms of usage

All API users must abide by Isometric's [Terms and Conditions](https://drive.google.com/file/d/1yY8SDjKOVAdI5LRKKIc0rXF0xrEcfTMv/view?usp=sharing).
