Skip to main content
/

API Overview

The AlchemOS Positive REST API gives you programmatic access to the full platform — emission entries, reports, targets, offset credits, certificates and more.


Quick start

The fastest way to explore the API is via the interactive API Explorer or by importing the Postman collection:

Download Postman Collection — Postman Collection v2.1 with all endpoints pre-configured. Import it into Postman, set the base_url and api_key collection variables, and you're ready to go.


Base URL

https://api.alchemos.io/api/v1

All paths in this documentation are relative to this base URL unless otherwise stated.


Versioning

The current version is v1. The version is included in every URL path.

When breaking changes are introduced, a new version will be released (e.g., /api/v2) with a minimum 12-month deprecation notice for v1. Non-breaking additions (new fields, new endpoints) are made in the current version without version bumps.


Request format

All requests must include:

Content-Type: application/json
Accept: application/json
Authorization: Bearer <API_KEY>

Request bodies must be valid JSON. Arrays and objects follow standard JSON encoding.


Response format

All responses return JSON. Successful responses use HTTP 2xx status codes.

Success envelope

{
  "data": { ... },
  "meta": {
    "requestId": "req_abc123",
    "timestamp": "2024-11-01T09:00:00Z"
  }
}

Paginated list response

{
  "data": [ ... ],
  "pagination": {
    "page": 1,
    "pageSize": 50,
    "totalItems": 240,
    "totalPages": 5
  },
  "meta": { ... }
}

Error response

{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "One or more fields failed validation.",
    "details": [
      { "field": "quantity", "message": "Must be a positive number." }
    ]
  },
  "meta": { ... }
}

HTTP status codes

Code Meaning
200 OK Successful GET or PUT
201 Created Successful POST; resource created
204 No Content Successful DELETE
400 Bad Request Malformed JSON or invalid parameters
401 Unauthorized Missing or invalid API key
403 Forbidden Valid key but insufficient scope
404 Not Found Resource does not exist
409 Conflict Duplicate resource (e.g. same emission period already exists)
422 Unprocessable Entity Validation error (well-formed request but invalid business logic)
429 Too Many Requests Rate limit exceeded
500 Internal Server Error Unexpected server error; retry with back-off

Pagination

List endpoints support cursor-based pagination via query parameters:

Parameter Default Description
page 1 Page number
pageSize 50 Items per page (max 200)
sortBy createdAt Sort field
sortOrder desc asc or desc

Filtering

Most list endpoints accept filter parameters as query strings:

GET /api/v1/emissions?scope=1&periodStart=2024-01-01&periodEnd=2024-12-31

See individual endpoint documentation for supported filters.


Dates and times

  • All dates use ISO 8601 format: YYYY-MM-DD
  • All timestamps use ISO 8601 UTC: YYYY-MM-DDThh:mm:ssZ
  • The API always returns UTC. Convert to local time in your application.

Idempotency

For POST requests, supply an Idempotency-Key header (any UUID) to safely retry without creating duplicates:

Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000

The same key within a 24-hour window returns the original response without creating a new resource.


Interactive Explorer

Use the API Explorer to make live API calls from your browser with your own API key — no separate tooling needed.


Was this page helpful?