Confirm or reject a inbound INST payment
curl --request POST \
--url https://api.pgw-sandbox.finventi.com/v1/transactions/{id}/response \
--header 'Content-Type: application/json' \
--data '{}'import requests
url = "https://api.pgw-sandbox.finventi.com/v1/transactions/{id}/response"
payload = {}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({})
};
fetch('https://api.pgw-sandbox.finventi.com/v1/transactions/{id}/response', 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.pgw-sandbox.finventi.com/v1/transactions/{id}/response",
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([
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$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.pgw-sandbox.finventi.com/v1/transactions/{id}/response"
payload := strings.NewReader("{}")
req, _ := http.NewRequest("POST", url, payload)
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.pgw-sandbox.finventi.com/v1/transactions/{id}/response")
.header("Content-Type", "application/json")
.body("{}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pgw-sandbox.finventi.com/v1/transactions/{id}/response")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{}"
response = http.request(request)
puts response.read_body{
"code": "<string>",
"data": {
"errors": [
{
"code": "<string>",
"field_name": "<string>",
"message": "<string>",
"value": "<string>"
}
],
"message": "<string>"
},
"message": "<string>"
}{
"code": "<string>",
"data": {
"errors": [
{
"code": "<string>",
"field_name": "<string>",
"message": "<string>",
"value": "<string>"
}
],
"message": "<string>"
},
"message": "<string>"
}{
"code": "<string>",
"data": {
"errors": [
{
"code": "<string>",
"field_name": "<string>",
"message": "<string>",
"value": "<string>"
}
],
"message": "<string>"
},
"message": "<string>"
}SEPA Instant/SCT
Respond to Pending SEPA Instant Payment
Processes pending SEPA Instant payments by accepting or rejecting them within the required time window.
POST
/
v1
/
transactions
/
{id}
/
response
Confirm or reject a inbound INST payment
curl --request POST \
--url https://api.pgw-sandbox.finventi.com/v1/transactions/{id}/response \
--header 'Content-Type: application/json' \
--data '{}'import requests
url = "https://api.pgw-sandbox.finventi.com/v1/transactions/{id}/response"
payload = {}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({})
};
fetch('https://api.pgw-sandbox.finventi.com/v1/transactions/{id}/response', 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.pgw-sandbox.finventi.com/v1/transactions/{id}/response",
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([
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$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.pgw-sandbox.finventi.com/v1/transactions/{id}/response"
payload := strings.NewReader("{}")
req, _ := http.NewRequest("POST", url, payload)
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.pgw-sandbox.finventi.com/v1/transactions/{id}/response")
.header("Content-Type", "application/json")
.body("{}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pgw-sandbox.finventi.com/v1/transactions/{id}/response")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{}"
response = http.request(request)
puts response.read_body{
"code": "<string>",
"data": {
"errors": [
{
"code": "<string>",
"field_name": "<string>",
"message": "<string>",
"value": "<string>"
}
],
"message": "<string>"
},
"message": "<string>"
}{
"code": "<string>",
"data": {
"errors": [
{
"code": "<string>",
"field_name": "<string>",
"message": "<string>",
"value": "<string>"
}
],
"message": "<string>"
},
"message": "<string>"
}{
"code": "<string>",
"data": {
"errors": [
{
"code": "<string>",
"field_name": "<string>",
"message": "<string>",
"value": "<string>"
}
],
"message": "<string>"
},
"message": "<string>"
}Overview
This endpoint processes inbound SEPA Instant payments that require confirmation. When instant payment confirmation is enabled for your account, incoming SEPA Instant payments will be held inpending_confirmation status until you respond with an acceptance or rejection.
Requirements
- Payment must have
pending_confirmationstatus - Response must be sent within 5 seconds of receiving the webhook notification
- Valid reason code required for rejections
- Only applicable to SEPA Instant payments with confirmation feature enabled
Response Time Critical
SEPA Instant payments have a 10-second end-to-end processing requirement. You must respond within 5 seconds to allow time for processing and sending the pacs.002 message to CSM.
How It Works
- Incoming Payment Received: When a SEPA Instant payment arrives and your account has confirmation enabled, the payment enters
pending_confirmationstatus - Webhook Notification: You receive a webhook with:
- Transaction ID
- Transaction Status (
pending_confirmation) - Debtor Account Number
- Creditor Account Number
- Your Response: Call this endpoint to accept or reject the payment
- Settlement: We send the pacs.002 message to CSM and update the payment status
What Happens If You Don’t Respond
How inbound SEPA Instant payments are answered is configured per tenant during onboarding. There are four modes:- Automatic accept: every inbound Instant payment is accepted immediately. No
pending_confirmationstatus, no response needed from you. - Automatic reject: every inbound Instant payment is rejected immediately (used for example while a tenant is not yet ready to receive Instant payments).
- Delayed automatic response: the payment is held in
pending_confirmationand you answer via this endpoint within the 5-second response window. If you do not answer in time, the platform answers for you with the configured fallback: either automatic accept, or automatic reject with a configured reason code (AC01by default). - Manual confirmation: the payment is held in
pending_confirmationand you answer via this endpoint within the same 5-second window. If no response is received in time, the payment times out and is rejected to the clearing system.
Path Parameters
Transaction ID
Body
application/json
Response
Payment confirmation processed successfully
Last modified on September 2, 2026