API Reference
Base URL: https://cloud.qbrix.io
Authentication is required for most endpoints via JWT bearer tokens or API keys (X-API-Key header).
Tip
Install the Python SDK and set up your environment once:
pip install qbrixfrom qbrix import Qbrix
client = Qbrix(
api_key="your-api-key",
base_url="https://cloud.qbrix.io",
)export QBRIX_URL="https://cloud.qbrix.io"
export QBRIX_API_KEY="your-api-key"Authentication
Register & Login
POST
/api/auth/registerRegister a new usercurl -X POST $QBRIX_URL/api/auth/register \
-H "Content-Type: application/json" \
-d '{"email": "user@example.com", "password": "pass123"}'POST
/api/auth/loginLogin and receive JWT tokenscurl -X POST $QBRIX_URL/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email": "user@example.com", "password": "pass123"}'POST
/api/auth/refreshRefresh an access tokencurl -X POST $QBRIX_URL/api/auth/refresh \
-H "Content-Type: application/json" \
-d '{"refresh_token": "<refresh-token>"}'Profile
GET
/api/auth/profileGet current user profilePATCH
/api/auth/profileUpdate user profilePOST
/api/auth/change-passwordChange passwordDELETE
/api/auth/accountDelete user accountAPI Keys
POST
/api/auth/api-keysCreate an API keyGET
/api/auth/api-keysList all API keysPATCH
/api/auth/api-keys/{id}Update API key nameDELETE
/api/auth/api-keys/{id}Deactivate an API keyPOST
/api/auth/api-keys/{id}/rotateRotate an API keyGET
/api/auth/api-keys/{id}/usageGet API key usage statsAdmin (requires admin role)
GET
/api/auth/usersList all usersPUT
/api/auth/users/{id}/roleAssign role to userPATCH
/api/auth/users/{id}/statusUpdate user active statusGET
/api/auth/users/statsUser statistics by roleGET
/api/auth/rolesList available rolesWorkspace
GET
/api/auth/workspaceGet workspace detailsPATCH
/api/auth/workspaceUpdate workspace (admin)GET
/api/auth/workspace/membersList workspace membersInvites
POST
/api/auth/workspace/invitesCreate a workspace inviteGET
/api/auth/workspace/invitesList pending invitesDELETE
/api/auth/workspace/invites/{id}Revoke an inviteGET
/api/auth/invites/{token}Validate an invite tokenPOST
/api/auth/invites/{token}/acceptAccept an invitePools
POST
/api/v1/poolsCreate a new pool with armspool = client.pool.create(
name="my-pool",
arms=[
{"name": "variant-a"},
{"name": "variant-b"},
{"name": "variant-c"},
],
)curl -X POST $QBRIX_URL/api/v1/pools \
-H "X-API-Key: $QBRIX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "my-pool",
"arms": [
{"name": "variant-a"},
{"name": "variant-b"},
{"name": "variant-c"}
]
}'GET
/api/v1/poolsList all pools (paginated)page = client.pool.list(limit=100, offset=0)
for pool in page.items:
print(pool.name)curl $QBRIX_URL/api/v1/pools \
-H "X-API-Key: $QBRIX_API_KEY"GET
/api/v1/pools/{id}Get pool by IDpool = client.pool.get("<pool-id>")curl $QBRIX_URL/api/v1/pools/<pool-id> \
-H "X-API-Key: $QBRIX_API_KEY"PATCH
/api/v1/pools/{id}Update poolDELETE
/api/v1/pools/{id}Delete poolclient.pool.delete("<pool-id>")curl -X DELETE $QBRIX_URL/api/v1/pools/<pool-id> \
-H "X-API-Key: $QBRIX_API_KEY"GET
/api/v1/pools/{id}/experimentsList experiments for poolexperiments = client.pool.list_experiments("<pool-id>")curl $QBRIX_URL/api/v1/pools/<pool-id>/experiments \
-H "X-API-Key: $QBRIX_API_KEY"Experiments
POST
/api/v1/experimentsCreate a new experimentexperiment = client.experiment.create(
name="hero-test",
pool_id="<pool-id>",
policy="BetaTSPolicy",
)curl -X POST $QBRIX_URL/api/v1/experiments \
-H "X-API-Key: $QBRIX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "hero-test",
"pool_id": "<pool-id>",
"policy": "BetaTSPolicy"
}'GET
/api/v1/experimentsList experiments (paginated, filterable)page = client.experiment.list(limit=100, offset=0)
for exp in page.items:
print(f"{exp.name} ({exp.policy})")curl $QBRIX_URL/api/v1/experiments \
-H "X-API-Key: $QBRIX_API_KEY"GET
/api/v1/experiments/{id}Get experiment by IDexperiment = client.experiment.get("<experiment-id>")curl $QBRIX_URL/api/v1/experiments/<experiment-id> \
-H "X-API-Key: $QBRIX_API_KEY"PATCH
/api/v1/experiments/{id}Update experimentexperiment = client.experiment.update(
"<experiment-id>",
enabled=False,
)curl -X PATCH $QBRIX_URL/api/v1/experiments/<experiment-id> \
-H "X-API-Key: $QBRIX_API_KEY" \
-H "Content-Type: application/json" \
-d '{"enabled": false}'DELETE
/api/v1/experiments/{id}Delete experimentAgent (Selection & Feedback)
POST
/api/v1/agent/selectSelect an armresult = client.agent.select(
experiment_id="<experiment-id>",
context={"id": "user-123"},
)curl -X POST $QBRIX_URL/api/v1/agent/select \
-H "X-API-Key: $QBRIX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"experiment_id": "<experiment-id>",
"context": {"id": "user-123"}
}'For contextual policies, include a context vector:
from qbrix import Context
result = client.agent.select(
experiment_id="<experiment-id>",
context=Context(
id="user-123",
vector=[0.5, 1.2, -0.3],
metadata={"country": "US"},
),
)curl -X POST $QBRIX_URL/api/v1/agent/select \
-H "X-API-Key: $QBRIX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"experiment_id": "<experiment-id>",
"context": {
"id": "user-123",
"vector": [0.5, 1.2, -0.3],
"metadata": {"country": "US"}
}
}'POST
/api/v1/agent/feedbackSubmit reward feedbackclient.agent.feedback(
request_id="<request-id>",
reward=1.0,
)curl -X POST $QBRIX_URL/api/v1/agent/feedback \
-H "X-API-Key: $QBRIX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"request_id": "<request-id>",
"reward": 1.0
}'Feature Gates
POST
/api/v1/gates/{experiment_id}Create a feature gategate = client.gate.create(
experiment_id="<experiment-id>",
enabled=True,
rollout_percentage=50.0,
)curl -X POST $QBRIX_URL/api/v1/gates/<experiment-id> \
-H "X-API-Key: $QBRIX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"enabled": true,
"rollout_percentage": 50,
"rules": []
}'GET
/api/v1/gates/{experiment_id}Get feature gate configgate = client.gate.get("<experiment-id>")curl $QBRIX_URL/api/v1/gates/<experiment-id> \
-H "X-API-Key: $QBRIX_API_KEY"PUT
/api/v1/gates/{experiment_id}Update feature gategate = client.gate.update(
experiment_id="<experiment-id>",
enabled=True,
rollout_percentage=100.0,
rules=[
{
"key": "country",
"operator": "in",
"value": ["US", "GB", "DE"],
"arm_id": "<arm-id>",
},
],
)curl -X PUT $QBRIX_URL/api/v1/gates/<experiment-id> \
-H "X-API-Key: $QBRIX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"enabled": true,
"rollout_percentage": 100,
"rules": [
{
"key": "country",
"operator": "in",
"value": ["US", "GB", "DE"],
"arm_id": "<arm-id>"
}
]
}'DELETE
/api/v1/gates/{experiment_id}Delete feature gatePolicies
GET
/api/v1/policiesList all available policiesReturns all 12 bandit policies with their configurable parameters. See the Policies page for detailed guidance.
Runtime
GET
/api/v1/runtime/redis/healthRedis health checkGET
/api/v1/runtime/redis/stream/sizeFeedback queue lengthGET
/api/v1/runtime/motor/healthMotor service health (gRPC)GET
/api/v1/runtime/cortex/healthCortex service health (gRPC)Health
GET
/healthProxy service health checkGET
/infoService info and versionEnterprise Endpoints
Info
The following endpoints are available on the Enterprise plan.
Billing
POST
/api/v1/ee/billing/checkout/sessionCreate a Stripe checkout sessionGET
/api/v1/ee/billing/subscriptionGet current subscriptionPOST
/api/v1/ee/billing/subscription/cancelCancel subscriptionPOST
/api/v1/ee/billing/subscription/reactivateReactivate cancelled subscriptionGET
/api/v1/ee/billing/invoicesList invoicesPOST
/api/v1/ee/billing/enterprise/contactContact sales for Enterprise planEvents
GET
/api/v1/ee/eventList events (filterable by type, date range)GET
/api/v1/ee/event/selectionList selection eventsGET
/api/v1/ee/event/selection/{request_id}Get selection detail with matched feedbackGET
/api/v1/ee/event/feedbackList feedback eventsGET
/api/v1/ee/event/auditList audit eventsInsights
GET
/api/v1/ee/insight/experiment/{id}Experiment statistics overviewGET
/api/v1/ee/insight/experiment/{id}/timeseriesSelection timeseriesGET
/api/v1/ee/insight/experiment/{id}/timeseries/rewardsReward timeseriesGET
/api/v1/ee/insight/experiment/{id}/timeseries/armsPer-arm timeseriesGET
/api/v1/ee/insight/experiment/{id}/armsPer-arm statisticsGET
/api/v1/ee/insight/experiment/{id}/funnelFeedback funnel (selections → feedback conversion)GET
/api/v1/ee/insight/experiment/{id}/cumulativeCumulative reward over time