Use a payment attempt when your product needs to validate the chosen amount, currency, origin, destination, and rail fields before creating the real payment. This is useful for hosted checkout, complex payout forms, and flows where the payer can change methods before final submission.
Note Attempts are not final money movement. They are a validation and initialization step. Create the payment only after the user confirms the validated shape.
01 Discover methods Call available products for the identity and currencies.
02 Create attempt Send the candidate payment nodes for validation.
03 Render correction Ask for any missing rail-specific fields.
04 Create payment Submit the final payment request.
Request HTTP curl JavaScript Python Go Rust
POST /sandbox/payment-attempts HTTP / 1.1
Host: api.conomyhq.com
x-api-key: {YOUR_API_KEY}
Authorization: Bearer {ACCESS_TOKEN}
conomyhq-api-version: 24-04-2025
User-Agent: MyApp/1.0
Content-Type: application/json
Accept: application/json
{
" externalId " : " attempt-order-1001 " ,
" identityId " : " <IDENTITY_ID> " ,
" accountNumber " : " <ACCOUNT_NUMBER> " ,
" totalAmount " : " 100000 " ,
" product " : " CLP:CLP " ,
" type " : " TOPUP_ACCOUNT " ,
" purchaseAmount " : " 100000 " ,
" purchaseCurrency " : " CLP " ,
" currency " : " CLP " ,
" origins " : [
{
" type " : " ETPAY " ,
" currency " : " CLP " ,
" etpay " : {
" successUrl " : " https://yourapp.com/success " ,
" failedUrl " : " https://yourapp.com/failed " ,
" customer " : {
" firstName " : " Jane " ,
" email " : " jane@example.com "
}
}
}
],
" destinations " : [
{
" type " : " ACCOUNT " ,
" amount " : " 100000 " ,
" currency " : " CLP " ,
" identity " : {
" identityId " : " <IDENTITY_ID> "
},
" account " : {
" accountNumber " : " <ACCOUNT_NUMBER> "
}
}
]
} curl -X POST ' https://api.conomyhq.com/sandbox/payment-attempts ' \
-H ' x-api-key: {YOUR_API_KEY} ' \
-H ' Authorization: Bearer {ACCESS_TOKEN} ' \
-H ' conomyhq-api-version: 24-04-2025 ' \
-H ' User-Agent: MyApp/1.0 ' \
-H ' Content-Type: application/json ' \
-H ' Accept: application/json ' \
-d ' {
"externalId": "attempt-order-1001",
"identityId": "<IDENTITY_ID>",
"accountNumber": "<ACCOUNT_NUMBER>",
"totalAmount": "100000",
"product": "CLP:CLP",
"type": "TOPUP_ACCOUNT",
"purchaseAmount": "100000",
"purchaseCurrency": "CLP",
"currency": "CLP",
"origins": [
{
"type": "ETPAY",
"currency": "CLP",
"etpay": {
"successUrl": "https://yourapp.com/success",
"failedUrl": "https://yourapp.com/failed",
"customer": {
"firstName": "Jane",
"email": "jane@example.com"
}
}
}
],
"destinations": [
{
"type": "ACCOUNT",
"amount": "100000",
"currency": "CLP",
"identity": {
"identityId": "<IDENTITY_ID>"
},
"account": {
"accountNumber": "<ACCOUNT_NUMBER>"
}
}
]
} ' const response = await fetch ( ' https://api.conomyhq.com/sandbox/payment-attempts ' , {
method : ' POST ' ,
headers : {
' x-api-key ' : ' {YOUR_API_KEY} ' ,
' Authorization ' : ' Bearer {ACCESS_TOKEN} ' ,
' conomyhq-api-version ' : ' 24-04-2025 ' ,
' User-Agent ' : ' MyApp/1.0 ' ,
' Content-Type ' : ' application/json ' ,
' Accept ' : ' application/json ' ,
},
body : JSON . stringify ({
" externalId " : " attempt-order-1001 " ,
" identityId " : " <IDENTITY_ID> " ,
" accountNumber " : " <ACCOUNT_NUMBER> " ,
" totalAmount " : " 100000 " ,
" product " : " CLP:CLP " ,
" type " : " TOPUP_ACCOUNT " ,
" purchaseAmount " : " 100000 " ,
" purchaseCurrency " : " CLP " ,
" currency " : " CLP " ,
" origins " : [
{
" type " : " ETPAY " ,
" currency " : " CLP " ,
" etpay " : {
" successUrl " : " https://yourapp.com/success " ,
" failedUrl " : " https://yourapp.com/failed " ,
" customer " : {
" firstName " : " Jane " ,
" email " : " jane@example.com "
}
}
}
],
" destinations " : [
{
" type " : " ACCOUNT " ,
" amount " : " 100000 " ,
" currency " : " CLP " ,
" identity " : {
" identityId " : " <IDENTITY_ID> "
},
" account " : {
" accountNumber " : " <ACCOUNT_NUMBER> "
}
}
]
}),
});
const data = await response . json (); import requests
payload = {
" externalId " : " attempt-order-1001 " ,
" identityId " : " <IDENTITY_ID> " ,
" accountNumber " : " <ACCOUNT_NUMBER> " ,
" totalAmount " : " 100000 " ,
" product " : " CLP:CLP " ,
" type " : " TOPUP_ACCOUNT " ,
" purchaseAmount " : " 100000 " ,
" purchaseCurrency " : " CLP " ,
" currency " : " CLP " ,
" origins " : [
{
" type " : " ETPAY " ,
" currency " : " CLP " ,
" etpay " : {
" successUrl " : " https://yourapp.com/success " ,
" failedUrl " : " https://yourapp.com/failed " ,
" customer " : {
" firstName " : " Jane " ,
" email " : " jane@example.com "
}
}
}
],
" destinations " : [
{
" type " : " ACCOUNT " ,
" amount " : " 100000 " ,
" currency " : " CLP " ,
" identity " : {
" identityId " : " <IDENTITY_ID> "
},
" account " : {
" accountNumber " : " <ACCOUNT_NUMBER> "
}
}
]
}
response = requests . post (
' https://api.conomyhq.com/sandbox/payment-attempts ' ,
headers ={
' x-api-key ' : ' {YOUR_API_KEY} ' ,
' Authorization ' : ' Bearer {ACCESS_TOKEN} ' ,
' conomyhq-api-version ' : ' 24-04-2025 ' ,
' User-Agent ' : ' MyApp/1.0 ' ,
' Content-Type ' : ' application/json ' ,
' Accept ' : ' application/json ' ,
},
json = payload ,
)
data = response . json () package main
import (
" bytes "
" net/http "
)
func main () {
payload := [] byte ( ` {
"externalId": "attempt-order-1001",
"identityId": "<IDENTITY_ID>",
"accountNumber": "<ACCOUNT_NUMBER>",
"totalAmount": "100000",
"product": "CLP:CLP",
"type": "TOPUP_ACCOUNT",
"purchaseAmount": "100000",
"purchaseCurrency": "CLP",
"currency": "CLP",
"origins": [
{
"type": "ETPAY",
"currency": "CLP",
"etpay": {
"successUrl": "https://yourapp.com/success",
"failedUrl": "https://yourapp.com/failed",
"customer": {
"firstName": "Jane",
"email": "jane@example.com"
}
}
}
],
"destinations": [
{
"type": "ACCOUNT",
"amount": "100000",
"currency": "CLP",
"identity": {
"identityId": "<IDENTITY_ID>"
},
"account": {
"accountNumber": "<ACCOUNT_NUMBER>"
}
}
]
} ` )
body := bytes . NewReader ( payload )
req , _ := http . NewRequest ( " POST " , " https://api.conomyhq.com/sandbox/payment-attempts " , body )
req . Header . Set ( " x-api-key " , " {YOUR_API_KEY} " )
req . Header . Set ( " Authorization " , " Bearer {ACCESS_TOKEN} " )
req . Header . Set ( " conomyhq-api-version " , " 24-04-2025 " )
req . Header . Set ( " User-Agent " , " MyApp/1.0 " )
req . Header . Set ( " Content-Type " , " application/json " )
req . Header . Set ( " Accept " , " application/json " )
client := & http . Client {}
resp , _ := client . Do ( req )
defer resp . Body . Close ()
} use reqwest :: Client ;
use serde_json :: json ;
#[ tokio :: main ]
async fn main () -> Result <(), Box < dyn std :: error :: Error >> {
let client = Client :: new ();
let payload = json! ({
" externalId " : " attempt-order-1001 " ,
" identityId " : " <IDENTITY_ID> " ,
" accountNumber " : " <ACCOUNT_NUMBER> " ,
" totalAmount " : " 100000 " ,
" product " : " CLP:CLP " ,
" type " : " TOPUP_ACCOUNT " ,
" purchaseAmount " : " 100000 " ,
" purchaseCurrency " : " CLP " ,
" currency " : " CLP " ,
" origins " : [
{
" type " : " ETPAY " ,
" currency " : " CLP " ,
" etpay " : {
" successUrl " : " https://yourapp.com/success " ,
" failedUrl " : " https://yourapp.com/failed " ,
" customer " : {
" firstName " : " Jane " ,
" email " : " jane@example.com "
}
}
}
],
" destinations " : [
{
" type " : " ACCOUNT " ,
" amount " : " 100000 " ,
" currency " : " CLP " ,
" identity " : {
" identityId " : " <IDENTITY_ID> "
},
" account " : {
" accountNumber " : " <ACCOUNT_NUMBER> "
}
}
]
});
let response = client
. post ( " https://api.conomyhq.com/sandbox/payment-attempts " )
. header ( " x-api-key " , " { YOUR_API_KEY } " )
. header ( " Authorization " , " Bearer { ACCESS_TOKEN } " )
. header ( " conomyhq-api-version " , " 24-04-2025 " )
. header ( " User-Agent " , " MyApp/1.0 " )
. header ( " Content-Type " , " application/json " )
. header ( " Accept " , " application/json " )
. json ( & payload )
. send ()
. await ? ;
let data : serde_json :: Value = response . json () . await ? ;
Ok (())
} {
" id " : " <PAYMENT_ATTEMPT_ID> " ,
" externalId " : " attempt-order-1001 " ,
" type " : " TOPUP_ACCOUNT " ,
" status " : " ATTEMPT "
}
Use this to resume an unfinished checkout or let an operator inspect why a flow did not become a payment.
Request HTTP curl JavaScript Python Go Rust
GET /sandbox/payment-attempts/{PAYMENT_ATTEMPT_ID} HTTP / 1.1
Host: api.conomyhq.com
x-api-key: {YOUR_API_KEY}
Authorization: Bearer {ACCESS_TOKEN}
conomyhq-api-version: 24-04-2025
User-Agent: MyApp/1.0
Accept: application/json curl -X GET ' https://api.conomyhq.com/sandbox/payment-attempts/{PAYMENT_ATTEMPT_ID} ' \
-H ' x-api-key: {YOUR_API_KEY} ' \
-H ' Authorization: Bearer {ACCESS_TOKEN} ' \
-H ' conomyhq-api-version: 24-04-2025 ' \
-H ' User-Agent: MyApp/1.0 ' \
-H ' Accept: application/json ' const response = await fetch ( ' https://api.conomyhq.com/sandbox/payment-attempts/{PAYMENT_ATTEMPT_ID} ' , {
method : ' GET ' ,
headers : {
' x-api-key ' : ' {YOUR_API_KEY} ' ,
' Authorization ' : ' Bearer {ACCESS_TOKEN} ' ,
' conomyhq-api-version ' : ' 24-04-2025 ' ,
' User-Agent ' : ' MyApp/1.0 ' ,
' Accept ' : ' application/json ' ,
},
});
const data = await response . json (); import requests
response = requests . get (
' https://api.conomyhq.com/sandbox/payment-attempts/ {PAYMENT_ATTEMPT_ID} ' ,
headers ={
' x-api-key ' : ' {YOUR_API_KEY} ' ,
' Authorization ' : ' Bearer {ACCESS_TOKEN} ' ,
' conomyhq-api-version ' : ' 24-04-2025 ' ,
' User-Agent ' : ' MyApp/1.0 ' ,
' Accept ' : ' application/json ' ,
},
)
data = response . json () package main
import (
" net/http "
)
func main () {
req , _ := http . NewRequest ( " GET " , " https://api.conomyhq.com/sandbox/payment-attempts/{PAYMENT_ATTEMPT_ID} " , nil )
req . Header . Set ( " x-api-key " , " {YOUR_API_KEY} " )
req . Header . Set ( " Authorization " , " Bearer {ACCESS_TOKEN} " )
req . Header . Set ( " conomyhq-api-version " , " 24-04-2025 " )
req . Header . Set ( " User-Agent " , " MyApp/1.0 " )
req . Header . Set ( " Accept " , " application/json " )
client := & http . Client {}
resp , _ := client . Do ( req )
defer resp . Body . Close ()
} use reqwest :: Client ;
#[ tokio :: main ]
async fn main () -> Result <(), Box < dyn std :: error :: Error >> {
let client = Client :: new ();
let response = client
. get ( " https://api.conomyhq.com/sandbox/payment-attempts/ { PAYMENT_ATTEMPT_ID } " )
. header ( " x-api-key " , " { YOUR_API_KEY } " )
. header ( " Authorization " , " Bearer { ACCESS_TOKEN } " )
. header ( " conomyhq-api-version " , " 24-04-2025 " )
. header ( " User-Agent " , " MyApp/1.0 " )
. header ( " Accept " , " application/json " )
. send ()
. await ? ;
let data : serde_json :: Value = response . json () . await ? ;
Ok (())
} {
" id " : " <PAYMENT_ATTEMPT_ID> " ,
" type " : " TOPUP_ACCOUNT " ,
" status " : " ATTEMPT " ,
" product " : " CLP:CLP "
}