Create API key
curl --request POST \
--url https://api.veri.studio/v1/api_keys \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"email": "<string>",
"workspace_id": "<string>",
"deployment_id": "<string>",
"expires_in_seconds": 123
}
'import requests
url = "https://api.veri.studio/v1/api_keys"
payload = {
"name": "<string>",
"email": "<string>",
"workspace_id": "<string>",
"deployment_id": "<string>",
"expires_in_seconds": 123
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
email: '<string>',
workspace_id: '<string>',
deployment_id: '<string>',
expires_in_seconds: 123
})
};
fetch('https://api.veri.studio/v1/api_keys', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"object": "<string>",
"id": "<string>",
"name": "<string>",
"key_prefix": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"kind": "<string>",
"key": "<string>",
"last_used_at": "2023-11-07T05:31:56Z",
"deployment_id": "<string>",
"expires_at": "2023-11-07T05:31:56Z"
}Authorizations
API key with the vk_ prefix. Create one from the dashboard.
Body
Server-injected display email for the authenticated user. Set by the web
proxy from the signed-in Clerk session (never trusted from a browser
body). Absent for keys minted outside the proxy (SDK, CI). When present,
it upserts users.email so /v1/me and the CLI can show the account.
Workspace the key is scoped to (workspaces design). Stamped by the web proxy from the active Clerk org, or passed explicitly by SDK callers. Absent / equal to the caller's own id => a personal key. Validated server-side at mint: a workspace the caller is not a member of is rejected, so the stamp is a convenience, never an authority.
Mint a deployment-scoped "model access" key: it authenticates only
GET /v1/deployments/{id} and the inference routes under it. Hand this
to agent sandboxes and external agent hosts instead of a workspace key.
The deployment must belong to the minted workspace.
Optional lifetime in seconds (60 .. 31,536,000). Absent = never expires.
Response
The created key, including the plaintext value returned once
'user' for a full workspace key; 'model_access' for a key bound to one deployment's inference routes (Managed Agents).
Plaintext key returned ONCE on creation. Save it immediately.
Set on model-access keys: the only deployment this key can call.
When the key stops authenticating. Absent = never.
curl --request POST \
--url https://api.veri.studio/v1/api_keys \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"email": "<string>",
"workspace_id": "<string>",
"deployment_id": "<string>",
"expires_in_seconds": 123
}
'import requests
url = "https://api.veri.studio/v1/api_keys"
payload = {
"name": "<string>",
"email": "<string>",
"workspace_id": "<string>",
"deployment_id": "<string>",
"expires_in_seconds": 123
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
email: '<string>',
workspace_id: '<string>',
deployment_id: '<string>',
expires_in_seconds: 123
})
};
fetch('https://api.veri.studio/v1/api_keys', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"object": "<string>",
"id": "<string>",
"name": "<string>",
"key_prefix": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"kind": "<string>",
"key": "<string>",
"last_used_at": "2023-11-07T05:31:56Z",
"deployment_id": "<string>",
"expires_at": "2023-11-07T05:31:56Z"
}
