Authentication

Requests must be signed with SigV4a. Service name: execute-api, region set: *.

Headers

HeaderDescription
X-Provider-Keyaggregators only The provider name assigned during onboarding (not an API key). Required only for provider aggregators submitting on behalf of multiple providers. Single-provider integrations have this injected automatically from the onboarded account.
Content-Typerequired Must be application/json.

Request Body

FieldTypeDescription
batchIdstringrequiredA UUID uniquely identifying this batch request. Used for deduplication and support investigations.
timestampnumberoptionalEpoch milliseconds timestamp of when this batch was assembled by the client.
dataarrayrequiredThe list of telemetry payloads to submit. Each entry follows the Telemetry Payload schema.

Example Request

{
  "batchId": "550e8400-e29b-41d4-a716-446655440000",
  "timestamp": 1751989541000,
  "data": [
    {
      "payloadId": "550e8400-e29b-41d4-a716-446655440001",
      "carrier": "AZNG",
      "signalTimestamp": 1751989541000,
      "assetIdentifier": { "id": "MY-VEHICLE-01", "type": "TRACTOR", "operator": "AZNG" },
      "gps": {
        "latitude": 47.6062,
        "longitude": -122.3321,
        "speed": 88.5,
        "speedUnits": "KILOMETERS_PER_HOUR",
        "heading": 270.0,
        "inMotion": true
      }
    },
    {
      "payloadId": "550e8400-e29b-41d4-a716-446655440002",
      "carrier": "AZNG",
      "signalTimestamp": 1751989541000,
      "assetIdentifier": { "id": "MY-VEHICLE-01", "type": "TRACTOR", "operator": "AZNG" },
      "signals": [
        {
          "id": "770e8400-e29b-41d4-a716-446655440000",
          "type": "OBD_LIFETIME_ODOMETER",
          "value": "245000.5",
          "valueUnit": "KILOMETERS",
          "assetPart": "ENGINE"
        }
      ]
    }
  ]
}

Response — 200 OK

Payloads are processed independently. The response always includes a per-record breakdown — some may be accepted while others fail validation.

FieldTypeDescription
acceptedstring[]payloadIds that were accepted.
failedobject[]Payloads that failed, with per-payload error detail.
summary.totalintegerTotal payloads submitted.
summary.acceptedintegerNumber accepted.
summary.failedintegerNumber failed.
requestIdstringUnique request identifier for support.

Example Response — Partial Failure

{
  "requestId": "abc-123-def",
  "responseCode": 202,
  "accepted": ["550e8400-e29b-41d4-a716-446655440001"],
  "failed": [
    {
      "payloadId": "550e8400-e29b-41d4-a716-446655440002",
      "errorType": "Validation",
      "errorMessage": "Payload contains invalid data",
      "validationErrorDetails": [
        { "field": "gps.latitude", "message": "Field cannot be empty" }
      ]
    }
  ],
  "summary": { "total": 2, "accepted": 1, "failed": 1 }
}

Error Responses

StatusDescription
400Validation failed on the batch wrapper fields (e.g. missing batchId). Per-payload failures are returned in the 200 response body above.
403Authentication failed. Verify your SigV4a signing and that requests are signed from your registered AWS account.
500Internal error. Retry with exponential backoff. Retain data locally for back-filling.