---
title: "Duplicate a record"
description: "Copies the fields you can both read and write into a new record."
canonical: "https://gtable.app/docs/app-api/records/duplicate"
updated: "2026-10-05"
---

# Duplicate a record

`POST https://your-suite.gtable.app/your-app/v1/tables/{tableId}/records/{recordId}/duplicate`

Copies the fields you can both read and write into a new record.

> **Note: Generic contract**
>
> Your own version of this operation, with your tables and the fields you can read, is in
> your app's document: `https://{suite}.gtable.app/{app}/v1/openapi.json`, behind your credential.
> [Why each person gets their own](/docs/start/studio-and-runtime#why-an-app-has-an-api-of-its-own).

A field you cannot read is not carried over, the copy is made from what you can see, never from what is there, and comments and history stay with the original, because they are about that record and not about its shape.

Requires the `records:write` scope. Operation `records.duplicate`. MCP tool `records_duplicate`. CLI, once published: `gtable records duplicate`.

## Path parameters

| Name       | Type   | Required | Description |
| ---------- | ------ | -------- | ----------- |
| `tableId`  | string | yes      |             |
| `recordId` | string | yes      |             |

## Headers

| Name              | Type   | Required | Description                                                                                                                                                                                                                                                        |
| ----------------- | ------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `Idempotency-Key` | string | no       | Any unique string. Sending the same key with the same request again returns the first response (marked `Idempotency-Replayed: true`) instead of running it twice. Reusing it for a different request is refused with 409. Kept for 24 hours. Up to 255 characters. |
