@personaai/sdkv0.9.0

Auth — credentials & external users

When to use bare credential vs externalUserId

Auth

Credential

PERSONA_CREDENTIAL is "<keyId>.<secret>" minted in Developer Studio → Project → Credentials. It is a server secret — sent as Authorization: Bearer <keyId>.<secret>.

ts
new PersonaClient({ baseUrl, credential: process.env.PERSONA_CREDENTIAL! })

Never bundle it. See .

Dual-mode rule

CallSet externalUserId?Why
agents.create, providers.create, auditLogs.listNo — control-plane (Project-owned)Uses machine principal
threads.*, files.*, chat.stream, memory.* (when scope externalUser)Yes — per-request new PersonaClient({…, externalUserId: yourUserId })Thread/file/chat belongs to that end user
ts
const admin = new PersonaClient({ baseUrl, credential }); // control-planeconst user  = new PersonaClient({ baseUrl, credential, externalUserId: req.user.id }); // runtime-plane

See .

whoami()

ts
await persona.whoami(); // { principalType: 'Project', domain: '...' }

Side-effect-free auth check.