## Update a charge `client.charges.update(stringid, ChargeUpdateParamsparams, RequestOptionsoptions?): ChargeV1` **put** `/v1/charges/{id}` Change the values of parameters associated with a charge prior to processing. The status of the charge must be `created`, `scheduled`, or `on_hold`. ### Parameters - `id: string` - `params: ChargeUpdateParams` - `amount: number` Body param: The amount of the charge in cents. - `description: string | null` Body param: An arbitrary description for the charge. - `payment_date: string` Body param: The desired date on which the payment should be occur. For charges, this means the date you want the customer to be debited on. - `metadata?: Record | null` Body param: Up to 20 additional user-defined key-value pairs. Useful for storing additional information about the charge in a structured format. - `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. - `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. ### Returns - `ChargeV1` - `data: Data` - `id: string` Unique identifier for the charge. - `amount: number` The amount of the charge in cents. - `config: Config` Configuration options for the charge. - `balance_check: "required" | "enabled" | "disabled"` Defines whether to check the customer's balance before processing the charge. - `"required"` - `"enabled"` - `"disabled"` - `auto_hold?: boolean | null` Defines whether to automatically place this charge on hold after being created. - `auto_hold_message?: string | null` The reason the charge is being automatically held on creation. - `sandbox_outcome?: "standard" | "paid" | "on_hold_daily_limit" | 8 more` Payment will simulate processing if not Standard. - `"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"` - `consent_type: "internet" | "signed"` The channel or mechanism through which the payment was authorized. Use `internet` for payments made online or through a mobile app and `signed` for signed agreements where there is a consent form or contract. Use `signed` for PDF signatures. - `"internet"` - `"signed"` - `created_at: string | null` Timestamp of when the charge was created. - `currency: string` The currency of the charge. Only USD is supported. - `description: string | null` An arbitrary description for the charge. - `device: DeviceInfoV1` Information about the device used when the customer authorized the payment. - `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. - `external_id: string` Unique identifier for the charge in your database. This value must be unique across all charges. - `funding_ids: Array` Funding Ids - `paykey: string` Value of the `paykey` used for the charge. - `payment_date: string` The desired date on which the payment should be occur. For charges, this means the date you want the customer to be debited on. - `status: "created" | "scheduled" | "failed" | 6 more` The current status of the charge. - `"created"` - `"scheduled"` - `"failed"` - `"cancelled"` - `"on_hold"` - `"pending"` - `"paid"` - `"reversed"` - `"validating"` - `status_details: StatusDetailsV1` Additional details about the current status of the charge. - `changed_at: string` The time the status change occurred. - `message: string` A human-readable description of the current status. - `reason: "insufficient_funds" | "closed_bank_account" | "invalid_bank_account" | 24 more` A machine-readable identifier for the specific status, useful for programmatic handling. - `"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"` - `"cancel_request"` - `"failed_verification"` - `"require_review"` - `"blocked_by_system"` - `"watchtower_review"` - `"validating"` - `"auto_hold"` - `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. - `"watchtower"` - `"bank_decline"` - `"customer_dispute"` - `"user_action"` - `"system"` - `code?: string | null` The status code if applicable. - `status_history: Array` Status history. - `changed_at: string` The time the status change occurred. - `message: string` A human-readable description of the status. - `reason: "insufficient_funds" | "closed_bank_account" | "invalid_bank_account" | 24 more` A machine-readable identifier for the specific status, useful for programmatic handling. - `"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"` - `"cancel_request"` - `"failed_verification"` - `"require_review"` - `"blocked_by_system"` - `"watchtower_review"` - `"validating"` - `"auto_hold"` - `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. - `"watchtower"` - `"bank_decline"` - `"customer_dispute"` - `"user_action"` - `"system"` - `status: "created" | "scheduled" | "failed" | 6 more` The current status of the `charge` or `payout`. - `"created"` - `"scheduled"` - `"failed"` - `"cancelled"` - `"on_hold"` - `"pending"` - `"paid"` - `"reversed"` - `"validating"` - `code?: string | null` The status code if applicable. - `trace_ids: Record` Trace Ids. - `updated_at: string | null` Timestamp of when the charge was last updated. - `customer_details?: CustomerDetailsV1` Information about the customer associated with the charge. - `id: string` Unique identifier for the customer - `customer_type: "individual" | "business"` The type of customer - `"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` Timestamp of when the charge was effective in the customer's bank account, otherwise known as the date on which the customer is debited. - `metadata?: Record | null` Up to 20 additional user-defined key-value pairs. Useful for storing additional information about the charge in a structured format. - `paykey_details?: PaykeyDetailsV1` Information about the paykey used for the charge. - `id: string` Unique identifier for the paykey. - `customer_id: string` Unique identifier for the customer associated with the paykey. - `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. - `payment_rail?: "ach"` The payment rail that the charge will be processed through. - `"ach"` - `processed_at?: string | null` Timestamp of when the charge was processed by Straddle and originated to the payment rail. - `related_payments?: Record | null` Related payments. - `"original"` - `"resubmit"` - `"refund"` - `meta: ResponseMetadata` Metadata about the API request, including an identifier and timestamp. - `api_request_id: string` Unique identifier for this API request, useful for troubleshooting. - `api_request_timestamp: string` Timestamp for this API request, useful for troubleshooting. - `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. - `"object"` - `"array"` - `"error"` - `"none"` ### Example ```typescript import Straddle from '@straddlecom/straddle'; const client = new Straddle({ apiKey: process.env['STRADDLE_API_KEY'], // This is the default and can be omitted }); const chargeV1 = await client.charges.update('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e', { amount: 10000, description: 'Monthly subscription fee', payment_date: '2019-12-27', }); console.log(chargeV1.data); ``` #### Response ```json { "data": { "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "amount": 10000, "config": { "balance_check": "required", "auto_hold": true, "auto_hold_message": "auto_hold_message", "sandbox_outcome": "standard" }, "consent_type": "internet", "created_at": "2019-12-27T18:11:19.117Z", "currency": "currency", "description": "Monthly subscription fee", "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 } ], "trace_ids": { "foo": "string" }, "updated_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", "related_payments": { "foo": "original" } }, "meta": { "api_request_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "api_request_timestamp": "2019-12-27T18:11:19.117Z" }, "response_type": "object" } ```