ediverse Explore the platform

Spotlight PEPPOL BIS Billing 3.0 The EU e-invoicing mandate is here — France Sept 2026, Belgium Jan 2026, Germany 2025.

camt.029 — Resolution of Investigation

Closing message of an investigation opened by camt.027 (Claim Non Receipt), camt.087 (Modify Payment) or camt.056 (FI to FI Payment Cancellation Request). Tells the requester whether the case is resolved, awaiting additional information, or rejected. Cornerstone of SWIFT gpi cross-border investigation workflow.

Purpose: close an investigation

When a bank opens an investigation (via camt.027 on "payment not received" or camt.056 on "cancellation requested"), the receiving bank must respond with camt.029 within SWIFT gpi SLA (4 hours for urgent, 24h max). The message carries the verdict: accepted (ACCR), rejected (RJCR), pending (PDNG). Without camt.029, the investigator doesn't know and must reissue via camt.087.

XML structure

Wrapped in <RsltnOfInvstgtn>. Contains: Assgnmt (header), Sts (overall status), CxlDtls or ModDtls or ClmNonRctDtls per investigation type.

ElementRole
Assgnr / AssgneResolution sender / recipient.
Sts/ConfGlobal status: CNCL (cancelled), MODF (modified), PART (partial), RJCR (rejected).
TxInfAndStsPer-transaction detail.
RslvdCase/IdCase file ID to close.
OrgnlUETRUUIDv4 of original payment — SWIFT gpi matching key.
TxCxlStsTransaction status: ACCR (accepted), RJCR (rejected), PDNG (pending).
CxlStsRsnInf/Rsn/CdISO External Code Set reason code (DUPL, AGNT, INTC…).

Example: investigation resolution

Citi US accepts cancellation request for duplicate, funds returned via pacs.004:

xml camt-029-resolution.xml
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.029.001.12">
  <RsltnOfInvstgtn>
    <Assgnmt>
      <Id>RES-CBPR-20260519-001</Id>
      <Assgnr>
        <Agt><FinInstnId><BICFI>CITIUS33</BICFI></FinInstnId></Agt>
      </Assgnr>
      <Assgne>
        <Agt><FinInstnId><BICFI>BNPAFRPP</BICFI></FinInstnId></Agt>
      </Assgne>
      <CreDtTm>2026-05-19T16:00:00+02:00</CreDtTm>
    </Assgnmt>
    <Sts>
      <Conf>CNCL</Conf>
    </Sts>
    <CxlDtls>
      <TxInfAndSts>
        <CxlStsId>CITI-CXL-2026-887</CxlStsId>
        <RslvdCase>
          <Id>CASE-CITI-20260519-001</Id>
          <Cretr>
            <Agt><FinInstnId><BICFI>BNPAFRPP</BICFI></FinInstnId></Agt>
          </Cretr>
        </RslvdCase>
        <OrgnlInstrId>BNPP-INSTR-2026001</OrgnlInstrId>
        <OrgnlEndToEndId>INV2026-187</OrgnlEndToEndId>
        <OrgnlUETR>1a2b3c4d-5e6f-7890-abcd-ef1234567890</OrgnlUETR>
        <TxCxlSts>ACCR</TxCxlSts>
        <CxlStsRsnInf>
          <Orgtr><Nm>CITI INVESTIGATIONS DESK</Nm></Orgtr>
          <Rsn><Cd>DUPL</Cd></Rsn>
          <AddtlInf>DUPLICATE PAYMENT DETECTED - CXL ACCEPTED, FUNDS RETURNED VIA pacs.004</AddtlInf>
        </CxlStsRsnInf>
      </TxInfAndSts>
    </CxlDtls>
  </RsltnOfInvstgtn>
</Document>

Common pitfalls

  • OrgnlUETR missing: for CBPR+, UETR is mandatory — without it gpi investigation tracking is broken.
  • RslvdCase/Id wrong: must echo the originating camt.027/056/087 Id. Otherwise investigator fails to reconcile.
  • PDNG status without follow-up: PDNG implies a follow-up within 24h. Without ACCR/RJCR camt.029, the investigator escalates.
  • Wrong Rsn code: ISO External Code Set codes (DUPL, AC03, AGNT, BE07) must be used strictly. Custom code = CBPR+ validation rejection.
  • camt.027 — Claim Non Receipt (triggers the investigation).
  • camt.056 — FI to FI Payment Cancellation Request.
  • camt.087 — Request to Modify Payment.
  • pacs.028 — FI to FI Payment Status Request (alternative status query).
  • pacs.004 — Payment Return (case where resolution implies fund restitution).