EmailmoversMyDataHub docs
Browse the docs

Reference / REST reference

Reference

Get plans and prices

GET /v1/plans. Plans, credit packs, credit rules, licence terms, the guarantee and the free trial, in GBP excluding VAT.

Generated from the contractsView as Markdown

GET /v1/plans

Plans, credit packs, credit rules, licence terms, the guarantee and the free trial, in GBP excluding VAT. The same content as https://mydatahub.emailmovers.com/pricing.json. One credit buys one complete UK record at the same price in the app, API and MCP server.

PropertyValue
EndpointGET https://mydatahub.emailmovers.com/v1/plans
Operation idgetPlans
CostFree (0 credits)
AccessNo account, key or token needed.
MCP toolget_plans
TagCatalogue

Request

Parameters

NameInTypeRequiredDescription
MyDataHub-VersionheaderstringnoThe 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/plans"

Responses

200: Plans and prices.

Headers: RateLimit, RateLimit-Policy.

MemberTypeAlways presentDescription
versionstringyes
valid_fromstring (date)yes
currencyGBPyes
vat_treatmentstringyes
credit_definitionstringyes
price_scalePriceScaleyesThe per-contact scale: 1 credit buys 1 record at the rate of the band the purchase falls in. A quote's purchase options compare it with the credit pack and lead with the cheapest.
price_scale.idper_contact_scaleyes
price_scale.namestringyes
price_scale.statusenum: confirmed, proposed, to_confirmyesconfirmed is in force; proposed awaits a decision; to_confirm is a figure still being checked.
price_scale.available_toenum: everyone, new_customers, existing_customersyeseveryone; new_customers only (the subscription); existing_customers only, who keep their prices (pay as you go and the 12-month plan).
price_scale.minimum_order_recordsinteger (0 or more)yes
price_scale.rulestringyesHow a purchase is priced, in words.
price_scale.bandsarray of PriceBandyes
plansarray of Planyes
plans[].idstringyesSuch as free, pay_as_you_go or plan_12_month.
plans[].namestringyes
plans[].kindenum: free, subscription, packyes
plans[].statusenum: confirmed, proposed, to_confirmyesconfirmed is in force; proposed awaits a decision; to_confirm is a figure still being checked.
plans[].available_toenum: everyone, new_customers, existing_customersyeseveryone; new_customers only (the subscription); existing_customers only, who keep their prices (pay as you go and the 12-month plan).
plans[].price_gbp_ex_vatnumber (0 or more)yesPounds sterling excluding VAT, to two decimal places.
plans[].billing_periodenum: once, month, yearyes
plans[].contract_monthsinteger (0 or more) or nullnoThe contract's length in months, such as 12; absent when there is none.
plans[].annual_price_gbp_ex_vatnumber (0 or more) or nullno
plans[].creditsinteger (0 or more)yesCredits per billing period, or once.
plans[].per_record_gbpnumber (0 or more) or nullyesPrice per record at full use of the allowance; null for the free plan.
plans[].rollover_cap_creditsinteger (0 or more) or nullnoSubscription credits roll over while subscribed, up to this many; 0 when each period's credits are used or lost.
plans[].credits_expirebooleanyes
plans[].for_whomstringyes
plans[].notesstringno
credit_packsarray of CreditPackyes
credit_packs[].idstringyesSuch as free, pay_as_you_go or plan_12_month.
credit_packs[].namestringyes
credit_packs[].kindpackyes
credit_packs[].statusenum: confirmed, proposed, to_confirmyesconfirmed is in force; proposed awaits a decision; to_confirm is a figure still being checked.
credit_packs[].available_toenum: everyone, new_customers, existing_customersyeseveryone; new_customers only (the subscription); existing_customers only, who keep their prices (pay as you go and the 12-month plan).
credit_packs[].price_gbp_ex_vatnumber (0 or more)yesPounds sterling excluding VAT, to two decimal places.
credit_packs[].billing_periodonceyes
credit_packs[].contract_monthsinteger (0 or more) or nullnoThe contract's length in months, such as 12; absent when there is none.
credit_packs[].annual_price_gbp_ex_vatnumber (0 or more) or nullno
credit_packs[].creditsinteger (0 or more)yesCredits per billing period, or once.
credit_packs[].per_record_gbpnumber (0 or more) or nullyesPrice per record at full use of the allowance; null for the free plan.
credit_packs[].rollover_cap_creditsinteger (0 or more) or nullnoSubscription credits roll over while subscribed, up to this many; 0 when each period's credits are used or lost.
credit_packs[].credits_expirebooleanyes
credit_packs[].for_whomstringyes
credit_packs[].notesstringno
credit_rulesarray of CreditRuleyes
credit_rules[].actionstringyes
credit_rules[].labelstringyes
credit_rules[].creditsnumber (0 or more)yesCredits, to one decimal place: whole at 1 credit a record, fractional only where a rule is (0.1 company-only, 1.8 outright, both proposed).
credit_rules[].unitenum: call, record, matchyes
credit_rules[].statusenum: confirmed, proposed, to_confirmyesconfirmed is in force; proposed awaits a decision; to_confirm is a figure still being checked.
credit_rules[].notestringno
licencearray of LicenceTermsyes
licence[].licence_typeenum: multi_use_12m, outrightyesmulti_use_12m (12 month multi-use, every plan) or outright (1.8 credits a record, proposed).
licence[].statusenum: confirmed, proposedyes
licence[].credits_per_recordnumberyes
licence[].permitted_channelsarray of enum: email, telephone, postyes
licence[].reuse_monthsinteger or nullyes12 for multi_use_12m; null for outright.
licence[].resale_prohibitedbooleanyes
licence[].warranty_urlstring (uri)yes
licence[].terms_versionstringyes
guaranteeobjectyes
guarantee.currentWarrantyyesThe bounce warranty that covers delivered records, with the threshold it was issued under.
guarantee.proposedWarranty or nullyes
guarantee.refundsarray of stringyes
trialobjectyes
trial.creditsinteger (0 or more)yes
trial.card_requiredbooleanyes
trial.expiresbooleanyes
promisesarray of PricingPromiseyes
promises[].keystringyes
promises[].statementstringyes
promises[].in_practicestringyes
metersarray of MeteryesWhat agents and code are metered on, in credits, the same on every surface.
meters[].actionstringyesWhat is metered, such as record or enrich_contact.
meters[].unitenum: record, match, callyes
meters[].creditsnumber (0 or more)yesCredits per unit.
meters[].statusenum: confirmed, proposed, to_confirmyesconfirmed is in force; proposed awaits a decision; to_confirm is a figure still being checked.
action_patharray of ActionPathStepyesHow to buy: quote_order for a machine quote, create_order with a confirmation, and the top-up page when the balance is short.
action_path[].stepinteger (1 or more)yes

Showing the first 80 of 83 members. The OpenAPI document and the MCP tool list hold the full schema.

Example response

{
  "version": "2026-10",
  "valid_from": "2026-10-13",
  "currency": "GBP",
  "vat_treatment": "Prices exclude VAT at 20 percent.",
  "credit_definition": "1 credit buys 1 complete UK record, delivered once, at the per-contact scale's rate, the same in the app, API and MCP server.",
  "price_scale": {
    "id": "per_contact_scale",
    "name": "Per-contact scale",
    "status": "confirmed",
    "available_to": "everyone",
    "minimum_order_records": 0,
    "rule": "The credits bought, after any balance, pick one band, and every credit in the purchase is at its rate. A quote compares the scale with the credit pack and leads with the cheaper.",
    "bands": [
      {
        "from_records": 1,
        "to_records": 2999,
        "gbp_per_record": 0.25
      },
      {
        "from_records": 3000,
        "to_records": 9999,
        "gbp_per_record": 0.25
      },
      {
        "from_records": 10000,
        "to_records": 24999,
        "gbp_per_record": 0.22
      },
      {
        "from_records": 25000,
        "to_records": 49999,
        "gbp_per_record": 0.195
      },
      {
        "from_records": 50000,
        "to_records": null,
        "gbp_per_record": 0.17
      }
    ]
  },
  "plans": [
    {
      "id": "free",
      "name": "Free",
      "kind": "free",
      "status": "confirmed",
      "available_to": "everyone",
      "price_gbp_ex_vat": 0,
      "billing_period": "once",
      "credits": 100,
      "per_record_gbp": null,
      "credits_expire": false,
      "for_whom": "Triallists, human or agent",
      "notes": "No card"
    },
    {
      "id": "pay_as_you_go",
      "name": "Pay as you go",
      "kind": "subscription",
      "status": "confirmed",
      "available_to": "existing_customers",
      "price_gbp_ex_vat": 299,
      "billing_period": "month",
      "credits": 1000,
      "per_record_gbp": 0.299,
      "rollover_cap_credits": 12000,
      "credits_expire": false,
      "for_whom": "Existing customers, who keep this price",
      "notes": "Cancel any time. Not sold to new customers since 13 October 2026."
    },
    {
      "id": "plan_12_month",
      "name": "12-month plan",
      "kind": "subscription",
      "status": "confirmed",
      "available_to": "existing_customers",
      "price_gbp_ex_vat": 249,
      "billing_period": "month",
      "annual_price_gbp_ex_vat": 2988,
      "credits": 1000,
      "per_record_gbp": 0.249,
      "rollover_cap_credits": 12000,
      "credits_expire": false,
      "for_whom": "Existing customers, who keep this price",
      "notes": "Not sold to new customers since 13 October 2026."
    },
    {
      "id": "subscription_2000",
      "name": "Subscription",
      "kind": "subscription",
      "status": "confirmed",
      "available_to": "new_customers",
      "price_gbp_ex_vat": 500,
      "billing_period": "month",
      "contract_months": 12,
      "annual_price_gbp_ex_vat": 6000,
      "credits": 2000,
      "per_record_gbp": 0.25,
      "rollover_cap_credits": 0,
      "credits_expire": true,
      "for_whom": "Teams that buy every month",
      "notes": "A 12-month contract. Each month's 2,000 records are used or lost; records beyond them cost the quote's cheapest purchase."
    }
  ],
  "credit_packs": [
    {
      "id": "credit_pack_40000",
      "name": "Credit pack 40,000",
      "kind": "pack",
      "status": "confirmed",
      "available_to": "everyone",
      "price_gbp_ex_vat": 1249,
      "billing_period": "once",
      "credits": 40000,
      "per_record_gbp": 0.031,
      "credits_expire": false,
      "for_whom": "Anyone buying about 5,000 records or more"
    }
  ],
  "credit_rules": [
    {
      "action": "count",
      "label": "Count, breakdown, preview, machine quote, catalogue, title expansion",
      "credits": 0,
      "unit": "call",
      "status": "confirmed"
    },
    {
      "action": "record",
      "label": "Full UK contact record delivered, any channel or field set",
      "credits": 1,
      "unit": "record",
      "status": "confirmed"
    },
    {
      "action": "company_only_record",
      "label": "Company-only record (no named contact)",
      "credits": 0.1,
      "unit": "record",
      "status": "proposed"
    },
    {
      "action": "enrich_contact",
      "label": "Contact enrichment, match found",
      "credits": 1,
      "unit": "match",
      "status": "confirmed",
      "note": "0 if already licensed"
    },
    {
      "action": "lookup_company",
      "label": "Company lookup, no contact details",
      "credits": 0,
      "unit": "call",
      "status": "to_confirm"
    },
    {
      "action": "outright",
      "label": "Outright ownership",
      "credits": 1.8,
      "unit": "record",
      "status": "proposed"
    }
  ],
  "licence": [
    {
      "licence_type": "multi_use_12m",
      "status": "confirmed",
      "credits_per_record": 1,
      "permitted_channels": ["email", "telephone", "post"],
      "reuse_months": 12,
      "resale_prohibited": true,
      "warranty_url": "https://emailmovers.com/trust/warranty",
      "terms_version": "2026-09"
    }
  ],
  "guarantee": {
    "current": {
      "policy": "replace_over_threshold_hard_bounce",
      "threshold_percent": 10,
      "url": "https://emailmovers.com/trust/warranty"
    },
    "proposed": {
      "policy": "replace_any_hard_bounce_30d",
      "url": "https://emailmovers.com/trust/warranty"
    },
    "refunds": [
      "Credits and credit packs are not refundable once bought, except where the law requires.",
      "Existing customers keep what their signed agreement says until it renews."
    ]
  },
  "trial": {
    "credits": 100,
    "card_required": false,
    "expires": false
  },
  "meters": [
    {
      "action": "record",
      "unit": "record",
      "credits": 1,
      "status": "confirmed"
    },
    {
      "action": "enrich_contact",
      "unit": "match",
      "credits": 1,
      "status": "confirmed"
    },
    {
      "action": "company_only_record",
      "unit": "record",
      "credits": 0.1,
      "status": "proposed"
    },
    {
      "action": "outright",
      "unit": "record",
      "credits": 1.8,
      "status": "proposed"
    },
    {
      "action": "count",
      "unit": "call",
      "credits": 0,
      "status": "confirmed"
    }
  ],
  "action_path": [
    {
      "step": 1,
      "action": "quote_order",
      "rest": "POST /v1/quotes",
      "description": "Get a signed machine quote for a count, valid 24 hours. Free."
    },
    {
      "step": 2,
      "action": "create_order",
      "rest": "POST /v1/orders",
      "description": "Spend credits against the quote_id with a person's confirmation or an agent key within its limits."
    },
    {
      "step": 3,
      "action": "https://mydatahub.emailmovers.com/billing/top-up",
      "rest": null,
      "description": "When the balance is short, buy one of the quote's purchase options (the cheapest comes first) through Stripe Checkout, then retry step 2."
    }
  ],
  "promises": [
    {
      "key": "looking_is_free",
      "statement": "Looking is free forever",
      "in_practice": "Filters, counts, breakdowns, masked previews, machine quotes, plans and trust documents need no account or card."
    },
    {
      "key": "never_pay_twice",
      "statement": "Never pay twice",
      "in_practice": "Re-downloads under licence, duplicates, suppressed records, records you already hold and failed lookups cost 0."
    }
  ]
}

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.

StatusProblem codesWhen
400invalid-request, idempotency-key-required, unsupported-versionThe request could not be read, or an Idempotency-Key is missing.
429rate-limitedToo many requests. Wait for Retry-After.
Any other failureinternal-error, service-unavailable, tps-screen-expiredSomething 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.