---
title: "Create a wallet access policy"
method: POST
path: "/v1/treasury/wallets/access-policies"
tags: ["Wallet Access"]
---

# Create a wallet access policy

`POST /v1/treasury/wallets/access-policies`

## Request

- Base URL: `https://api.1claw.co`
- URL: `https://api.1claw.co/v1/treasury/wallets/access-policies`
- Auth: HTTP bearer

Create a role-based wallet access policy granting an agent, user, role,
or platform app specific permissions on treasury wallets within a scope
(org-wide, platform app, or single wallet). Requires Pro+ tier.

## Request body

- CreateWalletAccessPolicyRequest
  - `scope_type` 'wallet' | 'platform_app' | 'org', required: Policy scope — org-wide, platform app, or single wallet
  - `scope_id` string, uuid, nullable: Wallet or platform app UUID when scope_type is not org
  - `principal_type` 'user' | 'agent' | 'role' | 'platform_app', required: Who receives the grant
  - `principal_id` string, required: User/agent UUID, role name, or platform app UUID
  - `can_sign` boolean
  - `can_view_balance` boolean
  - `can_export` boolean
  - `can_send` boolean
  - `can_swap` boolean
  - `allowed_chains` string[]: Chains this policy applies to (empty = all)
  - `max_value_per_tx_eth` string: Max value per transaction in ETH
  - `daily_limit_eth` string: Daily spend limit in ETH
  - `conditions` object: Additional JSON conditions (reserved for future enforcement)
  - `expires_at` string, date-time

## Response `201`

Policy created

- WalletAccessPolicyResponse
  - `id` string, uuid
  - `org_id` string, uuid
  - `scope_type` string
  - `scope_id` string, uuid, nullable
  - `principal_type` string
  - `principal_id` string
  - `can_sign` boolean
  - `can_view_balance` boolean
  - `can_export` boolean
  - `can_send` boolean
  - `can_swap` boolean
  - `allowed_chains` string[]
  - `max_value_per_tx_eth` string, nullable
  - `daily_limit_eth` string, nullable
  - `conditions` object
  - `is_active` boolean
  - `expires_at` string, date-time, nullable
  - `created_by` string, uuid
  - `created_at` string, date-time
  - `updated_at` string, date-time

## Other responses

- `400`: Invalid request
- `401`: Authentication required or invalid
- `403`: Insufficient permissions

---

[API](https://skmtc.dev/1claw/apis/1claw-api.md) · [All operations](https://skmtc.dev/1claw/apis/1claw-api/llms.txt) · [OpenAPI document](https://skmtc.dev/1claw/apis/1claw-api/revisions/5fa0918f3b41?raw)
