Bearer session JWT
Register, verify, or sign in, then manage projects, members, and API keys.
Browse Auth endpoints →Session JWTs administer projects and keys; project API keys authenticate application traffic.
Register, verify, or sign in, then manage projects, members, and API keys.
Browse Auth endpoints →Send the project key on data-plane calls and rotate it without changing your integration flow.
Manage project keys →Worked example
Sign in once to get a session JWT, mint a project key with it, then use that key for every data-plane call.
POST /auth/login
The token this returns authenticates the control plane — projects, members and keys. It belongs on a server, never in browser code.
curl -X POST "https://api.ugtp.io/v1/auth/login" \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"password": "********"
}'{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"email": "user@example.com",
"systemRole": "client_admin"
}| Status | When |
|---|---|
200 | Session token |
400 | Invalid request body or query parameters |
401 | Missing or invalid credentials |
429 | Rate limit exceeded — retry after the number of seconds in the `Retry-After` response header |
500 | Internal server error |
POST /api-key/create
Send the JWT as a Bearer token. The raw key comes back once here and stays retrievable by an owner or admin afterwards; a project holds at most one active key.
curl -X POST "https://api.ugtp.io/v1/api-key/create" \
-H "Authorization: Bearer $UGTP_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"projectId": "ugtp_project_a1b2c3d4e5f6",
"name": "Server key",
"scopes": [
"full_access"
]
}'{
"id": "ugtp_project_api_key_a1b2c3d4e5f6",
"apiKey": "ugtp2_0123456789abcdef0123456789abcdef",
"keyPrefix": "ugtp2_0123"
}| Status | When |
|---|---|
201 | Created key |
400 | Invalid request body or query parameters |
401 | Missing or invalid credentials |
403 | Authenticated but not permitted |
404 | Resource not found |
409 | Request conflicts with the current state of the resource |
500 | Internal server error |
GET /network/list
Every operation endpoint takes the project key in the X-API-Key header instead of the JWT. This read is the cheapest way to prove a key works.
curl -X GET "https://api.ugtp.io/v1/network/list" \
-H "X-API-Key: $UGTP_API_KEY"{
"networks": [
{
"name": "Avalanche C-Chain",
"networkId": "43114",
"explorerUrl": "https://snowtrace.io",
"nativeCoin": "AVAX",
"wrappedNative": "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7"
}
]
}| Status | When |
|---|---|
200 | Networks |
401 | Missing or invalid credentials |
429 | Rate limit exceeded — retry after the number of seconds in the `Retry-After` response header |
500 | Internal server error |