EmailmoversMyDataHub docs
Browse the docs

Reference / REST reference

Reference

Get account usage

GET /v1/account/usage. Credits charged, refunded and added in a period, by action and by key.

Generated from the contractsView as Markdown

GET /v1/account/usage

Credits charged, refunded and added in a period, by action and by key.

PropertyValue
EndpointGET https://mydatahub.emailmovers.com/v1/account/usage
Operation idgetAccountUsage
CostFree (0 credits)
AccessAn API key or an OAuth 2.1 token with the scope account:read.
TagAccount

Request

Parameters

NameInTypeRequiredDescription
fromquerystring (date)noFirst day, inclusive. Default 30 days ago.
toquerystring (date)noLast day, inclusive. Default today.
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/account/usage" \
  -H "Authorization: Bearer $MYDATAHUB_API_KEY"

Responses

200: Usage in the period.

Headers: RateLimit, RateLimit-Policy.

MemberTypeAlways presentDescription
fromstring (date)yes
tostring (date)yes
credits_chargednumber (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).
credits_refundednumber (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).
credits_addednumber (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).
by_actionarray of objectyes
by_action[].actionstringyes
by_action[].callsinteger (0 or more)yes
by_action[].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).
by_keyarray of objectyes
by_key[].key_idstringyesFormat: an API key id: key_ followed by a 26 character ULID in upper case Crockford base32, such as key_01JB3Z4Q2V7XN3M9R6T1Y5W8ZA.
by_key[].labelstringyes
by_key[].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).

Example response

{
  "from": "2026-09-01",
  "to": "2026-09-30",
  "credits_charged": 5400,
  "credits_refunded": 0,
  "credits_added": 6000,
  "by_action": [
    {
      "action": "count",
      "calls": 1840,
      "credits": 0
    },
    {
      "action": "record",
      "calls": 2,
      "credits": 5400
    }
  ],
  "by_key": [
    {
      "key_id": "key_01JB3Z9R6T1Y5W8ZAK8Q2V7XN3",
      "label": "SDR agent",
      "credits": 400
    }
  ]
}

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.
401authentication-required, account-requiredSign in (OAuth) or send an API key (authentication-required), or create a free account for what the anonymous tier does not cover (account-required).
403insufficient-scope, confirmation-required, business-details-required, licence-acceptance-required, dpa-acceptance-required, agent-budget-exceededThe token lacks a scope (insufficient-scope, with required_scope and a WWW-Authenticate step-up challenge); no person confirmed the spend and no agent key covers it (confirmation-required, with an approval_url); an agent key's per-order cap or monthly budget does not cover it (agent-budget-exceeded); an account made by self-serve sign-up has not yet confirmed its business name and that it is a UK business, which its first order needs (business-details-required); the order needs the Data Licence and Sharing Agreement accepted at the version in force (licence-acceptance-required); or a suppression upload comes before the organisation has accepted the Article 28 data processing agreement in force (dpa-acceptance-required). Nothing is charged.
422validation-failed, quote-required, dataset-unavailableThe request is not valid. errors lists every problem with a JSON pointer and did_you_mean.
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.