openapi: 3.0.0 info: title: Fireblocks Blockchains and Assets Approval Requests Policy Editor (Beta) API description: 'Fireblocks provides a suite of applications to manage digital asset operations and a complete development platform to build your business on the blockchain. - Visit our website for more information: [Fireblocks Website](https://fireblocks.com) - Visit our developer docs: [Fireblocks DevPortal](https://developers.fireblocks.com) ' version: 1.8.0 contact: email: developers@fireblocks.com servers: - url: https://api.fireblocks.io/v1 description: Fireblocks Production Environment Base URL - url: https://sandbox-api.fireblocks.io/v1 description: Fireblocks Sandbox Environment Base URL security: [] tags: - name: Policy Editor (Beta) paths: /tap/active_policy: get: operationId: getActivePolicy summary: Get the active policy and its validation description: 'Returns the active policy and its validation.
**Note:** These endpoints are currently in beta and might be subject to changes. If you want to participate and learn more about the Fireblocks TAP, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.
Endpoint Permission: Admin, Non-Signing Admin.' tags: - Policy Editor (Beta) x-readme: code-samples: - language: javascript code: const policy = await fireblocks.getActivePolicy(); name: Fireblocks SDK Javascript example - language: typescript code: 'const response: Promise> = fireblocks.policyEditorBeta.getActivePolicy();' name: Fireblocks SDK TypeScript example - language: java code: CompletableFuture> response = fireblocks.policyEditorBeta().getActivePolicy(); name: Fireblocks SDK Java example - language: python code: response = fireblocks.policy_editor_beta.get_active_policy(); name: Fireblocks SDK Python example responses: '200': description: A policy object headers: X-Request-ID: $ref: '#/components/headers/X-Request-ID' content: application/json: schema: $ref: '#/components/schemas/PolicyAndValidationResponse' default: $ref: '#/components/responses/Error' x-codeSamples: - lang: TypeScript source: 'const response: Promise> = fireblocks.policyEditorBeta.getActivePolicy();' - lang: Java source: CompletableFuture> response = fireblocks.policyEditorBeta().getActivePolicy(); - lang: Python source: response = fireblocks.policy_editor_beta.get_active_policy(); /tap/draft: get: operationId: getDraft summary: Get the active draft description: 'Returns the active draft and its validation.
**Note:** These endpoints are currently in beta and might be subject to changes. If you want to participate and learn more about the Fireblocks TAP, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.
Endpoint Permission: Admin, Non-Signing Admin.' tags: - Policy Editor (Beta) x-readme: code-samples: - language: javascript code: const policy = await fireblocks.getDraft(); name: Fireblocks SDK Javascript example - language: typescript code: 'const response: Promise> = fireblocks.policyEditorBeta.getDraft();' name: Fireblocks SDK TypeScript example - language: java code: CompletableFuture> response = fireblocks.policyEditorBeta().getDraft(); name: Fireblocks SDK Java example - language: python code: response = fireblocks.policy_editor_beta.get_draft(); name: Fireblocks SDK Python example responses: '200': description: A draft validation response object headers: X-Request-ID: $ref: '#/components/headers/X-Request-ID' content: application/json: schema: $ref: '#/components/schemas/DraftReviewAndValidationResponse' default: $ref: '#/components/responses/Error' x-codeSamples: - lang: TypeScript source: 'const response: Promise> = fireblocks.policyEditorBeta.getDraft();' - lang: Java source: CompletableFuture> response = fireblocks.policyEditorBeta().getDraft(); - lang: Python source: response = fireblocks.policy_editor_beta.get_draft(); put: operationId: updateDraft summary: Update the draft with a new set of rules description: 'Update the draft and return its validation.
**Note:** These endpoints are currently in beta and might be subject to changes. If you want to participate and learn more about the Fireblocks TAP, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com. Learn more about Fireblocks Transaction Authorization Policy in the following [guide](https://developers.fireblocks.com/docs/set-transaction-authorization-policy).
Endpoint Permission: Admin, Non-Signing Admin.' tags: - Policy Editor (Beta) parameters: - $ref: '#/components/parameters/X-Idempotency-Key' x-readme: code-samples: - language: javascript code: const policy = await fireblocks.updateDraft(); name: Fireblocks SDK Javascript example - language: typescript code: 'const response: Promise> = fireblocks.policyEditorBeta.updateDraft(policyEditorBetaApiUpdateDraftRequest);' name: Fireblocks SDK TypeScript example - language: java code: CompletableFuture> response = fireblocks.policyEditorBeta().updateDraft(policyRules, idempotencyKey); name: Fireblocks SDK Java example - language: python code: response = fireblocks.policy_editor_beta.update_draft(policy_rules, idempotency_key); name: Fireblocks SDK Python example requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PolicyRules' responses: '200': description: A draft validation response object headers: X-Request-ID: $ref: '#/components/headers/X-Request-ID' content: application/json: schema: $ref: '#/components/schemas/DraftReviewAndValidationResponse' default: $ref: '#/components/responses/Error' x-codeSamples: - lang: TypeScript source: 'const response: Promise> = fireblocks.policyEditorBeta.updateDraft(policyEditorBetaApiUpdateDraftRequest);' - lang: Java source: CompletableFuture> response = fireblocks.policyEditorBeta().updateDraft(policyRules, idempotencyKey); - lang: Python source: response = fireblocks.policy_editor_beta.update_draft(policy_rules, idempotency_key); post: operationId: publishDraft summary: Send publish request for a certain draft id description: 'Send publish request of certain draft id and returns the response.
**Note:** These endpoints are currently in beta and might be subject to changes. If you want to participate and learn more about the Fireblocks TAP, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.
Endpoint Permission: Admin, Non-Signing Admin.' tags: - Policy Editor (Beta) x-readme: code-samples: - language: javascript code: const policy = await fireblocks.publishDraft(); name: Fireblocks SDK Javascript example - language: typescript code: 'const response: Promise> = fireblocks.policyEditorBeta.publishDraft(policyEditorBetaApiPublishDraftRequest);' name: Fireblocks SDK TypeScript example - language: java code: CompletableFuture> response = fireblocks.policyEditorBeta().publishDraft(publishDraftRequest, idempotencyKey); name: Fireblocks SDK Java example - language: python code: response = fireblocks.policy_editor_beta.publish_draft(publish_draft_request, idempotency_key); name: Fireblocks SDK Python example parameters: - $ref: '#/components/parameters/X-Idempotency-Key' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PublishDraftRequestV2' responses: '201': description: A policy publish result object headers: X-Request-ID: $ref: '#/components/headers/X-Request-ID' content: application/json: schema: $ref: '#/components/schemas/PublishResult' default: $ref: '#/components/responses/Error' x-codeSamples: - lang: TypeScript source: 'const response: Promise> = fireblocks.policyEditorBeta.publishDraft(policyEditorBetaApiPublishDraftRequest);' - lang: Java source: CompletableFuture> response = fireblocks.policyEditorBeta().publishDraft(publishDraftRequest, idempotencyKey); - lang: Python source: response = fireblocks.policy_editor_beta.publish_draft(publish_draft_request, idempotency_key); /tap/publish: post: operationId: publishPolicyRules summary: Send publish request for a set of policy rules description: 'Send publish request of set of policy rules and returns the response.
**Note:** These endpoints are currently in beta and might be subject to changes. If you want to participate and learn more about the Fireblocks TAP, please contact your Fireblocks Customer Success Manager or send an email to CSM@fireblocks.com.
Endpoint Permission: Admin, Non-Signing Admin.' tags: - Policy Editor (Beta) x-readme: code-samples: - language: javascript code: const policy = await fireblocks.publishRules(); name: Fireblocks SDK Javascript example - language: typescript code: 'const response: Promise> = fireblocks.policyEditorBeta.publishPolicyRules(policyEditorBetaApiPublishPolicyRulesRequest);' name: Fireblocks SDK TypeScript example - language: java code: CompletableFuture> response = fireblocks.policyEditorBeta().publishPolicyRules(policyRules, idempotencyKey); name: Fireblocks SDK Java example - language: python code: response = fireblocks.policy_editor_beta.publish_policy_rules(policy_rules, idempotency_key); name: Fireblocks SDK Python example parameters: - $ref: '#/components/parameters/X-Idempotency-Key' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PolicyRules' responses: '201': description: A policy publish result object headers: X-Request-ID: $ref: '#/components/headers/X-Request-ID' content: application/json: schema: $ref: '#/components/schemas/PublishResult' default: $ref: '#/components/responses/Error' x-codeSamples: - lang: TypeScript source: 'const response: Promise> = fireblocks.policyEditorBeta.publishPolicyRules(policyEditorBetaApiPublishPolicyRulesRequest);' - lang: Java source: CompletableFuture> response = fireblocks.policyEditorBeta().publishPolicyRules(policyRules, idempotencyKey); - lang: Python source: response = fireblocks.policy_editor_beta.publish_policy_rules(policy_rules, idempotency_key); components: schemas: PolicyValidation: type: object description: Policy validation object properties: status: type: string description: Validation status checkResult: $ref: '#/components/schemas/PolicyCheckResult' required: - status - checkResult PolicyRules: type: object properties: rules: description: Policy rules type: array items: $ref: '#/components/schemas/PolicyRule' DraftResponse: type: object description: Response object for draft operations properties: status: type: string description: Operation status rules: type: array description: Draft rules items: $ref: '#/components/schemas/PolicyRule' draftId: type: string description: Draft unique id metadata: $ref: '#/components/schemas/PolicyMetadata' required: - draftId - status - rules - metadata AmountAggregationTimePeriodMethod: type: string enum: - PER_SINGLE_MATCH - ACROSS_ALL_MATCHES description: '* PER_SINGLE_MATCH - Apply the limit to each listed entity * ACROSS_ALL_MATCHES - Apply the limit to the sum of all listed entities ' PolicySrcOrDestId: type: string description: 'Defines the account id, options are * "*" - All accounts * Specific account id ' PolicySrcOrDestSubType: type: string enum: - EXTERNAL - INTERNAL - CONTRACT - EXCHANGETEST - '*' description: '* EXTERNAL - A whitelisted wallet assigned as external is typically used for addresses managed by your clients and counterparties * INTERNAL - A whitelisted wallet assigned as internal, is typically used for addresses that you control outside of your Fireblocks workspace * CONTRACT - A whitelisted wallet assigned as contract is for identifying and managing external smart contracts * EXCHANGETEST - Exchanges which operate only on testnet assets * "*" - All subtypes ' PolicyTypeV2: type: string enum: - 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 description: Policy type enumeration example: TRANSFER PolicyAndValidationResponse: type: object description: Policy validation properties: policy: $ref: '#/components/schemas/PolicyResponse' validation: $ref: '#/components/schemas/PolicyValidation' required: - policy - validation ErrorSchema: type: object properties: message: type: string code: type: number PolicyMetadata: type: object description: Policy related metadata properties: editedBy: type: string description: The user id of the user who last edited the policy editedAt: type: string description: The timestamp of the last edit of the policy publishedBy: type: string description: The user id of the user who last published the policy publishedAt: type: string description: The timestamp of the last publish of the policy PolicyStatus: type: string enum: - SUCCESS - UNVALIDATED - INVALID_CONFIGURATION - PENDING - PENDING_CONSOLE_APPROVAL - AWAITING_QUORUM - UNHANDLED_ERROR description: '* SUCCESS - success * UNVALIDATED - not validated yet * INVALID_CONFIGURATION - at least one rule is invalid * PENDING - pending approval * PENDING_CONSOLE_APPROVAL - pending approval from the console app * AWAITING_QUORUM - pending quorum approval * UNHANDLED_ERROR - unhandled error ' PolicyRule: type: object description: Policy rule which is enforced on transactions properties: operator: type: string description: (deprecated - replaced by "operators") | Defines users who can initiate the type of transaction to which the rule applies. options are * "*" - All users are allowed * Specific User id deprecated: true operators: type: object description: Defines users/groups who can initiate the type of transaction to which the rule applies. properties: wildcard: type: string enum: - '*' description: 'If used then this property should appear as the only child property * "*" - All users are allowed ' users: type: array description: Set of users ids items: type: string usersGroups: type: array description: Set of group ids items: type: string services: type: array description: set of services to initiate transactions items: type: string transactionType: type: string enum: - TRANSFER - CONTRACT_CALL - PROGRAM_CALL - APPROVE - MINT - BURN - SUPPLY - REDEEM - STAKE - RAW - TYPED_MESSAGE description: "Defines the type of transaction to which the rule applies.\n * TRANSFER - Default. Transfers funds from one account to another\n * CONTRACT_CALL - Calls a smart contract, mainly for DeFi operations.\n * PROGRAM_CALL - Calls a smart contract for web3 operations on the Solana blockchain. \n * APPROVE - Allows a smart contract to withdraw from a designated wallet.\n * MINT - Perform a mint operation (increase supply) on a supported token\n * BURN - Perform a burn operation (reduce supply) on a supported token\n * SUPPLY - Use for DeFi to lend assets\n * REDEEM - Use for DeFi to get lending back\n * STAKE - Allows you to allocate and lock certain assets for earning staking rewards.\n * RAW - An off-chain message with no predefined format, use it to sign any message with your private key.\n * TYPED_MESSAGE - An off-chain message type that follows a predefined format, used to sign specific messages that are not actual transactions.\n" designatedSigner: type: string description: (deprecated - replaced by "designatedSigners") Id representing the user who signs transactions that match a specific rule deprecated: true designatedSigners: type: object description: Set of ids representing the users who signs transactions that match a specific rule properties: users: type: array description: Set of users ids items: type: string usersGroups: type: array description: Set of group ids items: type: string type: type: string description: Policy rule type enum: - TRANSFER action: type: string enum: - ALLOW - BLOCK - 2-TIER description: "Defines what occurs when a transaction meets the rule's criteria\n* ALLOW - The transaction goes through and can be signed without requiring additional approvals\n* BLOCK - The transaction is automatically blocked\n* 2-TIER - Only these users or user groups can approve \n If any of them reject the transaction before the required approval threshold is met, the transaction doesn't go through\n The list of entities are set is \"authorizationGroups\" field\n" asset: type: string description: 'Defines the type of asset being transacted, options are * "*" - All assets * Specific asset ' srcType: description: (deprecated - replaced by "src") source account type deprecated: true allOf: - $ref: '#/components/schemas/PolicySrcOrDestType' srcSubType: description: (deprecated - replaced by "src") source sub account type deprecated: true allOf: - $ref: '#/components/schemas/PolicySrcOrDestSubType' srcId: description: (deprecated - replaced by "src") source account id deprecated: true allOf: - $ref: '#/components/schemas/PolicySrcOrDestId' src: type: object description: Defines source accounts the rule allows transfers to originate from properties: ids: type: array description: A set of ids in a tuple format items: $ref: '#/components/schemas/SrcOrDestAttributes' dstType: description: (deprecated - replaced by "dst") destination account type deprecated: true allOf: - $ref: '#/components/schemas/PolicySrcOrDestType' dstSubType: description: (deprecated - replaced by "dst") destination sub account type deprecated: true allOf: - $ref: '#/components/schemas/PolicySrcOrDestSubType' dstId: description: (deprecated - replaced by "dst") destination account id deprecated: true allOf: - $ref: '#/components/schemas/PolicySrcOrDestId' dst: type: object description: Defines the destination accounts the rule allows transfers to properties: ids: type: array description: A set of ids in a tuple format items: $ref: '#/components/schemas/SrcOrDestAttributes' dstAddressType: type: string enum: - WHITELISTED - ONE_TIME - '*' description: "Defines whether the destination to which you are sending funds must be whitelisted, to allow one-time transfers to non-whitelisted external addresses, or both.\nBy default, you can only transfer to an external address after it’s whitelisted.\n * WHITELISTED - Can only be sent to whitelisted addresses.\n * ONE_TIME - Can only be sent to non-whitelisted external addresses.\n * \"*\" - can be sent to whitelisted addresses or non-whitelisted external\n" amountCurrency: type: string enum: - USD - EUR - NATIVE description: '* USD - Limits the amount of any asset users can transfer based on the USD equivalent of the asset. * EUR - Limits the amount of any asset users can transfer based on the EURO equivalent of the asset. * NATIVE - Limits the amount of an asset a user can transfer when using a specific asset. ' amountScope: type: string enum: - SINGLE_TX - TIMEFRAME description: '* SINGLE_TX - limit applies to a single transaction * TIMEFRAME - limit applies to all transactions within the defined time period ' amount: description: Defines the value a transaction must exceed for the rule to apply to it (according to the amountCurrency field) anyOf: - type: string description: Numeric string (recommended) - type: number description: Number (deprecated) periodSec: type: number description: 'Time period in seconds applied by the amountScope field to accumulate transferred amounts in transactions that match the rule, until the total exceeds the value you specify under Minimum. When the specified amount is reached within that period, whether by one or many transactions, further transactions in that period either fail or require more approvals. ' authorizers: type: array description: (deprecated - replaced by "authorizationGroups") Allowed entities which can approves a transaction deprecated: true items: type: string authorizersCount: type: number description: (deprecated - replaced by "authorizationGroups") Min amount of entities which are needed to approve a transaction deprecated: true authorizationGroups: type: object description: Defines the transaction approval terms properties: logic: type: string enum: - AND - OR description: '* AND - requires approval of all authorization groups * OR - requires approval of at least one of the authorization groups ' allowOperatorAsAuthorizer: type: boolean description: Defines whether the user who initiates a transaction can approve their own transaction and count toward the approval threshold for their transaction groups: type: array description: Groups of entities which can approve the transaction items: type: object properties: users: type: array description: User ids items: type: string usersGroups: type: array description: Group ids items: type: string th: type: number description: Represents the min amount of entities which are required to approve the transaction, default is 1. amountAggregation: type: object description: 'Defines the method by which the Policy Engine calculates accumulation. It uses the Initiator, Source, and Destination to calculate accumulation toward the value under Minimum, for the time under Time Period. ' properties: operators: $ref: '#/components/schemas/AmountAggregationTimePeriodMethod' srcTransferPeers: $ref: '#/components/schemas/AmountAggregationTimePeriodMethod' dstTransferPeers: $ref: '#/components/schemas/AmountAggregationTimePeriodMethod' rawMessageSigning: type: object description: Raw message signing configuration properties: algorithm: type: string derivationPath: type: object properties: path: type: array items: type: number applyForApprove: type: boolean description: Applying this rule over APPROVE type transactions (can only be enabled when rule's transaction type is TRANSFER) applyForTypedMessage: type: boolean description: Applying this rule over TYPED_MESSAGE type transactions (can only be enabled when rule's transaction type is CONTRACT_CALL) externalDescriptor: type: string description: A unique id identifying the rule required: - type - action - asset - amountCurrency - amountScope - amount - periodSec PublishResult: type: object description: Response object of the publish policy operation properties: status: $ref: '#/components/schemas/PolicyStatus' rules: type: array items: $ref: '#/components/schemas/PolicyRule' checkResult: $ref: '#/components/schemas/PolicyCheckResult' metadata: $ref: '#/components/schemas/PolicyMetadata' required: - status - rules - checkResult - metadata PolicySrcOrDestType: type: string enum: - EXCHANGE - UNMANAGED - VAULT - NETWORK_CONNECTION - COMPOUND - FIAT_ACCOUNT - ONE_TIME_ADDRESS - '*' description: '* EXCHANGE - A third-party exchange account connected to your workspace * UNMANAGED - A unmanaged wallet outside of Fireblocks workspace * VAULT - An account in your Fireblocks Vault * NETWORK_CONNECTION - A connection in your Fireblocks network * COMPOUND - (deprecated) An asset retrieved by using the Compound DeFI protocol * FIAT_ACCOUNT - A third-party fiat account connected to your workspace * ONE_TIME_ADDRESS - A non-whitelisted asset from your Fireblocks Workspace * "*" - All types ' DraftReviewAndValidationResponse: type: object description: Draft validation properties: draftResponse: $ref: '#/components/schemas/DraftResponse' validation: $ref: '#/components/schemas/PolicyValidation' required: - draftResponse - validation PublishDraftRequestV2: type: object description: Request schema for publishing draft with policy types and draft ID required: - policyTypes - draftId properties: policyTypes: type: array items: $ref: '#/components/schemas/PolicyTypeV2' draftId: type: string description: The ID of the draft to publish example: draft-123 PolicyRuleError: type: object description: Rule validation result error properties: errorMessage: type: string description: Error message errorCode: type: number description: error code errorCodeName: type: string description: error code name errorField: type: string enum: - operator - operators - authorizationGroups - designatedSigner - designatedSigners - contractMethods - amountAggregation - src - dst description: '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 ' required: - errorMessage - errorCode - errorCodeName - errorField PolicyResponse: type: object description: Response object for policy operations properties: rules: type: array description: A set of policy rules items: $ref: '#/components/schemas/PolicyRule' metadata: $ref: '#/components/schemas/PolicyMetadata' required: - rules - metadata PolicyRuleCheckResult: type: object description: The rule validation result properties: index: type: number description: Rule index number in the policy status: type: string description: Validation status enum: - ok - failure errors: type: array description: A set of rule validation error objects items: $ref: '#/components/schemas/PolicyRuleError' required: - index - status - errors SrcOrDestAttributes: type: array description: 'Defines source or destination component, options are: * id only * id and type - first item in the array MUST be id. * id, type and subtype - first item in the array MUST be id and second item MUST be type. ' items: anyOf: - $ref: '#/components/schemas/PolicySrcOrDestId' - $ref: '#/components/schemas/PolicySrcOrDestType' - $ref: '#/components/schemas/PolicySrcOrDestSubType' minItems: 1 maxItems: 3 PolicyCheckResult: type: object description: Policy rules validation result properties: errors: type: number description: Number of errors result: type: array description: A set of validation results items: $ref: '#/components/schemas/PolicyRuleCheckResult' required: - errors - result responses: Error: description: Error Response headers: X-Request-ID: $ref: '#/components/headers/X-Request-ID' content: application/json: schema: $ref: '#/components/schemas/ErrorSchema' parameters: X-Idempotency-Key: name: Idempotency-Key in: header description: A unique identifier for the request. If the request is sent multiple times with the same idempotency key, the server will return the same response as the first request. The idempotency key is valid for 24 hours. required: false schema: type: string example: some-unique-id securitySchemes: bearerTokenAuth: type: http scheme: bearer bearerFormat: JWT ApiKeyAuth: type: apiKey in: header name: X-API-Key