Create a SIC IP Transaction
This page describes the Create APIs used to inject Swiss Interbank Clearing Instant Payment (SIC IP) messages into ImPAI.
It covers four message families:
- Payment Instruction β initial outbound customer credit transfer.
- Recall β request to pull back a previously sent payment.
- Return β reversal of a settled payment back to the originator.
- Resolution β final outcome of a recall or investigation.
Each API uses a message-specific request model aligned with the corresponding ISO 20022 message types (e.g. pain.001, camt.056, pacs.004, camt.029) as defined by the SIC Instant Payment implementation guidelines and returns identifiers and status information used throughout the transaction lifecycle.
Shared Behaviour of Create APIsβ
Across all four Create operations, the following behaviour is common:
- Single-message processing β each request creates exactly one logical message instance.
- Validation β payloads are validated against the applicable ISO 20022 message structures as adapted for SIC Instant Payments, including rulebook-specific constraints.
- Identifier enrichment β ImPAI assigns internal / global identifiers for tracking, UI navigation, and audit.
- Workflow integration β successful messages are forwarded into the appropriate processing flow (clearing, posting, investigation, etc.).
- Structured responses β responses contain traceable IDs and, where applicable, ISO 20022-based status information.
1οΈβ£ Payment Instruction β Createβ
This RESTful service initiates SIC Instant Payments by accepting (customer) requests formatted according to the ISO 20022 pain.001 message type as implemented for SIC Instant Payments. It validates the instruction, creates a new transaction record, and prepares the payment for subsequent lifecycle steps (approval, clearing, settlement).
Each request may contain only one payment instruction to simplify tracing and error handling.
Request Structure
Inside the paymentRequest group the following data has to be provided.
βΆΒ Β identifiers
Business-level references linking the payment instruction to external systems:
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
externalId | String | Yes | External reference for the payment, typically provided by the initiating system. Used for matching responses and client-side tracking. | 1β36 chars |
β·Β Β Document
The Document contains the actual payment instruction CstmrCdtTrfInitn in ISO 20022 pain.001 format, including:
- Group Header (
GrpHdr): message ID, creation time, transaction count, initiating party. - Payment Information (
PmtInf): debtor, payment type, execution date, amount, creditor details, etc.
The full structure and validation rules are defined in the ISO 20022 pain.001 specification and enforced via the Swagger definition.
Response Structure
π’ Success β HTTP 200
HTTP 200 β OK responses for successfully processed messages include:
| Group | Description |
|---|---|
header.responseId | Unique identifier for this response (UUID format). |
header.originalRequestId | Original pain.001 request ID. |
header.responseTime | Timestamp of response creation. |
message.Document.CstmrPmtStsRpt | Contains the resulting ISO 20022 pain.002 message structure with status details. |
identifier.creditId | Credit transfer identifier. |
identifier.instructionId | Instruction identifier for downstream system. |
Example(s)
{
"header": {
"responseId": "603027ad-1047-43a3-b89b-03ff75fc8af9",
"originalRequestId": "ReqId-833583220015",
"responseTime": "2025-06-02T14:15:22Z"
},
"message": {
"Document": {
// ISO 20022 pain.002 customer payment status report
}
},
"identifiers": {
"creditId": "PAI1500000018805",
"instructionId": "PAI1500000019002"
}
}
π΄ Error β HTTP 400
Responses for HTTP 400 β Bad Request errors are returned if validation or logical checks fail and include:
| Group | Description |
|---|---|
header | Response metadata containing responseId, originalRequestId, responseTime |
message | An object holding an ISO 20022 pain.002 message structure in Document.CstmrPmtStsRpt |
error | Structured error with code and message |
identifiers | Internal transaction identifiers containing fields for creditId and instructionId |
Example(s)
{
"header": {
"responseId": "0a00f05f-c688-44db-b49a-af9aeed1a7ef",
"originalRequestId": "ReqId-419578",
"responseTime": "2025-06-02T14:15:22Z"
},
"error": {
"message": "Invalid message received : credit not found"
},
"fields": [
{
"fieldmap": "/Document/CstmrCdtTrfInitn/PmtInf/0/CdtTrfTxInf/0/UltmtCdtr/Id/OrgId",
"reasoncode": "FF01",
"reasontext": "expected string, but got object"
}
]
}
π‘ Error β HTTP 500
Responses for HTTP 500 β Server Error errors are returned on unexpected server-side failures and contain:
| Group | Description |
|---|---|
errorCode | Application-level error identifier (e.g. 500_INTERNAL_ERROR) |
message | Brief description such as "Time-out" or "Something went wrong" |
Example(s)
{
"errorCode": "500_INTERNAL_ERROR",
"message": "Something went wrong"
}
2οΈβ£ Recall β Createβ
This service creates Recall messages for SIC IP payments. It generates an ISO 20022 camt.056 message to request a recall of a previously sent payment.
Request Structure
Inside the recallRequest group the following data has to be provided.
βΆΒ Β identifiers
References to the original SIC IP transaction:
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
originalId | String | Yes | Identifier of the original credit transaction to be recalled. Must reference an existing payment in a recallable state. | 1β36 chars |
β·Β Β recallDetails
Reason and optional additional context:
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
recallReason | String | Yes | Reason code for cancellation. For DS-05 recall, codes DUPL and TECH can only be used within 10 banking business days, and code FRAD within 13 months.Codes CUST, AC03, and AM09 refer to DS-08 recall from originator (debtor) β FRFO (Request for Recall by the Originator). | Enum:DUPLFRADTECHAC03AM09CUST |
additionalInformation | String[] | No | Additional context or clarification for the recall. Each string may be up to 105 characters. | Array of max. 105-char strings |
Response Structure
π’ Success β HTTP 200
HTTP 200 β OK responses for successfully processed messages include:
| Group | Description |
|---|---|
header | A group containing responseId, originalRequestId, responseTime |
success | An object with detailed information like status and a group of identifiers of the created message |
Example(s)
{
"header": {
"responseId": "3a7ee3f3-1e5e-45ea-87dc-aae4442409c5",
"originalRequestId": "ReqId-419578",
"responseTime": "2025-06-02T14:15:22Z"
},
"success": {
"status": "Success",
"identifiers": {
"transactionId": "PAI1500004121533"
}
}
}
π΄ Error β HTTP 400
Responses for HTTP 400 β Bad Request errors are returned if validation or logical checks fail and include:
| Group | Description |
|---|---|
header | Response metadata containing responseId, originalRequestId, responseTime |
error | An object with a human-readable description in message |
fields | An array listing field-level issues (fieldMap, reasonCode, reasonText) |
Example(s)
{
"header": {
"responseId": "0a00f05f-c688-44db-b49a-af9aeed1a7ef",
"originalRequestId": "ReqId-419578",
"responseTime": "2025-06-02T14:15:22Z"
},
"error": {
"message": "Invalid message received : credit not found"
},
"fields": [
{
"fieldmap": "/Document/CstmrCdtTrfInitn/PmtInf/0/CdtTrfTxInf/0/UltmtCdtr/Id/OrgId",
"reasoncode": "FF01",
"reasontext": "expected string, but got object"
}
]
}
3οΈβ£ Return β Createβ
This RESTful service handles interbank Return processing for SIC Instant payments. It creates an ISO 20022 pacs.004 Return message to reverse a previously settled credit transfer.
Request Structure
Inside the returnRequest group the following data has to be provided.
βΆΒ Β identifiers
The identifiers section provides references to previously created payment messages and links the return request to the original transaction:
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
originalId | String | Yes | Original credit ID of the outgoing SIC Inst message. Only one return is allowed per underlying transaction and only for suitable statuses. | 1β36 chars |
β·Β Β returnDetails
The returnDetails section defines the reason for the return and any additional context:
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
returnReason | String | Yes | Reason code for the return. | Enum:FOCR |
additionalInformation | String[] | No | Additional context or clarification for the return. | Array of strings (max. length per item: 105) |
Response Structure
π’ Success β HTTP 200
HTTP 200 β OK responses for successfully processed messages include:
| Group | Description |
|---|---|
header | A group containing responseId, originalRequestId, responseTime |
success | An object with detailed information like status and a group of identifiers of the created message |
Example(s)
{
"header": {
"responseId": "3a7ee3f3-1e5e-45ea-87dc-aae4442409c5",
"originalRequestId": "ReqId-419578",
"responseTime": "2025-06-02T14:15:22Z"
},
"success": {
"status": "Success",
"identifiers": {
"transactionId": "EXT123456"
}
}
}
π΄ Error β HTTP 400
Responses for HTTP 400 β Bad Request errors are returned if validation or logical checks fail and include:
| Group | Description |
|---|---|
header | Response metadata containing responseId, originalRequestId, responseTime |
error | An object with a human-readable description in message |
fields | An array listing field-level issues (fieldMap, reasonCode, reasonText) |
Example(s)
{
"header": {
"responseId": "0a00f05f-c688-44db-b49a-af9aeed1a7ef",
"originalRequestId": "ReqId-419578",
"responseTime": "2025-06-02T14:15:22Z"
},
"error": {
"message": "Invalid message received : credit not found"
},
"fields": [
{
"fieldmap": "/Document/CstmrCdtTrfInitn/PmtInf/0/CdtTrfTxInf/0/UltmtCdtr/Id/OrgId",
"reasoncode": "FF01",
"reasontext": "expected string, but got object"
}
]
}
4οΈβ£ Resolution β Createβ
This RESTful service creates Resolution of Investigation messages for SIC Inst flows. It generates an ISO 20022 camt.029 message to communicate the final outcome of a recall or investigation.
Request Structure
Inside the resolutionRequest group the following data has to be provided.
βΆΒ Β identifiers
Links the resolution to the original SIC Inst transaction:
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
originalId | String | Yes | Original credit ID of the outgoing message linked to the SIC Inst transaction. | 1β36 chars |
β·Β Β resolutionDetails
The resolutionDetails section provides the reason and any additional context for the resolution (e.g. rejection of the recall request):
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
rejectReason | String | Yes | Reason code for rejecting the cancellation request. | Enum:AC04AM04ARDTCUSTLEGLNOASNOOR |
additionalInformation | String | Yes | Additional context or explanation for the resolution. Each item must be a string of max 105 characters. | Array of strings (max. length per item: 105) |
Response Structure
π’ Success β HTTP 200
HTTP 200 β OK responses for successfully processed messages include:
| Group | Description |
|---|---|
header | A group containing responseId, originalRequestId, responseTime |
success | An object with detailed information like status and a group of identifiers of the created message |
Example(s)
{
"header": {
"responseId": "3a7ee3f3-1e5e-45ea-87dc-aae4442409c5",
"originalRequestId": "ReqId-419578",
"responseTime": "2025-06-02T14:15:22Z"
},
"success": {
"status": "Success",
"identifiers": {
"transactionId": "PAI1500004121533"
}
}
}
π΄ Error β HTTP 400
Responses for HTTP 400 β Bad Request errors are returned if validation or logical checks fail and include:
| Group | Description |
|---|---|
header | Response metadata containing responseId, originalRequestId, responseTime |
error | An object with a human-readable description in message |
fields | An array listing field-level issues (fieldMap, reasonCode, reasonText) |
Example(s)
{
"header": {
"responseId": "0a00f05f-c688-44db-b49a-af9aeed1a7ef",
"originalRequestId": "ReqId-419578",
"responseTime": "2025-06-02T14:15:22Z"
},
"error": {
"message": "Invalid message received : credit not found"
},
"fields": [
{
"fieldMap": "/Document/CstmrCdtTrfInitn/PmtInf/0/CdtTrfTxInf/0/UltmtCdtr/Id/OrgId",
"reasonCode": "FF01",
"reasonText": "expected string, but got object"
}
]
}
Summary β Creating SIC Inst Messagesβ
This page explains how to create SIC Instant (SIC IP) messages in ImPAI.
All Create APIs accept a single structured ISO 20022 message, validate it, link it to the payment lifecycle, and generate the corresponding interbank message.
The system supports four creation flows:
Payment Instruction β creates an outgoing customer payment (pain.001 β pacs.008 CH).
Recall β requests retrieval of a previously sent payment (camt.056 CH).
Return β reverses a settled transaction back to the originator (pacs.004 CH).
Resolution β communicates the final outcome of a recall investigation (camt.029 CH).
Each Create operation follows the same high-level pattern (validate β correlate β persist β respond), but the input differs by message type:
- Create Instruction expects the full ISO 20022 message payload (wrapped in JSON), validates it, correlates it to the lifecycle, creates the internal transaction, and returns technical identifiers plus the appropriate ISO 20022 response/status data.
- Create Recall / Return / Resolution do not submit a full ISO 20022 message. Instead, they provide a reference to the underlying transaction/message plus the required reason information. ImPAI validates the reference and reason, correlates it to the existing lifecycle, creates the corresponding internal record, and returns technical identifiers plus status/response information.