Skip to main content

Send rows into a table with a webhook

A table's webhook gives other tools an address to post rows to, and this article shows where to turn it on, where to find the address, what to send and how to turn it off.

Written by Umer Ishaq

What is the difference between a webhook and an HTTP column?

Data can travel two ways.

How do I turn on a table's webhook?

  1. Open the table.

  2. In the toolbar, click the Sources button, a database icon. Its label reads "Sources — add rows to this table".

  3. Click Webhook & API. A box opens, called "Send data to your table via API". It says: "Use this endpoint to add new rows to your table."

  4. Switch on Enable webhook listening.

A table toolbar with the menu from the database button open, listing Find people at these companies, Import CSV and Webhook & API. Below the menu, a panel titled Send data to your table via API says to use this endpoint to add new rows to your table. It lists three switches, Enable webhook listening, Secure with Bearer token and Create Columns from Keys, all turned off, with no URL shown. The Enable webhook listening switch is outlined in red.

The panel has three switches: Enable webhook listening, Secure with Bearer token and Create Columns from Keys. All three are off at first. While listening is off, the panel shows no URL.

Switching listening on does not ask you to confirm. Afterwards the toolbar button reads "Sources — listening to webhooks". On the Import tab of the Add column panel, Webhook & API is marked Free.

Where is my webhook URL?

With listening on, the same panel shows Your webhook URL and API URL. Both hold the same URL. Each has a copy button. Next to Your webhook URL there is also a refresh button. Its title reads "Generate a new URL and invalidate this one".

The panel says: "No token needed — anyone with this URL can add rows to this table. Treat it like a password, and regenerate it if it leaks."

The address looks like https://app.loopster.ai/api/v1/webhooks/loopster_whk_ followed by a long secret. The secret is the credential. Do not paste a real address into a chat or a public place.

What do I send to it?

Send a POST request with a JSON body. The panel shows the format on four tabs: Multiple (the one that opens first), Single, cURL Command and TypeScript.

  • Multiple shows a JSON array of objects. Each object is keyed by a column name. The example is {"Input": "ExampleValue"}, because the table's column is called Input.

  • cURL Command shows a curl -X POST call with the header Content-Type: application/json. A tip says: "If you encounter JSON parsing errors, make sure to properly escape quotes in your payload."

  • TypeScript shows a fetch call that sends a POST and reads the answer with response.json().

The Return Type box shows what comes back:

  • On success: { success: true; insertedCount: number; rows: string[]; columnsCreated?: string[] }. The panel notes that columnsCreated is "Only included if new columns were created".

  • On failure: { success: false; error: string }.

Does it cost money?

A table's webhook can spend from your wallet when the table's Auto-run is on. The rows that arrive are then queued for processing, and that can spend. With Auto-run on, the app says: "New values in the first column will trigger the row workflow." Check Auto-run before you share the URL. See Run columns safely: Auto-run, test one row, then run the rest.

How do I turn the webhook off?

  1. In the toolbar, click Sources — listening to webhooks, then Listening to webhooks….

  2. Switch off Enable webhook listening. The text under the switch says: "Turning this off retires the URL. Anything sending to it, Clay included, will need the new one."

  3. A window asks "Turn off webhook listening?" It says: "This retires this webhook URL: it stops accepting data immediately, and anything sending to it — Clay, Zapier, your own scripts — stops working. Turning listening on again gives a new URL, and Clay will need the new one."

  4. Click Turn off and retire URL. Click Cancel to keep listening on.

If you switch listening on again later, the panel shows a new URL. Update whatever sends rows to the table.

Is this the same as API access?

No. A table's API access has its own switch. Click Table settings next to the table name. Under Integrations, the switch Enable for API says: "Let this table be read and written through the API and its webhook. Off, every request to it is refused."

The Table settings panel with the Name box, the Run settings section with Auto-run off, the collapsed Scheduled column reruns and Deduplication sections, and the open Integrations section. The Enable for API switch, shown turned on and outlined in red, has the text: Let this table be read and written through the API and its webhook. Off, every request to it is refused.

In our tests, Enable for API stayed on when webhook listening was switched off. The two switches are separate.

What does Webhook on the Home page do?

On Home, click Import data, then Webhook. A window called "Connect anything with Loopster table" opens. It says: "Use Loopster webhook connection to send data to your table." Its buttons are Cancel and Create Table. See Every way to start a table from Home.

The Home page with the Import data menu open under its card, listing Import CSV / XLSX, HubSpot Import and Webhook. Cards for Find leads, Blank Table, HeyReach Import and More sit around it. The Webhook item is outlined in red.

Troubleshooting

My webhook URL answers 404

What you see: 404 Webhook not found when a tool posts to the URL.

Why it happens: Three cases give the same answer on purpose: the secret in the URL is wrong, the table is in Trash, or webhook listening is switched off for the table. Rotating a table's address also makes the previous one stop working at once.

What to do:

  1. In the table toolbar, click the Sources button, then Webhook & API. If listening is already on, that menu item reads Listening to webhooks…. Check Enable webhook listening. If it is off, switch it on. The panel then gives you a new URL, because turning listening off retired the old one. Copy the new URL and update whatever sends rows.

  2. If listening is on, compare the URL your tool uses with Your webhook URL. The secret in the URL is the credential, so keep it private.

  3. Check that the table is not in Trash.

  4. Use POST. Any other method answers 405.

  5. If the URL is right, the table is not in Trash and listening is on, use Need Help? at the top right of any page to contact support.

My calls to this table answer 403

What you see: A 403 on a call that names this table.

Why it happens: One reason is that the table's API access is switched off. The switch Enable for API says: "Off, every request to it is refused." Another reason is that the table belongs to a different workspace than your API key. A 403 that names a role is a different case. See Troubleshoot the Loopster API and MCP.

What to do:

  1. Click Table settings next to the table name, find Integrations, and check Enable for API.

  2. Check that the key belongs to the workspace that owns the table. Open Settings, then Workspaces, and click the workspace. Its page lists its API Keys.

  3. If you cannot find the switch or cannot change it, use Need Help? at the top right of any page to contact support.

My webhook answers 429

What you see: A 429 with a Retry-After header.

Why it happens: A rate limit was reached and nothing was done. A table's webhook URL sends Retry-After only. It sends no X-RateLimit-* headers.

What to do: Wait the number of seconds in Retry-After, then send the call again.

Good to know

  • A table's webhook URL accepts only POST. Any other method gets 405.

  • The secret in the URL is the credential. Treat it like an API key. It can only add rows.

  • The URL accepts an Idempotency-Key header. If you repeat the same request with the same key within 24 hours, you get the first answer back with "replayed": true, and nothing runs or bills twice.

  • One request to the URL carries at most 25,000 rows. A larger one is refused with 413 and code: too_many_rows.

More about the API and MCP

Did this answer your question?