Bonnard

Each row gives a limit that an agent, a person or a script can reach in Bonnard: its value, and what happens at the limit.

Verified 15 Oct 2026.

Queries

These limits apply to each query that an agent or an API key runs through an app, with sql_query, render_chart or render_dashboard.

Query limits
LimitValueAt the limit
Rows that one query returns5,000 rows, unless a bulk export raises itBonnard keeps the first 5,000 rows and marks the result partial. The agent reads the warning Result hit the 5000-row ceiling and is truncated. Narrow with WHERE/GROUP BY, or page with LIMIT/OFFSET. Do not sum or average a truncated result.
Rows in the agent’s preview of a sql_query result250 rowsThe agent reads 250 rows and the warning Showing the first 250 of <n> rows. Page with LIMIT/OFFSET. Do not sum or average a truncated result. An export of the result holds all the rows.
Query time from an AI client or an API key30 secondsThe query stops with a timeout error from the database. On DuckDB / MotherDuck, Bonnard stops it with Query exceeded the 30s time limit. Narrow the query, for example with a date filter or an aggregate.
Bytes billed for one BigQuery query200 MBBigQuery does not run the query, and returns its bytes-billed error. Narrow the query so that it reads less data.
Text in one cell of a preview2 KBBonnard cuts the text and adds …[truncated; <n> bytes total]. An export keeps the full value.
Size of one reply in Claude Code48 KB. Other AI clients have no reply size limitThe agent reads fewer preview rows, with a warning that says The full set exceeds this response's size budget.
Call intent: the reason that an agent gives in the intent argument of a tool300 charactersThe call fails with <tool>: invalid arguments. and does not run. Shorten the intent. The limit applies when Track call intent is on in the app’s Settings tab, which is the default.

Exports

An agent exports a result as a CSV, CSV.GZ or PNG file with create_export_file, when the app’s Export data tool is on. For a bulk export, the agent runs sql_query with max_rows and capture_only. The result reference (resultRef) that it gets back goes to create_export_file.

Export limits
LimitValueAt the limit
Rows in a standard export5,000 rowsThe export holds the rows that the query returned.
Rows in a bulk export: sql_query with max_rows500,000 rowsBonnard uses 500,000 instead of a larger max_rows. The agent reads max_rows was clamped to this server's bulk ceiling of 500000 rows.
Result data in one export8 MB, or 256 MB for a bulk exportBonnard keeps fewer rows and marks the export partial. Select fewer columns, or split the export.
Life of a result reference or an export file30 minutesThe export fails, and the agent reads References last 30 minutes. The agent runs the query again for a new reference.

Charts and dashboards

These limits apply to the charts and dashboards that an agent renders, and to the dashboards that you build in the console at app.bonnard.ai.

Chart and dashboard limits
LimitValueAt the limit
Charts in one render_chart call10The whole call fails with render_chart: invalid arguments. Split the charts into calls of 10 or fewer.
Rows that one chart or dashboard tile plots5,000 rowsThe chart plots the first 5,000 rows. An agent also reads the row warning, with a pointer to a bulk export through sql_query.
Rows of each chart in the agent’s reply, set with preview_rows10 by default, up to 150A larger value fails the call with render_chart: invalid arguments.
Chart and KPI tiles on one dashboard16. Text tiles do not countThe save fails. The agent reads dashboard "<id>": <n> chart/KPI tiles exceeds the 16-tile cap. In the console, Chart and KPI are not available after 16 chart and KPI tiles. Split the tiles into two dashboards.
Dashboard title200 charactersThe save fails with dashboard "<id>": title is required (<=200 chars).
Dashboard description500 charactersThe save fails with dashboard "<id>": description must be a string of <=500 chars.
Dashboard ID64 characters: lowercase letters, digits, - and _. The first character is a letterThe save fails with invalid dashboard id "<id>".
Param label60 charactersThe save fails. Shorten the label.
Values in a filter menu20 when the menu opens, then 50 at a time, up to the first 550Type in the menu to find a value after the first 550.
Query time for a dashboard or chart that opens in a browser15 secondsThe query stops with a timeout error from the database. The same limit applies to previews in the dashboard editor.
Chart data in an AI client24 hours after the agent renders the chartThe chart shows “This chart’s data has expired; ask for it again.” A dashboard also shows Render again.
Requests to Draft with AI, the AI helper in the dashboard editor20 an hour for each workspaceThe console shows “Over the 20/hour draft-ai limit for this org.” The count starts again one hour after the first request.
Query time in Draft with AI15 secondsThe query stops with a timeout error from the database.

Databases

Database limits
LimitValueAt the limit
Datasets that one BigQuery service account can read100 datasetsBonnard reads no tables, and shows bigquery discovery covers at most 100 datasets and this service account can see more. Grant the service account fewer datasets.
Tables in those datasets2,000 tablesBonnard reads no tables, and shows bigquery discovery covers at most 2000 tables. Grant the service account fewer datasets.

Apps

App limits
LimitValueAt the limit
App name80 charactersThe name field stops at 80 characters. When you create an app, it also shows Names can be up to 80 characters.

Sign-in

Bonnard counts sign-in requests by email address, by company domain and by IP address. Domains of public mailbox services, for example gmail.com, have no domain limit. An HTTP 429 answer has a Retry-After header with the seconds to wait.

Sign-in limits
LimitValueAt the limit
Password sign-ins for one email address10 in 10 minutesHTTP 429 with Too many attempts. Try again later.
Password sign-ins for one company domain100 in 10 minutesHTTP 429, as for one email address.
Sign-ups for one email address3 in 1 hourHTTP 429, as for password sign-in.
Sign-ups for one company domain50 in 1 hourHTTP 429, as for password sign-in.
Email codes to one console email address3 in 10 minutes, and 10 in 24 hoursBonnard answers as if it sent the code, and sends nothing. Ask again after 10 minutes, or after 24 hours for the second limit.
Email codes to one company domain, for the console50 in 1 hourBonnard answers as if it sent the code, and sends nothing. Ask again after 1 hour.
Password reset emails3 in 15 minutes for one email address, and 30 in 1 hour for one company domainBonnard answers as if it sent the email, and sends nothing. Ask again after the time in the value column.
Code entries for one email address10 in 15 minutesHTTP 400 with That code is invalid or expired. A correct code also fails. Wait 15 minutes, then ask for a new code.
Wrong entries of one email code3The code becomes invalid. Ask for a new code.
Life of an email code10 minutesThe code becomes invalid. Ask for a new code.
Customer sign-in requests5 in 15 minutes for one email address, and 20 in 15 minutes for one IP addressBonnard sends no code and gives the same answer as for an unknown address.
Requests from one IP address10 password sign-ins, 5 sign-ups and 5 email code requests in 1 minuteHTTP 429 with a Retry-After header.
Session in a browser30 daysSign in again.

Workspace members

Members are the people in your workspace who sign in to the console.

Workspace member limits
LimitValueAt the limit
Open invitations in one workspace100Bonnard refuses more invitations.
Life of an invitation48 hoursThe invitation link expires. Send a new invitation.

AI client access

An AI client signs in to an app through OAuth, or a script connects with an API key.

Access limits for AI clients and API keys
LimitValueAt the limit
Access token15 minutesA call with an expired token gets HTTP 401 with The access token has expired. The AI client uses its refresh token to get a new one.
Refresh token30 days after sign-in. A refresh does not extend itSign in again from the AI client.
Client registrations from one IP address: an AI client registers when a person installs an app10 in 1 minuteHTTP 429 with a Retry-After header.
Token and authorisation requests from one IP address120 in 1 minuteHTTP 429 with a Retry-After header.
JSON-RPC requests in one batch100HTTP 400 with This server accepts at most 100 JSON-RPC requests in one batch; this request carried <n>.
API keys in one workspaceNo limitNone.
Life of an API keyNo expiry. A key works until an admin revokes itA revoked key gets HTTP 401 with The API key is invalid or has been revoked.

Data retention

Bonnard keeps a record of each tool call. These limits apply to the records and to a deleted workspace.

Data retention limits
LimitValueAt the limit
Content of a call record: the SQL, the error, the tool input and the tool output90 daysBonnard deletes the content. The record stays, with its call intent.
Call records13 monthsBonnard deletes the record.
Tool input in a call record4,000 charactersBonnard keeps the first 4,000 characters and adds ...[truncated].
Tool output in a call record16,000 charactersBonnard keeps the first 16,000 characters and adds ...[truncated].
A deleted workspace14 daysAfter 14 days, Bonnard deletes the workspace, everything in it and its apps. Until then, you can cancel the deletion in the console.

Billing

Tool calls from AI clients and API keys count toward the plan. Use of the console does not count. Extra usage bills the calls past the plan, up to a spend limit if an owner sets one. An owner sets it in Turn on extra usage.

Billing limits
LimitValueAt the limit
Calls in the plan, for each billing periodFree: 3,000. Team: 20,000. Scale: 100,000If extra usage is off, apps refuse calls. A member’s agent reads This workspace has used all the calls included in its plan for this billing period. An owner needs to turn on extra usage or move to a larger plan before this app can serve more calls.
Spend limit for extra usageThe amount that an owner sets in Turn on extra usageApps refuse calls until the next billing period, or until an owner raises the limit.
Extra usage with no payment methodNo calls past the planApps refuse calls past the plan until an owner adds a payment method.
Warning before the limit80% of the plan’s calls, or of the spend limitThe console shows a banner. Calls continue.
Grace period after a failed payment14 daysApps serve only the calls in the plan during the grace period. After it, apps refuse calls until an owner updates the payment method.

When an app refuses calls for billing, your customers’ agents get an error that names no plan, price or limit.