Connect EarthCompliance API

Errors and limits

Error format, status codes, timeouts and request limits.

Error format

Most errors come from the API and return JSON in this shape:

{
  "data": {
    "message": "Please provide at least one holding",
    "error": "Unknown error. Please contact support"
  }
}

data.message says what went wrong. data.error holds extra detail when there is any. It can be a string, an object or a list.

When the request body does not match the schema in the API reference, for example a required field is missing or a value has the wrong type, the API returns 400 with a fixed data.message and one entry per problem in data.error:

{
  "data": {
    "message": "An error occurred while processing your request",
    "error": [
      {
        "path": ".body.snapshot_at",
        "message": "should have required property 'snapshot_at'",
        "errorCode": "required.openapi.validation"
      }
    ]
  }
}

Errors raised by the gateway in front of the API use a shorter shape with a single message:

{
  "message": "Endpoint request timed out"
}

The gateway returns these for a missing or unknown API key (403, "Forbidden"), a request that takes too long (504), a request body that is too large (413) and some 429 responses. The API can also return 429 with its own body; see Limits for both shapes. A request to a path the gateway does not route, for example a mistyped path or the temperature score route, which is not yet available, gets 403 with {"message": "Missing Authentication Token"}.

Status codes

StatusMeaning
200, 201Success. Routes that compute results on the fly (sustainable investments insights, EU Taxonomy, reports, create portfolio) return 201.
400The request is invalid, or the portfolio was not found. Read data.message.
403Missing, unknown or disabled API key, no access to the data family, or too many instruments in one request.
413The request body is larger than 10 MB.
429Too many requests, or the monthly quota is used up. See Limits.
500Unexpected error. Retry once. If it persists, contact customers@connect.earth with the time of the request.
503A dependency is temporarily unavailable. Retry with backoff.
504The request took longer than 29 seconds. Send fewer holdings per request.

Limits

  • Requests per key: 10,000 requests per key per calendar month.
  • Short bursts: sending many requests in a short time is also limited.
  • Instruments per request: up to 10,000 holdings on /instruments/* routes. Above that the API returns 403 with "You can only request data for a maximum of 10000 instruments at a time." Send many ISINs in one request, up to this limit, rather than one request per ISIN.
  • Request timeout: 29 seconds at the gateway. Requests for large portfolios on computed routes (EU Taxonomy, reports) can hit this. Split them.
  • Body size: 10 MB per request.

When a limit is hit, the API returns 429. The body tells you which limit:

BodyMeaningWhat to do
{"message": "Too Many Requests"}Too many requests in a short time.Wait, then retry with backoff.
{"status": 429, "error": "Too many requests, please try again later."}Too many requests in a short time.Wait, then retry with backoff.
{"message": "Limit Exceeded"}The monthly quota for your key is used up.Do not retry. Contact customers@connect.earth.

Other 400 messages

Some requests pass the schema check and are still rejected with 400. The reason is in data.message:

data.messageCause
Snapshot date cannot be higher than actual datesnapshot_at is in a future year (POST /portfolios, DELETE /portfolios/{identifier}, POST /reports).
You are not using a valid date as snapshot parametersnapshot_at cannot be read as a date.
No data found for the given parametersPOST /taxonomy/insights found neither taxonomy data nor market values for the holdings.
Some instruments are missing required propertiesA holding sent to POST /sustainable-investments/insights or POST /taxonomy/insights has no isin, name, instrument_type or market_value, for example a cash row.

On this page