# Reviewed Access grants 4 management API operations. - [GET /v1/institutions/{institution_id}/access-grant-reviews](/docs/api/operations/list_scoped_v1_institutions__institution_id__access_grant_reviews_get): List exact Access grant reviews and candidates - [POST /v1/institutions/{institution_id}/access-grant-reviews](/docs/api/operations/propose_v1_institutions__institution_id__access_grant_reviews_post): Propose independent review of one Access version - [POST /v1/institutions/{institution_id}/access-grant-reviews/{review_id}/approve](/docs/api/operations/approve_v1_institutions__institution_id__access_grant_reviews__review_id__approve_post): Independently approve an exact Access review - [POST /v1/institutions/{institution_id}/access-grant-reviews/{review_id}/revoke](/docs/api/operations/revoke_v1_institutions__institution_id__access_grant_reviews__review_id__revoke_post): Revoke a reviewed Access decision ## GET /v1/institutions/{institution_id}/access-grant-reviews List exact Access grant reviews and candidates Requires a current actual Institution Sponsor or effective administrator with active membership. Current validity and product acknowledgement are read-time facts, not assignment authority. Authentication: bearer access token with audience `taifa-management`. Endpoint roles and eligibility are reviewed separately from the OpenAPI bearer scheme. No operation-specific scopes are declared in the OpenAPI document. Bearer authentication and endpoint authorization requirements still apply. ### Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `institution_id` | path | string | Yes | | ### Request body This operation has no request body. ### Responses #### 200 Successful Response | Field | Variant | Type | Required | Description | | --- | --- | --- | --- | --- | | `institution` | | InstitutionDisplay | Yes | | | `reviews` | | GrantReviewRead[] | Yes | | | `candidates` | | GrantCandidate[] | Yes | | | `_actions` | | propose[] | Yes | | #### 422 Validation Error | Field | Variant | Type | Required | Description | | --- | --- | --- | --- | --- | | `detail` | | ValidationError[] | No | | ### Request examples Illustrative only. Replace placeholders and keep management tokens on the server. #### cURL ```sh curl -X GET 'https://YOUR_IDENTITY_HOST/v1/institutions/REPLACE_WITH_INSTITUTION_ID/access-grant-reviews' \ -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' ``` #### TypeScript (Node.js/server-side) ```typescript const response = await fetch('https://YOUR_IDENTITY_HOST/v1/institutions/REPLACE_WITH_INSTITUTION_ID/access-grant-reviews', { method: 'GET', headers: { Authorization: `Bearer ${process.env.TAIFA_MANAGEMENT_TOKEN}` } }); const result = await response.json(); ``` #### Python ```python import os import requests response = requests.request( 'GET', 'https://YOUR_IDENTITY_HOST/v1/institutions/REPLACE_WITH_INSTITUTION_ID/access-grant-reviews', headers={'Authorization': 'Bearer ' + os.environ['TAIFA_MANAGEMENT_TOKEN']} ) response.raise_for_status() ``` ### Response example ```json { "_actions": [ "propose" ], "candidates": [], "institution": { "id": "00000000-0000-4000-8000-000000000030", "name": "Synthetic institution" }, "reviews": [] } ``` [Request and response examples](/docs/api/operations/list_scoped_v1_institutions__institution_id__access_grant_reviews_get) ## POST /v1/institutions/{institution_id}/access-grant-reviews Propose independent review of one Access version A current actual Sponsor proposes the exact active Access version. The accepted receipt records no issuer assignment. Exact idempotency replay returns the original receipt. Authentication: bearer access token with audience `taifa-management`. Endpoint roles and eligibility are reviewed separately from the OpenAPI bearer scheme. No operation-specific scopes are declared in the OpenAPI document. Bearer authentication and endpoint authorization requirements still apply. ### Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `institution_id` | path | string | Yes | | | `idempotency-key` | header | string | Yes | | ### Request body #### application/json Required; GrantProposal | Field | Variant | Type | Required | Description | | --- | --- | --- | --- | --- | | `reason` | | string | Yes | Validation: min length 8; max length 500 | | `access_id` | | string | Yes | Validation: min length 1; max length 200 | | `access_version` | | integer | Yes | Validation: minimum 1; maximum 9223372036854775807 | ### Responses #### 201 Successful Response | Field | Variant | Type | Required | Description | | --- | --- | --- | --- | --- | | `id` | | string | Yes | | | `status` | | pending_review \| approved \| revoked \| superseded | Yes | | | `access_id` | | string | Yes | | | `access_version` | | integer | Yes | | | `project_id` | | string | Yes | | | `beneficiary_person_id` | | string | Yes | | | `beneficiary_issuer` | | string | Yes | | | `beneficiary_subject` | | string | Yes | | | `beneficiary_person_version` | | integer | Yes | | | `beneficiary_membership_id` | | string | Yes | | | `beneficiary_membership_version` | | integer | Yes | | | `event_id` | | string | Yes | | | `event_sequence` | | integer | Yes | | | `event_digest` | | string | Yes | | | `source_request_id` | | string \| null | Yes | | | `sponsor_id` | | string | Yes | | | `sponsor_generation` | | integer | Yes | | | `sponsor_actor` | | string | Yes | | | `sponsor_person_id` | | string | Yes | | | `sponsor_person_version` | | integer | Yes | | | `sponsor_membership_id` | | string | Yes | | | `sponsor_membership_version` | | integer | Yes | | | `sponsor_fingerprint` | | string | Yes | | | `sponsor_audit_id` | | string | Yes | | | `sponsor_operation` | | string | Yes | | | `sponsor_target` | | string | Yes | | | `administrator_proposal_id` | | string \| null | Yes | | | `administrator_generation` | | integer \| null | Yes | | | `administrator_actor` | | string \| null | Yes | | | `administrator_person_id` | | string \| null | Yes | | | `administrator_person_version` | | integer \| null | Yes | | | `administrator_membership_id` | | string \| null | Yes | | | `administrator_membership_version` | | integer \| null | Yes | | | `approved_fingerprint` | | string \| null | Yes | | | `administrator_audit_id` | | string \| null | Yes | | | `administrator_operation` | | string \| null | Yes | | | `administrator_target` | | string \| null | Yes | | | `created_at` | | string | Yes | | | `expires_at` | | string | Yes | | #### 422 Validation Error | Field | Variant | Type | Required | Description | | --- | --- | --- | --- | --- | | `detail` | | ValidationError[] | No | | ### Request examples Illustrative only. Replace placeholders and keep management tokens on the server. #### cURL ```sh curl -X POST 'https://YOUR_IDENTITY_HOST/v1/institutions/REPLACE_WITH_INSTITUTION_ID/access-grant-reviews' \ -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \ -H 'idempotency-key: REPLACE_WITH_IDEMPOTENCY_KEY' \ -H 'Content-Type: application/json' \ --data '{ "access_id": "00000000-0000-4000-8000-000000000001", "access_version": 1, "reason": "Request independent review of current case access" }' ``` #### TypeScript (Node.js/server-side) ```typescript const response = await fetch('https://YOUR_IDENTITY_HOST/v1/institutions/REPLACE_WITH_INSTITUTION_ID/access-grant-reviews', { method: 'POST', headers: { Authorization: `Bearer ${process.env.TAIFA_MANAGEMENT_TOKEN}`, 'idempotency-key': 'REPLACE_WITH_IDEMPOTENCY_KEY', 'Content-Type': 'application/json' }, body: JSON.stringify({ "access_id": "00000000-0000-4000-8000-000000000001", "access_version": 1, "reason": "Request independent review of current case access" }) }); const result = await response.json(); ``` #### Python ```python import os import json import requests response = requests.request( 'POST', 'https://YOUR_IDENTITY_HOST/v1/institutions/REPLACE_WITH_INSTITUTION_ID/access-grant-reviews', headers={'Authorization': 'Bearer ' + os.environ['TAIFA_MANAGEMENT_TOKEN'], 'idempotency-key': 'REPLACE_WITH_IDEMPOTENCY_KEY'}, json=json.loads('{"access_id":"00000000-0000-4000-8000-000000000001","access_version":1,"reason":"Request independent review of current case access"}') ) response.raise_for_status() ``` ### Response example ```json { "access_id": "00000000-0000-4000-8000-000000000011", "access_version": 2, "administrator_actor": "https://people.example.test|synthetic-administrator", "administrator_audit_id": "00000000-0000-4000-8000-000000000023", "administrator_generation": 2, "administrator_membership_id": "00000000-0000-4000-8000-000000000022", "administrator_membership_version": 1, "administrator_operation": "access-grant-review.approve:institution:review", "administrator_person_id": "00000000-0000-4000-8000-000000000021", "administrator_person_version": 2, "administrator_proposal_id": "00000000-0000-4000-8000-000000000020", "administrator_target": "00000000-0000-4000-8000-000000000010", "approved_fingerprint": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "beneficiary_issuer": "https://people.example.test", "beneficiary_membership_id": "00000000-0000-4000-8000-000000000014", "beneficiary_membership_version": 1, "beneficiary_person_id": "00000000-0000-4000-8000-000000000013", "beneficiary_person_version": 1, "beneficiary_subject": "synthetic-holder", "created_at": "2026-10-04T10:00:00+00:00", "event_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "event_id": "00000000-0000-4000-8000-000000000015", "event_sequence": 7, "expires_at": "2027-01-02T10:00:00+00:00", "id": "00000000-0000-4000-8000-000000000010", "project_id": "00000000-0000-4000-8000-000000000012", "sponsor_actor": "https://people.example.test|synthetic-sponsor", "sponsor_audit_id": "00000000-0000-4000-8000-000000000019", "sponsor_fingerprint": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "sponsor_generation": 3, "sponsor_id": "00000000-0000-4000-8000-000000000016", "sponsor_membership_id": "00000000-0000-4000-8000-000000000018", "sponsor_membership_version": 2, "sponsor_operation": "access-grant-review.propose:institution:access", "sponsor_person_id": "00000000-0000-4000-8000-000000000017", "sponsor_person_version": 2, "sponsor_target": "00000000-0000-4000-8000-000000000010", "status": "approved" } ``` [Request and response examples](/docs/api/operations/propose_v1_institutions__institution_id__access_grant_reviews_post) ## POST /v1/institutions/{institution_id}/access-grant-reviews/{review_id}/approve Independently approve an exact Access review A distinct current effective administrator approves the locked Sponsor decision and exact grant Event. Dynamic validity is available from the scoped list. Authentication: bearer access token with audience `taifa-management`. Endpoint roles and eligibility are reviewed separately from the OpenAPI bearer scheme. No operation-specific scopes are declared in the OpenAPI document. Bearer authentication and endpoint authorization requirements still apply. ### Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `institution_id` | path | string | Yes | | | `review_id` | path | string | Yes | | | `idempotency-key` | header | string | Yes | | ### Request body #### application/json Required; identity__access_grant_review_router__Reason | Field | Variant | Type | Required | Description | | --- | --- | --- | --- | --- | | `reason` | | string | Yes | Validation: min length 8; max length 500 | ### Responses #### 200 Successful Response | Field | Variant | Type | Required | Description | | --- | --- | --- | --- | --- | | `id` | | string | Yes | | | `status` | | pending_review \| approved \| revoked \| superseded | Yes | | | `access_id` | | string | Yes | | | `access_version` | | integer | Yes | | | `project_id` | | string | Yes | | | `beneficiary_person_id` | | string | Yes | | | `beneficiary_issuer` | | string | Yes | | | `beneficiary_subject` | | string | Yes | | | `beneficiary_person_version` | | integer | Yes | | | `beneficiary_membership_id` | | string | Yes | | | `beneficiary_membership_version` | | integer | Yes | | | `event_id` | | string | Yes | | | `event_sequence` | | integer | Yes | | | `event_digest` | | string | Yes | | | `source_request_id` | | string \| null | Yes | | | `sponsor_id` | | string | Yes | | | `sponsor_generation` | | integer | Yes | | | `sponsor_actor` | | string | Yes | | | `sponsor_person_id` | | string | Yes | | | `sponsor_person_version` | | integer | Yes | | | `sponsor_membership_id` | | string | Yes | | | `sponsor_membership_version` | | integer | Yes | | | `sponsor_fingerprint` | | string | Yes | | | `sponsor_audit_id` | | string | Yes | | | `sponsor_operation` | | string | Yes | | | `sponsor_target` | | string | Yes | | | `administrator_proposal_id` | | string \| null | Yes | | | `administrator_generation` | | integer \| null | Yes | | | `administrator_actor` | | string \| null | Yes | | | `administrator_person_id` | | string \| null | Yes | | | `administrator_person_version` | | integer \| null | Yes | | | `administrator_membership_id` | | string \| null | Yes | | | `administrator_membership_version` | | integer \| null | Yes | | | `approved_fingerprint` | | string \| null | Yes | | | `administrator_audit_id` | | string \| null | Yes | | | `administrator_operation` | | string \| null | Yes | | | `administrator_target` | | string \| null | Yes | | | `created_at` | | string | Yes | | | `expires_at` | | string | Yes | | #### 422 Validation Error | Field | Variant | Type | Required | Description | | --- | --- | --- | --- | --- | | `detail` | | ValidationError[] | No | | ### Request examples Illustrative only. Replace placeholders and keep management tokens on the server. #### cURL ```sh curl -X POST 'https://YOUR_IDENTITY_HOST/v1/institutions/REPLACE_WITH_INSTITUTION_ID/access-grant-reviews/REPLACE_WITH_REVIEW_ID/approve' \ -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \ -H 'idempotency-key: REPLACE_WITH_IDEMPOTENCY_KEY' \ -H 'Content-Type: application/json' \ --data '{ "reason": "Approve independently reviewed current access" }' ``` #### TypeScript (Node.js/server-side) ```typescript const response = await fetch('https://YOUR_IDENTITY_HOST/v1/institutions/REPLACE_WITH_INSTITUTION_ID/access-grant-reviews/REPLACE_WITH_REVIEW_ID/approve', { method: 'POST', headers: { Authorization: `Bearer ${process.env.TAIFA_MANAGEMENT_TOKEN}`, 'idempotency-key': 'REPLACE_WITH_IDEMPOTENCY_KEY', 'Content-Type': 'application/json' }, body: JSON.stringify({ "reason": "Approve independently reviewed current access" }) }); const result = await response.json(); ``` #### Python ```python import os import json import requests response = requests.request( 'POST', 'https://YOUR_IDENTITY_HOST/v1/institutions/REPLACE_WITH_INSTITUTION_ID/access-grant-reviews/REPLACE_WITH_REVIEW_ID/approve', headers={'Authorization': 'Bearer ' + os.environ['TAIFA_MANAGEMENT_TOKEN'], 'idempotency-key': 'REPLACE_WITH_IDEMPOTENCY_KEY'}, json=json.loads('{"reason":"Approve independently reviewed current access"}') ) response.raise_for_status() ``` ### Response example ```json { "access_id": "00000000-0000-4000-8000-000000000011", "access_version": 2, "administrator_actor": "https://people.example.test|synthetic-administrator", "administrator_audit_id": "00000000-0000-4000-8000-000000000023", "administrator_generation": 2, "administrator_membership_id": "00000000-0000-4000-8000-000000000022", "administrator_membership_version": 1, "administrator_operation": "access-grant-review.approve:institution:review", "administrator_person_id": "00000000-0000-4000-8000-000000000021", "administrator_person_version": 2, "administrator_proposal_id": "00000000-0000-4000-8000-000000000020", "administrator_target": "00000000-0000-4000-8000-000000000010", "approved_fingerprint": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "beneficiary_issuer": "https://people.example.test", "beneficiary_membership_id": "00000000-0000-4000-8000-000000000014", "beneficiary_membership_version": 1, "beneficiary_person_id": "00000000-0000-4000-8000-000000000013", "beneficiary_person_version": 1, "beneficiary_subject": "synthetic-holder", "created_at": "2026-10-04T10:00:00+00:00", "event_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "event_id": "00000000-0000-4000-8000-000000000015", "event_sequence": 7, "expires_at": "2027-01-02T10:00:00+00:00", "id": "00000000-0000-4000-8000-000000000010", "project_id": "00000000-0000-4000-8000-000000000012", "sponsor_actor": "https://people.example.test|synthetic-sponsor", "sponsor_audit_id": "00000000-0000-4000-8000-000000000019", "sponsor_fingerprint": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "sponsor_generation": 3, "sponsor_id": "00000000-0000-4000-8000-000000000016", "sponsor_membership_id": "00000000-0000-4000-8000-000000000018", "sponsor_membership_version": 2, "sponsor_operation": "access-grant-review.propose:institution:access", "sponsor_person_id": "00000000-0000-4000-8000-000000000017", "sponsor_person_version": 2, "sponsor_target": "00000000-0000-4000-8000-000000000010", "status": "approved" } ``` [Request and response examples](/docs/api/operations/approve_v1_institutions__institution_id__access_grant_reviews__review_id__approve_post) ## POST /v1/institutions/{institution_id}/access-grant-reviews/{review_id}/revoke Revoke a reviewed Access decision Retains the immutable decision evidence while ending its review authority. It does not change the underlying Access grant. Authentication: bearer access token with audience `taifa-management`. Endpoint roles and eligibility are reviewed separately from the OpenAPI bearer scheme. No operation-specific scopes are declared in the OpenAPI document. Bearer authentication and endpoint authorization requirements still apply. ### Parameters | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | `institution_id` | path | string | Yes | | | `review_id` | path | string | Yes | | | `idempotency-key` | header | string | Yes | | ### Request body #### application/json Required; identity__access_grant_review_router__Reason | Field | Variant | Type | Required | Description | | --- | --- | --- | --- | --- | | `reason` | | string | Yes | Validation: min length 8; max length 500 | ### Responses #### 200 Successful Response | Field | Variant | Type | Required | Description | | --- | --- | --- | --- | --- | | `id` | | string | Yes | | | `status` | | pending_review \| approved \| revoked \| superseded | Yes | | | `access_id` | | string | Yes | | | `access_version` | | integer | Yes | | | `project_id` | | string | Yes | | | `beneficiary_person_id` | | string | Yes | | | `beneficiary_issuer` | | string | Yes | | | `beneficiary_subject` | | string | Yes | | | `beneficiary_person_version` | | integer | Yes | | | `beneficiary_membership_id` | | string | Yes | | | `beneficiary_membership_version` | | integer | Yes | | | `event_id` | | string | Yes | | | `event_sequence` | | integer | Yes | | | `event_digest` | | string | Yes | | | `source_request_id` | | string \| null | Yes | | | `sponsor_id` | | string | Yes | | | `sponsor_generation` | | integer | Yes | | | `sponsor_actor` | | string | Yes | | | `sponsor_person_id` | | string | Yes | | | `sponsor_person_version` | | integer | Yes | | | `sponsor_membership_id` | | string | Yes | | | `sponsor_membership_version` | | integer | Yes | | | `sponsor_fingerprint` | | string | Yes | | | `sponsor_audit_id` | | string | Yes | | | `sponsor_operation` | | string | Yes | | | `sponsor_target` | | string | Yes | | | `administrator_proposal_id` | | string \| null | Yes | | | `administrator_generation` | | integer \| null | Yes | | | `administrator_actor` | | string \| null | Yes | | | `administrator_person_id` | | string \| null | Yes | | | `administrator_person_version` | | integer \| null | Yes | | | `administrator_membership_id` | | string \| null | Yes | | | `administrator_membership_version` | | integer \| null | Yes | | | `approved_fingerprint` | | string \| null | Yes | | | `administrator_audit_id` | | string \| null | Yes | | | `administrator_operation` | | string \| null | Yes | | | `administrator_target` | | string \| null | Yes | | | `created_at` | | string | Yes | | | `expires_at` | | string | Yes | | #### 422 Validation Error | Field | Variant | Type | Required | Description | | --- | --- | --- | --- | --- | | `detail` | | ValidationError[] | No | | ### Request examples Illustrative only. Replace placeholders and keep management tokens on the server. #### cURL ```sh curl -X POST 'https://YOUR_IDENTITY_HOST/v1/institutions/REPLACE_WITH_INSTITUTION_ID/access-grant-reviews/REPLACE_WITH_REVIEW_ID/revoke' \ -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \ -H 'idempotency-key: REPLACE_WITH_IDEMPOTENCY_KEY' \ -H 'Content-Type: application/json' \ --data '{ "reason": "Approve independently reviewed current access" }' ``` #### TypeScript (Node.js/server-side) ```typescript const response = await fetch('https://YOUR_IDENTITY_HOST/v1/institutions/REPLACE_WITH_INSTITUTION_ID/access-grant-reviews/REPLACE_WITH_REVIEW_ID/revoke', { method: 'POST', headers: { Authorization: `Bearer ${process.env.TAIFA_MANAGEMENT_TOKEN}`, 'idempotency-key': 'REPLACE_WITH_IDEMPOTENCY_KEY', 'Content-Type': 'application/json' }, body: JSON.stringify({ "reason": "Approve independently reviewed current access" }) }); const result = await response.json(); ``` #### Python ```python import os import json import requests response = requests.request( 'POST', 'https://YOUR_IDENTITY_HOST/v1/institutions/REPLACE_WITH_INSTITUTION_ID/access-grant-reviews/REPLACE_WITH_REVIEW_ID/revoke', headers={'Authorization': 'Bearer ' + os.environ['TAIFA_MANAGEMENT_TOKEN'], 'idempotency-key': 'REPLACE_WITH_IDEMPOTENCY_KEY'}, json=json.loads('{"reason":"Approve independently reviewed current access"}') ) response.raise_for_status() ``` ### Response example ```json { "access_id": "00000000-0000-4000-8000-000000000011", "access_version": 2, "administrator_actor": "https://people.example.test|synthetic-administrator", "administrator_audit_id": "00000000-0000-4000-8000-000000000023", "administrator_generation": 2, "administrator_membership_id": "00000000-0000-4000-8000-000000000022", "administrator_membership_version": 1, "administrator_operation": "access-grant-review.approve:institution:review", "administrator_person_id": "00000000-0000-4000-8000-000000000021", "administrator_person_version": 2, "administrator_proposal_id": "00000000-0000-4000-8000-000000000020", "administrator_target": "00000000-0000-4000-8000-000000000010", "approved_fingerprint": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "beneficiary_issuer": "https://people.example.test", "beneficiary_membership_id": "00000000-0000-4000-8000-000000000014", "beneficiary_membership_version": 1, "beneficiary_person_id": "00000000-0000-4000-8000-000000000013", "beneficiary_person_version": 1, "beneficiary_subject": "synthetic-holder", "created_at": "2026-10-04T10:00:00+00:00", "event_digest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "event_id": "00000000-0000-4000-8000-000000000015", "event_sequence": 7, "expires_at": "2027-01-02T10:00:00+00:00", "id": "00000000-0000-4000-8000-000000000010", "project_id": "00000000-0000-4000-8000-000000000012", "sponsor_actor": "https://people.example.test|synthetic-sponsor", "sponsor_audit_id": "00000000-0000-4000-8000-000000000019", "sponsor_fingerprint": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "sponsor_generation": 3, "sponsor_id": "00000000-0000-4000-8000-000000000016", "sponsor_membership_id": "00000000-0000-4000-8000-000000000018", "sponsor_membership_version": 2, "sponsor_operation": "access-grant-review.propose:institution:access", "sponsor_person_id": "00000000-0000-4000-8000-000000000017", "sponsor_person_version": 2, "sponsor_target": "00000000-0000-4000-8000-000000000010", "status": "approved" } ``` [Request and response examples](/docs/api/operations/revoke_v1_institutions__institution_id__access_grant_reviews__review_id__revoke_post)