Skip to content

Daily usage and per-key totals in this billing period

GET
/v1/account/usage/history/session
curl --request GET \
--url https://oddslink.app/v1/account/usage/history/session \
--header 'Authorization: Bearer <token>'

Signed-in website session only; API keys are refused. Returns one UTC calendar-day row for each day touched by the current billing period. A null request count means daily tracking did not yet cover that day, or the day is in the future; zero means tracking covered the day and no priced calls were charged. If tracking began during a day, that first day’s count covers only the time after coverage_start. Per-key counts are whole-period totals from the existing monthly ledger, including revoked live keys. Test keys never spend the monthly allowance and report zero. This account read is free and uses the dedicated usage-read speed bucket.

Current-period daily coverage and key totals for the signed-in account.

Media typeapplication/json
object
period_start
required

Inclusive current billing-period start.

string format: date-time
period_end
required

Exclusive current billing-period end.

string format: date-time
coverage_start
required

Earliest instant from which daily counts are complete. If the existing monthly total was zero when daily tracking began, this is the period start (or the tracking instant if a concurrently healed anchor is briefly in the future); otherwise it is the instant tracking began. During a rolling API release, a monthly write from an older worker without a daily write advances coverage to the detection instant and discards that day’s incomplete bar. The containing UTC day can be partial. A call accepted just before a concurrently healed anchor is attributed to the first UTC day of its new billing period.

string format: date-time
days
required
Array<object>
object
date
required

UTC calendar day.

string format: date
requests
required

Successful priced calls, or null outside known coverage.

integer | null
by_key
required

Keys owned by this account, including revoked keys; newest first.

Array<object>
object
id
required
string format: uuid
label
required
string
prefix
required
string
last_four
required
string
test
required
boolean
revoked_at
required
string | null format: date-time
requests
required

Whole-period charged calls for this key; always zero for test keys.

integer
last_used_at
required
string | null format: date-time
Examplegenerated
{
"period_start": "2026-04-15T12:00:00Z",
"period_end": "2026-04-15T12:00:00Z",
"coverage_start": "2026-04-15T12:00:00Z",
"days": [
{
"date": "2026-04-15",
"requests": 1
}
],
"by_key": [
{
"id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"label": "example",
"prefix": "example",
"last_four": "example",
"test": true,
"revoked_at": "2026-04-15T12:00:00Z",
"requests": 1,
"last_used_at": "2026-04-15T12:00:00Z"
}
]
}
x-requests-used
integer

Requests used this billing period.

x-requests-remaining
integer

Requests remaining this billing period.

x-requests-last
integer

What this one call cost against the allowance (0 for a free call).

X-RateLimit-Limit
integer

This plan’s speed limit, in requests per second.

X-RateLimit-Remaining
integer

Requests left in the current one-second window.

X-RateLimit-Reset
integer

Seconds until the speed-limit window resets.

X-Request-Id
string

This request’s id, for support and for matching against error.request_id.

The Authorization bearer session is missing or invalid.

Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
docs_url
required
string format: uri
request_id
required
string
stored_commence_times

Stored Unix-second choices on AMBIGUOUS_EVENT or INVALID_STORED_COMMENCE_TIME; independent of dateFormat.

Array<integer>
valid_bookmakers

Valid case-sensitive book keys on INVALID_BOOKMAKER.

Array<string>
current_plan

403 only: the plan on the presented key.

string
required_plan

403 only: the lowest plan that includes this request. For history, that depends on how long ago the fixture started as well as on the endpoint.

string
Examples

No Authorization: Bearer header sent

{
"error": {
"code": "MISSING_SESSION",
"message": "Sign in and try again.",
"docs_url": "https://oddslink.app/docs/errors/#missing-session",
"request_id": "req_01hz8k4b9h5y0z1a"
}
}
x-requests-used
integer

Requests used this billing period.

x-requests-remaining
integer

Requests remaining this billing period.

x-requests-last
integer

What this one call cost against the allowance (0 for a free call).

X-RateLimit-Limit
integer

This plan’s speed limit, in requests per second.

X-RateLimit-Remaining
integer

Requests left in the current one-second window.

X-RateLimit-Reset
integer

Seconds until the speed-limit window resets.

X-Request-Id
string

This request’s id, for support and for matching against error.request_id.

The plan’s speed limit was exceeded; wait Retry-After seconds. A call that does not count against the allowance is never refused for a spent allowance.

Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
docs_url
required
string format: uri
request_id
required
string
stored_commence_times

Stored Unix-second choices on AMBIGUOUS_EVENT or INVALID_STORED_COMMENCE_TIME; independent of dateFormat.

Array<integer>
valid_bookmakers

Valid case-sensitive book keys on INVALID_BOOKMAKER.

Array<string>
current_plan

403 only: the plan on the presented key.

string
required_plan

403 only: the lowest plan that includes this request. For history, that depends on how long ago the fixture started as well as on the endpoint.

string
Example
{
"error": {
"code": "SPEED_LIMIT",
"message": "Speed limit exceeded: 10 requests/second on the Growth plan.",
"docs_url": "https://oddslink.app/docs/errors/#speed-limit",
"request_id": "req_01hz8k4f7m9c3d8f"
}
}
x-requests-used
integer

Requests used this billing period.

x-requests-remaining
integer

Requests remaining this billing period.

x-requests-last
integer

What this one call cost against the allowance (0 for a free call).

X-RateLimit-Limit
integer

This plan’s speed limit, in requests per second.

X-RateLimit-Remaining
integer

Requests left in the current one-second window.

X-RateLimit-Reset
integer

Seconds until the speed-limit window resets.

X-Request-Id
string

This request’s id, for support and for matching against error.request_id.

Retry-After
integer

Seconds to wait before retrying on 429 SPEED_LIMIT or 503 ODDS_UNAVAILABLE.

Something failed on our side.

Media typeapplication/json
object
error
required
object
code
required
string
message
required
string
docs_url
required
string format: uri
request_id
required
string
stored_commence_times

Stored Unix-second choices on AMBIGUOUS_EVENT or INVALID_STORED_COMMENCE_TIME; independent of dateFormat.

Array<integer>
valid_bookmakers

Valid case-sensitive book keys on INVALID_BOOKMAKER.

Array<string>
current_plan

403 only: the plan on the presented key.

string
required_plan

403 only: the lowest plan that includes this request. For history, that depends on how long ago the fixture started as well as on the endpoint.

string
Example
{
"error": {
"code": "INTERNAL_ERROR",
"message": "Something went wrong on our side. It has been logged.",
"docs_url": "https://oddslink.app/docs/errors/#internal-error",
"request_id": "req_01hz8k4h8n0d4e9f"
}
}
x-requests-used
integer

Requests used this billing period.

x-requests-remaining
integer

Requests remaining this billing period.

x-requests-last
integer

What this one call cost against the allowance (0 for a free call).

X-RateLimit-Limit
integer

This plan’s speed limit, in requests per second.

X-RateLimit-Remaining
integer

Requests left in the current one-second window.

X-RateLimit-Reset
integer

Seconds until the speed-limit window resets.

X-Request-Id
string

This request’s id, for support and for matching against error.request_id.