Skip to main content
The Apsio SDKs are the easiest way to send data, but any OpenTelemetry exporter that speaks OTLP over HTTP can send to Apsio too: a backend service, an OpenTelemetry Collector, or an SDK on a platform Apsio does not cover yet.

Endpoint

Use the per-app host when you can: it lets Apsio move an app to another region without a change on your side.

Authentication

Send the app key in the Apsio-App-Key header. App keys ship inside apps, so they are not secrets; they only route data to your project. With the OpenTelemetry environment variables:

Optional headers

Exporters that can set them should also send: Without them, data is still accepted, but a retried request may be stored twice and timestamps are stored as sent. Leave Apsio-Sent-At out only when your code does not run at send time, because the operating system sends the request for you (a background URLSession on Apple platforms): a value written earlier would shift every timestamp by the delay. Any request your code sends, including from a background job, sets it.

Responses

On a retried response, honor Retry-After in both of its forms, a number of seconds or an HTTP date: wait the longer of your backoff and that time, up to 30 minutes. Keep the same body and Apsio-Batch-Id on every retry. Error bodies are an OTLP Status with a code and a message, in the encoding of the request.

The open profile

The rules above are part of the Apsio Mobile Profile for OTLP, an open specification at spec.apsio.io. It also describes sessions, crashes and the other conventions the Apsio SDKs follow. Data you send that follows them counts in release health and issues like an SDK’s.