/api/v1/object/data/duplicates/{objectSlug}/{fieldSlug}List the records that share a value in one field.
List the records that share a value in one field.
Returns every record whose value in fieldSlug also appears on another
record, sorted by that value so records that share it sit together. Use it
to find the records that stop a field from requiring unique values. Works
on text, number, email, phone and WhatsApp number fields.
The response has the same shape as GET /object/data/{objectSlug}, plus
two keys on each record: duplicate_value (the shared value) and
duplicate_count (how many records hold it). duplicate_groups at the top
level counts the distinct shared values; pagination.total counts records.
The credential must be able to view all records of the object, not only its own or its group's.
Query parameters:
page— page number, from 1. Default1.limit— records per page, up to200. Default25.
Scope: read.<object slug>, for example read.contacts.
Errors:
400— no active object has that slug.400—Field with slug 'email-k2v8x1qa' not found or has no column.400— the field type does not support unique values.403— the credential lacksread.<object slug>, or cannot view all records of the object.422— a query parameter is invalid, for examplelimitis above200.
Response 200:
{
"status": 200,
"message": "Duplicate records retrieved successfully",
"data": {
"fields": [
{
"name": "name",
"slug": "name-mp9nm29v",
"label": "Name",
"type": "text",
"icon": null,
"options": null,
"is_system": true,
"api_only": false,
"field_group": null,
"required": false,
"default_value": null,
"sort_order": 0,
"is_active": true,
"filterOperators": ["includes", "multi_includes", "does_not_include", "equals", "does_not_equal", "starts_with", "ends_with", "is_empty", "is_not_empty"]
},
{
"name": "email",
"slug": "email-k2v8x1qa",
"label": "Email",
"type": "email",
"icon": null,
"options": null,
"is_system": false,
"api_only": false,
"field_group": null,
"required": false,
"default_value": null,
"sort_order": 1,
"is_active": true,
"filterOperators": ["includes", "multi_includes", "equals", "does_not_equal", "starts_with", "ends_with", "is_empty", "is_not_empty"]
}
],
"data": [
{
"name-mp9nm29v": "Sara Ali",
"assignees": [],
"email-k2v8x1qa": "sara@example.com",
"name": "Sara Ali",
"relations": {},
"slug": "9f2c4b7a1e03",
"random_id": "a3f9c21b",
"createdAt": "2026-09-14T10:00:00.000Z",
"updatedAt": "2026-09-14T10:00:00.000Z",
"position": null,
"creator": null,
"updater": null,
"linked_record": null,
"capabilities": { "can_edit": true, "can_delete": true, "can_assign": true },
"duplicate_value": "sara@example.com",
"duplicate_count": 2
},
{
"name-mp9nm29v": "Sara A.",
"assignees": [],
"email-k2v8x1qa": "sara@example.com",
"name": "Sara A.",
"relations": {},
"slug": "4d7b1e9a2c65",
"random_id": "7c01e4d9",
"createdAt": "2026-09-14T11:30:00.000Z",
"updatedAt": "2026-09-14T11:30:00.000Z",
"position": null,
"creator": null,
"updater": null,
"linked_record": null,
"capabilities": { "can_edit": true, "can_delete": true, "can_assign": true },
"duplicate_value": "sara@example.com",
"duplicate_count": 2
}
]
},
"pagination": {
"total": 2,
"page": 1,
"limit": 25,
"totalPages": 1,
"nextPage": null,
"prevPage": null
},
"duplicate_groups": 1
}
Send request
Use the documented inputs to call this endpoint directly.
Parameters
Values are applied to the request and the example on the right.
Responses
Successful response
{
"message": "string",
"data": "string",
"pagination": "string",
"duplicate_groups": 1.5
}Bad request
{
"status": 1,
"message": "string",
"code": "string",
"data": {}
}The HTTP status code of the response.
What went wrong. Several validation messages are joined with ", ".
A stable, machine-readable reason. Only some errors set it.
Extra detail about the error. Only some errors set it.
Unauthorized
{
"status": 1,
"message": "string",
"code": "string",
"data": {}
}The HTTP status code of the response.
What went wrong. Several validation messages are joined with ", ".
A stable, machine-readable reason. Only some errors set it.
Extra detail about the error. Only some errors set it.
Internal server error
{
"status": 1,
"message": "string",
"code": "string",
"data": {}
}The HTTP status code of the response.
What went wrong. Several validation messages are joined with ", ".
A stable, machine-readable reason. Only some errors set it.
Extra detail about the error. Only some errors set it.
Powered by heyo-docs