Log Organic Success (Pulse)
curl --request POST \
--url https://api.revtain.com/api/recovery/pulse \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"amount": 5000,
"currency": "USD",
"transactionId": "your_internal_tx_id_123"
}
'import requests
url = "https://api.revtain.com/api/recovery/pulse"
payload = {
"amount": 5000,
"currency": "USD",
"transactionId": "your_internal_tx_id_123"
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({amount: 5000, currency: 'USD', transactionId: 'your_internal_tx_id_123'})
};
fetch('https://api.revtain.com/api/recovery/pulse', 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://api.revtain.com/api/recovery/pulse",
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([
'amount' => 5000,
'currency' => 'USD',
'transactionId' => 'your_internal_tx_id_123'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$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://api.revtain.com/api/recovery/pulse"
payload := strings.NewReader("{\n \"amount\": 5000,\n \"currency\": \"USD\",\n \"transactionId\": \"your_internal_tx_id_123\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
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://api.revtain.com/api/recovery/pulse")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": 5000,\n \"currency\": \"USD\",\n \"transactionId\": \"your_internal_tx_id_123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.revtain.com/api/recovery/pulse")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": 5000,\n \"currency\": \"USD\",\n \"transactionId\": \"your_internal_tx_id_123\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Organic success logged",
"transactionId": "da646dba-ce56-4483-ad0a-2a4fac54a5e2"
}{
"error": "Validation failed.",
"details": {
"paymentMethodToken": [
"Payment method token is required"
],
"amount": [
"Amount must be a positive number"
]
}
}{
"error": "Unauthorized. Missing or invalid API key."
}Recovery Engine
Log Organic Success (Pulse)
Logs an organic success — a transaction that succeeded on the first try without needing recovery.
This data is used to calculate the Revtain Lift metric (the percentage improvement Revtain adds over your baseline success rate).
Important: Without pulse data, your monthly CFO report will show a misleadingly high recovery rate because the only transactions recorded are recovery attempts.
POST
/
api
/
recovery
/
pulse
Log Organic Success (Pulse)
curl --request POST \
--url https://api.revtain.com/api/recovery/pulse \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"amount": 5000,
"currency": "USD",
"transactionId": "your_internal_tx_id_123"
}
'import requests
url = "https://api.revtain.com/api/recovery/pulse"
payload = {
"amount": 5000,
"currency": "USD",
"transactionId": "your_internal_tx_id_123"
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({amount: 5000, currency: 'USD', transactionId: 'your_internal_tx_id_123'})
};
fetch('https://api.revtain.com/api/recovery/pulse', 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://api.revtain.com/api/recovery/pulse",
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([
'amount' => 5000,
'currency' => 'USD',
'transactionId' => 'your_internal_tx_id_123'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$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://api.revtain.com/api/recovery/pulse"
payload := strings.NewReader("{\n \"amount\": 5000,\n \"currency\": \"USD\",\n \"transactionId\": \"your_internal_tx_id_123\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
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://api.revtain.com/api/recovery/pulse")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": 5000,\n \"currency\": \"USD\",\n \"transactionId\": \"your_internal_tx_id_123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.revtain.com/api/recovery/pulse")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": 5000,\n \"currency\": \"USD\",\n \"transactionId\": \"your_internal_tx_id_123\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Organic success logged",
"transactionId": "da646dba-ce56-4483-ad0a-2a4fac54a5e2"
}{
"error": "Validation failed.",
"details": {
"paymentMethodToken": [
"Payment method token is required"
],
"amount": [
"Amount must be a positive number"
]
}
}{
"error": "Unauthorized. Missing or invalid API key."
}Authorizations
Your Revtain API key (format: rev_xxx). Provided during onboarding.
Body
application/json