curl --request POST \
--url https://{subdomain}.mihu.ai/api/v1/workspace/join-requests/{email}/approve \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"roles": [
"loop_agent"
]
}
'{
"success": true,
"message": "Join request approved",
"data": {
"email": "jane@acme.com",
"name": "Jane Doe",
"status": "approved",
"decided_at": "2026-08-16T09:12:44+03:00",
"roles": [
{
"uuid": "22222222-2222-4222-8222-222222222222",
"key": "loop_agent",
"name": "Loop Agent"
}
],
"role_scopes": [
"loop.conversations.view",
"loop.conversations.reply"
],
"direct_scopes": [
"loop.calls.place"
],
"effective_scopes": [
"loop.conversations.view",
"loop.conversations.reply",
"loop.calls.place"
]
}
}Workspace Join Requests
Approve a join request
Creates the workspace member from the request — the person keeps the name and password they registered with — grants the roles and scopes named here, and notifies them that they can sign in. The request leaves the queue and is kept as history (status approved, with decided_at and decided_by); the credentials it carried are dropped. At least one role or scope is required: a member with no access could sign in and see nothing. Only a request in waiting_approval can be approved.
POST
/
api
/
v1
/
workspace
/
join-requests
/
{email}
/
approve
curl --request POST \
--url https://{subdomain}.mihu.ai/api/v1/workspace/join-requests/{email}/approve \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"roles": [
"loop_agent"
]
}
'{
"success": true,
"message": "Join request approved",
"data": {
"email": "jane@acme.com",
"name": "Jane Doe",
"status": "approved",
"decided_at": "2026-08-16T09:12:44+03:00",
"roles": [
{
"uuid": "22222222-2222-4222-8222-222222222222",
"key": "loop_agent",
"name": "Loop Agent"
}
],
"role_scopes": [
"loop.conversations.view",
"loop.conversations.reply"
],
"direct_scopes": [
"loop.calls.place"
],
"effective_scopes": [
"loop.conversations.view",
"loop.conversations.reply",
"loop.calls.place"
]
}
}Authorizations
Use a Bearer token to access these API endpoints. Example: "Bearer {your-token}"
Path Parameters
Applicant e-mail address, URL-encoded
Example:
"jane@acme.com"
Body
application/json
Response
Join request approved — the member now exists, with the access that was granted