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

# Errors & limits

> JSON-RPC error format, common errors, row limits, and how fresh Search Console data is.

## Error format

Errors follow JSON-RPC 2.0. An error on `tools/call` has the form:

```json theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "error": { "code": -32000, "message": "Short description of the error." }
}
```

| Situation                                 | What you see                                                                                    |
| ----------------------------------------- | ----------------------------------------------------------------------------------------------- |
| Missing/invalid token                     | HTTP `401` with `WWW-Authenticate` → start OAuth ([Authentication](/developers/authentication)) |
| Wrong HTTP method on a connector endpoint | HTTP `405` (`Allow: GET, POST`)                                                                 |
| Unknown tool or invalid arguments         | JSON-RPC error with a descriptive `message`                                                     |
| Tool called without a subscription        | The tool is not present in `tools/list` for your account                                        |

<Tip>
  Validate arguments against the schemas in the
  [API reference](/developers/tools/gsc) before calling,
  e.g. date format `YYYY-MM-DD` and `rowLimit` within `1`–`25000`.
</Tip>

## Limits

**General (all connectors)**

* **Upstream timeout:** each upstream call is bounded at **15-20 seconds depending on
  the connector**. GSC, Uniconta, e-conomic, Dinero, Meta Ads, LinkedIn Ads and Billy
  use **15 s**; Shopify, HubSpot CMS, HubSpot Email and CVR use **20 s**. A slow
  provider surfaces as an error rather than hanging.
* **Reconnect on revoke:** a revoked or invalid upstream credential surfaces as a
  "reconnect required" error; reconnect the connector in the portal.

**Google Search Console**

* **Rows per request:** up to **25,000** (`limit` / `rowLimit`).
* **Pagination:** use `startRow` in `search_analytics_query` to fetch further.
* **Dates:** always `YYYY-MM-DD`.
* **Properties:** you can only reach properties your authorized Google account
  already has access to. Use `list_sites` to see them.

**e-conomic**

* **Page size:** list tools take `pagesize` (default 20, **max 1000**) and
  `skippages`; not every list tool accepts `filter`/`sort`. See the
  [e-conomic reference](/developers/tools/economic).

**Dinero**

* **Rate limit:** Dinero allows about **100 requests per minute per organisation**.
  A `429` is retried once, then surfaces as `DineroRateLimitError`.
* **Dinero Pro required:** the public API only works for organisations on Dinero Pro.
  A non-Pro organisation returns `403` on every call except `list_organizations` and
  `validate_connection` (both only enumerate organisations, so they work without Pro);
  the connector surfaces the `403` as `DineroProRequiredError`.
* **Deprecated endpoint:** an HTTP `480` from Dinero signals a deprecated endpoint
  about to be removed and surfaces as `DineroApiError`. `4xx` responses are never
  retried. See the [Dinero reference](/developers/tools/dinero).

<Note>
  `rowLimit` and `dataState` below are **Google Search Console-specific** and
  do not apply to the accounting connectors.
</Note>

## Data freshness (Google Search Console)

Search Console data is not real-time. The most recent days may be incomplete or
missing because Google is still collecting them.

* Expect a delay of a couple of days on the newest numbers.
* In `search_analytics_query` you can control this with `dataState`:
  * `final`: only fully collected data.
  * `all`: includes preliminary (fresh but unstable) data.

<Note>
  Empty numbers usually mean the period has no data yet, or the selected property
  has no traffic in the range (not necessarily an error).
</Note>
