gtable
gtable.appOpen the Studio
REST APIErrors

Errors and limits

Stable error codes to switch on, why 402 and 429 differ, what an error never contains, and the rate limits that exist today.

Every failure has the same shape, on both APIs and in MCP tool results:

JSON
{ "error": { "code": "forbidden", "message": "…", "details": {} } }

Switch on code. The codes are stable across versions; the message is a sentence for a person and may be reworded.

Codes

CodeHTTPMeans
unauthenticated401No usable credential, or one from the other plane
forbidden403Your permissions or your credential’s scopes do not cover this
not_found404No such thing, or none you can see
conflict409Something changed underneath you, or an idempotency key was reused for another request
validation_failed422The request is wrong; the message names the parameter or key
rate_limited429Too many requests: wait and retry
payment_required402The plan or the credit does not allow it: waiting will not help
not_implemented501Not available on this deployment
internal500Our fault. Retry with the same Idempotency-Key

What an error never contains

The name of a field you cannot read. “You cannot read salary” tells you a field called salary exists, which is exactly what the rule was hiding. Errors name the operation, never the thing being protected, and a hidden field gets the same answer as a field that never existed.

Likewise, something you cannot reach (missing, deleted, another organisation’s) is the same 404 with the same sentence, whichever it is.

Saved, with warnings

Email, URL and phone fields keep the text you send. A suspect format still succeeds, and the response carries a warnings array (code: "suspect_format", with the record, the field and a message) for the fields you can see. Do not retry a write because it has warnings.

Invalid numbers, impossible dates, unknown choices and values over a field’s limit fail with validation_failed. Send numbers or numeric strings, and ISO dates such as 2026-09-22; timestamps must carry a timezone. A failed create batch saves none of its rows.

Why 402 and 429 differ

A rate limit is about speed and clears on its own. A spend limit is about money and does not. Conflating them would tell someone who ran out of credit to wait, and they would wait forever.

Rate limits today

  • Signing in and the OAuth endpoints are limited per address per minute and answer 429 with rate_limited beyond that.
  • /v1 and MCP, on both planes, are limited per credential (per person for a browser session): 1,200 requests a minute and 300 per 10 seconds. A request with no credential is limited per address, 600 a minute. Beyond that the answer is 429 with rate_limited and a RateLimit-Policy header describing the limit. A well-behaved client backs off and retries; with an Idempotency-Key, a retried write is safe.

Use these docs with your AI tools

An AI agent can read this documentation directly. You do not need an account or an API key. Everything here is public and read-only.

Query these docs via MCP

Recommended

Add this server to Claude, Claude Code, Cursor, Mistral, or any tool that supports MCP. Your agent can then search gtable documentation and read it in full, instead of answering from memory.

https://gtable.app/docs/mcp
  • searchFind the passages that answer a question.
  • fetchRead one page in full, as Markdown.
  • list_pagesSee every page in this documentation.

Query these docs over HTTP

The same tools also work as plain web requests. Use this for scripts, or for any tool that does not support MCP. There is one endpoint per tool. Arguments go in the query string, and the answer comes back as JSON.

https://gtable.app/docs/api/docs/search?query=custom+domain

Read the OpenAPI description. It is built from the same definitions as the tools, so it always matches what the endpoints do.

Read these docs as Markdown

Add .md to any page URL to get its Markdown source. You can also send the headerAccept: text/markdown to the page URL itself.

To read the whole documentation in one file, open llms-full.txt. For a short index of every page, open llms.txt.