Release 2027 · Schema version 001.02 · Active
SIVI feedback message (VB-PUO)
The feedback message confirms that a message can be processed (statusType 8, accepted) or reports why not (statusType 0, rejected, with errorCode and errorCodeExplanation). It always refers to the messageId of the original message and optionally to the message type. The original message is not returned.
Message structure
Entities with cardinality [min..max] and number of attributes; click for the entity page.
- commonFunctional.default[1..1] · 6 attr.
- commonTechnical.default[1..1] · 3 attr.
- party.receiver[0..1] · 3 attr.
- party.sender[0..1] · 4 attr.
- party.contact[0..9] · 2 attr.
- error.default[0..999] · 3 attr.
- party.pensionProvider[1..1] · 2 attr.
Attributes (23)
| Entity | Attribute | Type | V/O | Code list | Description |
|---|---|---|---|---|---|
| commonFunctional.default | afdDefinitionName | string | V | VBPUO_Feedback_Message-001.00-VBPUO_Feedback_Message | Name of the AFD-definition. |
| commonFunctional.default | afdDefinitionVersion | string | V | 001.02 | Version of the AFD-definition. |
| commonFunctional.default | originalMessageId | string · max 70 | V | The messageId of the original message, which is replaced by this message. | |
| commonFunctional.default | function | string | V | ADNFUN | Message function |
| commonFunctional.default | statusType | string | V | ADNSTS | Status |
| commonFunctional.default | originalMessageType | string | O | 0001a | 0001b | 0001c | 00002 | 00541 | 00542 | 00553 | 00555b | 00556 | 00557 | Message type of the original request to which this message is a response. |
| commonTechnical.default | creationDateTime | string · format date-time | V | Date and time (as timestamp) when the message was created. | |
| commonTechnical.default | messageId | string | V | Unique identification of the message. (AFD 2.0 only) | |
| commonTechnical.default | testMessage | boolean | O | Indication whether the message is a test message. | |
| party.receiver | organizationName | string · max 60 | V | Name of professional or branch organization. | |
| party.receiver | refKey | string · max 70 | V | Unique reference key assigned to an entity. | |
| party.receiver | rsinNumber | string · max 9 | O | Governmental identification number for legal entities and associations. (AFD 2.0 only) | |
| party.sender | refKey | string · max 70 | V | Unique reference key assigned to an entity. | |
| party.sender | applicationSenderName | string · max 60 | O | Name of the application that sends the data. | |
| party.sender | organizationName | string · max 60 | V | Name of professional or branch organization. | |
| party.sender | rsinNumber | string · max 9 | O | Governmental identification number for legal entities and associations. (AFD 2.0 only) | |
| party.contact | workPhoneNumber | string · max 60 | V | Work telephone number. | |
| party.contact | emailWork | string · max 60 | V | Work email address. | |
| error.default | refKey | string | V | Unique reference key assigned to an entity. | |
| error.default | errorCode | string | V | ADNFTM | Error code |
| error.default | errorCodeExplanation | string · max 1000 | V | Explanation of the error message. | |
| party.pensionProvider | organizationName | string | V | Name of professional or branch organization. | |
| party.pensionProvider | puvCode | string | V | AFDIDP | Pension provider |
Sample message
Sample source: SIVI voorbeeldbericht (Voorbeeldbericht_feedback-geaccepteerd). Values are fictitious.
{
"commonTechnical": [
{
"entityType": "default",
"creationDateTime": "2027-03-01T09:05:00+01:00",
"messageId": "FB-VB-00541-0001",
"testMessage": true,
"party": [
{
"entityType": "receiver",
"refKey": "PUO01",
"organizationName": "Pensioenuitvoerder Voorbeeld"
}
]
}
],
"commonFunctional": [
{
"entityType": "default",
"afdDefinitionName": "VBPUO_Feedback_Message-001.00-VBPUO_Feedback_Message",
"afdDefinitionVersion": "001.02",
"originalMessageId": "VB-00541-0001",
"function": "23",
"statusType": "8",
"originalMessageType": "00541"
}
],
"party": [
{
"entityType": "pensionProvider",
"puvCode": "U0393",
"organizationName": "Pensioenfonds Metaal en Techniek"
}
]
}Variant: Voorbeeldbericht_feedback-afgewezen
{
"commonTechnical": [
{
"entityType": "default",
"creationDateTime": "2027-03-01T09:05:00+01:00",
"messageId": "FB-VB-00541-0002",
"testMessage": true,
"party": [
{
"entityType": "receiver",
"refKey": "PUO01",
"organizationName": "Pensioenuitvoerder Voorbeeld"
}
]
}
],
"commonFunctional": [
{
"entityType": "default",
"afdDefinitionName": "VBPUO_Feedback_Message-001.00-VBPUO_Feedback_Message",
"afdDefinitionVersion": "001.02",
"originalMessageId": "VB-00541-0002",
"function": "23",
"statusType": "0",
"originalMessageType": "00541"
}
],
"party": [
{
"entityType": "pensionProvider",
"puvCode": "U0393",
"organizationName": "Pensioenfonds Metaal en Techniek"
}
],
"error": [
{
"entityType": "default",
"refKey": "ERR-0001",
"errorCode": "12",
"errorCodeExplanation": "Trade ORD-0002: tradeAmount en tradeQuantity zijn beide gevuld; per instructie precies een van beide (par. 6.3.2)."
}
]
}Rules and consistency checks
- originalMessageId is mandatory; originalMessageType is optional and in the final Release 2027 (schema 001.02) enumerates the ten active message types, 00557 included.
- function is fixed at 23; statusType is 8 (accepted) or 0 (rejected); errorCodeExplanation is at most 1000 characters.
- Six interaction patterns: synchronous success (200), synchronous error (400 with feedback), asynchronous success (202 and callback accepted), asynchronous error (202 and callback rejected), and two panic scenarios in which the callback itself is rejected and manual reconciliation is needed.
- Once accepted, messages are not corrected unilaterally: a reused messageId yields HTTP 400 with feedback; after a rejection a corrected message may be sent without consultation.
Pitfalls
- A feedback message without originalMessageId is itself invalid and produces feedback on feedback; avoid the loop by always filling the reference.
- Since the final Release 2027 afdDefinitionName is fixed as VBPUO_Feedback_Message-001.00-VBPUO_Feedback_Message; the pre-release had …-001.02-…. A feedback message built on the pre-release is rejected on it, although the version (001.02) is the same.
Errors and fixes
- messageId missing, empty or longer than 70 charactersSchema error on commonTechnical/0/messageId: 'must have required property' or 'must NOT have more than 70 characters'.
- originalMessageId missing in feedback or resendFeedback message is itself rejected: 'must have required property originalMessageId'. On a resend (message function 54) without originalMessageId the receiver cannot see which message was sent again; the validator gives a warning for that.
- originalMessageId refers to an unknown messageThe receiver cannot place the feedback or correction and reports 'unknown message' functionally.
- afdDefinitionName incorrect (a fixed value since the final Release 2027)Schema error 'must be equal to constant' on afdDefinitionName; the WTP Data Lab validator names the expected value. Typical of a message built on the July 2026 pre-release: it states the right version 001.05 and still fails.
- afdDefinitionVersion incorrect (001.04 versus 001.05)Schema error 'must be equal to one of the allowed values' on afdDefinitionVersion, or the receiver validates against the wrong schema and reports unknown fields.
- Message function invalid (ADNFUN 01, 02, 09 or 54)Schema error on commonFunctional/0/function: value not allowed.
- originalMessageType 00557 rejected: feedback checked against the pre-release schemaA feedback message on a corporate action (message 15) with originalMessageType = 00557 gives a schema error on originalMessageType.
- Feedback: statusType not 0 or 8Schema error on statusType of the feedback message.
- errorCodeExplanation longer than 1000 charactersThe feedback message itself is rejected on length.
- HTTP 400 on synchronous validation: how to read the feedback messageThe endpoint answers 400 Bad Request with a JSON body.
- HTTP 202 without callback: the asynchronous feedback does not arriveAfter 202 Accepted no feedback message with accepted or rejected follows.
- Panic scenario: the callback itself is rejectedThe receiver sends its feedback (accepted or rejected) as a callback and gets 400 back on it.
Frequently asked questions
Do I have to send a feedback message for every message?
With synchronous processing the HTTP status (200) suffices on success; on an error or with asynchronous processing the feedback message is the only way the sender learns the outcome.
What do I do if I discover an error after acceptance?
Consult the receiver before sending a correction. The standard forbids unilateral correction of accepted messages; the correction message gets a new messageId and refers to the faulty message with originalMessageId.
Change history
- v1.0.0 (May 2024): feedback message introduced, error block removed from the 14 messages.
- v1.3.0 (Release 2026): originalMessageType added.
- v1.4.0 (Release 2027): duplicate messageId handling, party.sender and party.receiver, schema 001.02.
- Final Release 2027 (12 October 2026): afdDefinitionName VBPUO_Feedback_Message-001.00-VBPUO_Feedback_Message (the pre-release had -001.02-); originalMessageType with the ten active messages, 00557 included.
Schema file: VBPUO_Feedback_Message-001.00-VBPUO_Feedback_Message.json · JSON-schema (001.02) · GitHub
