Get session status
curl --request GET \
--url https://tapcoupon.at/api/v1/payment-sessions/{token}import requests
url = "https://tapcoupon.at/api/v1/payment-sessions/{token}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://tapcoupon.at/api/v1/payment-sessions/{token}', 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://tapcoupon.at/api/v1/payment-sessions/{token}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://tapcoupon.at/api/v1/payment-sessions/{token}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://tapcoupon.at/api/v1/payment-sessions/{token}")
.asString();require 'uri'
require 'net/http'
url = URI("https://tapcoupon.at/api/v1/payment-sessions/{token}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"status": "completed",
"cardType": "coupon",
"amount": 1500,
"completedAt": "2026-10-02T12:03:00Z",
"expiresAt": "2026-10-02T12:05:00Z"
}{
"error": "<string>",
"errorCode": "<string>"
}{
"error": "<string>",
"errorCode": "<string>"
}Partner integration
Get session status
Read the result of a partner payment session after the callback.
GET
/
payment-sessions
/
{token}
Get session status
curl --request GET \
--url https://tapcoupon.at/api/v1/payment-sessions/{token}import requests
url = "https://tapcoupon.at/api/v1/payment-sessions/{token}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://tapcoupon.at/api/v1/payment-sessions/{token}', 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://tapcoupon.at/api/v1/payment-sessions/{token}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://tapcoupon.at/api/v1/payment-sessions/{token}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://tapcoupon.at/api/v1/payment-sessions/{token}")
.asString();require 'uri'
require 'net/http'
url = URI("https://tapcoupon.at/api/v1/payment-sessions/{token}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"status": "completed",
"cardType": "coupon",
"amount": 1500,
"completedAt": "2026-10-02T12:03:00Z",
"expiresAt": "2026-10-02T12:05:00Z"
}{
"error": "<string>",
"errorCode": "<string>"
}{
"error": "<string>",
"errorCode": "<string>"
}GET /payment-sessions/{token}
Read the result of a partner payment session after the callback.
This endpoint is public. You do not need an API key or employee token.
Each session permits two successful reads shared with the info endpoint. A pending-status read also consumes one. Call this once after the callback; repeated polling can exhaust the result.
cardType is coupon, loyalty, status, or points when completed, and null while pending. amount is set only for coupon deductions; points and status operations return null. completedAt is null while pending.
The five-minute deadline prevents new session operations and info reads. Status reads do not directly check expiresAt: a stored session can remain readable until MongoDB’s asynchronous TTL cleanup removes it, if reads remain. Missing or exhausted tokens return 410 PAYMENT_SESSION_UNAVAILABLE, not 404.
Treat 410 as an unavailable result. It can mean cleanup or exhausted reads and does not by itself prove tampering. Verify status: completed before confirming the operation. Rate limit: 60 requests per minute per IP.
Example request
curl "https://tapcoupon.at/api/v1/payment-sessions/YOUR_SESSION_TOKEN"
Example response
{
"status": "completed",
"cardType": "coupon",
"amount": 1500,
"completedAt": "2026-10-02T12:03:00Z",
"expiresAt": "2026-10-02T12:05:00Z"
}
Path Parameters
Secret session token.
Response
Success
Available options:
pending, completed Available options:
coupon, loyalty, status, points Coupon deduction in cents; null for other types.
