Points ledger
const url = 'https://api.harperharbor.com/open/v1/me/score/records?pageNum=1&pageSize=10&period=last24Hours&timezoneOffset=0';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.harperharbor.com/open/v1/me/score/records?pageNum=1&pageSize=10&period=last24Hours&timezoneOffset=0' \ --header 'Authorization: Bearer <token>'Paginated list of the caller’s points transactions, newest first, optionally filtered by a time window. Legacy handler: errors are {"error": "<db error text>"} with 400. HarperHarbor includes the account’s app-scoped entries, period-plan gifts and platform grants; other apps’ activity remains private.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”1-based page. Non-numeric or <1 becomes 1.
Page size. Non-numeric or <1 becomes 10. No upper clamp is enforced.
Time window relative to now in the caller’s timezone. Any other value (or absent) means no time filter. custom uses startTime/endTime.
Unix epoch milliseconds, inclusive lower bound. Only honored with period=custom.
Unix epoch milliseconds, inclusive upper bound. Only honored with period=custom.
JavaScript-style offset in minutes (UTC minus local, e.g. -480 for UTC+8). Invalid values become 0.
Responses
Section titled “Responses”Page of records.
object
Total matching records.
Number of records in this page.
Total pages.
object
Human-readable description of the transaction (server-side text, may be localized/Chinese).
add = points credited, sub = points debited. Enum inferred from record-creation sites; other legacy values may exist in old rows.
Amount of points.
RFC3339.
Present on credits from app rewards: checkin, task, newcomer or referral.
Only on plan rows: daily — a day’s credits; bonus — that day’s first-purchase bonus. Refunds that take them back carry the same value.
Optional original-language explanation for a platform grant. Historical grants may omit it. Internal operator notes are never returned.
Only on spending rows whose model is still offered: the model name as the model list shows it. Older rows and models no longer offered omit it.
Present with modelName when the model has a lane: the localized lane label from the model list, in the language of the language header.
object
Example
{ "records": [ { "recordType": "add", "rewardKind": "checkin", "planKind": "daily", "rankHonor": { "zone": "clean", "window": "day", "band": 1 } } ]}Database error; body {"error": "<text>"}.
object
Error code (snake_case) or, for legacy handlers, a free-text/localized message.
Human-readable sentence. Present only on middleware errors and /me, /me/wallet.
Whether retrying may succeed. Present only on middleware errors, /me, /me/wallet and service/share routes.
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.
The token budget of required_context_tier for the selected model, for display.
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.
Only on insufficient_credits: the credits this turn needs before it can start. Absent when the refusal came without an estimate.
Only on insufficient_credits: the credits the wallet could set aside for it.
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.
object
Error code (snake_case) or, for legacy handlers, a free-text/localized message.
Human-readable sentence. Present only on middleware errors and /me, /me/wallet.
Whether retrying may succeed. Present only on middleware errors, /me, /me/wallet and service/share routes.
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.
The token budget of required_context_tier for the selected model, for display.
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.
Only on insufficient_credits: the credits this turn needs before it can start. Absent when the refusal came without an estimate.
Only on insufficient_credits: the credits the wallet could set aside for it.
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}