curl --request POST \
--url https://hg.cash/api/v1/ve/transactions/outbound \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"accountId": "YOUR_ACCOUNT_UUID",
"amount": "25.5",
"firstName": "Ada",
"lastName": "Example",
"email": "payer@example.com",
"documentoIdentidad": "00000000",
"tipoDocumento": "V",
"prefijoTelefono": "+58",
"numeroTelefono": "0000000000",
"direccion": "Example street",
"ciudad": "Example city",
"pais": "VE",
"banco": "BANK_VALUE",
"tipoCuenta": "ACCOUNT_TYPE_VALUE",
"numeroCuenta": "00000000000000000000",
"nombreTitular": "Ada",
"apellidoTitular": "Example"
}
'import requests
url = "https://hg.cash/api/v1/ve/transactions/outbound"
payload = {
"accountId": "YOUR_ACCOUNT_UUID",
"amount": "25.5",
"firstName": "Ada",
"lastName": "Example",
"email": "payer@example.com",
"documentoIdentidad": "00000000",
"tipoDocumento": "V",
"prefijoTelefono": "+58",
"numeroTelefono": "0000000000",
"direccion": "Example street",
"ciudad": "Example city",
"pais": "VE",
"banco": "BANK_VALUE",
"tipoCuenta": "ACCOUNT_TYPE_VALUE",
"numeroCuenta": "00000000000000000000",
"nombreTitular": "Ada",
"apellidoTitular": "Example"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
accountId: 'YOUR_ACCOUNT_UUID',
amount: '25.5',
firstName: 'Ada',
lastName: 'Example',
email: 'payer@example.com',
documentoIdentidad: '00000000',
tipoDocumento: 'V',
prefijoTelefono: '+58',
numeroTelefono: '0000000000',
direccion: 'Example street',
ciudad: 'Example city',
pais: 'VE',
banco: 'BANK_VALUE',
tipoCuenta: 'ACCOUNT_TYPE_VALUE',
numeroCuenta: '00000000000000000000',
nombreTitular: 'Ada',
apellidoTitular: 'Example'
})
};
fetch('https://hg.cash/api/v1/ve/transactions/outbound', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://hg.cash/api/v1/ve/transactions/outbound",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'accountId' => 'YOUR_ACCOUNT_UUID',
'amount' => '25.5',
'firstName' => 'Ada',
'lastName' => 'Example',
'email' => 'payer@example.com',
'documentoIdentidad' => '00000000',
'tipoDocumento' => 'V',
'prefijoTelefono' => '+58',
'numeroTelefono' => '0000000000',
'direccion' => 'Example street',
'ciudad' => 'Example city',
'pais' => 'VE',
'banco' => 'BANK_VALUE',
'tipoCuenta' => 'ACCOUNT_TYPE_VALUE',
'numeroCuenta' => '00000000000000000000',
'nombreTitular' => 'Ada',
'apellidoTitular' => 'Example'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://hg.cash/api/v1/ve/transactions/outbound"
payload := strings.NewReader("{\n \"accountId\": \"YOUR_ACCOUNT_UUID\",\n \"amount\": \"25.5\",\n \"firstName\": \"Ada\",\n \"lastName\": \"Example\",\n \"email\": \"payer@example.com\",\n \"documentoIdentidad\": \"00000000\",\n \"tipoDocumento\": \"V\",\n \"prefijoTelefono\": \"+58\",\n \"numeroTelefono\": \"0000000000\",\n \"direccion\": \"Example street\",\n \"ciudad\": \"Example city\",\n \"pais\": \"VE\",\n \"banco\": \"BANK_VALUE\",\n \"tipoCuenta\": \"ACCOUNT_TYPE_VALUE\",\n \"numeroCuenta\": \"00000000000000000000\",\n \"nombreTitular\": \"Ada\",\n \"apellidoTitular\": \"Example\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://hg.cash/api/v1/ve/transactions/outbound")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"accountId\": \"YOUR_ACCOUNT_UUID\",\n \"amount\": \"25.5\",\n \"firstName\": \"Ada\",\n \"lastName\": \"Example\",\n \"email\": \"payer@example.com\",\n \"documentoIdentidad\": \"00000000\",\n \"tipoDocumento\": \"V\",\n \"prefijoTelefono\": \"+58\",\n \"numeroTelefono\": \"0000000000\",\n \"direccion\": \"Example street\",\n \"ciudad\": \"Example city\",\n \"pais\": \"VE\",\n \"banco\": \"BANK_VALUE\",\n \"tipoCuenta\": \"ACCOUNT_TYPE_VALUE\",\n \"numeroCuenta\": \"00000000000000000000\",\n \"nombreTitular\": \"Ada\",\n \"apellidoTitular\": \"Example\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://hg.cash/api/v1/ve/transactions/outbound")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"accountId\": \"YOUR_ACCOUNT_UUID\",\n \"amount\": \"25.5\",\n \"firstName\": \"Ada\",\n \"lastName\": \"Example\",\n \"email\": \"payer@example.com\",\n \"documentoIdentidad\": \"00000000\",\n \"tipoDocumento\": \"V\",\n \"prefijoTelefono\": \"+58\",\n \"numeroTelefono\": \"0000000000\",\n \"direccion\": \"Example street\",\n \"ciudad\": \"Example city\",\n \"pais\": \"VE\",\n \"banco\": \"BANK_VALUE\",\n \"tipoCuenta\": \"ACCOUNT_TYPE_VALUE\",\n \"numeroCuenta\": \"00000000000000000000\",\n \"nombreTitular\": \"Ada\",\n \"apellidoTitular\": \"Example\"\n}"
response = http.request(request)
puts response.read_bodyCrear transacción de salida (Venezuela)
Crea un payout en USDT. amount es una cadena decimal positiva, no un número JSON. Pueden aparecer hasta 8 dígitos fraccionarios.
Obligatorios: accountId, amount, firstName, lastName, email, documentoIdentidad, tipoDocumento,
prefijoTelefono, numeroTelefono, direccion, ciudad, pais (VE), banco, tipoCuenta, numeroCuenta,
nombreTitular, apellidoTitular.
Opcionales: celular, webhookUrl. celular es obligatorio cuando tipoCuenta es Pago Móvil (13, Pago Móvil o pago_movil).
Envíe banco, tipoCuenta y tipoDocumento como el value del catálogo de GET /ve/banks. Las etiquetas de texto se aceptan.
BANK_VALUE y ACCOUNT_TYPE_VALUE en el ejemplo son marcadores de esos valores.
documentoIdentidad es solo dígitos. La letra va en tipoDocumento (V, J, P o E). Un prefijo coincidente se quita.
Saldo insuficiente devuelve 409 con code: INSUFFICIENT_NET_BALANCE.
Si el destinatario aún necesita verificación de identidad, la respuesta es 201 con status: pending_kyc, kyc_url cuando se guardó una URL,
y kyc_expires_at (24 horas desde la creación). Ese monto y su comisión de salida quedan reservados. El saldo de la cuenta no se debita.
No se crea una orden de payout hasta que la verificación esté aprobada.
Una verificación aprobada con una cuenta bancaria usable devuelve 201 con status: processing.
Una verificación rechazada, una verificación que terminó sin aprobación, un correo cuyo documento no coincide, un documento rechazado
o una cuenta bancaria rechazada no crea una transacción y devuelve 400 con code
KOLLAT_KYC_DECLINED, KOLLAT_KYC_NOT_APPROVED, KOLLAT_IDENTITY_UNCONFIRMED, KOLLAT_INVALID_DOCUMENT,
KOLLAT_INVALID_BANK, missing_cuenta_id o missing_terms.
La cadena error indica qué corregir cuando falla la cuenta bancaria o el documento.
Una cuenta inexistente devuelve 404. Sin acceso devuelve 403. Bloqueada o Cerrada devuelve 403 con code: ACCOUNT_NOT_OPERATIVE.
Una cuenta no admitida o una moneda distinta de USDT devuelve 400.
curl --request POST \
--url https://hg.cash/api/v1/ve/transactions/outbound \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"accountId": "YOUR_ACCOUNT_UUID",
"amount": "25.5",
"firstName": "Ada",
"lastName": "Example",
"email": "payer@example.com",
"documentoIdentidad": "00000000",
"tipoDocumento": "V",
"prefijoTelefono": "+58",
"numeroTelefono": "0000000000",
"direccion": "Example street",
"ciudad": "Example city",
"pais": "VE",
"banco": "BANK_VALUE",
"tipoCuenta": "ACCOUNT_TYPE_VALUE",
"numeroCuenta": "00000000000000000000",
"nombreTitular": "Ada",
"apellidoTitular": "Example"
}
'import requests
url = "https://hg.cash/api/v1/ve/transactions/outbound"
payload = {
"accountId": "YOUR_ACCOUNT_UUID",
"amount": "25.5",
"firstName": "Ada",
"lastName": "Example",
"email": "payer@example.com",
"documentoIdentidad": "00000000",
"tipoDocumento": "V",
"prefijoTelefono": "+58",
"numeroTelefono": "0000000000",
"direccion": "Example street",
"ciudad": "Example city",
"pais": "VE",
"banco": "BANK_VALUE",
"tipoCuenta": "ACCOUNT_TYPE_VALUE",
"numeroCuenta": "00000000000000000000",
"nombreTitular": "Ada",
"apellidoTitular": "Example"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
accountId: 'YOUR_ACCOUNT_UUID',
amount: '25.5',
firstName: 'Ada',
lastName: 'Example',
email: 'payer@example.com',
documentoIdentidad: '00000000',
tipoDocumento: 'V',
prefijoTelefono: '+58',
numeroTelefono: '0000000000',
direccion: 'Example street',
ciudad: 'Example city',
pais: 'VE',
banco: 'BANK_VALUE',
tipoCuenta: 'ACCOUNT_TYPE_VALUE',
numeroCuenta: '00000000000000000000',
nombreTitular: 'Ada',
apellidoTitular: 'Example'
})
};
fetch('https://hg.cash/api/v1/ve/transactions/outbound', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://hg.cash/api/v1/ve/transactions/outbound",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'accountId' => 'YOUR_ACCOUNT_UUID',
'amount' => '25.5',
'firstName' => 'Ada',
'lastName' => 'Example',
'email' => 'payer@example.com',
'documentoIdentidad' => '00000000',
'tipoDocumento' => 'V',
'prefijoTelefono' => '+58',
'numeroTelefono' => '0000000000',
'direccion' => 'Example street',
'ciudad' => 'Example city',
'pais' => 'VE',
'banco' => 'BANK_VALUE',
'tipoCuenta' => 'ACCOUNT_TYPE_VALUE',
'numeroCuenta' => '00000000000000000000',
'nombreTitular' => 'Ada',
'apellidoTitular' => 'Example'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://hg.cash/api/v1/ve/transactions/outbound"
payload := strings.NewReader("{\n \"accountId\": \"YOUR_ACCOUNT_UUID\",\n \"amount\": \"25.5\",\n \"firstName\": \"Ada\",\n \"lastName\": \"Example\",\n \"email\": \"payer@example.com\",\n \"documentoIdentidad\": \"00000000\",\n \"tipoDocumento\": \"V\",\n \"prefijoTelefono\": \"+58\",\n \"numeroTelefono\": \"0000000000\",\n \"direccion\": \"Example street\",\n \"ciudad\": \"Example city\",\n \"pais\": \"VE\",\n \"banco\": \"BANK_VALUE\",\n \"tipoCuenta\": \"ACCOUNT_TYPE_VALUE\",\n \"numeroCuenta\": \"00000000000000000000\",\n \"nombreTitular\": \"Ada\",\n \"apellidoTitular\": \"Example\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://hg.cash/api/v1/ve/transactions/outbound")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"accountId\": \"YOUR_ACCOUNT_UUID\",\n \"amount\": \"25.5\",\n \"firstName\": \"Ada\",\n \"lastName\": \"Example\",\n \"email\": \"payer@example.com\",\n \"documentoIdentidad\": \"00000000\",\n \"tipoDocumento\": \"V\",\n \"prefijoTelefono\": \"+58\",\n \"numeroTelefono\": \"0000000000\",\n \"direccion\": \"Example street\",\n \"ciudad\": \"Example city\",\n \"pais\": \"VE\",\n \"banco\": \"BANK_VALUE\",\n \"tipoCuenta\": \"ACCOUNT_TYPE_VALUE\",\n \"numeroCuenta\": \"00000000000000000000\",\n \"nombreTitular\": \"Ada\",\n \"apellidoTitular\": \"Example\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://hg.cash/api/v1/ve/transactions/outbound")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"accountId\": \"YOUR_ACCOUNT_UUID\",\n \"amount\": \"25.5\",\n \"firstName\": \"Ada\",\n \"lastName\": \"Example\",\n \"email\": \"payer@example.com\",\n \"documentoIdentidad\": \"00000000\",\n \"tipoDocumento\": \"V\",\n \"prefijoTelefono\": \"+58\",\n \"numeroTelefono\": \"0000000000\",\n \"direccion\": \"Example street\",\n \"ciudad\": \"Example city\",\n \"pais\": \"VE\",\n \"banco\": \"BANK_VALUE\",\n \"tipoCuenta\": \"ACCOUNT_TYPE_VALUE\",\n \"numeroCuenta\": \"00000000000000000000\",\n \"nombreTitular\": \"Ada\",\n \"apellidoTitular\": \"Example\"\n}"
response = http.request(request)
puts response.read_bodyAutorizaciones
Token de autenticación de API de usuario con formato cash_<64-char-hex>. Valor de ejemplo cash_16cdc3b6f83c72d9d2680adca4f430962981f6bf32613a129dded0aa060387d2.
Cuerpo
"YOUR_ACCOUNT_UUID"
Cadena decimal USDT positiva. No es un número JSON. Pueden aparecer hasta 8 dígitos fraccionarios. Los montos en VES no son este campo.
^\d+(\.\d+)?$"100.5"
"Ada"
"Example"
"payer@example.com"
"00000000"
value del catálogo en country.documentTypes.
"V"
"+58"
"0000000000"
"Example street"
"Example city"
VE value del catálogo en country.banks. Marcador BANK_VALUE.
"BANK_VALUE"
value del catálogo en country.accountTypes. Marcador ACCOUNT_TYPE_VALUE. celular es obligatorio para Pago Móvil (13, Pago Móvil o pago_movil).
"ACCOUNT_TYPE_VALUE"
"00000000000000000000"
"Ada"
"Example"
Obligatorio para Pago Móvil. Marcador +580000000000.
"+580000000000"
Respuesta
processing cuando la verificación está aprobada y hay una cuenta bancaria usable. pending_kyc cuando aún se requiere verificación. El monto y la comisión de salida quedan reservados. El saldo no se debita y no se crea una orden de payout hasta que la verificación esté aprobada. kyc_expires_at es 24 horas desde la creación.

