Accounts
An account is your identity inside your KYA Pro workspace. Sign-in is passwordless — a code is emailed to you. Once you verify, you get a kya_live_ API token.
The account object
| Field | Type | Description |
|---|---|---|
id | string (UUID) | Stable account id |
email | string | Verified email address |
plan_tier | string | free, team, or enterprise |
tenant_id | string (UUID) | Workspace this account belongs to |
role | string | admin, operator, viewer, auditor |
Sign up
Ask for a sign-in code. Personal email domains (Gmail, iCloud, etc.) can't create new workspaces — KYA Pro is for organizations.
Request
POST /api/v1/accounts/signup
Body
| Field | Type | Required | Description |
|---|---|---|---|
email | string (email) | ✓ | Corporate email address |
Example
curl -X POST https://api.veldtlabs.ai/api/v1/accounts/signup \ -H "Content-Type: application/json" \ -d '{"email": "[email protected]"}'
Response (200 OK):
{ "status": "verification_sent" }Rate-limited — honor Retry-After if you hit the limit.
Verify magic link
Enter the 6-digit code from your inbox. Your first verification also creates the workspace and issues your first default API token.
Request
POST /api/v1/accounts/verify
Body
| Field | Type | Required | Description |
|---|---|---|---|
email | string (email) | ✓ | Same email you signed up with |
code | string | ✓ | 6-digit code, min 6 max 16 chars |
Example
curl -X POST https://api.veldtlabs.ai/api/v1/accounts/verify \ -H "Content-Type: application/json" \ -d '{"email": "[email protected]", "code": "482910"}'
Response (200 OK):
{
"token": "kya_live_a1b2c3d4e5f6…",
"account": {
"id": "e782d920-4bef-4c8a-9d1f-2c3e4f5a6b7c",
"email": "[email protected]",
"plan_tier": "team"
},
"tenant_id": "abcd0000-1111-2222-3333-444455556677"
}The token is shown once. Save it securely — you can't fetch it later. If you lose it, issue a new one after signing in again.
Codes expire after a short window.
Session info
Return everything about the signed-in account — profile, plan, quotas, remaining trial days, subscription status.
Request
GET /api/v1/accounts/me
Headers
Authorization: Bearer kya_live_<token>
Example
curl https://api.veldtlabs.ai/api/v1/accounts/me \ -H "Authorization: Bearer $VELDT_KYA_TOKEN"
Response (200 OK):
{
"account": {
"id": "e782d920-...",
"email": "[email protected]",
"plan_tier": "team",
"tenant_id": "abcd0000-...",
"role": "admin"
},
"plan_tier": "team",
"quotas": {
"invocations_used_today": 0,
"invocations_cap_per_day": 50000,
"multi_judge_calls_used_this_month": 0,
"multi_judge_calls_cap": 1000,
"personas_used": 0,
"personas_cap": 5,
"agents_registered": 0,
"agents_cap": 50
},
"display_name": "Team",
"subscription_status": "trialing",
"trial_ends_at": "2026-08-14T00:00:00Z",
"account_status": "active",
"trial_days_remaining": 14
}account_status values: active, trial_expired, sub_lapsed, sub_canceled. Anything other than active means write endpoints return 402 — the account needs to upgrade or renew.
Issue additional token
Create a new kya_live_ token — useful for CI, per-service credentials, or replacing a leaked token before revoking the old one.
Request
POST /api/v1/accounts/tokens
Headers
Authorization: Bearer kya_live_<existing_token>
Body
| Field | Type | Required | Description |
|---|---|---|---|
name | string | ✓ | Label, 1–64 chars. Shown in the token list UI. |
Example
curl -X POST https://api.veldtlabs.ai/api/v1/accounts/tokens \ -H "Authorization: Bearer $VELDT_KYA_TOKEN" \ -H "Content-Type: application/json" \ -d '{"name": "ci-pipeline"}'
Response (200 OK):
{
"token": "kya_live_9f8e7d6c5b4a…",
"token_id": "a1b2c3d4-...",
"prefix": "kya_live_9f",
"name": "ci-pipeline"
}Requires an active account.
List tokens
Return details for every token the account has issued — the full secret is never shown again.
Request
GET /api/v1/accounts/tokens
Example
curl https://api.veldtlabs.ai/api/v1/accounts/tokens \ -H "Authorization: Bearer $VELDT_KYA_TOKEN"
Response (200 OK):
{
"tokens": [
{
"token_id": "a1b2c3d4-...",
"prefix": "kya_live_9f",
"name": "ci-pipeline",
"created_at": "2026-07-31T10:00:00Z",
"last_used_at": "2026-07-31T14:05:00Z",
"revoked_at": null
},
{
"token_id": "b2c3d4e5-...",
"prefix": "kya_live_a1",
"name": "default",
"created_at": "2026-07-17T09:00:00Z",
"last_used_at": "2026-07-31T09:00:00Z",
"revoked_at": null
}
]
}Revoke a token
Turn off a token right away. Later calls with the revoked token return 401 Unauthorized.
Request
DELETE /api/v1/accounts/tokens/{token_id}
Example
curl -X DELETE https://api.veldtlabs.ai/api/v1/accounts/tokens/a1b2c3d4-... \ -H "Authorization: Bearer $VELDT_KYA_TOKEN"
Response (204 No Content).
Revocation always works — no rate limit, no gating check. You can always revoke a leaked token.