Skip to main content

List Custom Fields

List custom-field definitions for a product checkout form, a product waitlist form, or a variant checkout override. The envelope is { items, pagination }. Items come back in order — see Order.

Default per_page is 25. A page past the last page returns empty items and the requested current_page.

An empty variant list means inherit the product checkout fields — see Collections.

Request

Live:

  • GET /products/{productId}/custom-fields
  • GET /products/{productId}/waitlist-custom-fields
  • GET /product-variants/{id}/custom-fields

Draft (same item shape; overlay collection):

  • GET /products/{productId}/draft/custom-fields
  • GET /products/{productId}/draft/waitlist-custom-fields
  • GET /products/{productId}/draft/variants/{id}/custom-fields

Path Parameters

ParameterTypeRequiredDescription
productIdstringYesProduct UUID (product-nested paths).
idstringYesVariant UUID (variant-nested paths).

Query Parameters

ParameterTypeRequiredDefaultDescription
pageintegerNo1Page number.
per_pageintegerNo25Items per page (min 1, max 100).

Example Request

curl -X GET "https://cart.easy.tools/api/v1/products/0632bef5-c308-42cd-9cba-89a7a4f722bb/custom-fields" \
-H "Authorization: Bearer YOUR_API_TOKEN"

Response

Success Response (200)

{
"items": [
{
"name": "size",
"type": "select",
"label": "Size",
"placeholder": null,
"enabled": true,
"required": true,
"order": 0,
"validation": null,
"options": [
{ "value": "s", "label": "S" },
{ "value": "m", "label": "M" }
],
"sync_easymail": false
}
],
"pagination": {
"current_page": 1,
"total_pages": 1,
"per_page": 25,
"total": 1
}
}

See Custom Field Object.

Pagination Object

FieldTypeDescription
current_pageintegerRequested page.
total_pagesintegerTotal pages (at least 1).
per_pageintegerPage size.
totalintegerTotal fields in the collection.

Error Responses

Bad Request (400)

{
"message": "Invalid product ID"
}

Returned when the path UUID is malformed.

Not Found Error (404)

{
"message": "Product with ID 0632bef5-c308-42cd-9cba-89a7a4f722bb not found"
}

Unauthorized Error (401)

{
"message": "Unauthenticated."
}

Forbidden Error (403)

{
"message": "This action is unauthorized."
}