Everything the build publishes, what each file is for, and how to fetch one record instead of the whole corpus.
Snapshot 2026-09-20, built 2026-09-26, format version 1, commit 019924ac64ee0aa0742b8f02a04488a83633385d. Every JSON file below repeats these four fields and the licence, so a file that travels on its own still says what it is and when it was true.
Orca's data is published under the Creative Commons Attribution 4.0 International (CC BY 4.0), SPDX CC-BY-4.0, at https://creativecommons.org/licenses/by/4.0/. Copy it, change it, build on it, commercially or not. Credit Orca and name the snapshot date you used.
Data from Orca (https://qstve.com/orca/), CC BY 4.0. Snapshot 2026-09-20.
Every published JSON file carries that same string at license.attribution, so nothing has to be composed by hand. The full statement, including the rulebooks it does not cover, is in LICENSE-DATA.md.
Reference material about published payment rules. Not legal, compliance or financial advice. Orca cites rulebooks by section and edition and does not reproduce them; rights in the cited documents stay with their authors.
50 rails hold 1137 records: 777 reason codes and 360 rail facts. Under data/ the build writes 1 rails index, 50 rail files and 1137 record files, one for every record above.
entries and all of its rail facts under facts, the same records corpus.json holds.record key, unchanged from corpus.json, with the licence and snapshot around it.entries and every rail fact under facts. Fetch this only when you want all of it.product key, the same view products.json holds; its page is <rail>/<slug>.html.Paths are predictable and stable. A record's uid is <rail>:<id>; its file is the rail and the id, in that order, under data/records/.
data/rails.json every rail, its counts, and the path to its file data/rails/us-ach.json every record on US ACH data/records/us-ach/C01.json the one record whose uid is us-ach:C01
Start at data/rails.json if you do not know the rail ids: it lists every rail, its counts, and the path to its file. A rail file holds that rail's whole record set. A record file holds one record, unchanged, under a record key, with the licence and snapshot around it. Nothing under data/ is maintained by hand; one run of scripts/build.mjs writes all of it from corpus/, and the build refuses to publish if any of it disagrees with corpus.json.
The last 20 commits that changed something, 2026-09-21 to 2026-09-26, added 228 records, removed 0 and superseded 0; changed 1 deadlines, 1 actions and 73 meanings; demoted 1 records a trust tier and promoted 129; added, re-read or dropped 229 sources; found 0 newly stale; changed 5 known gap lines; and changed 73 other fields. 0 further commits changed formatting only and count as no change at all. Read from this repository's git history at build time, not from a stored tally; the list is in changes.json.
How a rule change is told from a reformat: the build compares the two versions of a record as parsed JSON, field by field, with whitespace collapsed and key order ignored. Indentation, re-sorted keys and a whitespace-only edit produce nothing and are counted as reformats, never as changes. A field the build does not recognise is still listed, as "other field".
81d85a39rtp-return-request:UAPA Fraudulently induced payment. facts.return_windows[0].deadline: was until 2027-03-01 no stated deadline; from 2027-03-01, no later than 2 business days after the fraud determination (Fraud Reporting and Acting on Alerts inter..., now none stated while this record applies; the interpretation's two business day limit (section 1.c) starts 2027-03-01, after this record's effective_tortp-return-request:UAPA Fraudulently induced payment. actions: was ["Sending participant: send a Request for Return of Funds (camt.056) with UAPA as the fraud report required by Operating Rule II.G.2; email to TCH is not a s..., now ["Sending participant: send a Request for Return of Funds (camt.056) with UAPA as the fraud report required by Operating Rule II.G.2; email to TCH is not a s...rtp-return-request:UAPA Fraudulently induced payment. summary: was The sending participant asks for money back, and reports fraud to TCH, because it has determined that the sender authorized the RTP payment but was tricked i..., now The sending participant asks for money back, and reports fraud to TCH, because it has determined that the sender authorized an RTP-native payment but was dec...rtp-return-request:UAPA Fraudulently induced payment. triggers: was ["The sending participant determines the sender was deceived into sending an RTP-native payment, for example by someone impersonating a trusted party","A Sen..., now ["The sending participant determines the sender was deceived into sending an RTP-native payment, for example by someone impersonating a trusted party"]rtp-return-request:UAPA Fraudulently induced payment. basis.sources: was TCH RTP Rules Interpretation, Fraud Reporting and Acting on Alerts, RTP Operating Rule II.G, dated 2026-09-14 (marked Public), sections 1.a, 1.b (category ch..., now TCH RTP Rules Interpretation, Fraud Reporting and Acting on Alerts, RTP Operating Rule II.G, dated 2026-09-14 (marked Public), sections 1.a, 1.b (category ch...rtp-return-request:UAPA Fraudulently induced payment. currency.effective_note: was UAPA fraud reporting required from 2026-03-31; two business day reporting deadline in force 2027-03-01; IDS reporting 2026-09-30; OBO reporting 2027-03-01. F..., now UAPA fraud reporting required from 2026-03-31 (section 1.b). This record's statement stops applying 2026-09-30: from that date, under section 1.d.ii of the r...rtp-return-request:UAPA Fraudulently induced payment. currency.effective_to: now 2026-09-3059204ebd mergeus-ach:cal.federal-reserve-banks Federal Reserve Banks banking days. Calendar, draftfd5ef9fa mergepix:codeset.pain012-authorisation-rejection-reasons-from-2026 Pix Automatico authorisation rejection reasons (pain.012), catalog 5.13.1. currency.status: was draft, now corroboratedpix:codeset.pain014-instruction-errors-from-2026 Pix Automatico instruction errors (pain.014), catalog 5.13.1. currency.status: was draft, now corroboratedpix:rule.consumer-law-the-limit-panel-must-be-where-the-customer-from-2026 The limit panel must be where the customer already is, from 2026-10-01. currency.status: was draft, now corroboratedpix:rule.limits-contactless-and-initiation-without-redirection-from-2026 Contactless and initiation without redirection, from 2026-10-01. currency.status: was draft, now corroboratedpix:rule.limits-the-user-can-drive-the-limit-in-both-directions-from-2026 The user can drive the limit in both directions, from 2026-10-01. currency.status: was draft, now corroboratedpix:codeset.pain012-authorisation-rejection-reasons-from-2026 Pix Automatico authorisation rejection reasons (pain.012), catalog 5.13.1. currency.corroboration added: now class from its RuleSource: pix:src.bcb-definicoes-detalhadas-mensagens-spipix:codeset.pain014-instruction-errors-from-2026 Pix Automatico instruction errors (pain.014), catalog 5.13.1. currency.corroboration added: now class from its RuleSource: pix:src.bcb-definicoes-detalhadas-mensagens-spipix:rule.consumer-law-the-limit-panel-must-be-where-the-customer-from-2026 The limit panel must be where the customer already is, from 2026-10-01. currency.corroboration added: now class from its RuleSource: pix:src.bcb-in-746-2026-limitespix:rule.limits-contactless-and-initiation-without-redirection-from-2026 Contactless and initiation without redirection, from 2026-10-01. currency.corroboration added: now class from its RuleSource: pix:src.bcb-in-746-2026-limitespix:rule.limits-the-user-can-drive-the-limit-in-both-directions-from-2026 The user can drive the limit in both directions, from 2026-10-01. currency.corroboration added: now class from its RuleSource: pix:src.bcb-in-746-2026-limites38757287 mergepix:codeset.pain012-authorisation-rejection-reasons-from-2026 Pix Automatico authorisation rejection reasons (pain.012), catalog 5.13.1. CodeSet, draftpix:codeset.pain014-instruction-errors-from-2026 Pix Automatico instruction errors (pain.014), catalog 5.13.1. CodeSet, draftpix:rule.consumer-law-the-limit-panel-must-be-where-the-customer-from-2026 The limit panel must be where the customer already is, from 2026-10-01. Rule, draftpix:rule.limits-contactless-and-initiation-without-redirection-from-2026 Contactless and initiation without redirection, from 2026-10-01. Rule, draftpix:rule.limits-the-user-can-drive-the-limit-in-both-directions-from-2026 The user can drive the limit in both directions, from 2026-10-01. Rule, draftpix:src.bcb-in-746-2026-limites Instrucao Normativa BCB n. 746/2026, amending the Pix value limits. RuleSource, draftpix:codeset.pain012-authorisation-rejection-reasons Pix Automatico authorisation rejection reasons (pain.012). currency.effective_note: was Drafted 2026-09-22 by the Pix Automatico and Cobranca drafting session from the documents named in basis, each opened and read that day. Values are the domai..., now Drafted 2026-09-22 by the Pix Automatico and Cobranca drafting session from the documents named in basis, each opened and read that day. Values are the domai...pix:codeset.pain012-authorisation-rejection-reasons Pix Automatico authorisation rejection reasons (pain.012). currency.effective_to: now 2026-10-25pix:codeset.pain014-instruction-errors Pix Automatico instruction errors (pain.014). currency.effective_note: was Drafted 2026-09-22 by the Pix Automatico and Cobranca drafting session from the documents named in basis, each opened and read that day. Values are the domai..., now Drafted 2026-09-22 by the Pix Automatico and Cobranca drafting session from the documents named in basis, each opened and read that day. Values are the domai...pix:codeset.pain014-instruction-errors Pix Automatico instruction errors (pain.014). currency.effective_to: now 2026-10-25b4bc9a14 mergesepa-sct-inst:consumer-law What consumer law applies, and what does it give a consumer that the rules do not?. applies_to: was a consumer payer or payee on a SEPA Instant Credit Transfer whose account is held in an EEA Member State, with the national transposition of the Payment Serv..., now a consumer payer or payee on a SEPA Instant Credit Transfer whose account is held in an EEA Member State, with the national transposition of the Payment Serv...sepa-sct-inst:consumer-law What consumer law applies, and what does it give a consumer that the rules do not?. details: was [{"label":"Which instruments the rulebook names","value":"Participation is conditional on complying with the SEPA Regulation, the Regulation on information a..., now [{"label":"Which instruments the rulebook names","value":"Participation is conditional on complying with the SEPA Regulation, the Regulation on information a...sepa-sct-inst:consumer-law What consumer law applies, and what does it give a consumer that the rules do not?. exceptions: was ["Business customers can opt out of the payee check for bulk submissions, and can opt back in whenever they like. Their bank has to explain the liability con..., now ["Business customers sending payment orders as a package may switch the payee check off, and back on at any time; consumers have no such option. When a busin...sepa-sct-inst:consumer-law What consumer law applies, and what does it give a consumer that the rules do not?. statement: was The rulebook binds banks to each other and gives a customer nothing directly. A consumer's position comes from the Payment Services Directive as nationally t..., now The rulebook binds banks to each other and gives a customer nothing directly. A consumer's position comes from the Payment Services Directive as nationally t...sepa-sct-inst:messages What messages exist on this rail, and what standard are they in?. caveat: was An implementer cannot build from the rulebook, and on this scheme the gap matters more, because the confirmation message is the whole control flow. Field nam..., now The confirmation message is the whole control flow on this scheme, so the mapping matters more than on SCT: the same pacs.002 says yes or no, and a returned ...sepa-sct-inst:messages What messages exist on this rail, and what standard are they in?. details: was [{"label":"The ten datasets","value":"DS-01 the customer's instruction to its PSP, DS-02 the inter-PSP payment, DS-03 the confirmation message, DS-04 what th..., now [{"label":"The ten datasets","value":"DS-01 the customer's instruction to its PSP, DS-02 the inter-PSP payment, DS-03 the confirmation message, DS-04 what th...sepa-sct-inst:messages What messages exist on this rail, and what standard are they in?. exceptions: was ["The ISO message identifiers for this scheme are in the two Implementation Guidelines and not in the rulebook. This record does not assert them. [Unverified..., now ["The customer-side datasets, DS-01, DS-04 and DS-10, are mapped in the SCT Inst Customer-to-PSP Implementation Guidelines, which were not read for this reco...sepa-sct-inst:messages What messages exist on this rail, and what standard are they in?. statement: was The rulebook names no ISO message. It defines ten datasets and a list of attributes and leaves the ISO 20022 XML mapping to two Implementation Guidelines it ..., now The rulebook names no ISO message. It defines ten datasets and a list of attributes and leaves the ISO 20022 XML mapping to two Implementation Guidelines it ...sepa-sct-inst:participants Who can be on this rail, in what roles, and who cannot?. applies_to: was adherence to the EPC SEPA Instant Credit Transfer scheme and the roles of the parties to a transaction made under it, now adherence to the EPC SEPA Instant Credit Transfer scheme and the roles of the parties to a transaction made under it, and, where it sits in front of an SCT I...sepa-sct-inst:participants Who can be on this rail, in what roles, and who cannot?. details: was [{"label":"The four roles in a payment","value":"The originator who instructs, the originator PSP that reserves and sends, the beneficiary PSP that receives,..., now [{"label":"The four roles in a payment","value":"The originator who instructs, the originator PSP that reserves and sends, the beneficiary PSP that receives,...e48a8d07 mergepix:codeset.pain011-cancellation-reasons Pix Automatico cancellation reasons (pain.011). currency.status: was draft, now corroboratedpix:codeset.pain012-authorisation-rejection-reasons Pix Automatico authorisation rejection reasons (pain.012). currency.status: was draft, now corroboratedpix:codeset.pain014-instruction-errors Pix Automatico instruction errors (pain.014). currency.status: was draft, now corroboratedpix:mandate.pix-automatico-authorisation Pix Automatico authorisation. currency.status: was draft, now corroboratedpix:rule.agendado-and-scheduled-charges-settle-00-to-08-with-an-evening-retry Pix Agendado and scheduled due date charges: the settlement window and the evening retry. currency.status: was draft, now corroboratedpix:rule.automatico-a-cycle-on-a-day-the-month-lacks Pix Automatico: when a cycle's day does not exist in the month. currency.status: was draft, now corroboratedpix:rule.automatico-a-faulty-payment-is-refunded-within-24-hours Pix Automatico: the payer's bank refunds a faulty payment within 24 hours. currency.status: was draft, now corroboratedpix:rule.automatico-a-pending-request-lapses-after-30-days Pix Automatico: a journey 1 request stays open for at most 30 days. currency.status: was draft, now corroboratedpix:rule.automatico-a-pre-approved-credit-line-may-fund-it Pix Automatico: a pre-approved credit line may pay what the balance cannot. currency.status: was draft, now corroboratedpix:rule.automatico-a-settlement-error-allows-a-same-day-resend Pix Automatico: resending after an error in the settlement flow. currency.status: was draft, now corroborated3a1aede1in-upi:rule.upi-autopay-every-mandate-event-is-notified UPI AutoPay: the customer hears about every change to a mandate, twice. currency.status: was draft, now corroboratedin-upi:rule.upi-autopay-every-mandate-event-is-notified UPI AutoPay: the customer hears about every change to a mandate, twice. currency.corroboration added: now class from its RuleSource: in-upi:src.npci-upi-consolidated-circular-2026da8b0d79in-upi:rule.upi-autopay-validity-and-expiry UPI AutoPay: a mandate lasts at most 30 years and lapses at its end date. currency.status: was draft, now corroboratedin-upi:rule.upi-autopay-validity-and-expiry UPI AutoPay: a mandate lasts at most 30 years and lapses at its end date. currency.corroboration added: now class from its RuleSource: in-upi:src.npci-upi-consolidated-circular-2026516ce905in-upi:rule.upi-autopay-revocation UPI AutoPay: revoking a mandate, from either side. currency.status: was draft, now corroboratedin-upi:rule.upi-autopay-revocation UPI AutoPay: revoking a mandate, from either side. currency.corroboration added: now class from its RuleSource: in-upi:src.npci-upi-consolidated-circular-2026c21affa9in-upi:rule.upi-autopay-pause-and-unpause UPI AutoPay: pausing a mandate and lifting the pause. currency.status: was draft, now corroboratedin-upi:rule.upi-autopay-pause-and-unpause UPI AutoPay: pausing a mandate and lifting the pause. currency.corroboration added: now class from its RuleSource: in-upi:src.npci-upi-consolidated-circular-202663cd701din-upi:state.upi-autopay-revoked UPI AutoPay mandate: revoked. currency.status: was draft, now corroboratedin-upi:state.upi-autopay-revoked UPI AutoPay mandate: revoked. currency.corroboration added: now class from its RuleSource: in-upi:src.npci-upi-consolidated-circular-202645434916in-upi:state.upi-autopay-expired UPI AutoPay mandate: expired. currency.status: was draft, now corroboratedin-upi:state.upi-autopay-expired UPI AutoPay mandate: expired. currency.corroboration added: now class from its RuleSource: in-upi:src.npci-upi-consolidated-circular-2026c516729din-upi:state.e-mandate-withdrawn UPI recurring e-mandate: withdrawn by the customer. currency.status: was draft, now corroboratedin-upi:state.e-mandate-withdrawn UPI recurring e-mandate: withdrawn by the customer. currency.corroboration added: now class from its RuleSource: in-upi:src.rbi-e-mandate-framework-2026f7758458in-upi:state.e-mandate-registered UPI recurring e-mandate: registered. currency.status: was draft, now corroboratedin-upi:state.e-mandate-registered UPI recurring e-mandate: registered. currency.corroboration added: now class from its RuleSource: in-upi:src.rbi-e-mandate-framework-20265866bed9 mergein-upi:rule.upi-autopay-every-mandate-event-is-notified UPI AutoPay: the customer hears about every change to a mandate, twice. Rule, draftin-upi:rule.upi-autopay-modification UPI AutoPay: changing a live mandate's amount or payee. Rule, draftin-upi:rule.upi-autopay-pause-and-unpause UPI AutoPay: pausing a mandate and lifting the pause. Rule, draftin-upi:rule.upi-autopay-revocation UPI AutoPay: revoking a mandate, from either side. Rule, draftin-upi:rule.upi-autopay-validity-and-expiry UPI AutoPay: a mandate lasts at most 30 years and lapses at its end date. Rule, draftin-upi:src.npci-upi-consolidated-circular-2026 NPCI UPI Consolidated Circular, version 1.0 (2026). RuleSource, draftin-upi:state.upi-autopay-expired UPI AutoPay mandate: expired. LifecycleState, draftin-upi:state.upi-autopay-paused UPI AutoPay mandate: paused. LifecycleState, draftin-upi:state.upi-autopay-revoked UPI AutoPay mandate: revoked. LifecycleState, draftin-upi:state.e-mandate-registered UPI recurring e-mandate: registered. basis.sources: was Reserve Bank of India, Digital Payments - E-mandate Framework, 2026 (RBI/DPSS/2026-27/396), paragraphs 2, 4, 5 and 6, read 2026-09-23 on rbi.org.in. The dire..., now Reserve Bank of India, Digital Payments - E-mandate Framework, 2026 (RBI/DPSS/2026-27/396), paragraphs 2, 4, 5 and 6, read 2026-09-23 on rbi.org.in. The dire...77d415e1 mergeau-npp:state.mandate-active PayTo agreement: active. currency.status: was draft, now corroboratedau-npp:state.mandate-awaiting-authorisation PayTo agreement: created, awaiting the payer's authorisation. currency.status: was draft, now corroboratedau-npp:state.mandate-cancelled PayTo agreement: cancelled. currency.status: was draft, now corroboratedau-npp:state.mandate-declined PayTo agreement: declined by the payer. currency.status: was draft, now corroboratedau-npp:state.mandate-suspended PayTo agreement: suspended (paused). currency.status: was draft, now corroboratedau-npp:state.mandate-active PayTo agreement: active. currency.corroboration added: now class from its RuleSource: au-npp:src.npp-regulations-v21au-npp:state.mandate-active PayTo agreement: active. currency.corroboration added: now class from its RuleSource: au-npp:src.auspayplus-payto-faqsau-npp:state.mandate-awaiting-authorisation PayTo agreement: created, awaiting the payer's authorisation. currency.corroboration added: now class from its RuleSource: au-npp:src.npp-regulations-v21au-npp:state.mandate-awaiting-authorisation PayTo agreement: created, awaiting the payer's authorisation. currency.corroboration added: now class from its RuleSource: au-npp:src.npp-payto-service-overview-v2au-npp:state.mandate-cancelled PayTo agreement: cancelled. currency.corroboration added: now class from its RuleSource: au-npp:src.npp-regulations-v218785b73dblik:state.recurring-payment-active BLIK recurring payment: active. currency.status: was draft, now corroboratedblik:state.recurring-payment-active BLIK recurring payment: active. currency.corroboration added: now class from its RuleSource: blik:src.blik-recurring-payments-introductionblik:state.recurring-payment-active BLIK recurring payment: active. currency.corroboration added: now class from its RuleSource: blik:src.blik-recurring-payments-model-ablik:state.recurring-payment-active BLIK recurring payment: active. currency.corroboration added: now class from its RuleSource: blik:src.blik-faq92817b7b mergeau-npp:src.npp-payto-service-overview-v2 NPP Australia, PayTo Service Overview v2.0, November 2021. RuleSource, draftau-npp:state.mandate-active PayTo agreement: active. LifecycleState, draftau-npp:state.mandate-awaiting-authorisation PayTo agreement: created, awaiting the payer's authorisation. LifecycleState, draftau-npp:state.mandate-cancelled PayTo agreement: cancelled. LifecycleState, draftau-npp:state.mandate-declined PayTo agreement: declined by the payer. LifecycleState, draftau-npp:state.mandate-suspended PayTo agreement: suspended (paused). LifecycleState, draftblik:state.recurring-payment-active BLIK recurring payment: active. LifecycleState, draftblik:state.recurring-payment-deleted-by-user BLIK recurring payment: deleted by the user. LifecycleState, draftblik:state.recurring-payment-expired BLIK recurring payment: past its expiry date. LifecycleState, draftboleto:src.nuclea-siloc-manual-operacoes Manual de Operações do SILOC (MAPX-OP002-2004), Núclea. RuleSource, draft03115925au-npp:consumer-law What consumer law sits above the NPP?. currency.status: was draft, now corroboratedau-npp:decision-points Where does somebody decide something on the NPP?. currency.status: was draft, now corroboratedau-npp:finality When is an NPP payment final, and can it be undone?. currency.status: was draft, now corroboratedau-npp:hours When is the NPP open?. currency.status: was draft, now corroboratedau-npp:limits Is there a limit on an NPP payment?. currency.status: was draft, now corroboratedau-npp:messages What messages does the NPP use, and what codes do they carry?. currency.status: was draft, now corroboratedau-npp:participants Who takes part in the NPP?. currency.status: was draft, now corroboratedau-npp:recall Can an NPP payment be recalled?. currency.status: was draft, now corroboratedau-npp:refund Can a customer get an NPP payment refunded?. currency.status: was draft, now corroboratedau-npp:return How does money come back on the NPP?. currency.status: was draft, now corroboratedca5179eeau-npp:exc.clearing-rejection Clearing rejection. currency.status: was draft, now corroboratedau-npp:exc.duplicate-or-error-payment-return-request Request for the return of a duplicate or error payment. currency.status: was draft, now corroboratedau-npp:exc.mandate-claim Mandate claim. currency.status: was draft, now corroboratedau-npp:exc.misdirected-payment-return-request Request for the return of a misdirected payment. currency.status: was draft, now corroboratedau-npp:exc.mistaken-internet-payment ePayments Code mistaken internet payment. currency.status: was draft, now corroboratedau-npp:exc.mistaken-payment-return-request Request for the return of a mistaken payment. currency.status: was draft, now corroboratedau-npp:exc.payment-initiation-rejection Payment initiation rejection. currency.status: was draft, now corroboratedau-npp:exc.settlement-rejection Settlement rejection, which voids a cleared payment. currency.status: was draft, now corroboratedau-npp:exc.spf-scam-complaint Scams Prevention Framework complaint. currency.status: was draft, now corroboratedau-npp:exc.unauthorised-transaction-claim ePayments Code unauthorised transaction claim. currency.status: was draft, now corroboratedNo history older than the last few changes, and no "changed since <date>" query. The full history is in the repository's git log, which is where changes.json is read from; this file publishes the recent end of it. Per-record dates are in currency.effective_since, currency.last_verified and each corroboration's checked_on; effective_since is free text, and on many records it says the edition read gives no date, so it is not a timeline. Read each record's currency block.
No query endpoint and no keys. These are static files; fetch what you need. A hosted agent endpoint is a separate open decision.