# REST API

> Create, run and monitor Sheetgo workflows and automations from your code: authentication, quickstart, errors and all 78 endpoints.

HTML version: https://developers.sheetgo.com/api/

HTTP + JSON

## Sheetgo REST API

Create and run workflows and automations, schedule them, read forms and run results, browse connected storage, and more.

Base URL: `https://api.sheetgo.com` · Auth: `Authorization: Bearer sg_…` · 78 endpoints

**Paths include the version.** Every path in these docs is complete: append it to the base URL exactly as shown, for example `GET /rest/beta/workflows/` is `https://api.sheetgo.com/rest/beta/workflows/`. The segment after `/rest/` is the API version (today `beta`). It is part of the path and cannot be left out: `/rest/workflows/` does not exist. A later version will have its own segment (for example `/rest/v1/`); always use the path shown for the endpoint. Only the OAuth routes (`/rest/auth/…`) have no version segment. What each version promises: [versioning and deprecation](/versioning.md).

### Where the documentation is

**On this site** every endpoint is documented in full: one page per group with every parameter, request body, response and error, plus the models each page uses. Start from the [endpoint index](#api-endpoints).

[**Workflows**22 endpoints](/api/workflows.md)
[**Automations**12 endpoints](/api/automations.md)
[**Triggers**3 endpoints](/api/triggers.md)
[**Dashboards**5 endpoints](/api/dashboards.md)
[**Forms**7 endpoints](/api/forms.md)
[**Webhooks**3 endpoints](/api/webhook.md)
[**API as destination**2 endpoints](/api/api-destination.md)
[**Integrations**2 endpoints](/api/integrations.md)
[**Outlook email**5 endpoints](/api/outlook.md)
[**Gmail**5 endpoints](/api/gmail.md)
[**Files and folders**5 endpoints](/api/files.md)
[**BigQuery**5 endpoints](/api/bigquery.md)
[**OAuth**2 endpoints](/api/auth.md)
[**All models**153 request and response models](/api/models.md)
[**Guides**Rate limits, key scopes, smart tags, cell references](/api/guides.md)

**Served by the API itself** (public, no key needed):

| Page | Best for |
| --- | --- |
| [Swagger UI](https://api.sheetgo.com/rest) | People: try requests in the browser (needs JavaScript). |
| [ReDoc](https://api.sheetgo.com/rest/redoc) | People: read the reference with the guides. |
| [Reference](https://api.sheetgo.com/rest/reference) · [Markdown](https://api.sheetgo.com/rest/reference.md) | People and AI: the same content as these pages, always matching the deployed API. Add `.md` to any page for Markdown. |
| [llms.txt](https://api.sheetgo.com/rest/llms.txt) · [llms-full.txt](https://api.sheetgo.com/rest/llms-full.txt) | AI agents: an index, and everything in one file (about 450 KB). |
| [openapi.json](https://api.sheetgo.com/rest/openapi.json) | Code generators and tools: the OpenAPI 3 spec. |

### Quickstart

With `curl` below. For complete Python programs (errors and retries, pagination, create and run an automation, column letters), see [Python examples](/examples.md).

```
# 1. List your workflows
curl -s "https://api.sheetgo.com/rest/beta/workflows/?page=1&per_page=20" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"

# 2. List the automations (also called connections) of your account
curl -s "https://api.sheetgo.com/rest/beta/automations/" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"

# 3. Run one automation: 200 means the run was QUEUED, not finished
curl -s -X POST "https://api.sheetgo.com/rest/beta/automations/AUTOMATION_ID/run" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"

# 4. Poll its last run until "execution" is no longer "running"
curl -s "https://api.sheetgo.com/rest/beta/automations/AUTOMATION_ID/run" \
  -H "Authorization: Bearer $SHEETGO_API_KEY"
```

Before you create or replace an automation, read the [automations page](/api/automations.md) and the models it lists: the request body has many source, processor and destination types.

### Conventions

- **Lists** take `page` (from 1) and `per_page` (1-100, default 50). The response's `total` is the number of **pages**, not of items.
- **Collection URLs end with a slash** (`/rest/beta/workflows/`, `/rest/beta/automations/`). A `POST` without it is redirected.
- **Runs are asynchronous.** `POST …/run` answers `200` once the run is queued. Poll `GET …/run` for the outcome.
- **Google Sheets are on the `drive` provider.** File endpoints and automation sources use `provider: "drive"` for Google Drive and Google Sheets.
- **Columns are letters.** Fields that name a column take the spreadsheet letter (`"E"`), not the header text. `GET /rest/beta/files/{provider}/{file_id}/structure?include=columns` maps letters to headers.
- **OAuth2** (for apps acting for other Sheetgo users) is enabled on request: see the [auth group](https://api.sheetgo.com/rest/reference/auth) and [contact support](mailto:support@sheetgo.com). For your own scripts and agents, use an API key.
- **Placeholders.** Some fields accept `{{smart tags}}` (values from your data) and `{{Tab!A1}}` cell references; see the [guides](/api/guides.md).

### Errors

Read the status code first, then the body. The body shape depends on the endpoint:

| Shape | Where | Example |
| --- | --- | --- |
| `{code, detail}` | Most newer endpoints (automations, triggers, files, dashboards, sharing, BigQuery…). `code` is a stable snake\_case value to branch on; some add fields such as `reason`. | `{"code": "invalid_column", "reason": "…", "detail": "…"}` |
| `{status: 0, error, detail}` | Outlook and Gmail endpoints. | `{"status": 0, "error": "invalid_limit", "detail": "…"}` |
| `{detail: [{loc, msg, type}]}` | `422` request validation, on every endpoint. `loc` is the path to the bad field. | `{"detail": [{"loc": ["body", "name"], "msg": "Field required", "type": "missing"}]}` |
| `{code, message}` with HTTP 200 | Older create/update/run routes (the `SuccessResponse` model): `code: 1` means success. | `{"code": 1, "message": "OK"}` |

| Status | Meaning | What to do |
| --- | --- | --- |
| `401` | Missing, wrong or revoked API key. | Check the `Authorization: Bearer sg_…` header. |
| `403` | The key's scopes, your role on the workflow, or your plan do not allow this. | Read `detail`; widen the key's scope or ask the workflow owner. |
| `404` | The id does not exist or your account cannot see it. | Check the id (and the `provider` for files). |
| `409` | Conflicts with the current state (a limit reached, a circular trigger…). | Read `code`/`detail`; do not retry unchanged. |
| `412` | A required account is not connected or authorised (Outlook, OpenAI, BigQuery…). | Connect or authorise it in the Sheetgo web app, then retry. |
| `422` | The request failed validation, or breaks a rule (for example an invalid processor combination). | Fix the field named in `loc` or `code`. |
| `429` | Rate limit exceeded. | Wait `Retry-After` seconds. See [Rate Limiting](/api/guides.md#guide-rate-limiting). |
| `502` | The storage provider (Google, Microsoft, BigQuery…) failed. | Retry with backoff. |

Each operation on the group pages lists the status codes it can return.

### All endpoints

Grouped as in the reference. Each row links to the operation's full documentation on its group page.

#### Workflows & Automations

#### Workflows · 22 endpoints

A workflow is an automated process that connects your spreadsheets and files and moves data between them — on a schedule or on demand — so a task that would otherwise be manual runs by itself. It is the top-level container that holds automations, forms and triggers.

Full documentation: [Workflows](/api/workflows.md) · in the API's own docs: <https://api.sheetgo.com/rest/reference/workflows>

| Method | Path | What it does |
| --- | --- | --- |
| GET | `/rest/beta/workflows/` | [Get a paginated list of workflows](/api/workflows.md#get-rest-beta-workflows) |
| POST | `/rest/beta/workflows/` | [Create a new workflow](/api/workflows.md#post-rest-beta-workflows) |
| POST | `/rest/beta/workflows/run/{id}` | [(Obsolete) Use POST /rest/beta/workflows/{id}/run instead](/api/workflows.md#post-rest-beta-workflows-run-id) (deprecated) |
| GET | `/rest/beta/workflows/{id}` | [Get a single workflow](/api/workflows.md#get-rest-beta-workflows-id) |
| PATCH | `/rest/beta/workflows/{id}` | [Update an existing workflow](/api/workflows.md#patch-rest-beta-workflows-id) |
| DELETE | `/rest/beta/workflows/{id}` | [Archive a workflow](/api/workflows.md#delete-rest-beta-workflows-id) |
| POST | `/rest/beta/workflows/{id}/change-owner` | [Transfer workflow ownership](/api/workflows.md#post-rest-beta-workflows-id-change-owner) |
| GET | `/rest/beta/workflows/{id}/collaborators` | [List a workflow's collaborators](/api/workflows.md#get-rest-beta-workflows-id-collaborators) |
| POST | `/rest/beta/workflows/{id}/collaborators` | [Add collaborators to a workflow](/api/workflows.md#post-rest-beta-workflows-id-collaborators) |
| DELETE | `/rest/beta/workflows/{id}/collaborators` | [Remove all collaborators from a workflow](/api/workflows.md#delete-rest-beta-workflows-id-collaborators) |
| PATCH | `/rest/beta/workflows/{id}/collaborators/{email}` | [Change a collaborator's role](/api/workflows.md#patch-rest-beta-workflows-id-collaborators-email) |
| DELETE | `/rest/beta/workflows/{id}/collaborators/{email}` | [Remove a collaborator](/api/workflows.md#delete-rest-beta-workflows-id-collaborators-email) |
| GET | `/rest/beta/workflows/{id}/destinations` | [Get file destinations of all automations in a workflow](/api/workflows.md#get-rest-beta-workflows-id-destinations) |
| GET | `/rest/beta/workflows/{id}/files` | [Get file sources and destinations of all automations in a workflow](/api/workflows.md#get-rest-beta-workflows-id-files) |
| GET | `/rest/beta/workflows/{id}/general-access` | [Get a workflow's general (domain/team) access](/api/workflows.md#get-rest-beta-workflows-id-general-access) |
| PUT | `/rest/beta/workflows/{id}/general-access` | [Set a workflow's general (domain/team) access](/api/workflows.md#put-rest-beta-workflows-id-general-access) |
| DELETE | `/rest/beta/workflows/{id}/general-access` | [Revoke a workflow's general (domain/team) access](/api/workflows.md#delete-rest-beta-workflows-id-general-access) |
| POST | `/rest/beta/workflows/{id}/leave` | [Leave a shared workflow](/api/workflows.md#post-rest-beta-workflows-id-leave) |
| POST | `/rest/beta/workflows/{id}/request-access` | [Ask a workflow's owner for access](/api/workflows.md#post-rest-beta-workflows-id-request-access) |
| GET | `/rest/beta/workflows/{id}/run` | [Get a workflow's last-run status](/api/workflows.md#get-rest-beta-workflows-id-run) |
| POST | `/rest/beta/workflows/{id}/run` | [Run a single workflow](/api/workflows.md#post-rest-beta-workflows-id-run) |
| GET | `/rest/beta/workflows/{id}/sources` | [Get file sources of all automations in a workflow](/api/workflows.md#get-rest-beta-workflows-id-sources) |

#### Automations · 12 endpoints

An automation (also called a connection) is a single data transfer inside a workflow: it pulls data from one or more sources, optionally consolidates, filters or merges it, and writes the result to one or more destinations — all without manual copy-paste.

Full documentation: [Automations](/api/automations.md) · in the API's own docs: <https://api.sheetgo.com/rest/reference/automations>

| Method | Path | What it does |
| --- | --- | --- |
| GET | `/rest/beta/automations/` | [Get a paginated list of automations](/api/automations.md#get-rest-beta-automations) |
| POST | `/rest/beta/automations/` | [Create a new automation](/api/automations.md#post-rest-beta-automations) |
| POST | `/rest/beta/automations/run/{id}` | [(Obsolete) Use POST /rest/beta/automations/{id}/run instead](/api/automations.md#post-rest-beta-automations-run-id) (deprecated) |
| GET | `/rest/beta/automations/{id}` | [Get a single automation](/api/automations.md#get-rest-beta-automations-id) |
| PUT | `/rest/beta/automations/{id}` | [Replace an existing automation entirely](/api/automations.md#put-rest-beta-automations-id) |
| PATCH | `/rest/beta/automations/{id}` | [Rename an automation](/api/automations.md#patch-rest-beta-automations-id) |
| DELETE | `/rest/beta/automations/{id}` | [Archive an automation](/api/automations.md#delete-rest-beta-automations-id) |
| GET | `/rest/beta/automations/{id}/destinations` | [Get file destinations of an automation](/api/automations.md#get-rest-beta-automations-id-destinations) |
| GET | `/rest/beta/automations/{id}/files` | [Get file sources and destinations of an automation](/api/automations.md#get-rest-beta-automations-id-files) |
| GET | `/rest/beta/automations/{id}/run` | [Get an automation's last-run status](/api/automations.md#get-rest-beta-automations-id-run) |
| POST | `/rest/beta/automations/{id}/run` | [Run an automation](/api/automations.md#post-rest-beta-automations-id-run) |
| GET | `/rest/beta/automations/{id}/sources` | [Get file sources of an automation](/api/automations.md#get-rest-beta-automations-id-sources) |

#### Triggers · 3 endpoints

A trigger defines what makes a workflow run automatically, so you set it once instead of running the workflow by hand. A trigger can be a recurring schedule (e.g. every 15 minutes, or every weekday at 09:00) or the completion of another workflow (chaining one run after another). Each workflow has at most one active trigger.

Full documentation: [Triggers](/api/triggers.md) · in the API's own docs: <https://api.sheetgo.com/rest/reference/triggers>

| Method | Path | What it does |
| --- | --- | --- |
| GET | `/rest/beta/workflows/{id}/trigger` | [Get a workflow's automation trigger](/api/triggers.md#get-rest-beta-workflows-id-trigger) |
| PUT | `/rest/beta/workflows/{id}/trigger` | [Set or replace a workflow's automation trigger](/api/triggers.md#put-rest-beta-workflows-id-trigger) |
| DELETE | `/rest/beta/workflows/{id}/trigger` | [Turn off a workflow's automation trigger](/api/triggers.md#delete-rest-beta-workflows-id-trigger) |

#### Dashboards · 5 endpoints

Dashboards turn a workflow's data into shareable visual summaries. Each workflow has a single dashboard; add indicator, table and chart-reference elements to it, read an element's live values, and publish the dashboard to get a viewer URL.

Full documentation: [Dashboards](/api/dashboards.md) · in the API's own docs: <https://api.sheetgo.com/rest/reference/dashboards>

| Method | Path | What it does |
| --- | --- | --- |
| GET | `/rest/beta/workflows/{id}/dashboard` | [Get a workflow's dashboard](/api/dashboards.md#get-rest-beta-workflows-id-dashboard) |
| POST | `/rest/beta/workflows/{id}/dashboard/elements` | [Add elements to a workflow's dashboard](/api/dashboards.md#post-rest-beta-workflows-id-dashboard-elements) |
| DELETE | `/rest/beta/workflows/{id}/dashboard/elements/{element_id}` | [Delete one dashboard element](/api/dashboards.md#delete-rest-beta-workflows-id-dashboard-elements-element-id) |
| GET | `/rest/beta/workflows/{id}/dashboard/elements/{element_id}/data` | [Read one dashboard element's current values](/api/dashboards.md#get-rest-beta-workflows-id-dashboard-elements-element-id-data) |
| PUT | `/rest/beta/workflows/{id}/dashboard/publish` | [Publish or unpublish a workflow's dashboard](/api/dashboards.md#put-rest-beta-workflows-id-dashboard-publish) |

#### Forms & Integrations

#### Forms · 7 endpoints

A Sheetgo form collects data straight into a workflow. Its fields come from your spreadsheet's columns, and every submission is appended as a new row — a simple way to feed a workflow from people instead of another system.

Full documentation: [Forms](/api/forms.md) · in the API's own docs: <https://api.sheetgo.com/rest/reference/forms>

| Method | Path | What it does |
| --- | --- | --- |
| GET | `/rest/beta/workflows/{workflow_id}/forms/` | [Get a paginated list of forms](/api/forms.md#get-rest-beta-workflows-workflow-id-forms) |
| POST | `/rest/beta/workflows/{workflow_id}/forms/` | [Create a new form](/api/forms.md#post-rest-beta-workflows-workflow-id-forms) |
| GET | `/rest/beta/workflows/{workflow_id}/forms/{form_id}` | [Get a form](/api/forms.md#get-rest-beta-workflows-workflow-id-forms-form-id) |
| PATCH | `/rest/beta/workflows/{workflow_id}/forms/{form_id}` | [Update an existing form](/api/forms.md#patch-rest-beta-workflows-workflow-id-forms-form-id) |
| DELETE | `/rest/beta/workflows/{workflow_id}/forms/{form_id}` | [Delete a form](/api/forms.md#delete-rest-beta-workflows-workflow-id-forms-form-id) |
| GET | `/rest/beta/workflows/{workflow_id}/forms/{form_id}/responses` | [Get a form's responses (paginated)](/api/forms.md#get-rest-beta-workflows-workflow-id-forms-form-id-responses) |
| HEAD | `/rest/beta/workflows/{workflow_id}/forms/{form_id}/responses` | [Inspect a form's responses metadata without downloading them](/api/forms.md#head-rest-beta-workflows-workflow-id-forms-form-id-responses) |

#### Webhooks · 3 endpoints

A webhook is a private URL that lets external systems push data into a workflow over HTTP. Your app sends a JSON payload and Sheetgo lands it in the workflow — optionally triggering a full run — with no Google APIs or OAuth to manage on your side.

Full documentation: [Webhooks](/api/webhook.md) · in the API's own docs: <https://api.sheetgo.com/rest/reference/webhook>

| Method | Path | What it does |
| --- | --- | --- |
| GET | `/rest/beta/automations/{automation_id}/webhook` | [Retrieve an automation's webhook](/api/webhook.md#get-rest-beta-automations-automation-id-webhook) |
| POST | `/rest/beta/webhook/{public_id}` | [Push values to a webhook and trigger its bound automation](/api/webhook.md#post-rest-beta-webhook-public-id) |
| GET | `/rest/beta/workflows/{workflow_id}/webhooks` | [List a workflow's webhooks](/api/webhook.md#get-rest-beta-workflows-workflow-id-webhooks) |

#### API as destination · 2 endpoints

API as a destination turns a workflow's output into a live, read-only JSON feed at a private URL. Each workflow run refreshes the data; consumers fetch it on demand with an API key, with pagination, sorting and conditional (ETag) requests.

Full documentation: [API as destination](/api/api-destination.md) · in the API's own docs: <https://api.sheetgo.com/rest/reference/api-destination>

| Method | Path | What it does |
| --- | --- | --- |
| GET | `/rest/beta/api-destination/{public_id}` | [Read data from an API-as-Destination endpoint](/api/api-destination.md#get-rest-beta-api-destination-public-id) |
| HEAD | `/rest/beta/api-destination/{public_id}` | [Inspect API-as-Destination metadata without downloading data](/api/api-destination.md#head-rest-beta-api-destination-public-id) |

#### Integrations · 2 endpoints

Integrations are pre-configured sources for third-party services — currently Shopify and QuickBooks. Instead of describing an HTTP request yourself, you pick a data source from a menu and Sheetgo supplies the URL, credentials, pagination and response parsing for the account you authorized.

Full documentation: [Integrations](/api/integrations.md) · in the API's own docs: <https://api.sheetgo.com/rest/reference/integrations>

| Method | Path | What it does |
| --- | --- | --- |
| GET | `/rest/beta/integrations` | [List integrations and connected accounts](/api/integrations.md#get-rest-beta-integrations) |
| GET | `/rest/beta/integrations/{provider}/options` | [List a provider's data sources](/api/integrations.md#get-rest-beta-integrations-provider-options) |

#### Outlook email · 5 endpoints

Integration endpoints used by the Sheetgo add-in for Microsoft Outlook to connect mailbox data to workflows.

Full documentation: [Outlook email](/api/outlook.md) · in the API's own docs: <https://api.sheetgo.com/rest/reference/outlook>

| Method | Path | What it does |
| --- | --- | --- |
| GET | `/rest/beta/outlook/messages` | [List Messages](/api/outlook.md#get-rest-beta-outlook-messages) |
| POST | `/rest/beta/outlook/messages/batch` | [Batch Messages](/api/outlook.md#post-rest-beta-outlook-messages-batch) |
| GET | `/rest/beta/outlook/messages/{message_id}` | [Get Message](/api/outlook.md#get-rest-beta-outlook-messages-message-id) |
| GET | `/rest/beta/outlook/messages/{message_id}/attachments/{attachment_id}` | [Get Attachment](/api/outlook.md#get-rest-beta-outlook-messages-message-id-attachments-attachment-id) |
| POST | `/rest/beta/outlook/send` | [Send](/api/outlook.md#post-rest-beta-outlook-send) |

#### Gmail · 5 endpoints

Read and send email through a connected Google account.

Full documentation: [Gmail](/api/gmail.md) · in the API's own docs: <https://api.sheetgo.com/rest/reference/gmail>

| Method | Path | What it does |
| --- | --- | --- |
| GET | `/rest/beta/gmail/messages` | [List Messages](/api/gmail.md#get-rest-beta-gmail-messages) |
| POST | `/rest/beta/gmail/messages/batch` | [Batch Messages](/api/gmail.md#post-rest-beta-gmail-messages-batch) |
| GET | `/rest/beta/gmail/messages/{message_id}` | [Get Message](/api/gmail.md#get-rest-beta-gmail-messages-message-id) |
| GET | `/rest/beta/gmail/messages/{message_id}/attachments/{attachment_id}` | [Get Attachment](/api/gmail.md#get-rest-beta-gmail-messages-message-id-attachments-attachment-id) |
| POST | `/rest/beta/gmail/send` | [Send](/api/gmail.md#post-rest-beta-gmail-send) |

#### Storage

#### Files and folders · 5 endpoints

Browse and search the storage providers connected to your account — Google Drive, OneDrive, SharePoint and Dropbox — to find the ids you need when building an automation.

Full documentation: [Files and folders](/api/files.md) · in the API's own docs: <https://api.sheetgo.com/rest/reference/files>

| Method | Path | What it does |
| --- | --- | --- |
| GET | `/rest/beta/files/{provider}` | [Browse a folder](/api/files.md#get-rest-beta-files-provider) |
| GET | `/rest/beta/files/{provider}/roots` | [List browsable entry points](/api/files.md#get-rest-beta-files-provider-roots) |
| GET | `/rest/beta/files/{provider}/search` | [Search files and folders by name](/api/files.md#get-rest-beta-files-provider-search) |
| GET | `/rest/beta/files/{provider}/{file_id}` | [Get one file or folder](/api/files.md#get-rest-beta-files-provider-file-id) |
| GET | `/rest/beta/files/{provider}/{file_id}/structure` | [Describe what is inside a file](/api/files.md#get-rest-beta-files-provider-file-id-structure) |

#### BigQuery · 5 endpoints

BigQuery can be both a source and a destination for an automation: read a table or a query's results into a spreadsheet, or load a spreadsheet's rows into a BigQuery table.

Full documentation: [BigQuery](/api/bigquery.md) · in the API's own docs: <https://api.sheetgo.com/rest/reference/bigquery>

| Method | Path | What it does |
| --- | --- | --- |
| GET | `/rest/beta/bigquery/projects` | [List BigQuery projects](/api/bigquery.md#get-rest-beta-bigquery-projects) |
| GET | `/rest/beta/bigquery/projects/{project}/datasets` | [List a project's datasets](/api/bigquery.md#get-rest-beta-bigquery-projects-project-datasets) |
| GET | `/rest/beta/bigquery/projects/{project}/datasets/{dataset}/tables` | [List a dataset's tables](/api/bigquery.md#get-rest-beta-bigquery-projects-project-datasets-dataset-tables) |
| GET | `/rest/beta/bigquery/projects/{project}/datasets/{dataset}/tables/{table}` | [Read one table's schema](/api/bigquery.md#get-rest-beta-bigquery-projects-project-datasets-dataset-tables-table) |
| POST | `/rest/beta/bigquery/projects/{project}/validate-query` | [Validate a query without running it](/api/bigquery.md#post-rest-beta-bigquery-projects-project-validate-query) |

#### Authentication

#### OAuth · 2 endpoints

OAuth2 authorization endpoints — exchange a Client ID / Client Secret for an access token, for developer and customer integrations. For most use cases an API key generated on your Account page is simpler (see Authentication above).

Full documentation: [OAuth](/api/auth.md) · in the API's own docs: <https://api.sheetgo.com/rest/reference/auth>

| Method | Path | What it does |
| --- | --- | --- |
| POST | `/rest/auth/refresh` | [Creates a new access token from a refresh token](/api/auth.md#post-rest-auth-refresh) |
| POST | `/rest/auth/token` | [Exchange authentication code for a access token and a refresh token](/api/auth.md#post-rest-auth-token) |

### Guides

| Guide | What it covers |
| --- | --- |
| **[Rate Limiting](/api/guides.md#guide-rate-limiting)** | To keep the platform fast and fair, the API limits how many requests each account can make in a short window. If you exceed the limit, further requests are temporarily rejected with HTTP 429 (Too Many Requests) until the window resets. Rate limits protect you too — they stop a runaway script from exhausting your account's capacity. |
| **[API Key Scopes](/api/guides.md#guide-api-key-scopes)** | Sheetgo API keys let apps, scripts, and AI agents act on your Sheetgo account. By default a key can do everything you can — read, edit, run, and delete any workflow, automation, form, and more. |
| **[Smart Tags](/api/guides.md#guide-smart-tags)** | A smart tag is a {{placeholder}} that Sheetgo replaces with a value from your data while an automation runs. They are used by the document destination — both inside the Google Docs template and in the destination's file\_name. |
| **[Cell References](/api/guides.md#guide-cell-references)** | A cell reference is a {{Tab!Ref}} placeholder you put inside an api source's request. When the automation runs, Sheetgo reads that cell from the automation's Google Sheets destination and substitutes the value before the request goes out — so the request changes as your sheet changes, with no API call needed. |
