# Release restriction
Releases all or part of the funds from an existing restriction by restricted funds ID.
NOTE:
- This endpoint requires an account token - an access token encoded with an external account ID. Tokens can expire quickly, which can result in a `401 Unauthorized` message.
This endpoint generates the following events:
- [Platform authorization created](https://developers.pismo.io/events/docs/platform-authorization-platform-authorization-1)
- [Account balance changed](https://developers.pismo.io/events/docs/availables-change-available-1)
- [Restricted Funds created or released](https://developers.pismo.io/events/docs/corporate-restricted-funds-1)
- [Account balance changed](https://developers.pismo.io/events/docs/account-balances-balance-change-1)
See [Data and reporting](doc:data-reporting-overview) for more information on events and setting up event notifications.
# OpenAPI definition
```json
{
"openapi": "3.0.0",
"info": {
"title": "Banking - Transaction banking",
"version": "0.9.0",
"description": "Transaction banking API",
"contact": {
"name": "API Support",
"url": "https://developers.pismo.io/support/"
},
"license": {
"name": "Copyright Pismo"
}
},
"servers": [
{
"url": "https://sandbox.pismolabs.io",
"description": "Sandbox API server for testing"
}
],
"security": [
{
"BearerAuth": []
}
],
"tags": [
{
"name": "Restricted funds",
"description": "Restricted funds endpoints"
}
],
"components": {
"parameters": {
"RestrictedFundsIDPath": {
"name": "restrictedFundsId",
"in": "path",
"description": "Restricted Funds ID",
"schema": {
"type": "string",
"format": "uuid"
},
"example": "e4adf199-c925-4d11-b002-c5bfd5679030",
"required": true
}
},
"schemas": {
"ErrorCode": {
"description": "Error code\n`minLength: 1`\n`maxLength: 12`\n",
"type": "string",
"minLength": 1,
"maxLength": 12,
"example": "WPMT0017"
},
"ErrorMessage": {
"description": "Error message\n`minLength: 1`\n`maxLength: 1000`\n",
"type": "string",
"minLength": 1,
"maxLength": 1000,
"example": "Invalid JSON payload received: Error unmarshalling request"
},
"ErrorResponse": {
"type": "object",
"properties": {
"code": {
"$ref": "#/components/schemas/ErrorCode"
},
"message": {
"$ref": "#/components/schemas/ErrorMessage"
}
}
},
"Metadata": {
"type": "object",
"description": "Key-value pairs containing data intended for storage in the Pismo system.
\nNOTES:\n- The `metadata` field includes a `corporate_metadata` object with the following fields:\n - `credit_external_account_id`: Included in the `corporate_metadata` field when it's provided in the credit leg.\n - `debit_external_account_id`: Included in the `corporate_metadata` field when it's provided in the debit leg.\n - `earmark_id`: Included in the `corporate_metadata` field when it's provided in the debit leg.\n- The `corporate_metadata` attribute must be an object. A type mismatch results in an error as mapped in the responses section.\n",
"example": {
"my-id": 2932
}
},
"RestrictedFundsAppliedAmount": {
"type": "number",
"format": "float",
"description": "Amount actually executed by the operation at the time it was applied.\n\nDepending on the `hold_method`, this value may be different from the requested_amount.\n\nHold Method:\n - STRICT holds either apply the full requested amount or fail\n - FLEXIBLE may apply only the available portion\n\nType:\n - For RESTRICT_FUNDS, it is the portion of the requested amount that was successfully held.\n - For RELEASE_FUNDS, it is the portion that was actually released back to the available balance.\n",
"minimum": 0,
"multipleOf": 0.0001,
"maximum": 100000000000000000,
"example": 800.22
},
"RestrictedFundsAmount": {
"type": "number",
"format": "float",
"description": "Amount requested by the operation.\n\nThe final applied amount may differ (see applied_amount) depending on execution rules and available balance at execution time.\n\nNotes:\n - For `RESTRICT_FUNDS`, this is the amount to be held.\n - For `RELEASE_FUNDS`, this is the amount to be released.\n - Precision depends on the currency's minor units. For example:\n - 2 decimals (USD, EUR) → multiples of 0.01\n - 3 decimals (BHD, JOD, KWD, OMR, TND) → multiples of 0.001\n - 4 decimals (CLF) → multiples of 0.0001\n",
"minimum": 0.0001,
"maximum": 100000000000000000
},
"RestrictedFundsRequestedAmount": {
"type": "number",
"format": "float",
"description": "Amount originally requested at the time the restriction was created; remains unchanged after the initial request.",
"minimum": 0.0001,
"maximum": 100000000000000000
},
"RestrictedFundsHoldMethod": {
"type": "string",
"description": "Determines how the system processes the restriction request in relation to the available balance at the time of execution.\n\nNotes:\n - `STRICT`: Applies to the full requested amount or fails (no partial holds).\n - `FLEXIBLE`: Can apply only to the available portion, resulting in a partial hold.",
"enum": [
"STRICT",
"FLEXIBLE"
],
"example": "STRICT"
},
"RestrictedFundsHeldAmount": {
"type": "number",
"format": "float",
"minimum": 0,
"maximum": 100000000000000000
},
"RestrictedFundsID": {
"type": "string",
"format": "uuid",
"maxLength": 36,
"example": "e4adf199-c925-4d11-b002-c5bfd5679030"
},
"RestrictedFundsReleaseRequest": {
"description": "Create funds restriction request body",
"type": "object",
"properties": {
"amount": {
"$ref": "#/components/schemas/RestrictedFundsAmount"
},
"operation": {
"$ref": "#/components/schemas/RestrictedFundsRequestOperation"
},
"soft_descriptor": {
"$ref": "#/components/schemas/RestrictedFundsSoftDescriptor"
}
},
"required": [
"amount",
"operation"
]
},
"RestrictedFunds": {
"type": "object",
"properties": {
"restricted_funds_id": {
"$ref": "#/components/schemas/RestrictedFundsID"
},
"hold_method": {
"$ref": "#/components/schemas/RestrictedFundsHoldMethod"
},
"requested_amount": {
"$ref": "#/components/schemas/RestrictedFundsRequestedAmount"
},
"held_amount": {
"$ref": "#/components/schemas/RestrictedFundsHeldAmount"
},
"created_at": {
"$ref": "#/components/schemas/RestrictedFundsCreatedAt"
},
"soft_descriptor": {
"$ref": "#/components/schemas/RestrictedFundsSoftDescriptor"
},
"operations": {
"$ref": "#/components/schemas/RestrictedFundsOperations"
}
},
"required": [
"restricted_funds_id",
"hold_method",
"requested_amount",
"held_amount",
"created_at"
]
},
"RestrictedFundsCreatedAt": {
"type": "string",
"format": "date-time",
"minLength": 1,
"maxLength": 30,
"description": "Date and time when the restriction or operation was created, shown in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
\n`minLength: 1`\n`maxLength: 30`\n",
"example": "2023-04-27T12:01:24Z"
},
"RestrictedFundsAppliedAt": {
"type": "string",
"format": "date-time",
"minLength": 1,
"maxLength": 30,
"description": "Date and time when the financial operation was actually executed, shown in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
\n`minLength: 1`\n`maxLength: 30`\n",
"example": "2023-04-27T12:01:24Z"
},
"RestrictedFundsOperationType": {
"type": "string",
"description": "Represents the kind of financial operation being performed.\nIndicates whether the operation is creating a funds restriction or releasing funds.\n",
"enum": [
"RESTRICT_FUNDS",
"RELEASE_FUNDS"
],
"example": "RELEASE_FUNDS"
},
"RestrictedFundsOperation": {
"type": "object",
"properties": {
"tracking_id": {
"$ref": "#/components/schemas/TrackingID"
},
"type": {
"$ref": "#/components/schemas/RestrictedFundsOperationType"
},
"status": {
"$ref": "#/components/schemas/RestrictedFundsOperationStatus"
},
"processing_code": {
"$ref": "#/components/schemas/RestrictedFundsProcessingCode"
},
"requested_amount": {
"$ref": "#/components/schemas/RestrictedFundsAmount"
},
"applied_amount": {
"$ref": "#/components/schemas/RestrictedFundsAppliedAmount"
},
"created_at": {
"$ref": "#/components/schemas/RestrictedFundsCreatedAt"
},
"soft_descriptor": {
"$ref": "#/components/schemas/RestrictedFundsSoftDescriptor"
},
"applied_at": {
"$ref": "#/components/schemas/RestrictedFundsAppliedAt"
},
"metadata": {
"$ref": "#/components/schemas/Metadata"
}
},
"required": [
"tracking_id",
"type",
"status",
"processing_code",
"requested_amount",
"applied_amount",
"created_at"
]
},
"RestrictedFundsOperations": {
"type": "array",
"description": "List of operations performed to restrict or release funds.",
"items": {
"$ref": "#/components/schemas/RestrictedFundsOperation"
}
},
"RestrictedFundsProcessingCode": {
"type": "string",
"description": "Processing code used to create the underlying transaction. Each operation type uses a default processing code.
\n`minLength: 1`\n`maxLength: 6`\n",
"minLength": 1,
"maxLength": 6,
"example": "PSM045"
},
"RestrictedFundsRequestOperation": {
"description": "Represents the data of the hold or release transaction.",
"type": "object",
"properties": {
"tracking_id": {
"$ref": "#/components/schemas/TrackingID"
},
"soft_descriptor": {
"$ref": "#/components/schemas/RestrictedFundsSoftDescriptor"
},
"metadata": {
"$ref": "#/components/schemas/Metadata"
}
},
"required": [
"tracking_id"
]
},
"RestrictedFundsSoftDescriptor": {
"type": "string",
"description": "Brief description that helps to identify a particular restriction or operation.",
"example": "FDIC 12 C.F.R. § 360.9",
"maxLength": 100,
"minLength": 0
},
"RestrictedFundsOperationStatus": {
"type": "string",
"description": "Indicates the current execution state of the operation.\n",
"enum": [
"PROCESSING",
"SUCCEEDED",
"FAILED",
"TIMED_OUT"
],
"example": "SUCCEEDED"
},
"TrackingID": {
"type": "string",
"description": "A unique payment tracking number provided by the client. If an existing `tracking_id` already exists in the system, the API returns a `409` error.\n\nThis field is:\n - Unique within the Organization.\n - Immutable — It can't be updated.\n - Not recyclable — You can't reuse a `tracking_id`.\n",
"minLength": 1,
"maxLength": 43,
"example": "0a50c88a-ade8-4bcc-a639-9a0b0f11e244"
}
},
"responses": {
"500InternalServer": {
"description": "Internal Server Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
},
"examples": {
"Generic internal error": {
"value": {
"code": "ECMN9999",
"message": "Internal error"
}
}
}
}
}
}
},
"securitySchemes": {
"BearerAuth": {
"type": "http",
"scheme": "bearer",
"bearerFormat": "JWT"
}
}
},
"paths": {
"/corporate/v1/restricted-funds/{restrictedFundsId}": {
"patch": {
"summary": "Release restriction",
"description": "Releases all or part of the funds from an existing restriction by restricted funds ID.\n\nNOTE:\n- This endpoint requires an account token - an access token encoded with an external account ID. Tokens can expire quickly, which can result in a `401 Unauthorized` message.\nThis endpoint generates the following events:\n- [Platform authorization created](https://developers.pismo.io/events/docs/platform-authorization-platform-authorization-1)\n- [Account balance changed](https://developers.pismo.io/events/docs/availables-change-available-1)\n- [Restricted Funds created or released](https://developers.pismo.io/events/docs/corporate-restricted-funds-1)\n- [Account balance changed](https://developers.pismo.io/events/docs/account-balances-balance-change-1)\n\nSee [Data and reporting](https://developers.pismo.io/pismo-docs/docs/data-reporting-overview) for more information on events and setting up event notifications.",
"operationId": "patch-corporate-v1-restricted-funds",
"tags": [
"Restricted funds"
],
"parameters": [
{
"$ref": "#/components/parameters/RestrictedFundsIDPath"
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RestrictedFundsReleaseRequest"
},
"example": {
"amount": 100.21,
"operation": {
"tracking_id": "9d15bfd1-5db9-4e96-b846-8d8707454430",
"soft_descriptor": "Funds restriction requested by FDIC 12 C.F.R. 360.9",
"metadata": {
"key": "value"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RestrictedFunds"
},
"example": {
"restricted_funds_id": "4a4060d5-3649-46e8-8d64-93949b212918",
"hold_method": "FLEXIBLE",
"requested_amount": 100.21,
"held_amount": 99.9,
"created_at": "2025-05-29T11:33:22Z",
"operations": [
{
"tracking_id": "9d15bfd1-5db9-4e96-b846-8d8707454430",
"type": "RESTRICT_FUNDS",
"status": "SUCCEEDED",
"processing_code": "PSM045",
"soft_descriptor": "Funds restriction requested by FDIC 12 C.F.R. 360.9",
"requested_amount": 100.21,
"applied_amount": 99.9,
"created_at": "2025-05-29T11:33:22Z",
"applied_at": "2025-05-29T11:33:52Z",
"metadata": {
"key": "value"
}
},
{
"tracking_id": "4c9b7b9f-7959-40dc-9cf4-0019c1f12c7f",
"type": "RELEASE_FUNDS",
"status": "SUCCEEDED",
"processing_code": "PSM047",
"requested_amount": 99.9,
"applied_amount": 99.9,
"created_at": "2025-05-29T12:14:12Z",
"applied_at": "2025-05-29T12:14:22Z",
"metadata": {
"key": "value"
}
}
]
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
},
"examples": {
"Invalid JSON": {
"value": {
"code": "WRFO0001",
"message": "Invalid JSON payload received: Error unmarshalling request"
}
},
"Amount exceeds the held amount": {
"value": {
"code": "WRFO0008",
"message": "Release amount exceeds the currently held amount"
}
},
"Invalid decimal places": {
"value": {
"code": "WRFO0009",
"message": "The number of decimal places is not compatible with the specified currency"
}
},
"Operation Blocked": {
"value": {
"code": "WOBK0007",
"message": "Operations blocked for account"
}
},
"Invalid account status": {
"value": {
"code": "WRFO0011",
"message": "Invalid account status"
}
}
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
},
"examples": {
"Tracking ID already exist": {
"value": {
"code": "WRFO0005",
"message": "tracking_id is already in use"
}
}
}
}
}
},
"429": {
"description": "Too many requests",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
},
"examples": {
"Account locked": {
"value": {
"code": "WRFO0003",
"message": "Account is locked"
}
}
}
}
}
},
"500": {
"$ref": "#/components/responses/500InternalServer"
}
},
"security": [
{
"BearerAuth": []
}
]
}
}
}
}
```