Skip to content

Points ledger

GET
/open/v1/me/score/records
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.

pageNum
integer
default: 1 >= 1

1-based page. Non-numeric or <1 becomes 1.

pageSize
integer
default: 10 >= 1

Page size. Non-numeric or <1 becomes 10. No upper clamp is enforced.

period
string
Allowed values: last24Hours last3Days last7Days last30Days custom

Time window relative to now in the caller’s timezone. Any other value (or absent) means no time filter. custom uses startTime/endTime.

startTime
integer format: int64

Unix epoch milliseconds, inclusive lower bound. Only honored with period=custom.

endTime
integer format: int64

Unix epoch milliseconds, inclusive upper bound. Only honored with period=custom.

timezoneOffset
integer
0

JavaScript-style offset in minutes (UTC minus local, e.g. -480 for UTC+8). Invalid values become 0.

Page of records.

Media typeapplication/json
object
total
required

Total matching records.

integer format: int64
size
required

Number of records in this page.

integer
pages
required

Total pages.

integer
hasNextPage
required
boolean
records
required
Array<object>
object
id
required
integer format: int64
record
required

Human-readable description of the transaction (server-side text, may be localized/Chinese).

string
recordType
required

add = points credited, sub = points debited. Enum inferred from record-creation sites; other legacy values may exist in old rows.

string
Allowed values: add sub
score
required

Amount of points.

integer format: int64
createTime
required

RFC3339.

string format: date-time
nullable
lastUpdateTime
required
string format: date-time
nullable
rewardKind

Present on credits from app rewards: checkin, task, newcomer or referral.

string
Allowed values: checkin task newcomer referral
planKind

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.

string
Allowed values: daily bonus
playerNote

Optional original-language explanation for a platform grant. Historical grants may omit it. Internal operator notes are never returned.

string
<= 200 characters
modelName

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.

string
laneName

Present with modelName when the model has a lane: the localized lane label from the model list, in the language of the language header.

string
rankHonor
object
zone
required
string
Allowed values: clean all
window
required
string
Allowed values: day week month
band
required
integer
Allowed values: 1 3 10
Example
{
"records": [
{
"recordType": "add",
"rewardKind": "checkin",
"planKind": "daily",
"rankHonor": {
"zone": "clean",
"window": "day",
"band": 1
}
}
]
}

Database error; body {"error": "<text>"}.

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
}