Managed services API
These routes let you inspect the Valkey catalog and operate an existing managed project. Creation still uses the public project route with config.type_project: "valkey", config.profile, and the matching plan.
Authentication and permissions
Send session authentication or the project API Key together with the organization context:
Authorization: Bearer <token>
x-organization-id: <organization-id>For automation, use an organization API key through the authentication mechanism configured for your profile instead of a bearer token. The public catalog does not require these headers.
The organization header selects the billing and authorization context when a user belongs to more than one organization. Keep the API key in a secret manager, never in a versioned file. For reads, treat 404 as an inaccessible or missing project without guessing IDs. For rotation, show the response only to the authorized operator, update the application secret, and discard the password from memory as soon as clients restart.
Project operations require the matching permissions for the managed_service resource:
| Operation | Permission |
|---|---|
| Read status | managed_service.status.read |
| Read masked connection | managed_service.connection.read |
| Rotate credential | managed_service.credentials.rotate |
Catalog
GET /v1/managed-services/catalogAuthentication is not required. The catalog reports the Valkey version, currency, profiles, plans, hourly/monthly/yearly prices, benefits, included storage, and public high-availability availability.
{
"status": "success",
"data": {
"engine": "valkey",
"version": "9.1.1",
"currency": "brl",
"profiles": [
{ "id": "key_value", "persistence": true },
{ "id": "cache", "persistence": false },
{ "id": "queue", "persistence": true }
],
"plans": [
{
"id": "queue-basic",
"profile": "queue",
"prices": { "hourly": 13, "monthly": 7490, "yearly": 74900 },
"features": ["1 GB memory", "1 vCPU", "High availability"],
"included_storage_gb": 5,
"high_availability": true
}
]
}
}Values are BRL cents. Read the catalog at execution time; do not hardcode prices in automations.
Read status
GET /v1/managed-services/:id/statusReduced response:
{
"status": "success",
"data": {
"id": "<project-id>",
"status": "running",
"engine": "valkey",
"profile": "queue",
"version": "9.1.1",
"persistence": true,
"instances": 3
}
}Read the connection
GET /v1/managed-services/:id/connectionThe password cannot be recovered through this route:
{
"status": "success",
"data": {
"host": "valkey-<project-id>.managed.zenifra.com",
"port": 30000,
"username": "default",
"tls": true,
"connection_string": "valkeys://default:********@valkey-<project-id>.managed.zenifra.com:30000/0"
}
}Rotate the credential
PATCH /v1/managed-services/:id/credentialsThe response contains the new password once. Update the application secret before discarding it:
{
"status": "success",
"data": {
"username": "default",
"host": "valkey-<project-id>.managed.zenifra.com",
"port": 30000,
"tls": true,
"connection_string": "valkeys://default:<new-password>@valkey-<project-id>.managed.zenifra.com:30000/0"
}
}Common errors
| Code | Situation |
|---|---|
400 | Invalid ID or parameters |
401 | Missing or invalid session/API Key |
403 | Insufficient organization permission |
404 | Managed project not found |
502 | Credential rotation failed |
503 | Commercial catalog temporarily unavailable |