> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.recurrente.com/referencia-api/api-reference/transfers/list-transfers/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.recurrente.com/_mcp/server. # Listar movimientos de dinero GET https://app.recurrente.com/api/transfers Lista unificada de todo el dinero que sale de tu balance, del más reciente al más antiguo: retiros bancarios (`wi_`), transferencias p2p (`tr_`) y envíos de stablecoin (`sw_`). Filtra por tipo de destino con `types[]` y por cualquiera de las tres fechas de un retiro: creación (`from_time` + `until_time`), envío al banco (`sent_from` + `sent_until`) y liquidación bancaria confirmada (`settled_from` + `settled_until`). `sent_*` y `settled_*` solo aplican a retiros bancarios, así que limitan la lista a `bank_account`; combinarlos con otros `types[]` devuelve `400`. Cada par se envía completo: enviar solo una mitad devuelve `400` en vez de ignorar el rango. Para conciliar depósitos, usa `settled_*` cuando el retiro tenga liquidación confirmada y `sent_*` en cualquier otro caso: hay rieles de envío que nunca confirman una liquidación y para esos `settled_at` siempre viene vacío. Reference: https://docs.recurrente.com/referencia-api/api-reference/transfers/list-transfers ## Authentication - `X-SECRET-KEY` header (required) — Tu clave secreta de API. Una llave de cuenta (`sk_live_...`, `sk_test_...`) opera sobre su propia cuenta y, con `X-ACCOUNT-ID`, sobre sus cuentas conectadas. La llave también fija el ambiente: una `sk_test_` solo lista y resuelve objetos de prueba (`live_mode: false`) y una `sk_live_` solo objetos reales. Un ID del otro ambiente responde `404` (`401` en `/customers`). Una llave de organización (`sk_org_live_...`, `sk_org_test_...`) alcanza todas las cuentas de una organización y solo sirve para leer: saldos, movimientos y reportes. Para operar sobre una cuenta debe nombrarla con `X-ACCOUNT-ID`; omitirlo en una lectura devuelve todas las cuentas de la organización. Cualquier otro endpoint responde `403` con `code: organization_key_unsupported`. ## Request ### Query parameters - `types[]` (list of enum, optional) — Filtra por tipo de destino: bank_account, account, phone_number, crypto_address - Allowed values: `bank_account`, `account`, `phone_number`, `crypto_address` - `from_time` (datetime, optional) — Inicio del rango de creación. Si se envía como fecha sin hora, se interpreta como el inicio del día. Se aplica solo junto con `until_time`. - `until_time` (datetime, optional) — Fin del rango de creación. Si se envía como fecha sin hora, se interpreta como el final del día. Se aplica solo junto con `from_time`. - `sent_from` (datetime, optional) — Inicio del rango de envío al banco (`sent_at`). Limita la lista a retiros bancarios y se envía junto con `sent_until`. - `sent_until` (datetime, optional) — Fin del rango de envío al banco. Si se envía como fecha sin hora, se interpreta como el final del día. Se envía junto con `sent_from`. - `settled_from` (datetime, optional) — Inicio del rango de liquidación bancaria confirmada. Devuelve únicamente retiros confirmados o completados y se aplica solo junto con `settled_until`. - `settled_until` (datetime, optional) — Fin del rango de liquidación bancaria confirmada. Si se envía como fecha sin hora, se interpreta como el final del día. Devuelve únicamente retiros confirmados o completados y se aplica solo junto con `settled_from`. - `items` (integer, optional, default: 10) — Elementos por página. ## Response ### 200 Lista unificada de movimientos - `list of Transfer` ## Types ### Transfer Movimiento unificado de dinero saliendo de un balance. El prefijo del `id` indica el registro subyacente: `wi_` retiro bancario, `tr_` transferencia p2p, `sw_` envío de stablecoin. Los registros p2p (`tr_`) conservan además los campos legados `sender` y `recipient`. Un P2P puede quedar en `in_review`: su monto está reservado hasta que se apruebe. Un rechazo cambia el estado a `cancelled` y devuelve el monto al remitente. Los controles de riesgo y las restricciones de cuenta también aplican a envíos por API. - `id` (string, optional) — ID del movimiento (tr_ / wi_ / sw_) - `status` (enum, optional) — Estado canónico del movimiento - Allowed values: `pending`, `in_review`, `processing`, `sent`, `unclaimed`, `completed`, `failed`, `cancelled` - `status_detail` (string, optional) — Estado crudo del registro subyacente (p. ej. `approved`, `rejected`, `review_requested`) - `amount_in_cents` (integer, optional) — Monto en centavos debitado del balance - `currency` (string, optional) — Moneda del balance de origen - `fee_in_cents` (integer, optional) — Comisión en centavos (retiros instantáneos / internacionales; 0 para p2p) - `net_amount_in_cents` (integer, optional) — Monto neto que llega al destino después de comisiones - `note` (string, optional, nullable) — Nota del movimiento - `recipient_email` (string, optional, nullable) — Correo del beneficiario al que le avisamos el estado del retiro. Solo aplica a movimientos `wi_`. - `tracking_url` (string, optional, nullable) — Página pública de seguimiento para el beneficiario (monto que recibe, cuenta enmascarada, estado y fecha estimada de llegada). Solo aplica a movimientos `wi_`; compártela con quien recibe el dinero. - `account_id` (string, optional) — Cuenta cuyo balance movió este envío. Siempre presente, para que una lista que abarca varias cuentas de una organización siga siendo atribuible. - `sent_at` (datetime, optional, nullable) — Momento en que Recurrente envió el retiro al banco; solo aplica a retiros bancarios (`wi_`). - `settled_at` (datetime, optional, nullable) — Momento de liquidación bancaria confirmada. Solo está presente para retiros bancarios confirmados o completados (`wi_`). - `bank_reference` (string, optional, nullable) — Referencia que devolvió el riel de envío, cuando ese riel devuelve una. Solo aplica a movimientos `wi_`; no identifica ni enumera transacciones que conformen el retiro. - `bank_reference_status` (enum, optional, nullable) — Qué esperar de `bank_reference`: `available` si ya existe, `pending` si el retiro aún no sale y podría traerla, y `unsupported` si ya salió por un riel que nunca devuelve una. Con `unsupported`, concilia el depósito por `statement_descriptor`. - Allowed values: `available`, `pending`, `unsupported` - `statement_descriptor` (string, optional, nullable) — Lo que le pedimos al banco que imprima en el estado de cuenta del beneficiario. Solo aplica a movimientos `wi_`. - `balance_transaction_id` (string, optional, nullable) — Fila del ledger que registró este movimiento (`GET /api/balance_transactions/{id}`). Vacío mientras el dinero no haya salido del balance. - `destination` (TransferDestination, optional) — Destino del movimiento. Los campos presentes dependen de `type`. - `created_at` (datetime, optional) — Fecha de creación - `sender` (TransferSender, optional) — (Solo registros tr_) Cuenta emisora — campo legado - `recipient` (TransferRecipient, optional) — (Solo registros tr_) Destinatario — campo legado - `reversal_of_id` (string, optional) — ID del transfer original; solo aparece en reversos por reembolso - `refund_id` (string, optional) — ID del reembolso que originó el reverso ### TransferDestination Destino del movimiento. Los campos presentes dependen de `type`. - `type` (enum, optional) - Allowed values: `bank_account`, `account`, `phone_number`, `crypto_address` - `id` (string, optional, nullable) — ID del recurso destino (`ba_` cuenta bancaria, `ac_` cuenta, `cr_` dirección cripto) - `bank_name` (string, optional) — bank_account: banco destino - `holder_name` (string, optional) — bank_account: titular de la cuenta bancaria - `currency` (string, optional) — bank_account: moneda de la cuenta bancaria. crypto_address: stablecoin enviada - `name` (string, optional) — account: nombre de la cuenta destinataria - `number` (string, optional) — phone_number: teléfono del destinatario - `address` (string, optional) — crypto_address: dirección on-chain - `chain` (string, optional) — crypto_address: red del envío - `amount` (integer, optional) — crypto_address: monto en unidades menores de la stablecoin que llega al destino ### TransferSender (Solo registros tr_) Cuenta emisora — campo legado - `id` (string, optional) - `name` (string, optional) - `type` (string, optional) ### TransferRecipient (Solo registros tr_) Destinatario — campo legado - `id` (string, optional, nullable) - `name` (string, optional) - `type` (string, optional) ## Examples **Response** ```json [ { "id": "tr_nr4yplup", "status": "completed", "status_detail": "completed", "amount_in_cents": 100, "currency": "GTQ", "fee_in_cents": 0, "net_amount_in_cents": 100, "note": "string", "recipient_email": "maria@example.com", "tracking_url": "https://app.recurrente.com/t/3xK9mPq2vLn8RtWz4Yb7Hc", "account_id": "ac_merchant1", "sent_at": "2024-01-15T09:30:00Z", "settled_at": "2024-01-15T09:30:00Z", "bank_reference": "REC-123-abcdef12", "bank_reference_status": "unsupported", "statement_descriptor": "wi_ab12cd34", "balance_transaction_id": "txn_ab12cd34", "destination": { "type": "bank_account", "id": "string", "bank_name": "string", "holder_name": "string", "currency": "string", "name": "string", "number": "string", "address": "string", "chain": "string", "amount": 1 }, "created_at": "2024-01-15T09:30:00Z", "sender": { "id": "string", "name": "string", "type": "account" }, "recipient": { "id": "string", "name": "string", "type": "account" }, "reversal_of_id": "string", "refund_id": "string" } ] ``` **SDK Code** ```python import requests url = "https://app.recurrente.com/api/transfers" querystring = {"from_time":"2026-07-01","until_time":"2026-07-31","sent_from":"2026-07-01","sent_until":"2026-07-31","settled_from":"2026-07-01","settled_until":"2026-07-31"} headers = {"X-SECRET-KEY": ""} response = requests.get(url, headers=headers, params=querystring) print(response.json()) ``` ```javascript const url = 'https://app.recurrente.com/api/transfers?from_time=2026-07-01&until_time=2026-07-31&sent_from=2026-07-01&sent_until=2026-07-31&settled_from=2026-07-01&settled_until=2026-07-31'; const options = {method: 'GET', headers: {'X-SECRET-KEY': ''}}; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go package main import ( "fmt" "net/http" "io" ) func main() { url := "https://app.recurrente.com/api/transfers?from_time=2026-07-01&until_time=2026-07-31&sent_from=2026-07-01&sent_until=2026-07-31&settled_from=2026-07-01&settled_until=2026-07-31" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("X-SECRET-KEY", "") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby require 'uri' require 'net/http' url = URI("https://app.recurrente.com/api/transfers?from_time=2026-07-01&until_time=2026-07-31&sent_from=2026-07-01&sent_until=2026-07-31&settled_from=2026-07-01&settled_until=2026-07-31") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Get.new(url) request["X-SECRET-KEY"] = '' response = http.request(request) puts response.read_body ``` ```java import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://app.recurrente.com/api/transfers?from_time=2026-07-01&until_time=2026-07-31&sent_from=2026-07-01&sent_until=2026-07-31&settled_from=2026-07-01&settled_until=2026-07-31") .header("X-SECRET-KEY", "") .asString(); ``` ```php request('GET', 'https://app.recurrente.com/api/transfers?from_time=2026-07-01&until_time=2026-07-31&sent_from=2026-07-01&sent_until=2026-07-31&settled_from=2026-07-01&settled_until=2026-07-31', [ 'headers' => [ 'X-SECRET-KEY' => '', ], ]); echo $response->getBody(); ``` ```csharp using RestSharp; var client = new RestClient("https://app.recurrente.com/api/transfers?from_time=2026-07-01&until_time=2026-07-31&sent_from=2026-07-01&sent_until=2026-07-31&settled_from=2026-07-01&settled_until=2026-07-31"); var request = new RestRequest(Method.GET); request.AddHeader("X-SECRET-KEY", ""); IRestResponse response = client.Execute(request); ``` ```swift import Foundation let headers = ["X-SECRET-KEY": ""] let request = NSMutableURLRequest(url: NSURL(string: "https://app.recurrente.com/api/transfers?from_time=2026-07-01&until_time=2026-07-31&sent_from=2026-07-01&sent_until=2026-07-31&settled_from=2026-07-01&settled_until=2026-07-31")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "GET" request.allHTTPHeaderFields = headers let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ```