Hadrian is experimental alpha software. Do not use in production.
Hadrian

Access reviews

Access review reports for compliance requirements (SOC 2, ISO 27001). View user access across organizations, projects, and API keys.

Get access inventory for compliance reviews

GET
/admin/v1/access-reviews/inventory
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Query Parameters

org_id?string|null

Filter by organization ID

Formatuuid
limit?integer

Maximum number of users to return (default: 100, max: 1000)

Default100
Formatint64
Rangevalue <= 1000
offset?integer

Offset for pagination

Default0
Formatint64
format?ExportFormat

Export format (json or csv)

Default"json"

Response Body

application/json

application/json

curl -X GET "https://loading/admin/v1/access-reviews/inventory"
{
  "generated_at": "2019-08-24T14:15:22Z",
  "summary": {
    "total_active_api_keys": 0,
    "total_org_memberships": 0,
    "total_organizations": 0,
    "total_project_memberships": 0,
    "total_projects": 0
  },
  "total_users": 0,
  "users": [
    {
      "api_key_summary": {
        "active_count": 0,
        "expired_count": 0,
        "revoked_count": 0,
        "total_count": 0
      },
      "created_at": "2019-08-24T14:15:22Z",
      "email": "string",
      "external_id": "string",
      "last_activity_at": "2019-08-24T14:15:22Z",
      "name": "string",
      "organizations": [
        {
          "granted_at": "2019-08-24T14:15:22Z",
          "org_id": "a40f5d1f-d889-42e9-94ea-b9b33585fc6b",
          "org_name": "string",
          "org_slug": "string",
          "role": "string"
        }
      ],
      "projects": [
        {
          "granted_at": "2019-08-24T14:15:22Z",
          "org_id": "a40f5d1f-d889-42e9-94ea-b9b33585fc6b",
          "org_slug": "string",
          "project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9",
          "project_name": "string",
          "project_slug": "string",
          "role": "string"
        }
      ],
      "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5"
    }
  ]
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}

Detect stale access across the system

GET
/admin/v1/access-reviews/stale
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Query Parameters

inactive_days?integer

Number of days of inactivity to consider access stale (default: 90)

Default90
Formatint64
Range1 <= value <= 365
org_id?string|null

Filter by organization ID

Formatuuid
limit?integer

Maximum number of results to return (default: 100, max: 1000)

Default100
Formatint64
Rangevalue <= 1000
format?ExportFormat

Export format (json or csv)

Default"json"

Response Body

application/json

application/json

curl -X GET "https://loading/admin/v1/access-reviews/stale"
{
  "cutoff_date": "2019-08-24T14:15:22Z",
  "generated_at": "2019-08-24T14:15:22Z",
  "inactive_days_threshold": 0,
  "never_active_users": [
    {
      "active_api_keys": 0,
      "created_at": "2019-08-24T14:15:22Z",
      "days_since_creation": 0,
      "email": "string",
      "external_id": "string",
      "name": "string",
      "org_count": 0,
      "project_count": 0,
      "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5"
    }
  ],
  "stale_api_keys": [
    {
      "created_at": "2019-08-24T14:15:22Z",
      "days_inactive": 0,
      "key_id": "1e779c8a-6786-4c89-b7c3-a6666f5fd6b5",
      "key_prefix": "string",
      "last_used_at": "2019-08-24T14:15:22Z",
      "name": "string",
      "never_used": true,
      "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
      "owner_type": "string"
    }
  ],
  "stale_users": [
    {
      "active_api_keys": 0,
      "created_at": "2019-08-24T14:15:22Z",
      "days_inactive": 0,
      "email": "string",
      "external_id": "string",
      "last_activity_at": "2019-08-24T14:15:22Z",
      "name": "string",
      "org_count": 0,
      "project_count": 0,
      "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5"
    }
  ],
  "summary": {
    "never_active_users_count": 0,
    "never_used_api_keys_count": 0,
    "stale_api_keys_count": 0,
    "stale_users_count": 0,
    "total_api_keys_scanned": 0,
    "total_users_scanned": 0
  }
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}

Get access report for a specific organization

GET
/admin/v1/organizations/{org_slug}/access-report
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Path Parameters

org_slug*string

Organization slug

Query Parameters

format?ExportFormat

Export format (json or csv)

Default"json"

Response Body

application/json

application/json

application/json

curl -X GET "https://loading/admin/v1/organizations/string/access-report"
{
  "access_history": [
    {
      "action": "string",
      "actor_id": "04f37679-bfbf-4906-b749-01756515cecf",
      "actor_type": "string",
      "details": null,
      "log_id": "14b5977f-7a80-40ca-bb79-eca6c2abdb34",
      "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
      "resource_type": "string",
      "timestamp": "2019-08-24T14:15:22Z"
    }
  ],
  "api_keys": [
    {
      "created_at": "2019-08-24T14:15:22Z",
      "expires_at": "2019-08-24T14:15:22Z",
      "is_active": true,
      "key_id": "1e779c8a-6786-4c89-b7c3-a6666f5fd6b5",
      "key_prefix": "string",
      "last_used_at": "2019-08-24T14:15:22Z",
      "name": "string",
      "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
      "owner_type": "string",
      "project_slug": "string",
      "revoked_at": "2019-08-24T14:15:22Z",
      "user_email": "string",
      "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5"
    }
  ],
  "generated_at": "2019-08-24T14:15:22Z",
  "members": [
    {
      "api_key_summary": {
        "active_count": 0,
        "expired_count": 0,
        "revoked_count": 0,
        "total_count": 0
      },
      "email": "string",
      "external_id": "string",
      "granted_at": "2019-08-24T14:15:22Z",
      "last_activity_at": "2019-08-24T14:15:22Z",
      "name": "string",
      "project_access": [
        {
          "granted_at": "2019-08-24T14:15:22Z",
          "project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9",
          "project_name": "string",
          "project_slug": "string",
          "role": "string"
        }
      ],
      "role": "string",
      "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5"
    }
  ],
  "org_id": "a40f5d1f-d889-42e9-94ea-b9b33585fc6b",
  "org_name": "string",
  "org_slug": "string",
  "summary": {
    "active_api_keys": 0,
    "revoked_api_keys": 0,
    "total_members": 0,
    "total_project_memberships": 0,
    "total_projects": 0
  }
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}

Get access summary for a specific user

GET
/admin/v1/users/{user_id}/access-summary
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Path Parameters

user_id*string

User ID

Formatuuid

Query Parameters

format?ExportFormat

Export format (json or csv)

Default"json"

Response Body

application/json

application/json

application/json

curl -X GET "https://loading/admin/v1/users/497f6eca-6276-4993-bfeb-53cbbbba6f08/access-summary"
{
  "api_keys": [
    {
      "created_at": "2019-08-24T14:15:22Z",
      "expires_at": "2019-08-24T14:15:22Z",
      "is_active": true,
      "key_id": "1e779c8a-6786-4c89-b7c3-a6666f5fd6b5",
      "key_prefix": "string",
      "last_used_at": "2019-08-24T14:15:22Z",
      "name": "string",
      "owner_id": "8826ee2e-7933-4665-aef2-2393f84a0d05",
      "owner_type": "string",
      "revoked_at": "2019-08-24T14:15:22Z"
    }
  ],
  "created_at": "2019-08-24T14:15:22Z",
  "email": "string",
  "external_id": "string",
  "generated_at": "2019-08-24T14:15:22Z",
  "last_activity_at": "2019-08-24T14:15:22Z",
  "name": "string",
  "organizations": [
    {
      "granted_at": "2019-08-24T14:15:22Z",
      "last_activity_at": "2019-08-24T14:15:22Z",
      "org_id": "a40f5d1f-d889-42e9-94ea-b9b33585fc6b",
      "org_name": "string",
      "org_slug": "string",
      "role": "string"
    }
  ],
  "projects": [
    {
      "granted_at": "2019-08-24T14:15:22Z",
      "last_activity_at": "2019-08-24T14:15:22Z",
      "org_id": "a40f5d1f-d889-42e9-94ea-b9b33585fc6b",
      "org_slug": "string",
      "project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9",
      "project_name": "string",
      "project_slug": "string",
      "role": "string"
    }
  ],
  "summary": {
    "active_api_keys": 0,
    "expired_api_keys": 0,
    "revoked_api_keys": 0,
    "total_organizations": 0,
    "total_projects": 0
  },
  "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5"
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}