# Troubleshooting

What you're seeing, why it's happening, and how to fix it — grouped by area.

***

## Sign-in

### "Invalid credentials" even though my password is right

| What's happening                        | Try this                                                                  |
| --------------------------------------- | ------------------------------------------------------------------------- |
| Hidden whitespace in the email          | Re-type it, don't paste                                                   |
| Account doesn't exist (typo on sign-up) | Use the email you signed up with; if uncertain, click **Forgot password** |
| Account uses SSO only                   | Click the Microsoft or Google button instead of typing a password         |

### Reset password link doesn't work

Reset links expire after 30 minutes and can be used only once. Request a new one.

### SSO button (Microsoft / Google) doesn't appear

Your workspace administrator hasn't enabled it. See [Single Sign-On](/getting-started/single-sign-on.md).

### "redirect\_uri\_mismatch" after consent in Microsoft / Google

The callback URL configured in your identity provider doesn't match Finora's. Tell your administrator — it's a one-line fix.

### "Session expired" repeatedly within 7 days

Could mean someone — possibly you — used **Revoke all sessions** on the Security tab. Sign in fresh and check **Settings → Security** for active sessions.

***

## Connecting providers

### "Validation failed" when saving an OpenAI / Anthropic / Cursor key

Most common reasons:

* **OpenAI** — you pasted a project key (`sk-...`) instead of an Admin key (`sk-admin-...`). Re-issue from **Settings → Organization → Admin keys**.
* **Anthropic** — you pasted a project API key (`sk-ant-api...`) instead of an Admin key (`sk-ant-admin01-...`). Re-issue from **Settings → Admin Keys**.
* **Cursor** — you're not a team admin, the key was revoked, or whitespace was copied along with the key.
* **All providers** — the key was rotated or revoked on the provider's side after your previous save.

### AWS save fails with "AccessDenied"

* **Cost Explorer not enabled.** Open the AWS Billing console and click **Cost Explorer → Launch**. Activation can take up to 24 hours.
* **Policy attached to a group, not the user.** Re-attach `FinoraCostExplorerReadOnly` directly to the IAM user.
* **Access key for the wrong user.** Re-issue an access key for the user that has the policy.

### Azure save fails with "AuthorizationFailed"

The one-time setup hasn't been done yet, or the role assignment hasn't propagated. Wait 5 minutes and try again. If it still fails, ask your Azure admin to confirm the setup is done.

### GCP save fails with "403 Access Denied" or "Not found: Table ..."

* **403** — most often a missing **BigQuery Job User** role (Data Viewer alone isn't enough), wrong project ID, or service account in the wrong region.
* **Not found** — the Table ID is wrong. Copy it directly from BigQuery to avoid typos.

### Connection saved but no data appears

Wait one full refresh cycle before troubleshooting:

| Plan           | First data appears |
| -------------- | ------------------ |
| Trial / Growth | within 24 hours    |
| Scale          | within 1 hour      |
| Enterprise     | within 15 minutes  |

Then check **Settings → API Keys** — if the provider row shows "needs attention," your credential failed re-validation. Re-issue and re-paste.

For GCP specifically, freshly enabled billing exports take up to 24 hours to populate; a successful save against an empty table is normal.

***

## Charts & data

### Overview is empty, but I have connected providers

* The first refresh hasn't run yet (see above).
* The provider integration is in "needs attention" state.
* Your timeframe selector is set to a window before any data was pulled in. Try **Last 30 days** or **Year to date**.

### Costs in Finora differ from the provider's own console

A few hours of difference are normal — providers finalize their billing data on different schedules:

* **Anthropic** — today's cost finalizes after the day closes (UTC); yesterday's reconciles within 24 hours
* **AWS** — Cost Explorer can lag up to 24 hours for the most recent day
* **Azure** — up to 24 hours
* **Google Cloud** — up to 24 hours
* **OpenAI** — can lag 1–6 hours behind the project console

If a multi-day discrepancy persists after the lag window, contact support with: provider, dates, expected vs. observed totals.

### KPI shows NaN or Infinity

Divide-by-zero in a custom formula. Guard with a sentinel:

```
total_inferences > 0 ? total_cost / total_inferences : 0
```

### Forecast says "Low confidence"

You have less than 30 days of history, or recent volatility is high. The forecast still gives you direction but shouldn't drive a tight finance plan. Wait for more history to accumulate.

### Anomalies widget says "All clear" but I see a spike

The detector requires **both** at least 50% above the 7-day average **and** an absolute spike of at least $50. Common reasons your spike isn't flagged:

* Spike below $50
* The 7-day average was already elevated (no relative jump)
* Less than 7 days of provider history

See [Alerts & anomalies](/core-features/alerts-and-anomalies.md) for the full method.

***

## Notifications

### Email not arriving

| What's happening  | Try this                                                                   |
| ----------------- | -------------------------------------------------------------------------- |
| Caught by spam    | Whitelist `donotreply@finora.services`                                     |
| Wrong destination | Update in **Settings → Alert Notifications** (separate from sign-in email) |
| Category muted    | Check the per-category checkboxes in Alert Notifications                   |

### Slack test message succeeds but real alerts don't post

Check the per-category toggles in **Settings → Alert Notifications** — Slack delivery may be muted for that category.

### Slack toggle is greyed out

You're on Trial or Growth. Slack requires Scale or above.

### Slack webhook returns an error

The webhook URL is stale or the Slack app was reinstalled. Re-create the webhook in your Slack apps directory and update Finora.

***

## Reports & exports

### PDF generation timeout

Large reports — for example, 365 days on a high-volume account — can take up to 2 minutes. If a generation exceeds 2 minutes, retry with a smaller window or split into two reports.

### CSV download stalls in the browser

Standard and FOCUS exports stream — for very large windows, the file may take several minutes to fully download. Don't close the tab until it completes.

### CSV shows wrong characters in Excel

Finora emits UTF-8. Excel for Windows handles this automatically. Excel for Mac sometimes doesn't — open via **Data → Get Data → From Text/CSV** and explicitly select UTF-8 encoding.

***

## Performance

### Overview page loads slowly

Usually caused by lots of tagged events on a long timeframe. Workarounds:

* Narrow the timeframe (last 30 days instead of YTD)
* Filter to one provider while drilling in
* Build a custom dashboard with smaller, focused widgets

### "Rate limit exceeded" error

You've hit per-route limits. Wait the duration shown in the retry hint and try again. If you see this on normal usage, contact support — limits can be tuned on Enterprise.

***

## Still stuck?

Email [**support@finora.services**](mailto:support@finora.services) with:

1. The page or feature where the issue is happening
2. Approximate timestamp (so we can find the relevant log entries)
3. Provider involved (if applicable)
4. Any error message text exactly as displayed

We aim to acknowledge within 24 hours and resolve most issues within three business days.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.finora.services/reference/troubleshooting.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
