Standard Industry Reporting Format (SIRF) — Format Reference
SIRF is a JSON Lines format for bulk consumer credit data reporting. Each file contains one header record followed by one or more account records, one JSON object per line, no array wrapper.
File Structure
Every SIRF file begins with a Header record on the first line. All subsequent lines are Account records. A recordType discriminator field is present on every record.
Line 1: Header record — format version, reporting period, and portfolio metadata
Line 2+: Account record — one consumer credit account per line
Header Record
The first record in every SIRF file. Validated against schemas/sirf.schema.json ($defs/header).
| Field | Type | Required | Description |
|---|---|---|---|
recordType | const "Header" | Yes | Discriminator. Always "Header". |
sirfVersion | const "2.0" | Yes | SIRF format version this file conforms to. Always "2.0". |
reportingStartDate | string (date) | Yes | Start of the reporting period, inclusive. Format: YYYY-MM-DD. |
reportingEndDate | string (date) | Yes | End of the reporting period, inclusive. Format: YYYY-MM-DD. |
portfolioId | string | Yes | Portfolio identifier. Lowercase kebab-case, institution-prefixed. See Identifiers. |
recordCount | integer | Yes | Number of account records in the file, excluding the header. Minimum: 1. |
Account Record
Validated against schemas/sirf.schema.json ($defs/accountRecord).
Each account record groups three objects: the individual (person), their address (address), and the account data (account).
| Field | Type | Required | Description |
|---|---|---|---|
recordType | const "Account" | Yes | Discriminator. Always "Account". |
person | object | Yes | The individual associated with the account. See Person. |
address | object | Yes | UK residential address. See Address. |
account | object | Yes | The account data. See Account. |
{ "recordType": "Account", "person": { … }, "address": { … }, "account": { … } }
Account
The account object holds all account data. Validated against schemas/sirf.schema.json ($defs/account).
Core Fields
| Field | Type | Required | Description |
|---|---|---|---|
accountId | string | Yes | Account identifier within the lender’s system. Pattern: ^[A-Za-z0-9-]+$. |
accountType | string (enum) | Yes | Credit product category. See Account Types. |
status | string (enum) | Yes | Monthly payment performance indicator. See Status Values. |
Conditional Fields
Revolving Credit Fields
creditLimit, minimumPayment, cashAdvances, and cashAdvancesCount are only valid on CreditCard, ChargeCard, and Budget accounts. They are prohibited on all other account types.
| Field | Type | On CreditCard | On ChargeCard / Budget | On all other types |
|---|---|---|---|---|
creditLimit | integer | Required | Required | Prohibited |
minimumPayment | integer | Required | Optional | Prohibited |
cashAdvances | integer | Optional | Optional | Prohibited |
cashAdvancesCount | integer | Optional | Optional | Prohibited |
creditLimit, minimumPayment, and cashAdvances are monetary amounts in whole GBP pounds. Minimum: 0. cashAdvancesCount is a non-negative integer.
Delinquency Field
| Field | Type | When status is Delinquent1–Delinquent6 | Otherwise |
|---|---|---|---|
daysPastDue | integer | Required | Optional |
daysPastDue is a non-negative integer representing the number of days the account is past due.
Optional Fields
| Field | Type | Description |
|---|---|---|
startDate | string (date) | Date the account was opened. Format: YYYY-MM-DD. |
repayment | integer | Scheduled repayment amount per period in GBP. Minimum: 0. |
repaymentPeriod | integer | Total repayment periods at origination. Minimum: 1. |
currentBalance | integer | Outstanding balance in GBP at the point of reporting. May be negative. |
paymentFrequency | string (enum) | How often scheduled repayments are made. See Payment Frequencies. |
portfolioId | string | Portfolio the account belongs to. Used only when the record is sent on its own by HTTP POST; omit in JSON Lines files, where the header’s portfolioId applies. Pattern: ^[a-z0-9-]+$. See Delivery. |
accountIdChange | string | Updated account identifier, provided when the accountId for this account has changed. Processors should replace the previous accountId with this value. Pattern: ^[A-Za-z0-9-]+$. |
accountSubtype | string (enum) | Further classification within the account type. Values: Residential, BuyToLet, Flexible. |
closeDate | string (date) | Date the account was closed. Format: YYYY-MM-DD. Omit if the account is still open. |
startBalance | integer | Balance in GBP at the time the account was opened. Minimum: 0. |
flags | array of objects | Special condition markers, each with an optional period. Multiple flags may be applied simultaneously, but each flag type at most once per account. Omit the field entirely if none apply. See Flags. |
Components
Person
| Field | Type | Required | Description |
|---|---|---|---|
customerId | string | No | The lender’s own identifier for the customer, the same across all of that customer’s accounts with the lender. Pattern: ^[A-Za-z0-9-]+$. |
title | string (enum) | No | Honorific. Values: Mr, Mrs, Ms, Miss, Mx, Dr. |
firstName | string | Yes | Given name. Minimum 2 characters. |
middleName | string | No | Middle name or names. |
lastName | string | Yes | Family name. Minimum 2 characters. |
suffix | string | No | Name suffix, e.g. Junior, Senior, III. |
dob | string (date) | Yes | Date of birth. Format: YYYY-MM-DD. |
email | string | No | Email address. Pattern: ^[^@\s]+@[^@\s]+\.[^@\s]+$. |
phone | string | No | Phone number in E.164 format, UK country code, digits only. Pattern: ^44\d{10}$. |
Address
line1 and postalCode are required. All other fields are optional.
| Field | Type | Required | Description |
|---|---|---|---|
subBuilding | string | No | Sub-unit, e.g. Flat 3, Unit B. |
buildingName | string | No | Named building, e.g. Rose Cottage. |
buildingNumber | string | No | Street number as a string, e.g. 5A. |
line1 | string | Yes | Primary street address line. |
line2 | string | No | Secondary address line, e.g. locality or district. |
city | string | No | Town or city. |
postalCode | string | Yes | UK postcode including the internal space, e.g. NG8 1JD. Pattern: ^[A-Z]{1,2}\d[A-Z\d]?\s\d[A-Z]{2}$. |
deliveryPoint | string | No | Royal Mail UDPRN. 8-digit numeric string. Pattern: ^\d{8}$. |
Enumeration Values
Account Types
| Value |
|---|
HirePurchase |
UnsecuredLoan |
Mortgage |
Budget |
CreditCard |
ChargeCard |
CurrentAccount |
BasicBankAccount |
Status Values
Delinquent1–6 represent months in arrears.
| Value | Description |
|---|---|
Unclassified | Status not yet classified |
Dormant | Account is dormant |
UpToDate | Account is up to date |
Delinquent1 | 1 month in arrears |
Delinquent2 | 2 months in arrears |
Delinquent3 | 3 months in arrears |
Delinquent4 | 4 months in arrears |
Delinquent5 | 5 months in arrears |
Delinquent6 | 6 months in arrears |
Defaulted | Account has defaulted |
Payment Frequencies
| Value |
|---|
Monthly |
Weekly |
Fortnightly |
Quarterly |
Annually |
Irregular |
Flags
Each entry in flags is an object identifying the condition and, optionally, the period it applies. Multiple flags may be applied simultaneously, but each flag type may appear at most once per account. Omit the flags field entirely if none apply.
| Field | Type | Required | Description |
|---|---|---|---|
type | string (enum) | Yes | The condition. One of the values below. |
startDate | string (date) | No | Date the flag started to apply (inclusive). Format: YYYY-MM-DD. |
endDate | string (date) | No | Date the flag stopped applying (inclusive). Format: YYYY-MM-DD. Omit while the flag still applies. Must be after startDate when both are present. |
"flags": [
{ "type": "Arrangement", "startDate": "2024-11-01" },
{ "type": "Queried", "startDate": "2024-09-02", "endDate": "2024-10-15" }
]
Flag Types
| Value | Description |
|---|---|
Deceased | Deceased |
Partial | Partial settlement |
DebtAssigned | Debt assigned (non CRA member) |
DebtSold | Debt sold to an existing member |
GoneAway | Gone away |
Recourse | Debt is subject to recourse |
VoluntaryTermination | Account has been voluntarily terminated by the account holder |
Arrangement | Arrangement |
DebtManagement | Debt management programme |
PaidThirdParty | Debt has been paid by a third party |
Queried | Account query |
TransientAssociation | Transient association |
Conventions
Dates
All dates are strings in YYYY-MM-DD format with zero-padded months and days. Non-zero-padded dates such as 2023-2-5 are non-conforming.
Monetary Amounts
Monetary amounts are JSON integers in whole GBP pounds, rounded to the nearest pound (e.g. £498.75 is reported as 499). Decimal values are invalid. Currency is always GBP — no currency field is needed. All monetary amounts have a minimum of 0, except currentBalance, which may be negative.
Identifiers
accountIdandcustomerId— alphanumeric characters and hyphens, mixed case. Pattern:^[A-Za-z0-9-]+$.portfolioId(in the Header, and inaccountfor records sent by HTTP POST) — lowercase kebab-case, prefixed with the reporting institution’s slug. Pattern:^[a-z0-9-]+$. Example:farringdon-mortgages.
Postcodes
UK postcodes must include the internal space. NG8 1JD is valid; NG81JD is not. Pattern: ^[A-Z]{1,2}\d[A-Z\d]?\s\d[A-Z]{2}$.
Examples
Header
The first line of every SIRF file, shown pretty-printed. In a file it appears on a single line.
{
"recordType": "Header",
"sirfVersion": "2.0",
"reportingStartDate": "2025-02-01",
"reportingEndDate": "2025-02-28",
"portfolioId": "farringdon-mortgages",
"recordCount": 5
}
Sample 1 — Mortgage (Residential, with close date)
A residential mortgage with accountSubtype and closeDate set.
{
"recordType": "Account",
"person": {
"customerId": "FAR-C10482",
"title": "Mrs",
"firstName": "Patricia",
"lastName": "Okafor",
"dob": "1968-07-30"
},
"address": {
"buildingName": "Rose Cottage",
"buildingNumber": "8",
"line1": "Church Lane",
"line2": "Clifton",
"city": "Bristol",
"postalCode": "BS8 4CD"
},
"account": {
"accountId": "POK-7714",
"accountType": "Mortgage",
"accountSubtype": "Residential",
"status": "UpToDate",
"startDate": "2018-03-01",
"closeDate": "2025-03-01",
"repayment": 499,
"repaymentPeriod": 300,
"currentBalance": 87450,
"paymentFrequency": "Monthly"
}
}
Sample 2 — Credit Card (with minimum payment and cash advances)
A CreditCard account showing creditLimit, minimumPayment, cashAdvances, and cashAdvancesCount.
{
"recordType": "Account",
"person": {
"customerId": "FAR-C55213",
"title": "Mr",
"firstName": "Marcus",
"lastName": "Bell",
"dob": "1983-12-07",
"email": "m.bell@example.co.uk",
"phone": "447911234567"
},
"address": {
"buildingNumber": "9",
"line1": "Fernside Close",
"city": "Norwich",
"postalCode": "NR3 2HT"
},
"account": {
"accountId": "MBL-7722",
"accountType": "CreditCard",
"status": "UpToDate",
"startDate": "2020-11-01",
"repayment": 150,
"repaymentPeriod": 60,
"currentBalance": 2340,
"paymentFrequency": "Monthly",
"creditLimit": 7500,
"minimumPayment": 47,
"cashAdvances": 300,
"cashAdvancesCount": 1
}
}
Sample 3 — Unsecured Loan with delinquency fields and flags
An UnsecuredLoan in arrears with daysPastDue, startBalance, a current Arrangement flag, and a Queried flag that has ended.
{
"recordType": "Account",
"person": {
"customerId": "FAR-C31057",
"title": "Ms",
"firstName": "Sarah",
"middleName": "Louise",
"lastName": "Mitchell",
"dob": "1985-03-22"
},
"address": {
"buildingNumber": "14",
"line1": "Birchwood Avenue",
"line2": "Headingley",
"city": "Leeds",
"postalCode": "LS6 2AB"
},
"account": {
"accountId": "SML-4821",
"accountType": "UnsecuredLoan",
"status": "Delinquent2",
"startDate": "2023-06-01",
"daysPastDue": 62,
"repayment": 185,
"repaymentPeriod": 36,
"startBalance": 6660,
"currentBalance": 3421,
"paymentFrequency": "Monthly",
"flags": [
{
"type": "Arrangement",
"startDate": "2024-11-01"
},
{
"type": "Queried",
"startDate": "2024-09-02",
"endDate": "2024-10-15"
}
]
}
}
Batch File
A complete SIRF JSON Lines file — 1 header and 5 account records:
{"recordType":"Header","sirfVersion":"2.0","reportingStartDate":"2025-02-01","reportingEndDate":"2025-02-28","portfolioId":"farringdon-mortgages","recordCount":5}
{"recordType":"Account","person":{"customerId":"FAR-C10482","title":"Mrs","firstName":"Patricia","lastName":"Okafor","dob":"1968-07-30"},"address":{"buildingName":"Rose Cottage","buildingNumber":"8","line1":"Church Lane","line2":"Clifton","city":"Bristol","postalCode":"BS8 4CD"},"account":{"accountId":"POK-7714","accountType":"Mortgage","accountSubtype":"Residential","status":"UpToDate","startDate":"2018-03-01","closeDate":"2025-03-01","repayment":499,"repaymentPeriod":300,"currentBalance":87450,"paymentFrequency":"Monthly"}}
{"recordType":"Account","person":{"customerId":"FAR-C20931","title":"Mr","firstName":"James","lastName":"Thornton","dob":"1979-11-14","email":"j.thornton@example.com","phone":"447700900142"},"address":{"buildingNumber":"42","line1":"Maple Street","city":"Manchester","postalCode":"M1 4BT"},"account":{"accountId":"JTH-2293","accountType":"CreditCard","status":"UpToDate","startDate":"2021-09-15","repayment":75,"repaymentPeriod":60,"currentBalance":1240,"paymentFrequency":"Monthly","creditLimit":5000,"minimumPayment":25,"cashAdvances":200,"cashAdvancesCount":2}}
{"recordType":"Account","person":{"customerId":"FAR-C31057","title":"Ms","firstName":"Sarah","middleName":"Louise","lastName":"Mitchell","dob":"1985-03-22"},"address":{"buildingNumber":"14","line1":"Birchwood Avenue","line2":"Headingley","city":"Leeds","postalCode":"LS6 2AB"},"account":{"accountId":"SML-4821","accountType":"UnsecuredLoan","status":"Delinquent2","startDate":"2023-06-01","daysPastDue":62,"repayment":185,"repaymentPeriod":36,"startBalance":6660,"currentBalance":3421,"paymentFrequency":"Monthly","flags":[{"type":"Arrangement","startDate":"2024-11-01"},{"type":"Queried","startDate":"2024-09-02","endDate":"2024-10-15"}]}}
{"recordType":"Account","person":{"title":"Mr","firstName":"David","lastName":"Nkosi","dob":"1995-06-12"},"address":{"buildingNumber":"31","line1":"Wellington Street","city":"Sheffield","postalCode":"S1 4ER"},"account":{"accountId":"DNK-8856","accountType":"HirePurchase","status":"UpToDate","startDate":"2022-09-01","repayment":320,"repaymentPeriod":60,"currentBalance":12800,"paymentFrequency":"Monthly"}}
{"recordType":"Account","person":{"customerId":"FAR-C48820","title":"Ms","firstName":"Eleanor","lastName":"Griffiths","dob":"1961-03-28"},"address":{"buildingName":"Willowbank House","buildingNumber":"5","line1":"Riverside Way","city":"Exeter","postalCode":"EX2 4AB"},"account":{"accountId":"EGR-1147","accountType":"Mortgage","accountSubtype":"BuyToLet","status":"Defaulted","startDate":"2015-06-01","closeDate":"2024-11-30","repayment":612,"repaymentPeriod":240,"currentBalance":0,"paymentFrequency":"Monthly","flags":[{"type":"Partial","startDate":"2024-11-30"}]}}