> 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/help-center/help-topics/data-api-sdk/authentication-users-and-connection-state/verify-connection-getuserid-not-checkauth.md).

# Why does getUserId return null after init?

checkAuth is deprecated and only returns a boolean with no error context.

`checkAuth` is deprecated and only returns a boolean with no error context. **To check connection status, call `initTerra()` first, then use `getUserId()`:** a string user id means connected, `null` means not connected.

If `getUserId()` returns `null` for an already-authenticated user (for example after an SDK upgrade or stale state), re-establish the local connection:

{% stepper %}
{% step %}
Call `initTerra()`.
{% endstep %}

{% step %}
Call `initConnection()` again.
{% endstep %}

{% step %}
Call `getUserId()`.
{% endstep %}
{% endstepper %}

Re-calling `initConnection()` when access is already granted does not show the permission screen again, so the user experience is unaffected.

{% hint style="info" %}
On iOS, a user ID from `getUserId()` means a Terra connection exists for the device. It does **not** mean HealthKit permissions were granted, and it can survive an app reinstall. Apple doesn't tell apps which read permissions a user granted, so check the data that arrives instead.
{% endhint %}

This validate-the-connection pattern is documented in the [mobile-only sources docs](https://docs.tryterra.co/health-and-fitness-api/mobile-only-sources).
