Skip to content
  • Auto
  • Light
  • Dark
Get started
View as Markdown
Copy Markdown

Open in Claude
Open in ChatGPT

Hold a payout

client.payouts.hold(stringid, PayoutHoldParams { reason, correlationID, idempotencyKey, 2 more } params, RequestOptionsoptions?): PayoutV1 { data, meta, response_type }
put/v1/payouts/{id}/hold

Hold a payout to prevent it from being processed. The status of the payout must be created, scheduled, or on_hold.

ParametersExpand Collapse
id: string
params: PayoutHoldParams { reason, correlationID, idempotencyKey, 2 more }
reason: string

Body param: Details about why the payout status was updated.

correlationID?: string

Header param: Optional client generated identifier to trace and debug a series of requests.

idempotencyKey?: string

Header param: Optional client generated value to use for idempotent requests.

maxLength40
minLength10
requestID?: string

Header param: Optional client generated identifier to trace and debug a request.

straddleAccountID?: string

Header param: For use by platforms to specify an account id and set scope of a request.

formatuuid
ReturnsExpand Collapse
PayoutV1 { data, meta, response_type }
data: Data { id, amount, config, 18 more }
id: string

Unique identifier for the payout.

formatuuid
amount: number

The amount of the payout in cents.

formatint32
config: Config { sandbox_outcome }

Configuration for the payout.

sandbox_outcome?: "standard" | "paid" | "on_hold_daily_limit" | 8 more

Payment will simulate processing if not Standard.

Accepts one of the following:
"standard"
"paid"
"on_hold_daily_limit"
"cancelled_for_fraud_risk"
"cancelled_for_balance_check"
"failed_insufficient_funds"
"reversed_insufficient_funds"
"failed_customer_dispute"
"reversed_customer_dispute"
"failed_closed_bank_account"
"reversed_closed_bank_account"
currency: string

The currency of the payout. Only USD is supported.

description: string

An arbitrary description for the payout.

device: DeviceInfoV1 { ip_address }

Information about the device used when the customer authorized the payout.

ip_address: string

The IP address of the device used when the customer authorized the charge or payout. Use 0.0.0.0 to represent an offline consent interaction.

formatipv4
external_id: string

Unique identifier for the payout in your database. This value must be unique across all payouts.

funding_ids: Array<string>

Funding Ids

paykey: string

Value of the paykey used for the payout.

payment_date: string

The desired date on which the payment should be occur. For payouts, this means the date you want the funds to be sent from your bank account.

formatdate
status: "created" | "scheduled" | "failed" | 5 more

The current status of the payout.

Accepts one of the following:
"created"
"scheduled"
"failed"
"cancelled"
"on_hold"
"pending"
"paid"
"reversed"
status_details: StatusDetailsV1 { changed_at, message, reason, 2 more }

Details about the current status of the payout.

changed_at: string

The time the status change occurred.

formatdate-time
message: string

A human-readable description of the current status.

reason: "insufficient_funds" | "closed_bank_account" | "invalid_bank_account" | 17 more

A machine-readable identifier for the specific status, useful for programmatic handling.

Accepts one of the following:
"insufficient_funds"
"closed_bank_account"
"invalid_bank_account"
"invalid_routing"
"disputed"
"payment_stopped"
"owner_deceased"
"frozen_bank_account"
"risk_review"
"fraudulent"
"duplicate_entry"
"invalid_paykey"
"payment_blocked"
"amount_too_large"
"too_many_attempts"
"internal_system_error"
"user_request"
"ok"
"other_network_return"
"payout_refused"
source: "watchtower" | "bank_decline" | "customer_dispute" | 2 more

Identifies the origin of the status change (e.g., bank_decline, watchtower). This helps in tracking the cause of status updates.

Accepts one of the following:
"watchtower"
"bank_decline"
"customer_dispute"
"user_action"
"system"
code?: string | null

The status code if applicable.

status_history: Array<StatusHistory>

History of the status changes for the payout.

changed_at: string

The time the status change occurred.

formatdate-time
message: string

A human-readable description of the status.

reason: "insufficient_funds" | "closed_bank_account" | "invalid_bank_account" | 17 more

A machine-readable identifier for the specific status, useful for programmatic handling.

Accepts one of the following:
"insufficient_funds"
"closed_bank_account"
"invalid_bank_account"
"invalid_routing"
"disputed"
"payment_stopped"
"owner_deceased"
"frozen_bank_account"
"risk_review"
"fraudulent"
"duplicate_entry"
"invalid_paykey"
"payment_blocked"
"amount_too_large"
"too_many_attempts"
"internal_system_error"
"user_request"
"ok"
"other_network_return"
"payout_refused"
source: "watchtower" | "bank_decline" | "customer_dispute" | 2 more

Identifies the origin of the status change (e.g., bank_decline, watchtower). This helps in tracking the cause of status updates.

Accepts one of the following:
"watchtower"
"bank_decline"
"customer_dispute"
"user_action"
"system"
status: "created" | "scheduled" | "failed" | 5 more

The current status of the charge or payout.

Accepts one of the following:
"created"
"scheduled"
"failed"
"cancelled"
"on_hold"
"pending"
"paid"
"reversed"
code?: string | null

The status code if applicable.

created_at?: string | null

The time the payout was created.

formatdate-time
customer_details?: CustomerDetailsV1 { id, customer_type, email, 2 more }

Information about the customer associated with the payout.

id: string

Unique identifier for the customer

formatuuid
customer_type: "individual" | "business"

The type of customer

Accepts one of the following:
"individual"
"business"
email: string

The customer's email address

name: string

The name of the customer

phone: string

The customer's phone number in E.164 format

effective_at?: string | null

The actual date on which the payment occurred. For payouts, this is the date the funds were sent from your bank account.

formatdate-time
metadata?: Record<string, string> | null

Up to 20 additional user-defined key-value pairs. Useful for storing additional information about the payout in a structured format.

paykey_details?: PaykeyDetailsV1 { id, customer_id, label, balance }

Information about the paykey used for the payout.

id: string

Unique identifier for the paykey.

formatuuid
customer_id: string

Unique identifier for the customer associated with the paykey.

formatuuid
label: string

Human-readable label that combines the bank name and masked account number to help easility represent this paykey in a UI

balance?: number | null

The most recent balance of the bank account associated with the paykey in dollars.

formatint32
payment_rail?: "ach"

The payment rail used for the payout.

Accepts one of the following:
"ach"
processed_at?: string | null

The time the payout was processed by Straddle and originated to the payment rail.

formatdate-time
updated_at?: string | null

The time the payout was last updated.

formatdate-time
meta: ResponseMetadata { api_request_id, api_request_timestamp }

Metadata about the API request, including an identifier and timestamp.

api_request_id: string

Unique identifier for this API request, useful for troubleshooting.

formatuuid
api_request_timestamp: string

Timestamp for this API request, useful for troubleshooting.

formatdate-time
response_type: "object" | "array" | "error" | "none"

Indicates the structure of the returned content.

  • "object" means the data field contains a single JSON object.
  • "array" means the data field contains an array of objects.
  • "error" means the data field contains an error object with details of the issue.
  • "none" means no data is returned.
Accepts one of the following:
"object"
"array"
"error"
"none"
Hold a payout
import Straddle from '@straddlecom/straddle';

const client = new Straddle({
  apiKey: 'My API Key',
});

const payoutV1 = await client.payouts.hold('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', { reason: 'reason' });

console.log(payoutV1.data);
{
  "data": {
    "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "amount": 10000,
    "config": {
      "sandbox_outcome": "standard"
    },
    "currency": "currency",
    "description": "description",
    "device": {
      "ip_address": "192.168.1.1"
    },
    "external_id": "external_id",
    "funding_ids": [
      "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"
    ],
    "paykey": "paykey",
    "payment_date": "2019-12-27",
    "status": "created",
    "status_details": {
      "changed_at": "2019-12-27T18:11:19.117Z",
      "message": "Payment successfully created and awaiting validation.",
      "reason": "insufficient_funds",
      "source": "system",
      "code": null
    },
    "status_history": [
      {
        "changed_at": "2019-12-27T18:11:19.117Z",
        "message": "Payment successfully created and awaiting validation.",
        "reason": "insufficient_funds",
        "source": "watchtower",
        "status": "created",
        "code": null
      }
    ],
    "created_at": "2019-12-27T18:11:19.117Z",
    "customer_details": {
      "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
      "customer_type": "individual",
      "email": "ron@swanson.com",
      "name": "Ron Swanson",
      "phone": "+1234567890"
    },
    "effective_at": "2019-12-27T18:11:19.117Z",
    "metadata": {
      "foo": "string"
    },
    "paykey_details": {
      "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
      "customer_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
      "label": "Bank of America ****1234",
      "balance": 0
    },
    "payment_rail": "ach",
    "processed_at": "2019-12-27T18:11:19.117Z",
    "updated_at": "2019-12-27T18:11:19.117Z"
  },
  "meta": {
    "api_request_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "api_request_timestamp": "2019-12-27T18:11:19.117Z"
  },
  "response_type": "object"
}
Returns Examples
{
  "data": {
    "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "amount": 10000,
    "config": {
      "sandbox_outcome": "standard"
    },
    "currency": "currency",
    "description": "description",
    "device": {
      "ip_address": "192.168.1.1"
    },
    "external_id": "external_id",
    "funding_ids": [
      "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"
    ],
    "paykey": "paykey",
    "payment_date": "2019-12-27",
    "status": "created",
    "status_details": {
      "changed_at": "2019-12-27T18:11:19.117Z",
      "message": "Payment successfully created and awaiting validation.",
      "reason": "insufficient_funds",
      "source": "system",
      "code": null
    },
    "status_history": [
      {
        "changed_at": "2019-12-27T18:11:19.117Z",
        "message": "Payment successfully created and awaiting validation.",
        "reason": "insufficient_funds",
        "source": "watchtower",
        "status": "created",
        "code": null
      }
    ],
    "created_at": "2019-12-27T18:11:19.117Z",
    "customer_details": {
      "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
      "customer_type": "individual",
      "email": "ron@swanson.com",
      "name": "Ron Swanson",
      "phone": "+1234567890"
    },
    "effective_at": "2019-12-27T18:11:19.117Z",
    "metadata": {
      "foo": "string"
    },
    "paykey_details": {
      "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
      "customer_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
      "label": "Bank of America ****1234",
      "balance": 0
    },
    "payment_rail": "ach",
    "processed_at": "2019-12-27T18:11:19.117Z",
    "updated_at": "2019-12-27T18:11:19.117Z"
  },
  "meta": {
    "api_request_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
    "api_request_timestamp": "2019-12-27T18:11:19.117Z"
  },
  "response_type": "object"
}