Reference
List datasets
GET /v1/datasets. Every dataset with owner, source, licence, refresh, residency, regulator, warranty and credits per record.
GET /v1/datasets
Every dataset with owner, source, licence, refresh, residency, regulator, warranty and credits per record. v2.0 serves uk_contacts; the others are listed with their status.
| Property | Value |
|---|---|
| Endpoint | GET https://mydatahub.emailmovers.com/v1/datasets |
| Operation id | listDatasets |
| Cost | Free (0 credits) |
| Access | No account, key or token needed. |
| Tag | Catalogue |
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
curl "https://mydatahub.emailmovers.com/v1/datasets"Responses
200: A page of datasets.
Headers: RateLimit, RateLimit-Policy.
| Member | Type | Always present | Description |
|---|---|---|---|
data | array of Dataset | yes | |
data[].id | enum: uk_contacts, ie_contacts, global_contacts | yes | The dataset an audience draws from. uk_contacts is live; ie_contacts and global_contacts are listed but not yet served. |
data[].name | string | yes | |
data[].status | enum: live, planned, through_our_team | yes | live is served; planned is not yet served; through_our_team is sold through the bespoke service only. |
data[].owner | string | yes | |
data[].source | string | yes | |
data[].licence | string | yes | |
data[].refresh | string | yes | |
data[].residency | string | yes | |
data[].regulator | string | yes | |
data[].warranty | string | yes | |
data[].credits_per_record | number (0 or more) | yes | 1 for owned UK and Irish data. |
data[].credits_status | enum: confirmed, proposed | yes | |
data[].current_version | string or null | yes | |
data[].versions_available | integer (0 or more) | yes | Immutable weekly versions still queryable (the last 52). |
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
{
"data": [
{
"id": "uk_contacts",
"name": "UK contacts",
"status": "live",
"owner": "Emailmovers Ltd",
"source": "Emailmovers research; Companies House (OGL v3.0); ONSPD (OGL v3.0)",
"licence": "12 month multi-use licence; resale prohibited",
"refresh": "Immutable weekly build every Monday; same-day suppression overlay",
"residency": "Held in the UK (Google Cloud London)",
"regulator": "ICO",
"warranty": "Replacement when hard bounces exceed 10 percent of an order",
"credits_per_record": 1,
"credits_status": "confirmed",
"current_version": "2026-W39",
"versions_available": 52
}
],
"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.
| Status | Problem codes | When |
|---|---|---|
| 400 | invalid-request, idempotency-key-required, unsupported-version | The request could not be read, or an Idempotency-Key is missing. |
| 422 | validation-failed, quote-required, dataset-unavailable | The request is not valid. errors lists every problem with a JSON pointer and did_you_mean. |
| 429 | rate-limited | Too many requests. Wait for Retry-After. |
| Any other failure | internal-error, service-unavailable, tps-screen-expired | 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. |