curl --request POST \
--url https://api.pgw-sandbox.finventi.com/v3/investigations/{id}:remindimport requests
url = "https://api.pgw-sandbox.finventi.com/v3/investigations/{id}:remind"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://api.pgw-sandbox.finventi.com/v3/investigations/{id}:remind', 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/v3/investigations/{id}:remind",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$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.pgw-sandbox.finventi.com/v3/investigations/{id}:remind"
req, _ := http.NewRequest("POST", url, nil)
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/v3/investigations/{id}:remind")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pgw-sandbox.finventi.com/v3/investigations/{id}:remind")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_body{
"createdAt": "2023-11-07T05:31:56Z",
"createdBy": "<string>",
"direction": "OUTBOUND",
"id": 123,
"messageId": "<string>",
"schema": "SEPA",
"status": "PENDING",
"type": "CLAIM_NON_RECEIPT",
"claimNonReceiptDetails": {
"caseId": "<string>",
"reminders": [
{
"createdAt": "2023-11-07T05:31:56Z",
"direction": "OUTBOUND",
"id": 123,
"messageId": "<string>",
"status": "PENDING",
"delivery": {
"status": "<string>",
"statusReason": "<string>"
},
"sentAt": "2023-11-07T05:31:56Z"
}
],
"additionalInfo": "<string>"
},
"delivery": {
"status": "<string>",
"statusReason": "<string>"
},
"referencedTransactionId": 123,
"reminderEligibility": {
"eligible": true,
"availableFrom": "2023-12-25",
"reason": "NOT_APPLICABLE"
},
"resolution": {
"confirmationCode": "ACNR",
"messageId": "<string>",
"rejectionReasonCode": "<string>",
"settlementDate": "2023-12-25"
},
"statusHistory": [
{
"createdAt": "2023-11-07T05:31:56Z",
"createdBy": "<string>",
"statusTo": "PENDING",
"changeReason": "<string>",
"statusFrom": "PENDING"
}
],
"transactionDetails": {
"amount": 123,
"currencyCode": "<string>",
"endToEndId": "<string>",
"method": "SEPA",
"settlementDate": "2023-12-25",
"creditorBic": "<string>",
"creditorIban": "<string>",
"creditorName": "<string>",
"debtorBic": "<string>",
"debtorIban": "<string>",
"debtorName": "<string>",
"remittanceInfo": "<string>"
},
"updatedAt": "2023-11-07T05:31:56Z"
}{
"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>"
}Send investigation reminder
Sends a status request (pacs.028) chasing an unanswered claim non-receipt.
curl --request POST \
--url https://api.pgw-sandbox.finventi.com/v3/investigations/{id}:remindimport requests
url = "https://api.pgw-sandbox.finventi.com/v3/investigations/{id}:remind"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://api.pgw-sandbox.finventi.com/v3/investigations/{id}:remind', 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/v3/investigations/{id}:remind",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$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.pgw-sandbox.finventi.com/v3/investigations/{id}:remind"
req, _ := http.NewRequest("POST", url, nil)
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/v3/investigations/{id}:remind")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pgw-sandbox.finventi.com/v3/investigations/{id}:remind")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_body{
"createdAt": "2023-11-07T05:31:56Z",
"createdBy": "<string>",
"direction": "OUTBOUND",
"id": 123,
"messageId": "<string>",
"schema": "SEPA",
"status": "PENDING",
"type": "CLAIM_NON_RECEIPT",
"claimNonReceiptDetails": {
"caseId": "<string>",
"reminders": [
{
"createdAt": "2023-11-07T05:31:56Z",
"direction": "OUTBOUND",
"id": 123,
"messageId": "<string>",
"status": "PENDING",
"delivery": {
"status": "<string>",
"statusReason": "<string>"
},
"sentAt": "2023-11-07T05:31:56Z"
}
],
"additionalInfo": "<string>"
},
"delivery": {
"status": "<string>",
"statusReason": "<string>"
},
"referencedTransactionId": 123,
"reminderEligibility": {
"eligible": true,
"availableFrom": "2023-12-25",
"reason": "NOT_APPLICABLE"
},
"resolution": {
"confirmationCode": "ACNR",
"messageId": "<string>",
"rejectionReasonCode": "<string>",
"settlementDate": "2023-12-25"
},
"statusHistory": [
{
"createdAt": "2023-11-07T05:31:56Z",
"createdBy": "<string>",
"statusTo": "PENDING",
"changeReason": "<string>",
"statusFrom": "PENDING"
}
],
"transactionDetails": {
"amount": 123,
"currencyCode": "<string>",
"endToEndId": "<string>",
"method": "SEPA",
"settlementDate": "2023-12-25",
"creditorBic": "<string>",
"creditorIban": "<string>",
"creditorName": "<string>",
"debtorBic": "<string>",
"debtorIban": "<string>",
"debtorName": "<string>",
"remittanceInfo": "<string>"
},
"updatedAt": "2023-11-07T05:31:56Z"
}{
"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
Chases a claim non-receipt (camt.027) that the beneficiary bank has not answered. The reminder goes out as a pacs.028 status request. Under the EPC SCT rulebook a camt.027 expects a camt.029 within 10 banking business days. After that you may push a status request as a reminder, provided the payment is still within 13 months of its debit date. The path parameter is the ID of the claim, not of a reminder. The response is the claim itself, with the new reminder added toclaimNonReceiptDetails.reminders. Reminders are never returned as standalone entries by the search or list endpoints — read them through the claim they belong to.
Do not create a second claim non-receipt for the same payment instead of sending a reminder. A payment can have only one pending outbound claim at a time; see Create investigation.
When you can send one
| Condition | Requirement |
|---|---|
| Investigation type | Claim non-receipt (camt.027). A payment status request cannot be reminded |
| Scheme | SEPA CT (schema: SEPA). Instant payments are not eligible |
| Direction | Outbound |
| Status | Still pending |
| Waiting time | At least 10 banking business days since the claim was sent, or 5 since the previous reminder |
| Payment age | Debit date within the last 13 months |
| Reminders in flight | None. An earlier reminder must have been dispatched before you send another |
reminderEligibility on Get investigation. It returns eligible, a reason when it is false, and availableFrom with the first date a reminder becomes possible when the reason is TOO_EARLY. Search and list responses omit it."reminderEligibility": {
"eligible": false,
"reason": "TOO_EARLY",
"availableFrom": "2026-09-15"
}
reason | Meaning |
|---|---|
NOT_APPLICABLE | Not an outbound, pending SEPA CT claim non-receipt. |
CLAIM_NOT_SENT | The claim has not reached the clearing system yet, so the waiting period has not started. |
REMINDER_IN_FLIGHT | An earlier reminder is still waiting to be dispatched. |
TOO_EARLY | The waiting period has not elapsed. availableFrom gives the first date a reminder is allowed. |
PERIOD_EXPIRED | The payment’s debit date is older than the permitted period. |
reason and availableFrom are null when eligible is true.
After sending
The reminder is dispatched at the next SEPA Credit Transfer clearing cycle, andsentAt is set on it once it leaves. From then on:
- It resolves when the beneficiary bank answers the claim with a camt.029 — a reminder is never resolved on its own.
- It moves to
REJECTEDif the clearing system rejects the pacs.028, or if it cannot be dispatched. - A positive clearing acknowledgement updates
deliveryonly. The reminder stays pending, because acknowledgement by the clearing system is not an answer from the beneficiary bank.
Errors
| Status | Code | Cause |
|---|---|---|
| 400 | REMINDER_NOT_ELIGIBLE | Too early, or the claim was never sent |
| 400 | REMINDER_PERIOD_EXPIRED | The payment is past the 13-month limit |
| 400 | REMINDER_ALREADY_EXISTS | An earlier reminder is still awaiting dispatch |
| 400 | ILLEGAL_INVESTIGATION_TYPE | Not a claim non-receipt |
| 400 | ILLEGAL_INVESTIGATION_SCHEMA | Not on the SEPA CT scheme |
| 400 | ILLEGAL_INVESTIGATION_DIRECTION | Not an outbound investigation |
| 400 | ILLEGAL_INVESTIGATION_STATUS | The claim is no longer pending |
| 404 | INVESTIGATION_NOT_FOUND | Unknown investigation id |
| 404 | TRANSACTION_NOT_FOUND | The linked payment is missing |
Example error response
{
"code": "REMINDER_NOT_ELIGIBLE",
"message": "Only 4 banking business day(s) have elapsed since claim non-receipt 100141 was sent; 10 are required.",
"data": {
"errors": [
{
"field_name": "investigationId",
"value": "100141"
}
]
}
}
Path Parameters
Claim non-receipt investigation ID
Response
Reminder sent; the parent claim non-receipt is returned with the reminder embedded
Timestamp when the investigation was created
User or system that created the investigation
Investigation direction (INBOUND or OUTBOUND)
OUTBOUND, INBOUND Investigation ID
Investigation message ID
Message schema identifier
SEPA, INST Current investigation status
PENDING, RESOLVED, REJECTED Investigation type
CLAIM_NON_RECEIPT, PAYMENT_STATUS_REQUEST Claim non-receipt investigation details, present for CLAIM_NON_RECEIPT type
Show child attributes
Show child attributes
Investigation message delivery status information from CSM
Show child attributes
Show child attributes
Referenced transaction ID
Whether a pacs.028 reminder can be sent for this claim right now, and if not, why
Show child attributes
Show child attributes
Resolution details, present when the investigation has been resolved
Show child attributes
Show child attributes
Investigation status change history, included when retrieving a single investigation
Show child attributes
Show child attributes
Original transaction details referenced by the investigation
Show child attributes
Show child attributes
Timestamp when the investigation was last updated