Airtable upsert with fieldsToMergeOn: one row per Sume job id

Airtable's performUpsert merges on 1-3 fields. Merge on a Sume job_id field so webhook retries update one row instead of creating duplicates.

5 min readSume
All posts

Yes: Airtable's update-records endpoint supports performUpsert, which matches on fieldsToMergeOn and updates the one matching record or creates a new one (Airtable API, read 2026-10-02). Put the Sume job_id in a text field and merge on it, and a retried Sume webhook updates the same row instead of adding a duplicate.

How performUpsert behaves

The failure on multiple matches matters here: if two rows already share a job id, the write-back fails loudly instead of picking one.

Airtable upsert rules (read 2026-10-02)
RuleWhat the page says
Merge fields1 to 3 field names or IDs in fieldsToMergeOn
Unsupported field typesComputed fields such as formulas, lookups, rollups
Supported typesNumber, text, long text, single select, multiple select, date
No matchA new record is created
One matchThat record is updated
More than one matchThe request fails
ResponseAdds createdRecords and updatedRecords arrays

Why Sume needs it

Sume retries a job webhook when your endpoint returns non-2xx or times out (up to 10 attempts in total). The docs say to treat job_id as the idempotency key on your side. An upsert keyed on that id is the Airtable form of that advice.

A Redeliver call, POST /v1/jobs/{job_id}/webhook/redeliver, re-sends the real terminal event with a fresh timestamp and signature. With an upsert, that second delivery just rewrites the same row.

Setup

  • Add a single-line text field such as sume_job_id. Do not make it a formula or lookup.
  • On submit, store the job id returned in the first response, since every Sume mode returns the id immediately.
  • On the webhook, verify the signature first, then send an upsert with fieldsToMergeOn: ["sume_job_id"] and the result URL and status as fields.
  • Use typecast only if you need Airtable to convert strings; it is off by default on Airtable's side.

Limits to remember

Airtable says it may throttle upserts differently from standard requests, so keep your write rate conservative. And an upsert only protects Airtable: it does not stop a duplicate paid submit. For that, send an Idempotency-Key on the Sume submit and reuse it only for exact retries.

Sources

Related posts

More in Integrations

All Integrations posts

Written by Sume