Skip to content

Keys, versions and lists

Terminal window
curl "https://api.pensievelabs.co/v1/models?limit=2" \
-H "Authorization: Bearer pk_test_sandbox" \
-H "Pensieve-Version: 2026-11-08"

Send your key as Authorization: Bearer <key>.

  • pk_test_ keys reach a sandbox workspace, where models answer from sample data. See The sandbox.
  • pk_live_ keys reach your live workspace. Make them in the app’s Settings, or with keys.create(); the secret is shown once.

Keep live keys out of code and out of chats with coding agents. Set PENSIEVE_API_KEY in your environment; both SDKs read it.

Pin the version with Pensieve-Version: 2026-11-08. Without the header, you get the version your workspace was created on. Every response says which version answered, in Pensieve-Version. The SDKs send the version they were built for.

Within a version, the API only adds: new operations, new optional fields, new fields in answers, and new values in enums such as status. Write code that ignores fields it doesn’t know and treats an unknown enum value gracefully.

Every list has the same shape:

{ "object": "list", "data": [ ... ], "has_more": true, "next_cursor": "cur_20" }

Pass limit (1 to 100, 20 by default) and, for the next page, cursor set to the next_cursor you got. The SDKs page for you.

Prefix Object
mdl_ Model (calls also take its slug, such as grade-audit)
ver_ Version (paths take its label, such as v7, not this id)
cl_ Call: a decision, or a call your code answered
bat_ Batch
case_ Test case
exp_ Experiment
run_ Experiment run
rel_ Release
rev_ Review case
rt_ Frontier re-test
src_ Data source
key_ API key
mem_ Person in the workspace
whe_ Webhook endpoint
evt_ Event
req_ Request, in Pensieve-Request-Id

Post-training methods have no prefix: a method’s id is its slug, such as fine-tuning or one you chose.

Times are ISO 8601 in UTC, such as 2026-10-27T10:00:00.000Z. Scores are between 0 and 1; leads are in points out of 100.