curl --request GET \
--url https://{region}.api.plerion.com/v1/tenant/aws/access-grants \
--header 'Authorization: Bearer <token>'import requests
url = "https://{region}.api.plerion.com/v1/tenant/aws/access-grants"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{region}.api.plerion.com/v1/tenant/aws/access-grants', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{region}.api.plerion.com/v1/tenant/aws/access-grants",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{region}.api.plerion.com/v1/tenant/aws/access-grants"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{region}.api.plerion.com/v1/tenant/aws/access-grants")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{region}.api.plerion.com/v1/tenant/aws/access-grants")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "0f9a1c3e-5b7d-4c21-9e8f-2a6b4d10c7f3",
"organizationId": "dc16d897-7f52-4b73-be57-96c7c9a853da",
"tenantId": "42749bc1-c99b-4c2c-a081-a6cda9370081",
"integrationId": "458511a1-9bc2-4fce-97a0-0e3139588e6e",
"assetId": "prn:assets:458511a1-9bc2-4fce-97a0-0e3139588e6e:aws:s3:bucket:ap-southeast-2:acme-prod-exports",
"resourceType": "AWS::S3::Bucket",
"awsAccountId": "111122223333",
"region": "ap-southeast-2",
"assetName": "acme-prod-exports",
"service": "AWS::S3",
"grantType": "resource_policy_statement",
"mechanism": "resource_policy",
"principal": "arn:aws:iam::444455556666:root",
"principalType": "aws_account",
"principalLabel": "Vendor - External",
"principalDetail": null,
"principalAccountId": "444455556666",
"grantScope": "cross-org",
"grantOrigin": "external",
"allowedActions": [
"s3:GetObject",
"s3:ListBucket"
],
"allowedNotActions": null,
"conditions": {
"StringEquals": {
"aws:PrincipalOrgID": "o-abc123"
}
},
"blockedByRcp": false,
"rcpStatus": "not-applicable",
"hasRuntimeConditions": true,
"trustStatus": "untrusted",
"trustedUntil": "2027-01-31T00:00:00.000Z",
"trustLapseReason": "expired",
"grantee": "platform-team",
"reviewDecision": "keep",
"reviewComment": "Vendor export feed, contract renewed 2026-07",
"nextReviewAt": "2027-01-31T00:00:00.000Z",
"reviewedBy": "ci-audit-key (API key)",
"reviewedAt": "2026-07-20T05:41:09.000Z",
"reviewHistory": [
{
"reviewedBy": "my-api-key (API key)",
"reviewedAt": "2026-07-20T05:41:09.000Z",
"decision": "keep",
"grantee": "platform-team",
"comment": "Vendor export feed, contract renewed 2026-07",
"nextReviewAt": "2027-01-31T00:00:00.000Z",
"trustedUntil": "2027-01-31T00:00:00.000Z",
"trustLapseReason": "expired"
}
],
"firstObservedAt": "2026-05-14T02:11:47.000Z",
"lastObservedAt": "2026-07-28T01:03:12.000Z"
}
],
"meta": {
"perPage": 25,
"total": 412,
"cursor": "eyJmaXJzdE9ic2VydmVkQXQiOiIyMDI2LTAzLTAyVDIyOjA4OjAwLjAwMFoiLCJpZCI6IjZiMzFkODRhIn0="
}
}{
"errors": [
{
"field": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}{
"message": "Internal server error"
}List AWS access grants
Retrieve the tenant’s active access grants, ordered by firstObservedAt descending. Supports filtering by origin, trust status, scope, resource and review state, with cursor-based pagination.
curl --request GET \
--url https://{region}.api.plerion.com/v1/tenant/aws/access-grants \
--header 'Authorization: Bearer <token>'import requests
url = "https://{region}.api.plerion.com/v1/tenant/aws/access-grants"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{region}.api.plerion.com/v1/tenant/aws/access-grants', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{region}.api.plerion.com/v1/tenant/aws/access-grants",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{region}.api.plerion.com/v1/tenant/aws/access-grants"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{region}.api.plerion.com/v1/tenant/aws/access-grants")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{region}.api.plerion.com/v1/tenant/aws/access-grants")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "0f9a1c3e-5b7d-4c21-9e8f-2a6b4d10c7f3",
"organizationId": "dc16d897-7f52-4b73-be57-96c7c9a853da",
"tenantId": "42749bc1-c99b-4c2c-a081-a6cda9370081",
"integrationId": "458511a1-9bc2-4fce-97a0-0e3139588e6e",
"assetId": "prn:assets:458511a1-9bc2-4fce-97a0-0e3139588e6e:aws:s3:bucket:ap-southeast-2:acme-prod-exports",
"resourceType": "AWS::S3::Bucket",
"awsAccountId": "111122223333",
"region": "ap-southeast-2",
"assetName": "acme-prod-exports",
"service": "AWS::S3",
"grantType": "resource_policy_statement",
"mechanism": "resource_policy",
"principal": "arn:aws:iam::444455556666:root",
"principalType": "aws_account",
"principalLabel": "Vendor - External",
"principalDetail": null,
"principalAccountId": "444455556666",
"grantScope": "cross-org",
"grantOrigin": "external",
"allowedActions": [
"s3:GetObject",
"s3:ListBucket"
],
"allowedNotActions": null,
"conditions": {
"StringEquals": {
"aws:PrincipalOrgID": "o-abc123"
}
},
"blockedByRcp": false,
"rcpStatus": "not-applicable",
"hasRuntimeConditions": true,
"trustStatus": "untrusted",
"trustedUntil": "2027-01-31T00:00:00.000Z",
"trustLapseReason": "expired",
"grantee": "platform-team",
"reviewDecision": "keep",
"reviewComment": "Vendor export feed, contract renewed 2026-07",
"nextReviewAt": "2027-01-31T00:00:00.000Z",
"reviewedBy": "ci-audit-key (API key)",
"reviewedAt": "2026-07-20T05:41:09.000Z",
"reviewHistory": [
{
"reviewedBy": "my-api-key (API key)",
"reviewedAt": "2026-07-20T05:41:09.000Z",
"decision": "keep",
"grantee": "platform-team",
"comment": "Vendor export feed, contract renewed 2026-07",
"nextReviewAt": "2027-01-31T00:00:00.000Z",
"trustedUntil": "2027-01-31T00:00:00.000Z",
"trustLapseReason": "expired"
}
],
"firstObservedAt": "2026-05-14T02:11:47.000Z",
"lastObservedAt": "2026-07-28T01:03:12.000Z"
}
],
"meta": {
"perPage": 25,
"total": 412,
"cursor": "eyJmaXJzdE9ic2VydmVkQXQiOiIyMDI2LTAzLTAyVDIyOjA4OjAwLjAwMFoiLCJpZCI6IjZiMzFkODRhIn0="
}
}{
"errors": [
{
"field": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}{
"message": "Internal server error"
}Authorizations
Bearer API Key. For example, "Bearer {Tenant API Key}"
Headers
Bearer API Key. For example, "Bearer {Tenant API Key}"
Query Parameters
Filter by whether the principal is outside your AWS organization or inside it. Accepts a single value.
Available options: external, internal
"external"
Filter by trust status. Accepts a comma-separated list. Grants that have not been evaluated have no trust status and are excluded by this filter.
Available options: trusted, untrusted
"trusted,untrusted"
Filter by trust-boundary relationship. Accepts a comma-separated list.
Available options: cross-org, federated, public, same-account, same-org, aws-service
"cross-org,public"
Filter by the mechanism granting the access. Accepts a comma-separated list.
Available options: resource_policy, trust_policy, ram_share, attribute_share
"resource_policy,trust_policy"
Filter by what the principal is. Accepts a comma-separated list.
Available options: aws_account, aws_role, aws_user, public, conditional, aws_org, oidc, saml, cognito_identity, canonical_user, external_idp, aws_service, aws_support
"aws_account,public"
Filter by the CloudFormation resource type of the granting resource. Accepts a comma-separated list.
"AWS::S3::Bucket,AWS::IAM::Role"
Filter by integration IDs. Accepts a comma-separated list of UUIDs.
"458511a1-9bc2-4fce-97a0-0e3139588e6e"
Filter by the AWS account owning the granting resource. Accepts a comma-separated list of 12-digit account IDs.
"111122223333"
Filter by the AWS account of the principal. Accepts a comma-separated list of 12-digit account IDs.
"444455556666"
Filter to grants whose resource name or asset ID contains this value. Case-insensitive substring match, maximum 256 characters.
256"acme-prod"
Filter to grants whose principal contains this value. Case-insensitive substring match, maximum 256 characters.
256"444455556666"
Filter to grants where the principal, resource name, principal name or asset ID contains this value. Case-insensitive substring match, maximum 256 characters.
256"vendor"
Filter to specific grant IDs. Accepts a comma-separated list of UUIDs. Use this to re-fetch grants whose IDs you already hold.
"0f9a1c3e-5b7d-4c21-9e8f-2a6b4d10c7f3"
Filter by recorded review decision. Accepts a comma-separated list of keep, remove, review_later and trust_until_review. Grants with no decision recorded are excluded, so this cannot be used to find unreviewed grants.
"keep,review_later"
Filter to grants whose recorded grantee contains this value. Case-insensitive substring match, maximum 256 characters.
256"platform-team"
Filter to grants due for review by this date. Inclusive upper bound on nextReviewAt; a grant with no next-review date set is not due and is excluded.
"2026-09-15T00:00:00.000Z"
Get the next page of access grants. Pass the meta.cursor value from the previous response.
"eyJmaXJzdE9ic2VydmVkQXQiOiIyMDI2LTAzLTAyVDIyOjA4OjAwLjAwMFoiLCJpZCI6IjZiMzFkODRhIn0="
Number of items per page, from 1 to 1000. Defaults to 100. A value above 1000 is rejected with a 400.
1 <= x <= 100050
Was this page helpful?