> ## Documentation Index
> Fetch the complete documentation index at: https://docs.expira.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Troubleshooting integrations

> Fix Expira integration sync problems: partial syncs, skipped types, rejected tokens, unreachable hosts and blocked URLs.

Each integration card shows when it last synced. After **Sync**, it shows the result for a few seconds.

If the last run failed, the card turns red: **Last sync failed** with the error, and when it last synced successfully. Expira retries every day.

Organisation owners and admins get **one email** when an integration starts failing. They're emailed again only if it recovers and later fails again.

## Sync results

| Message | Meaning |
| - | - |
| Sync complete — 3 new, 1 updated, 0 removed assets. | Everything worked. |
| Sync complete — no changes. | Everything worked and nothing changed. |
| … — partial sync: … | Some categories failed. Assets in a category that failed are kept, never removed. The first two errors are shown, then "(+N more)". |
| Skipped (the IAM policy does not allow it): … | AWS only. The policy doesn't allow those services. See [AWS](https://docs.expira.dev/integrations/aws.md#skipped-types). |

"Last synced" only updates after a sync with no errors, so an old date or **Never** next to a red error means the runs since then have failed.

## Rejected credentials

* **AWS:** a mistyped, deactivated or deleted access key fails the whole sync. Check the key ID, and paste the secret again under **Edit**.
* **GitLab:** "GitLab rejected the access token (HTTP 401) — it is invalid, expired or revoked." Create a new token and paste it under **Edit**.
* **GitHub token:** if the token expired or was revoked, paste a new one under **Edit**.
* **GitHub App:** "not found" or "forbidden" for an organisation means the app isn't installed there, or lacks the **Personal access tokens** permission.

## Host not reachable

GitHub Enterprise Server and self-managed GitLab must be reachable from the public internet over `https`, because Expira runs in the cloud. An instance that only resolves on a VPN, an office network or a local hosts file can't be synced.

When you save a URL, Expira refuses addresses it can't use:

| Message | Fix |
| - | - |
| Only HTTPS base URLs are allowed | Use `https://`. |
| Base URL must not point to a local or private network address | Use the instance's public address. |
| Base URL must resolve to public network addresses | The hostname doesn't resolve publicly. Check the DNS record. |

Expira also refuses redirects, so use the instance's final address, not one that redirects.

## Plan limit reached

"Plan limit reached: this plan allows up to N integrations" means you've used every [integration connection](https://docs.expira.dev/integrations/overview.md#what-counts-as-an-integration-connection) on your plan. Remove one, or upgrade under **Billing**.

## Still stuck

Email [support@unlockfuturix.com](mailto:support@unlockfuturix.com) with the integration's name and the message you see. Never send the credential itself.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.