Prepared for ISO Technical Committee 207. Api Integration Spec. Draft in review.
The purpose of this document is to provide a comprehensive API integration specification for data exchange between DaedArch Corporation’s sensor-based Monitoring, Reporting, and Verification (MRV) platform and the systems operated by ISO Technical Committee 207. This integration is essential for facilitating the reporting and verification processes as outlined in ISO 14064 series standards pertaining to greenhouse gas (GHG) quantification, reporting, and verification.
The API shall enable seamless data transfer to ensure compliance with ISO 14064-1, ISO 14064-2, and ISO 14064-3 standards, thereby supporting organizations in their efforts to monitor and report their GHG emissions and reductions accurately.
DaedArch shall implement OAuth 2.0 for authentication. All API requests must include a valid access token in the Authorization header.
` Authorization: Bearer {access_token} `
Tokens shall be generated by DaedArch's Authorization Server using the following endpoint:
POST /oauth/token
`json { "grant_type": "client_credentials", "client_id": "{client_id}", "client_secret": "{client_secret}" } `
Upon successful authentication, the server shall respond with a JSON object containing the access token:
`json { "access_token": "{access_token}", "token_type": "Bearer", "expires_in": 3600 } `
The base URL for all API endpoints shall be:
` https://api.daedarch.com/v1 `
| Endpoint | Method | Description | |-------------------------------|--------|-----------------------------------------------| | /ghg-inventories | GET | Retrieve GHG inventories | | /ghg-inventories | POST | Submit GHG inventory data | | /project-reductions | GET | Retrieve project-level GHG reductions | | /project-reductions | POST | Submit project-level GHG reduction data | | /validation-verification | GET | Retrieve validation and verification reports | | /validation-verification | POST | Submit validation and verification assertions |
GET /ghg-inventories
Query Parameters
organization_id (required): Unique identifier for the organization.date_range (optional): Date range for filtering GHG inventories.Response
`json { "inventories": [ { "id": "{inventory_id}", "organization_id": "{organization_id}", "reporting_period": "{YYYY-MM-DD to YYYY-MM-DD}", "total_emissions": "{total_emissions_value}", "created_at": "{timestamp}", "updated_at": "{timestamp}" } ] } `
POST /ghg-inventories
Request Body
`json { "organization_id": "{organization_id}", "reporting_period": "{YYYY-MM-DD to YYYY-MM-DD}", "total_emissions": "{total_emissions_value}", "source_data": [ { "source": "{source_name}", "emissions": "{emissions_value}", "methodology": "{methodology_used}" } ] } `
Response
`json { "status": "success", "inventory_id": "{inventory_id}", "created_at": "{timestamp}" } `
GET /project-reductions
Query Parameters
project_id (required): Unique identifier for the project.date_range (optional): Date range for filtering reductions.Response
`json { "reductions": [ { "id": "{reduction_id}", "project_id": "{project_id}", "reduction_amount": "{reduction_value}", "methodology": "{methodology_used}", "created_at": "{timestamp}", "updated_at": "{timestamp}" } ] } `
POST /project-reductions
Request Body
`json { "project_id": "{project_id}", "reduction_amount": "{reduction_value}", "methodology": "{methodology_used}", "verification_status": "{status}" } `
Response
`json { "status": "success", "reduction_id": "{reduction_id}", "created_at": "{timestamp}" } `
GET /validation-verification
Query Parameters
organization_id (required): Unique identifier for the organization.report_id (optional): Unique identifier for a specific report.Response
`json { "reports": [ { "id": "{report_id}", "organization_id": "{organization_id}", "status": "{report_status}", "created_at": "{timestamp}", "updated_at": "{timestamp}", "findings": [ { "finding_id": "{finding_id}", "description": "{finding_description}", "recommendation": "{recommendation_text}" } ] } ] } `
POST /validation-verification
Request Body
`json { "organization_id": "{organization_id}", "report_id": "{report_id}", "validation_status": "{status}", "findings": [ { "finding_id": "{finding_id}", "description": "{finding_description}", "recommendation": "{recommendation_text}" } ] } `
Response
`json { "status": "success", "report_id": "{report_id}", "created_at": "{timestamp}" } `
| Field | Type | Description | |----------------------|----------|-----------------------------------------------| | id | String | Unique identifier for the inventory | | organization_id | String | Identifier for the organization | | reporting_period | String | Reporting period (YYYY-MM-DD to YYYY-MM-DD) | | total_emissions | Number | Total GHG emissions reported | | source_data | Array | List of source data contributing to emissions |
| Field | Type | Description | |----------------------|----------|-----------------------------------------------| | id | String | Unique identifier for the reduction | | project_id | String | Identifier for the project | | reduction_amount | Number | Amount of GHG reduction achieved | | methodology | String | Methodology used for calculating reductions |
| Field | Type | Description | |----------------------|----------|-----------------------------------------------| | id | String | Unique identifier for the report | | organization_id | String | Identifier for the organization | | status | String | Current status of the report | | findings | Array | List of findings and recommendations |
All error responses shall follow the structure outlined below:
`json { "error": { "code": "{error_code}", "message": "{error_message}", "details": "{optional_error_details}" } } `
| Code | Description | |-------------|-----------------------------------------------------| | 400 | Bad Request - The request was invalid or malformed. | | 401 | Unauthorized - Invalid or expired access token. | | 403 | Forbidden - Access denied for the requested resource.| | 404 | Not Found - The requested resource does not exist. | | 500 | Internal Server Error - An unexpected error occurred.|
DaedArch shall implement rate limiting to ensure fair use of the API and to prevent abuse. The following limits shall apply:
When a rate limit is exceeded, the API shall return a 429 Too Many Requests response with the following format:
`json { "error": { "code": 429, "message": "Rate limit exceeded. Please try again later." } } `
The response headers shall include the following fields to inform clients of their current rate limit status:
X-RateLimit-Limit: The maximum number of requests allowed in the current time window.X-RateLimit-Remaining: The number of requests remaining in the current time window.X-RateLimit-Reset: The time at which the current rate limit window resets.This API Integration Specification outlines the necessary protocols, data formats, and compliance requirements for the data exchange between DaedArch Corporation and ISO Technical Committee 207. All parties involved shall adhere to the outlined specifications to ensure compliance with ISO 14064 standards for GHG quantification, reporting, and verification.
For further inquiries or clarifications regarding this document, please contact DaedArch Corporation’s technical support team at [email protected].