Read the heat of several role cards at once
const url = 'https://api.harperharbor.com/open/v1/role/heat';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"roleIds":["2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.harperharbor.com/open/v1/role/heat \ --header 'Content-Type: application/json' \ --data '{ "roleIds": [ "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" ] }'Batch read for scheduled sync. Guest-readable: no Authorization header is required. Returns the heat (see RoleDetail.heat) of each requested card that an anonymous reader can see; private, deleted, taken-down or unknown ids are left out of the result rather than reported as errors. At most 200 ids per request.
Request Bodyrequired
Section titled “Request Bodyrequired”object
Role ids (characterRoleId).
Examplegenerated
{ "roleIds": [ "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" ]}Responses
Section titled “Responses”Heat by role id.
object
Map from role id to heat. Only readable cards appear.
object
Map from role id to play-round count, matching RoleDetail.talkNum across published versions. Staging versions are excluded. Only readable cards appear.
object
Examplegenerated
{ "heat": { "additionalProperty": 1 }, "talkNum": { "additionalProperty": 1 }}Malformed body, an id that is not a UUID, or more than 200 ids.
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}