# List field sets

> GET /v1/field-sets. The named bundles of fields an order can deliver, with their exact columns.

Source: https://emailmovers.com/mydatahub/docs/reference/rest/list-field-sets

`GET /v1/field-sets`

The named bundles of fields an order can deliver, with their exact columns. Every field set costs 1 credit a record: no telephone, export or API surcharge.

| Property | Value |
| --- | --- |
| Endpoint | `GET https://mydatahub.emailmovers.com/v1/field-sets` |
| Operation id | `listFieldSets` |
| Cost | Free (0 credits) |
| Access | No account, key or token needed. |
| MCP tool | [`list_field_sets`](https://emailmovers.com/mydatahub/docs/reference/mcp/list_field_sets.md) |
| Tag | Catalogue |

> **Not yet live.** MyDataHub v2 is built and tested locally and is not yet live. The v2 hosts open at launch, date to confirm. This page describes the contract the API is tested against.

## Request

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `limit` | query | integer (1 to 100) | no | Items per page, 1 to 100. Default 25. |
| `cursor` | query | string | no | An opaque cursor from next_cursor. Pass it back unchanged. |
| `MyDataHub-Version` | header | string | no | The dated API version, pinned per key when left out. Non-breaking changes ship as new dates; the path major changes only for breaking changes, with a 12 month deprecation window. |

## Example request

```bash
curl "https://mydatahub.emailmovers.com/v1/field-sets"
```

## Responses

### 200: A page of field sets.

Headers: `RateLimit`, `RateLimit-Policy`.

| Member | Type | Always present | Description |
| --- | --- | --- | --- |
| `data` | array of `FieldSet` | yes |  |
| `data[].id` | string | yes | Such as standard, standard_telephone or full. |
| `data[].name` | string | yes |  |
| `data[].description` | string | yes |  |
| `data[].credits_per_record` | number (0 or more) | yes | Every field set costs 1 credit a record. |
| `data[].columns` | array of object | yes |  |
| `has_more` | boolean | yes | Whether another page follows. |
| `next_cursor` | string or null | yes | Pass as cursor to fetch the next page; null on the last page. |

#### Example response

```json
{
  "data": [
    {
      "id": "standard",
      "name": "Standard",
      "description": "Named email, postal address and company fields with Companies House number and SIC.",
      "credits_per_record": 1,
      "columns": [
        {
          "name": "first_name",
          "description": "First name"
        },
        {
          "name": "email",
          "description": "Named business email"
        },
        {
          "name": "companies_house_number",
          "description": "Companies House number"
        }
      ]
    }
  ],
  "has_more": false,
  "next_cursor": null
}
```

## Errors

Every error is a problem object with a `code` and a `next_step`. Every response carries the `RateLimit` and `RateLimit-Policy` headers; see [Rate limits](https://emailmovers.com/mydatahub/docs/rate-limits.md).

| Status | Problem codes | When |
| --- | --- | --- |
| 400 | [`invalid-request`](https://emailmovers.com/mydatahub/docs/errors/invalid-request.md), [`idempotency-key-required`](https://emailmovers.com/mydatahub/docs/errors/idempotency-key-required.md), [`unsupported-version`](https://emailmovers.com/mydatahub/docs/errors/unsupported-version.md) | The request could not be read, or an Idempotency-Key is missing. |
| 422 | [`validation-failed`](https://emailmovers.com/mydatahub/docs/errors/validation-failed.md), [`quote-required`](https://emailmovers.com/mydatahub/docs/errors/quote-required.md), [`dataset-unavailable`](https://emailmovers.com/mydatahub/docs/errors/dataset-unavailable.md) | The request is not valid. errors lists every problem with a JSON pointer and did_you_mean. |
| 429 | [`rate-limited`](https://emailmovers.com/mydatahub/docs/errors/rate-limited.md) | Too many requests. Wait for Retry-After. |
| Any other failure | [`internal-error`](https://emailmovers.com/mydatahub/docs/errors/internal-error.md), [`service-unavailable`](https://emailmovers.com/mydatahub/docs/errors/service-unavailable.md), [`tps-screen-expired`](https://emailmovers.com/mydatahub/docs/errors/tps-screen-expired.md) | Something failed on our side (500 internal-error) or the service is briefly unavailable (503 service-unavailable, with Retry-After). Nothing was charged; retry with the same Idempotency-Key. A count, sample, quote or order with telephone in play is also refused with 503 tps-screen-expired, with no Retry-After, while the dataset version's TPS and CTPS screen is more than 28 days old. |
