Connecting Data Sources
Data Integrations let you connect AlchemOS Positive to the systems that already hold your activity data, so that emission entries are populated automatically instead of requiring manual input.
Supported integration types
| Type | Examples |
|---|---|
| Energy meters / BMS | Automated meter reading (AMR) feeds, MODBUS/BACnet via IoT gateway |
| Accounting software | Xero, QuickBooks, Sage, NetSuite |
| ERP systems | SAP S/4HANA, Microsoft Dynamics 365 |
| Travel management | Concur, TravelPerk, Egencia |
| Fleet telematics | Fleet Complete, Verizon Connect, Geotab |
| Utility billing | Utility API, Urjanet |
| Custom REST API | Any system able to send HTTP POST webhooks |
| SFTP / file drop | Automated CSV delivery from legacy systems |
Adding a connection
- Go to Settings → Integrations → Add Integration
- Search for your system by name or scroll the catalogue
- Click the connector tile
- Follow the connector-specific authentication flow:
OAuth connectors (Xero, QuickBooks)
- Click Connect with — opens OAuth consent screen
- Approve access in the provider's portal
- Return is automatic; the connection is confirmed immediately
API key connectors (Utility API, Fleet systems)
- Enter the API key and any required base URL
- Click Test Connection — AlchemOS Positive makes a test call and confirms access
- Save
SFTP connectors
- AlchemOS Positive provides a dedicated SFTP host, port and path for your account
- Provide the public SSH key from the integration settings page to your IT team
- Your system deposits CSV files in the agreed format on the SFTP path
Webhook receivers
- AlchemOS Positive generates a unique inbound URL in the format
https://api.alchemos.io/webhooks/inbound/{token} - Copy the URL into your source system's outbound webhook config
- Configure the payload format (AlchemOS JSON schema or custom field mapping)
Field mapping
After authenticating, configure the field mapping that translates source data fields into AlchemOS Positive emission entry fields:
| Source field | Maps to | Notes |
|---|---|---|
| Amount / quantity | quantity |
Numeric; strip currency symbols if needed |
| Unit | unit |
Auto-normalised to supported units |
| Date | period_start, period_end |
Can map to single date (point-in-time) |
| Site / location code | location |
Matched to location list; unmatched routed to unmapped queue |
| Category code | category |
Conditional logic supported (e.g., if GL code = 5100 → natural_gas) |
Use the Transform column for simple expressions:
quantity = source.quantity * 1000 // convert MWh to kWh
unit = "kwh"
Testing a connection
Before going live, use Test with sample data to send a test payload and review the parsed entries in a preview table. Confirms:
- Authentication is working
- Field mapping produces expected entries
- No validation errors
Connection status
Go to Settings → Integrations to see all connections and their current status:
| Status | Meaning |
|---|---|
| Active | Connected and syncing |
| Auth Error | Credentials expired or revoked — reauthenticate |
| Mapping Error | Recent data has unmapped fields — update the field map |
| Paused | Manually paused; no data flowing |
| Disabled | Permanently disabled (data flow stopped) |