Skip to main content

Overview

Policies provide fine-grained access control rules that are evaluated during authorization. Each policy has an effect (allow or deny), a priority, and optional filters for agent, principal, scopes, and time-of-day restrictions. Access the policies client via client.policies.

Create

Create a new authorization policy:
from grantex import Grantex, CreatePolicyParams

with Grantex(api_key="gx_live_...") as client:
    policy = client.policies.create(CreatePolicyParams(
        name="business-hours-only",
        effect="deny",
        priority=10,
        agent_id="agt_abc123",
        time_of_day_start="18:00",
        time_of_day_end="08:00",
    ))

    print(f"Policy ID: {policy.id}")
    print(f"Effect: {policy.effect}")
    print(f"Priority: {policy.priority}")

CreatePolicyParams

FieldTypeRequiredDefaultDescription
namestrYesHuman-readable name for the policy.
effectstrYes"allow" or "deny".
priorityintNo0Higher priority policies are evaluated first.
agent_idstr | NoneNoNoneRestrict to a specific agent.
principal_idstr | NoneNoNoneRestrict to a specific principal (user).
scopeslist[str] | NoneNoNoneRestrict to specific scopes.
time_of_day_startstr | NoneNoNoneStart of allowed/denied time window (HH:MM).
time_of_day_endstr | NoneNoNoneEnd of allowed/denied time window (HH:MM).

List

List all policies for your developer account:
from grantex import Grantex

with Grantex(api_key="gx_live_...") as client:
    result = client.policies.list()

    print(f"Total policies: {result.total}")
    for policy in result.policies:
        print(f"  {policy.name}: {policy.effect} (priority {policy.priority})")

ListPoliciesResponse

FieldTypeDescription
policiestuple[Policy, ...]The list of policies.
totalintTotal number of policies.

Get

Retrieve a single policy by its ID:
policy = client.policies.get("pol_abc123")

print(f"Name: {policy.name}")
print(f"Effect: {policy.effect}")
print(f"Agent: {policy.agent_id}")
print(f"Scopes: {policy.scopes}")
print(f"Time window: {policy.time_of_day_start} - {policy.time_of_day_end}")

Update

Update an existing policy. Only fields you provide will be modified:
from grantex import Grantex, UpdatePolicyParams

with Grantex(api_key="gx_live_...") as client:
    updated = client.policies.update(
        "pol_abc123",
        UpdatePolicyParams(
            name="business-hours-only-v2",
            priority=20,
            time_of_day_start="19:00",
            time_of_day_end="07:00",
        ),
    )

    print(f"Updated at: {updated.updated_at}")

UpdatePolicyParams

FieldTypeRequiredDescription
namestr | NoneNoNew name for the policy.
effectstr | NoneNoNew effect ("allow" or "deny").
priorityint | NoneNoNew priority value.
agent_idstr | NoneNoNew agent filter.
principal_idstr | NoneNoNew principal filter.
scopeslist[str] | NoneNoNew scope filter.
time_of_day_startstr | NoneNoNew time window start (HH:MM).
time_of_day_endstr | NoneNoNew time window end (HH:MM).

Delete

Delete a policy by its ID:
client.policies.delete("pol_abc123")
# Returns None on success

Policy Type

The Policy frozen dataclass has the following fields:
FieldTypeDescription
idstrUnique policy identifier.
namestrHuman-readable policy name.
effectstr"allow" or "deny".
priorityintEvaluation priority (higher = first).
agent_idstr | NoneAgent filter (if set).
principal_idstr | NonePrincipal filter (if set).
scopestuple[str, ...] | NoneScope filter (if set).
time_of_day_startstr | NoneTime window start.
time_of_day_endstr | NoneTime window end.
created_atstrISO 8601 creation timestamp.
updated_atstrISO 8601 last-updated timestamp.

Example: Common Policy Patterns

Deny After Hours

from grantex import Grantex, CreatePolicyParams

with Grantex(api_key="gx_live_...") as client:
    client.policies.create(CreatePolicyParams(
        name="deny-after-hours",
        effect="deny",
        priority=100,
        time_of_day_start="20:00",
        time_of_day_end="06:00",
    ))

Allow Specific Scopes for an Agent

from grantex import Grantex, CreatePolicyParams

with Grantex(api_key="gx_live_...") as client:
    client.policies.create(CreatePolicyParams(
        name="read-only-for-assistant",
        effect="allow",
        priority=50,
        agent_id="agt_abc123",
        scopes=["files:read", "calendar:read"],
    ))

Deny a Specific User

from grantex import Grantex, CreatePolicyParams

with Grantex(api_key="gx_live_...") as client:
    client.policies.create(CreatePolicyParams(
        name="block-suspended-user",
        effect="deny",
        priority=200,
        principal_id="user_suspended_xyz",
    ))