Skip to main content

Remove App Approvals

POST /clients/{client_id}/apps/approvals/remove

Remove approval from one or more apps for the client. This sets is_approved to false. This operation is idempotent -- removing approval from an already-unapproved app is treated as a success.

Path Parameters

ParameterTypeDescription
client_idstring (uuid)Unique identifier for the client organization

Request Body

FieldTypeRequiredDescription
app_idsstring (uuid)[]YesList of app IDs to remove approval from

Example Request Body

{
"app_ids": [
"f1a2b3c4-d5e6-7890-abcd-ef1234567890",
"g2b3c4d5-e6f7-8901-bcde-f12345678901"
]
}

Response

Returns status 200 OK with a bulk operation result.

FieldTypeDescription
succeededstring (uuid)[]App IDs successfully updated to unapproved (includes already-unapproved apps)
failedobject[]App IDs that failed with error details
failed[].idstring (uuid)The app ID that failed
failed[].errorstringReason 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/remove" \
-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

StatusDescription
400Invalid request (missing app_ids, empty array, invalid uuid format)
401Authentication required
403Insufficient permissions for this client
404Client not found
500Server error

Notes

Idempotency

Apps that are already unapproved are included in succeeded, not failed. The desired state is achieved regardless of prior state.

When to use this vs PATCH

Use this endpoint for multi-select operations (e.g. removing approval from several apps in 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.