Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.verifow.com/llms.txt

Use this file to discover all available pages before exploring further.

Overview

The Reports module automates the creation of regulatory filings required under the CBN AML/CFT Act. When transactions trigger certain rules, the system can auto-generate Suspicious Activity Reports (SAR), Currency Transaction Reports (CTR), and Foreign Transaction Reports (FTR). Compliance officers can also generate these manually.

Common Workflows

Auto-generation: A customer makes a cash deposit ≥ ₦5M → The system auto-creates a CTR → The compliance officer reviews and approves it → The XML is submitted to CBN. Manual SAR filing: An officer investigates a structuring case → Manually generates a SAR from the case → Attaches supporting documents → Approves for regulatory submission.

Permissions

ActionWho Can Do It
Generate reportsBANK_ADMIN, COMPLIANCE_OFFICER
List, view reportsAll authenticated users
Approve, file reportsBANK_ADMIN, COMPLIANCE_OFFICER

Report Types

TypeTriggerFiling Threshold
SARSuspicious activity (structuring, sanctions, fraud)Any suspicious pattern
CTRLarge cash transactionCash ≥ ₦5,000,000
FTRInternational transferReceiver country ≠ NG

Report Statuses

StatusMeaning
DRAFTAuto-generated, awaiting review
PENDING_REVIEWSubmitted for officer approval
APPROVEDApproved for CBN submission
FILEDSubmitted to CBN
REJECTEDRejected, needs revision

Endpoints

MethodEndpointDescription
POST/api/v1/reports/sarGenerate a Suspicious Activity Report
POST/api/v1/reports/ctrGenerate a Currency Transaction Report
POST/api/v1/reports/ftrGenerate a Foreign Transaction Report
GET/api/v1/reportsList generated reports
GET/api/v1/reports/:idRetrieve report details
GET/api/v1/reports/:id/xmlDownload report as CBN XML
PATCH/api/v1/reports/:id/approveApprove report for submission
PATCH/api/v1/reports/:id/fileMark report as filed with CBN

Generate SAR

Create a Suspicious Activity Report for investigated cases. Request Body
FieldTypeRequiredDescription
caseIdstringRelated case UUID
titlestringReport title
descriptionstringNarrative of suspicious activity
suspicionTypestringSTRUCTURING, SANCTIONS, FRAUD, OTHER
Example Request
curl -X POST /v1/reports/sar \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "caseId": "case_12345abcde",
    "title": "Structuring Pattern — 4 Deposits in 3 Hours",
    "description": "Customer made 4 deposits totaling ₦4.8M in 3 hours, just below the CTR threshold.",
    "suspicionType": "STRUCTURING"
  }'
Example Response — 201 Created
{
  "success": true,
  "data": {
    "id": "rep_001",
    "tenantId": "660e8400-e29b-41d4-a716-446655440001",
    "reportType": "SAR",
    "reportNumber": "SAR-2026-00001",
    "title": "Structuring Pattern — 4 Deposits in 3 Hours",
    "status": "DRAFT",
    "xmlContent": null,
    "jsonData": null,
    "relatedCaseId": "case_12345abcde",
    "generatedBy": "550e8400-e29b-41d4-a716-446655440000",
    "approvedBy": null,
    "filedAt": null,
    "createdAt": "2026-05-16T11:00:00Z",
    "updatedAt": "2026-05-16T11:00:00Z"
  }
}

Generate CTR

Create a Currency Transaction Report for large cash transactions. Request Body
FieldTypeRequiredDescription
transactionIdstringTriggering transaction UUID
titlestringReport title
amountnumberTransaction amount
currencystringDefaults to NGN
customerIdstringCustomer UUID
branchCodestringBranch where transaction occurred
Example Request
curl -X POST /v1/reports/ctr \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "transactionId": "tx_cash_999",
    "title": "Cash Deposit ₦5M — CTR Filing",
    "amount": 5000000,
    "currency": "NGN",
    "customerId": "cust_001",
    "branchCode": "LAG-01"
  }'
Example Response — 201 Created
{
  "success": true,
  "data": {
    "id": "rep_002",
    "reportType": "CTR",
    "reportNumber": "CTR-2026-00001",
    "title": "Cash Deposit ₦5M — CTR Filing",
    "status": "DRAFT",
    "relatedCaseId": null,
    "generatedBy": "550e8400-e29b-41d4-a716-446655440000",
    "approvedBy": null,
    "filedAt": null,
    "createdAt": "2026-05-16T11:30:00Z",
    "updatedAt": "2026-05-16T11:30:00Z"
  }
}

Generate FTR

Create a Foreign Transaction Report for cross-border transfers. Request Body
FieldTypeRequiredDescription
transactionIdstringTriggering transaction UUID
titlestringReport title
foreignAmountnumberAmount in foreign currency
foreignCurrencystringForeign currency code
destinationCountrystringISO 3166-1 alpha-2 code
purposeOfTransferstringReason for transfer
Example Request
curl -X POST /v1/reports/ftr \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "transactionId": "tx_intl_444",
    "title": "International Transfer — School Fees",
    "foreignAmount": 10000,
    "foreignCurrency": "USD",
    "destinationCountry": "US",
    "purposeOfTransfer": "School fees payment"
  }'
Example Response — 201 Created
{
  "success": true,
  "data": {
    "id": "rep_003",
    "reportType": "FTR",
    "reportNumber": "FTR-2026-00001",
    "title": "International Transfer — School Fees",
    "status": "DRAFT",
    "relatedCaseId": null,
    "generatedBy": "550e8400-e29b-41d4-a716-446655440000",
    "approvedBy": null,
    "filedAt": null,
    "createdAt": "2026-05-16T12:00:00Z",
    "updatedAt": "2026-05-16T12:00:00Z"
  }
}

List Reports

Retrieve generated reports with filtering. The list view excludes xmlContent and jsonData for performance. Query Parameters
ParameterTypeDefaultDescription
typestringSAR, CTR, FTR
statusstringDRAFT, PENDING_REVIEW, APPROVED, FILED, REJECTED
pageinteger1Page number
limitinteger20Items per page
Example Request
curl -X GET "/v1/reports?type=SAR&status=DRAFT&page=1&limit=10" \
  -H "Authorization: Bearer <access_token>"
Example Response — 200 OK
{
  "success": true,
  "data": {
    "items": [
      {
        "id": "rep_001",
        "reportType": "SAR",
        "reportNumber": "SAR-2026-00001",
        "title": "Structuring Pattern — 4 Deposits in 3 Hours",
        "status": "DRAFT",
        "generatedBy": "550e8400-e29b-41d4-a716-446655440000",
        "approvedBy": null,
        "filedAt": null,
        "createdAt": "2026-05-16T11:00:00Z",
        "updatedAt": "2026-05-16T11:00:00Z"
      }
    ],
    "total": 3,
    "page": 1,
    "limit": 10,
    "totalPages": 1
  }
}

Get Report Detail

Retrieve the full report including XML content and structured JSON data. Path Parameters
ParameterTypeDescription
idstringReport UUID
Example Request
curl -X GET /v1/reports/rep_001 \
  -H "Authorization: Bearer <access_token>"
Example Response — 200 OK
{
  "success": true,
  "data": {
    "id": "rep_001",
    "tenantId": "660e8400-e29b-41d4-a716-446655440001",
    "reportType": "SAR",
    "reportNumber": "SAR-2026-00001",
    "title": "Structuring Pattern — 4 Deposits in 3 Hours",
    "status": "APPROVED",
    "xmlContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Report>...</Report>",
    "jsonData": {
      "caseId": "case_12345abcde",
      "transactionIds": ["tx_abc123def456"],
      "suspicionType": "STRUCTURING"
    },
    "relatedCaseId": "case_12345abcde",
    "generatedBy": "550e8400-e29b-41d4-a716-446655440000",
    "approvedBy": "550e8400-e29b-41d4-a716-446655440000",
    "filedAt": null,
    "createdAt": "2026-05-16T11:00:00Z",
    "updatedAt": "2026-05-16T14:00:00Z"
  }
}

Get Report XML

Download the CBN-compliant XML representation of a report. Path Parameters
ParameterTypeDescription
idstringReport UUID
Example Request
curl -X GET /v1/reports/rep_001/xml \
  -H "Authorization: Bearer <access_token>" \
  -H "Accept: application/xml"
Example Response — 200 OK
<?xml version="1.0" encoding="UTF-8"?>
<Report xmlns="http://www.cbn.gov.ng/aml">
  <ReportType>SAR</ReportType>
  <ReportId>SAR-2026-00001</ReportId>
  <SubmissionDate>2026-05-16</SubmissionDate>
  <Institution>First Bank of Nigeria</Institution>
  <Subject>
    <CustomerId>cust_001</CustomerId>
    <TransactionIds>
      <Id>tx_abc123def456</Id>
      <Id>tx_def789ghi012</Id>
    </TransactionIds>
  </Subject>
  <Narrative>Customer made 4 deposits totaling ₦4.8M in 3 hours...</Narrative>
</Report>
The XML format follows CBN regulatory specifications. Approved reports can be submitted directly through the CBN portal.

Approve Report

Mark a report as approved for regulatory submission. Path Parameters
ParameterTypeDescription
idstringReport UUID
Request Body
FieldTypeRequiredDescription
approverNotesstringOptional review notes
Example Request
curl -X PATCH /v1/reports/rep_001/approve \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "approverNotes": "Verified against case files. Ready for CBN submission."
  }'
Example Response — 200 OK
{
  "success": true,
  "data": {
    "id": "rep_001",
    "status": "APPROVED",
    "approvedBy": "550e8400-e29b-41d4-a716-446655440000",
    "updatedAt": "2026-05-16T14:00:00Z"
  }
}
Once approved, a report cannot be modified. If errors are discovered, create a new amended report referencing the original.

File Report

Mark a report as officially filed with the CBN. Path Parameters
ParameterTypeDescription
idstringReport UUID
Example Request
curl -X PATCH /v1/reports/rep_001/file \
  -H "Authorization: Bearer <access_token>"
Example Response — 200 OK
{
  "success": true,
  "data": {
    "id": "rep_001",
    "status": "FILED",
    "filedAt": "2026-05-16T15:00:00Z",
    "updatedAt": "2026-05-16T15:00:00Z"
  }
}