curl --request GET \
--url https://production-api.puppetvendors.com/payouts/make-payment/{transactionId} \
--header 'x-access-token: <api-key>'import requests
url = "https://production-api.puppetvendors.com/payouts/make-payment/{transactionId}"
headers = {"x-access-token": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-access-token': '<api-key>'}};
fetch('https://production-api.puppetvendors.com/payouts/make-payment/{transactionId}', 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://production-api.puppetvendors.com/payouts/make-payment/{transactionId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-access-token: <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"
"net/http"
"io"
)
func main() {
url := "https://production-api.puppetvendors.com/payouts/make-payment/{transactionId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-access-token", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://production-api.puppetvendors.com/payouts/make-payment/{transactionId}")
.header("x-access-token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://production-api.puppetvendors.com/payouts/make-payment/{transactionId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-access-token"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"transactionId": "<string>",
"requestId": "<string>",
"operation": "make-payment",
"batchId": "<string>",
"status": "processing",
"hadIssue": true,
"batches": [
{
"batchId": "<string>",
"vendorId": "<unknown>",
"vendorName": "<string>",
"amount": 123,
"status": "pending",
"reason": {},
"gatewayRef": {
"gateway": "stripe",
"refId": "<string>"
},
"markAsPaid": {
"marked": true,
"method": "<string>",
"comments": "<string>"
}
}
],
"canRetry": true,
"lastError": "<string>",
"requiresInvestigation": true
}
}{
"success": false,
"error": {
"message": "Resource not found",
"code": "NOT_FOUND",
"errorId": "err_1783365360839_j281w7b",
"details": {}
}
}{
"success": false,
"error": {
"message": "Resource not found",
"code": "NOT_FOUND",
"errorId": "err_1783365360839_j281w7b",
"details": {}
}
}{
"success": false,
"error": {
"message": "Resource not found",
"code": "NOT_FOUND",
"errorId": "err_1783365360839_j281w7b",
"details": {}
}
}{
"success": false,
"error": {
"message": "Resource not found",
"code": "NOT_FOUND",
"errorId": "err_1783365360839_j281w7b",
"details": {}
}
}Poll a payout run by its transactionId
Merchant scope only, requires the admin:payouts permission.
The poll for POST /payouts/make-payment, POST /payouts/batches//retry
and POST /payouts/batches//mark-paid: call it with the
transactionId the 202 carried until status leaves processing.
status, requestId, operation and batchId describe the LATEST
run under the transaction: the make-payment, or a later retry or
mark-as-paid of one of its batches (batchId names that batch). So a
retry in flight reads processing with operation: retry even though
the make-payment finished.
batches are all of the transaction’s batches as they stand now, one
per vendor, with the normalized status, the classified failure reason,
the gateway reference (gatewayRef, NEVER the raw gateway payload)
and the mark-as-paid record; empty while a make-payment has not
written its transaction yet. canRetry is true only once the latest
run completed and a batch can be retried. A failed batch whose
payment may have gone out but could not be recorded is not
retryable: check the gateway first.
failed: the run did not finish; lastError carries the last
recorded error message (null when none was written).
requiresInvestigation is false only when the run never started
(the Scheduler refused it, for example because the payouts API was
turned off, or it was interrupted before it wrote anything): nothing
was paid, and sending it again with a new Idempotency-Key is safe.
(A mark-as-paid sends no money either way; one interrupted this way
can still turn completed if the interrupted run finishes after
all, so poll once more before sending it again.)
Otherwise it is true: a payment may have been sent, so check the
batches with the payment provider before sending it again.
A transactionId with no API run in this shop (unknown, another shop’s, or a run made only in the merchant portal) is a 404.
curl --request GET \
--url https://production-api.puppetvendors.com/payouts/make-payment/{transactionId} \
--header 'x-access-token: <api-key>'import requests
url = "https://production-api.puppetvendors.com/payouts/make-payment/{transactionId}"
headers = {"x-access-token": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-access-token': '<api-key>'}};
fetch('https://production-api.puppetvendors.com/payouts/make-payment/{transactionId}', 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://production-api.puppetvendors.com/payouts/make-payment/{transactionId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-access-token: <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"
"net/http"
"io"
)
func main() {
url := "https://production-api.puppetvendors.com/payouts/make-payment/{transactionId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-access-token", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://production-api.puppetvendors.com/payouts/make-payment/{transactionId}")
.header("x-access-token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://production-api.puppetvendors.com/payouts/make-payment/{transactionId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-access-token"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"transactionId": "<string>",
"requestId": "<string>",
"operation": "make-payment",
"batchId": "<string>",
"status": "processing",
"hadIssue": true,
"batches": [
{
"batchId": "<string>",
"vendorId": "<unknown>",
"vendorName": "<string>",
"amount": 123,
"status": "pending",
"reason": {},
"gatewayRef": {
"gateway": "stripe",
"refId": "<string>"
},
"markAsPaid": {
"marked": true,
"method": "<string>",
"comments": "<string>"
}
}
],
"canRetry": true,
"lastError": "<string>",
"requiresInvestigation": true
}
}{
"success": false,
"error": {
"message": "Resource not found",
"code": "NOT_FOUND",
"errorId": "err_1783365360839_j281w7b",
"details": {}
}
}{
"success": false,
"error": {
"message": "Resource not found",
"code": "NOT_FOUND",
"errorId": "err_1783365360839_j281w7b",
"details": {}
}
}{
"success": false,
"error": {
"message": "Resource not found",
"code": "NOT_FOUND",
"errorId": "err_1783365360839_j281w7b",
"details": {}
}
}{
"success": false,
"error": {
"message": "Resource not found",
"code": "NOT_FOUND",
"errorId": "err_1783365360839_j281w7b",
"details": {}
}
}Authorizations
JWT minted from a merchant API key (mk_live_…) by POST /authenticate. Send the token value directly, with no "Bearer" prefix. Tokens last 14 days and can be renewed at POST /refresh-token; revoking the key refuses the next request made with any token minted from it.
Path Parameters
The transactionId returned by the 202 ack of make-payment, retry or mark-paid
^[A-Za-z0-9_-]{1,64}$Was this page helpful?