Skip to content

FAQ & Troubleshooting

The app shows "Awaiting print" — where is my data?

Two usual causes:

  1. Health access. iOS never tells apps whether read access was granted — a denial looks identical to "no data". Check Health → profile → Privacy → Apps → Courier and enable the categories. (Desk → Data Source links there.)
  2. No data in Apple Health. Sleep needs a source (Apple Watch or a sleep app writing to Health); the iOS Simulator has essentially no health data — use a real device.

Why did my workout arrive without a route? / Why is a workout "waiting"?

GPS tracks often reach Apple Health a little later than the workout summary. Courier deliberately holds outdoor workouts in awaitingRoute until the track arrives rather than dispatch an incomplete record. If the route never comes (e.g. it was an indoor workout mis-detected, or the Watch didn't record one), the item moves to needs attention for you to dispatch manually.

Background dispatch isn't instant. Broken?

No — iOS throttles background delivery. Minutes to about an hour is normal; worst case it happens next time you open the app. For a guaranteed immediate send, open the app or run the Dispatch Now Shortcut. See Dispatch & Sync.

Will retries create duplicates on my server?

Not if your server honours the Idempotency-Key header (or upserts by data.id). Automatic retries and manual resends reuse the same key; deliberate "send another copy" rotates it (id#2, id#3, …). See Dispatch & Sync.

Can I use plain HTTP?

https:// is required for real endpoints (iOS App Transport Security). http://localhost / local network addresses are allowed for development.

My endpoint needs a differently shaped payload.

That's what the JavaScript transform is for — return any string or JSON structure. If you just need a couple of static fields added, plain body params on the subscriber do it without code.

Where do I see why a send failed?

Desk → Dispatch History records every attempt with HTTP status and response snippet. Transform script errors appear there too, with the script's error message.

Does the widget update in real time?

It updates whenever the app reads or dispatches data (including background syncs), plus a 30-minute fallback. Stale? Open the app once. See Widgets.

Is my data in any cloud?

Not by Courier's doing. No account, no developer server, no CloudKit. The only network destinations are the endpoints you configured (and, if you opted in, a transcription service). See the Privacy Policy.

How do I move to a new iPhone?

Desk → Config Backup → export on the old phone, import on the new one, then re-enter each subscriber's secret (secrets never leave the Keychain). Annotations can be exported as JSON from the notes archive.

Something else is wrong.

Open an issue with the app version from the Desk footer: github.com/Xheldon/Export-Data-From-Apple/issues.

Printed at home · © 2026 Xheldon