> For the complete documentation index, see [llms.txt](https://docs.tryterra.co/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.tryterra.co/faq/help-topics/data-api-sdk/historical-data-and-backfill/apple-health-sdk-backfill.md).

# Why does Apple Health backfill return empty arrays?

Apple Health data lives on the device, so **historical data cannot be backfilled through the web/REST API**. The web API only returns data the mobile SDK has already retrieved and sent through.

To backfill:

{% stepper %}
{% step %}
Initialise the mobile SDK in your app.
{% endstep %}

{% step %}
**Call its data functions on-device** (`getActivity`, `getDaily`, `getSleep`) with `toWebhook=true`.
{% endstep %}
{% endstepper %}

Long ranges (even years) can be requested in a single call because the data is chunked automatically (no paging needed). Unsolicited payloads on connection are the SDK's background delivery feature.

{% hint style="info" %}
The Terra companion app does not support remote backfills via `/sdk/backfills` in its current version, but the end user can trigger a backfill of up to two weeks from within the app. There is no direct flag marking SDK-backfill payloads, but each backfill is split into 7-day chunks that share one common payload reference, which you can use as the backfill signal. See the [mobile-only sources docs](https://docs.tryterra.co/health-and-fitness-api/mobile-only-sources) for SDK setup.
{% endhint %}
