Creodata Solutions Logo

goAML XML Schema v5.0.2: CTR and STR Mandatory Fields Reference

April 18, 2026

When a compliance officer submits a CTR or STR to the Kenya Financial Reporting Centre, the FRC's goAML portal does not receive a form or a spreadsheet. It receives an XML file that must conform precisely to the goAML XSD v5.0.2 schema — a machine-enforceable specification of every element, data type, length constraint, and structural rule that a valid report must satisfy.

Most submission rejections trace back to one of two root causes: the reporting institution's IT team generated an XML file that does not comply with the schema, or the compliance team prepared data that does not meet Kenya-specific mandatory field requirements that sit on top of the base schema. Both problems are preventable with the right reference material.

This article is that reference. It provides a complete, field-by-field breakdown of the mandatory XML elements for Kenya FRC CTR and STR submissions, the data types and format constraints each field enforces, and the Kenya-specific localization rules that apply beyond the base XSD. IT developers building XML generation pipelines and compliance officers reviewing data quality before submission will find everything they need here.


Understanding the goAML XSD v5.0.2 Schema

What XSD Schema Validation Means and Why It Matters

An XSD (XML Schema Definition) is a formal specification written in XML that defines the legal structure, element names, data types, value constraints, and cardinality (required vs. optional, minimum/maximum occurrences) for every element in a corresponding XML document.

When the FRC's goAML portal receives your XML submission, it runs the file through an XSD schema validator before any human analyst sees it. The validator checks every element in the file against the rules defined in the goAML XSD v5.0.2 schema. If any element violates any rule — a missing mandatory field, a date in the wrong format, a string that exceeds its maximum length, an enumerated value not in the permitted list — the validator returns a schema validation error and the entire submission is rejected.

Schema validation is binary: the file either passes completely or fails. A file with 99 correct elements and one malformed date fails just as definitively as a file with fundamental structural errors. This is why pre-submission XSD validation is not optional — it is the minimum standard for any CTR or STR generation process.

The Six Nesting Levels of the Schema

The goAML XSD v5.0.2 schema organizes report data into a six-level hierarchical structure. Understanding this hierarchy is essential for developers building XML generation code and for compliance teams reviewing XML output.

Level 1: Report — The root element of the XML document. Contains the report header fields that identify the report type, the reporting institution, the filing date, and the responsible compliance officer. Every CTR and STR begins with this element.

Level 2: Transaction — One or more transaction elements nested within the Report. Each Transaction element describes a single financial transaction, including its date, amount, currency, and type. A CTR report is generated per qualifying transaction at or above the USD 15,000 equivalent threshold. An STR typically contains one or more Transaction elements linked to the suspicious activity being reported.

Level 3: Party — Each Transaction contains Party elements that identify the individuals or entities on each side of the transaction. Parties are typed by their role: from_person or from_entity for the debit side, to_person or to_entity for the credit side. For a cash deposit, the customer is the from_person and the bank is the to_entity.

Level 4: Account — Account elements are nested within Party elements. They contain the account number, branch code, account type, and currency denomination of the account through which the transaction flowed. An Account element is required wherever an account number is known.

Level 5: ID — Identity document elements are nested within Person-type Party elements. They record the type of identity document (National ID, passport, alien ID), the document number, the issuing country, and the expiry date where applicable. For Kenyan nationals, the National ID element is mandatory.

Level 6: Address — Address elements are nested within Party elements (persons and entities). They record the country, county/state, city/town, and street address of the party. At minimum, country and town are required for Kenya FRC submissions.

Differences Between STR and CTR Schema Structures

Both STR and CTR reports use the same underlying goAML XSD v5.0.2 schema. They are differentiated by the value of the report_type element (CTR or STR) and by the specific mandatory fields that apply to each type.

For CTR, the mandatory focus is on precise transaction data: amounts, currencies, transaction types, and verified customer identity with a National ID. The narrative field is not applicable.

For STR, the mandatory focus shifts to the suspicion rationale: the reason field (the narrative) is mandatory and must be substantive; the is_suspicious flag must be set to TRUE; indicator codes must be populated; and the narrative must link transactions to a recognized AML typology. Transaction data is still required but the analytical content of the report carries greater schema weight.

Country-Specific Extensions in Kenya's FRC Configuration

The base goAML XSD v5.0.2 schema, as distributed by UNODC for use by all participating FIUs, contains a standard set of elements applicable globally. The Kenya FRC has configured the portal to enforce additional mandatory fields and business rules that are specific to Kenya's regulatory and financial environment. These include:

  • Mandatory National ID for Kenyan nationals (the base schema treats ID as recommended, not required)
  • Mandatory mobile money channel classification for M-PESA, Airtel Money, and T-Kash transactions
  • Branch code must correspond to a Central Bank of Kenya registered branch
  • FRC Entity Registration Number must be present and must match FRC records exactly
  • Enhanced narrative minimum for TF indicator cases (500+ words in practice)

These Kenya-specific rules are enforced at the business rule validation layer after schema validation. A file can pass XSD validation and still fail FRC business rule checks.


CTR Mandatory Fields — Complete Reference

Table 1: Report Header Fields

XML Element NameData TypeMax LengthRequiredKenya Notes
report_typeString (enum)10MandatoryMust be exactly CTR
report_dateDateMandatoryFormat: YYYY-MM-DD; must be current or recent date
reporting_entity_idString50MandatoryFRC-issued Entity Registration Number; must match FRC records exactly
reporting_entity_nameString200MandatoryFull legal institution name as registered with FRC
reporting_person_nameString100MandatoryFull name of the responsible compliance officer
reporting_person_idString50MandatoryCompliance officer's staff ID or National ID number
reporting_person_titleString50RecommendedJob title (e.g., Head of Compliance, MLRO)
report_referenceString50MandatoryUnique report reference generated by reporting institution; must be unique per submission

Kenya-specific note on reporting_entity_id: The FRC Entity Registration Number format is FRC/INST/YYYY/NNNN. Even minor variations — trailing spaces, lowercase letters, omitting the slashes — cause ERR_045 business rule rejection. Copy the number directly from your FRC registration certificate and validate it character by character.

Kenya-specific note on report_reference: The unique report reference must not be reused across submissions. Most institutions use a format combining institution code, report type, date, and sequence number (e.g., NSBK-CTR-20260325-001). Duplicate references trigger rejection with error ERR_008.

Table 2: Transaction Fields

XML Element NameData TypeMax LengthRequiredKenya Notes
transaction_dateDateMandatoryFormat: YYYY-MM-DD; must be within reporting window
transaction_amountDecimalMandatoryTwo decimal places required (e.g., 1250000.00); no currency symbol
transaction_currencyString (ISO 4217)3MandatoryThree-letter ISO 4217 code; use KES not Ksh or KSH
transaction_typeString (enum)30MandatoryMust be one of: CASH_DEPOSIT, CASH_WITHDRAWAL, CURRENCY_EXCHANGE
transaction_referenceString100MandatoryCore banking system transaction reference number
account_numberString50MandatoryFull account number as in core banking system
branch_codeString20MandatoryCBK-registered branch sort code
branch_nameString100RecommendedHuman-readable branch name
channelString (enum)30ConditionalRequired for mobile money transactions; see Kenya channel codes below
kes_equivalent_amountDecimalConditionalRequired when transaction_currency is not KES; CBK-converted equivalent
cbk_rate_dateDateConditionalRequired when kes_equivalent_amount is populated
transaction_descriptionString500RecommendedBrief description of transaction purpose if known

Kenya channel codes for mobile money transactions:

ChannelXML Enum Value
M-PESA (Safaricom)MOBILE_WALLET_MPESA
Airtel MoneyMOBILE_WALLET_AIRTEL
T-Kash (Telkom Kenya)MOBILE_WALLET_TKASH
Branch teller (cash)BRANCH_CASH
ATM cash withdrawalATM_CASH
Agency banking (cash)AGENT_CASH

Note on transaction_type for mobile money: If a customer deposits cash at an M-PESA agent that is credited to a bank account, the transaction_type is CASH_DEPOSIT and the channel is MOBILE_WALLET_MPESA. The transaction type describes the nature of the cash movement; the channel describes the mechanism.

Table 3: Customer Identity Fields (Kenya-Specific)

XML Element NameData TypeMax LengthRequiredKenya Notes
person_first_nameString100MandatoryAs on identity document; no initials
person_last_nameString100MandatoryFamily name as on identity document
person_middle_nameString100OptionalInclude if present on ID document
date_of_birthDateMandatoryFormat: YYYY-MM-DD; must be plausible adult age
genderString (enum)1RecommendedM or F
id_typeString (enum)30MandatoryNATIONAL_ID, PASSPORT, or ALIEN_ID
id_numberString50Mandatory for KE nationals8-digit numeric for Kenyan National ID; alphanumeric for passport
id_issuing_countryString (ISO 3166-1 alpha-3)3MandatoryKEN for Kenya; destination country for passports
id_expiry_dateDateConditionalRequired for passport and alien ID; format YYYY-MM-DD
nationalityString (ISO 3166-1 alpha-3)3MandatoryKEN for Kenyan nationals
occupationString100RecommendedAs declared in KYC records
address_countryString (ISO 3166-1 alpha-3)3MandatoryKEN for Kenya-resident customers
address_countyString100MandatoryKenyan county (e.g., Nairobi, Mombasa, Kiambu)
address_townString100MandatoryTown or suburb
address_streetString200RecommendedStreet or estate name
phone_numberString20RecommendedInclude country code (+254 for Kenya)
email_addressString100OptionalWhere available from KYC records

Critical Kenya rule — National ID format: Kenyan National Identity Card numbers are exactly 8 numeric digits. No letters, no hyphens, no spaces. The format is NNNNNNNN. Common errors include:

  • Submitting a 7-digit number (older cards issued before 1990 — these are still valid 7-digit IDs and should be submitted as 7 digits, not zero-padded)
  • Including the cardholder serial number instead of the ID number
  • Submitting a KRA PIN number (which begins with a letter) as a National ID
  • Submitting a passport number for a Kenyan national when a National ID exists

For foreign nationals, the id_type must be PASSPORT and the passport number must be submitted. The FRC does not accept other foreign ID types as a substitute for a passport when reporting on non-Kenyan parties.


STR Mandatory Fields — Complete Reference

The STR uses the same schema structure as the CTR for transaction and identity fields. The additional STR-specific mandatory fields are concentrated in the report header (the suspicion reasoning section) and in the case analysis elements.

XML Element NameData TypeMax LengthRequiredKenya Notes
report_typeString (enum)10MandatoryMust be exactly STR
reasonString4000MandatoryThe full STR narrative — the grounds for suspicion. Must be substantive. Empty or placeholder values cause rejection.
is_suspiciousBooleanMandatoryMust be TRUE for all STR submissions
subject_typeString (enum)10MandatoryPERSON or ENTITY
indicator_codesString500MandatoryComma-separated list of FRC-approved indicator codes applicable to the case
transaction_descriptionString1000Mandatory for STRBrief factual description of the suspicious transaction(s)
reporting_person_nameString100MandatoryCompliance officer responsible for the report
reporting_person_idString50MandatoryStaff ID or National ID of reporting compliance officer
date_of_suspicionDateMandatoryDate on which suspicion first arose; format YYYY-MM-DD
action_takenString500Mandatory for KenyaDescribes institutional response (monitoring, account freeze, KYC review, etc.)
tipping_off_acknowledgedBooleanMandatoryMust be TRUE — confirms reporting officer acknowledges tipping-off prohibition under POCAMLA

Note on reason field length: While the schema maximum for the reason field is 4,000 characters, the FRC business rule validation enforces practical minimums based on the indicator type. Standard ML cases: minimum approximately 200 characters (roughly 30–40 words). TF indicator cases: minimum approximately 3,000 characters (roughly 500 words). A narrative that meets the technical minimum but is inadequate in substance will pass schema validation but generate FRC follow-up requests.

Note on indicator_codes: Indicator codes must be from the Kenya FRC's published indicator code list. Submitting custom codes or codes from another country's FIU implementation causes ERR_045 business rule rejection. See the related article STR Indicator Library: AML Typologies for Kenya Banks (2026) for the current Kenya FRC indicator code reference.

Transaction fields for STR: All the same transaction fields from the CTR table above apply to STR submissions. The key difference is that an STR may link to transactions that individually fall below the USD 15,000 equivalent CTR threshold — the criterion for STR filing is suspicion, not amount.


Kenya-Specific Validation Rules

National ID Format Validation

As described above, Kenya FRC enforces strict format validation on National ID numbers. The validation rule checks:

  1. ID type is NATIONAL_ID — field must contain exactly 7 or 8 numeric digits (7 for older IDs, 8 for IDs issued from approximately 1991 onwards)
  2. No alphabetic characters, spaces, hyphens, or other separators
  3. ID number must not be all zeros or a repeated single digit (e.g., 00000000 and 11111111 fail plausibility checks)

The most reliable way to pass this validation is to pull the ID number directly from a verified KYC source and run a format check before submission. Many banks maintain ID numbers in their KYC systems with leading spaces or concatenated with serial numbers — strip all non-numeric characters before including in the XML.

Mobile Money Channel Classification Rules

Kenya FRC requires mobile money transactions to be classified using the channel codes defined in Table 2 above. The classification rules are:

  • Any transaction initiated via M-PESA, regardless of whether the ultimate source or destination is a bank account, must use MOBILE_WALLET_MPESA
  • A bank-to-M-PESA transfer from the customer's bank account to their linked M-PESA number is classified as MOBILE_WALLET_MPESA
  • An M-PESA agent cash deposit credited to a bank account is CASH_DEPOSIT with channel MOBILE_WALLET_MPESA
  • ATM cash withdrawals must use ATM_CASH, not BRANCH_CASH
  • Agency banking cash deposits (e.g., Equity Agents, Co-op Kwa Jirani) must use AGENT_CASH

Using the wrong channel code — or omitting the channel field for mobile money transactions — causes business rule rejection ERR_045.

TF Indicator Enhanced Narrative Length Requirement

For STRs that include any TF (Terrorist Financing) indicator code, Kenya FRC practice requires the reason field narrative to meet enhanced length and detail standards. While the XSD schema does not enforce a word count, FRC business rule validation flags TF-indicator STRs with narratives shorter than approximately 3,000 characters (roughly 500 words) for manual review and likely follow-up information request.

TF narratives must include, in addition to the standard five elements: the specific high-risk jurisdiction(s) involved, the names of any sanctioned entities or persons referenced in screening alerts, the channel and mechanism of fund transfer, and the institutional response including any account freeze or regulatory notification.

Mandatory Fields That Kenya FRC Enforces Beyond the Base XSD

The following fields are optional in the base goAML XSD v5.0.2 but are treated as mandatory by Kenya FRC's business rule layer:

FieldBase XSD StatusKenya FRC StatusWhy Required
id_number for Kenyan nationalsRecommendedMandatoryPOCAMLA CDD requirements
branch_codeRecommendedMandatoryCBK branch registry cross-check
action_taken (STR)OptionalMandatoryFRC guidance on institutional response documentation
date_of_suspicion (STR)OptionalMandatoryFiling deadline compliance calculation
tipping_off_acknowledged (STR)OptionalMandatoryPOCAMLA tipping-off prohibition confirmation
channel for mobile moneyOptionalMandatoryMobile money typology classification

Common XML Validation Errors and How to Fix Them

Error CodeError MessageRoot CauseFix
ERR_001Schema validation failed: element <transaction_date> has invalid valueDate not in YYYY-MM-DD format (e.g., 25/03/2026 or 2026-3-25)Reformat all date fields to strict YYYY-MM-DD; zero-pad single-digit months and days
ERR_002Schema validation failed: <transaction_amount> is not a valid decimalAmount contains currency symbol (USD 15,000) or thousands separatorStrip all non-numeric characters except the decimal point; use format 15000.00
ERR_003Schema validation failed: <transaction_type> value CASH is not in permitted enumerationUsing shorthand values not in the schema enumUse exact enum values: CASH_DEPOSIT, CASH_WITHDRAWAL, CURRENCY_EXCHANGE
ERR_004Schema validation failed: mandatory element <id_number> is missingNational ID field is empty or absent in the XMLEnsure id_number is populated for all parties where id_type is NATIONAL_ID
ERR_005Schema validation failed: <transaction_currency> value Ksh is not valid ISO 4217Using non-standard currency abbreviationsUse ISO 4217 three-letter codes: KES, USD, EUR, GBP
ERR_006Schema validation failed: element <reason> is emptySTR reason field (narrative) is blank or whitespace-onlyWrite a substantive narrative; see How to Write an STR Narrative for goAML
ERR_007Schema validation failed: malformed XML — unexpected end elementUnclosed XML tag in generated fileValidate XML structure with a parser before submission; check for unclosed tags
ERR_008Business rule violation: duplicate report_reference valueThe same report reference number has been used in a previous submissionGenerate a new unique reference number following your institution's reference scheme
ERR_012Business rule violation: reporting_entity_id does not match FRC registryEntity registration number in the XML does not exactly match FRC recordsCopy the FRC registration number character-by-character from the official FRC registration certificate
ERR_045Business rule violation: id_number format invalid for id_type NATIONAL_IDNational ID contains non-numeric characters, wrong length, or formatting charactersStrip to 7–8 pure numeric digits; verify against original KYC document scan

Automating XML Generation to Avoid Schema Errors

Why Manual XML Generation Leads to a 40–60% Rejection Rate

Every manually assembled XML file is a handcrafted artifact — and handcrafted artifacts introduce human error. The types of errors that cause rejection are exactly the kinds of errors that humans make: a date formatted as DD/MM/YYYY instead of YYYY-MM-DD, an amount that includes a comma as a thousands separator, a transaction type value that is almost right but slightly off, a National ID with a leading space from the KYC export.

At institutions where XML generation is performed manually — whether in a text editor, Excel macro, or bespoke script — rejection rates of 40–60% on first submission are consistently observed. Each rejection adds 2–4 hours of rework to the filing cycle.

What an Automated XML Engine Does Differently

An automated XML generation engine, purpose-built for goAML schema compliance, eliminates these failure modes systematically:

  • Schema-aware field mapping: Every input field is mapped to its exact goAML XSD element name. There is no manual transcription of element names.
  • Data type enforcement at input: Date fields accept only valid dates and output them in YYYY-MM-DD format. Decimal fields strip formatting characters and enforce two decimal places.
  • Enum validation: Transaction type, channel, and ID type fields are selected from the exact permitted enum values — no free-text entry.
  • Kenya business rule enforcement: National ID format, branch code registration, mobile money channel classification, and FRC entity registration number matching are all validated before the XML is generated.
  • XSD validation on output: The generated XML is validated against the goAML XSD v5.0.2 before it is made available for submission. Files that fail validation are not surfaced to the compliance officer until the underlying data issue is resolved.
  • Per-transaction threshold detection with FX conversion: Each cash transaction is evaluated against the USD 15,000 equivalent threshold in real time, with the applied exchange rate recorded in the CTR.

The result is a submission pipeline that produces schema-valid, Kenya FRC-compliant XML files every time — with a rejection rate that approaches zero.


Build Your Submission Pipeline on a Reliable Schema Foundation

Understanding the goAML XML schema is the foundation of a reliable CTR and STR filing process. Whether your institution is building its own XML generation pipeline or evaluating a purpose-built platform, the field reference and validation rules in this article give you what you need to achieve first-submission success consistently.

Creodata's goAML platform handles the full schema compliance lifecycle automatically — from field mapping and data type enforcement through Kenya-specific business rule validation to XSD-validated XML output. Your compliance team focuses on the analysis; the platform handles the technical filing requirements.

See the platform in action with a live demo.

Request a Demo → https://www.creodata.com/demo


Related articles: