---
title: "Create policy rule"
method: POST
path: "/api/policy/v1/enterprises/{enterpriseId}/touchpoints/{touchpointName}/rules"
tags: ["Policy Builder"]
---

# Create policy rule

`POST /api/policy/v1/enterprises/{enterpriseId}/touchpoints/{touchpointName}/rules`

Creates a new policy rule.

## Path parameters

- `enterpriseId` string, required
- `touchpointName` string, required

## Request body

- CreatePolicyRuleRequest — Create or Update policy rule Request.
  - `name` string, required — Human readable name of the rule.
  - `adminOnly` boolean — true, if the policy rule is a BitGo internal rule, false otherwise.
  - `clauses` object[], required — List of policy rule Clauses: a combination of Conditions and Actions.
    - `conditions` union[], required
      - union
        - TransferAmountConditionRequest — Transfer-amount condition.
          - `name` 'transfer.amount', required — Name of the condition.
          - `parameters` TransferAmountConditionParameters, required — Data required to evaluate the condition.
            - `operator` '>' | '>=' | '<' | '<=', required — The comparison operator to use when comparing the transfer amount with the given limit
            - `amount` string, required — The transfer amount is compared with this limit.
            - `coin` string, required — This condition only applies to transfers of this currency (USD applies to all transfers).
          - `operator` 'AND' | 'OR' — Boolean operators that join Conditions, and/or Actions. Must be null on the last Condition or Action, or if there is only one Condition or Action, must be non-null on all others.
        - TransferVelocityLimitConditionRequest — Velocity-limit condition.
          - `name` 'transfer.velocity.limit', required — Name of the condition.
          - `parameters` TransferVelocityLimitConditionParameters, required — Data required to evaluate the transfer velocity limit condition.
            - `scope` 'wallet' | 'enterprise', required — Entities to include in the velocity calculation.
            - `timeWindow` string, required — A window of time in which a set of amount can be spent.
            - `amount` string, required — The transfer amount is compared with this limit.
            - `coin` string, required — The unit that the amount is denoted in, in either crypto or a fiat currency.
          - `operator` 'AND' | 'OR' — Boolean operators that join Conditions, and/or Actions. Must be null on the last Condition or Action, or if there is only one Condition or Action, must be non-null on all others.
        - TransferDestinationTypeConditionRequest — Destination condition.
          - `name` 'transfer.destination.type', required — Name of the condition.
          - `parameters` TransferDestinationTypeConditionParameters, required — Data required to evaluate the transfer destination condition.
            - `type` 'whitelistedAddress' | 'nonWhitelistedAddress' | 'outsideEnterprise', required — The type of destination this condition will match.
            - `coin` string — The asset this condition applies to.
          - `operator` 'AND' | 'OR' — Boolean operators that join Conditions, and/or Actions. Must be null on the last Condition or Action, or if there is only one Condition or Action, must be non-null on all others.
        - TransferInitiatorsConditionRequest — Initiator condition.
          - `name` 'transfer.initiators', required — Name of the condition.
          - `parameters` TransferInitiatorsConditionParameters, required — Data required to evaluate the transfer initiator condition.
            - `userIds` string[], required — A list of user IDs to validate for the transfer initiator.
          - `operator` 'AND' | 'OR' — Boolean operators that join Conditions, and/or Actions. Must be null on the last Condition or Action, or if there is only one Condition or Action, must be non-null on all others.
        - TransferWebhookConditionRequest — Transfer webhook condition.
          - `name` 'transfer.webhook', required — Name of the condition.
          - `parameters` TransferWebhookConditionParameters, required — Data required to evaluate the transfer webhook condition.
            - `webhookUrl` string, required — The webhook url to post transfer payload to.
            - `coin` string — The asset this condition applies to.
        - TransferNotInitiatedByConditionRequest — Condition that checks if transfer was not initiated by specific users.
          - `name` 'transfer.notInitiatedBy', required — Name of the associated Condition.
          - `parameters` object, required — Required data needed to evaluate the Condition.
            - `userIds` string[], required — List of user IDs
          - `operator` 'AND' | 'OR' — Boolean operators that join Conditions, and/or Actions. Must be null on the last Condition or Action, or if there is only one Condition or Action, must be non-null on all others.
    - `actions` union[], required
      - union
        - AlwaysDenyActionRequest — Automatically reject.
          - `name` 'approvals.always.deny', required — Name of the associated Action.
        - WalletAdminActionRequest — Require Require approval from wallet admins.
          - `name` 'approvals.customer.walletAdmin', required — Name of the associated Action.
          - `parameters` object, required — Required data needed to configure the Action.
            - `minRequired` string, required — Number of required approvals
          - `operator` 'AND' | 'OR' — Boolean operators that join Conditions, and/or Actions. Must be null on the last Condition or Action, or if there is only one Condition or Action, must be non-null on all others.
        - FinalApprovalActionRequest — Require final approval from wallet users.
          - `name` 'approvals.customer.finalApproval', required — Name of the associated Action.
          - `parameters` object, required — Required data needed to configure the Action.
            - `userIds` string[], required — The final approvers
            - `initiatorIsAllowedToApprove` boolean — Whether the initiator is allowed to approve this action. true by default.
          - `operator` 'AND' | 'OR' — Boolean operators that join Conditions, and/or Actions. Must be null on the last Condition or Action, or if there is only one Condition or Action, must be non-null on all others.
        - EnterpriseUsersActionRequest — Require approval from a set of enterprise users.
          - `name` 'approvals.customer.enterpriseUser', required — Name of the associated Action.
          - `parameters` object, required — Required data needed to configure the Action.
            - `userIds` string[], required — List of enterprise users for approval
            - `minRequired` number, required — Minimum required number of approvers
            - `initiatorIsAllowedToApprove` boolean — Whether the initiator is allowed to approve this action. false by default.
          - `operator` 'AND' | 'OR' — Boolean operators that join Conditions, and/or Actions. Must be null on the last Condition or Action, or if there is only one Condition or Action, must be non-null on all others.
        - EnterpriseAdminsActionRequest — Require approval from enterprise admins.
          - `name` 'approvals.customer.enterpriseAdmin', required — Name of the associated Action.
          - `parameters` object, required — Required data needed to configure the Action.
            - `minRequired` number, required — Minimum required number of approvers
            - `initiatorIsAllowedToApprove` boolean — Whether the initiator is allowed to approve this action. false by default.
          - `operator` 'AND' | 'OR' — Boolean operators that join Conditions, and/or Actions. Must be null on the last Condition or Action, or if there is only one Condition or Action, must be non-null on all others.
        - LivenessVerificationFromEnterpriseAdminActionRequest — Require liveness verification from enterprise admins.
          - `name` 'approvals.bitgo.livenessVerificationFromEnterpriseAdmins', required — Name of the associated Action.
          - `parameters` object, required — Required data needed to configure the Action.
            - `minRequired` number, required — Minimum required number of approvers
            - `initiatorIsAllowedToApprove` boolean — Whether the initiator is allowed to approve this action. false by default.
          - `operator` 'AND' | 'OR' — Boolean operators that join Conditions, and/or Actions. Must be null on the last Condition or Action, or if there is only one Condition or Action, must be non-null on all others.
        - LivenessVerificationFromRequestorActionRequest — Require liveness verification from the requestor.
          - `name` 'approvals.bitgo.livenessVerificationFromRequestor', required — Name of the associated Action.
          - `parameters` object — Required data needed to configure the Action.
            - `minRequired` number — Minimum required number of approvers
            - `initiatorIsAllowedToApprove` boolean — Whether the initiator is allowed to approve this action. false by default.
          - `operator` 'AND' | 'OR' — Boolean operators that join Conditions, and/or Actions. Must be null on the last Condition or Action, or if there is only one Condition or Action, must be non-null on all others.
        - LivenessVerificationFromEnterpriseUsersActionRequest — Require liveness verification from specific users.
          - `name` 'approvals.bitgo.livenessVerificationFromUsers', required — Name of the associated Action.
          - `parameters` object, required — Required data needed to configure the Action.
            - `userIds` string[], required — List of enterprise users for approval
            - `minRequired` number, required — Minimum required number of approvers
            - `initiatorIsAllowedToApprove` boolean — Whether the initiator is allowed to approve this action. false by default.
          - `operator` 'AND' | 'OR' — Boolean operators that join Conditions, and/or Actions. Must be null on the last Condition or Action, or if there is only one Condition or Action, must be non-null on all others.
        - NoneActionRequest — No action required.
          - `name` 'approvals.bitgo.noop', required — Name of the associated Action.
          - `parameters` object — Required data needed to configure the Action.
          - `operator` 'AND' | 'OR' — Boolean operators that join Conditions, and/or Actions. Must be null on the last Condition or Action, or if there is only one Condition or Action, must be non-null on all others.
        - VideoApprovalActionRequest — Require BitGo video approval.
          - `name` 'approvals.bitgo.videoApproval', required — Name of the associated Action.
          - `parameters` object, required — Required data needed to configure the Action.
          - `operator` 'AND' | 'OR' — Boolean operators that join Conditions, and/or Actions. Must be null on the last Condition or Action, or if there is only one Condition or Action, must be non-null on all others.
        - IdVerificationActionRequest — Require BitGo ID verification.
          - `name` 'approvals.bitgo.idVerification', required — Name of the associated Action.
          - `parameters` object, required — Required data needed to configure the Action.
            - `isFallback` boolean — Whether this is a fallback action.
          - `operator` 'AND' | 'OR' — Boolean operators that join Conditions, and/or Actions. Must be null on the last Condition or Action, or if there is only one Condition or Action, must be non-null on all others.
        - OrganizationAdminActionRequest — Require approval from organization admins.
          - `name` 'approvals.customer.organizationAdmin', required — Name of the associated Action.
          - `parameters` object, required — Required data needed to configure the Action.
            - `minRequired` string, required — Minimum required number of approvers
          - `operator` 'AND' | 'OR' — Boolean operators that join Conditions, and/or Actions. Must be null on the last Condition or Action, or if there is only one Condition or Action, must be non-null on all others.
        - LivenessVerificationActionRequest — Require liveness verification from a designated set of users.
          - `name` 'approvals.bitgo.livenessVerification', required — Name of the associated Action.
          - `parameters` object, required — Required data needed to configure the Action.
            - `livenessCheckUser` 'transactionInitiator' | 'walletAdmins' | 'videoIdUsers', required — Which set of users must complete the liveness check. * `transactionInitiator` - The user who initiated the transaction. * `walletAdmins` - The wallet admins. * `videoIdUsers` - Users enrolled in the Video ID program.
          - `operator` 'AND' | 'OR' — Boolean operators that join Conditions, and/or Actions. Must be null on the last Condition or Action, or if there is only one Condition or Action, must be non-null on all others.
  - `filteringConditions` union[], required — List of Filtering Conditions that must trigger for the policy rule to be Evaluated.
    - union
      - WalletIdsFilteringCondition — Filter by wallet ID.
        - `name` 'wallet.ids', required — Name of the condition.
        - `parameters` object, required — Required data needed to evaluate the Filtering Condition.
          - `walletId` string[], required
      - WalletTypeFilteringCondition — Filter by wallet type.
        - `name` 'wallet.type', required — Name of the condition.
        - `parameters` object, required — Required data needed to evaluate the Filtering Condition.
          - `walletType` string[], required
      - WalletAllFilteringCondition — Filter by all wallets.
        - `name` 'wallet.all', required — Name of the condition.
      - RuleAllFilteringCondition — Filter by all rules.
        - `name` 'rule.all', required — Name of the condition.
        - `parameters` object — Required data needed to evaluate the Filtering Condition.
      - WalletMultipleIdsFilteringCondition — Filter by multiple wallet IDs.
        - `name` 'wallet.multiple.ids', required — Name of the condition.
        - `parameters` object, required — Required data needed to evaluate the Filtering Condition.
          - `walletId` string[], required
  - `lockType` 'LOCK_AFTER_DATE' | 'PERMANENT' | 'NEVER' — Indicates how the policy rule is locked. * `LOCK_AFTER_DATE` - Will lock after the lockDate set on the policy rule. * `PERMANENT` - Is permanently locked. * `NEVER` - Is never locked.
  - `lockDate` string, date-time — The date after which the policy rule will be locked. Only applicable if the policy rule is locked with `LOCK_AFTER_DATE`.

## Response `201`

The newly created policy rule

- PolicyRule1 — A Policy Rule, the combination of a Scope, a Touchpoint, Conditions, and Actions. It allows you to define what needs to happen (Actions) before a user can execute a sensitive operation (Touchpoint) on a Scope (e.g. a Wallet) depending on the specific details of the operation (Conditions). See Concepts.
  - `id` string, required — Id of the Policy Rule. This identifier is not unique in isolation, it must be paired with an specific Policy Rule Version number to uniquely identified a particular version of a Policy Rule. A UUID.
  - `uniqueId` string, required — The uniqueId of the Policy Rule version. A UUID.
  - `name` string, required — Human readable name of the rule.
  - `status` 'ACTIVE' | 'INACTIVE' | 'DENIED' | 'PENDING_APPROVAL' | 'UNLOCK_PENDING', required — Indicates if the Policy Rule is considered in Evaluations. * `ACTIVE` - Will be Evaluated. * `INACTIVE` - Will NOT be Evaluated. * `DENIED` - The requested policy rule change was Denied. * `PENDING_APPROVAL` - This version of the policy rule is Pending Approval before it can be activated. * `UNLOCK_PENDING` - This version of the policy rule is created when a request to unlock a policy is initiated.
  - `version` integer — The Policy Rule Version, an integer that is incremented each time the Policy Rule changes.
  - `adminOnly` boolean, required — true, if the Policy Rule is a BitGo internal rule. Typically, this allows setting Global Policy Rules across enterprises.
  - `touchpointId` string, required — The id of the Touchpoint associated with the Policy Rule. A UUID.
  - `touchpointLabel` string, required — Label of the Touchpoint associated with the Policy Rule. For example the Transfer from a Wallet Touchpoint.
  - `scopeId` string, required — The id of the Scope associated with the Policy Rule. A UUID.
  - `scopeLabel` string, required — Label of the Scope associated with the Policy Rule. For example the All Wallets Scope.
  - `clauses` Clause[], required — List of Policy Rule Clauses: a combination of Conditions and Actions.
    - `actions` union[]
      - union
        - AlwaysDenyActionRequest — Automatically reject.
          - `name` 'approvals.always.deny', required — Name of the associated Action.
        - EnterpriseAdminActionRequest — Require enterprise-admin approval.
          - `name` 'approvals.customer.enterpriseAdmin', required — Name of the associated Action.
          - `operator` 'AND' | 'OR' — Boolean operators that join Conditions, and/or Actions. Must be null on the last Condition or Action, or if there is only one Condition or Action, must be non-null on all others.
        - WalletAdminActionRequest — Require Require approval from wallet admins.
          - `name` 'approvals.customer.walletAdmin', required — Name of the associated Action.
          - `parameters` object, required — Required data needed to configure the Action.
            - `minRequired` string, required — Number of required approvals
          - `operator` 'AND' | 'OR' — Boolean operators that join Conditions, and/or Actions. Must be null on the last Condition or Action, or if there is only one Condition or Action, must be non-null on all others.
        - FinalApprovalActionRequest — Require final approval from wallet users.
          - `name` 'approvals.customer.finalApproval', required — Name of the associated Action.
          - `parameters` object, required — Required data needed to configure the Action.
            - `userIds` string[], required — The final approvers
            - `initiatorIsAllowedToApprove` boolean — Whether the initiator is allowed to approve this action. true by default.
          - `operator` 'AND' | 'OR' — Boolean operators that join Conditions, and/or Actions. Must be null on the last Condition or Action, or if there is only one Condition or Action, must be non-null on all others.
        - EnterpriseUsersActionRequest — Require approval from a set of enterprise users.
          - `name` 'approvals.customer.enterpriseUser', required — Name of the associated Action.
          - `parameters` object, required — Required data needed to configure the Action.
            - `userIds` string[], required — List of enterprise users for approval
            - `minRequired` number, required — Minimum required number of approvers
            - `initiatorIsAllowedToApprove` boolean — Whether the initiator is allowed to approve this action. false by default.
          - `operator` 'AND' | 'OR' — Boolean operators that join Conditions, and/or Actions. Must be null on the last Condition or Action, or if there is only one Condition or Action, must be non-null on all others.
    - `conditions` union[]
      - union
        - TransferAmountConditionRequest — Transfer-amount condition.
          - `name` 'transfer.amount', required — Name of the condition.
          - `parameters` TransferAmountConditionParameters, required — Data required to evaluate the condition.
            - `operator` '>' | '>=' | '<' | '<=', required — The comparison operator to use when comparing the transfer amount with the given limit
            - `amount` string, required — The transfer amount is compared with this limit.
            - `coin` string, required — This condition only applies to transfers of this currency (USD applies to all transfers).
          - `operator` 'AND' | 'OR' — Boolean operators that join Conditions, and/or Actions. Must be null on the last Condition or Action, or if there is only one Condition or Action, must be non-null on all others.
        - TransferVelocityLimitConditionRequest — Velocity-limit condition.
          - `name` 'transfer.velocity.limit', required — Name of the condition.
          - `parameters` TransferVelocityLimitConditionParameters, required — Data required to evaluate the transfer velocity limit condition.
            - `scope` 'wallet' | 'enterprise', required — Entities to include in the velocity calculation.
            - `timeWindow` string, required — A window of time in which a set of amount can be spent.
            - `amount` string, required — The transfer amount is compared with this limit.
            - `coin` string, required — The unit that the amount is denoted in, in either crypto or a fiat currency.
          - `operator` 'AND' | 'OR' — Boolean operators that join Conditions, and/or Actions. Must be null on the last Condition or Action, or if there is only one Condition or Action, must be non-null on all others.
        - TransferDestinationTypeConditionRequest — Destination condition.
          - `name` 'transfer.destination.type', required — Name of the condition.
          - `parameters` TransferDestinationTypeConditionParameters, required — Data required to evaluate the transfer destination condition.
            - `type` 'whitelistedAddress' | 'nonWhitelistedAddress' | 'outsideEnterprise', required — The type of destination this condition will match.
            - `coin` string — The asset this condition applies to.
          - `operator` 'AND' | 'OR' — Boolean operators that join Conditions, and/or Actions. Must be null on the last Condition or Action, or if there is only one Condition or Action, must be non-null on all others.
        - TransferInitiatorsConditionRequest — Initiator condition.
          - `name` 'transfer.initiators', required — Name of the condition.
          - `parameters` TransferInitiatorsConditionParameters, required — Data required to evaluate the transfer initiator condition.
            - `userIds` string[], required — A list of user IDs to validate for the transfer initiator.
          - `operator` 'AND' | 'OR' — Boolean operators that join Conditions, and/or Actions. Must be null on the last Condition or Action, or if there is only one Condition or Action, must be non-null on all others.
  - `filteringConditions` union[], required — List of Filtering Conditions that must trigger for this Policy Rule to be Evaluated.
    - union
      - WalletTypeFilteringCondition — Filter by wallet type.
        - `name` 'wallet.type', required — Name of the condition.
        - `parameters` object, required — Required data needed to evaluate the Filtering Condition.
          - `walletType` string[], required
      - WalletIdsFilteringCondition — Filter by wallet ID.
        - `name` 'wallet.ids', required — Name of the condition.
        - `parameters` object, required — Required data needed to evaluate the Filtering Condition.
          - `walletId` string[], required
      - WalletAllFilteringCondition — Filter by all wallets.
        - `name` 'wallet.all', required — Name of the condition.
      - RuleAllFilteringCondition — Filter by all rules.
        - `name` 'rule.all', required — Name of the condition.
        - `parameters` object — Required data needed to evaluate the Filtering Condition.
      - WalletMultipleIdsFilteringCondition — Filter by multiple wallet IDs.
        - `name` 'wallet.multiple.ids', required — Name of the condition.
        - `parameters` object, required — Required data needed to evaluate the Filtering Condition.
          - `walletId` string[], required
  - `locked` boolean, required — true, if the Policy Rule is locked, false otherwise.
  - `lockType` 'LOCK_AFTER_DATE' | 'PERMANENT', required — Indicates how the Policy Rule is locked. * `LOCK_AFTER_DATE` - Will lock after the lockDate set on the Policy Rule. * `PERMANENT` - Is permanently locked.
  - `lockDate` string, date-time — The date after which the Policy Rule will be locked. Only applicable if the Policy Rule is locked with `LOCK_AFTER_DATE`.
  - `enterpriseId` string — The id of the Enterprise this Policy Rule belongs to.
  - `organizationId` string — The id of the Organization this Policy Rule belongs to.
  - `lastTriggeredDate` string, date-time — The date when the Policy Rule was last triggered. Only applicable if the Policy Rule is locked with `LOCK_AFTER_DATE`.
  - `lastTriggeredEvaluationId` string — The id of the Evaluation that last triggered the Policy Rule. A UUID.
  - `createdBy` string, required — The id of the user who created the Policy Rule or the string \"BitGo\".
  - `modifiedBy` string, required — The id of the user who last modified the Policy Rule or the string \"BitGo\".
  - `createdDate` string, date-time, required — The date when the Policy Rule was created. A timestamp.
  - `modifiedDate` string, date-time, required — The date when the Policy Rule was last modified. A timestamp.
  - `lockModifiedBy` string — The id of the user who last modified the lock of the Policy Rule.
  - `evaluationId` string — The id of the Evaluation that was done when this Policy Rule version was requested to be created, modified or deleted. A UUID.

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — The specified resource was not found
- `500` — Server Error - Transient error please try again

---

[API](https://skmtc.net/bitgo/apis/bitgo-api.md) · [All operations](https://skmtc.net/bitgo/apis/bitgo-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/bitgo/bitgo-api/revisions/e445c15e5bee/schema)
