Get transaction state
curl --request GET \
--url https://api.winampay.de/api/v1/transactions/{winam_tx_id} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.winampay.de/api/v1/transactions/{winam_tx_id}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.winampay.de/api/v1/transactions/{winam_tx_id}', 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.winampay.de/api/v1/transactions/{winam_tx_id}",
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-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"
"net/http"
"io"
)
func main() {
url := "https://api.winampay.de/api/v1/transactions/{winam_tx_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<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://api.winampay.de/api/v1/transactions/{winam_tx_id}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.winampay.de/api/v1/transactions/{winam_tx_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"winam_tx_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"idempotency_key": "<string>",
"direction": "<string>",
"operator": "<string>",
"provider": "sim_gateway_mtn",
"msisdn": "<string>",
"amount_minor": 5000,
"state": "succeeded",
"state_updated_at": "2023-11-07T05:31:56Z",
"requires_human_approval": true,
"provider_tx_id": "MTN2025010112345",
"expires_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"state_reason": "<string>",
"collection_mode": "merchant_initiated",
"instructions": {
"ussd_string": "#150*14*123456*659521872*10000#",
"dial_uri": "tel:%23150*14*123456*659521872*10000%23",
"copy_text": "<string>",
"merchant": {
"msisdn": "<string>",
"code": "<string>",
"display_name": "<string>"
},
"polling_interval_seconds": 123,
"steps": [
{
"order": 123,
"text": "<string>"
}
],
"illustration_url": "<string>",
"illustration_alt": "<string>"
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Transactions
Get Transaction
Returns the full state and metadata of a payment transaction.
GET
/
api
/
v1
/
transactions
/
{winam_tx_id}
Get transaction state
curl --request GET \
--url https://api.winampay.de/api/v1/transactions/{winam_tx_id} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.winampay.de/api/v1/transactions/{winam_tx_id}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.winampay.de/api/v1/transactions/{winam_tx_id}', 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.winampay.de/api/v1/transactions/{winam_tx_id}",
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-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"
"net/http"
"io"
)
func main() {
url := "https://api.winampay.de/api/v1/transactions/{winam_tx_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<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://api.winampay.de/api/v1/transactions/{winam_tx_id}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.winampay.de/api/v1/transactions/{winam_tx_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"winam_tx_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"idempotency_key": "<string>",
"direction": "<string>",
"operator": "<string>",
"provider": "sim_gateway_mtn",
"msisdn": "<string>",
"amount_minor": 5000,
"state": "succeeded",
"state_updated_at": "2023-11-07T05:31:56Z",
"requires_human_approval": true,
"provider_tx_id": "MTN2025010112345",
"expires_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"state_reason": "<string>",
"collection_mode": "merchant_initiated",
"instructions": {
"ussd_string": "#150*14*123456*659521872*10000#",
"dial_uri": "tel:%23150*14*123456*659521872*10000%23",
"copy_text": "<string>",
"merchant": {
"msisdn": "<string>",
"code": "<string>",
"display_name": "<string>"
},
"polling_interval_seconds": 123,
"steps": [
{
"order": 123,
"text": "<string>"
}
],
"illustration_url": "<string>",
"illustration_alt": "<string>"
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}amount_minor is expressed in XAF. XAF has no sub-unit — amount_minor: 5000 means exactly 5 000 XAF.callback_url set, or to debug a specific transaction. For normal operations, prefer webhooks — they push results to you the moment the payment settles.
For deposits, the response carries collection_mode. While a customer_initiated deposit is pending, it also carries the same instructions object as the creation response, so a deposit screen can be restored after a reload. Use the optional lang query parameter (fr default, or en) to choose the language of instructions.steps. instructions is null in every other case. See Deposit collection modes.
Only transactions created by your application are visible. A winam_tx_id that belongs to another application returns 404, exactly as if it did not exist. Requires the transactions scope (see Authentication).
See State Machine for the full list of possible state values and valid transitions.Query Parameters
Response
Successful Response
Current transaction state. See the state machine for the full transition diagram.
Example:
"succeeded"

