---
title: "Debit a PayMongo Wallet"
method: POST
path: "/v1/paymongo_wallet/transactions"
tags: ["PayMongo Wallet"]
---

# Debit a PayMongo Wallet

`POST /v1/paymongo_wallet/transactions`

## Request

- Base URL: `https://ewallets-api.paymongo.com`
- URL: `https://ewallets-api.paymongo.com/v1/paymongo_wallet/transactions`
- Auth: HTTP basic

Creates one transaction per attach attempt and sends the debit from the payer's wallet to the PayMongo wallet named by settlement_type (the settlement account by default, or the Instant Settlement source account) through the Transfers API. Idempotent on attach_attempt_id. A decline is a 200 whose transaction_status is failed and whose failed_code names the reason; a provider outage is a 503 with the row left pending for refresh.

## Request body

- CreateTransactionRequestDTO: Request payload core-api sends at attach. One request per attach attempt; a repeated attach_attempt_id returns the existing transaction instead of moving money again.
  - `amount` integer, required
  - `attach_attempt_id` string, required
  - `callback_url` string, required
  - `currency` string, required
  - `description` string
  - `link_id` string
  - `livemode` boolean, required
  - `metadata` object: Metadata is carried onto the transfer as-is, next to the reserved keys this service sets. A renewal names its subscription and invoice here so statements and support can tell it from a one-off payment.
  - `organization_id` string, required
  - `payer_account_number` string
  - `settlement_type` 'payout' | 'instant_settlement'

## Response `200`

Transaction created, or the existing one for a repeated attach attempt

- object: Standard response containing data and its metadata if any
  - `data` TransactionResponseDTO: One PayMongo Wallet debit attempt. One row exists per attach attempt.
    - `amount` integer
    - `attach_attempt_id` string
    - `created_at` string
    - `currency` string
    - `destination_account_number` string
    - `failed_code` 'insufficient_funds' | 'closed_loop_violation' | 'wallet_limit_exceeded' | 'wallet_inactive'
    - `id` string
    - `link_id` string
    - `livemode` boolean
    - `organization_id` string
    - `payer_account_number` string
    - `reversal_transfer_id` string
    - `reversed_at` string
    - `succeeded_at` string
    - `transaction_status` 'pending' | 'succeeded' | 'failed' | 'reversed' | 'expired'
    - `transfer_id` string
    - `updated_at` string
  - `has_more` boolean

## Other responses

- `400`: Invalid request body or validation errors
- `401`: Missing or invalid credentials
- `500`: Internal server error or settlement account not configured
- `503`: Wallets or Transfers unavailable

---

[API](https://skmtc.dev/paymongo/apis/ewallets.md) - [All operations](https://skmtc.dev/paymongo/apis/ewallets/llms.txt) - [OpenAPI document](https://skmtc.dev/paymongo/apis/ewallets/revisions/a445ca65c132?raw)
