Get a PIX transaction status
Resolves one transaction’s status. This is the operation that closes the loop after a payment: an outbound SPI order answers 201 or 202 with nothing settled, and the verdict arrives here.
The path id is resolved in three steps, in order: by JDPI request id (idReqJdPi), then — only when the value parses as a UUID — by local transaction id, and finally, when neither matched, by a LIVE lookup at JDPI (§8.4.2). Those branches do not answer the same thing. A local hit returns the status the reconciler last persisted; a live hit is a projection of JD’s own processing status, is the only branch that populates jdpiStatus, and projects JD status 9 to EXECUTED. So a transaction this plugin never persisted can still answer 200 here, and a status read live is not evidence that a local row exists.
Read-only: it neither commits nor releases the held amount — the background reconciler does that on its own tick, so a PENDING answer means “not decided yet”, not “stuck”. Optional ispb and indirectId name who the transaction is read as: named, it has to be held by that direct participant or indirect, or the answer is 404 PIX-0147 and nothing about it is returned — a token confined to one participant or indirect has to name it. Refusals: 400 PIX-0061 when transactionId is empty; 404 PIX-0147 when the transaction is held by another participant or indirect than the one named; 422 PIX-0128 for an ispb this deployment does not act as; and on the live branch, JDPI’s own outcome — 404 PIX-1027 when JD does not know the id either, 503 PIX-1050 when JDPI is unreachable — so a failure here names the dependency instead of hiding behind a generic error.
Authorizations
JWT bearer token issued by the identity provider.
Path Parameters
The transaction id (local UUID or JDPI request id).
"d1f9c0a2-..."
Query Parameters
The ISPB of the direct participant this transaction is read as. OPTIONAL: omit it and the transaction is read whoever holds it, exactly as before. Named, the transaction has to be booked in that participant's books, or the answer is 404 PIX-0147 - the same id named under another participant is not served. When this deployment holds no such transaction, the live lookup at JDPI is made with that participant's credential, so JD answers only for what that participant holds. An ISPB this deployment does not act as is 422 PIX-0128. It is ROUTING DATA you supply, never a credential, and a token confined to one participant has to name it here. Sending it empty (ispb=) reads the same as omitting it.
^[0-9]{8}$"12345678"
The registered indirect participant (UUID) this transaction is read as. OPTIONAL. Named, the transaction has to be recorded for that indirect, or the answer is 404 PIX-0147 - a direct participant's own transaction is not the indirect's. A transaction this deployment does not hold is 404 PIX-0147 too: an indirect's movements are always booked here, so JDPI is not asked. A token confined to one indirect has to name it here.
"3f2504e0-4f89-41d3-9a0c-0305e82c3301"
Response
OK
Transaction amount in centavos.
10050
The transaction id (or JDPI tx id on the live branch).
"d1f9c0a2-..."
eTransactionStatus name.
"EXECUTED"
Payment description.
"Invoice 42"
The SPI end-to-end id.
"E1234567890"
JDPI error code (live branch).
""
JDPI error message (live branch).
""
Numeric eTransactionFlow.
2
The JDPI request id.
"REQ-123"
Raw JDPI eProcessingStatus (live branch only).
9
The payee party.
The payer party.

