Skip to content

Daily points summary

GET
/open/v1/me/score/summary
curl --request GET \
--url 'https://api.harperharbor.com/open/v1/me/score/summary?days=30&timezone=UTC' \
--header 'Authorization: Bearer <token>'

Per-day points spent and earned for the caller, scoped like the points ledger (only entries made through the calling application). Days are cut in the requested IANA timezone, oldest first, and every day in the range has an entry even when nothing happened. HarperHarbor only.

days
integer
default: 30 >= 7 <= 90

How many days back, including today. Values outside 7–90 are clamped.

timezone
string
default: UTC <= 64 characters

IANA timezone name used to cut days, e.g. Asia/Taipei.

One entry per day.

Media typeapplication/json
object
timezone
required
string
days
required
Array<object>
object
date
required

Calendar day in the requested timezone.

string format: date
spent
required

Points spent that day, as a positive number.

integer
earned
required

Points received that day.

integer
count
required

Number of ledger entries that day.

integer
Examplegenerated
{
"timezone": "example",
"days": [
{
"date": "2026-04-15",
"spent": 1,
"earned": 1,
"count": 1
}
]
}

invalid_request: unknown timezone.

Media typeapplication/json
object
error
required

Error code (snake_case) or, for legacy handlers, a free-text/localized message.

string
message

Human-readable sentence. Present only on middleware errors and /me, /me/wallet.

string
retryable

Whether retrying may succeed. Present only on middleware errors, /me, /me/wallet and service/share routes.

boolean
required_context_tier

Only on a first-turn context_capacity_exceeded: the smallest context tier that fits the whole card with room to talk. Save it as context in player settings and resend. Absent when no tier fits.

integer
>= 1 <= 5
required_context_tokens

The token budget of required_context_tier for the selected model, for display.

integer
constant_lore_trim_fits

Only on a first-turn context_capacity_exceeded: whether saving trimConstantLore=true lets the card play at the current tier. Absent on mid-conversation capacity errors.

boolean
credits_needed

Only on insufficient_credits: the credits this turn needs before it can start. Absent when the refusal came without an estimate.

integer
credits_available

Only on insufficient_credits: the credits the wallet could set aside for it.

integer
Examplegenerated
{
"error": "example",
"message": "example",
"retryable": true,
"required_context_tier": 1,
"required_context_tokens": 1,
"constant_lore_trim_fits": true,
"credits_needed": 1,
"credits_available": 1
}

unauthorized.

Media typeapplication/json
object
error
required

Error code (snake_case) or, for legacy handlers, a free-text/localized message.

string
message

Human-readable sentence. Present only on middleware errors and /me, /me/wallet.

string
retryable

Whether retrying may succeed. Present only on middleware errors, /me, /me/wallet and service/share routes.

boolean
required_context_tier

Only on a first-turn context_capacity_exceeded: the smallest context tier that fits the whole card with room to talk. Save it as context in player settings and resend. Absent when no tier fits.

integer
>= 1 <= 5
required_context_tokens

The token budget of required_context_tier for the selected model, for display.

integer
constant_lore_trim_fits

Only on a first-turn context_capacity_exceeded: whether saving trimConstantLore=true lets the card play at the current tier. Absent on mid-conversation capacity errors.

boolean
credits_needed

Only on insufficient_credits: the credits this turn needs before it can start. Absent when the refusal came without an estimate.

integer
credits_available

Only on insufficient_credits: the credits the wallet could set aside for it.

integer
Examplegenerated
{
"error": "example",
"message": "example",
"retryable": true,
"required_context_tier": 1,
"required_context_tokens": 1,
"constant_lore_trim_fits": true,
"credits_needed": 1,
"credits_available": 1
}