---
title: "Update the draft with a new set of rules by policy types"
method: PUT
path: "/policy/draft"
tags: ["Policy Editor V2"]
---

# Update the draft with a new set of rules by policy types

`PUT /policy/draft`

## Request

- Base URL: `https://api.fireblocks.io/v1`
- URL: `https://api.fireblocks.io/v1/policy/draft`
- Auth: none declared
- TypeScript: <https://skmtc.dev/fireblocks/apis/fireblocks-api/docs/policy/draft/put.ts> (a function with typed inputs; its response is checked against the schema)

Update the draft and return its validation for specific policy types.

**⚠️ IMPORTANT SECURITY NOTICE:**

The Fireblocks Policy is a critical security guardrail. Programmatically modifying your policy via the API introduces significant security risks. As an industry best practice, Fireblocks strongly recommends manual editing accompanied by strict human oversight and approval workflows for all policy changes. Programmatic updates should only be implemented by advanced users with comprehensive, multi-layer security controls in place.

## Headers

- `Idempotency-Key` string

## Request body

- UpdateDraftRequest: Request schema for updating draft with policy types and rules
  - `policyTypes` PolicyType[], required
  - `rules` PolicyRule[], required: Array of policy rules
    - `name` string, required: Name of the policy rule
    - `id` string, required: Unique identifier for the policy rule
    - `policyEngineVersion` 'v2', required: Policy engine version
    - `type` 'TRANSFER' | 'STAKE' | 'CONTRACT_CALL' | 'TYPED_MESSAGE' | 'APPROVE' | 'MINT' | 'BURN' | 'RAW' | 'COMPLIANCE' | 'DEPLOYMENT' | 'PROGRAM_CALL' | 'DAPP_CONNECTION' | 'UPGRADE' | 'ORDER' | 'AML_CHAINALYSIS_V2_SCREENING' | 'AML_CHAINALYSIS_V2_POST_SCREENING' | 'AML_ELLIPTIC_HOLISTIC_SCREENING' | 'AML_ELLIPTIC_HOLISTIC_POST_SCREENING' | 'TR_NOTABENE_SCREENING' | 'TR_NOTABENE_POST_SCREENING', required: Policy type enumeration
    - `subType` 'TRANSFER' | 'STAKE' | 'CONTRACT_CALL' | 'TYPED_MESSAGE' | 'APPROVE' | 'MINT' | 'BURN' | 'RAW' | 'COMPLIANCE' | 'DEPLOYMENT' | 'PROGRAM_CALL' | 'DAPP_CONNECTION' | 'UPGRADE' | 'ORDER' | 'AML_CHAINALYSIS_V2_SCREENING' | 'AML_CHAINALYSIS_V2_POST_SCREENING' | 'AML_ELLIPTIC_HOLISTIC_SCREENING' | 'AML_ELLIPTIC_HOLISTIC_POST_SCREENING' | 'TR_NOTABENE_SCREENING' | 'TR_NOTABENE_POST_SCREENING': Policy type enumeration
    - `initiator` union, required
      - '*': All users are allowed
      - InitiatorConfig: Policy rule initiator configuration
        - `users` string[]: List of user IDs
        - `groups` string[]: List of policy group IDs
        - `services` string[]
        - `fbAdminGroups` string[]
        - `exchange` string[]
        - `operator` 'INCLUDES': Operator for selection
    - `asset` AssetConfig: Policy asset configuration
      - `nftTransfer` boolean, required: Whether this is an NFT transfer
      - `assetTypes` union[]: List of asset types
        - union
          - string
          - '*'
      - `operator` 'INCLUDES': Operator for selection
    - `source` SourceConfig, required: Source account configuration for policy rules
      - `type` AccountType2[]: Source account types
      - `subType` AccountIdentifier[]: Source account subtypes
        - `type` 'EXCHANGE' | 'UNMANAGED' | 'VAULT' | 'GLOBAL_WHITELIST' | 'NETWORK_CONNECTION' | 'FIAT_ACCOUNT' | 'CONNECTED_ACCOUNT' | 'ONE_TIME_ADDRESS' | 'SRC_DST_NA' | 'MULTIPLE_VENUES' | 'END_USER_WALLET' | 'OEC_PARTNER' | 'CONTRACT' | 'INTERNAL' | 'EXTERNAL' | 'DAPP_CONNECTION' | 'UNKNOWN' | '*' | 'ANY', required: Type of account
        - `id` string: Account ID
        - `subType` string: Account subtype
        - `address` string: Account address
      - `ids` AccountIdentifier[]: Source account identifiers
        - `type` 'EXCHANGE' | 'UNMANAGED' | 'VAULT' | 'GLOBAL_WHITELIST' | 'NETWORK_CONNECTION' | 'FIAT_ACCOUNT' | 'CONNECTED_ACCOUNT' | 'ONE_TIME_ADDRESS' | 'SRC_DST_NA' | 'MULTIPLE_VENUES' | 'END_USER_WALLET' | 'OEC_PARTNER' | 'CONTRACT' | 'INTERNAL' | 'EXTERNAL' | 'DAPP_CONNECTION' | 'UNKNOWN' | '*' | 'ANY', required: Type of account
        - `id` string: Account ID
        - `subType` string: Account subtype
        - `address` string: Account address
      - `tags` PolicyTag[]: Tags for source matching
        - `id` string, required: Tag identifier
      - `operator` 'INCLUDES', required: Operator for selection
      - `matchFrom` 'ACCOUNT': Whether to match from account (relevant only for ORDER policy type)
    - `destination` DestinationConfig: Destination configuration for policy rules
      - `type` AccountType2[]: Destination account types
      - `subType` AccountIdentifier[]
        - `type` 'EXCHANGE' | 'UNMANAGED' | 'VAULT' | 'GLOBAL_WHITELIST' | 'NETWORK_CONNECTION' | 'FIAT_ACCOUNT' | 'CONNECTED_ACCOUNT' | 'ONE_TIME_ADDRESS' | 'SRC_DST_NA' | 'MULTIPLE_VENUES' | 'END_USER_WALLET' | 'OEC_PARTNER' | 'CONTRACT' | 'INTERNAL' | 'EXTERNAL' | 'DAPP_CONNECTION' | 'UNKNOWN' | '*' | 'ANY', required: Type of account
        - `id` string: Account ID
        - `subType` string: Account subtype
        - `address` string: Account address
      - `ids` AccountIdentifier[]
        - `type` 'EXCHANGE' | 'UNMANAGED' | 'VAULT' | 'GLOBAL_WHITELIST' | 'NETWORK_CONNECTION' | 'FIAT_ACCOUNT' | 'CONNECTED_ACCOUNT' | 'ONE_TIME_ADDRESS' | 'SRC_DST_NA' | 'MULTIPLE_VENUES' | 'END_USER_WALLET' | 'OEC_PARTNER' | 'CONTRACT' | 'INTERNAL' | 'EXTERNAL' | 'DAPP_CONNECTION' | 'UNKNOWN' | '*' | 'ANY', required: Type of account
        - `id` string: Account ID
        - `subType` string: Account subtype
        - `address` string: Account address
      - `tags` PolicyTag[]: Tags for destination matching
        - `id` string, required: Tag identifier
      - `operator` 'INCLUDES', required: Operator for selection
      - `matchFrom` 'ACCOUNT' | 'SOURCE': Whether to match from account or source (relevant only for ORDER policy type). If set to ACCOUNT, only matchFrom is allowed and other fields are not required.
      - `addressType` '*' | 'WHITELISTED' | 'ONE_TIME', required: Type of destination addresses allowed
    - `account` AccountConfig: Policy account configuration
      - `type` AccountType2[]: Account types
      - `subType` AccountIdentifier[]
        - `type` 'EXCHANGE' | 'UNMANAGED' | 'VAULT' | 'GLOBAL_WHITELIST' | 'NETWORK_CONNECTION' | 'FIAT_ACCOUNT' | 'CONNECTED_ACCOUNT' | 'ONE_TIME_ADDRESS' | 'SRC_DST_NA' | 'MULTIPLE_VENUES' | 'END_USER_WALLET' | 'OEC_PARTNER' | 'CONTRACT' | 'INTERNAL' | 'EXTERNAL' | 'DAPP_CONNECTION' | 'UNKNOWN' | '*' | 'ANY', required: Type of account
        - `id` string: Account ID
        - `subType` string: Account subtype
        - `address` string: Account address
      - `ids` AccountIdentifier[]
        - `type` 'EXCHANGE' | 'UNMANAGED' | 'VAULT' | 'GLOBAL_WHITELIST' | 'NETWORK_CONNECTION' | 'FIAT_ACCOUNT' | 'CONNECTED_ACCOUNT' | 'ONE_TIME_ADDRESS' | 'SRC_DST_NA' | 'MULTIPLE_VENUES' | 'END_USER_WALLET' | 'OEC_PARTNER' | 'CONTRACT' | 'INTERNAL' | 'EXTERNAL' | 'DAPP_CONNECTION' | 'UNKNOWN' | '*' | 'ANY', required: Type of account
        - `id` string: Account ID
        - `subType` string: Account subtype
        - `address` string: Account address
      - `tags` PolicyTag[]: Tags for account matching
        - `id` string, required: Tag identifier
      - `operator` 'INCLUDES', required: Operator for selection
      - `matchFrom` 'ACCOUNT' | 'SOURCE': Whether to match from account or source
    - `side` 'BUY' | 'SELL' | 'ANY': Order side for trading operations
    - `verdict` VerdictConfig, required: Verdict configuration
      - `action` 'ALLOW' | 'BLOCK' | '2-TIER' | 'ACCEPT' | 'REJECT' | 'ALERT' | 'SCREEN' | 'PASS' | 'WAIT' | 'FREEZE' | 'CANCEL', required: Verdict action
      - `approvers` ApproversConfig: Approvers configuration
        - `canInitiatorApprove` boolean, required: Whether initiator can approve
        - `operator` 'AND' | 'OR': Operator for approval groups
        - `allowOperatorAsAuthorizer` boolean: Whether operator can be authorizer
        - `approvalGroups` object[]: List of approval groups
          - `threshold` number, required: Approval threshold
          - `users` string[]: List of user IDs
          - `groups` string[]: List of policy group IDs
      - `designatedSigners` DesignatedSignersConfig: Designated signers configuration
        - `type` 'SINGLE' | 'MULTIPLE' | 'INITIATOR', required: Type of designated signers
        - `users` string[]: List of user IDs
        - `groups` string[]: List of policy group IDs
    - `amountOverTime` AmountOverTimeConfig: Amount over time configuration
      - `range` AmountRangeMinMax2, required: Amount range with minimum and maximum values
        - `min` string, required: Minimum amount
        - `max` string: Maximum amount
      - `currency` 'NATIVE' | 'USD' | 'EUR', required: Currency for the amount
      - `timePeriod` TimePeriodConfig, required: Time period configuration
        - `seconds` string, required: Time period in seconds
        - `initiator` 'PER_SINGLE_MATCH' | 'ACROSS_ALL_MATCHES', required: Type of match for time period application
        - `source` 'PER_SINGLE_MATCH' | 'ACROSS_ALL_MATCHES', required: Type of match for time period application
        - `destination` 'PER_SINGLE_MATCH' | 'ACROSS_ALL_MATCHES', required: Type of match for time period application
    - `amount` AmountConfig: Currency property for amount configuration
      - `range` AmountRangeMinMax2, required: Amount range with minimum and maximum values
        - `min` string, required: Minimum amount
        - `max` string: Maximum amount
      - `currency` 'NATIVE' | 'USD' | 'EUR': Currency for the amount
    - `externalDescriptor` string: External descriptor for the rule
    - `method` union
      - '*': All methods allowed
      - ContractMethodConfig: Contract method configuration
        - `methodCalls` string[], required
        - `operator` 'EITHER' | 'EXACT', required: Operator for method calls
        - `payloadSuffix` string: Payload suffix for method calls
    - `isGlobalPolicy` boolean: Whether this is a global policy
    - `programCall` ProgramCallConfig: Program call configuration
      - `allowedSolanaProgramCalls` '*' | 'WHITELISTED', required: Whether Solana program calls are allowed
    - `screeningMetadata` ScreeningMetadataConfig: Screening metadata configuration
      - `direction` 'INBOUND' | 'OUTBOUND' | 'ANY': Direction of transaction
      - `provider` 'CHAINALYSIS' | 'CHAINALYSIS_V2' | 'ELLIPTIC' | 'ELLIPTIC_HOLISTIC' | 'NOTABENE', nullable: Screening provider
      - `riskRating` 'LOW' | 'MEDIUM' | 'HIGH' | 'SEVERE' | 'ANY': Risk rating threshold
      - `riskScore` string: Risk score threshold
      - `exposureType` 'DIRECT' | 'INDIRECT' | 'ANY': Exposure type
      - `category` string[]
      - `name` string[]
      - `categoryId` string[]
      - `status` 'COMPLETED' | 'PENDING' | 'REJECTED' | 'FAILED' | 'CANCELED' | 'BLOCKING_TIME_EXPIRED': Transaction status
      - `sourceAddress` string: Source address
      - `destAddress` string: Destination address
    - `quoteAsset` AssetConfig: Policy asset configuration
      - `nftTransfer` boolean, required: Whether this is an NFT transfer
      - `assetTypes` union[]: List of asset types
        - union
          - string
          - '*'
      - `operator` 'INCLUDES': Operator for selection
    - `baseAsset` AssetConfig: Policy asset configuration
      - `nftTransfer` boolean, required: Whether this is an NFT transfer
      - `assetTypes` union[]: List of asset types
        - union
          - string
          - '*'
      - `operator` 'INCLUDES': Operator for selection
    - `quoteAmount` AmountRange: Amount range with minimum and maximum values
      - `range` AmountRangeMinMax2, required: Amount range with minimum and maximum values
        - `min` string, required: Minimum amount
        - `max` string: Maximum amount
    - `baseAmount` AmountRange: Amount range with minimum and maximum values
      - `range` AmountRangeMinMax2, required: Amount range with minimum and maximum values
        - `min` string, required: Minimum amount
        - `max` string: Maximum amount
    - `dAppAddress` DAppAddressConfig: dApp address configuration for policy rules
      - `globalWhitelisted` string[], required: Globally whitelisted addresses
      - `tenantWhitelisted` string[], required: Tenant whitelisted addresses
      - `urls` string[], required: Allowed all address
      - `operator` 'INCLUDES', required: Operator for selection
    - `derivationPath` DerivationPathConfig: Derivation path configuration
      - `path` number[], required: Derivation path as array of numbers
      - `partial` boolean: Whether this is a partial path
    - `index` number: Index for the policy rule

## Response `200`

A draft validation response object

- DraftReviewAndValidationResponse: Draft validation
  - `draftResponse` DraftResponse, required: Response object for draft operations
    - `status` string, required: Operation status
    - `rules` PolicyRule[], required: Draft rules
      - `name` string, required: Name of the policy rule
      - `id` string, required: Unique identifier for the policy rule
      - `policyEngineVersion` 'v2', required: Policy engine version
      - `type` 'TRANSFER' | 'STAKE' | 'CONTRACT_CALL' | 'TYPED_MESSAGE' | 'APPROVE' | 'MINT' | 'BURN' | 'RAW' | 'COMPLIANCE' | 'DEPLOYMENT' | 'PROGRAM_CALL' | 'DAPP_CONNECTION' | 'UPGRADE' | 'ORDER' | 'AML_CHAINALYSIS_V2_SCREENING' | 'AML_CHAINALYSIS_V2_POST_SCREENING' | 'AML_ELLIPTIC_HOLISTIC_SCREENING' | 'AML_ELLIPTIC_HOLISTIC_POST_SCREENING' | 'TR_NOTABENE_SCREENING' | 'TR_NOTABENE_POST_SCREENING', required: Policy type enumeration
      - `subType` 'TRANSFER' | 'STAKE' | 'CONTRACT_CALL' | 'TYPED_MESSAGE' | 'APPROVE' | 'MINT' | 'BURN' | 'RAW' | 'COMPLIANCE' | 'DEPLOYMENT' | 'PROGRAM_CALL' | 'DAPP_CONNECTION' | 'UPGRADE' | 'ORDER' | 'AML_CHAINALYSIS_V2_SCREENING' | 'AML_CHAINALYSIS_V2_POST_SCREENING' | 'AML_ELLIPTIC_HOLISTIC_SCREENING' | 'AML_ELLIPTIC_HOLISTIC_POST_SCREENING' | 'TR_NOTABENE_SCREENING' | 'TR_NOTABENE_POST_SCREENING': Policy type enumeration
      - `initiator` union, required
        - '*': All users are allowed
        - InitiatorConfig: Policy rule initiator configuration
          - `users` string[]: List of user IDs
          - `groups` string[]: List of policy group IDs
          - `services` string[]
          - `fbAdminGroups` string[]
          - `exchange` string[]
          - `operator` 'INCLUDES': Operator for selection
      - `asset` AssetConfig: Policy asset configuration
        - `nftTransfer` boolean, required: Whether this is an NFT transfer
        - `assetTypes` union[]: List of asset types
          - union
            - string
            - '*'
        - `operator` 'INCLUDES': Operator for selection
      - `source` SourceConfig, required: Source account configuration for policy rules
        - `type` AccountType2[]: Source account types
        - `subType` AccountIdentifier[]: Source account subtypes
          - `type` 'EXCHANGE' | 'UNMANAGED' | 'VAULT' | 'GLOBAL_WHITELIST' | 'NETWORK_CONNECTION' | 'FIAT_ACCOUNT' | 'CONNECTED_ACCOUNT' | 'ONE_TIME_ADDRESS' | 'SRC_DST_NA' | 'MULTIPLE_VENUES' | 'END_USER_WALLET' | 'OEC_PARTNER' | 'CONTRACT' | 'INTERNAL' | 'EXTERNAL' | 'DAPP_CONNECTION' | 'UNKNOWN' | '*' | 'ANY', required: Type of account
          - `id` string: Account ID
          - `subType` string: Account subtype
          - `address` string: Account address
        - `ids` AccountIdentifier[]: Source account identifiers
          - `type` 'EXCHANGE' | 'UNMANAGED' | 'VAULT' | 'GLOBAL_WHITELIST' | 'NETWORK_CONNECTION' | 'FIAT_ACCOUNT' | 'CONNECTED_ACCOUNT' | 'ONE_TIME_ADDRESS' | 'SRC_DST_NA' | 'MULTIPLE_VENUES' | 'END_USER_WALLET' | 'OEC_PARTNER' | 'CONTRACT' | 'INTERNAL' | 'EXTERNAL' | 'DAPP_CONNECTION' | 'UNKNOWN' | '*' | 'ANY', required: Type of account
          - `id` string: Account ID
          - `subType` string: Account subtype
          - `address` string: Account address
        - `tags` PolicyTag[]: Tags for source matching
          - `id` string, required: Tag identifier
        - `operator` 'INCLUDES', required: Operator for selection
        - `matchFrom` 'ACCOUNT': Whether to match from account (relevant only for ORDER policy type)
      - `destination` DestinationConfig: Destination configuration for policy rules
        - `type` AccountType2[]: Destination account types
        - `subType` AccountIdentifier[]
          - `type` 'EXCHANGE' | 'UNMANAGED' | 'VAULT' | 'GLOBAL_WHITELIST' | 'NETWORK_CONNECTION' | 'FIAT_ACCOUNT' | 'CONNECTED_ACCOUNT' | 'ONE_TIME_ADDRESS' | 'SRC_DST_NA' | 'MULTIPLE_VENUES' | 'END_USER_WALLET' | 'OEC_PARTNER' | 'CONTRACT' | 'INTERNAL' | 'EXTERNAL' | 'DAPP_CONNECTION' | 'UNKNOWN' | '*' | 'ANY', required: Type of account
          - `id` string: Account ID
          - `subType` string: Account subtype
          - `address` string: Account address
        - `ids` AccountIdentifier[]
          - `type` 'EXCHANGE' | 'UNMANAGED' | 'VAULT' | 'GLOBAL_WHITELIST' | 'NETWORK_CONNECTION' | 'FIAT_ACCOUNT' | 'CONNECTED_ACCOUNT' | 'ONE_TIME_ADDRESS' | 'SRC_DST_NA' | 'MULTIPLE_VENUES' | 'END_USER_WALLET' | 'OEC_PARTNER' | 'CONTRACT' | 'INTERNAL' | 'EXTERNAL' | 'DAPP_CONNECTION' | 'UNKNOWN' | '*' | 'ANY', required: Type of account
          - `id` string: Account ID
          - `subType` string: Account subtype
          - `address` string: Account address
        - `tags` PolicyTag[]: Tags for destination matching
          - `id` string, required: Tag identifier
        - `operator` 'INCLUDES', required: Operator for selection
        - `matchFrom` 'ACCOUNT' | 'SOURCE': Whether to match from account or source (relevant only for ORDER policy type). If set to ACCOUNT, only matchFrom is allowed and other fields are not required.
        - `addressType` '*' | 'WHITELISTED' | 'ONE_TIME', required: Type of destination addresses allowed
      - `account` AccountConfig: Policy account configuration
        - `type` AccountType2[]: Account types
        - `subType` AccountIdentifier[]
          - `type` 'EXCHANGE' | 'UNMANAGED' | 'VAULT' | 'GLOBAL_WHITELIST' | 'NETWORK_CONNECTION' | 'FIAT_ACCOUNT' | 'CONNECTED_ACCOUNT' | 'ONE_TIME_ADDRESS' | 'SRC_DST_NA' | 'MULTIPLE_VENUES' | 'END_USER_WALLET' | 'OEC_PARTNER' | 'CONTRACT' | 'INTERNAL' | 'EXTERNAL' | 'DAPP_CONNECTION' | 'UNKNOWN' | '*' | 'ANY', required: Type of account
          - `id` string: Account ID
          - `subType` string: Account subtype
          - `address` string: Account address
        - `ids` AccountIdentifier[]
          - `type` 'EXCHANGE' | 'UNMANAGED' | 'VAULT' | 'GLOBAL_WHITELIST' | 'NETWORK_CONNECTION' | 'FIAT_ACCOUNT' | 'CONNECTED_ACCOUNT' | 'ONE_TIME_ADDRESS' | 'SRC_DST_NA' | 'MULTIPLE_VENUES' | 'END_USER_WALLET' | 'OEC_PARTNER' | 'CONTRACT' | 'INTERNAL' | 'EXTERNAL' | 'DAPP_CONNECTION' | 'UNKNOWN' | '*' | 'ANY', required: Type of account
          - `id` string: Account ID
          - `subType` string: Account subtype
          - `address` string: Account address
        - `tags` PolicyTag[]: Tags for account matching
          - `id` string, required: Tag identifier
        - `operator` 'INCLUDES', required: Operator for selection
        - `matchFrom` 'ACCOUNT' | 'SOURCE': Whether to match from account or source
      - `side` 'BUY' | 'SELL' | 'ANY': Order side for trading operations
      - `verdict` VerdictConfig, required: Verdict configuration
        - `action` 'ALLOW' | 'BLOCK' | '2-TIER' | 'ACCEPT' | 'REJECT' | 'ALERT' | 'SCREEN' | 'PASS' | 'WAIT' | 'FREEZE' | 'CANCEL', required: Verdict action
        - `approvers` ApproversConfig: Approvers configuration
          - `canInitiatorApprove` boolean, required: Whether initiator can approve
          - `operator` 'AND' | 'OR': Operator for approval groups
          - `allowOperatorAsAuthorizer` boolean: Whether operator can be authorizer
          - `approvalGroups` object[]: List of approval groups
            - `threshold` number, required: Approval threshold
            - `users` string[]: List of user IDs
            - `groups` string[]: List of policy group IDs
        - `designatedSigners` DesignatedSignersConfig: Designated signers configuration
          - `type` 'SINGLE' | 'MULTIPLE' | 'INITIATOR', required: Type of designated signers
          - `users` string[]: List of user IDs
          - `groups` string[]: List of policy group IDs
      - `amountOverTime` AmountOverTimeConfig: Amount over time configuration
        - `range` AmountRangeMinMax2, required: Amount range with minimum and maximum values
          - `min` string, required: Minimum amount
          - `max` string: Maximum amount
        - `currency` 'NATIVE' | 'USD' | 'EUR', required: Currency for the amount
        - `timePeriod` TimePeriodConfig, required: Time period configuration
          - `seconds` string, required: Time period in seconds
          - `initiator` 'PER_SINGLE_MATCH' | 'ACROSS_ALL_MATCHES', required: Type of match for time period application
          - `source` 'PER_SINGLE_MATCH' | 'ACROSS_ALL_MATCHES', required: Type of match for time period application
          - `destination` 'PER_SINGLE_MATCH' | 'ACROSS_ALL_MATCHES', required: Type of match for time period application
      - `amount` AmountConfig: Currency property for amount configuration
        - `range` AmountRangeMinMax2, required: Amount range with minimum and maximum values
          - `min` string, required: Minimum amount
          - `max` string: Maximum amount
        - `currency` 'NATIVE' | 'USD' | 'EUR': Currency for the amount
      - `externalDescriptor` string: External descriptor for the rule
      - `method` union
        - '*': All methods allowed
        - ContractMethodConfig: Contract method configuration
          - `methodCalls` string[], required
          - `operator` 'EITHER' | 'EXACT', required: Operator for method calls
          - `payloadSuffix` string: Payload suffix for method calls
      - `isGlobalPolicy` boolean: Whether this is a global policy
      - `programCall` ProgramCallConfig: Program call configuration
        - `allowedSolanaProgramCalls` '*' | 'WHITELISTED', required: Whether Solana program calls are allowed
      - `screeningMetadata` ScreeningMetadataConfig: Screening metadata configuration
        - `direction` 'INBOUND' | 'OUTBOUND' | 'ANY': Direction of transaction
        - `provider` 'CHAINALYSIS' | 'CHAINALYSIS_V2' | 'ELLIPTIC' | 'ELLIPTIC_HOLISTIC' | 'NOTABENE', nullable: Screening provider
        - `riskRating` 'LOW' | 'MEDIUM' | 'HIGH' | 'SEVERE' | 'ANY': Risk rating threshold
        - `riskScore` string: Risk score threshold
        - `exposureType` 'DIRECT' | 'INDIRECT' | 'ANY': Exposure type
        - `category` string[]
        - `name` string[]
        - `categoryId` string[]
        - `status` 'COMPLETED' | 'PENDING' | 'REJECTED' | 'FAILED' | 'CANCELED' | 'BLOCKING_TIME_EXPIRED': Transaction status
        - `sourceAddress` string: Source address
        - `destAddress` string: Destination address
      - `quoteAsset` AssetConfig: Policy asset configuration
        - `nftTransfer` boolean, required: Whether this is an NFT transfer
        - `assetTypes` union[]: List of asset types
          - union
            - string
            - '*'
        - `operator` 'INCLUDES': Operator for selection
      - `baseAsset` AssetConfig: Policy asset configuration
        - `nftTransfer` boolean, required: Whether this is an NFT transfer
        - `assetTypes` union[]: List of asset types
          - union
            - string
            - '*'
        - `operator` 'INCLUDES': Operator for selection
      - `quoteAmount` AmountRange: Amount range with minimum and maximum values
        - `range` AmountRangeMinMax2, required: Amount range with minimum and maximum values
          - `min` string, required: Minimum amount
          - `max` string: Maximum amount
      - `baseAmount` AmountRange: Amount range with minimum and maximum values
        - `range` AmountRangeMinMax2, required: Amount range with minimum and maximum values
          - `min` string, required: Minimum amount
          - `max` string: Maximum amount
      - `dAppAddress` DAppAddressConfig: dApp address configuration for policy rules
        - `globalWhitelisted` string[], required: Globally whitelisted addresses
        - `tenantWhitelisted` string[], required: Tenant whitelisted addresses
        - `urls` string[], required: Allowed all address
        - `operator` 'INCLUDES', required: Operator for selection
      - `derivationPath` DerivationPathConfig: Derivation path configuration
        - `path` number[], required: Derivation path as array of numbers
        - `partial` boolean: Whether this is a partial path
      - `index` number: Index for the policy rule
    - `draftId` string, required: Draft unique id
    - `metadata` PolicyMetadata, required: Policy metadata keyed by policy type
  - `validation` PolicyValidation, required: Policy validation object
    - `status` string, required: Validation status
    - `checkResult` PolicyCheckResult, required: Policy rules validation result
      - `errors` number, required: Number of errors
      - `results` PolicyRuleCheckResult[], required: A set of validation results
        - `index` number, required: Rule index number in the policy
        - `status` 'ok' | 'failure', required: Validation status
        - `errors` PolicyRuleError[], required: A set of rule validation error objects
          - `errorMessage` string, required: Error message
          - `errorCode` number, required: error code
          - `errorCodeName` string, required: error code name
          - `errorField` 'operator' | 'operators' | 'authorizationGroups' | 'designatedSigner' | 'designatedSigners' | 'contractMethods' | 'amountAggregation' | 'src' | 'dst', required: The field which the error relates to * operator - transaction initiator * operators - transaction initiators * authorizationGroups - transaction authorizer groups * designatedSigner - transaction signer * designatedSigners - transaction signers * contractMethods - contract methods * amountAggregation - transaction amount aggregation configuration * src - transaction source asset configuration * dst - transaction destination asset configuration

## Other responses

- `default`: Error Response

---

[API](https://skmtc.dev/fireblocks/apis/fireblocks-api.md) - [All operations](https://skmtc.dev/fireblocks/apis/fireblocks-api/llms.txt) - [OpenAPI document](https://skmtc.dev/fireblocks/apis/fireblocks-api/revisions/4eba9965659a?raw)
