Approve Apps
POST /v2/clients/{client_id}/apps/approvals
Approve one or more apps for the client. This operation is idempotent -- approving an already-approved app is treated as a success.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
client_id | string (uuid) | Unique identifier for the client organization |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
app_ids | string (uuid)[] | Yes | List of app IDs to approve |
Example Request Body
{
"app_ids": [
"f1a2b3c4-d5e6-7890-abcd-ef1234567890",
"g2b3c4d5-e6f7-8901-bcde-f12345678901",
"h3c4d5e6-f7a8-9012-cdef-234567890123"
]
}
Response
Returns status 200 OK with a bulk operation result.
| Field | Type | Description |
|---|---|---|
succeeded | string (uuid)[] | App IDs successfully approved (includes already-approved apps) |
failed | object[] | App IDs that failed with error details |
failed[].id | string (uuid) | The app ID that failed |
failed[].error | string | Reason for the failure |
All succeeded
{
"succeeded": [
"f1a2b3c4-d5e6-7890-abcd-ef1234567890",
"g2b3c4d5-e6f7-8901-bcde-f12345678901"
],
"failed": []
}
Partial success
{
"succeeded": [
"f1a2b3c4-d5e6-7890-abcd-ef1234567890"
],
"failed": [
{
"id": "ffffffff-ffff-ffff-ffff-ffffffffffff",
"error": "App not found"
}
]
}
Example Request
curl -X POST "https://api.example.com/v2/clients/aa7cf840-9ca9-46a3-9778-9015d6580d50/apps/approvals" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"app_ids": [
"f1a2b3c4-d5e6-7890-abcd-ef1234567890",
"g2b3c4d5-e6f7-8901-bcde-f12345678901"
]
}'
Error Responses
| Status | Description |
|---|---|
| 400 | Invalid request (missing app_ids, empty array, invalid uuid format) |
| 401 | Authentication required |
| 403 | Insufficient permissions for this client |
| 404 | Client not found |
| 500 | Server error |
Notes
Idempotency
Apps that are already approved are included in succeeded, not failed. The desired state is achieved regardless of how many times the request is sent.
When to use this vs PATCH
Use this endpoint for multi-select operations (e.g. approving 10 apps from a table). Use Update App for single-app updates from a detail view.
History side effect
Successful updates append approval_status_changed events to App History. These approval-generated events carry the approval state in structured metadata; free-text notes belong on Add App History Note.
Related Endpoints
- Remove App Approvals — Bulk remove app approvals
- Update App — Update approval on a single app
- App History — Read approval events and notes for a single app
- Add App History Note — Append a separate note to the app timeline
- List Apps — Filter by
is_approvedstatus