Download OpenAPI specification:Download
CFO is the OAuth issuer. This DEV pilot uses OAuth 2.0 client credentials with an opaque access token that expires in 15 minutes and has no refresh token.
Store client_secret in the ERP secret store, never place credentials in a query string, and do not share screenshots of Authorization headers. Obtain and use access tokens only from the ERP or another approved server-side integration runtime. Do not enter client secrets or access tokens into browser-based API documentation; the customer documentation is read-only.
Persistence is decided by the grant issued to the client, not by the authentication method. A client whose grant is dry-run only is rejected when it sends dry_run=false; a client whose grant allows persistence may send either value.
Submit application/x-www-form-urlencoded grant_type=client_credentials with HTTP Basic client authentication from the ERP or another approved server-side integration runtime. Never enter the client secret in browser documentation.
| grant_type required | string Value: "client_credentials" |
{- "token_type": "Bearer",
- "expires_in": 900,
- "scope": "cfo.integration.read cfo.activity_import.dry_run"
}Discover the authority, destinations, facilities, periods and capabilities granted to the client.
| facility_id required | string <uuid> |
| Idempotency-Key required | string <= 128 characters |
| schema_version required | string Value: "cfo-activity-import-v1" |
| external_batch_id required | string |
| source_system required | string |
| retention_id required | string <uuid> |
| scope required | integer Enum: 1 2 3 |
| dry_run required | boolean true validates only; false persists and requires a grant with write_mode=persist |
required | Array of objects [ 1 .. 1000 ] items |
{- "schema_version": "cfo-activity-import-v1",
- "external_batch_id": "string",
- "source_system": "string",
- "retention_id": "e7a9be08-99f5-4db8-91af-2011598cd22f",
- "scope": 1,
- "dry_run": true,
- "rows": [
- {
- "external_ref": "string",
- "document_date": "2019-08-24",
- "activity_code": "string",
- "catalog_item_code": "string",
- "quantity": 1,
- "unit": "string",
- "weight_kg": 1,
- "distance_km": 1,
- "evidence_ref": "string",
- "attributes": {
- "vehicle_ref": "string"
}
}
]
}{- "job_id": "453bd7d7-5355-4d6d-a38e-d9e7eb218c3f",
- "status": "queued",
- "phase": "queued",
- "external_batch_id": "string",
- "received_rows": 0,
- "processed_rows": 0,
- "created_rows": 0,
- "validated_rows": 0,
- "skipped_rows": 0,
- "pending_review_rows": 0,
- "failed_rows": 0,
- "submitted_at": "2019-08-24T14:15:22Z",
- "finished_at": "2019-08-24T14:15:22Z",
- "correlation_id": "string"
}| job_id required | string <uuid> |
{- "job_id": "453bd7d7-5355-4d6d-a38e-d9e7eb218c3f",
- "status": "queued",
- "phase": "queued",
- "external_batch_id": "string",
- "received_rows": 0,
- "processed_rows": 0,
- "created_rows": 0,
- "validated_rows": 0,
- "skipped_rows": 0,
- "pending_review_rows": 0,
- "failed_rows": 0,
- "submitted_at": "2019-08-24T14:15:22Z",
- "finished_at": "2019-08-24T14:15:22Z",
- "correlation_id": "string"
}| job_id required | string <uuid> |
| cursor | integer Default: 0 Pass next_cursor from the previous page. |
| limit | integer Default: 100 |
{- "items": [
- {
- "row_sequence": 0,
- "external_ref": "string",
- "weight_kg": 0,
- "distance_km": 0,
- "tkm_source": "client",
- "status": "queued",
- "calculated_tco2e": 0,
- "factor_code": "string",
- "factor_value": 0,
- "error_code": "string",
- "error_message": "string"
}
], - "next_cursor": 0,
- "has_more": true
}