[
  {
    "namespace": "com.acme.fineract.loan.job",
    "filepath": "custom/acme/loan/job/src/main/java/com/acme/fineract/loan/job/AcmeNoopJobConfiguration.java",
    "mechanism": "OTHER",
    "name": "ACME_NOOP_JOB",
    "description": "Defines a Spring Batch Job that can be triggered by a scheduler or API.",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/ServerApplication.java",
    "mechanism": "REST",
    "name": "Embedded Tomcat Server",
    "description": "Bootstraps the embedded HTTP server (Tomcat) to host the Fineract REST APIs.",
    "path": "/",
    "method": "N/A",
    "direction": "BOTH",
    "protocol": "HTTP",
    "connectionInfo": "Embedded Container"
  },
  {
    "namespace": "org.apache.fineract.accounting.accrual.api.AccrualAccountingApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/accounting/accrual/api/AccrualAccountingApiResource.java",
    "mechanism": "REST",
    "name": "executePeriodicAccrualAccounting",
    "description": "Endpoint to execute Periodic Accrual Accounting",
    "path": "/v1/runaccruals",
    "method": "POST",
    "direction": "BIDIRECTIONAL",
    "requestBody": "JSON payload (AccrualAccountingApiResourceSwagger.PostRunaccrualsRequest)",
    "responseBody": "JSON (CommandProcessingResult)"
  },
  {
    "namespace": "org.apache.fineract.accounting.closure.api",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/accounting/closure/api/GLClosuresApiResource.java",
    "mechanism": "REST",
    "name": "List Accounting Closures",
    "description": "Endpoint to retrieve a list of accounting closures.",
    "path": "/v1/glclosures",
    "method": "GET",
    "responseBody": "List<GLClosureData>"
  },
  {
    "namespace": "org.apache.fineract.accounting.closure.api",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/accounting/closure/api/GLClosuresApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Accounting Closure",
    "description": "Endpoint to retrieve a specific accounting closure by ID.",
    "path": "/v1/glclosures/{glClosureId}",
    "method": "GET",
    "responseBody": "GLClosureData"
  },
  {
    "namespace": "org.apache.fineract.accounting.closure.api",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/accounting/closure/api/GLClosuresApiResource.java",
    "mechanism": "REST",
    "name": "Create Accounting Closure",
    "description": "Endpoint to create a new accounting closure.",
    "path": "/v1/glclosures",
    "method": "POST",
    "requestBody": "JSON payload with officeId and closingDate",
    "responseBody": "CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.accounting.closure.api",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/accounting/closure/api/GLClosuresApiResource.java",
    "mechanism": "REST",
    "name": "Update Accounting Closure",
    "description": "Endpoint to update an existing accounting closure.",
    "path": "/v1/glclosures/{glClosureId}",
    "method": "PUT",
    "requestBody": "JSON payload with updates (e.g., comments)",
    "responseBody": "CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.accounting.closure.api",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/accounting/closure/api/GLClosuresApiResource.java",
    "mechanism": "REST",
    "name": "Delete Accounting Closure",
    "description": "Endpoint to delete an accounting closure.",
    "path": "/v1/glclosures/{glClosureId}",
    "method": "DELETE",
    "responseBody": "CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.accounting.closure.api",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/accounting/closure/api/GLClosuresApiResourceSwagger.java",
    "mechanism": "REST",
    "name": "GL Closures API Schemas",
    "description": "Defines the Swagger/OpenAPI schemas (Request and Response bodies) for the General Ledger Closures REST API endpoints.",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.accounting.financialactivityaccount.api.FinancialActivityAccountsApiResource",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/accounting/financialactivityaccount/api/FinancialActivityAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Financial Activity Accounts API",
    "description": "API for managing mappings between Financial Activities and GL Accounts.",
    "path": "/v1/financialactivityaccounts",
    "method": "GET, POST, PUT, DELETE",
    "authentication": "PlatformSecurityContext (Internal Fineract Auth)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.accounting.glaccount.api.GLAccountsApiResource",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/accounting/glaccount/api/GLAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve GL Accounts Template",
    "description": "Endpoint to retrieve a template for creating new GL accounts.",
    "path": "/v1/glaccounts/template",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON object containing default values and dropdown options"
  },
  {
    "namespace": "org.apache.fineract.accounting.glaccount.api.GLAccountsApiResource",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/accounting/glaccount/api/GLAccountsApiResource.java",
    "mechanism": "REST",
    "name": "List General Ledger Accounts",
    "description": "Endpoint to list all GL accounts with optional filtering.",
    "path": "/v1/glaccounts",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON array of GLAccountData"
  },
  {
    "namespace": "org.apache.fineract.accounting.glaccount.api.GLAccountsApiResource",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/accounting/glaccount/api/GLAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve a General Ledger Account",
    "description": "Endpoint to retrieve a single GL account by ID.",
    "path": "/v1/glaccounts/{glAccountId}",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON object of GLAccountData"
  },
  {
    "namespace": "org.apache.fineract.accounting.glaccount.api.GLAccountsApiResource",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/accounting/glaccount/api/GLAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Create a General Ledger Account",
    "description": "Endpoint to create a new GL account.",
    "path": "/v1/glaccounts",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON object defining the new account",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.accounting.glaccount.api.GLAccountsApiResource",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/accounting/glaccount/api/GLAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Update a GL Account",
    "description": "Endpoint to update an existing GL account.",
    "path": "/v1/glaccounts/{glAccountId}",
    "method": "PUT",
    "direction": "PRODUCER",
    "requestBody": "JSON object with updates",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.accounting.glaccount.api.GLAccountsApiResource",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/accounting/glaccount/api/GLAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Delete a GL Account",
    "description": "Endpoint to delete a GL account.",
    "path": "/v1/glaccounts/{glAccountId}",
    "method": "DELETE",
    "direction": "PRODUCER",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.accounting.glaccount.api.GLAccountsApiResource",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/accounting/glaccount/api/GLAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Download GL Accounts Template",
    "description": "Endpoint to download an Excel template for bulk import.",
    "path": "/v1/glaccounts/downloadtemplate",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "application/vnd.ms-excel file stream"
  },
  {
    "namespace": "org.apache.fineract.accounting.glaccount.api.GLAccountsApiResource",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/accounting/glaccount/api/GLAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Upload GL Accounts Template",
    "description": "Endpoint to upload an Excel file for bulk import.",
    "path": "/v1/glaccounts/uploadtemplate",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "Multipart form data containing the file",
    "responseBody": "JSON object with import document ID"
  },
  {
    "namespace": "org.apache.fineract.accounting.glaccount.handler",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/accounting/glaccount/handler/CreateGLAccountCommandHandler.java",
    "mechanism": "OTHER",
    "name": "GLACCOUNT CREATE Command Handler",
    "description": "Registers a handler for the CREATE action on the GLACCOUNT entity within the application's command processing framework.",
    "path": "GLACCOUNT (Entity), CREATE (Action)",
    "method": "n/a",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.accounting.glaccount.serialization.GLAccountCommandFromApiJsonDeserializer",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/accounting/glaccount/serialization/GLAccountCommandFromApiJsonDeserializer.java",
    "mechanism": "REST",
    "name": "GL Account Command Deserialization",
    "description": "Deserializes JSON payloads for GL Account management APIs.",
    "direction": "CONSUMER",
    "requestBody": "JSON object containing GL Account details (name, glCode, type, usage, etc.)"
  },
  {
    "namespace": "org.apache.fineract.accounting.journalentry.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/api/JournalEntriesApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAll",
    "description": "List Journal Entries",
    "path": "/v1/journalentries",
    "method": "GET",
    "responseBody": "JSON array of JournalEntryData"
  },
  {
    "namespace": "org.apache.fineract.accounting.journalentry.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/api/JournalEntriesApiResource.java",
    "mechanism": "REST",
    "name": "retrieveJournalEntryById",
    "description": "Retrieve a single Entry",
    "path": "/v1/journalentries/{journalEntryId}",
    "method": "GET",
    "responseBody": "JournalEntryData JSON"
  },
  {
    "namespace": "org.apache.fineract.accounting.journalentry.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/api/JournalEntriesApiResource.java",
    "mechanism": "REST",
    "name": "createGLJournalEntry",
    "description": "Create Balanced Journal Entries",
    "path": "/v1/journalentries",
    "method": "POST",
    "requestBody": "JournalEntryCommand JSON",
    "responseBody": "CommandProcessingResult JSON"
  },
  {
    "namespace": "org.apache.fineract.accounting.journalentry.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/api/JournalEntriesApiResource.java",
    "mechanism": "REST",
    "name": "createReversalJournalEntry",
    "description": "Update Running balances or Reverse Journal Entries",
    "path": "/v1/journalentries/{transactionId}",
    "method": "POST",
    "responseBody": "CommandProcessingResult JSON"
  },
  {
    "namespace": "org.apache.fineract.accounting.journalentry.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/api/JournalEntriesApiResource.java",
    "mechanism": "REST",
    "name": "retrieveJournalEntries",
    "description": "Retrieve Provisioning Journal Entries",
    "path": "/v1/journalentries/provisioning",
    "method": "GET",
    "responseBody": "JSON array of JournalEntryData"
  },
  {
    "namespace": "org.apache.fineract.accounting.journalentry.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/api/JournalEntriesApiResource.java",
    "mechanism": "REST",
    "name": "retrieveOpeningBalance",
    "description": "Retrieve Opening Balance",
    "path": "/v1/journalentries/openingbalance",
    "method": "GET",
    "responseBody": "OfficeOpeningBalancesData JSON"
  },
  {
    "namespace": "org.apache.fineract.accounting.journalentry.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/api/JournalEntriesApiResource.java",
    "mechanism": "REST",
    "name": "getJournalEntriesTemplate",
    "description": "Download Template",
    "path": "/v1/journalentries/downloadtemplate",
    "method": "GET",
    "responseBody": "Excel File (application/vnd.ms-excel)"
  },
  {
    "namespace": "org.apache.fineract.accounting.journalentry.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/api/JournalEntriesApiResource.java",
    "mechanism": "REST",
    "name": "postJournalEntriesTemplate",
    "description": "Upload Template",
    "path": "/v1/journalentries/uploadtemplate",
    "method": "POST",
    "requestBody": "Multipart Form Data (File)",
    "responseBody": "Import Document ID JSON"
  },
  {
    "namespace": "org.apache.fineract.accounting.journalentry.service.AccountingProcessorHelper",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/AccountingProcessorHelper.java",
    "mechanism": "OTHER",
    "name": "BusinessEventNotifierService",
    "description": "Internal event notification system used to publish business events when specific actions occur.",
    "direction": "PRODUCER",
    "protocol": "Java Method Call / Observer Pattern"
  },
  {
    "namespace": "org.apache.fineract.accounting.provisioning.api.ProvisioningEntriesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/api/ProvisioningEntriesApiResource.java",
    "mechanism": "REST",
    "name": "Create Provisioning Entries",
    "description": "Endpoint to create new provisioning entries.",
    "path": "/v1/provisioningentries",
    "method": "POST",
    "requestBody": "JSON payload defined by ProvisioningEntriesApiResourceSwagger.PostProvisioningEntriesRequest",
    "responseBody": "JSON result of the command processing",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.accounting.provisioning.api.ProvisioningEntriesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/api/ProvisioningEntriesApiResource.java",
    "mechanism": "REST",
    "name": "Modify Provisioning Entry",
    "description": "Endpoint to recreate a provisioning entry or create journal entries for it.",
    "path": "/v1/provisioningentries/{entryId}",
    "method": "POST",
    "requestBody": "JSON payload defined by ProvisioningEntriesApiResourceSwagger.PutProvisioningEntriesRequest",
    "responseBody": "JSON result of the command processing",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.accounting.provisioning.api.ProvisioningEntriesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/api/ProvisioningEntriesApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Provisioning Entry",
    "description": "Endpoint to retrieve a specific provisioning entry by ID.",
    "path": "/v1/provisioningentries/{entryId}",
    "method": "GET",
    "responseBody": "ProvisioningEntryData JSON",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.accounting.provisioning.api.ProvisioningEntriesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/api/ProvisioningEntriesApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Provisioning Entries (Search)",
    "description": "Endpoint to search for loan product provisioning entries with filters.",
    "path": "/v1/provisioningentries/entries",
    "method": "GET",
    "responseBody": "Page<LoanProductProvisioningEntryData> JSON",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.accounting.provisioning.api.ProvisioningEntriesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/api/ProvisioningEntriesApiResource.java",
    "mechanism": "REST",
    "name": "List All Provisioning Entries",
    "description": "Endpoint to list all provisioning entries with pagination.",
    "path": "/v1/provisioningentries",
    "method": "GET",
    "responseBody": "Page<ProvisioningEntryData> JSON",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.accounting.rule.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/accounting/rule/api/AccountingRuleApiResourceSwagger.java",
    "mechanism": "REST",
    "name": "Accounting Rules API Schemas",
    "description": "Defines the Swagger/OpenAPI schemas for the Accounting Rules REST API requests and responses.",
    "path": "n/a",
    "method": "n/a",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.accounting.rule.api.AccountingRuleApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/accounting/rule/api/AccountingRuleApiResource.java",
    "mechanism": "REST",
    "name": "retrieveTemplate",
    "description": "Retrieve Accounting Rule Details Template",
    "path": "/v1/accountingrules/template",
    "method": "GET",
    "responseBody": "JSON object containing default values and allowed options (offices, accounts, tags)"
  },
  {
    "namespace": "org.apache.fineract.accounting.rule.api.AccountingRuleApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/accounting/rule/api/AccountingRuleApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAllAccountingRules",
    "description": "Retrieve all Accounting Rules",
    "path": "/v1/accountingrules",
    "method": "GET",
    "responseBody": "JSON array of accounting rules"
  },
  {
    "namespace": "org.apache.fineract.accounting.rule.api.AccountingRuleApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/accounting/rule/api/AccountingRuleApiResource.java",
    "mechanism": "REST",
    "name": "retreiveAccountingRule",
    "description": "Retrieve a specific Accounting Rule",
    "path": "/v1/accountingrules/{accountingRuleId}",
    "method": "GET",
    "responseBody": "JSON object representing the accounting rule"
  },
  {
    "namespace": "org.apache.fineract.accounting.rule.api.AccountingRuleApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/accounting/rule/api/AccountingRuleApiResource.java",
    "mechanism": "REST",
    "name": "createAccountingRule",
    "description": "Create a new Accounting Rule",
    "path": "/v1/accountingrules",
    "method": "POST",
    "requestBody": "JSON object with rule details (name, officeId, accounts/tags)",
    "responseBody": "JSON object with command processing result (resourceId)"
  },
  {
    "namespace": "org.apache.fineract.accounting.rule.api.AccountingRuleApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/accounting/rule/api/AccountingRuleApiResource.java",
    "mechanism": "REST",
    "name": "updateAccountingRule",
    "description": "Update an existing Accounting Rule",
    "path": "/v1/accountingrules/{accountingRuleId}",
    "method": "PUT",
    "requestBody": "JSON object with fields to update",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.accounting.rule.api.AccountingRuleApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/accounting/rule/api/AccountingRuleApiResource.java",
    "mechanism": "REST",
    "name": "deleteAccountingRule",
    "description": "Delete an Accounting Rule",
    "path": "/v1/accountingrules/{accountingRuleId}",
    "method": "DELETE",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.accounting.rule.handler.UpdateAccountingRuleCommandHandler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/accounting/rule/handler/UpdateAccountingRuleCommandHandler.java",
    "mechanism": "OTHER",
    "name": "ACCOUNTINGRULE UPDATE Command Handler",
    "description": "Registers a handler for the internal command processing bus to handle UPDATE actions on ACCOUNTINGRULE entities.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.adhocquery.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/adhocquery/api/AdHocApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAll",
    "description": "Retrieves all adhoc queries",
    "path": "/v1/adhocquery",
    "method": "GET",
    "responseBody": "JSON array of AdHocData",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.adhocquery.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/adhocquery/api/AdHocApiResource.java",
    "mechanism": "REST",
    "name": "template",
    "description": "Retrieves adhoc query template",
    "path": "/v1/adhocquery/template",
    "method": "GET",
    "responseBody": "JSON object of AdHocData template",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.adhocquery.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/adhocquery/api/AdHocApiResource.java",
    "mechanism": "REST",
    "name": "createAdHocQuery",
    "description": "Creates a new adhoc query",
    "path": "/v1/adhocquery",
    "method": "POST",
    "requestBody": "JSON object defining the adhoc query",
    "responseBody": "JSON object of CommandProcessingResult",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.adhocquery.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/adhocquery/api/AdHocApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAdHocQuery",
    "description": "Retrieves a specific adhoc query by ID",
    "path": "/v1/adhocquery/{adHocId}",
    "method": "GET",
    "responseBody": "JSON object of AdHocData",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.adhocquery.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/adhocquery/api/AdHocApiResource.java",
    "mechanism": "REST",
    "name": "update",
    "description": "Updates a specific adhoc query",
    "path": "/v1/adhocquery/{adHocId}",
    "method": "PUT",
    "requestBody": "JSON object with updates",
    "responseBody": "JSON object of CommandProcessingResult",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.adhocquery.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/adhocquery/api/AdHocApiResource.java",
    "mechanism": "REST",
    "name": "deleteAdHocQuery",
    "description": "Deletes a specific adhoc query",
    "path": "/v1/adhocquery/{adHocId}",
    "method": "DELETE",
    "responseBody": "JSON object of CommandProcessingResult",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.adhocquery.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/adhocquery/handler/UpdateAdHocCommandHandler.java",
    "mechanism": "OTHER",
    "name": "ADHOC UPDATE Command Handler",
    "description": "Registers this class as the handler for ADHOC entity UPDATE actions within the Fineract command processing framework.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.batch.api.BatchApiResource",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/batch/api/BatchApiResource.java",
    "mechanism": "REST",
    "name": "handleBatchRequests",
    "description": "Batch API endpoint allowing multiple API requests to be sent in a single payload.",
    "path": "/v1/batches",
    "method": "POST",
    "requestBody": "Array of BatchRequest objects (JSON)",
    "responseBody": "Array of BatchResponse objects (JSON)",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.batch.command.CommandStrategyProvider",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/batch/command/CommandStrategyProvider.java",
    "mechanism": "REST",
    "name": "createClient",
    "description": "Maps POST requests for clients to the createClientCommandStrategy.",
    "path": "v1/clients",
    "method": "POST",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.batch.command.CommandStrategyProvider",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/batch/command/CommandStrategyProvider.java",
    "mechanism": "REST",
    "name": "updateClient",
    "description": "Maps PUT requests for specific clients to the updateClientCommandStrategy.",
    "path": "v1/clients/{id}",
    "method": "PUT",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.batch.command.CommandStrategyProvider",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/batch/command/CommandStrategyProvider.java",
    "mechanism": "REST",
    "name": "applyLoan",
    "description": "Maps POST requests for loans to the applyLoanCommandStrategy.",
    "path": "v1/loans",
    "method": "POST",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.batch.command.CommandStrategyProvider",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/batch/command/CommandStrategyProvider.java",
    "mechanism": "REST",
    "name": "getLoanById",
    "description": "Maps GET requests for loans by ID to the getLoanByIdCommandStrategy.",
    "path": "v1/loans/{id}",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.batch.command.CommandStrategyProvider",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/batch/command/CommandStrategyProvider.java",
    "mechanism": "REST",
    "name": "applySavings",
    "description": "Maps POST requests for savings accounts to the applySavingsCommandStrategy.",
    "path": "v1/savingsaccounts",
    "method": "POST",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.batch.command.CommandStrategyProvider",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/batch/command/CommandStrategyProvider.java",
    "mechanism": "REST",
    "name": "approveLoan",
    "description": "Maps POST requests with command=approve to the approveLoanCommandStrategy.",
    "path": "v1/loans/{id}?command=approve",
    "method": "POST",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.batch.command.CommandStrategyProvider",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/batch/command/CommandStrategyProvider.java",
    "mechanism": "REST",
    "name": "disburseLoan",
    "description": "Maps POST requests with command=disburse to the disburseLoanCommandStrategy.",
    "path": "v1/loans/{id}?command=disburse",
    "method": "POST",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.batch.command.CommandStrategyProvider",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/batch/command/CommandStrategyProvider.java",
    "mechanism": "REST",
    "name": "activateClient",
    "description": "Maps POST requests with command=activate to the activateClientCommandStrategy.",
    "path": "v1/clients/{id}?command=activate",
    "method": "POST",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.batch.command.CommandStrategyProvider",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/batch/command/CommandStrategyProvider.java",
    "mechanism": "REST",
    "name": "createDatatableEntry",
    "description": "Maps POST requests for datatables to the createDatatableEntryCommandStrategy.",
    "path": "v1/datatables/{table}/{appTableId}",
    "method": "POST",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.batch.command.internal",
    "filepath": "fineract-provider/src/test/java/org/apache/fineract/batch/command/internal/GetLoanTransactionByIdCommandStrategyTest.java",
    "mechanism": "REST",
    "name": "Get Loan Transaction",
    "description": "The code tests a strategy that wraps a RESTful resource call to retrieve loan transaction details.",
    "path": "loans/{loanId}/transactions/{transactionId}",
    "method": "GET",
    "direction": "CONSUMER",
    "requestBody": "None (GET request)",
    "responseBody": "JSON object containing loan transaction details (id, office, type, date, currency, amount, etc.)"
  },
  {
    "namespace": "org.apache.fineract.batch.command.internal",
    "filepath": "fineract-provider/src/test/java/org/apache/fineract/batch/command/internal/CollectChargesByLoanExternalIdCommandStrategyTest.java",
    "mechanism": "REST",
    "name": "retrieveAllLoanCharges",
    "description": "The test simulates a REST call to retrieve loan charges via the LoanChargesApiResource.",
    "path": "loans/external-id/{loanExternalId}/charges",
    "method": "GET",
    "direction": "CONSUMER",
    "requestBody": "{}",
    "responseBody": "JSON string representing loan charges"
  },
  {
    "namespace": "org.apache.fineract.batch.command.internal",
    "filepath": "fineract-provider/src/test/java/org/apache/fineract/batch/command/internal/CreateChargeByLoanExternalIdCommandStrategyTest.java",
    "mechanism": "REST",
    "name": "Create Loan Charge via External ID",
    "description": "The test simulates a REST API call to create a charge for a loan identified by an external ID.",
    "path": "loans/external-id/{loanExternalId}/charges",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "{}",
    "responseBody": "myResponseBody"
  },
  {
    "namespace": "org.apache.fineract.batch.command.internal",
    "filepath": "fineract-provider/src/test/java/org/apache/fineract/batch/command/internal/CreateTransactionByLoanExternalIdCommandStrategyTest.java",
    "mechanism": "REST",
    "name": "Loan Transactions API",
    "description": "The test simulates a RESTful batch request to create a loan transaction via an external ID.",
    "path": "loans/external-id/{loanExternalId}/transactions",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON (empty object in test)",
    "responseBody": "String (mocked response body)"
  },
  {
    "namespace": "org.apache.fineract.batch.command.internal",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/batch/command/internal/AdjustChargeByChargeExternalIdCommandStrategy.java",
    "mechanism": "REST",
    "name": "Loan Charge Adjustment (Batch)",
    "description": "Handles batch requests for adjusting loan charges via a REST-like URL pattern.",
    "path": "loans/external-id/{loanExternalId}/charges/external-id/{chargeExternalId}?command={command}",
    "method": "POST",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.batch.command.internal",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/batch/command/internal/AdjustLoanTransactionByExternalIdCommandStrategy.java",
    "mechanism": "REST",
    "name": "Adjust Loan Transaction (Batch)",
    "description": "Handles the batch processing logic for adjusting a loan transaction identified by an external ID.",
    "path": "loans/external-id/{loanExternalId}/transactions/external-id/{transactionExternalId}",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON body containing transaction adjustment details",
    "responseBody": "JSON response from the adjustment operation"
  },
  {
    "namespace": "org.apache.fineract.batch.command.internal",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/batch/command/internal/ModifyLoanApplicationByExternalIdCommandStrategy.java",
    "mechanism": "REST",
    "name": "modifyLoanApplication",
    "description": "Delegates a batch command to the internal LoansApiResource to modify a loan application.",
    "path": "loans/external-id/{externalId}",
    "method": "PUT",
    "direction": "PRODUCER",
    "requestBody": "JSON body containing loan modification details",
    "responseBody": "JSON response from the LoansApiResource"
  },
  {
    "namespace": "org.apache.fineract.batch.command.internal",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/batch/command/internal/AdjustLoanTransactionCommandStrategy.java",
    "mechanism": "REST",
    "name": "adjustLoanTransaction",
    "description": "Delegates to the internal LoanTransactionsApiResource to adjust a transaction, effectively acting as a wrapper for the REST API logic within a batch context.",
    "path": "/loans/{loanId}/transactions/{transactionId}",
    "method": "POST",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.batch.command.internal",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/batch/command/internal/CollectChargesCommandStrategy.java",
    "mechanism": "REST",
    "name": "retrieveAllLoanCharges",
    "description": "Delegates to an internal REST API resource to retrieve charges for a loan.",
    "path": "/loans/{loanId}/charges",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.batch.exception.ErrorHandler",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/batch/exception/ErrorHandler.java",
    "mechanism": "REST",
    "name": "JAX-RS Exception Mapping",
    "description": "Uses JAX-RS standard interfaces to map Java exceptions to HTTP responses.",
    "path": "n/a",
    "method": "n/a",
    "direction": "OTHER",
    "requestBody": "n/a",
    "responseBody": "JSON ErrorInfo",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.client.services",
    "filepath": "fineract-client/src/main/java/org/apache/fineract/client/services/DocumentsApiFixed.java",
    "mechanism": "REST",
    "name": "createDocument",
    "description": "Uploads a document via Multipart POST",
    "path": "v1/{entityType}/{entityId}/documents",
    "method": "POST",
    "requestBody": "Multipart (File, Name, Description)",
    "responseBody": "PostEntityTypeEntityIdDocumentsResponse"
  },
  {
    "namespace": "org.apache.fineract.client.services",
    "filepath": "fineract-client/src/main/java/org/apache/fineract/client/services/DocumentsApiFixed.java",
    "mechanism": "REST",
    "name": "deleteDocument",
    "description": "Deletes a document",
    "path": "v1/{entityType}/{entityId}/documents/{documentId}",
    "method": "DELETE",
    "responseBody": "DeleteEntityTypeEntityIdDocumentsResponse"
  },
  {
    "namespace": "org.apache.fineract.client.services",
    "filepath": "fineract-client/src/main/java/org/apache/fineract/client/services/DocumentsApiFixed.java",
    "mechanism": "REST",
    "name": "downloadFile",
    "description": "Downloads a document attachment",
    "path": "v1/{entityType}/{entityId}/documents/{documentId}/attachment",
    "method": "GET",
    "responseBody": "Binary File (ResponseBody)"
  },
  {
    "namespace": "org.apache.fineract.client.services",
    "filepath": "fineract-client/src/main/java/org/apache/fineract/client/services/DocumentsApiFixed.java",
    "mechanism": "REST",
    "name": "getDocument",
    "description": "Retrieves document metadata",
    "path": "v1/{entityType}/{entityId}/documents/{documentId}",
    "method": "GET",
    "responseBody": "GetEntityTypeEntityIdDocumentsResponse"
  },
  {
    "namespace": "org.apache.fineract.client.services",
    "filepath": "fineract-client/src/main/java/org/apache/fineract/client/services/DocumentsApiFixed.java",
    "mechanism": "REST",
    "name": "retrieveAllDocuments",
    "description": "Lists all documents for an entity",
    "path": "v1/{entityType}/{entityId}/documents",
    "method": "GET",
    "responseBody": "List<GetEntityTypeEntityIdDocumentsResponse>"
  },
  {
    "namespace": "org.apache.fineract.client.services",
    "filepath": "fineract-client/src/main/java/org/apache/fineract/client/services/DocumentsApiFixed.java",
    "mechanism": "REST",
    "name": "updateDocument",
    "description": "Updates a document via Multipart PUT",
    "path": "v1/{entityType}/{entityId}/documents/{documentId}",
    "method": "PUT",
    "requestBody": "Multipart (File, Name, Description)",
    "responseBody": "PutEntityTypeEntityIdDocumentsResponse"
  },
  {
    "namespace": "org.apache.fineract.client.services",
    "filepath": "fineract-client/src/main/java/org/apache/fineract/client/services/RunReportsApi.java",
    "mechanism": "REST",
    "name": "Run Reports Endpoint",
    "description": "Client-side definition for consuming the Fineract Run Reports REST API.",
    "path": "v1/runreports/{reportName}",
    "method": "GET",
    "direction": "CONSUMER",
    "requestBody": "None (GET request)",
    "responseBody": "JSON (RunReportsResponse) or Binary Stream (ResponseBody)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.client.services.ImagesApi",
    "filepath": "fineract-client/src/main/java/org/apache/fineract/client/services/ImagesApi.java",
    "mechanism": "REST",
    "name": "Create Image",
    "description": "Uploads a new image for an entity via Retrofit client.",
    "path": "v1/{entityType}/{entityId}/images",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "Multipart file"
  },
  {
    "namespace": "org.apache.fineract.client.services.ImagesApi",
    "filepath": "fineract-client/src/main/java/org/apache/fineract/client/services/ImagesApi.java",
    "mechanism": "REST",
    "name": "Get Image",
    "description": "Retrieves an image for an entity via Retrofit client.",
    "path": "v1/{entityType}/{entityId}/images",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "Binary image data (ResponseBody)"
  },
  {
    "namespace": "org.apache.fineract.client.services.ImagesApi",
    "filepath": "fineract-client/src/main/java/org/apache/fineract/client/services/ImagesApi.java",
    "mechanism": "REST",
    "name": "Update Image",
    "description": "Updates an existing image for an entity via Retrofit client.",
    "path": "v1/{entityType}/{entityId}/images",
    "method": "PUT",
    "direction": "PRODUCER",
    "requestBody": "Multipart file"
  },
  {
    "namespace": "org.apache.fineract.client.services.ImagesApi",
    "filepath": "fineract-client/src/main/java/org/apache/fineract/client/services/ImagesApi.java",
    "mechanism": "REST",
    "name": "Delete Image",
    "description": "Deletes an image for an entity via Retrofit client.",
    "path": "v1/{entityType}/{entityId}/images",
    "method": "DELETE",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.client.test.FineractClientDemo",
    "filepath": "fineract-client/src/test/java/org/apache/fineract/client/test/FineractClientDemo.java",
    "mechanism": "REST",
    "name": "Fineract API Client",
    "description": "Consumes the Fineract REST API to retrieve staff data using the generated FineractClient.",
    "path": "/fineract-provider/api/v1/",
    "method": "GET",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "connectionInfo": "https://demo.fineract.dev/fineract-provider/api/v1/"
  },
  {
    "namespace": "org.apache.fineract.client.test.FineractClientTechnicalTest",
    "filepath": "fineract-client/src/test/java/org/apache/fineract/client/test/FineractClientTechnicalTest.java",
    "mechanism": "REST",
    "name": "FineractClient",
    "description": "The code configures a REST client SDK for the Fineract platform.",
    "path": "http://test/",
    "method": "UNKNOWN",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "http://test/"
  },
  {
    "namespace": "org.apache.fineract.client.util",
    "filepath": "fineract-client/src/main/java/org/apache/fineract/client/util/Parts.java",
    "mechanism": "REST",
    "name": "Multipart Body Factory",
    "description": "Helper utility to create OkHttp MultipartBody.Part objects for file uploads in REST clients.",
    "direction": "PRODUCER",
    "requestBody": "Multipart/form-data",
    "protocol": "HTTP/Multipart"
  },
  {
    "namespace": "org.apache.fineract.client.util",
    "filepath": "fineract-client/src/main/java/org/apache/fineract/client/util/Calls.java",
    "mechanism": "REST",
    "name": "Retrofit Client Execution",
    "description": "Executes HTTP REST calls using the Retrofit library.",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Defined by the Retrofit Call object passed to the methods"
  },
  {
    "namespace": "org.apache.fineract.client.util.CallFailedRuntimeException",
    "filepath": "fineract-client/src/main/java/org/apache/fineract/client/util/CallFailedRuntimeException.java",
    "mechanism": "REST",
    "name": "Retrofit Client Error Handling",
    "description": "This class acts as a wrapper for errors occurring during HTTP interactions performed by the Retrofit client library.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.client.util.FineractClient",
    "filepath": "fineract-client/src/main/java/org/apache/fineract/client/util/FineractClient.java",
    "mechanism": "REST",
    "name": "Fineract Platform API",
    "description": "Consumes the Fineract Platform REST APIs via Retrofit interfaces.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth, API Key (Tenant ID)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configurable via Builder.baseURL()"
  },
  {
    "namespace": "org.apache.fineract.cob.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/cob/api/ConfigureBusinessStepApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAllConfiguredBusinessJobs",
    "description": "Endpoint to retrieve all configured business job names.",
    "path": "/v1/jobs/names",
    "method": "GET",
    "responseBody": "JSON array of job names (ConfiguredJobNamesDTO)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.cob.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/cob/api/ConfigureBusinessStepApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAllConfiguredBusinessStep",
    "description": "Endpoint to retrieve business steps for a specific job.",
    "path": "/v1/jobs/{jobName}/steps",
    "method": "GET",
    "responseBody": "JSON object containing job name and business steps (JobBusinessStepConfigData)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.cob.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/cob/api/ConfigureBusinessStepApiResource.java",
    "mechanism": "REST",
    "name": "updateJobBusinessStepConfig",
    "description": "Endpoint to update business step configuration for a job.",
    "path": "/v1/jobs/{jobName}/steps",
    "method": "PUT",
    "requestBody": "JSON object defining the new business step configuration",
    "responseBody": "204 No Content",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.cob.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/cob/api/ConfigureBusinessStepApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAllAvailableBusinessStep",
    "description": "Endpoint to retrieve available business steps for a specific job.",
    "path": "/v1/jobs/{jobName}/available-steps",
    "method": "GET",
    "responseBody": "JSON object containing job name and available business steps (JobBusinessStepDetail)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.cob.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/cob/api/LoanCOBCatchUpApiResource.java",
    "mechanism": "REST",
    "name": "getOldestCOBProcessedLoan",
    "description": "Retrieves the oldest COB processed loan",
    "path": "/v1/loans/oldest-cob-closed",
    "method": "GET",
    "requestBody": "none",
    "responseBody": "OldestCOBProcessedLoanDTO (JSON)",
    "authentication": "unknown",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.cob.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/cob/api/LoanCOBCatchUpApiResource.java",
    "mechanism": "REST",
    "name": "executeLoanCOBCatchUp",
    "description": "Executes Loan COB Catch Up",
    "path": "/v1/loans/catch-up",
    "method": "POST",
    "requestBody": "none",
    "responseBody": "Empty (Status 200, 202, or 400)",
    "authentication": "unknown",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.cob.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/cob/api/LoanCOBCatchUpApiResource.java",
    "mechanism": "REST",
    "name": "isCatchUpRunning",
    "description": "Retrieves whether Loan COB catch up is running",
    "path": "/v1/loans/is-catch-up-running",
    "method": "GET",
    "requestBody": "none",
    "responseBody": "IsCatchUpRunningDTO (JSON)",
    "authentication": "unknown",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.cob.api.InternalCOBApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/cob/api/InternalCOBApiResource.java",
    "mechanism": "REST",
    "name": "getCobPartitions",
    "description": "Endpoint to retrieve loan COB partitions for testing purposes.",
    "path": "/v1/internal/cob/partitions/{partitionSize}",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON list of LoanCOBPartition objects"
  },
  {
    "namespace": "org.apache.fineract.cob.api.InternalLoanAccountLockApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/cob/api/InternalLoanAccountLockApiResource.java",
    "mechanism": "REST",
    "name": "placeLockOnLoanAccount",
    "description": "Internal API endpoint to place a lock on a loan account for testing.",
    "path": "/v1/internal/loans/{loanId}/place-lock/{lockOwner}",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "String (optional error message)",
    "responseBody": "Empty (HTTP 202 Accepted)"
  },
  {
    "namespace": "org.apache.fineract.cob.api.LoanAccountLockApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/cob/api/LoanAccountLockApiResource.java",
    "mechanism": "REST",
    "name": "retrieveLockedAccounts",
    "description": "Endpoint to list locked loan accounts",
    "path": "/v1/loans/locked",
    "method": "GET",
    "responseBody": "JSON representation of LoanAccountLockResponseDTO containing a list of locked loan accounts",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.cob.listener.FineractCOBAfterJobListener",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/cob/listener/FineractCOBAfterJobListener.java",
    "mechanism": "OTHER",
    "name": "Spring Batch Lifecycle",
    "description": "Integrates with the Spring Batch framework to listen for job completion events via the JobExecution object.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.cob.loan",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanCOBWorkerConfiguration.java",
    "mechanism": "OTHER",
    "name": "inboundRequests",
    "description": "Spring Integration input channel used by the RemotePartitioningWorkerStepBuilderFactory to receive partition requests from the manager step.",
    "direction": "CONSUMER",
    "protocol": "Spring Integration",
    "connectionInfo": "inboundRequests bean"
  },
  {
    "namespace": "org.apache.fineract.cob.loan",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/cob/loan/LoanCOBManagerConfiguration.java",
    "mechanism": "OTHER",
    "name": "outboundRequests",
    "description": "Spring Integration DirectChannel used for Spring Batch Remote Partitioning. The manager step sends partition execution requests to workers via this channel.",
    "queueOrTopicName": "outboundRequests",
    "messageType": "StepExecutionRequest",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.cob.service",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/cob/service/InlineLoanCOBExecutorServiceImpl.java",
    "mechanism": "OTHER",
    "name": "Spring Batch Job Execution",
    "description": "Launches Spring Batch jobs programmatically using JobLauncher.",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.commands.api.AuditsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/commands/api/AuditsApiResource.java",
    "mechanism": "REST",
    "name": "List Audits",
    "description": "Retrieve a list of audit entries with optional filtering and pagination.",
    "path": "/v1/audits",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON array of AuditData",
    "authentication": "PlatformSecurityContext (OAuth/Basic implied)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.commands.api.AuditsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/commands/api/AuditsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve an Audit Entry",
    "description": "Retrieve a specific audit entry by ID.",
    "path": "/v1/audits/{auditId}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON object of AuditData",
    "authentication": "PlatformSecurityContext (OAuth/Basic implied)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.commands.api.AuditsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/commands/api/AuditsApiResource.java",
    "mechanism": "REST",
    "name": "Audit Search Template",
    "description": "Retrieve metadata/template for building audit search queries.",
    "path": "/v1/audits/searchtemplate",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON object of AuditSearchData",
    "authentication": "PlatformSecurityContext (OAuth/Basic implied)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.commands.api.MakercheckersApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/commands/api/MakercheckersApiResource.java",
    "mechanism": "REST",
    "name": "List Maker Checker Entries",
    "description": "Get a list of entries that can be checked by the requestor matching supplied criteria.",
    "path": "/v1/makercheckers",
    "method": "GET",
    "responseBody": "JSON array of AuditData"
  },
  {
    "namespace": "org.apache.fineract.commands.api.MakercheckersApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/commands/api/MakercheckersApiResource.java",
    "mechanism": "REST",
    "name": "Maker Checker Search Template",
    "description": "Retrieve template data for building UI filters for maker-checker inbox.",
    "path": "/v1/makercheckers/searchtemplate",
    "method": "GET",
    "responseBody": "JSON object with lists of appUsers, actionNames, entityNames"
  },
  {
    "namespace": "org.apache.fineract.commands.api.MakercheckersApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/commands/api/MakercheckersApiResource.java",
    "mechanism": "REST",
    "name": "Approve/Reject Entry",
    "description": "Approve or reject a maker-checker entry based on the command parameter.",
    "path": "/v1/makercheckers/{auditId}",
    "method": "POST",
    "requestBody": "JSON (consumed but not explicitly mapped in method signature)",
    "responseBody": "JSON result of the command"
  },
  {
    "namespace": "org.apache.fineract.commands.api.MakercheckersApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/commands/api/MakercheckersApiResource.java",
    "mechanism": "REST",
    "name": "Delete Entry",
    "description": "Delete a maker-checker entry.",
    "path": "/v1/makercheckers/{auditId}",
    "method": "DELETE",
    "responseBody": "JSON result of the command"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.accountnumberformat.api.AccountNumberFormatsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/api/AccountNumberFormatsApiResource.java",
    "mechanism": "REST",
    "name": "retrieveTemplate",
    "description": "Retrieve Account number format Template",
    "path": "/accountnumberformats/template",
    "method": "GET",
    "responseBody": "JSON (AccountNumberFormatData)",
    "authentication": "PlatformSecurityContext",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.accountnumberformat.api.AccountNumberFormatsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/api/AccountNumberFormatsApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAll",
    "description": "List Account number formats",
    "path": "/accountnumberformats",
    "method": "GET",
    "responseBody": "JSON Array (AccountNumberFormatData)",
    "authentication": "PlatformSecurityContext",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.accountnumberformat.api.AccountNumberFormatsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/api/AccountNumberFormatsApiResource.java",
    "mechanism": "REST",
    "name": "retrieveOne",
    "description": "Retrieve an Account number format",
    "path": "/accountnumberformats/{accountNumberFormatId}",
    "method": "GET",
    "responseBody": "JSON (AccountNumberFormatData)",
    "authentication": "PlatformSecurityContext",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.accountnumberformat.api.AccountNumberFormatsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/api/AccountNumberFormatsApiResource.java",
    "mechanism": "REST",
    "name": "create",
    "description": "Create an Account number format",
    "path": "/accountnumberformats",
    "method": "POST",
    "requestBody": "JSON (PostAccountNumberFormatsRequest)",
    "responseBody": "JSON (PostAccountNumberFormatsResponse)",
    "authentication": "PlatformSecurityContext",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.accountnumberformat.api.AccountNumberFormatsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/api/AccountNumberFormatsApiResource.java",
    "mechanism": "REST",
    "name": "update",
    "description": "Update an Account number format",
    "path": "/accountnumberformats/{accountNumberFormatId}",
    "method": "PUT",
    "requestBody": "JSON (PutAccountNumberFormatsRequest)",
    "responseBody": "JSON (PutAccountNumberFormatsResponse)",
    "authentication": "PlatformSecurityContext",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.accountnumberformat.api.AccountNumberFormatsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/api/AccountNumberFormatsApiResource.java",
    "mechanism": "REST",
    "name": "delete",
    "description": "Delete an Account number format",
    "path": "/accountnumberformats/{accountNumberFormatId}",
    "method": "DELETE",
    "responseBody": "JSON (DeleteAccountNumberFormatsResponse)",
    "authentication": "PlatformSecurityContext",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.accountnumberformat.api.AccountNumberFormatsApiResourceSwagger",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/api/AccountNumberFormatsApiResourceSwagger.java",
    "mechanism": "REST",
    "name": "Swagger Schema Definitions",
    "description": "Defines the request and response schemas (DTOs) for the Account Number Formats REST API documentation.",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.accountnumberformat.service.AccountNumberFormatConstants",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/service/AccountNumberFormatConstants.java",
    "mechanism": "REST",
    "name": "AccountNumberFormats Resource",
    "description": "Defines the relative URL path for the account number formats API endpoint.",
    "path": "/v1/accountnumberformats",
    "direction": "OTHER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.bulkimport.api.BulkImportApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/api/BulkImportApiResource.java",
    "mechanism": "REST",
    "name": "retrieveImportDocuments",
    "description": "Endpoint to retrieve import documents based on entity type.",
    "path": "/v1/imports",
    "method": "GET",
    "requestBody": "None (Query Parameters)",
    "responseBody": "JSON Array of ImportData",
    "authentication": "PlatformSecurityContext (User Permissions)"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.bulkimport.api.BulkImportApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/api/BulkImportApiResource.java",
    "mechanism": "REST",
    "name": "retriveOutputTemplateLocation",
    "description": "Endpoint to get the location of an output template.",
    "path": "/v1/imports/getOutputTemplateLocation",
    "method": "GET",
    "requestBody": "None (Query Parameters)",
    "responseBody": "JSON String (File Location)",
    "authentication": "PlatformSecurityContext (User Permissions)"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.bulkimport.api.BulkImportApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/api/BulkImportApiResource.java",
    "mechanism": "REST",
    "name": "getOutputTemplate",
    "description": "Endpoint to download the output template file.",
    "path": "/v1/imports/downloadOutputTemplate",
    "method": "GET",
    "requestBody": "None (Query Parameters)",
    "responseBody": "application/vnd.ms-excel (Binary File)",
    "authentication": "Implicit (Service Layer)"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.bulkimport.populator.FixedDepositProductSheetPopulator",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/populator/FixedDepositProductSheetPopulator.java",
    "mechanism": "OTHER",
    "name": "Excel Workbook Generation",
    "description": "Generates an Excel sheet using Apache POI for reporting or bulk import template purposes.",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.bulkimport.service",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/bulkimport/service/BulkImportWorkbookService.java",
    "mechanism": "REST",
    "name": "JAX-RS Response / Jersey Multipart",
    "description": "The service interface explicitly depends on JAX-RS 'Response' and Jersey's 'FormDataContentDisposition'. This indicates that the service is tightly coupled to the REST layer, handling HTTP response generation and multipart file upload details directly within the service contract.",
    "path": "n/a",
    "method": "n/a",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.bulkimport.service.BulkImportEventListener",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/service/BulkImportEventListener.java",
    "mechanism": "OTHER",
    "name": "BulkImportEvent Listener",
    "description": "Listens for internal Spring Application Events to trigger bulk import processing asynchronously.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.bulkimport.service.BulkImportWorkbookPopulatorService",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/bulkimport/service/BulkImportWorkbookPopulatorService.java",
    "mechanism": "REST",
    "name": "getTemplate",
    "description": "The method returns a JAX-RS Response object, indicating it is tightly coupled to the REST API layer for returning HTTP responses (likely file downloads).",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.bulkimport.service.BulkImportWorkbookPopulatorServiceImpl",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/service/BulkImportWorkbookPopulatorServiceImpl.java",
    "mechanism": "REST",
    "name": "Template Download Response",
    "description": "Constructs and returns a JAX-RS Response object containing a generated Excel file, acting as the response producer for a REST API endpoint.",
    "path": "n/a",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "application/vnd.ms-excel (Binary Excel File)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.businessdate.api.BusinessDateApiResource",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/businessdate/api/BusinessDateApiResource.java",
    "mechanism": "REST",
    "name": "List all business dates",
    "description": "Endpoint to retrieve all configured business dates.",
    "path": "/v1/businessdate",
    "method": "GET",
    "responseBody": "List<BusinessDateData> (JSON)",
    "authentication": "PlatformSecurityContext (User Permissions)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.businessdate.api.BusinessDateApiResource",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/businessdate/api/BusinessDateApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve a specific Business date",
    "description": "Endpoint to retrieve a specific business date by its type.",
    "path": "/v1/businessdate/{type}",
    "method": "GET",
    "responseBody": "BusinessDateData (JSON)",
    "authentication": "PlatformSecurityContext (User Permissions)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.businessdate.api.BusinessDateApiResource",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/businessdate/api/BusinessDateApiResource.java",
    "mechanism": "REST",
    "name": "Update Business Date",
    "description": "Endpoint to update business date settings.",
    "path": "/v1/businessdate",
    "method": "POST",
    "requestBody": "BusinessDateRequest (JSON)",
    "responseBody": "CommandProcessingResult (JSON)",
    "authentication": "PlatformSecurityContext (User Permissions)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.cache.api",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/cache/api/CacheApiResourceSwagger.java",
    "mechanism": "REST",
    "name": "Cache API Schemas",
    "description": "Defines the request and response schemas (DTOs) for the Cache Management REST API documentation.",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.cache.api.CacheApiResource",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/cache/api/CacheApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Cache Types",
    "description": "Endpoint to retrieve the list of available cache configurations.",
    "path": "/v1/caches",
    "method": "GET",
    "responseBody": "JSON array of CacheData",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.cache.api.CacheApiResource",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/cache/api/CacheApiResource.java",
    "mechanism": "REST",
    "name": "Switch Cache",
    "description": "Endpoint to switch the active cache implementation.",
    "path": "/v1/caches",
    "method": "PUT",
    "requestBody": "JSON object defining the desired cache type",
    "responseBody": "JSON object with command processing result",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.email.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/api/EmailApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAllEmails",
    "description": "Endpoint to retrieve all email messages.",
    "path": "/v1/email",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON array of EmailData"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.email.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/api/EmailApiResource.java",
    "mechanism": "REST",
    "name": "retrievePendingEmail",
    "description": "Endpoint to retrieve pending email messages.",
    "path": "/v1/email/pendingEmail",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON array of EmailData"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.email.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/api/EmailApiResource.java",
    "mechanism": "REST",
    "name": "retrieveSentEmail",
    "description": "Endpoint to retrieve sent email messages.",
    "path": "/v1/email/sentEmail",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON array of EmailData"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.email.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/api/EmailApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAllEmailByStatus",
    "description": "Endpoint to retrieve email messages by status and date range.",
    "path": "/v1/email/messageByStatus",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON Page of EmailData"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.email.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/api/EmailApiResource.java",
    "mechanism": "REST",
    "name": "retrieveFailedEmail",
    "description": "Endpoint to retrieve failed email messages.",
    "path": "/v1/email/failedEmail",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON array of EmailData"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.email.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/api/EmailApiResource.java",
    "mechanism": "REST",
    "name": "create",
    "description": "Endpoint to create a new email.",
    "path": "/v1/email",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON object defining email",
    "responseBody": "JSON CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.email.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/api/EmailApiResource.java",
    "mechanism": "REST",
    "name": "retrieveOne",
    "description": "Endpoint to retrieve a single email by ID.",
    "path": "/v1/email/{resourceId}",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON EmailData"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.email.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/api/EmailApiResource.java",
    "mechanism": "REST",
    "name": "update",
    "description": "Endpoint to update an existing email.",
    "path": "/v1/email/{resourceId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON object with updates",
    "responseBody": "JSON CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.email.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/api/EmailApiResource.java",
    "mechanism": "REST",
    "name": "delete",
    "description": "Endpoint to delete an email.",
    "path": "/v1/email/{resourceId}",
    "method": "DELETE",
    "direction": "CONSUMER",
    "responseBody": "JSON CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.email.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/api/EmailConfigurationApiResource.java",
    "mechanism": "REST",
    "name": "Email Configuration API",
    "description": "API endpoints for managing email configurations.",
    "path": "/v1/email/configuration",
    "method": "GET, PUT",
    "requestBody": "JSON (for PUT)",
    "responseBody": "JSON",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.email.api.EmailCampaignApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/api/EmailCampaignApiResource.java",
    "mechanism": "REST",
    "name": "Email Campaign API",
    "description": "RESTful endpoints for managing email campaigns.",
    "path": "/v1/email/campaign",
    "method": "GET, POST, PUT, DELETE",
    "direction": "BIDIRECTIONAL",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.email.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/handler/ActivateEmailCampaignCommandHandler.java",
    "mechanism": "OTHER",
    "name": "EMAIL_CAMPAIGN ACTIVATE Command Handler",
    "description": "Registers as a handler for the ACTIVATE action on EMAIL_CAMPAIGN entities within the Fineract command framework.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.email.service",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/service/EmailMessageJobEmailServiceImpl.java",
    "mechanism": "OTHER",
    "name": "SMTP Email Server",
    "description": "Sends emails via SMTP protocol using JavaMailSenderImpl.",
    "direction": "PRODUCER",
    "protocol": "SMTP",
    "connectionInfo": "Host and Port derived from SMTPCredentialsData (e.g., smtp.gmail.com:465)"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.helper",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/helper/SmsConfigUtils.java",
    "mechanism": "REST",
    "name": "SMS Gateway Request Preparation",
    "description": "Prepares the URI and HttpEntity (headers and body) for calling an external SMS Gateway REST API.",
    "path": "{endPoint}/{apiEndPoint}",
    "method": "HTTP (Method determined by caller, likely POST)",
    "requestBody": "JSON String (apiQueueResourceDatas)",
    "responseBody": "n/a (Preparation only)",
    "authentication": "Custom Headers (Tenant App Key)",
    "protocol": "HTTP",
    "connectionInfo": "Host and Port from MessageGatewayConfigurationData"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.jobs.executeemail.ExecuteEmailTasklet",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/jobs/executeemail/ExecuteEmailTasklet.java",
    "mechanism": "OTHER",
    "name": "EmailMessageJobEmailService",
    "description": "Service used to send emails with optional attachments.",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.jobs.executeemail.ExecuteEmailTasklet",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/jobs/executeemail/ExecuteEmailTasklet.java",
    "mechanism": "OTHER",
    "name": "ReadReportingService",
    "description": "Service used to generate Pentaho reports as byte streams for email attachments.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.jobs.executereportmailingjobs.ExecuteReportMailingJobsTasklet",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/jobs/executereportmailingjobs/ExecuteReportMailingJobsTasklet.java",
    "mechanism": "OTHER",
    "name": "ReportMailingJobEmailService",
    "description": "Sends generated reports via email to recipients.",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.jobs.getdeliveryreportsfromsmsgateway",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/jobs/getdeliveryreportsfromsmsgateway/GetDeliveryReportsFromSmsGatewayTasklet.java",
    "mechanism": "REST",
    "name": "SMS Gateway Report Service",
    "description": "Calls an external SMS gateway to retrieve delivery reports for a batch of message IDs.",
    "path": "sms/report (dynamically resolved)",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON Array of Message IDs",
    "responseBody": "Collection<SmsMessageDeliveryReportData>",
    "protocol": "HTTP/HTTPS",
    "connectionInfo": "Configured via SmsConfigUtils"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.jobs.sendmessagetosmsgateway.SendMessageToSmsGatewayTasklet",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/jobs/sendmessagetosmsgateway/SendMessageToSmsGatewayTasklet.java",
    "mechanism": "REST",
    "name": "SMS Gateway Intermediate Server",
    "description": "Sends a batch of SMS message data to an external or intermediate SMS gateway via HTTP POST.",
    "path": "Dynamic (determined by smsConfigUtils)",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON string of SmsMessageApiQueueResourceData collection",
    "responseBody": "String (checked for HttpStatus.ACCEPTED)",
    "protocol": "HTTP",
    "connectionInfo": "Configured via SmsConfigUtils"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.sms.api.SmsCampaignApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/api/SmsCampaignApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Template",
    "description": "Endpoint to retrieve the template for creating a new SMS campaign.",
    "path": "/v1/smscampaigns/template",
    "method": "GET",
    "responseBody": "SmsCampaignData JSON"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.sms.api.SmsCampaignApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/api/SmsCampaignApiResource.java",
    "mechanism": "REST",
    "name": "Create Campaign",
    "description": "Endpoint to create a new SMS campaign.",
    "path": "/v1/smscampaigns",
    "method": "POST",
    "requestBody": "SmsCampaignData JSON",
    "responseBody": "CommandProcessingResult JSON"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.sms.api.SmsCampaignApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/api/SmsCampaignApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Campaign",
    "description": "Endpoint to retrieve a specific SMS campaign by ID.",
    "path": "/v1/smscampaigns/{resourceId}",
    "method": "GET",
    "responseBody": "SmsCampaignData JSON"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.sms.api.SmsCampaignApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/api/SmsCampaignApiResource.java",
    "mechanism": "REST",
    "name": "List Campaigns",
    "description": "Endpoint to list SMS campaigns with pagination and search.",
    "path": "/v1/smscampaigns",
    "method": "GET",
    "responseBody": "Page<SmsCampaignData> JSON"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.sms.api.SmsCampaignApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/api/SmsCampaignApiResource.java",
    "mechanism": "REST",
    "name": "Update Campaign",
    "description": "Endpoint to update an existing SMS campaign.",
    "path": "/v1/smscampaigns/{campaignId}",
    "method": "PUT",
    "requestBody": "SmsCampaignData JSON",
    "responseBody": "CommandProcessingResult JSON"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.sms.api.SmsCampaignApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/api/SmsCampaignApiResource.java",
    "mechanism": "REST",
    "name": "Handle Commands",
    "description": "Endpoint to perform actions (activate, close, reactivate) on a campaign.",
    "path": "/v1/smscampaigns/{campaignId}",
    "method": "POST",
    "requestBody": "JSON payload (optional)",
    "responseBody": "CommandProcessingResult JSON"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.sms.api.SmsCampaignApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/api/SmsCampaignApiResource.java",
    "mechanism": "REST",
    "name": "Preview Message",
    "description": "Endpoint to preview the SMS message.",
    "path": "/v1/smscampaigns/preview",
    "method": "POST",
    "requestBody": "JSON parameters",
    "responseBody": "CampaignPreviewData JSON"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.sms.api.SmsCampaignApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/api/SmsCampaignApiResource.java",
    "mechanism": "REST",
    "name": "Delete Campaign",
    "description": "Endpoint to delete an SMS campaign.",
    "path": "/v1/smscampaigns/{campaignId}",
    "method": "DELETE",
    "responseBody": "CommandProcessingResult JSON"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.sms.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/handler/DeleteSmsCampaignCommandHandler.java",
    "mechanism": "REST",
    "name": "Delete SMS Campaign",
    "description": "This handler is mapped to a REST API endpoint via the Fineract Command infrastructure. It handles the DELETE action for the SMSCAMPAIGN entity.",
    "path": "/smscampaigns/{id}",
    "method": "DELETE",
    "direction": "CONSUMER",
    "requestBody": "n/a",
    "responseBody": "CommandProcessingResult (JSON)",
    "authentication": "OAuth/Basic (Platform default)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.sms.handler.ActivateSmsCampaignCommandHandler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/handler/ActivateSmsCampaignCommandHandler.java",
    "mechanism": "OTHER",
    "name": "Fineract Command Bus",
    "description": "Registers as a handler for the 'ACTIVATE' action on 'SMSCAMPAIGN' entities via the @CommandType annotation.",
    "direction": "CONSUMER",
    "protocol": "Internal Java Interface"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.sms.service.SmsCampaignDomainServiceImpl",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignDomainServiceImpl.java",
    "mechanism": "OTHER",
    "name": "BusinessEventNotifierService",
    "description": "Internal event bus subscription for business events.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.sms.service.SmsCampaignDropdownReadPlatformServiceImpl",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignDropdownReadPlatformServiceImpl.java",
    "mechanism": "REST",
    "name": "SMS Provider Service",
    "description": "Fetches configuration for SMS providers from an external service or bridge.",
    "path": "Dynamic (determined by smsConfigUtils.getMessageGateWayRequestURI)",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "Collection<SmsProviderData>",
    "protocol": "HTTP",
    "connectionInfo": "Configured via SmsConfigUtils"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.campaigns.sms.service.SmsCampaignWritePlatformServiceJpaImpl",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/service/SmsCampaignWritePlatformServiceJpaImpl.java",
    "mechanism": "OTHER",
    "name": "SmsMessageScheduledJobService",
    "description": "Internal service call to trigger scheduled message sending.",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.codes.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/api/CodesApiResource.java",
    "mechanism": "REST",
    "name": "Codes API",
    "description": "RESTful endpoints for managing Codes and Code Values.",
    "path": "/v1/codes",
    "method": "GET, POST, PUT, DELETE",
    "direction": "BIDIRECTIONAL",
    "requestBody": "JSON payload for creating or updating codes (CodeData)",
    "responseBody": "JSON representation of CodeData or CommandProcessingResult",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.codes.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/api/CodeValuesApiResourceSwagger.java",
    "mechanism": "REST",
    "name": "CodeValuesApi Schemas",
    "description": "Defines the Swagger/OpenAPI schemas for REST API request and response bodies related to Code Values management.",
    "direction": "OTHER",
    "requestBody": "PostCodeValuesDataRequest, PutCodeValuesDataRequest",
    "responseBody": "GetCodeValuesDataResponse, PostCodeValueDataResponse, PutCodeValueDataResponse, DeleteCodeValueDataResponse"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.codes.api.CodeValuesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/api/CodeValuesApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAllCodeValues",
    "description": "List Code Values for a given Code",
    "path": "/v1/codes/{codeId}/codevalues",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON array of CodeValueData"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.codes.api.CodeValuesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/api/CodeValuesApiResource.java",
    "mechanism": "REST",
    "name": "createCodeValue",
    "description": "Create a Code Value",
    "path": "/v1/codes/{codeId}/codevalues",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON object (PostCodeValuesDataRequest)",
    "responseBody": "JSON object (PostCodeValueDataResponse)"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.codes.api.CodeValuesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/api/CodeValuesApiResource.java",
    "mechanism": "REST",
    "name": "retrieveCodeValue",
    "description": "Retrieve a Code Value",
    "path": "/v1/codes/{codeId}/codevalues/{codeValueId}",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON object (CodeValueData)"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.codes.api.CodeValuesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/api/CodeValuesApiResource.java",
    "mechanism": "REST",
    "name": "updateCodeValue",
    "description": "Update a Code Value",
    "path": "/v1/codes/{codeId}/codevalues/{codeValueId}",
    "method": "PUT",
    "direction": "PRODUCER",
    "requestBody": "JSON object (PutCodeValuesDataRequest)",
    "responseBody": "JSON object (PutCodeValueDataResponse)"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.codes.api.CodeValuesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/codes/api/CodeValuesApiResource.java",
    "mechanism": "REST",
    "name": "deleteCodeValue",
    "description": "Delete a Code Value",
    "path": "/v1/codes/{codeId}/codevalues/{codeValueId}",
    "method": "DELETE",
    "direction": "PRODUCER",
    "responseBody": "JSON object (DeleteCodeValueDataResponse)"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.configuration.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/api/ExternalServicesConfigurationApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve External Services Configuration",
    "description": "Endpoint to retrieve configuration details for a specific external service (e.g., SMTP, S3).",
    "path": "/v1/externalservice/{servicename}",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON representation of ExternalServicesPropertiesData",
    "authentication": "PlatformSecurityContext (internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.configuration.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/api/ExternalServicesConfigurationApiResource.java",
    "mechanism": "REST",
    "name": "Update External Service",
    "description": "Endpoint to update configuration details for a specific external service.",
    "path": "/v1/externalservice/{servicename}",
    "method": "PUT",
    "requestBody": "JSON payload with configuration properties",
    "responseBody": "JSON representation of CommandProcessingResult",
    "authentication": "PlatformSecurityContext (internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.configuration.api.GlobalConfigurationApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/api/GlobalConfigurationApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Global Configuration",
    "description": "Endpoint to retrieve all global configurations or survey configurations.",
    "path": "/v1/configurations",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON list of GlobalConfigurationData",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.configuration.api.GlobalConfigurationApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/api/GlobalConfigurationApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve One Configuration",
    "description": "Endpoint to retrieve a specific configuration by ID.",
    "path": "/v1/configurations/{configId}",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON object of GlobalConfigurationPropertyData",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.configuration.api.GlobalConfigurationApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/api/GlobalConfigurationApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve One Configuration By Name",
    "description": "Endpoint to retrieve a specific configuration by Name.",
    "path": "/v1/configurations/name/{name}",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON object of GlobalConfigurationPropertyData",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.configuration.api.GlobalConfigurationApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/api/GlobalConfigurationApiResource.java",
    "mechanism": "REST",
    "name": "Update Configuration",
    "description": "Endpoint to update a specific configuration item.",
    "path": "/v1/configurations/{configId}",
    "method": "PUT",
    "requestBody": "JSON payload with update details",
    "responseBody": "JSON object of CommandProcessingResult",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.api",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/api/ApiParameterHelper.java",
    "mechanism": "REST",
    "name": "JAX-RS Parameter Parsing",
    "description": "This class is a utility for parsing JAX-RS query parameters, acting as a helper for REST API controllers.",
    "path": "n/a",
    "method": "n/a",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.config",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/config/ContentS3Config.java",
    "mechanism": "OTHER",
    "name": "AWS S3 Client",
    "description": "Configures the AWS SDK S3 Client for interacting with Amazon S3 storage.",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.config.FineractProperties",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/config/FineractProperties.java",
    "mechanism": "JMS-QUEUE",
    "name": "requestQueueName",
    "description": "JMS Queue for handling remote jobs.",
    "queueOrTopicName": "${fineract.remoteJobMessageHandler.jms.requestQueueName}",
    "direction": "CONSUMER",
    "connectionInfo": "Broker URL defined in fineract.remoteJobMessageHandler.jms.brokerUrl"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.config.FineractProperties",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/config/FineractProperties.java",
    "mechanism": "KAFKA-TOPIC",
    "name": "Remote Job Kafka Topic",
    "description": "Kafka topic for handling remote jobs.",
    "queueOrTopicName": "${fineract.remoteJobMessageHandler.kafka.topic.name}",
    "direction": "CONSUMER",
    "connectionInfo": "Bootstrap servers defined in fineract.remoteJobMessageHandler.kafka.bootstrapServers"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.config.FineractProperties",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/config/FineractProperties.java",
    "mechanism": "JMS-QUEUE",
    "name": "eventQueueName",
    "description": "JMS Queue for producing external events.",
    "queueOrTopicName": "${fineract.events.external.producer.jms.eventQueueName}",
    "direction": "PRODUCER",
    "connectionInfo": "Broker URL defined in fineract.events.external.producer.jms.brokerUrl"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.config.FineractProperties",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/config/FineractProperties.java",
    "mechanism": "JMS-TOPIC",
    "name": "eventTopicName",
    "description": "JMS Topic for producing external events.",
    "queueOrTopicName": "${fineract.events.external.producer.jms.eventTopicName}",
    "direction": "PRODUCER",
    "connectionInfo": "Broker URL defined in fineract.events.external.producer.jms.brokerUrl"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.config.FineractProperties",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/config/FineractProperties.java",
    "mechanism": "KAFKA-TOPIC",
    "name": "External Events Kafka Topic",
    "description": "Kafka topic for producing external events.",
    "queueOrTopicName": "${fineract.events.external.producer.kafka.topic.name}",
    "direction": "PRODUCER",
    "connectionInfo": "Bootstrap servers defined in fineract.events.external.producer.kafka.bootstrapServers"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.config.OAuth2SecurityConfig",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/config/OAuth2SecurityConfig.java",
    "mechanism": "REST",
    "name": "API Security Configuration",
    "description": "Configures security rules and filters for all REST API endpoints under /api/**. It defines public endpoints (e.g., /api/*/authentication) and protected endpoints requiring OAuth2 authentication.",
    "path": "/api/**",
    "method": "ALL",
    "authentication": "OAuth2 (JWT)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.config.SecurityConfig",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/config/SecurityConfig.java",
    "mechanism": "REST",
    "name": "Fineract API Security",
    "description": "Configures security rules, authentication, and authorization for the Fineract REST API endpoints.",
    "path": "/api/**",
    "method": "GET, POST, PUT, DELETE, OPTIONS",
    "direction": "BOTH",
    "authentication": "Basic Auth, Two-Factor",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.config.cache",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/config/cache/SpecifiedCacheSupportingCacheManager.java",
    "mechanism": "OTHER",
    "name": "JCache Integration",
    "description": "Integrates with a JSR-107 (JCache) provider via Spring's JCacheCacheManager to handle actual caching operations for supported cache names.",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.config.cache",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/config/cache/TransactionBoundCacheManager.java",
    "mechanism": "OTHER",
    "name": "Spring Cache Abstraction",
    "description": "Integrates with the Spring Caching abstraction to manage cache lifecycles.",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.data.UploadRequest",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/data/UploadRequest.java",
    "mechanism": "REST",
    "name": "Multipart Upload Request Binding",
    "description": "This class is used as a binding target for JAX-RS multipart/form-data requests. The @FormDataParam annotations map form fields to class properties.",
    "path": "n/a",
    "method": "n/a",
    "direction": "CONSUMER",
    "requestBody": "multipart/form-data"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.debug",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/debug/EchoHeadersApiResource.java",
    "mechanism": "REST",
    "name": "Echo Headers Endpoint",
    "description": "A debugging endpoint that returns the HTTP headers sent in the request.",
    "path": "/v1/echo",
    "method": "GET",
    "direction": "BIDIRECTIONAL",
    "responseBody": "text/plain string containing header keys and values"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exception",
    "filepath": "fineract-loan/src/main/java/org/apache/fineract/infrastructure/core/exception/MultiDisbursementDataRequiredExceptionMapper.java",
    "mechanism": "REST",
    "name": "MultiDisbursementDataRequiredExceptionMapper",
    "description": "JAX-RS ExceptionMapper that intercepts MultiDisbursementDataRequiredException and returns an HTTP 403 Forbidden response.",
    "responseBody": "ApiGlobalErrorResponse (JSON)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exception",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exception/HttpMessageNotReadableErrorController.java",
    "mechanism": "REST",
    "name": "HttpMessageNotReadableException Mapper",
    "description": "JAX-RS ExceptionMapper that intercepts JSON parsing errors in REST API requests and returns formatted error responses.",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exception",
    "filepath": "fineract-loan/src/main/java/org/apache/fineract/infrastructure/core/exception/LinkedAccountRequiredExceptionMapper.java",
    "mechanism": "REST",
    "name": "LinkedAccountRequiredExceptionMapper",
    "description": "JAX-RS ExceptionMapper that intercepts LinkedAccountRequiredException and returns an HTTP 403 response.",
    "responseBody": "ApiGlobalErrorResponse (JSON)"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exception",
    "filepath": "fineract-loan/src/main/java/org/apache/fineract/infrastructure/core/exception/LoanIdsHardLockedExceptionMapper.java",
    "mechanism": "REST",
    "name": "LoanIdsHardLockedExceptionMapper",
    "description": "JAX-RS Exception Mapper that intercepts LoanIdsHardLockedException and returns an HTTP 409 Conflict response.",
    "path": "n/a",
    "method": "n/a",
    "responseBody": "JSON object containing global error details and the locked loan ID"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/UnrecognizedQueryParamExceptionMapper.java",
    "mechanism": "REST",
    "name": "UnrecognizedQueryParamExceptionMapper",
    "description": "JAX-RS Exception Mapper that intercepts UnrecognizedQueryParamException and returns a standardized JSON error response.",
    "path": "n/a",
    "method": "n/a",
    "direction": "PRODUCER",
    "requestBody": "n/a",
    "responseBody": "ApiGlobalErrorResponse (JSON)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/IdempotentCommandExceptionMapper.java",
    "mechanism": "REST",
    "name": "IdempotentCommandExceptionMapper",
    "description": "JAX-RS ExceptionMapper that intercepts idempotent command exceptions and formats the HTTP response.",
    "path": "n/a",
    "method": "n/a",
    "direction": "PRODUCER",
    "responseBody": "JSON entity from the exception",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/UnsupportedParameterExceptionMapper.java",
    "mechanism": "REST",
    "name": "UnsupportedParameterExceptionMapper",
    "description": "JAX-RS ExceptionMapper that intercepts UnsupportedParameterException and returns HTTP 400 responses.",
    "direction": "PRODUCER",
    "responseBody": "ApiGlobalErrorResponse (JSON)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/UnsupportedCommandExceptionMapper.java",
    "mechanism": "REST",
    "name": "UnsupportedCommandExceptionMapper",
    "description": "JAX-RS ExceptionMapper that intercepts UnsupportedCommandException and returns a standardized HTTP 400 Bad Request JSON response.",
    "direction": "PRODUCER",
    "responseBody": "ApiGlobalErrorResponse (JSON)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/PlatformDomainRuleExceptionMapper.java",
    "mechanism": "REST",
    "name": "PlatformDomainRuleExceptionMapper",
    "description": "JAX-RS Exception Mapper that intercepts AbstractPlatformDomainRuleException and returns HTTP 403 responses.",
    "direction": "PRODUCER",
    "responseBody": "ApiGlobalErrorResponse (JSON)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/ConcurrencyFailureExceptionMapper.java",
    "mechanism": "REST",
    "name": "ConcurrencyFailureExceptionMapper",
    "description": "JAX-RS ExceptionMapper that intercepts ConcurrencyFailureException and returns HTTP 409 Conflict responses.",
    "path": "n/a",
    "method": "n/a",
    "direction": "PRODUCER",
    "responseBody": "ApiGlobalErrorResponse (JSON)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/PlatformResourceNotFoundExceptionMapper.java",
    "mechanism": "REST",
    "name": "PlatformResourceNotFoundExceptionMapper",
    "description": "JAX-RS Exception Mapper that intercepts AbstractPlatformResourceNotFoundException and converts it into an HTTP 404 REST response.",
    "path": "n/a",
    "method": "n/a",
    "direction": "PRODUCER",
    "responseBody": "ApiGlobalErrorResponse (JSON)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/PlatformApiDataValidationExceptionMapper.java",
    "mechanism": "REST",
    "name": "PlatformApiDataValidationExceptionMapper",
    "description": "JAX-RS ExceptionMapper that intercepts PlatformApiDataValidationException and returns an HTTP 400 Bad Request response.",
    "direction": "PRODUCER",
    "responseBody": "ApiGlobalErrorResponse (JSON)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/PlatformServiceUnavailableExceptionMapper.java",
    "mechanism": "REST",
    "name": "ExceptionMapper",
    "description": "JAX-RS ExceptionMapper implementation that intercepts AbstractPlatformServiceUnavailableException and returns HTTP 503 responses.",
    "direction": "PRODUCER",
    "responseBody": "JSON object (ApiGlobalErrorResponse) containing error code and user message",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/NoAuthorizationExceptionMapper.java",
    "mechanism": "REST",
    "name": "NoAuthorizationException Handler",
    "description": "Global exception handler for NoAuthorizationException that maps the error to an HTTP 403 Forbidden response.",
    "responseBody": "JSON (ApiGlobalErrorResponse)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/AccessDeniedExceptionMapper.java",
    "mechanism": "REST",
    "name": "AccessDeniedExceptionMapper",
    "description": "JAX-RS ExceptionMapper that intercepts AccessDeniedException and maps it to an HTTP 403 Forbidden response.",
    "direction": "PRODUCER",
    "responseBody": "JSON (ApiGlobalErrorResponse structure)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/InvalidJsonExceptionMapper.java",
    "mechanism": "REST",
    "name": "InvalidJsonExceptionMapper",
    "description": "JAX-RS Exception Mapper for handling invalid JSON requests",
    "direction": "BIDIRECTIONAL",
    "responseBody": "JSON (ApiParameterError structure)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/InvalidTenantIdentifierExceptionMapper.java",
    "mechanism": "REST",
    "name": "InvalidTenantIdentifierExceptionMapper",
    "description": "JAX-RS Exception Mapper for handling invalid tenant identifiers.",
    "path": "n/a",
    "method": "n/a",
    "direction": "PRODUCER",
    "responseBody": "JSON error response with HTTP 401 status",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/MalformedJsonExceptionMapper.java",
    "mechanism": "REST",
    "name": "MalformedJsonExceptionMapper",
    "description": "JAX-RS Exception Mapper for handling invalid JSON request bodies",
    "path": "Global (Exception Handler)",
    "method": "N/A",
    "direction": "BOTH",
    "responseBody": "ApiParameterError (JSON)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/BadCredentialsExceptionMapper.java",
    "mechanism": "REST",
    "name": "BadCredentialsException Handler",
    "description": "Global exception handler for REST API authentication failures.",
    "path": "n/a",
    "method": "n/a",
    "direction": "PRODUCER",
    "responseBody": "JSON error response (ApiGlobalErrorResponse)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "n/a"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/OAuth2ExceptionEntryPoint.java",
    "mechanism": "REST",
    "name": "Authentication Error Response",
    "description": "Returns a standard JSON error response when API authentication fails.",
    "path": "Global (intercepts all unauthenticated requests)",
    "method": "ANY",
    "direction": "PRODUCER",
    "responseBody": "JSON serialized ApiGlobalErrorResponse",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/UnAuthenticatedUserExceptionMapper.java",
    "mechanism": "REST",
    "name": "UnAuthenticatedUserExceptionMapper",
    "description": "JAX-RS ExceptionMapper that intercepts UnAuthenticatedUserException and returns an HTTP 401 response.",
    "path": "n/a",
    "method": "n/a",
    "responseBody": "JSON object representing the unauthenticated error state (via ApiGlobalErrorResponse)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/JsonPathExceptionMapper.java",
    "mechanism": "REST",
    "name": "JsonPathExceptionMapper",
    "description": "JAX-RS ExceptionMapper provider that intercepts JsonPathException and returns HTTP 400 responses.",
    "direction": "BIDIRECTIONAL"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/InvalidInstanceTypeMethodExceptionMapper.java",
    "mechanism": "REST",
    "name": "InvalidInstanceTypeMethodExceptionMapper",
    "description": "JAX-RS Exception Mapper that converts InvalidInstanceTypeMethodException to HTTP 405 responses.",
    "direction": "PRODUCER",
    "responseBody": "JSON structure defined by ApiGlobalErrorResponse",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper",
    "filepath": "fineract-loan/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/LoanAccountLockCannotBeOverruledExceptionMapper.java",
    "mechanism": "REST",
    "name": "LoanAccountLockCannotBeOverruledExceptionMapper",
    "description": "JAX-RS ExceptionMapper that intercepts LoanAccountLockCannotBeOverruledException and maps it to an HTTP 409 Conflict response.",
    "responseBody": "JSON structure of ApiParameterError",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/BusinessStepExceptionMapper.java",
    "mechanism": "REST",
    "name": "BusinessStepExceptionMapper",
    "description": "JAX-RS ExceptionMapper that intercepts BusinessStepException and returns a 400 Bad Request JSON response.",
    "direction": "PRODUCER",
    "responseBody": "JSON serialized ApiParameterError object",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/JobIsNotFoundOrNotEnabledExceptionMapper.java",
    "mechanism": "REST",
    "name": "JobIsNotFoundOrNotEnabledExceptionMapper",
    "description": "JAX-RS ExceptionMapper that intercepts JobIsNotFoundOrNotEnabledException and returns an HTTP 403 Forbidden response.",
    "direction": "PRODUCER",
    "responseBody": "JSON error object (ApiGlobalErrorResponse)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/DefaultExceptionMapper.java",
    "mechanism": "REST",
    "name": "Global RuntimeException Handler",
    "description": "JAX-RS ExceptionMapper that intercepts RuntimeExceptions and converts them to HTTP 500 responses.",
    "direction": "PRODUCER",
    "responseBody": "JSON object with an 'Exception' field containing the error message."
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper.BusinessStepNotBelongsToJobExceptionMapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/BusinessStepNotBelongsToJobExceptionMapper.java",
    "mechanism": "REST",
    "name": "BusinessStepNotBelongsToJobExceptionMapper",
    "description": "JAX-RS ExceptionMapper that intercepts BusinessStepNotBelongsToJobException and returns an HTTP 400 response.",
    "direction": "PRODUCER",
    "responseBody": "ApiParameterError (JSON)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper.JsonSyntaxExceptionMapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/JsonSyntaxExceptionMapper.java",
    "mechanism": "REST",
    "name": "JsonSyntaxExceptionMapper",
    "description": "JAX-RS Exception Mapper for handling malformed JSON requests globally.",
    "direction": "BIDIRECTIONAL",
    "responseBody": "ApiParameterError (JSON)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper.OptimisticLockExceptionMapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/OptimisticLockExceptionMapper.java",
    "mechanism": "REST",
    "name": "OptimisticLockExceptionMapper",
    "description": "JAX-RS Exception Mapper that intercepts OptimisticLockException and returns HTTP 409 responses.",
    "direction": "OTHER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper.PlatformDataIntegrityExceptionMapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/PlatformDataIntegrityExceptionMapper.java",
    "mechanism": "REST",
    "name": "PlatformDataIntegrityExceptionMapper",
    "description": "JAX-RS Exception Mapper that intercepts PlatformDataIntegrityException and returns a standardized JSON error response.",
    "direction": "PRODUCER",
    "responseBody": "ApiGlobalErrorResponse (JSON)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper.PlatformInternalServerExceptionMapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/PlatformInternalServerExceptionMapper.java",
    "mechanism": "REST",
    "name": "PlatformInternalServerExceptionMapper",
    "description": "JAX-RS ExceptionMapper that intercepts PlatformInternalServerException and converts it to an HTTP 500 REST response.",
    "path": "Global Exception Handler",
    "method": "n/a",
    "responseBody": "ApiGlobalErrorResponse (JSON)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.exceptionmapper.PlatformRequestBodyItemLimitValidationExceptionMapper",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/exceptionmapper/PlatformRequestBodyItemLimitValidationExceptionMapper.java",
    "mechanism": "REST",
    "name": "ExceptionMapper",
    "description": "JAX-RS Exception Mapper that intercepts PlatformRequestBodyItemLimitValidationException and returns an HTTP 400 response.",
    "path": "Global (Exception Handler)",
    "method": "n/a",
    "direction": "BOTH",
    "responseBody": "ApiGlobalErrorResponse (JSON)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.filters",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/filters/IdempotencyStoreFilter.java",
    "mechanism": "REST",
    "name": "Idempotency Filter",
    "description": "Intercepts HTTP requests to extract idempotency keys and cache response bodies for storage.",
    "path": "/*",
    "method": "ALL",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.filters",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/filters/CorrelationHeaderFilter.java",
    "mechanism": "REST",
    "name": "Correlation Header Interceptor",
    "description": "Intercepts all incoming HTTP requests to extract a correlation ID header for logging context.",
    "path": "/*",
    "method": "ALL",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via FineractProperties"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.filters",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/filters/BatchCallHandler.java",
    "mechanism": "REST",
    "name": "Batch Request Filter Chain",
    "description": "This class processes JAX-RS `UriInfo` objects as part of a batch request handling pipeline, indicating it operates within the context of a RESTful service architecture.",
    "path": "n/a",
    "method": "n/a",
    "direction": "OTHER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.filters",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/filters/RequestResponseFilter.java",
    "mechanism": "REST",
    "name": "HTTP Request/Response Logging",
    "description": "Intercepts all HTTP requests handled by the servlet container to log request and response metadata.",
    "path": "/*",
    "method": "ALL",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.filters.ResponseCorsFilter",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/core/filters/ResponseCorsFilter.java",
    "mechanism": "REST",
    "name": "CORS Filter",
    "description": "Intercepts HTTP requests to inject Cross-Origin Resource Sharing (CORS) headers into the response, enabling browser-based clients to access the API.",
    "method": "GET, POST, PUT, DELETE, OPTIONS",
    "direction": "BOTH",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.jersey",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/jersey/JerseyJacksonObjectArgumentHandler.java",
    "mechanism": "REST",
    "name": "JerseyJacksonObjectArgumentHandler",
    "description": "JAX-RS Provider for JSON serialization/deserialization",
    "path": "n/a",
    "method": "n/a",
    "direction": "BIDIRECTIONAL",
    "protocol": "HTTP/JSON"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.jersey.JerseyConfig",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/jersey/JerseyConfig.java",
    "mechanism": "REST",
    "name": "Base API Path",
    "description": "Configures the root path for all JAX-RS REST resources in the application.",
    "path": "/api",
    "method": "N/A",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.messaging.jms",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/messaging/jms/ActiveMQMessageFactory.java",
    "mechanism": "ACTIVEMQ-QUEUE",
    "name": "ActiveMQ Message Factory",
    "description": "Creates ActiveMQ-specific BytesMessage objects for messaging operations.",
    "messageType": "BytesMessage",
    "direction": "PRODUCER",
    "protocol": "ActiveMQ OpenWire/JMS"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.messaging.jms",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/messaging/jms/MessageFactory.java",
    "mechanism": "JMS-QUEUE",
    "name": "createByteMessage",
    "description": "Factory method for creating JMS BytesMessage objects, facilitating the production of JMS messages.",
    "messageType": "BytesMessage",
    "direction": "PRODUCER",
    "protocol": "JMS (Jakarta Messaging)"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.core.service",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/GmailBackedPlatformEmailService.java",
    "mechanism": "OTHER",
    "name": "SMTP Mail Server",
    "description": "Sends emails via SMTP protocol using Spring's JavaMailSenderImpl.",
    "direction": "PRODUCER",
    "protocol": "SMTP",
    "connectionInfo": "Host and port retrieved dynamically from ExternalServicesPropertiesReadPlatformService (e.g., smtp.gmail.com:587)"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.creditbureau.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/api/CreditBureauIntegrationApiResource.java",
    "mechanism": "REST",
    "name": "fetchCreditReport",
    "description": "Endpoint to fetch a credit report.",
    "path": "/v1/creditBureauIntegration/creditReport",
    "method": "POST",
    "requestBody": "JSON object (Map)",
    "responseBody": "JSON (CreditReportData)",
    "authentication": "PlatformSecurityContext (implied by context usage in other methods)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.creditbureau.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/api/CreditBureauIntegrationApiResource.java",
    "mechanism": "REST",
    "name": "addCreditReport",
    "description": "Endpoint to upload a credit report file.",
    "path": "/v1/creditBureauIntegration/addCreditReport",
    "method": "POST",
    "requestBody": "multipart/form-data (file)",
    "responseBody": "JSON string message",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.creditbureau.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/api/CreditBureauIntegrationApiResource.java",
    "mechanism": "REST",
    "name": "saveCreditReport",
    "description": "Endpoint to save a fetched credit report to the database.",
    "path": "/v1/creditBureauIntegration/saveCreditReport",
    "method": "POST",
    "requestBody": "JSON (Credit Report details)",
    "responseBody": "JSON (CommandProcessingResult)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.creditbureau.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/api/CreditBureauIntegrationApiResource.java",
    "mechanism": "REST",
    "name": "getSavedCreditReport",
    "description": "Endpoint to retrieve saved credit reports by credit bureau ID.",
    "path": "/v1/creditBureauIntegration/creditReport/{creditBureauId}",
    "method": "GET",
    "responseBody": "JSON Array (CreditReportData)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.creditbureau.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/api/CreditBureauIntegrationApiResource.java",
    "mechanism": "REST",
    "name": "deleteCreditReport",
    "description": "Endpoint to delete a saved credit report.",
    "path": "/v1/creditBureauIntegration/deleteCreditReport/{creditBureauId}",
    "method": "DELETE",
    "requestBody": "JSON (optional body)",
    "responseBody": "JSON (CommandProcessingResult)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.creditbureau.api.CreditBureauConfigurationApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/api/CreditBureauConfigurationApiResource.java",
    "mechanism": "REST",
    "name": "getCreditBureau",
    "description": "Retrieves credit bureau data",
    "path": "/v1/CreditBureauConfiguration",
    "method": "GET",
    "responseBody": "JSON array of CreditBureauData",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.creditbureau.api.CreditBureauConfigurationApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/api/CreditBureauConfigurationApiResource.java",
    "mechanism": "REST",
    "name": "getCreditBureauLoanProductMapping",
    "description": "Retrieves credit bureau loan product mappings",
    "path": "/v1/CreditBureauConfiguration/mappings",
    "method": "GET",
    "responseBody": "JSON array of CreditBureauLoanProductMappingData",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.creditbureau.api.CreditBureauConfigurationApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/api/CreditBureauConfigurationApiResource.java",
    "mechanism": "REST",
    "name": "getOrganisationCreditBureau",
    "description": "Retrieves organisation credit bureau data",
    "path": "/v1/CreditBureauConfiguration/organisationCreditBureau",
    "method": "GET",
    "responseBody": "JSON array of OrganisationCreditBureauData",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.creditbureau.api.CreditBureauConfigurationApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/api/CreditBureauConfigurationApiResource.java",
    "mechanism": "REST",
    "name": "getConfiguration",
    "description": "Retrieves configuration for a specific organisation credit bureau",
    "path": "/v1/CreditBureauConfiguration/config/{organisationCreditBureauId}",
    "method": "GET",
    "responseBody": "JSON array of CreditBureauConfigurationData",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.creditbureau.api.CreditBureauConfigurationApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/api/CreditBureauConfigurationApiResource.java",
    "mechanism": "REST",
    "name": "fetchLoanProducts",
    "description": "Fetches loan products associated with credit bureaus",
    "path": "/v1/CreditBureauConfiguration/loanProduct",
    "method": "GET",
    "responseBody": "JSON array of CreditBureauLoanProductMappingData",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.creditbureau.api.CreditBureauConfigurationApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/api/CreditBureauConfigurationApiResource.java",
    "mechanism": "REST",
    "name": "fetchMappingByLoanProductId",
    "description": "Fetches mapping for a specific loan product",
    "path": "/v1/CreditBureauConfiguration/loanProduct/{loanProductId}",
    "method": "GET",
    "responseBody": "JSON object of CreditBureauLoanProductMappingData",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.creditbureau.api.CreditBureauConfigurationApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/api/CreditBureauConfigurationApiResource.java",
    "mechanism": "REST",
    "name": "updateCreditBureau",
    "description": "Updates credit bureau information",
    "path": "/v1/CreditBureauConfiguration/organisationCreditBureau",
    "method": "PUT",
    "requestBody": "JSON object",
    "responseBody": "JSON object (CommandProcessingResult)",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.creditbureau.api.CreditBureauConfigurationApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/api/CreditBureauConfigurationApiResource.java",
    "mechanism": "REST",
    "name": "updateCreditBureauLoanProductMapping",
    "description": "Updates credit bureau loan product mapping",
    "path": "/v1/CreditBureauConfiguration/mappings",
    "method": "PUT",
    "requestBody": "JSON object",
    "responseBody": "JSON object (CommandProcessingResult)",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.creditbureau.api.CreditBureauConfigurationApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/api/CreditBureauConfigurationApiResource.java",
    "mechanism": "REST",
    "name": "addOrganisationCreditBureau",
    "description": "Adds an organisation credit bureau",
    "path": "/v1/CreditBureauConfiguration/organisationCreditBureau/{organisationCreditBureauId}",
    "method": "POST",
    "requestBody": "JSON object",
    "responseBody": "JSON object (CommandProcessingResult)",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.creditbureau.api.CreditBureauConfigurationApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/api/CreditBureauConfigurationApiResource.java",
    "mechanism": "REST",
    "name": "createCreditBureauLoanProductMapping",
    "description": "Creates a credit bureau loan product mapping",
    "path": "/v1/CreditBureauConfiguration/mappings/{organisationCreditBureauId}",
    "method": "POST",
    "requestBody": "JSON object",
    "responseBody": "JSON object (CommandProcessingResult)",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.creditbureau.api.CreditBureauConfigurationApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/api/CreditBureauConfigurationApiResource.java",
    "mechanism": "REST",
    "name": "createCreditBureauConfiguration",
    "description": "Creates a credit bureau configuration",
    "path": "/v1/CreditBureauConfiguration/configuration/{creditBureauId}",
    "method": "POST",
    "requestBody": "JSON object",
    "responseBody": "JSON object (CommandProcessingResult)",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.creditbureau.api.CreditBureauConfigurationApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/api/CreditBureauConfigurationApiResource.java",
    "mechanism": "REST",
    "name": "updateCreditBureauConfiguration",
    "description": "Updates a credit bureau configuration",
    "path": "/v1/CreditBureauConfiguration/configuration/{configurationId}",
    "method": "PUT",
    "requestBody": "JSON object",
    "responseBody": "JSON object (CommandProcessingResult)",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.creditbureau.service",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/service/ThitsaWorksCreditBureauIntegrationWritePlatformService.java",
    "mechanism": "REST",
    "name": "ThitsaWorks API Connection",
    "description": "The interface defines a method 'okHttpConnectionMethod' which explicitly suggests the use of an HTTP client to connect to an external URL. The parameters include authentication details (userName, password, subscriptionKey) and a target URL, characteristic of a RESTful integration.",
    "path": "Dynamic (passed as parameter 'url')",
    "method": "Unknown (likely POST or PUT based on file upload parameters)",
    "direction": "BIDIRECTIONAL",
    "protocol": "HTTP/HTTPS",
    "connectionInfo": "URL passed as parameter"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.creditbureau.service.CreditReportWritePlatformService",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/service/CreditReportWritePlatformService.java",
    "mechanism": "REST",
    "name": "Credit Report File Upload",
    "description": "The method `addCreditReport` accepts `FormDataContentDisposition`, which is a Jersey specific class used for handling Multipart file uploads in REST APIs. This indicates the service is designed to process files received via a REST endpoint.",
    "path": "n/a",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "multipart/form-data",
    "responseBody": "String"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.creditbureau.service.ThitsaWorksCreditBureauIntegrationWritePlatformServiceImpl",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/service/ThitsaWorksCreditBureauIntegrationWritePlatformServiceImpl.java",
    "mechanism": "REST",
    "name": "ThitsaWorks Credit Bureau API",
    "description": "External integration to ThitsaWorks Credit Bureau for credit reporting services.",
    "path": "Dynamic (configured in DB)",
    "method": "GET, POST",
    "direction": "CONSUMER",
    "requestBody": "Multipart form data (file upload), Form URL Encoded (token, search)",
    "responseBody": "JSON",
    "authentication": "Bearer Token (OAuth2 style password grant)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via database (CreditBureauConfiguration)"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.creditbureau.service.ThitsaWorksCreditBureauIntegrationWritePlatformServiceImplTest",
    "filepath": "fineract-provider/src/test/java/org/apache/fineract/infrastructure/creditbureau/service/ThitsaWorksCreditBureauIntegrationWritePlatformServiceImplTest.java",
    "mechanism": "REST",
    "name": "ThitsaWorks Credit Bureau API",
    "description": "The test mocks interactions with the ThitsaWorks Credit Bureau API for operations like getting tokens, searching NRC, and retrieving credit reports.",
    "path": "Various (mocked): /api/...",
    "method": "GET",
    "direction": "CONSUMER",
    "requestBody": "Form-encoded or Multipart",
    "responseBody": "JSON",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.dataqueries.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/api/ReportsApiResource.java",
    "mechanism": "REST",
    "name": "Reports API",
    "description": "RESTful endpoints for managing reports.",
    "path": "/v1/reports",
    "method": "GET, POST, PUT, DELETE",
    "authentication": "PlatformSecurityContext (OAuth2/Basic implied)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.dataqueries.api.DatatablesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/api/DatatablesApiResource.java",
    "mechanism": "REST",
    "name": "Datatables API",
    "description": "RESTful API for managing custom data tables and their contents.",
    "path": "/v1/datatables",
    "method": "GET, POST, PUT, DELETE",
    "direction": "BIDIRECTIONAL",
    "authentication": "PlatformSecurityContext (implied)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.dataqueries.api.EntityDatatableChecksApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/api/EntityDatatableChecksApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAll",
    "description": "List Entity-Datatable Checks",
    "path": "/v1/entityDatatableChecks",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON array of EntityDataTableChecksData",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.dataqueries.api.EntityDatatableChecksApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/api/EntityDatatableChecksApiResource.java",
    "mechanism": "REST",
    "name": "getTemplate",
    "description": "Retrieve Entity-Datatable Checks Template",
    "path": "/v1/entityDatatableChecks/template",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON object of EntityDataTableChecksTemplateData",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.dataqueries.api.EntityDatatableChecksApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/api/EntityDatatableChecksApiResource.java",
    "mechanism": "REST",
    "name": "createEntityDatatableCheck",
    "description": "Create Entity-Datatable Checks",
    "path": "/v1/entityDatatableChecks",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON object (PostEntityDatatableChecksTemplateRequest)",
    "responseBody": "JSON object (CommandProcessingResult)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.dataqueries.api.EntityDatatableChecksApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/api/EntityDatatableChecksApiResource.java",
    "mechanism": "REST",
    "name": "deleteDatatable",
    "description": "Delete Entity-Datatable Checks",
    "path": "/v1/entityDatatableChecks/{entityDatatableCheckId}",
    "method": "DELETE",
    "direction": "PRODUCER",
    "responseBody": "JSON object (CommandProcessingResult)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.dataqueries.api.RunreportsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/api/RunreportsApiResource.java",
    "mechanism": "REST",
    "name": "Run Reports API",
    "description": "API for running reports and retrieving export options.",
    "path": "/v1/runreports",
    "method": "GET",
    "direction": "BIDIRECTIONAL",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.dataqueries.api.RunreportsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/api/RunreportsApiResource.java",
    "mechanism": "REST",
    "name": "Available Exports Endpoint",
    "description": "Endpoint to get available export types for a report.",
    "path": "/v1/runreports/availableExports/{reportName}",
    "method": "GET",
    "direction": "BIDIRECTIONAL",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.dataqueries.api.RunreportsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/api/RunreportsApiResource.java",
    "mechanism": "REST",
    "name": "Run Report Endpoint",
    "description": "Endpoint to execute a report.",
    "path": "/v1/runreports/{reportName}",
    "method": "GET",
    "direction": "BIDIRECTIONAL",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.dataqueries.service",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadReportingService.java",
    "mechanism": "REST",
    "name": "retrieveReportCSV",
    "description": "The method 'retrieveReportCSV' returns 'jakarta.ws.rs.core.StreamingOutput', which is a specific JAX-RS type used for streaming data in RESTful web services. This indicates that the service is tightly coupled to a REST API implementation.",
    "path": "n/a",
    "method": "n/a",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.dataqueries.service.export",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/export/S3DatatableReportExportServiceImpl.java",
    "mechanism": "OTHER",
    "name": "AWS S3 Bucket",
    "description": "Uploads generated CSV report files to an Amazon S3 bucket.",
    "method": "putObject",
    "direction": "PRODUCER",
    "protocol": "AWS SDK / HTTPS"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.documentmanagement.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/api/ImagesApiResource.java",
    "mechanism": "REST",
    "name": "addNewClientImage (Multipart)",
    "description": "Uploads a new image via Multipart Form Data",
    "path": "/v1/{entity}/{entityId}/images",
    "method": "POST",
    "requestBody": "multipart/form-data",
    "responseBody": "application/json"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.documentmanagement.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/api/ImagesApiResource.java",
    "mechanism": "REST",
    "name": "addNewClientImage (Base64)",
    "description": "Uploads a new image via Base64 Data URL",
    "path": "/v1/{entity}/{entityId}/images",
    "method": "POST",
    "requestBody": "text/plain, text/html, or application/json",
    "responseBody": "application/json"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.documentmanagement.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/api/ImagesApiResource.java",
    "mechanism": "REST",
    "name": "retrieveImage",
    "description": "Retrieves an image",
    "path": "/v1/{entity}/{entityId}/images",
    "method": "GET",
    "requestBody": "n/a",
    "responseBody": "application/json (Base64) or application/octet-stream"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.documentmanagement.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/api/ImagesApiResource.java",
    "mechanism": "REST",
    "name": "updateClientImage (Multipart)",
    "description": "Updates an image via Multipart Form Data",
    "path": "/v1/{entity}/{entityId}/images",
    "method": "PUT",
    "requestBody": "multipart/form-data",
    "responseBody": "application/json"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.documentmanagement.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/api/ImagesApiResource.java",
    "mechanism": "REST",
    "name": "updateClientImage (Base64)",
    "description": "Updates an image via Base64 Data URL",
    "path": "/v1/{entity}/{entityId}/images",
    "method": "PUT",
    "requestBody": "text/plain, text/html, or application/json",
    "responseBody": "application/json"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.documentmanagement.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/api/ImagesApiResource.java",
    "mechanism": "REST",
    "name": "deleteClientImage",
    "description": "Deletes an image",
    "path": "/v1/{entity}/{entityId}/images",
    "method": "DELETE",
    "requestBody": "application/json",
    "responseBody": "application/json"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.documentmanagement.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/api/DocumentManagementApiResourceSwagger.java",
    "mechanism": "REST",
    "name": "Document Upload Schema",
    "description": "Defines the schema for multipart/form-data requests used in document uploads via the DocumentUploadRequest inner class.",
    "direction": "CONSUMER",
    "requestBody": "multipart/form-data with 'name' and 'description' fields"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.documentmanagement.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/api/ContentResources.java",
    "mechanism": "REST",
    "name": "JAX-RS Response Builder",
    "description": "Constructs standard JAX-RS Response objects for file downloads, setting headers for Content-Disposition and Content-Type.",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.documentmanagement.api.DocumentManagementApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/api/DocumentManagementApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAllDocuments",
    "description": "List documents for an entity",
    "path": "/v1/{entityType}/{entityId}/documents",
    "method": "GET",
    "responseBody": "JSON array of DocumentData"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.documentmanagement.api.DocumentManagementApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/api/DocumentManagementApiResource.java",
    "mechanism": "REST",
    "name": "createDocument",
    "description": "Create/Upload a document",
    "path": "/v1/{entityType}/{entityId}/documents",
    "method": "POST",
    "requestBody": "Multipart Form Data (file, name, description)",
    "responseBody": "JSON CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.documentmanagement.api.DocumentManagementApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/api/DocumentManagementApiResource.java",
    "mechanism": "REST",
    "name": "updateDocument",
    "description": "Update a document",
    "path": "/v1/{entityType}/{entityId}/documents/{documentId}",
    "method": "PUT",
    "requestBody": "Multipart Form Data (file, name, description)",
    "responseBody": "JSON CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.documentmanagement.api.DocumentManagementApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/api/DocumentManagementApiResource.java",
    "mechanism": "REST",
    "name": "getDocument",
    "description": "Retrieve a single document metadata",
    "path": "/v1/{entityType}/{entityId}/documents/{documentId}",
    "method": "GET",
    "responseBody": "JSON DocumentData"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.documentmanagement.api.DocumentManagementApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/api/DocumentManagementApiResource.java",
    "mechanism": "REST",
    "name": "downloadFile",
    "description": "Download document binary",
    "path": "/v1/{entityType}/{entityId}/documents/{documentId}/attachment",
    "method": "GET",
    "responseBody": "application/octet-stream"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.documentmanagement.api.DocumentManagementApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/api/DocumentManagementApiResource.java",
    "mechanism": "REST",
    "name": "deleteDocument",
    "description": "Delete a document",
    "path": "/v1/{entityType}/{entityId}/documents/{documentId}",
    "method": "DELETE",
    "responseBody": "JSON CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.documentmanagement.contentrepository.S3ContentRepository",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/contentrepository/S3ContentRepository.java",
    "mechanism": "OTHER",
    "name": "Amazon S3",
    "description": "Integration with Amazon Simple Storage Service (S3) for storing and retrieving documents and images.",
    "direction": "BIDIRECTIONAL",
    "protocol": "AWS SDK v2 (HTTP/REST)",
    "connectionInfo": "Bucket name configured via 'fineractProperties.getContent().getS3().getBucketName()'"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.entityaccess.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/api/FineractEntityApiResource.java",
    "mechanism": "REST",
    "name": "Fineract Entity API",
    "description": "REST API endpoints for managing entity-to-entity mappings.",
    "path": "/v1/entitytoentitymapping",
    "method": "GET, POST, PUT, DELETE",
    "direction": "BIDIRECTIONAL",
    "requestBody": "JSON",
    "responseBody": "JSON",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.event.external.api",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/api/ExternalEventConfigurationApiResource.java",
    "mechanism": "REST",
    "name": "External Event Configuration API",
    "description": "API endpoints for configuring external events.",
    "path": "/v1/externalevents/configuration",
    "method": "GET, PUT",
    "requestBody": "JSON (for PUT)",
    "responseBody": "JSON",
    "authentication": "PlatformSecurityContext (Internal Fineract Auth)"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.event.external.config",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/config/ExternalEventKafkaConfiguration.java",
    "mechanism": "KAFKA-TOPIC",
    "name": "externalEventsKafkaTemplate",
    "description": "Configures the Kafka Producer infrastructure to allow the application to send messages to Kafka brokers.",
    "messageType": "byte[]",
    "direction": "PRODUCER",
    "connectionInfo": "Bootstrap servers configured via 'fineract.events.external.producer.kafka.bootstrapServers' property"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.event.external.config",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/config/KafkaExternalEventTopicConfig.java",
    "mechanism": "KAFKA-TOPIC",
    "name": "External Events Topic",
    "description": "Configures the creation of a Kafka topic for external events using Spring Kafka Admin.",
    "queueOrTopicName": "Configured via fineractProperties.getEvents().getExternal().getProducer().getKafka().getTopic().getName()",
    "direction": "PRODUCER",
    "connectionInfo": "Configured via fineractProperties.getRemoteJobMessageHandler().getKafka().getBootstrapServers()"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.event.external.config.ExternalEventJMSConfiguration",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/config/ExternalEventJMSConfiguration.java",
    "mechanism": "ACTIVEMQ-TOPIC",
    "name": "externalEventDestination",
    "description": "ActiveMQ Topic for publishing external events",
    "queueOrTopicName": "Configured via property: fineract.events.external.producer.jms.eventTopicName",
    "direction": "PRODUCER",
    "connectionInfo": "Broker URL configured via property: fineract.events.external.producer.jms.brokerUrl"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.event.external.config.ExternalEventJMSConfiguration",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/config/ExternalEventJMSConfiguration.java",
    "mechanism": "ACTIVEMQ-QUEUE",
    "name": "externalEventDestination",
    "description": "ActiveMQ Queue for publishing external events",
    "queueOrTopicName": "Configured via property: fineract.events.external.producer.jms.eventQueueName",
    "direction": "PRODUCER",
    "connectionInfo": "Broker URL configured via property: fineract.events.external.producer.jms.brokerUrl"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.event.external.jobs.PurgeExternalEventsConfig",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/jobs/PurgeExternalEventsConfig.java",
    "mechanism": "OTHER",
    "name": "PURGE_EXTERNAL_EVENTS",
    "description": "Spring Batch Job definition for purging external events",
    "direction": "OTHER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.event.external.jobs.SendAsynchronousEventsTasklet",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/jobs/SendAsynchronousEventsTasklet.java",
    "mechanism": "JMS-TOPIC",
    "name": "External Event Producer (JMS)",
    "description": "Sends external events to a JMS provider if enabled in configuration.",
    "messageType": "Avro (MessageV1)",
    "direction": "PRODUCER",
    "protocol": "JMS"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.event.external.jobs.SendAsynchronousEventsTasklet",
    "filepath": "fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/jobs/SendAsynchronousEventsTasklet.java",
    "mechanism": "KAFKA-TOPIC",
    "name": "External Event Producer (Kafka)",
    "description": "Sends external events to a Kafka topic if enabled in configuration.",
    "messageType": "Avro (MessageV1)",
    "direction": "PRODUCER",
    "protocol": "Kafka"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.event.external.jobs.SendAsynchronousEventsTaskletTest",
    "filepath": "fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/jobs/SendAsynchronousEventsTaskletTest.java",
    "mechanism": "JMS-QUEUE",
    "name": "ExternalEventProducer",
    "description": "The code configures and uses an ExternalEventProducer to send asynchronous events. The configuration explicitly enables JMS properties.",
    "path": "n/a",
    "method": "n/a",
    "queueOrTopicName": "unknown",
    "messageType": "MessageV1",
    "direction": "PRODUCER",
    "requestBody": "byte[] (Serialized Avro Message)",
    "responseBody": "n/a",
    "authentication": "unknown",
    "protocol": "JMS",
    "connectionInfo": "n/a"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.event.external.producer.jms",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/producer/jms/JMSMultiExternalEventProducer.java",
    "mechanism": "JMS-TOPIC",
    "name": "externalEventDestination",
    "description": "Sends external events to a JMS destination (inferred as a Topic due to 'Event' naming, though implemented as a generic Destination).",
    "messageType": "byte[]",
    "direction": "PRODUCER",
    "connectionInfo": "Injected ConnectionFactory bean 'externalEventConnectionFactory'"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.event.external.producer.jms",
    "filepath": "fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/producer/jms/JMSMultiExternalEventProducerTest.java",
    "mechanism": "JMS-TOPIC",
    "name": "External Events Producer",
    "description": "Produces external events to a JMS destination (Topic or Queue) using Jakarta JMS API.",
    "queueOrTopicName": "destination (mocked)",
    "messageType": "BytesMessage",
    "direction": "PRODUCER",
    "protocol": "JMS"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.event.external.producer.kafka",
    "filepath": "fineract-provider/src/test/java/org/apache/fineract/infrastructure/event/external/producer/kafka/KafkaExternalEventProducerTest.java",
    "mechanism": "KAFKA-TOPIC",
    "name": "unit-test",
    "description": "The test verifies a producer that sends binary messages to a Kafka topic.",
    "queueOrTopicName": "unit-test",
    "messageType": "byte[]",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.event.external.producer.kafka",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/event/external/producer/kafka/KafkaExternalEventProducer.java",
    "mechanism": "KAFKA-TOPIC",
    "name": "Configured via fineractProperties",
    "description": "Produces binary event messages to a Kafka topic defined in the application properties.",
    "queueOrTopicName": "kafkaProperties.getTopic().getName()",
    "messageType": "byte[]",
    "direction": "PRODUCER",
    "connectionInfo": "Managed by Spring KafkaTemplate"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.gcm.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/api/DeviceRegistrationApiResource.java",
    "mechanism": "REST",
    "name": "Register Device",
    "description": "Endpoint to register a new device.",
    "path": "/v1/self/device/registration",
    "method": "POST",
    "requestBody": "JSON object containing clientId and registrationId",
    "responseBody": "JSON containing the ID of the created registration"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.gcm.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/api/DeviceRegistrationApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve All Device Registrations",
    "description": "Endpoint to retrieve all device registrations.",
    "path": "/v1/self/device/registration",
    "method": "GET",
    "responseBody": "JSON array of device registration data"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.gcm.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/api/DeviceRegistrationApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Device Registration by Client ID",
    "description": "Endpoint to retrieve device registration for a specific client.",
    "path": "/v1/self/device/registration/client/{clientId}",
    "method": "GET",
    "responseBody": "JSON object of device registration data"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.gcm.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/api/DeviceRegistrationApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Device Registration by ID",
    "description": "Endpoint to retrieve a specific device registration.",
    "path": "/v1/self/device/registration/{id}",
    "method": "GET",
    "responseBody": "JSON object of device registration data"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.gcm.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/api/DeviceRegistrationApiResource.java",
    "mechanism": "REST",
    "name": "Update Device Registration",
    "description": "Endpoint to update an existing device registration.",
    "path": "/v1/self/device/registration/{id}",
    "method": "PUT",
    "requestBody": "JSON object containing clientId and registrationId",
    "responseBody": "JSON containing the ID of the updated registration"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.gcm.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/api/DeviceRegistrationApiResource.java",
    "mechanism": "REST",
    "name": "Delete Device Registration",
    "description": "Endpoint to delete a device registration.",
    "path": "/v1/self/device/registration/{id}",
    "method": "DELETE",
    "responseBody": "JSON object containing the ID of the deleted resource"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.gcm.domain",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/domain/Sender.java",
    "mechanism": "REST",
    "name": "GCM/FCM Send Endpoint",
    "description": "Sends downstream messages to the Google Cloud Messaging (or Firebase Cloud Messaging) server.",
    "path": "Configured via 'endpoint' field (typically https://fcm.googleapis.com/fcm/send)",
    "method": "POST",
    "requestBody": "JSON payload containing 'to' or 'registration_ids', and message data/notification fields.",
    "responseBody": "JSON object containing multicast_id, success, failure, canonical_ids, and results array.",
    "authentication": "Authorization Header with API Key",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Managed via HttpURLConnection"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.gcm.service",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/service/NotificationSenderService.java",
    "mechanism": "REST",
    "name": "GCM/FCM Notification Service",
    "description": "Sends push notifications to mobile devices via Google Cloud Messaging or Firebase Cloud Messaging.",
    "path": "Defined in notificationConfigurationData.getFcmEndPoint()",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON payload containing notification title, body, and priority",
    "responseBody": "JSON result containing success/failure counts",
    "authentication": "Server Key (API Key)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Endpoint URL provided by ExternalServicesPropertiesReadPlatformService"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.hooks.api.HookApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/api/HookApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Hooks",
    "description": "Returns the list of hooks.",
    "path": "/v1/hooks",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON array of HookData"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.hooks.api.HookApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/api/HookApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve a Hook",
    "description": "Returns the details of a Hook.",
    "path": "/v1/hooks/{hookId}",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON object of HookData"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.hooks.api.HookApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/api/HookApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Hooks Template",
    "description": "Returns the template data for creating hooks.",
    "path": "/v1/hooks/template",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON object of HookData template"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.hooks.api.HookApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/api/HookApiResource.java",
    "mechanism": "REST",
    "name": "Create a Hook",
    "description": "Creates a new hook.",
    "path": "/v1/hooks",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON object with name, isActive, events, config, etc.",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.hooks.api.HookApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/api/HookApiResource.java",
    "mechanism": "REST",
    "name": "Update a Hook",
    "description": "Updates the details of a hook.",
    "path": "/v1/hooks/{hookId}",
    "method": "PUT",
    "direction": "PRODUCER",
    "requestBody": "JSON object with updated fields",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.hooks.api.HookApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/api/HookApiResource.java",
    "mechanism": "REST",
    "name": "Delete a Hook",
    "description": "Deletes a hook.",
    "path": "/v1/hooks/{hookId}",
    "method": "DELETE",
    "direction": "PRODUCER",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.hooks.api.HookApiResourceSwagger",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/api/HookApiResourceSwagger.java",
    "mechanism": "REST",
    "name": "Hook API Schemas",
    "description": "Defines the request and response schemas (DTOs) for the Hooks REST API documentation using Swagger annotations. These classes describe the JSON payloads for POST, GET, PUT, and DELETE operations on hooks.",
    "path": "n/a",
    "method": "n/a",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.hooks.listener",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/listener/FineractHookListener.java",
    "mechanism": "OTHER",
    "name": "onApplicationEvent",
    "description": "Spring Application Event Listener for HookEvent",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.hooks.processor",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/processor/WebHookProcessor.java",
    "mechanism": "REST",
    "name": "WebHook Notification",
    "description": "Sends HTTP requests (WebHooks) to external URLs configured in the Hook entity.",
    "path": "Dynamic (determined by Hook configuration)",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON or Form-UrlEncoded map depending on configuration",
    "protocol": "HTTP/HTTPS",
    "connectionInfo": "URL defined in HookConfiguration"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.hooks.processor",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/processor/WebHookService.java",
    "mechanism": "REST",
    "name": "sendEmptyRequest",
    "description": "Ping/Health check call to the webhook endpoint.",
    "path": ".",
    "method": "GET",
    "direction": "PRODUCER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Retrofit base URL"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.hooks.processor",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/processor/WebHookService.java",
    "mechanism": "REST",
    "name": "sendJsonRequest",
    "description": "Sends a JSON webhook payload with context headers.",
    "path": ".",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON Object",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Retrofit base URL"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.hooks.processor",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/processor/WebHookService.java",
    "mechanism": "REST",
    "name": "sendFormRequest",
    "description": "Sends a Form-URL-Encoded webhook payload with context headers.",
    "path": ".",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "Form Data (Map)",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Retrofit base URL"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.hooks.processor",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/processor/WebHookService.java",
    "mechanism": "REST",
    "name": "sendSmsBridgeRequest",
    "description": "Sends a JSON payload to an SMS bridge with an API key.",
    "path": ".",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON Object",
    "authentication": "API Key (X-Fineract-API-Key)",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Retrofit base URL"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.hooks.processor",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/processor/WebHookService.java",
    "mechanism": "REST",
    "name": "sendSmsBridgeConfigRequest",
    "description": "Sends SMS provider configuration data.",
    "path": "/configuration",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "SmsProviderData JSON",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Retrofit base URL"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.hooks.processor.ElasticSearchHookProcessor",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/processor/ElasticSearchHookProcessor.java",
    "mechanism": "REST",
    "name": "WebHookService",
    "description": "Sends an HTTP request (JSON or Form URL Encoded) to an external URL defined in the hook configuration.",
    "path": "Dynamic (determined by hook configuration)",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON object or Form Map containing the event payload",
    "protocol": "HTTP",
    "connectionInfo": "URL defined in HookConfiguration"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.hooks.processor.MessageGatewayHookProcessor",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/processor/MessageGatewayHookProcessor.java",
    "mechanism": "OTHER",
    "name": "SMS Service Integration",
    "description": "Integrates with an internal SMS scheduling service to trigger message delivery.",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.hooks.processor.ProcessorHelper",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/processor/ProcessorHelper.java",
    "mechanism": "REST",
    "name": "WebHookService Client",
    "description": "Dynamically creates a REST client to send webhook notifications to external URLs.",
    "direction": "PRODUCER",
    "protocol": "HTTP/HTTPS",
    "connectionInfo": "Dynamic URL passed to createWebHookService"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.hooks.processor.TwilioHookProcessor",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/processor/TwilioHookProcessor.java",
    "mechanism": "REST",
    "name": "SMS Bridge Service",
    "description": "Communicates with an external SMS bridge or Twilio service to send SMS messages and retrieve configuration.",
    "path": "Dynamic (based on smsProviderData.getUrl())",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON payload containing SMS details or configuration request",
    "responseBody": "API Key string or Void",
    "protocol": "HTTP",
    "connectionInfo": "Configured via smsProviderData.getUrl()"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.hooks.service.HookWritePlatformServiceJpaRepositoryImpl",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/service/HookWritePlatformServiceJpaRepositoryImpl.java",
    "mechanism": "REST",
    "name": "WebHook Validation",
    "description": "Validates the payload URL provided in the hook configuration by sending a test request.",
    "path": "Dynamic (based on payloadURL configuration)",
    "method": "GET/POST (implied by sendEmptyRequest)",
    "direction": "PRODUCER",
    "requestBody": "Empty",
    "responseBody": "Ignored (checks for connectivity/success)",
    "authentication": "None visible",
    "protocol": "HTTP/HTTPS"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.instancemode.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/instancemode/api/InstanceModeApiResource.java",
    "mechanism": "REST",
    "name": "changeMode",
    "description": "Endpoint to update the instance mode configuration.",
    "path": "/v1/instance-mode",
    "method": "PUT",
    "requestBody": "JSON object (ChangeInstanceModeRequest) containing boolean flags for read, write, and batch modes.",
    "responseBody": "Empty HTTP 200 OK response.",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.instancemode.api.InstanceModeApiResourceSwagger",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/instancemode/api/InstanceModeApiResourceSwagger.java",
    "mechanism": "REST",
    "name": "ChangeInstanceModeRequest",
    "description": "Defines the request body schema for the REST API endpoint responsible for updating instance modes.",
    "direction": "CONSUMER",
    "requestBody": "JSON object with boolean fields: readEnabled, writeEnabled, batchWorkerEnabled, batchManagerEnabled"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.instancemode.filter",
    "filepath": "fineract-provider/src/test/java/org/apache/fineract/infrastructure/instancemode/filter/FineractInstanceModeApiFilterTest.java",
    "mechanism": "REST",
    "name": "Loans API",
    "description": "The test simulates requests to the Loans API to verify access control.",
    "path": "/v1/loans",
    "method": "GET, POST, PUT"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.instancemode.filter",
    "filepath": "fineract-provider/src/test/java/org/apache/fineract/infrastructure/instancemode/filter/FineractInstanceModeApiFilterTest.java",
    "mechanism": "REST",
    "name": "Actuator Health",
    "description": "The test simulates requests to the Actuator Health endpoint to verify it is always accessible.",
    "path": "/actuator/health",
    "method": "GET"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.instancemode.filter",
    "filepath": "fineract-provider/src/test/java/org/apache/fineract/infrastructure/instancemode/filter/FineractInstanceModeApiFilterTest.java",
    "mechanism": "REST",
    "name": "Jobs API",
    "description": "The test simulates requests to the Jobs API to verify batch mode restrictions.",
    "path": "/v1/jobs",
    "method": "GET, POST"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.instancemode.filter",
    "filepath": "fineract-provider/src/test/java/org/apache/fineract/infrastructure/instancemode/filter/FineractInstanceModeApiFilterTest.java",
    "mechanism": "REST",
    "name": "Batches API",
    "description": "The test simulates requests to the Batches API.",
    "path": "/v1/batches",
    "method": "POST"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.instancemode.filter",
    "filepath": "fineract-provider/src/test/java/org/apache/fineract/infrastructure/instancemode/filter/FineractInstanceModeApiFilterTest.java",
    "mechanism": "REST",
    "name": "Loan Catch-Up API",
    "description": "The test simulates requests to the Loan Catch-Up API to verify batch manager restrictions.",
    "path": "/v1/loans/catch-up",
    "method": "POST"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.instancemode.filter",
    "filepath": "fineract-provider/src/test/java/org/apache/fineract/infrastructure/instancemode/filter/FineractInstanceModeApiFilterTest.java",
    "mechanism": "REST",
    "name": "Scheduler API",
    "description": "The test simulates requests to the Scheduler API to verify batch manager restrictions.",
    "path": "/v1/scheduler",
    "method": "POST"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.instancemode.filter",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/instancemode/filter/FineractInstanceModeApiFilter.java",
    "mechanism": "REST",
    "name": "Instance Mode Filter",
    "description": "Intercepts and filters all incoming REST API requests to enforce application instance mode restrictions (Read-Only vs Write).",
    "path": "/*",
    "method": "ALL",
    "direction": "BOTH",
    "responseBody": "ApiGlobalErrorResponse (JSON) on rejection"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.jobs.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/api/SchedulerApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Scheduler Status",
    "description": "Endpoint to check if the scheduler is currently running.",
    "path": "/v1/scheduler",
    "method": "GET",
    "responseBody": "JSON object containing active status (SchedulerDetailData)",
    "authentication": "PlatformSecurityContext (User Permissions)"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.jobs.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/api/SchedulerApiResource.java",
    "mechanism": "REST",
    "name": "Change Scheduler Status",
    "description": "Endpoint to start or stop the scheduler.",
    "path": "/v1/scheduler",
    "method": "POST",
    "requestBody": "None (uses query parameter 'command')",
    "responseBody": "HTTP 202 Accepted on success",
    "authentication": "PlatformSecurityContext (User Permissions)"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.jobs.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/api/InlineJobApiResource.java",
    "mechanism": "REST",
    "name": "executeInlineJob",
    "description": "Endpoint to start an inline Job",
    "path": "/v1/jobs/{jobName}/inline",
    "method": "POST",
    "requestBody": "application/json (InlineJobRequest)",
    "responseBody": "application/json (InlineJobResponse)"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.jobs.api.SchedulerJobApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/api/SchedulerJobApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Scheduler Jobs",
    "description": "Endpoint to retrieve all scheduler jobs.",
    "path": "/v1/jobs",
    "method": "GET",
    "responseBody": "JSON array of JobDetailData"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.jobs.api.SchedulerJobApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/api/SchedulerJobApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve a Job",
    "description": "Endpoint to retrieve details of a specific job.",
    "path": "/v1/jobs/{jobId}",
    "method": "GET",
    "responseBody": "JSON object of JobDetailData"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.jobs.api.SchedulerJobApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/api/SchedulerJobApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Job Run History",
    "description": "Endpoint to retrieve the execution history of a job.",
    "path": "/v1/jobs/{jobId}/runhistory",
    "method": "GET",
    "responseBody": "JSON page of JobDetailHistoryData"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.jobs.api.SchedulerJobApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/api/SchedulerJobApiResource.java",
    "mechanism": "REST",
    "name": "Run a Job",
    "description": "Endpoint to manually execute a specific job.",
    "path": "/v1/jobs/{jobId}",
    "method": "POST",
    "requestBody": "JSON payload (optional parameters)",
    "responseBody": "Empty 202 Accepted or Error"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.jobs.api.SchedulerJobApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/api/SchedulerJobApiResource.java",
    "mechanism": "REST",
    "name": "Update a Job",
    "description": "Endpoint to update job details.",
    "path": "/v1/jobs/{jobId}",
    "method": "PUT",
    "requestBody": "JSON payload with update details",
    "responseBody": "JSON object of CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.jobs.filter.LoanCOBApiFilter",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/filter/LoanCOBApiFilter.java",
    "mechanism": "REST",
    "name": "LoanCOBApiFilter",
    "description": "A Servlet Filter that intercepts HTTP requests to enforce Loan COB logic.",
    "path": "Dynamic (determined by helper.isOnApiList)",
    "method": "ALL",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.jobs.filter.LoanCOBApiFilterTest",
    "filepath": "fineract-provider/src/test/java/org/apache/fineract/infrastructure/jobs/filter/LoanCOBApiFilterTest.java",
    "mechanism": "REST",
    "name": "Loan API",
    "description": "The test simulates interception of REST API calls to the Loan resource.",
    "path": "/v1/loans/{loanId}",
    "method": "POST",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.jobs.filter.LoanCOBApiFilterTest",
    "filepath": "fineract-provider/src/test/java/org/apache/fineract/infrastructure/jobs/filter/LoanCOBApiFilterTest.java",
    "mechanism": "REST",
    "name": "Reschedule Loan API",
    "description": "The test simulates interception of REST API calls to the Reschedule Loan resource.",
    "path": "/v1/rescheduleloans/{requestId}",
    "method": "POST",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.jobs.service",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/JobRegisterServiceImpl.java",
    "mechanism": "OTHER",
    "name": "Quartz Scheduler",
    "description": "In-memory job scheduling using the Quartz framework to manage job execution and timing.",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.jobs.service",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/SchedulerVetoer.java",
    "mechanism": "OTHER",
    "name": "Quartz Scheduler Veto",
    "description": "Integrates with the Quartz Scheduler library to intercept and potentially veto job triggers before execution.",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.jobs.service",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/SchedulerTriggerListener.java",
    "mechanism": "OTHER",
    "name": "Quartz Scheduler Listener",
    "description": "Implements the Quartz TriggerListener interface to intercept job scheduling events.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.jobs.service",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/SchedulerStopListener.java",
    "mechanism": "OTHER",
    "name": "Quartz Job Listener",
    "description": "Listens to Quartz job execution events to trigger scheduler shutdown.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.jobs.service.SchedulerJobListener",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/SchedulerJobListener.java",
    "mechanism": "OTHER",
    "name": "Quartz Scheduler Listener",
    "description": "Listens to Quartz Scheduler events to manage job context and history.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.jobs.service.updatenpa",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/service/updatenpa/UpdateNpaConfig.java",
    "mechanism": "OTHER",
    "name": "UPDATE_NPA",
    "description": "Spring Batch Job definition for updating Non-Performing Assets",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.report.service",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/report/service/ReportingProcessService.java",
    "mechanism": "REST",
    "name": "Report Processing Service",
    "description": "This interface uses JAX-RS types (Response, MultivaluedMap) to handle HTTP-based report requests, acting as a service layer for REST endpoints.",
    "path": "n/a",
    "method": "n/a",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.reportmailingjob.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/api/ReportMailingJobApiResourceSwagger.java",
    "mechanism": "REST",
    "name": "Report Mailing Job API Schemas",
    "description": "Defines the request and response body schemas (DTOs) for the Report Mailing Job REST API. These classes are used by the Swagger framework to generate the API documentation contract.",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.reportmailingjob.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/api/ReportMailingJobRunHistoryApiResource.java",
    "mechanism": "REST",
    "name": "List Report Mailing Job History",
    "description": "Endpoint to retrieve the history of report mailing job runs.",
    "path": "/v1/{REPORT_MAILING_JOB_RUN_HISTORY_RESOURCE_NAME}",
    "method": "GET",
    "requestBody": "None (Query Parameters)",
    "responseBody": "JSON array of ReportMailingJobRunHistoryData",
    "authentication": "Platform Security Context (User Permissions)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.reportmailingjob.api.ReportMailingJobApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/api/ReportMailingJobApiResource.java",
    "mechanism": "REST",
    "name": "createReportMailingJob",
    "description": "Create a new Report Mailing Job",
    "path": "/v1/reportmailingjobs",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON object with job details (name, startDateTime, stretchyReportId, etc.)",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.reportmailingjob.api.ReportMailingJobApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/api/ReportMailingJobApiResource.java",
    "mechanism": "REST",
    "name": "updateReportMailingJob",
    "description": "Update an existing Report Mailing Job",
    "path": "/v1/reportmailingjobs/{entityId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON object with fields to update",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.reportmailingjob.api.ReportMailingJobApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/api/ReportMailingJobApiResource.java",
    "mechanism": "REST",
    "name": "deleteReportMailingJob",
    "description": "Delete a Report Mailing Job",
    "path": "/v1/reportmailingjobs/{entityId}",
    "method": "DELETE",
    "direction": "CONSUMER",
    "requestBody": "Optional JSON body",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.reportmailingjob.api.ReportMailingJobApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/api/ReportMailingJobApiResource.java",
    "mechanism": "REST",
    "name": "retrieveReportMailingJob",
    "description": "Retrieve a specific Report Mailing Job",
    "path": "/v1/reportmailingjobs/{entityId}",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON object containing ReportMailingJobData"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.reportmailingjob.api.ReportMailingJobApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/api/ReportMailingJobApiResource.java",
    "mechanism": "REST",
    "name": "retrieveReportMailingJobTemplate",
    "description": "Retrieve Report Mailing Job Template",
    "path": "/v1/reportmailingjobs/template",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON object containing template options"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.reportmailingjob.api.ReportMailingJobApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/api/ReportMailingJobApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAllReportMailingJobs",
    "description": "List all Report Mailing Jobs",
    "path": "/v1/reportmailingjobs",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON array of ReportMailingJobData"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.reportmailingjob.service.ReportMailingJobEmailService",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobEmailService.java",
    "mechanism": "OTHER",
    "name": "sendEmailWithAttachment",
    "description": "Defines an integration point for sending emails via an SMTP server or email API, though the specific protocol is determined by the implementation.",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.reportmailingjob.service.ReportMailingJobEmailServiceImpl",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/service/ReportMailingJobEmailServiceImpl.java",
    "mechanism": "OTHER",
    "name": "SMTP Email Sender",
    "description": "Sends emails using the Jakarta Mail API via Spring's JavaMailSenderImpl.",
    "direction": "PRODUCER",
    "protocol": "SMTP",
    "connectionInfo": "Dynamic (configured via database properties GMAIL_SMTP_SERVER, GMAIL_SMTP_PORT)"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.s3",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/s3/AmazonS3Config.java",
    "mechanism": "OTHER",
    "name": "AWS S3 Client",
    "description": "Configures the AWS SDK v2 S3 Client for interacting with Amazon S3 storage.",
    "direction": "BOTH",
    "protocol": "HTTPS (AWS SDK)",
    "connectionInfo": "Managed by DefaultAwsRegionProviderChain and DefaultCredentialsProvider"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.s3",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/s3/AmazonS3ConfigCondition.java",
    "mechanism": "OTHER",
    "name": "AWS SDK Credential Validation",
    "description": "Validates connectivity and configuration for Amazon Web Services by attempting to resolve credentials and the default region.",
    "direction": "CONSUMER",
    "protocol": "AWS SDK / HTTPS",
    "connectionInfo": "AWS Default Provider Chain"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.s3.LocalstackS3ClientCustomizer",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/s3/LocalstackS3ClientCustomizer.java",
    "mechanism": "OTHER",
    "name": "AWS S3 Client Configuration",
    "description": "Configures the AWS SDK S3 Client to connect to a custom endpoint (LocalStack) for testing purposes.",
    "path": "AWS_ENDPOINT_URL (Environment Variable)",
    "direction": "OTHER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.s3.S3ClientCustomizer",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/s3/S3ClientCustomizer.java",
    "mechanism": "OTHER",
    "name": "AWS S3 Configuration",
    "description": "Configures the AWS SDK S3 Client Builder",
    "path": "n/a",
    "method": "n/a",
    "direction": "OTHER",
    "protocol": "AWS SDK v2",
    "connectionInfo": "Configured via S3ClientBuilder"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.security.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/api/AuthenticationApiResource.java",
    "mechanism": "REST",
    "name": "authenticate",
    "description": "Endpoint for user authentication via username/password.",
    "path": "/v1/authentication",
    "method": "POST",
    "direction": "BIDIRECTIONAL",
    "requestBody": "JSON object with 'username' and 'password'",
    "responseBody": "JSON object containing AuthenticatedUserData (roles, permissions, token)"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.security.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/api/UserDetailsApiResource.java",
    "mechanism": "REST",
    "name": "Fetch authenticated user details",
    "description": "Endpoint to retrieve details of the currently logged-in user.",
    "path": "/v1/userdetails",
    "method": "GET",
    "responseBody": "JSON representation of AuthenticatedOauthUserData",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.security.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/api/TwoFactorApiResource.java",
    "mechanism": "REST",
    "name": "Get OTP Delivery Methods",
    "description": "Endpoint to retrieve available OTP delivery methods for the user.",
    "path": "/v1/twofactor",
    "method": "GET",
    "responseBody": "JSON array of OTPDeliveryMethod"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.security.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/api/TwoFactorApiResource.java",
    "mechanism": "REST",
    "name": "Request OTP Token",
    "description": "Endpoint to request a new OTP token.",
    "path": "/v1/twofactor",
    "method": "POST",
    "requestBody": "Query parameters: deliveryMethod, extendedToken",
    "responseBody": "JSON object of OTPMetadata"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.security.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/api/TwoFactorApiResource.java",
    "mechanism": "REST",
    "name": "Validate OTP Token",
    "description": "Endpoint to validate an OTP token.",
    "path": "/v1/twofactor/validate",
    "method": "POST",
    "requestBody": "Query parameter: token",
    "responseBody": "JSON object of AccessTokenData"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.security.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/api/TwoFactorApiResource.java",
    "mechanism": "REST",
    "name": "Invalidate Token",
    "description": "Endpoint to invalidate a 2FA access token.",
    "path": "/v1/twofactor/invalidate",
    "method": "POST",
    "requestBody": "JSON body containing command details",
    "responseBody": "JSON object of CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.security.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/api/TwoFactorConfigurationApiResource.java",
    "mechanism": "REST",
    "name": "TwoFactor Configuration API",
    "description": "API endpoints for configuring Two-Factor Authentication settings.",
    "path": "/v1/twofactor/configure",
    "method": "GET, PUT",
    "requestBody": "JSON (for PUT)",
    "responseBody": "JSON",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.security.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/api/AuthenticationApiResourceSwagger.java",
    "mechanism": "REST",
    "name": "Authentication API Schemas",
    "description": "Defines the Swagger/OpenAPI schemas for the authentication REST API request and response bodies.",
    "direction": "BOTH",
    "requestBody": "PostAuthenticationRequest (username, password)",
    "responseBody": "PostAuthenticationResponse (userId, base64EncodedAuthenticationKey, roles, permissions)"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.security.filter",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/filter/TenantAwareTenantIdentifierFilter.java",
    "mechanism": "REST",
    "name": "Tenant Identifier Filter",
    "description": "Intercepts HTTP requests to the API to extract tenant headers and configure the security context.",
    "path": "/api/v1/",
    "method": "GET, POST, PUT, DELETE, OPTIONS",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.security.filter",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/filter/TwoFactorAuthenticationFilter.java",
    "mechanism": "REST",
    "name": "TwoFactorAuthenticationFilter",
    "description": "Intercepts HTTP requests to validate a custom Two-Factor Authentication header.",
    "path": "/*",
    "method": "ANY",
    "authentication": "Custom Header: Fineract-Platform-TFA-Token",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.security.filter.TenantAwareBasicAuthenticationFilter",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/filter/TenantAwareBasicAuthenticationFilter.java",
    "mechanism": "REST",
    "name": "Tenant Authentication Filter",
    "description": "Intercepts all HTTP requests to validate the 'Fineract-Platform-TenantId' header and Basic Auth credentials.",
    "path": "/*",
    "method": "ALL",
    "direction": "CONSUMER",
    "authentication": "Basic Auth + Tenant ID Header",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.security.service",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/service/SpringSecurityPlatformSecurityContext.java",
    "mechanism": "OTHER",
    "name": "Spring Security Context",
    "description": "Consumes the Spring Security Context to retrieve authentication details.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.security.service.CustomAuthenticationFailureHandler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/service/CustomAuthenticationFailureHandler.java",
    "mechanism": "REST",
    "name": "Authentication Failure Response",
    "description": "Handles HTTP responses for failed authentication attempts.",
    "path": "Dynamic (determined by defaultFailureUrl)",
    "method": "N/A (Response Handler)",
    "direction": "PRODUCER",
    "responseBody": "HTTP 401 Error or Redirect/Forward content",
    "protocol": "HTTP/HTTPS"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.sms.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/api/SmsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve All SMS",
    "description": "Endpoint to retrieve all SMS messages.",
    "path": "/v1/sms",
    "method": "GET",
    "responseBody": "JSON array of SmsData"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.sms.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/api/SmsApiResource.java",
    "mechanism": "REST",
    "name": "Create SMS",
    "description": "Endpoint to create a new SMS message.",
    "path": "/v1/sms",
    "method": "POST",
    "requestBody": "JSON object representing SMS details",
    "responseBody": "JSON object of CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.sms.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/api/SmsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve One SMS",
    "description": "Endpoint to retrieve a single SMS message by ID.",
    "path": "/v1/sms/{resourceId}",
    "method": "GET",
    "responseBody": "JSON object of SmsData"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.sms.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/api/SmsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve SMS by Status",
    "description": "Endpoint to retrieve SMS messages for a campaign filtered by status and date range.",
    "path": "/v1/sms/{campaignId}/messageByStatus",
    "method": "GET",
    "responseBody": "JSON Page of SmsData"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.sms.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/api/SmsApiResource.java",
    "mechanism": "REST",
    "name": "Update SMS",
    "description": "Endpoint to update an existing SMS message.",
    "path": "/v1/sms/{resourceId}",
    "method": "PUT",
    "requestBody": "JSON object with fields to update",
    "responseBody": "JSON object of CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.sms.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/api/SmsApiResource.java",
    "mechanism": "REST",
    "name": "Delete SMS",
    "description": "Endpoint to delete an SMS message.",
    "path": "/v1/sms/{resourceId}",
    "method": "DELETE",
    "responseBody": "JSON object of CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.sms.data.SmsMessageApiQueueResourceData",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/data/SmsMessageApiQueueResourceData.java",
    "mechanism": "REST",
    "name": "SMS Queue Resource",
    "description": "Defines the request body structure for the SMS queue API endpoint.",
    "path": "/queue",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON representation of SmsMessageApiQueueResourceData",
    "responseBody": "unknown"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.sms.data.SmsMessageApiReportResourceData",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/data/SmsMessageApiReportResourceData.java",
    "mechanism": "REST",
    "name": "SMS Report Resource",
    "description": "This class defines the request body structure for the SMS report endpoint.",
    "path": "/report",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON object containing externalIds and mifosTenantIdentifier"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.sms.scheduler.SmsMessageScheduledJobServiceImpl",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/scheduler/SmsMessageScheduledJobServiceImpl.java",
    "mechanism": "REST",
    "name": "SMS Gateway",
    "description": "Sends SMS message data to an intermediate SMS gateway server.",
    "path": "Dynamic (configured via SmsConfigUtils)",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON string of SmsMessageApiQueueResourceData collection",
    "responseBody": "String (checked for HttpStatus.ACCEPTED)",
    "protocol": "HTTP",
    "connectionInfo": "Configured via SmsConfigUtils"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.springbatch",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/springbatch/InputChannelInterceptor.java",
    "mechanism": "OTHER",
    "name": "Spring Integration Channel Interceptor",
    "description": "Intercepts messages in a Spring Integration flow to propagate Fineract context (Tenant/User) to the execution thread.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.springbatch",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/springbatch/ManagerConfig.java",
    "mechanism": "OTHER",
    "name": "outboundRequests",
    "description": "Spring Integration DirectChannel used for internal message routing of outbound requests within the batch manager context.",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.springbatch.OutputChannelInterceptor",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/springbatch/OutputChannelInterceptor.java",
    "mechanism": "OTHER",
    "name": "Spring Integration Channel Interceptor",
    "description": "Intercepts Spring Messaging channels to inject Fineract context into StepExecutionRequests.",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.springbatch.WorkerConfig",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/springbatch/WorkerConfig.java",
    "mechanism": "OTHER",
    "name": "inboundRequests",
    "description": "Spring Integration QueueChannel for internal message passing within the batch worker context.",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.springbatch.messagehandler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/springbatch/messagehandler/StepExecutionRequestHandler.java",
    "mechanism": "OTHER",
    "name": "StepExecutionRequest Handler",
    "description": "Consumes StepExecutionRequests to process batch partitions. Code comments explicitly state a JMS queue is used for message delivery, though the JMS listener annotation is likely configured externally or via Spring Integration XML.",
    "messageType": "StepExecutionRequest",
    "direction": "CONSUMER",
    "requestBody": "StepExecutionRequest object containing jobExecutionId, stepExecutionId, and stepName"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.springbatch.messagehandler.jms",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/springbatch/messagehandler/jms/JmsWorkerConfig.java",
    "mechanism": "JMS-QUEUE",
    "name": "Request Queue (Dynamic)",
    "description": "Listens for batch job requests on a JMS queue configured via application properties.",
    "queueOrTopicName": "fineractProperties.getRemoteJobMessageHandler().getJms().getRequestQueueName()",
    "direction": "CONSUMER",
    "protocol": "JMS",
    "connectionInfo": "Managed by jakarta.jms.ConnectionFactory"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.springbatch.messagehandler.jms",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/springbatch/messagehandler/jms/JmsBatchWorkerMessageListener.java",
    "mechanism": "JMS-QUEUE",
    "name": "BatchWorkerQueue",
    "description": "Consumes JMS messages representing partitioned batch step execution requests.",
    "messageType": "ContextualMessage wrapping StepExecutionRequest",
    "direction": "CONSUMER",
    "requestBody": "Serialized ContextualMessage containing batch parameters and step context",
    "responseBody": "None (Void)",
    "protocol": "JMS",
    "connectionInfo": "Configured via Spring JMS container factory (not visible in this class)"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.springbatch.messagehandler.jms",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/springbatch/messagehandler/jms/JmsBrokerConfiguration.java",
    "mechanism": "ACTIVEMQ-QUEUE",
    "name": "ActiveMQ Connection Factory",
    "description": "Configures the connection factory for the ActiveMQ message broker, enabling the application to produce and consume messages.",
    "direction": "BIDIRECTIONAL",
    "protocol": "ActiveMQ/JMS",
    "connectionInfo": "Configured via fineractProperties.getRemoteJobMessageHandler().getJms().getBrokerUrl()"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.springbatch.messagehandler.jms.JmsManagerConfig",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/springbatch/messagehandler/jms/JmsManagerConfig.java",
    "mechanism": "JMS-QUEUE",
    "name": "Outbound Request Queue",
    "description": "Sends messages to a JMS queue configured in application properties.",
    "queueOrTopicName": "Configured via fineractProperties.getRemoteJobMessageHandler().getJms().getRequestQueueName()",
    "messageType": "Spring Batch Integration Message",
    "direction": "PRODUCER",
    "connectionInfo": "jakarta.jms.ConnectionFactory"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.springbatch.messagehandler.kafka",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/springbatch/messagehandler/kafka/KafkaManagerConfig.java",
    "mechanism": "KAFKA-TOPIC",
    "name": "Remote Job Message Handler Topic",
    "description": "Publishes Spring Batch step execution context messages to a Kafka topic for remote processing.",
    "queueOrTopicName": "Configured via fineractProperties.getRemoteJobMessageHandler().getKafka().getTopic().getName()",
    "messageType": "ContextualMessage (serialized as JSON)",
    "direction": "PRODUCER",
    "connectionInfo": "Bootstrap servers configured via fineractProperties"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.springbatch.messagehandler.kafka",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/springbatch/messagehandler/kafka/KafkaWorkerConfig.java",
    "mechanism": "KAFKA-TOPIC",
    "name": "Kafka Consumer Configuration",
    "description": "Configures the infrastructure for consuming Kafka messages, including deserialization and connection settings.",
    "direction": "CONSUMER",
    "protocol": "Kafka",
    "connectionInfo": "Bootstrap servers configured via FineractProperties"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.springbatch.messagehandler.kafka",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/springbatch/messagehandler/kafka/KafkaRemoteMessageListener.java",
    "mechanism": "KAFKA-TOPIC",
    "name": "${fineract.remote-job-message-handler.kafka.topic.name}",
    "description": "Listens for batch step execution requests distributed via Kafka.",
    "queueOrTopicName": "${fineract.remote-job-message-handler.kafka.topic.name}",
    "messageType": "ContextualMessage",
    "direction": "CONSUMER",
    "requestBody": "ContextualMessage (JSON payload containing batch context)",
    "responseBody": "None (Void)",
    "protocol": "Kafka",
    "connectionInfo": "Configured via Spring Boot Kafka properties"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.springbatch.messagehandler.kafka",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/springbatch/messagehandler/kafka/KafkaJobTopicConfig.java",
    "mechanism": "KAFKA-TOPIC",
    "name": "Remote Job Topic",
    "description": "Configures the creation and administration of a Kafka topic used for remote job message handling.",
    "queueOrTopicName": "Configured via fineractProperties.getRemoteJobMessageHandler().getKafka().getTopic().getName()",
    "direction": "OTHER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.springbatch.messagehandler.spring",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/springbatch/messagehandler/spring/SpringEventWorkerConfig.java",
    "mechanism": "OTHER",
    "name": "inboundFlow",
    "description": "Spring Integration flow listening for internal application events",
    "path": "n/a",
    "method": "n/a",
    "queueOrTopicName": "inboundRequests",
    "messageType": "MessagingEvent",
    "direction": "PRODUCER",
    "requestBody": "org.springframework.integration.event.core.MessagingEvent",
    "responseBody": "n/a",
    "authentication": "n/a",
    "protocol": "Spring Application Events",
    "connectionInfo": "Internal Spring Context"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.springbatch.messagehandler.spring",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/springbatch/messagehandler/spring/SpringEventManagerConfig.java",
    "mechanism": "OTHER",
    "name": "outboundRequests",
    "description": "Spring Integration DirectChannel used as the source of messages for the flow.",
    "direction": "CONSUMER",
    "protocol": "Spring Integration Channel"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.springbatch.messagehandler.spring",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/springbatch/messagehandler/spring/SpringEventManagerConfig.java",
    "mechanism": "OTHER",
    "name": "ApplicationEventPublishingMessageHandler",
    "description": "Publishes messages as Spring Application Events.",
    "direction": "PRODUCER",
    "protocol": "Spring Application Event"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.sqlbuilder",
    "filepath": "fineract-provider/src/test/java/org/apache/fineract/infrastructure/sqlbuilder/SqlBuilderStepDefinitions.java",
    "mechanism": "OTHER",
    "name": "Cucumber Test Steps",
    "description": "Defines Gherkin step definitions for automated testing.",
    "path": "n/a",
    "method": "n/a",
    "direction": "OTHER"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.survey.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/api/LikelihoodApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAll",
    "description": "Endpoint to retrieve all likelihoods for a given PPI name.",
    "path": "/v1/likelihood/{ppiName}",
    "method": "GET",
    "direction": "PRODUCER",
    "requestBody": "None",
    "responseBody": "JSON array of LikelihoodData"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.survey.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/api/LikelihoodApiResource.java",
    "mechanism": "REST",
    "name": "retrieve",
    "description": "Endpoint to retrieve a specific likelihood by ID.",
    "path": "/v1/likelihood/{ppiName}/{likelihoodId}",
    "method": "GET",
    "direction": "PRODUCER",
    "requestBody": "None",
    "responseBody": "JSON object of LikelihoodData"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.survey.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/api/LikelihoodApiResource.java",
    "mechanism": "REST",
    "name": "update",
    "description": "Endpoint to update a specific likelihood.",
    "path": "/v1/likelihood/{ppiName}/{likelihoodId}",
    "method": "PUT",
    "direction": "PRODUCER",
    "requestBody": "JSON object representing likelihood updates",
    "responseBody": "JSON object of CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.survey.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/api/PovertyLineApiResource.java",
    "mechanism": "REST",
    "name": "Get Poverty Line by PPI Name",
    "description": "Retrieves poverty line data for a specific PPI name.",
    "path": "/v1/povertyLine/{ppiName}",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON (PpiPovertyLineData)",
    "authentication": "PlatformSecurityContext",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.survey.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/api/PovertyLineApiResource.java",
    "mechanism": "REST",
    "name": "Get Poverty Line by Likelihood",
    "description": "Retrieves poverty line data for a specific PPI name and likelihood ID.",
    "path": "/v1/povertyLine/{ppiName}/{likelihoodId}",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON (LikeliHoodPovertyLineData)",
    "authentication": "PlatformSecurityContext",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.survey.api.SurveyApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/api/SurveyApiResource.java",
    "mechanism": "REST",
    "name": "retrieveSurveys",
    "description": "Endpoint to retrieve all surveys.",
    "path": "/v1/survey",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON array of SurveyDataTableData",
    "authentication": "PlatformSecurityContext (OAuth/Basic inferred)"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.survey.api.SurveyApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/api/SurveyApiResource.java",
    "mechanism": "REST",
    "name": "retrieveSurvey",
    "description": "Endpoint to retrieve a specific survey by name.",
    "path": "/v1/survey/{surveyName}",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON object of SurveyDataTableData",
    "authentication": "PlatformSecurityContext"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.survey.api.SurveyApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/api/SurveyApiResource.java",
    "mechanism": "REST",
    "name": "createDatatableEntry",
    "description": "Endpoint to create a survey entry.",
    "path": "/v1/survey/{surveyName}/{apptableId}",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON payload defined by SurveyApiResourceSwagger.PostSurveySurveyNameApptableIdRequest",
    "responseBody": "JSON object of CommandProcessingResult",
    "authentication": "PlatformSecurityContext"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.survey.api.SurveyApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/api/SurveyApiResource.java",
    "mechanism": "REST",
    "name": "getClientSurveyOverview",
    "description": "Endpoint to get survey scores for a client.",
    "path": "/v1/survey/{surveyName}/{clientId}",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON array of ClientScoresOverview",
    "authentication": "PlatformSecurityContext"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.survey.api.SurveyApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/api/SurveyApiResource.java",
    "mechanism": "REST",
    "name": "getSurveyEntry",
    "description": "Endpoint to get a specific survey entry.",
    "path": "/v1/survey/{surveyName}/{clientId}/{entryId}",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON object (GenericResultsetData)",
    "authentication": "PlatformSecurityContext"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.survey.api.SurveyApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/api/SurveyApiResource.java",
    "mechanism": "REST",
    "name": "register",
    "description": "Endpoint to register a survey.",
    "path": "/v1/survey/register/{surveyName}/{apptable}",
    "method": "PUT",
    "direction": "PRODUCER",
    "requestBody": "JSON payload",
    "responseBody": "JSON object of CommandProcessingResult",
    "authentication": "PlatformSecurityContext"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.survey.api.SurveyApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/api/SurveyApiResource.java",
    "mechanism": "REST",
    "name": "deleteDatatableEntries",
    "description": "Endpoint to delete a survey entry.",
    "path": "/v1/survey/{surveyName}/{clientId}/{fulfilledId}",
    "method": "DELETE",
    "direction": "PRODUCER",
    "responseBody": "JSON object of CommandProcessingResult",
    "authentication": "PlatformSecurityContext"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.survey.api.SurveyApiResourceSwagger",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/api/SurveyApiResourceSwagger.java",
    "mechanism": "REST",
    "name": "Survey API Schemas",
    "description": "Defines the Swagger/OpenAPI schemas for the Survey API request and response bodies, used to generate API documentation.",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.infrastructure.survey.handler.UpdateLikelihoodCommandHandler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/handler/UpdateLikelihoodCommandHandler.java",
    "mechanism": "OTHER",
    "name": "LIKELIHOOD UPDATE Command",
    "description": "Registers a command handler for the 'LIKELIHOOD' entity and 'UPDATE' action within the Fineract command processing infrastructure.",
    "path": "LIKELIHOOD/UPDATE",
    "direction": "CONSUMER",
    "requestBody": "JsonCommand",
    "responseBody": "CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/SchedulerJobsTestResults.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to set up test data (clients, loans, savings) and trigger scheduler jobs.",
    "path": "/fineract-provider/api/v1/*",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "requestBody": "JSON payloads for creating entities (Clients, Loans, etc.)",
    "responseBody": "JSON responses containing entity IDs and status details",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/AccountingScenarioIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a client consuming the Fineract REST API to perform integration tests.",
    "path": "Various (dynamic paths for loans, accounts, etc.)",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Determined by Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/DueDateRespectiveLoanRepaymentScheduleTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client to the Fineract application to perform loan operations.",
    "path": "/fineract-provider/api/v1/*",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientSavingsIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Calls various Fineract REST endpoints to manage savings accounts, clients, and products.",
    "direction": "CONSUMER",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/RecurringDepositTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a client consuming the Fineract REST API to perform operations on Recurring Deposit accounts.",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured() and RequestSpecBuilder"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/BatchApiTest.java",
    "mechanism": "REST",
    "name": "Fineract Batch API",
    "description": "Invokes the batch processing endpoint to execute multiple commands in a single request.",
    "path": "/batches",
    "method": "POST",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientLoanIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes the Fineract platform REST API for integration testing.",
    "path": "/fineract-provider/api/v1/*",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/FixedDepositTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform operations on Fixed Deposit products and accounts.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanAccrualTransactionOnChargeSubmittedDateTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform integration tests.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanProductWithDownPaymentConfigurationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform integration tests.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientLoanCreditBalanceRefundandRepaymentTypeIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform integration tests.",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured() and Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsAccountTransactionsSearchIntegrationTest.java",
    "mechanism": "REST",
    "name": "Savings Account API",
    "description": "Integration tests consuming the Savings Account REST API to search transactions.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/AccountNumberPreferencesTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes the Fineract REST API to manage account number preferences and related entities (Clients, Loans, Savings, Groups, Centers).",
    "path": "/fineract-provider/api/v1/...",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/DelinquencyAndChargebackIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Interacts with the Fineract platform via HTTP REST API calls using RestAssured.",
    "path": "Various (via helpers)",
    "method": "GET, POST, PUT",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanReschedulingWithinCenterTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes the Fineract REST API to perform integration tests.",
    "path": "/fineract-provider/api/v1/*",
    "method": "GET, POST, PUT",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanReschedulingWithinCenterTest.java",
    "mechanism": "REST",
    "name": "Create Group",
    "description": "Explicit REST call to create a group within the test setup.",
    "path": "/fineract-provider/api/v1/groups",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON containing officeId, name, externalId, etc.",
    "responseBody": "JSON containing groupId"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanFixedPrincipalPercentageAmortizationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to create clients, products, and loans, and to retrieve repayment schedules.",
    "path": "/fineract-provider/api/v1/*",
    "method": "GET, POST",
    "direction": "PRODUCER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/ChargesTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes the Fineract REST API to perform CRUD operations on Charges.",
    "path": "/charges (inferred via ChargesHelper)",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanChargebackOnPaymentTypeRepaymentTransactionsTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform integration tests.",
    "path": "/fineract-provider/api/v1/*",
    "method": "GET, POST",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured() and RequestSpecBuilder"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanRescheduleWithAdvancePaymentTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform integration tests.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP",
    "connectionInfo": "Determined by Utils.initializeRESTAssured() (typically localhost)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/DisbursalAndRepaymentScheduleTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client to the Fineract application to perform integration tests.",
    "path": "Various (via Helper classes)",
    "method": "GET, POST, PUT",
    "direction": "PRODUCER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/NotesTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class consumes the Fineract REST API to perform operations on Clients, Groups, Loans, Savings, and Notes.",
    "path": "/clients, /groups, /loans, /savingsaccounts, /loanTransactions, /notes",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsInterestPostingJobIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract REST API",
    "description": "The test class acts as a REST client consuming the Fineract API to create resources (clients, accounts) and trigger jobs.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanAccrualTransactionReversalTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes the Fineract REST API to perform integration tests.",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanRepaymentRescheduleAtDisbursementTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform integration tests.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured() (likely localhost)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanApplicationScheduleMonthlyTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to create clients, loan products, and loan applications, and to retrieve repayment schedules.",
    "path": "Various (abstracted via helpers)",
    "method": "GET/POST",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/GroupLoanIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes the Fineract REST API to perform integration tests.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientLoanNonTrancheMultipleDisbursementsIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a client consuming the Fineract REST API to perform integration tests.",
    "path": "Various (e.g., /loans, /clients, /loanproducts)",
    "method": "GET, POST, PUT",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/SystemCodeTest.java",
    "mechanism": "REST",
    "name": "System Codes API",
    "description": "Consumes the application's REST API to manage system codes and code values.",
    "path": "/codes (inferred)",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "requestBody": "JSON",
    "responseBody": "JSON",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes the Fineract REST API to perform integration tests on Client resources.",
    "path": "/clients (and related sub-resources)",
    "method": "GET, POST, PUT",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/MinimumDaysBetweenDisbursalAndFirstRepaymentTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes the Fineract Platform REST API to perform integration tests.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/BatchRequestsIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes the Fineract REST API to perform integration tests.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/FundsIntegrationTest.java",
    "mechanism": "REST",
    "name": "Funds API",
    "description": "Consumes the Funds REST API to verify application behavior.",
    "path": "/funds (inferred)",
    "method": "GET, POST, PUT",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanAccountOverpaidDateStatusTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes Fineract REST APIs to perform integration tests.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanWithAdvancedPaymentAllocationIntegrationTests.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Interacts with the Fineract platform REST API to create and retrieve resources.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanLastRepaymentDetailsTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform integration tests.",
    "path": "Various (via helpers)",
    "method": "GET, POST",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/SkipRepaymentOnMonthFirstTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform integration tests.",
    "path": "Various (handled by helpers)",
    "method": "GET, POST, PUT",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Determined by Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientLoanChargeExternalIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform integration tests.",
    "path": "/fineract-provider/api/v1/*",
    "method": "GET, POST, PUT",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured() (typically localhost)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/ConcurrencyIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes Fineract REST APIs to perform integration tests for loan management.",
    "path": "/fineract-provider/api/v1/...",
    "method": "GET, POST, PUT",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanAccountArrearsAgeingCOBBusinessStepTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test acts as a REST client consuming the Fineract application APIs to create data and trigger jobs.",
    "path": "/fineract-provider/api/v1/*",
    "method": "GET, POST, PUT",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Determined by Utils.initializeRESTAssured() (typically localhost)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanDownPaymentTransactionTypeTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes Fineract REST APIs to perform integration tests on loan transactions.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/FinancialActivityAccountsTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes the Fineract REST API to test Financial Activity Account operations.",
    "path": "Determined by helper classes (e.g., /financialactivityaccounts)",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/IdempotencyTest.java",
    "mechanism": "REST",
    "name": "updateBusinessStepOrder",
    "description": "Calls the API to update the order of business steps for a specific job.",
    "path": "/jobs/{jobName}/steps (inferred)",
    "method": "PUT",
    "direction": "PRODUCER",
    "requestBody": "List<BusinessStep> JSON",
    "responseBody": "Empty (204) or Error JSON",
    "authentication": "Basic Auth"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/IdempotencyTest.java",
    "mechanism": "REST",
    "name": "getConfiguredBusinessStepsByJobName",
    "description": "Calls the API to retrieve the current configuration of business steps for a job.",
    "path": "/jobs/{jobName}/steps (inferred)",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JobBusinessStepConfigData JSON",
    "authentication": "Basic Auth"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanPayOffAddChargeWithRefundTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract application APIs to perform operations like creating clients, loans, and transactions.",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured() and RequestSpecBuilder"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanAccountFraudTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes the Fineract REST API to create clients, products, and loans, and to execute commands like 'markAsFraud'.",
    "path": "/fineract-provider/api/v1/loans/{loanId}",
    "method": "PUT",
    "direction": "PRODUCER",
    "requestBody": "JSON payload (e.g., { \"fraud\": \"true\" })",
    "responseBody": "JSON response containing command processing result",
    "authentication": "Basic Auth (Base64 encoded credentials)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanTransactionReverseReplayRelationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes Fineract REST APIs to perform integration tests on loan transactions.",
    "path": "/fineract-provider/api/v1/*",
    "method": "GET, POST",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/BusinessConfigurationApiTest.java",
    "mechanism": "REST",
    "name": "Business Configuration API",
    "description": "Consumes the Fineract Business Configuration REST API to retrieve and update job business steps.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanUndoChargeOffReverseExternalIdTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes Fineract REST APIs to perform loan and account operations during testing.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsAccountBalanceCheckAfterReversalTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes Fineract REST APIs to perform integration tests.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanProductTemplateTest.java",
    "mechanism": "REST",
    "name": "Get Loan Product Template",
    "description": "Consumes the Fineract API to retrieve the loan product template configuration. This is done via the `LoanProductHelper` utility.",
    "path": "/loanproducts/template",
    "method": "GET",
    "direction": "CONSUMER",
    "requestBody": "None",
    "responseBody": "GetLoanProductsTemplateResponse",
    "protocol": "HTTP",
    "connectionInfo": "Managed by LoanProductHelper"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/FlexibleSavingsInterestPostingIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Interacts with the Fineract platform via HTTP REST APIs to perform integration tests.",
    "path": "Various (managed by helper classes)",
    "method": "Various (GET, POST, PUT)",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/UserAdministrationTest.java",
    "mechanism": "REST",
    "name": "User Administration API",
    "description": "Consumes the application's REST API to manage users, roles, staff, and clients for testing purposes.",
    "path": "/users, /roles, /staff, /clients",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/RolesTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes Fineract REST APIs to manage Roles, Users, and Staff for testing purposes.",
    "path": "/roles, /users, /staff",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/ShareProductDatatableIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Interacts with the Fineract Core Banking Platform REST API to manage datatables and share products.",
    "path": "/datatables, /products/share",
    "method": "POST, GET",
    "direction": "BIDIRECTIONAL",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsAccountsExternalIdTest.java",
    "mechanism": "REST",
    "name": "Fineract Savings Account API",
    "description": "Interacts with the Fineract backend to manage savings accounts via HTTP requests.",
    "path": "/savingsaccounts (inferred)",
    "method": "POST, PUT, GET, DELETE",
    "direction": "PRODUCER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via IntegrationTest base class"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanProductUpdateApiTest.java",
    "mechanism": "REST",
    "name": "Loan Product API",
    "description": "Consumes the Fineract Loan Product REST API to create, retrieve, and update loan products.",
    "path": "/fineract-provider/api/v1/loanproducts (inferred)",
    "method": "POST, PUT, GET",
    "direction": "PRODUCER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via REST Assured RequestSpecification"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanDisbursalDateValidationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes the Fineract REST API to perform integration tests.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsInterestPostingIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Interacts with the Fineract application REST API to perform test operations.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientLoanAccountLockIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes Fineract REST APIs to perform integration tests.",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanProductWithRepaymentDueEventConfigurationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to create and manage loan products and related entities.",
    "path": "/loanproducts, /clients, /delinquencybuckets",
    "method": "POST, PUT, GET",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientAuditingIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes the Fineract REST API to perform integration tests.",
    "path": "/fineract-provider/api/v1/...",
    "method": "GET, POST, PUT",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/AuditIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes the Fineract REST API to perform actions and verify audit logs.",
    "path": "Various (handled by Helper classes)",
    "method": "GET, POST, PUT",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/SchedulerJobsTest.java",
    "mechanism": "REST",
    "name": "Fineract Scheduler API",
    "description": "Interacts with the Fineract platform's scheduler API to manage jobs, update statuses, and trigger executions.",
    "path": "/jobs (inferred)",
    "method": "GET, PUT, POST",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanApplicationRejectionForLoanProductWithPeriodicAccrualAccountingTest.java",
    "mechanism": "REST",
    "name": "Fineract REST API",
    "description": "The test acts as a REST client consuming Fineract APIs to create resources (accounts, clients, loans) and perform actions (reject loan).",
    "direction": "CONSUMER",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured() (typically localhost)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanCOBCatchUpInstanceModeIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class consumes REST APIs exposed by the Fineract application to test Loan COB Catch Up and Scheduler functionality.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP",
    "connectionInfo": "Determined by Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/InstanceModeIntegrationTest.java",
    "mechanism": "REST",
    "name": "Get Head Office",
    "description": "Retrieves the head office configuration via the OfficeHelper.",
    "path": "/offices (inferred)",
    "method": "GET",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/InstanceModeIntegrationTest.java",
    "mechanism": "REST",
    "name": "Create Client",
    "description": "Sends a request to create a new client via the ClientHelper.",
    "path": "/clients (inferred)",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "PostClientsRequest JSON",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/InstanceModeIntegrationTest.java",
    "mechanism": "REST",
    "name": "Run Scheduler Job",
    "description": "Triggers the execution of a specific scheduler job via the SchedulerJobHelper.",
    "path": "/jobs/{jobId} (inferred)",
    "method": "POST",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/ExternalServicesConfigurationTest.java",
    "mechanism": "REST",
    "name": "External Services Configuration API",
    "description": "Consumes REST endpoints to retrieve and update configuration settings for external services like S3 and SMTP.",
    "path": "/external-services/{serviceName}/configuration",
    "method": "GET, PUT",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/NotificationApiTest.java",
    "mechanism": "REST",
    "name": "Notification API",
    "description": "Consumes the Notification API to retrieve user notifications.",
    "path": "/notifications (implied via NotificationHelper)",
    "method": "GET",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/NotificationApiTest.java",
    "mechanism": "REST",
    "name": "User API",
    "description": "Consumes the User API to create a new user for testing purposes.",
    "path": "/users (implied via UserHelper)",
    "method": "POST",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/NotificationApiTest.java",
    "mechanism": "REST",
    "name": "Client API",
    "description": "Consumes the Client API to create a client and trigger a notification.",
    "path": "/clients (implied via ClientHelper)",
    "method": "POST",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/NotificationApiTest.java",
    "mechanism": "REST",
    "name": "Office API",
    "description": "Consumes the Office API to retrieve head office details.",
    "path": "/offices (implied via OfficeHelper)",
    "method": "GET",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanWithdrawnByApplicantIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes the Fineract REST API to perform integration tests on loan management features.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/HookIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Calls to the internal application API to manage Hooks and Offices.",
    "direction": "CONSUMER",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/HookIntegrationTest.java",
    "mechanism": "REST",
    "name": "Echo Webhook Service",
    "description": "External service used to verify webhook delivery.",
    "path": "/{uniqueId}/",
    "method": "GET",
    "direction": "CONSUMER",
    "connectionInfo": "http://echo-webhook.herokuapp.com:80"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/HookIntegrationTest.java",
    "mechanism": "WEBHOOK",
    "name": "Office Creation Webhook",
    "description": "The test configures the application to send a webhook to an external URL.",
    "direction": "PRODUCER",
    "requestBody": "JSON containing officeId"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/PaymentTypeIntegrationTest.java",
    "mechanism": "REST",
    "name": "Payment Types API",
    "description": "Consumes the Payment Types REST API to perform integration testing.",
    "path": "/paymenttypes (inferred)",
    "method": "POST, GET, PUT, DELETE",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/SearchResourcesTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes the Fineract REST API to perform search operations and client management during tests.",
    "path": "/search, /clients",
    "method": "GET, POST",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/OfficeIntegrationTest.java",
    "mechanism": "REST",
    "name": "Office Management API",
    "description": "Consumes REST endpoints to create, update, and retrieve Office resources.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/CurrenciesTest.java",
    "mechanism": "REST",
    "name": "Currency Management API",
    "description": "Interacts with the application's REST API to retrieve and update currency configurations.",
    "path": "/currencies (inferred from helper usage)",
    "method": "GET, PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON list of currency codes (for updates)",
    "responseBody": "JSON object representing currency domain or list of currencies",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsAccountsTest.java",
    "mechanism": "REST",
    "name": "submitApplication2",
    "description": "Submits a new savings account application to the Fineract backend.",
    "path": "/savingsaccounts",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "PostSavingsAccountsRequest",
    "responseBody": "PostSavingsAccountsResponse",
    "protocol": "HTTP",
    "connectionInfo": "Configured in IntegrationTest base class"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsAccountsTest.java",
    "mechanism": "REST",
    "name": "handleCommands6 (approve)",
    "description": "Sends a command to approve a specific savings account.",
    "path": "/savingsaccounts/{savingsId}?command=approve",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "PostSavingsAccountsAccountIdRequest",
    "responseBody": "PostSavingsAccountsAccountIdResponse",
    "protocol": "HTTP",
    "connectionInfo": "Configured in IntegrationTest base class"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsAccountsTest.java",
    "mechanism": "REST",
    "name": "handleCommands6 (activate)",
    "description": "Sends a command to activate a specific savings account.",
    "path": "/savingsaccounts/{savingsId}?command=activate",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "PostSavingsAccountsAccountIdRequest",
    "responseBody": "PostSavingsAccountsAccountIdResponse",
    "protocol": "HTTP",
    "connectionInfo": "Configured in IntegrationTest base class"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/ExternalEventConfigurationIntegrationTest.java",
    "mechanism": "REST",
    "name": "External Event Configuration API",
    "description": "Consumes the Fineract REST API to manage external event configurations via the ExternalEventConfigurationHelper.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanProductExternalIdTest.java",
    "mechanism": "REST",
    "name": "Loan Product API",
    "description": "Consumes the Fineract REST API to manage Loan Products.",
    "path": "/loanproducts (inferred via helpers)",
    "method": "POST, GET, PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON (Loan Product details)",
    "responseBody": "JSON (Loan Product details or ID)",
    "authentication": "Basic Auth (Base64 encoded key)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientCollateralIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract REST API",
    "description": "Consumes the Fineract application's REST APIs to perform integration tests via REST Assured.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/PasswordPreferencesIntegrationTest.java",
    "mechanism": "REST",
    "name": "Password Preferences API",
    "description": "Consumes the Fineract REST API to update and retrieve password preference settings.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/GlobalConfigInterestChargedFromDateSameAsDisbursalDateTest.java",
    "mechanism": "REST",
    "name": "Fineract Global Configuration API",
    "description": "Consumes the Fineract REST API to retrieve and update global configuration settings.",
    "path": "/configurations (inferred from helper usage)",
    "method": "GET, PUT",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/TemplateIntegrationTest.java",
    "mechanism": "REST",
    "name": "Templates API - List/Create",
    "description": "Endpoint to retrieve the list of templates or create a new template.",
    "path": "/fineract-provider/api/v1/templates",
    "method": "GET, POST",
    "direction": "CONSUMER",
    "requestBody": "JSON (for POST)",
    "responseBody": "JSON List or Resource ID",
    "authentication": "Basic Auth",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/TemplateIntegrationTest.java",
    "mechanism": "REST",
    "name": "Templates API - Get/Delete",
    "description": "Endpoint to retrieve or delete a specific template by ID.",
    "path": "/fineract-provider/api/v1/templates/{id}",
    "method": "GET, DELETE",
    "direction": "CONSUMER",
    "requestBody": "None",
    "responseBody": "JSON Object",
    "authentication": "Basic Auth",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanProductShortNameValidationTest.java",
    "mechanism": "REST",
    "name": "Loan Product API",
    "description": "Calls the application's REST API to create loan products.",
    "path": "/loanproducts (inferred)",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON object representing the loan product (principal, repayment schedule, short name, etc.)",
    "responseBody": "JSON response containing the resource ID or error details",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/CollateralProductIntegrationTest.java",
    "mechanism": "REST",
    "name": "Collateral Product API",
    "description": "Consumes REST APIs to create and update collateral products.",
    "path": "Determined by CollateralManagementHelper",
    "method": "POST/PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON",
    "responseBody": "JSON containing resource ID",
    "authentication": "Basic Auth (Base64 encoded key)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/CreditBureauConfigurationTest.java",
    "mechanism": "REST",
    "name": "Credit Bureau Configuration API",
    "description": "Consumes the Fineract REST API to create and update credit bureau configurations.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/WorkingDaysTest.java",
    "mechanism": "REST",
    "name": "Working Days API",
    "description": "Consumes the Fineract REST API to update working days configuration via helper classes.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/XBRLIntegrationTest.java",
    "mechanism": "REST",
    "name": "XBRL Taxonomy API",
    "description": "Consumes the Fineract REST API to retrieve XBRL taxonomies.",
    "path": "Unknown (encapsulated in XBRLIntegrationTestHelper)",
    "method": "GET",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/RatesTest.java",
    "mechanism": "REST",
    "name": "Rates API",
    "description": "Consumes the Fineract REST API to perform operations on Rates resources (Create, Read, Update).",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/ProductMixIntegrationTest.java",
    "mechanism": "REST",
    "name": "Product Mix API",
    "description": "Consumes REST APIs to retrieve product mix lists and templates via the ProductMixHelper.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/MakercheckerTest.java",
    "mechanism": "REST",
    "name": "Maker Checker List",
    "description": "Consumes the Maker Checker API to retrieve the inbox list via the MakercheckersHelper.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/SurveyIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract REST API",
    "description": "The test class acts as a REST client to interact with the Fineract application APIs.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/SwaggeruiTest.java",
    "mechanism": "REST",
    "name": "Swagger UI HTML",
    "description": "Accesses the Swagger UI index HTML page to verify it is being served.",
    "path": "/fineract-provider/swagger-ui/index.html",
    "method": "GET",
    "direction": "CONSUMER",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/SwaggeruiTest.java",
    "mechanism": "REST",
    "name": "OpenAPI JSON",
    "description": "Accesses the Fineract OpenAPI JSON definition to verify it is being served.",
    "path": "/fineract-provider/fineract.json",
    "method": "GET",
    "direction": "CONSUMER",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/ApiDocsTest.java",
    "mechanism": "REST",
    "name": "Legacy API Documentation Endpoint",
    "description": "Accesses the legacy API documentation HTML page to verify availability.",
    "path": "/fineract-provider/legacy-docs/apiLive.htm",
    "method": "GET",
    "direction": "CONSUMER",
    "requestBody": "None",
    "responseBody": "HTML/Text",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/ActuatorIntegrationTest.java",
    "mechanism": "REST",
    "name": "Actuator Info Endpoint",
    "description": "Consumes the Spring Boot Actuator info endpoint to retrieve build metadata via RestAssured.",
    "path": "/fineract-provider/actuator/info",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON containing git build info",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.AccountTransferTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/AccountTransferTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform setup, transfers, and verification.",
    "path": "/fineract-provider/api/v1/...",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Defined in Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.AdvancedPaymentAllocationLoanRepaymentScheduleTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/AdvancedPaymentAllocationLoanRepaymentScheduleTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client to the Fineract platform, invoking endpoints for loan management.",
    "path": "/fineract-provider/api/v1/loans/*",
    "method": "POST, GET",
    "requestBody": "JSON (PostLoansRequest, PostLoansLoanIdTransactionsRequest, etc.)",
    "responseBody": "JSON (PostLoansResponse, GetLoansLoanIdResponse)",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.BaseLoanIntegrationTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/BaseLoanIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform loan operations and verification.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.CenterIntegrationTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/CenterIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform integration tests.",
    "path": "/fineract-provider/api/v1/groups",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON object representing group details",
    "responseBody": "JSON object containing the created group ID",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.ClientExternalIdTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientExternalIdTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes the Fineract REST API to perform integration tests on Client resources.",
    "path": "/clients, /configurations",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Determined by Utils.initializeRESTAssured() (likely localhost)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.ClientLoanChargeRefundIntegrationTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientLoanChargeRefundIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Interacts with the Fineract Core Banking Platform API to perform loan operations.",
    "path": "/fineract-provider/api/v1/...",
    "method": "GET, POST, PUT",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.ClientLoanMultipleDisbursementsIntegrationTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientLoanMultipleDisbursementsIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes Fineract REST APIs to perform loan operations (create, approve, disburse, repay).",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.ClientUndoRejectAndWithdrawalIntegrationTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/ClientUndoRejectAndWithdrawalIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API Client Operations",
    "description": "Invokes Fineract REST APIs to create, reject, withdraw, and undo status changes for clients.",
    "path": "/fineract-provider/api/v1/clients",
    "method": "POST, PUT",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.CreditBureauTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/CreditBureauTest.java",
    "mechanism": "REST",
    "name": "WireMock Token Endpoint",
    "description": "Mocked external Credit Bureau authentication endpoint.",
    "path": "/token/",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "unknown",
    "responseBody": "JSON with access_token, expires_in, token_type, etc.",
    "protocol": "HTTP",
    "connectionInfo": "http://localhost:3558"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.CreditBureauTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/CreditBureauTest.java",
    "mechanism": "REST",
    "name": "WireMock Search Endpoint",
    "description": "Mocked external Credit Bureau search endpoint to find a user by ID.",
    "path": "/search/NRC213",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "unknown",
    "responseBody": "JSON with ResponseMessage and Data containing UniqueID",
    "protocol": "HTTP",
    "connectionInfo": "http://localhost:3558"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.CreditBureauTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/CreditBureauTest.java",
    "mechanism": "REST",
    "name": "WireMock Report Endpoint",
    "description": "Mocked external Credit Bureau report retrieval endpoint.",
    "path": "/report/123456",
    "method": "GET",
    "direction": "PRODUCER",
    "requestBody": "none",
    "responseBody": "JSON with BorrowerInfo, CreditScore, ActiveLoans, and WriteOffLoans",
    "protocol": "HTTP",
    "connectionInfo": "http://localhost:3558"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.DateValidationTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/DateValidationTest.java",
    "mechanism": "REST",
    "name": "Client Creation",
    "description": "Creates a new client via the API.",
    "path": "/clients",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON (PostClientsRequest)",
    "responseBody": "JSON (PostClientsResponse)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.DateValidationTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/DateValidationTest.java",
    "mechanism": "REST",
    "name": "Loan Product Creation",
    "description": "Creates a new loan product via the API.",
    "path": "/loanproducts",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON",
    "responseBody": "JSON"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.DateValidationTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/DateValidationTest.java",
    "mechanism": "REST",
    "name": "Loan Account Creation",
    "description": "Attempts to create a loan account (expected to fail in this test).",
    "path": "/loans",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON (Loan Application)",
    "responseBody": "JSON (Error Response)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.DateValidationTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/DateValidationTest.java",
    "mechanism": "REST",
    "name": "Interop Transaction Request",
    "description": "Posts an interoperation transaction request.",
    "path": "/interop/transactions",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON",
    "responseBody": "JSON"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.DateValidationTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/DateValidationTest.java",
    "mechanism": "REST",
    "name": "Fixed Deposit Product Creation",
    "description": "Creates a fixed deposit product.",
    "path": "/fixeddepositproducts",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON",
    "responseBody": "JSON"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.DateValidationTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/DateValidationTest.java",
    "mechanism": "REST",
    "name": "Fixed Deposit Application",
    "description": "Applies for a fixed deposit account (expected to fail in this test).",
    "path": "/fixeddepositaccounts",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON",
    "responseBody": "JSON (Error Response)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.DelinquencyBucketsIntegrationTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/DelinquencyBucketsIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform integration tests.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Determined by Utils.initializeRESTAssured() (typically localhost)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.ExternalIdSupportIntegrationTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/ExternalIdSupportIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a client consuming the Fineract REST API to perform integration tests.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (via Utils helper)",
    "connectionInfo": "Configured via RestAssured (localhost/port determined at runtime)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.GlobalConfigurationTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/GlobalConfigurationTest.java",
    "mechanism": "REST",
    "name": "Global Configuration API",
    "description": "The test class acts as a REST client consuming the Fineract Global Configuration API to read and update system settings.",
    "path": "/configurations (inferred via helper)",
    "method": "GET, PUT",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.GroupSavingsIntegrationTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/GroupSavingsIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform integration tests.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.GroupTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/GroupTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes Fineract REST APIs to perform integration tests on Groups, Clients, Staff, and Loans.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.LoanAccountBackdatedDisbursementTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanAccountBackdatedDisbursementTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Interacts with the running Fineract application instance to create clients, products, loans, and perform transactions.",
    "path": "/fineract-provider/api/v1/*",
    "method": "GET, POST, PUT",
    "direction": "BIDIRECTIONAL",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Determined by Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.LoanAccountCreditRefundPayoutWithChargebackTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanAccountCreditRefundPayoutWithChargebackTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes the Fineract REST API to perform integration tests.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.LoanAccountPaymentAllocationWithOverlappingDownPaymentInstallmentTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanAccountPaymentAllocationWithOverlappingDownPaymentInstallmentTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform integration tests.",
    "path": "Various (handled by helper classes)",
    "method": "GET, POST, PUT",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.LoanApplicationApprovalTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanApplicationApprovalTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes Fineract REST APIs to perform integration tests.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.LoanApplicationUndoLastTrancheTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanApplicationUndoLastTrancheTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform operations like creating clients, loans, and processing transactions.",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured() and Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.LoanAuditingIntegrationTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanAuditingIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test acts as a REST client consuming the Fineract API to perform integration tests.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.LoanCOBAccountLockCatchupInlineCOBTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanCOBAccountLockCatchupInlineCOBTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform setup, configuration, and verification steps.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.LoanCatchUpIntegrationTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanCatchUpIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes the Fineract application REST API to perform integration tests.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.LoanChargeOffAccountingTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanChargeOffAccountingTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform integration tests.",
    "path": "/fineract-provider/api/v1/*",
    "method": "VARIOUS",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Determined by Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.LoanChargeSpecificDueDateTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanChargeSpecificDueDateTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform integration tests.",
    "path": "/fineract-provider/api/v1/*",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.LoanDisbursementDetailsIntegrationTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanDisbursementDetailsIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Interacts with the Apache Fineract REST API to perform integration tests.",
    "path": "/fineract-provider/api/v1/*",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.LoanMultipleDisbursementRepaymentScheduleTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanMultipleDisbursementRepaymentScheduleTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Interacts with the Fineract platform via HTTP REST endpoints to perform integration tests.",
    "path": "Various (e.g., /loans, /clients, /jobs)",
    "method": "GET, POST, PUT",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.LoanPostChargeOffScenariosTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanPostChargeOffScenariosTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Interacts with the Fineract Core Banking Platform API to perform integration tests.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.LoanProductRepaymentStartDateConfigurationTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanProductRepaymentStartDateConfigurationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform integration tests.",
    "path": "/fineract-provider/api/v1/*",
    "method": "GET, POST, PUT",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.LoanProductWithAdvancedPaymentAllocationIntegrationTests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanProductWithAdvancedPaymentAllocationIntegrationTests.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming Fineract APIs to create and manage loan products and accounts.",
    "path": "/fineract-provider/api/v1/...",
    "method": "GET, POST, PUT",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.LoanRepaymentScheduleWithDownPaymentTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanRepaymentScheduleWithDownPaymentTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to create clients, products, and loans, and to retrieve loan schedules.",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured() and RequestSpecBuilder"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.LoanRescheduleOnDecliningBalanceLoanTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanRescheduleOnDecliningBalanceLoanTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform integration tests.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.LoanRescheduleRequestTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanRescheduleRequestTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the application's APIs to perform integration tests.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/JSON"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.LoanSpecificDueDateChargeAfterMaturityTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanSpecificDueDateChargeAfterMaturityTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform integration tests.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/JSON"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.LoanTransactionAuditingIntegrationTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanTransactionAuditingIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test acts as a REST client consuming the Fineract API to perform integration testing.",
    "path": "Various (dynamic paths handled by helper classes)",
    "method": "GET, POST, PUT",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via RestAssured (localhost)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.LoanTransactionChargebackTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanTransactionChargebackTest.java",
    "mechanism": "REST",
    "name": "Fineract REST API",
    "description": "The test class acts as a client consuming the Fineract REST API to perform loan operations.",
    "path": "/fineract-provider/api/v1/loans",
    "method": "GET, POST",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.LoanTransactionFullAmountChargebackForOverpaidLoanTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanTransactionFullAmountChargebackForOverpaidLoanTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes Fineract REST API endpoints to perform integration tests.",
    "path": "/fineract-provider/api/v1/*",
    "method": "GET, POST",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.LoanTransactionReverseReplayTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanTransactionReverseReplayTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a client consuming the Fineract Platform REST API to perform integration tests.",
    "path": "Various (configured via RequestSpecification)",
    "method": "Various (GET, POST, PUT)",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.LoanTransactionSummaryTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanTransactionSummaryTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform integration tests.",
    "path": "/fineract-provider/api/v1/*",
    "method": "GET, POST, PUT",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Determined by Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.LoanWithWaiveInterestAndWriteOffIntegrationTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/LoanWithWaiveInterestAndWriteOffIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform integration tests.",
    "path": "Various (abstracted via helpers)",
    "method": "GET, POST, PUT",
    "direction": "PRODUCER",
    "requestBody": "JSON",
    "responseBody": "JSON",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.RepaymentWithPostDatedChecksTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/RepaymentWithPostDatedChecksTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes the Fineract Platform REST API to perform integration tests.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.SavingsAccountTransactionDatatableIntegrationTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsAccountTransactionDatatableIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract application APIs to perform integration testing.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.SavingsAccountTransactionTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/SavingsAccountTransactionTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes the Fineract REST API to perform integration tests on savings accounts, clients, and system configurations.",
    "path": "Various (e.g., /savingsaccounts, /clients, /batches)",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.StaffTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/StaffTest.java",
    "mechanism": "REST",
    "name": "Staff API",
    "description": "Integration tests consuming the Staff REST API endpoints.",
    "direction": "CONSUMER",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.UndoLoanDisbursalWithDownPaymentIntegrationTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/UndoLoanDisbursalWithDownPaymentIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class consumes Fineract REST APIs via helper classes (ClientHelper, LoanTransactionHelper, etc.) to create clients, products, and perform loan operations.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.accounting",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/accounting/AccountingRuleIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract REST API",
    "description": "The test class acts as a REST client consuming the Fineract application APIs to perform setup and validation steps.",
    "path": "Various (delegated to Helper classes)",
    "method": "GET, POST",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.bulkimport.importhandler.client.ClientEntityImportHandlerTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/bulkimport/importhandler/client/ClientEntityImportHandlerTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Interacts with the Fineract application REST API to create prerequisites (Staff, Office, Codes) and perform bulk import operations.",
    "path": "/clients/downloadtemplate, /clients/uploadtemplate, /codes, /staff, /offices",
    "method": "POST",
    "direction": "BIDIRECTIONAL",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Determined by Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.bulkimport.importhandler.loan.LoanImportHandlerTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/bulkimport/importhandler/loan/LoanImportHandlerTest.java",
    "mechanism": "REST",
    "name": "Create Client",
    "description": "Creates a new client in the system to be used in the loan import test.",
    "path": "/fineract-provider/api/v1/clients",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON object containing officeId, firstname, lastname, externalId, etc.",
    "responseBody": "JSON object containing the clientId"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.bulkimport.importhandler.loan.LoanImportHandlerTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/bulkimport/importhandler/loan/LoanImportHandlerTest.java",
    "mechanism": "REST",
    "name": "Import Loan Template",
    "description": "Uploads the generated Excel file to the bulk import endpoint via a helper class.",
    "path": "unknown (encapsulated in LoanTransactionHelper)",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "Multipart file upload (Excel)",
    "responseBody": "Import Document ID"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.bulkimport.importhandler.office",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/bulkimport/importhandler/office/OfficeImportHandlerTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Interacts with the Fineract backend APIs to perform bulk import operations.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.bulkimport.importhandler.savings",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/bulkimport/importhandler/savings/SavingsImportHandlerTest.java",
    "mechanism": "REST",
    "name": "Create Client",
    "description": "Creates a new client in the system to be used in the import test.",
    "path": "/fineract-provider/api/v1/clients",
    "method": "POST",
    "requestBody": "JSON object containing officeId, legalFormId, firstname, lastname, externalId, etc.",
    "responseBody": "JSON object containing the clientId",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.bulkimport.importhandler.savings",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/bulkimport/importhandler/savings/SavingsImportHandlerTest.java",
    "mechanism": "REST",
    "name": "Import Savings Template",
    "description": "Uploads the populated Excel file to the bulk import endpoint (via SavingsAccountHelper).",
    "path": "/fineract-provider/api/v1/savings/import",
    "method": "POST",
    "requestBody": "Multipart file upload (Excel)",
    "responseBody": "Import Document ID",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.bulkimport.populator.client.ClientEntityWorkbookPopulatorTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/bulkimport/populator/client/ClientEntityWorkbookPopulatorTest.java",
    "mechanism": "REST",
    "name": "Fineract REST API",
    "description": "The test acts as a client consuming the Fineract REST API to create resources and download files.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP",
    "connectionInfo": "Determined by Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.bulkimport.populator.loan",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/bulkimport/populator/loan/LoanWorkbookPopulatorTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client, consuming various endpoints of the Fineract application to create test data and retrieve the bulk import workbook.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.bulkimport.populator.office",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/bulkimport/populator/office/OfficeWorkBookPopulatorTest.java",
    "mechanism": "REST",
    "name": "Office Workbook Retrieval",
    "description": "Fetches the Office bulk import Excel workbook from the application server.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.bulkimport.populator.savings",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/bulkimport/populator/savings/SavingsWorkbookPopulateTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test acts as a REST client consuming Fineract APIs to create entities and retrieve the workbook.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "connectionInfo": "Determined by Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.client",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/client/ClientSearchTest.java",
    "mechanism": "REST",
    "name": "Client API",
    "description": "Integration tests consuming the Client REST API to create and search for clients.",
    "path": "/clients",
    "method": "GET, POST",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.client",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/client/ClientTransactionTest.java",
    "mechanism": "REST",
    "name": "Fineract API Client Operations",
    "description": "Consumes Fineract REST APIs to create clients, manage charges, and handle transactions.",
    "path": "/clients, /charges, /clients/{clientId}/transactions",
    "method": "POST, GET",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.client",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/client/IntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API Client",
    "description": "Configures and provides a Retrofit-based client to interact with the Fineract REST API.",
    "path": "/fineract-provider/api/",
    "method": "N/A",
    "connectionInfo": "https://localhost:8443/fineract-provider/api/ (default, overridable via system property 'fineract.it.url')"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.client",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/client/ReportExportTest.java",
    "mechanism": "REST",
    "name": "runReportGetFile",
    "description": "Invokes the Fineract API to run a specific report and retrieve the file or trigger an export.",
    "path": "/runreports/{reportName}",
    "method": "GET",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via FineractClient"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.client",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/client/OfficeTest.java",
    "mechanism": "REST",
    "name": "createOffice",
    "description": "Creates a new office resource via the Fineract API.",
    "path": "/offices",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "PostOfficesRequest",
    "responseBody": "GetOfficesResponse (containing officeId)",
    "protocol": "HTTP",
    "connectionInfo": "Configured in IntegrationTest parent class"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.client",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/client/OfficeTest.java",
    "mechanism": "REST",
    "name": "retrieveOffices",
    "description": "Retrieves a list of office resources via the Fineract API.",
    "path": "/offices",
    "method": "GET",
    "direction": "CONSUMER",
    "requestBody": "None",
    "responseBody": "List<GetOfficesResponse>",
    "protocol": "HTTP",
    "connectionInfo": "Configured in IntegrationTest parent class"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.client",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/client/CallSubject.java",
    "mechanism": "REST",
    "name": "Retrofit Call Execution",
    "description": "Executes a Retrofit HTTP call to verify the response status.",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Managed by Retrofit configuration"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.client.ClientTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/client/ClientTest.java",
    "mechanism": "REST",
    "name": "Create Client",
    "description": "Calls the Fineract API to create a new client entity.",
    "path": "/clients",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "PostClientsRequest (JSON)",
    "responseBody": "Client ID (Long)",
    "protocol": "HTTP",
    "connectionInfo": "Configured in IntegrationTest base class"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.client.ClientTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/client/ClientTest.java",
    "mechanism": "REST",
    "name": "Retrieve Clients",
    "description": "Calls the Fineract API to retrieve a paginated list of clients.",
    "path": "/clients",
    "method": "GET",
    "direction": "CONSUMER",
    "requestBody": "None (Query Parameters)",
    "responseBody": "GetClientsResponse (JSON)",
    "protocol": "HTTP",
    "connectionInfo": "Configured in IntegrationTest base class"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.client.DocumentTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/client/DocumentTest.java",
    "mechanism": "REST",
    "name": "retrieveAllDocuments",
    "description": "Retrieves all documents for a specific entity (client).",
    "path": "/documents/clients/{clientId}",
    "method": "GET",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Fineract Client"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.client.DocumentTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/client/DocumentTest.java",
    "mechanism": "REST",
    "name": "createDocument",
    "description": "Uploads a new document for a specific entity.",
    "path": "/documents/clients/{clientId}",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "Multipart/form-data (file, name, description)",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Fineract Client"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.client.DocumentTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/client/DocumentTest.java",
    "mechanism": "REST",
    "name": "getDocument",
    "description": "Retrieves metadata for a specific document.",
    "path": "/documents/clients/{clientId}/{documentId}",
    "method": "GET",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Fineract Client"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.client.DocumentTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/client/DocumentTest.java",
    "mechanism": "REST",
    "name": "downloadFile",
    "description": "Downloads the binary file content of a document.",
    "path": "/documents/clients/{clientId}/{documentId}/attachment",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "Binary stream (image/jpeg)",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Fineract Client"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.client.DocumentTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/client/DocumentTest.java",
    "mechanism": "REST",
    "name": "updateDocument",
    "description": "Updates metadata of an existing document.",
    "path": "/documents/clients/{clientId}/{documentId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Fineract Client"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.client.DocumentTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/client/DocumentTest.java",
    "mechanism": "REST",
    "name": "deleteDocument",
    "description": "Deletes a specific document.",
    "path": "/documents/clients/{clientId}/{documentId}",
    "method": "DELETE",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Fineract Client"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.client.ImageTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/client/ImageTest.java",
    "mechanism": "REST",
    "name": "Images API",
    "description": "Consumes the Fineract Images API to manage entity images.",
    "path": "v1/{entityType}/{entityId}/images",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.client.ImageTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/client/ImageTest.java",
    "mechanism": "REST",
    "name": "ImagesApiWithHeadersForTest",
    "description": "Defines a Retrofit client interface to test specific Accept headers.",
    "path": "v1/{entityType}/{entityId}/images",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.client.ReportsTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/client/ReportsTest.java",
    "mechanism": "REST",
    "name": "Run Reports API",
    "description": "Client calls to the Fineract Run Reports API to list and execute reports.",
    "path": "/fineract-provider/api/v1/runreports/...",
    "method": "GET",
    "direction": "CONSUMER",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured() and fineract().baseURL()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.client.StaffTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/client/StaffTest.java",
    "mechanism": "REST",
    "name": "Staff API Client",
    "description": "Consumes the Fineract Staff REST API to create and retrieve staff members via the generated client wrapper.",
    "path": "/staff",
    "method": "POST, GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.cob.CobPartitioningTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/cob/CobPartitioningTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test acts as a REST client interacting with the Fineract platform API to create resources and trigger processes.",
    "path": "/fineract-provider/api/v1/...",
    "method": "GET/POST/PUT/DELETE",
    "direction": "BIDIRECTIONAL",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/ClientHelper.java",
    "mechanism": "REST",
    "name": "Client API",
    "description": "Interacts with the Fineract Client API to manage client resources.",
    "path": "/fineract-provider/api/v1/clients",
    "method": "POST, GET, PUT, DELETE",
    "direction": "CONSUMER",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/ClientHelper.java",
    "mechanism": "REST",
    "name": "Client Search API",
    "description": "Interacts with the Client Search API.",
    "path": "/fineract-provider/api/v1/clientSearchV2",
    "method": "POST",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/ClientHelper.java",
    "mechanism": "REST",
    "name": "Client Charges API",
    "description": "Interacts with the Client Charges API to add, pay, or waive charges.",
    "path": "/fineract-provider/api/v1/clients/{clientId}/charges",
    "method": "POST, GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/ClientHelper.java",
    "mechanism": "REST",
    "name": "Client Transactions API",
    "description": "Interacts with the Client Transactions API to retrieve or undo transactions.",
    "path": "/fineract-provider/api/v1/clients/{clientId}/transactions",
    "method": "GET, POST",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/ClientHelper.java",
    "mechanism": "REST",
    "name": "Bulk Import API",
    "description": "Interacts with the Bulk Import API for downloading templates and uploading files.",
    "path": "/fineract-provider/api/v1/clients/downloadtemplate, /fineract-provider/api/v1/clients/uploadtemplate",
    "method": "GET, POST",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/ProvisioningIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes the Fineract Platform REST APIs to perform integration testing.",
    "path": "Various (configured via RequestSpecification)",
    "method": "Various (GET, POST, PUT, DELETE)",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CreditBureauConfigurationHelper.java",
    "mechanism": "REST",
    "name": "Get Credit Bureau Configuration",
    "description": "Retrieves configuration details for a specific credit bureau.",
    "path": "/fineract-provider/api/v1/CreditBureauConfiguration/config/{creditBureauId}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "List of configuration maps"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CreditBureauConfigurationHelper.java",
    "mechanism": "REST",
    "name": "Create Credit Bureau Configuration",
    "description": "Creates a new configuration entry for a credit bureau.",
    "path": "/fineract-provider/api/v1/CreditBureauConfiguration/configuration/{creditBureauId}",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON with configkey, value, description",
    "responseBody": "JSON with resourceId"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CreditBureauConfigurationHelper.java",
    "mechanism": "REST",
    "name": "Update Credit Bureau Configuration",
    "description": "Updates an existing credit bureau configuration.",
    "path": "/fineract-provider/api/v1/CreditBureauConfiguration/configuration/{ConfigurationId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON with configkey (optional), value",
    "responseBody": "JSON with changes"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CreditBureauConfigurationHelper.java",
    "mechanism": "REST",
    "name": "Get Organization Credit Bureau Configuration",
    "description": "Retrieves the organization-level credit bureau configuration.",
    "path": "/fineract-provider/api/v1/CreditBureauConfiguration/organisationCreditBureau",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CreditBureauConfigurationHelper.java",
    "mechanism": "REST",
    "name": "Add Organization Credit Bureau",
    "description": "Adds a credit bureau mapping to the organization.",
    "path": "/fineract-provider/api/v1/CreditBureauConfiguration/organisationCreditBureau/{creditBureauId}",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON with alias, isActive"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CreditBureauConfigurationHelper.java",
    "mechanism": "REST",
    "name": "Update Organization Credit Bureau",
    "description": "Updates the organization's credit bureau mapping.",
    "path": "/fineract-provider/api/v1/CreditBureauConfiguration/organisationCreditBureau",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON with creditBureauId, isActive"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/NotesHelper.java",
    "mechanism": "REST",
    "name": "Client Notes API",
    "description": "API endpoints for managing notes on Clients",
    "path": "/fineract-provider/api/v1/clients/{clientId}/notes",
    "method": "POST, GET, PUT, DELETE",
    "direction": "CONSUMER",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/NotesHelper.java",
    "mechanism": "REST",
    "name": "Group Notes API",
    "description": "API endpoints for managing notes on Groups",
    "path": "/fineract-provider/api/v1/groups/{groupId}/notes",
    "method": "POST, GET, PUT, DELETE",
    "direction": "CONSUMER",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/NotesHelper.java",
    "mechanism": "REST",
    "name": "Loan Notes API",
    "description": "API endpoints for managing notes on Loans",
    "path": "/fineract-provider/api/v1/loans/{loanId}/notes",
    "method": "POST, GET, PUT, DELETE",
    "direction": "CONSUMER",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/NotesHelper.java",
    "mechanism": "REST",
    "name": "Loan Transaction Notes API",
    "description": "API endpoints for managing notes on Loan Transactions",
    "path": "/fineract-provider/api/v1/loanTransactions/{loanTransactionId}/notes",
    "method": "POST, GET, PUT, DELETE",
    "direction": "CONSUMER",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/NotesHelper.java",
    "mechanism": "REST",
    "name": "Savings Notes API",
    "description": "API endpoints for managing notes on Savings Accounts",
    "path": "/fineract-provider/api/v1/savings/{savingsId}/notes",
    "method": "POST, GET",
    "direction": "CONSUMER",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/ClientChargesTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes the Fineract REST API to perform integration tests.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CalendarHelper.java",
    "mechanism": "REST",
    "name": "Create Group Calendar",
    "description": "Creates a calendar for a group via HTTP POST.",
    "path": "/fineract-provider/api/v1/groups/{groupId}/calendars",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON object with frequency, interval, repeatsOnDay, startDate, etc.",
    "responseBody": "JSON object containing resourceId",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CalendarHelper.java",
    "mechanism": "REST",
    "name": "Update Group Calendar",
    "description": "Updates a calendar for a group via HTTP PUT.",
    "path": "/fineract-provider/api/v1/groups/{groupId}/calendars/{calendarId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON object with frequency, interval, repeatsOnDay, startDate, etc.",
    "responseBody": "JSON object containing resourceId",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CalendarHelper.java",
    "mechanism": "REST",
    "name": "Get Group Details",
    "description": "Retrieves group details to verify calendar creation.",
    "path": "/fineract-provider/api/v1/groups/{groupId}?associations=all",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON object containing group details and collectionMeetingCalendar",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CalendarHelper.java",
    "mechanism": "REST",
    "name": "Create Center Calendar",
    "description": "Creates a calendar for a center via HTTP POST.",
    "path": "/fineract-provider/api/v1/centers/{centerId}/calendars",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON object with frequency, interval, repeatsOnDay, startDate, etc.",
    "responseBody": "JSON object containing resourceId",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CalendarHelper.java",
    "mechanism": "REST",
    "name": "Update Center Calendar",
    "description": "Updates a calendar for a center via HTTP PUT.",
    "path": "/fineract-provider/api/v1/centers/{centerId}/calendars/{calendarId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON object with newMeetingDate, presentMeetingDate, reschedulebasedOnMeetingDates",
    "responseBody": "JSON object containing resourceId",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/ExternalAssetOwnerHelper.java",
    "mechanism": "REST",
    "name": "External Asset Owners API",
    "description": "Interacts with the Fineract External Asset Owners REST API to manage asset transfers.",
    "path": "/external-asset-owners/*",
    "method": "GET/POST",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via IntegrationTest base class"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/WorkingDaysHelper.java",
    "mechanism": "REST",
    "name": "Working Days API",
    "description": "API endpoint to manage working days configuration.",
    "path": "/fineract-provider/api/v1/workingdays",
    "method": "PUT",
    "direction": "PRODUCER",
    "requestBody": "JSON object with recurrence rule, locale, and repayment reschedule type",
    "responseBody": "JSON object containing resource ID or error details"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/WorkingDaysHelper.java",
    "mechanism": "REST",
    "name": "Working Days API",
    "description": "API endpoint to retrieve working days configuration.",
    "path": "/fineract-provider/api/v1/workingdays",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON object containing current working days configuration"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/PaymentTypeHelper.java",
    "mechanism": "REST",
    "name": "Payment Types API",
    "description": "Interacts with the Fineract Payment Types REST API to perform CRUD operations.",
    "path": "/fineract-provider/api/v1/paymenttypes",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Defined in Utils.TENANT_IDENTIFIER and base URL configuration"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/BusinessStepConfigurationHelper.java",
    "mechanism": "REST",
    "name": "Get Configured Business Steps",
    "description": "Retrieves the configured business steps for a specific job.",
    "path": "/fineract-provider/api/v1/jobs/{jobName}/steps",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JobBusinessStepConfigData JSON"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/BusinessStepConfigurationHelper.java",
    "mechanism": "REST",
    "name": "Get Available Business Steps",
    "description": "Retrieves the available business steps for a specific job.",
    "path": "/fineract-provider/api/v1/jobs/{jobName}/available-steps",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JobBusinessStepDetail JSON"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/BusinessStepConfigurationHelper.java",
    "mechanism": "REST",
    "name": "Update Business Steps",
    "description": "Updates the order or configuration of business steps for a job.",
    "path": "/fineract-provider/api/v1/jobs/{jobName}/steps",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON containing list of BusinessStep",
    "responseBody": "Empty or ApiParameterError on failure"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/IdempotencyHelper.java",
    "mechanism": "REST",
    "name": "Get Configured Business Steps",
    "description": "Retrieves the configured business steps for a specific job.",
    "path": "/fineract-provider/api/v1/jobs/{jobName}/steps",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/IdempotencyHelper.java",
    "mechanism": "REST",
    "name": "Get Available Business Steps",
    "description": "Retrieves the available business steps for a specific job.",
    "path": "/fineract-provider/api/v1/jobs/{jobName}/available-steps",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/IdempotencyHelper.java",
    "mechanism": "REST",
    "name": "Update Business Steps",
    "description": "Updates the business steps configuration for a job, requiring an Idempotency-Key header.",
    "path": "/fineract-provider/api/v1/jobs/{jobName}/steps",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON representation of BusinessStepWrapper",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/HolidayHelper.java",
    "mechanism": "REST",
    "name": "Create Holiday",
    "description": "Creates a new holiday resource via the API.",
    "path": "/fineract-provider/api/v1/holidays",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON object with offices, locale, dateFormat, name, dates, etc.",
    "responseBody": "JSON object containing resourceId",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/HolidayHelper.java",
    "mechanism": "REST",
    "name": "Activate Holiday",
    "description": "Activates an existing holiday resource.",
    "path": "/fineract-provider/api/v1/holidays/{holidayID}?command=activate",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "Empty JSON object",
    "responseBody": "JSON object containing resourceId",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/HolidayHelper.java",
    "mechanism": "REST",
    "name": "Get Holiday By ID",
    "description": "Retrieves details of a specific holiday.",
    "path": "/fineract-provider/api/v1/holidays/{holidayID}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON object representing the holiday details",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/BusinessDateHelper.java",
    "mechanism": "REST",
    "name": "Update Business Date",
    "description": "Updates the business date configuration for a specific type.",
    "path": "/fineract-provider/api/v1/businessdate",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON object containing type, date, dateFormat, and locale",
    "responseBody": "JSON object with change details"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/BusinessDateHelper.java",
    "mechanism": "REST",
    "name": "Get Business Date By Type",
    "description": "Retrieves the business date configuration for a specific type.",
    "path": "/fineract-provider/api/v1/businessdate/{type}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "BusinessDateResponse JSON"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/BusinessDateHelper.java",
    "mechanism": "REST",
    "name": "Get All Business Dates",
    "description": "Retrieves all business date configurations.",
    "path": "/fineract-provider/api/v1/businessdate",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "List of BusinessDateResponse JSON"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/PasswordPreferencesHelper.java",
    "mechanism": "REST",
    "name": "Password Preferences API",
    "description": "API endpoint to manage password validation policies.",
    "path": "/fineract-provider/api/v1/passwordpreferences",
    "method": "PUT, GET",
    "direction": "CONSUMER",
    "requestBody": "JSON containing validationPolicyId",
    "responseBody": "JSON object with preference details or ID",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/SurveyHelper.java",
    "mechanism": "REST",
    "name": "Fulfil Survey API",
    "description": "Endpoint to submit a filled PPI Kenya 2009 survey.",
    "path": "/fineract-provider/api/v1/survey/ppi_kenya_2009/clientId",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON object containing survey answers (e.g., ppi_household_members_cd_q1_householdmembers)",
    "responseBody": "JSON object containing the created resource ID (clientId)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/SurveyHelper.java",
    "mechanism": "REST",
    "name": "Retrieve Survey API",
    "description": "Endpoint to retrieve a specific survey entry by ID.",
    "path": "/fineract-provider/api/v1/Survey/ppi_kenya_2009/clientid/entryId{generatedClientID}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON object containing the survey entry details, specifically the 'id'"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CreditBureauIntegrationHelper.java",
    "mechanism": "REST",
    "name": "Get Credit Report API",
    "description": "Endpoint to retrieve a credit report configuration/data.",
    "path": "/fineract-provider/api/v1/creditBureauIntegration/creditReport",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON object containing creditBureauID and NRC",
    "responseBody": "JSON response from server",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CreditBureauIntegrationHelper.java",
    "mechanism": "REST",
    "name": "Upload Credit Report API",
    "description": "Endpoint to upload a credit report file.",
    "path": "/fineract-provider/api/v1/creditBureauIntegration/addCreditReport",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "Multipart/form-data containing file and creditBureauId query param",
    "responseBody": "String response from server",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/ExternalServicesConfigurationHelper.java",
    "mechanism": "REST",
    "name": "Get External Service Configuration",
    "description": "Retrieves configuration for a specific external service via the Fineract API.",
    "path": "/fineract-provider/api/v1/externalservice/{serviceName}",
    "method": "GET",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Defined by RequestSpecification context"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/ExternalServicesConfigurationHelper.java",
    "mechanism": "REST",
    "name": "Update External Service Configuration",
    "description": "Updates configuration parameters for a specific external service via the Fineract API.",
    "path": "/fineract-provider/api/v1/externalservice/{serviceName}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON object containing configuration key-value pairs",
    "protocol": "HTTP",
    "connectionInfo": "Defined by RequestSpecification context"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/TaxGroupHelper.java",
    "mechanism": "REST",
    "name": "Create Tax Group",
    "description": "API endpoint to create a new tax group definition.",
    "path": "/fineract-provider/api/v1/taxes/group",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON object containing name, locale, dateFormat, and list of taxComponents",
    "responseBody": "JSON object containing the resourceId of the created tax group"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/TaxComponentHelper.java",
    "mechanism": "REST",
    "name": "Create Tax Component",
    "description": "API endpoint to create a new tax component definition in the system.",
    "path": "/fineract-provider/api/v1/taxes/component",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON object containing name, percentage, locale, dateFormat, startDate, and optional credit account details.",
    "responseBody": "JSON object containing the resourceId of the created tax component."
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/NotificationHelper.java",
    "mechanism": "REST",
    "name": "Get Notifications",
    "description": "Fetches notifications for the current tenant.",
    "path": "/fineract-provider/api/v1/notifications",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "GetNotificationsResponse (JSON)",
    "protocol": "HTTP",
    "connectionInfo": "Defined in NOTIFICATION_API_URL"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/BusinessStepHelper.java",
    "mechanism": "REST",
    "name": "updateJobBusinessStepConfig",
    "description": "Updates the business step configuration for a specific job via the Fineract API client.",
    "path": "/jobs/{jobName}/steps (inferred from client usage)",
    "method": "PUT",
    "direction": "PRODUCER",
    "requestBody": "UpdateBusinessStepConfigRequest containing a list of BusinessStep objects",
    "responseBody": "Response object (likely void or status confirmation)",
    "authentication": "Unknown (handled by IntegrationTest parent)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.AuditHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/AuditHelper.java",
    "mechanism": "REST",
    "name": "Audit API",
    "description": "Retrieves audit logs from the Fineract platform.",
    "path": "/fineract-provider/api/v1/audits",
    "method": "GET",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Defined in AUDIT_BASE_URL constant"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.AuditHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/AuditHelper.java",
    "mechanism": "REST",
    "name": "Audit Search Template API",
    "description": "Retrieves the search template for audits.",
    "path": "/fineract-provider/api/v1/audits/searchtemplate",
    "method": "GET",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Defined in AUDITSEARCH_BASE_URL constant"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.BatchHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/BatchHelper.java",
    "mechanism": "REST",
    "name": "Batch API",
    "description": "The class sends batch requests to the Fineract Batch API endpoint.",
    "path": "/fineract-provider/api/v1/batches",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "List<BatchRequest> (JSON)",
    "responseBody": "List<BatchResponse> (JSON)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.BatchHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/BatchHelper.java",
    "mechanism": "REST",
    "name": "Clients API (via Batch)",
    "description": "Constructs payloads to interact with the Clients API.",
    "path": "v1/clients",
    "method": "POST/PUT",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.BatchHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/BatchHelper.java",
    "mechanism": "REST",
    "name": "Loans API (via Batch)",
    "description": "Constructs payloads to interact with the Loans API.",
    "path": "v1/loans",
    "method": "POST/GET/PUT",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.BatchHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/BatchHelper.java",
    "mechanism": "REST",
    "name": "Savings API (via Batch)",
    "description": "Constructs payloads to interact with the Savings Accounts API.",
    "path": "v1/savingsaccounts",
    "method": "POST/GET",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.BatchHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/BatchHelper.java",
    "mechanism": "REST",
    "name": "Datatables API (via Batch)",
    "description": "Constructs payloads to interact with the Datatables API.",
    "path": "v1/datatables",
    "method": "POST/GET/PUT/DELETE",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.BatchHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/BatchHelper.java",
    "mechanism": "REST",
    "name": "Reschedule Loans API (via Batch)",
    "description": "Constructs payloads to interact with the Reschedule Loans API.",
    "path": "v1/rescheduleloans",
    "method": "POST",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.CenterHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CenterHelper.java",
    "mechanism": "REST",
    "name": "Centers API",
    "description": "API for managing Center resources",
    "path": "/fineract-provider/api/v1/centers",
    "method": "GET, POST",
    "direction": "CONSUMER",
    "requestBody": "JSON (Center details)",
    "responseBody": "JSON (Center details or list)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.CenterHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CenterHelper.java",
    "mechanism": "REST",
    "name": "Center Details API",
    "description": "API for retrieving, updating, or deleting a specific Center",
    "path": "/fineract-provider/api/v1/centers/{id}",
    "method": "GET, PUT, DELETE",
    "direction": "CONSUMER",
    "requestBody": "JSON (Update details)",
    "responseBody": "JSON (Center details)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.CenterHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CenterHelper.java",
    "mechanism": "REST",
    "name": "Associate Groups Command",
    "description": "Command to associate groups with a center",
    "path": "/fineract-provider/api/v1/centers/{id}?command=associateGroups",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON (List of group IDs)",
    "responseBody": "JSON (Changes)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.CenterHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CenterHelper.java",
    "mechanism": "REST",
    "name": "Activate Center Command",
    "description": "Command to activate a center",
    "path": "/fineract-provider/api/v1/centers/{id}?command=activate",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON (Activation date, locale)",
    "responseBody": "JSON (Changes)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.CenterHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CenterHelper.java",
    "mechanism": "REST",
    "name": "Assign Staff Command (Groups API)",
    "description": "Command to assign staff to a group/center",
    "path": "/fineract-provider/api/v1/groups/{groupId}?command=assignStaff",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON (Staff ID)",
    "responseBody": "JSON (Changes)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.CenterHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CenterHelper.java",
    "mechanism": "REST",
    "name": "Unassign Staff Command (Groups API)",
    "description": "Command to unassign staff from a group/center",
    "path": "/fineract-provider/api/v1/groups/{groupId}?command=unassignStaff",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON (Staff ID)",
    "responseBody": "JSON (Changes)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.CollateralManagementHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CollateralManagementHelper.java",
    "mechanism": "REST",
    "name": "Create Client Collateral",
    "description": "Creates a new collateral entry for a specific client.",
    "path": "/fineract-provider/api/v1/clients/{clientId}/collaterals",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON object with collateralId, quantity, locale",
    "responseBody": "JSON object containing resourceId"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.CollateralManagementHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CollateralManagementHelper.java",
    "mechanism": "REST",
    "name": "Get Client Collateral",
    "description": "Retrieves details of a specific collateral entry for a client.",
    "path": "/fineract-provider/api/v1/clients{clientId}/collaterals/{collateralId}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON object containing quantity"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.CollateralManagementHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CollateralManagementHelper.java",
    "mechanism": "REST",
    "name": "Create Collateral Product",
    "description": "Creates a new collateral product definition.",
    "path": "/fineract-provider/api/v1/collateral-management",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON object with name, currency, unitType, quality, pctToBase, basePrice, locale",
    "responseBody": "JSON object containing resourceId"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.CollateralManagementHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CollateralManagementHelper.java",
    "mechanism": "REST",
    "name": "Update Collateral Product",
    "description": "Updates an existing collateral product definition.",
    "path": "/fineract-provider/api/v1/collateral-management/{collateralId}",
    "method": "PUT",
    "direction": "PRODUCER",
    "requestBody": "JSON object with updated product fields",
    "responseBody": "JSON object containing resourceId"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.CollateralManagementHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CollateralManagementHelper.java",
    "mechanism": "REST",
    "name": "Update Client Collateral",
    "description": "Updates an existing collateral entry for a client.",
    "path": "/fineract-provider/api/v1/clients/{clientId}/collaterals/{collateralId}",
    "method": "PUT",
    "direction": "PRODUCER",
    "requestBody": "JSON object with quantity, locale",
    "responseBody": "JSON object containing changes"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.CurrenciesHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CurrenciesHelper.java",
    "mechanism": "REST",
    "name": "Retrieve Currencies",
    "description": "Fetches currency configurations from the Fineract platform.",
    "path": "/fineract-provider/api/v1/currencies",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON object containing 'selectedCurrencyOptions' and 'currencyOptions' arrays."
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.CurrenciesHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/CurrenciesHelper.java",
    "mechanism": "REST",
    "name": "Update Currencies",
    "description": "Updates the list of selected currencies for the tenant.",
    "path": "/fineract-provider/api/v1/currencies",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON object with a 'currencies' array of strings.",
    "responseBody": "JSON object containing the updated 'changes' and 'currencies' list."
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.ExternalEventConfigurationHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/ExternalEventConfigurationHelper.java",
    "mechanism": "REST",
    "name": "External Event Configuration API",
    "description": "API endpoint to retrieve and manage external event configurations.",
    "path": "/fineract-provider/api/v1/externalevents/configuration",
    "method": "GET, PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON object containing 'externalEventConfigurations' map with event names and boolean enabled states (for PUT).",
    "responseBody": "JSON object containing the list or map of event configurations.",
    "protocol": "HTTP",
    "connectionInfo": "Defined by Utils.TENANT_IDENTIFIER and base URL context"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.GlobalConfigurationHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/GlobalConfigurationHelper.java",
    "mechanism": "REST",
    "name": "Get All Global Configurations",
    "description": "Retrieves all global configuration settings.",
    "path": "/fineract-provider/api/v1/configurations",
    "method": "GET",
    "direction": "CONSUMER",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.GlobalConfigurationHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/GlobalConfigurationHelper.java",
    "mechanism": "REST",
    "name": "Get Global Configuration By ID",
    "description": "Retrieves a specific global configuration by its ID.",
    "path": "/fineract-provider/api/v1/configurations/{configId}",
    "method": "GET",
    "direction": "CONSUMER",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.GlobalConfigurationHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/GlobalConfigurationHelper.java",
    "mechanism": "REST",
    "name": "Get Global Configuration By Name",
    "description": "Retrieves a specific global configuration by its name.",
    "path": "/fineract-provider/api/v1/configurations/name/{name}",
    "method": "GET",
    "direction": "CONSUMER",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.GlobalConfigurationHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/GlobalConfigurationHelper.java",
    "mechanism": "REST",
    "name": "Update Global Configuration",
    "description": "Updates a global configuration setting (value or enabled flag).",
    "path": "/fineract-provider/api/v1/configurations/{configId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON object with 'value', 'enabled', or 'stringValue'",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.GlobalConfigurationHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/GlobalConfigurationHelper.java",
    "mechanism": "REST",
    "name": "Get Cache Configuration",
    "description": "Retrieves cache configuration settings.",
    "path": "/fineract-provider/api/v1/caches",
    "method": "GET",
    "direction": "CONSUMER",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.GlobalConfigurationHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/GlobalConfigurationHelper.java",
    "mechanism": "REST",
    "name": "Update Cache Configuration",
    "description": "Updates cache configuration settings.",
    "path": "/fineract-provider/api/v1/caches",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON object with 'cacheType'",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.GroupHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/GroupHelper.java",
    "mechanism": "REST",
    "name": "Create Group",
    "description": "Creates a new group via the API.",
    "path": "/fineract-provider/api/v1/groups",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON object with group details (name, officeId, etc.)",
    "responseBody": "JSON object containing the new group ID"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.GroupHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/GroupHelper.java",
    "mechanism": "REST",
    "name": "Associate Client",
    "description": "Associates a client with a group.",
    "path": "/fineract-provider/api/v1/groups/{groupId}?command=associateClients",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON object with clientMembers list",
    "responseBody": "JSON object with changes"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.GroupHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/GroupHelper.java",
    "mechanism": "REST",
    "name": "Disassociate Client",
    "description": "Disassociates a client from a group.",
    "path": "/fineract-provider/api/v1/groups/{groupId}?command=disassociateClients",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON object with clientMembers list",
    "responseBody": "JSON object with changes"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.GroupHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/GroupHelper.java",
    "mechanism": "REST",
    "name": "Activate Group",
    "description": "Activates a group.",
    "path": "/fineract-provider/api/v1/groups/{groupId}?command=activate",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON object with activationDate",
    "responseBody": "JSON object with changes"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.GroupHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/GroupHelper.java",
    "mechanism": "REST",
    "name": "Update Group",
    "description": "Updates group details.",
    "path": "/fineract-provider/api/v1/groups/{groupId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON object with fields to update",
    "responseBody": "JSON object with changes"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.GroupHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/GroupHelper.java",
    "mechanism": "REST",
    "name": "Delete Group",
    "description": "Deletes a group.",
    "path": "/fineract-provider/api/v1/groups/{groupId}",
    "method": "DELETE",
    "direction": "CONSUMER",
    "requestBody": "None",
    "responseBody": "JSON object with changes"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.GroupHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/GroupHelper.java",
    "mechanism": "REST",
    "name": "Assign Staff",
    "description": "Assigns staff to a group.",
    "path": "/fineract-provider/api/v1/groups/{groupId}?command=assignStaff",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON object with staffId",
    "responseBody": "JSON object with changes"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.GroupHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/GroupHelper.java",
    "mechanism": "REST",
    "name": "Get Group Details",
    "description": "Retrieves group details.",
    "path": "/fineract-provider/api/v1/groups/{groupId}",
    "method": "GET",
    "direction": "CONSUMER",
    "requestBody": "None",
    "responseBody": "JSON object with group details"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.GroupHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/GroupHelper.java",
    "mechanism": "REST",
    "name": "Get GLIM Accounts",
    "description": "Retrieves GLIM accounts for a group.",
    "path": "/fineract-provider/api/v1/groups/{groupId}/glimaccounts",
    "method": "GET",
    "direction": "CONSUMER",
    "requestBody": "None",
    "responseBody": "JSON array of GLIM accounts"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.GroupHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/GroupHelper.java",
    "mechanism": "REST",
    "name": "Get GSIM Accounts",
    "description": "Retrieves GSIM accounts for a group.",
    "path": "/fineract-provider/api/v1/groups/{groupId}/gsimaccounts",
    "method": "GET",
    "direction": "CONSUMER",
    "requestBody": "None",
    "responseBody": "JSON array of GSIM accounts"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.HookHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/HookHelper.java",
    "mechanism": "REST",
    "name": "Fineract Hooks API",
    "description": "API endpoints for managing webhooks in the Fineract platform.",
    "path": "/fineract-provider/api/v1/hooks",
    "method": "POST, PUT, DELETE, GET",
    "direction": "CONSUMER",
    "requestBody": "JSON payload containing hook details (name, displayName, config, events)",
    "responseBody": "JSON response containing resource ID or hook details",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.LoanRescheduleRequestHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/LoanRescheduleRequestHelper.java",
    "mechanism": "REST",
    "name": "Loan Reschedule API",
    "description": "API endpoints for managing loan reschedule requests (create, approve, reject, get).",
    "path": "/fineract-provider/api/v1/rescheduleloans",
    "method": "POST, GET",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Defined in LOAN_RESCHEDULE_REQUEST_URL"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.OfficeHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/OfficeHelper.java",
    "mechanism": "REST",
    "name": "Office Management API",
    "description": "Endpoints for creating, retrieving, and updating offices.",
    "path": "/fineract-provider/api/v1/offices",
    "method": "GET, POST, PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON (Office details)",
    "responseBody": "JSON (Office details or Resource ID)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.OfficeHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/OfficeHelper.java",
    "mechanism": "REST",
    "name": "Office Template Upload",
    "description": "Endpoint to upload office data import templates.",
    "path": "/fineract-provider/api/v1/offices/uploadtemplate",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "Multipart/Form-Data (File)",
    "responseBody": "String (Import ID)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.OfficeHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/OfficeHelper.java",
    "mechanism": "REST",
    "name": "Office Template Download",
    "description": "Endpoint to download the office data import template.",
    "path": "/fineract-provider/api/v1/offices/downloadtemplate",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "Binary (Excel file)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.OfficeHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/OfficeHelper.java",
    "mechanism": "REST",
    "name": "Import Template Location",
    "description": "Endpoint to get the location of the output template after import.",
    "path": "/fineract-provider/api/v1/imports/getOutputTemplateLocation",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "String (Location URL)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.ProductMixHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/ProductMixHelper.java",
    "mechanism": "REST",
    "name": "Get Product Mix List",
    "description": "Retrieves the list of loan product mixes via HTTP GET.",
    "path": "/fineract-provider/api/v1/loanproducts",
    "method": "GET",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Defined in PRODUCT_MIX_URL constant"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.ProductMixHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/ProductMixHelper.java",
    "mechanism": "REST",
    "name": "Get Product Mix Template",
    "description": "Retrieves the template for loan product mixes via HTTP GET.",
    "path": "/fineract-provider/api/v1/loanproducts/template",
    "method": "GET",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Defined in PRODUCT_MIX_URL constant"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.SchedulerJobHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/SchedulerJobHelper.java",
    "mechanism": "REST",
    "name": "Get All Scheduler Jobs",
    "description": "Retrieves a list of all configured scheduler jobs.",
    "path": "/fineract-provider/api/v1/jobs",
    "method": "GET",
    "direction": "CONSUMER",
    "requestBody": "None",
    "responseBody": "List of Maps containing job details",
    "authentication": "Tenant Identifier (Header/Param)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.SchedulerJobHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/SchedulerJobHelper.java",
    "mechanism": "REST",
    "name": "Get Scheduler Job By ID",
    "description": "Retrieves details for a specific scheduler job.",
    "path": "/fineract-provider/api/v1/jobs/{jobId}",
    "method": "GET",
    "direction": "CONSUMER",
    "requestBody": "None",
    "responseBody": "Map containing job details",
    "authentication": "Tenant Identifier (Header/Param)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.SchedulerJobHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/SchedulerJobHelper.java",
    "mechanism": "REST",
    "name": "Get Scheduler Status",
    "description": "Checks if the scheduler is active.",
    "path": "/fineract-provider/api/v1/scheduler",
    "method": "GET",
    "direction": "CONSUMER",
    "requestBody": "None",
    "responseBody": "JSON with 'active' boolean",
    "authentication": "Tenant Identifier (Header/Param)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.SchedulerJobHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/SchedulerJobHelper.java",
    "mechanism": "REST",
    "name": "Update Scheduler Job",
    "description": "Updates the configuration (active status) of a scheduler job.",
    "path": "/fineract-provider/api/v1/jobs/{jobId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON { \"active\": \"true\"/\"false\" }",
    "responseBody": "Map containing updated job details",
    "authentication": "Tenant Identifier (Header/Param)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.SchedulerJobHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/SchedulerJobHelper.java",
    "mechanism": "REST",
    "name": "Run Scheduler Job",
    "description": "Manually triggers the execution of a scheduler job.",
    "path": "/fineract-provider/api/v1/jobs/{jobId}?command=executeJob",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "Empty JSON object",
    "responseBody": "None (202 Accepted)",
    "authentication": "Tenant Identifier (Header/Param)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.SearchHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/SearchHelper.java",
    "mechanism": "REST",
    "name": "Search API",
    "description": "Invokes the Fineract Search API to retrieve resources matching specific criteria.",
    "path": "/fineract-provider/api/v1/search",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "List of GetSearchResponse objects (JSON)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.StandingInstructionsHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/StandingInstructionsHelper.java",
    "mechanism": "REST",
    "name": "Create Standing Instruction",
    "description": "Creates a new standing instruction via the API.",
    "path": "/fineract-provider/api/v1/standinginstructions",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON object representing the standing instruction details (recurrence, priority, accounts, etc.)",
    "responseBody": "JSON object containing the resourceId of the created instruction"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.StandingInstructionsHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/StandingInstructionsHelper.java",
    "mechanism": "REST",
    "name": "Get Standing Instruction By ID",
    "description": "Retrieves a specific standing instruction.",
    "path": "/fineract-provider/api/v1/standinginstructions/{standingInstructionId}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON object containing standing instruction details"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.StandingInstructionsHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/StandingInstructionsHelper.java",
    "mechanism": "REST",
    "name": "Get Standing Instruction Run History",
    "description": "Retrieves the execution history of standing instructions.",
    "path": "/fineract-provider/api/v1/standinginstructionrunhistory",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "List of history items"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.Utils",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/Utils.java",
    "mechanism": "REST",
    "name": "Authentication Login",
    "description": "Authenticates the user to obtain a base64 encoded key.",
    "path": "/fineract-provider/api/v1/authentication",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "{\"username\":\"...\", \"password\":\"...\"}",
    "responseBody": "JSON containing base64EncodedAuthenticationKey",
    "protocol": "HTTP/HTTPS"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.Utils",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/Utils.java",
    "mechanism": "REST",
    "name": "Actuator Health Check",
    "description": "Checks if the application is up and running before starting tests.",
    "path": "/fineract-provider/actuator/health",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON health status",
    "protocol": "HTTP/HTTPS"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.Utils",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/Utils.java",
    "mechanism": "REST",
    "name": "Generic API Calls",
    "description": "The class provides generic wrappers (performServerGet, performServerPost, etc.) to consume any REST endpoint in the application dynamically.",
    "path": "Dynamic (passed as argument)",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "protocol": "HTTP/HTTPS"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.accounting",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/accounting/FinancialActivityAccountHelper.java",
    "mechanism": "REST",
    "name": "Financial Activity Accounts API",
    "description": "API endpoint for managing financial activity account mappings.",
    "path": "/fineract-provider/api/v1/financialactivityaccounts",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Relative URL defined in constant FINANCIAL_ACTIVITY_ACCOUNT_MAPPING_URL"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.accounting",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/accounting/AccountRuleHelper.java",
    "mechanism": "REST",
    "name": "Accounting Rules API",
    "description": "Consumes the Fineract API to manage accounting rules.",
    "path": "/fineract-provider/api/v1/accountingrules",
    "method": "GET, POST",
    "direction": "CONSUMER",
    "responseBody": "JSON list of rules or creation response",
    "connectionInfo": "Defined in ACCOUNTINGRULES_URL constant"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.accounting.AccountHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/accounting/AccountHelper.java",
    "mechanism": "REST",
    "name": "Create GL Account",
    "description": "API endpoint to create a new General Ledger account.",
    "path": "/fineract-provider/api/v1/glaccounts",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON representation of GL Account (Asset, Income, Expense, or Liability)",
    "responseBody": "JSON containing the resourceId of the created account"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.accounting.AccountHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/accounting/AccountHelper.java",
    "mechanism": "REST",
    "name": "Get GL Accounts with Running Balance",
    "description": "API endpoint to retrieve GL accounts with their running balances.",
    "path": "/fineract-provider/api/v1/glaccounts",
    "method": "GET",
    "direction": "CONSUMER",
    "requestBody": "None",
    "responseBody": "List of GL Accounts with balance details"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.accounting.AccountHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/accounting/AccountHelper.java",
    "mechanism": "REST",
    "name": "Get GL Account by ID",
    "description": "API endpoint to retrieve a specific GL account by ID with running balance.",
    "path": "/fineract-provider/api/v1/glaccounts/{accountId}",
    "method": "GET",
    "direction": "CONSUMER",
    "requestBody": "None",
    "responseBody": "GL Account details with balance"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.accounting.JournalEntryHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/accounting/JournalEntryHelper.java",
    "mechanism": "REST",
    "name": "Get Journal Entries",
    "description": "Retrieves accounting journal entries based on various criteria.",
    "path": "/fineract-provider/api/v1/journalentries",
    "method": "GET",
    "direction": "CONSUMER",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via RequestSpecification"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.accounting.PeriodicAccrualAccountingHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/accounting/PeriodicAccrualAccountingHelper.java",
    "mechanism": "REST",
    "name": "runPeriodicAccrualAccounting",
    "description": "Invokes the periodic accrual accounting API endpoint.",
    "path": "/fineract-provider/api/v1/runaccruals",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON object containing 'dateFormat', 'locale', and 'tillDate'",
    "responseBody": "Unknown (returned as Object)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.charges.ChargesHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/charges/ChargesHelper.java",
    "mechanism": "REST",
    "name": "Charges API",
    "description": "Consumes the Fineract Charges API to manage charge definitions.",
    "path": "/fineract-provider/api/v1/charges",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.commands.MakercheckersHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/commands/MakercheckersHelper.java",
    "mechanism": "REST",
    "name": "Get Maker Checker List",
    "description": "Retrieves the list of maker-checker entries from the Fineract provider API.",
    "path": "/fineract-provider/api/v1/makercheckers",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "ArrayList<GetMakerCheckerResponse>",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositAccountHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/fixeddeposit/FixedDepositAccountHelper.java",
    "mechanism": "REST",
    "name": "Fixed Deposit Account API",
    "description": "Main API for managing fixed deposit accounts.",
    "path": "/fineract-provider/api/v1/fixeddepositaccounts",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Defined in FIXED_DEPOSIT_ACCOUNT_URL constant"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositAccountHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/fixeddeposit/FixedDepositAccountHelper.java",
    "mechanism": "REST",
    "name": "Approve Fixed Deposit",
    "description": "Command to approve a fixed deposit application.",
    "path": "/fineract-provider/api/v1/fixeddepositaccounts/{id}?command=approve",
    "method": "POST",
    "direction": "CONSUMER",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositAccountHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/fixeddeposit/FixedDepositAccountHelper.java",
    "mechanism": "REST",
    "name": "Undo Approval",
    "description": "Command to undo the approval of a fixed deposit.",
    "path": "/fineract-provider/api/v1/fixeddepositaccounts/{id}?command=undoapproval",
    "method": "POST",
    "direction": "CONSUMER",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositAccountHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/fixeddeposit/FixedDepositAccountHelper.java",
    "mechanism": "REST",
    "name": "Reject Application",
    "description": "Command to reject a fixed deposit application.",
    "path": "/fineract-provider/api/v1/fixeddepositaccounts/{id}?command=reject",
    "method": "POST",
    "direction": "CONSUMER",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositAccountHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/fixeddeposit/FixedDepositAccountHelper.java",
    "mechanism": "REST",
    "name": "Withdraw Application",
    "description": "Command for applicant to withdraw the application.",
    "path": "/fineract-provider/api/v1/fixeddepositaccounts/{id}?command=withdrawnByApplicant",
    "method": "POST",
    "direction": "CONSUMER",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositAccountHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/fixeddeposit/FixedDepositAccountHelper.java",
    "mechanism": "REST",
    "name": "Activate Fixed Deposit",
    "description": "Command to activate the fixed deposit.",
    "path": "/fineract-provider/api/v1/fixeddepositaccounts/{id}?command=activate",
    "method": "POST",
    "direction": "CONSUMER",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositAccountHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/fixeddeposit/FixedDepositAccountHelper.java",
    "mechanism": "REST",
    "name": "Calculate Interest",
    "description": "Command to calculate interest.",
    "path": "/fineract-provider/api/v1/fixeddepositaccounts/{id}?command=calculateInterest",
    "method": "POST",
    "direction": "CONSUMER",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositAccountHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/fixeddeposit/FixedDepositAccountHelper.java",
    "mechanism": "REST",
    "name": "Post Interest",
    "description": "Command to post interest.",
    "path": "/fineract-provider/api/v1/fixeddepositaccounts/{id}?command=postInterest",
    "method": "POST",
    "direction": "CONSUMER",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositAccountHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/fixeddeposit/FixedDepositAccountHelper.java",
    "mechanism": "REST",
    "name": "Premature Close",
    "description": "Command to close the deposit prematurely.",
    "path": "/fineract-provider/api/v1/fixeddepositaccounts/{id}?command=prematureClose",
    "method": "POST",
    "direction": "CONSUMER",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositAccountStatusChecker",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/fixeddeposit/FixedDepositAccountStatusChecker.java",
    "mechanism": "REST",
    "name": "Get Fixed Deposit Account Status",
    "description": "Retrieves the status details of a specific fixed deposit account.",
    "path": "/fineract-provider/api/v1/fixeddepositaccounts/{fixedDepositAccountID}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON object containing a 'status' field which is a map of boolean flags."
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositProductHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/fixeddeposit/FixedDepositProductHelper.java",
    "mechanism": "REST",
    "name": "Create Fixed Deposit Product",
    "description": "Creates a new fixed deposit product definition.",
    "path": "/fineract-provider/api/v1/fixeddepositproducts",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON object containing product details (name, currency, terms, charts)",
    "responseBody": "JSON object containing the resourceId of the created product"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositProductHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/fixeddeposit/FixedDepositProductHelper.java",
    "mechanism": "REST",
    "name": "Retrieve All Fixed Deposit Products",
    "description": "Fetches a list of all existing fixed deposit products.",
    "path": "/fineract-provider/api/v1/fixeddepositproducts",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON array of product objects"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositProductHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/fixeddeposit/FixedDepositProductHelper.java",
    "mechanism": "REST",
    "name": "Retrieve Fixed Deposit Product By ID",
    "description": "Fetches details for a single fixed deposit product.",
    "path": "/fineract-provider/api/v1/fixeddepositproducts/{productId}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON object representing the product"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.fixeddeposit.FixedDepositProductHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/fixeddeposit/FixedDepositProductHelper.java",
    "mechanism": "REST",
    "name": "Retrieve Interest Rate Charts",
    "description": "Fetches interest rate chart slabs for a specific product.",
    "path": "/fineract-provider/api/v1/interestratecharts",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON array of chart slabs"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.funds.FundsResourceHandler",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/funds/FundsResourceHandler.java",
    "mechanism": "REST",
    "name": "Create Fund",
    "description": "API endpoint to create a new fund.",
    "path": "/fineract-provider/api/v1/funds",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON representation of the fund",
    "responseBody": "JSON containing the resourceId",
    "protocol": "HTTP",
    "connectionInfo": "Defined by Utils.TENANT_IDENTIFIER and base URL"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.funds.FundsResourceHandler",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/funds/FundsResourceHandler.java",
    "mechanism": "REST",
    "name": "Retrieve All Funds",
    "description": "API endpoint to list all funds.",
    "path": "/fineract-provider/api/v1/funds",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON array of fund objects",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.funds.FundsResourceHandler",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/funds/FundsResourceHandler.java",
    "mechanism": "REST",
    "name": "Retrieve Single Fund",
    "description": "API endpoint to retrieve a specific fund by ID.",
    "path": "/fineract-provider/api/v1/funds/{fundID}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON object of the fund",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.funds.FundsResourceHandler",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/funds/FundsResourceHandler.java",
    "mechanism": "REST",
    "name": "Update Fund",
    "description": "API endpoint to update an existing fund.",
    "path": "/fineract-provider/api/v1/funds/{fundID}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON representation of fields to update",
    "responseBody": "JSON object containing changes",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.loans",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanProductHelper.java",
    "mechanism": "REST",
    "name": "Create Loan Product",
    "description": "Calls the API to create a new loan product.",
    "path": "/loanproducts",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "PostLoanProductsRequest",
    "responseBody": "PostLoanProductsResponse"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.loans",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanProductHelper.java",
    "mechanism": "REST",
    "name": "Retrieve Loan Product by External ID",
    "description": "Calls the API to retrieve loan product details by external ID.",
    "path": "/loanproducts/external-id/{externalId}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "GetLoanProductsProductIdResponse"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.loans",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanProductHelper.java",
    "mechanism": "REST",
    "name": "Retrieve Loan Product by ID",
    "description": "Calls the API to retrieve loan product details by internal ID.",
    "path": "/loanproducts/{loanProductId}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "GetLoanProductsProductIdResponse"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.loans",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanProductHelper.java",
    "mechanism": "REST",
    "name": "Update Loan Product by External ID",
    "description": "Calls the API to update a loan product using its external ID.",
    "path": "/loanproducts/external-id/{externalId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "PutLoanProductsProductIdRequest",
    "responseBody": "PutLoanProductsProductIdResponse"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.loans",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanProductHelper.java",
    "mechanism": "REST",
    "name": "Get Loan Product Template",
    "description": "Calls the API to retrieve the loan product template.",
    "path": "/loanproducts/template",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "GetLoanProductsTemplateResponse"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.loans",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/CobHelper.java",
    "mechanism": "REST",
    "name": "Get COB Partitions",
    "description": "Consumes an internal REST API to retrieve COB partitions.",
    "path": "/fineract-provider/api/v1/internal/cob/partitions/{partitionSize}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "List<Map<String, Object>>",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.loans.LoanAccountLockHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanAccountLockHelper.java",
    "mechanism": "REST",
    "name": "Internal Place Lock on Loan Account",
    "description": "Calls an internal API endpoint to place a soft lock on a specific loan account.",
    "path": "/fineract-provider/api/v1/internal/loans/{loanId}/place-lock/{lockOwner}",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON (or error string)",
    "responseBody": "String (API response)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.loans.LoanCOBCatchUpHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanCOBCatchUpHelper.java",
    "mechanism": "REST",
    "name": "executeLoanCOBCatchUp",
    "description": "Triggers the Loan COB Catch Up process on the Fineract backend.",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via IntegrationTest base class"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.loans.LoanCOBCatchUpHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanCOBCatchUpHelper.java",
    "mechanism": "REST",
    "name": "getOldestCOBProcessedLoan",
    "description": "Retrieves the oldest loan processed by the COB Catch Up mechanism.",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via IntegrationTest base class"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.loans.LoanCOBCatchUpHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanCOBCatchUpHelper.java",
    "mechanism": "REST",
    "name": "isCatchUpRunning",
    "description": "Checks the running status of the Loan COB Catch Up process.",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via IntegrationTest base class"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.loans.LoanStatusChecker",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanStatusChecker.java",
    "mechanism": "REST",
    "name": "Get Loan Details",
    "description": "Fetches the details of a specific loan to inspect its status or sub-status.",
    "path": "/fineract-provider/api/v1/loans/{loanID}",
    "method": "GET",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Relative path constructed in code, base URI managed by RestAssured/Utils"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.loans.LoanTestLifecycleExtension",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanTestLifecycleExtension.java",
    "mechanism": "REST",
    "name": "Fineract Loan API",
    "description": "Interacts with the Fineract platform via HTTP to manage loan lifecycle states.",
    "path": "/loans/{loanId}/transactions, /loans/{loanId}",
    "method": "POST",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "connectionInfo": "Configured via Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanTransactionHelper.java",
    "mechanism": "REST",
    "name": "Fineract Loan API",
    "description": "Consumes the Fineract Loan REST API to perform operations.",
    "path": "/fineract-provider/api/v1/loans",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanTransactionHelper.java",
    "mechanism": "REST",
    "name": "Fineract Loan Product API",
    "description": "Consumes the Fineract Loan Product REST API.",
    "path": "/fineract-provider/api/v1/loanproducts",
    "method": "GET, POST, PUT",
    "direction": "CONSUMER",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/loans/LoanTransactionHelper.java",
    "mechanism": "REST",
    "name": "Fineract Interoperation API",
    "description": "Consumes the Interoperation API for loan repayments via account number.",
    "path": "/fineract-provider/api/v1/interoperation/transactions/{accountNo}/loanrepayment",
    "method": "POST",
    "direction": "CONSUMER",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.organisation",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/organisation/CampaignsTest.java",
    "mechanism": "REST",
    "name": "SMS Bridge Mock",
    "description": "Mocks the external SMS provider service required by the application to list available SMS bridges.",
    "path": "/smsbridges",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "[{\"id\": 1, \"tenantId\": 1, \"phoneNo\": \"+1234567890\", \"providerName\": \"Dummy SMS Provider...\"}]",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.organisation",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/organisation/CampaignsTest.java",
    "mechanism": "REST",
    "name": "Fineract API Client",
    "description": "Consumes the Fineract REST API to perform campaign operations (create, update, delete, etc.) via the CampaignsHelper.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.organisation",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/organisation/CampaignsHelper.java",
    "mechanism": "REST",
    "name": "SMS Campaigns API",
    "description": "API for managing SMS campaigns",
    "path": "/fineract-provider/api/v1/smscampaigns",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON containing campaign details (name, message, triggerType, etc.)",
    "responseBody": "JSON containing resourceId",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.organisation",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/organisation/CampaignsHelper.java",
    "mechanism": "REST",
    "name": "SMS Campaigns API - Retrieve",
    "description": "API to retrieve a specific campaign",
    "path": "/fineract-provider/api/v1/smscampaigns/{id}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON containing campaign details",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.organisation",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/organisation/CampaignsHelper.java",
    "mechanism": "REST",
    "name": "SMS Campaigns API - Update",
    "description": "API to update a specific campaign",
    "path": "/fineract-provider/api/v1/smscampaigns/{id}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON containing updated campaign details",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.organisation",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/organisation/CampaignsHelper.java",
    "mechanism": "REST",
    "name": "SMS Campaigns API - Delete",
    "description": "API to delete a specific campaign",
    "path": "/fineract-provider/api/v1/smscampaigns/{id}",
    "method": "DELETE",
    "direction": "CONSUMER",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.organisation",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/organisation/CampaignsHelper.java",
    "mechanism": "REST",
    "name": "SMS Campaigns API - Action",
    "description": "API to perform actions (activate/close) on a campaign",
    "path": "/fineract-provider/api/v1/smscampaigns/{id}?command={command}",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON containing action date and locale",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.organisation",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/organisation/CampaignsHelper.java",
    "mechanism": "REST",
    "name": "SMS Campaigns Template API",
    "description": "API to retrieve campaign templates and options",
    "path": "/fineract-provider/api/v1/smscampaigns/template",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON containing template options including business rules/reports",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.organisation",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/organisation/EntityDatatableChecksHelper.java",
    "mechanism": "REST",
    "name": "Entity Datatable Checks API",
    "description": "Consumes the Fineract Entity Datatable Checks REST API for integration testing purposes.",
    "path": "/fineract-provider/api/v1/entityDatatableChecks",
    "method": "POST, GET, DELETE",
    "direction": "CONSUMER",
    "requestBody": "JSON object containing entity, status, datatableName, and optional productId",
    "responseBody": "JSON object containing resourceId or full response details",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.organisation.CurrencyHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/organisation/CurrencyHelper.java",
    "mechanism": "REST",
    "name": "Currency API",
    "description": "API endpoint to retrieve and update currency configurations.",
    "path": "/fineract-provider/api/v1/currencies",
    "method": "GET, PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON object with 'currencies' array (for PUT)",
    "responseBody": "JSON object containing currency options or changes",
    "connectionInfo": "Relative path defined in CURRENCY_URL constant"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.organisation.EntityDatatableChecksIntegrationTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/organisation/EntityDatatableChecksIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes Fineract REST APIs to perform integration tests on Datatables, Clients, Groups, Loans, and Savings.",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.initializeRESTAssured() and RequestSpecBuilder"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.organisation.StaffHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/organisation/StaffHelper.java",
    "mechanism": "REST",
    "name": "Staff API",
    "description": "Integration with the Fineract Staff management REST API endpoints.",
    "path": "/fineract-provider/api/v1/staff",
    "method": "GET, POST, PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON object representing staff details (firstname, lastname, officeId, etc.)",
    "responseBody": "JSON object containing staff resource details or ID",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.organisation.StaffHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/organisation/StaffHelper.java",
    "mechanism": "REST",
    "name": "Group Transfer API",
    "description": "Integration with the Fineract Group API to transfer staff.",
    "path": "/fineract-provider/api/v1/groups/{groupId}?command=transferStaff",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON object with staffId and note",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.products",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/products/DelinquencyBucketsHelper.java",
    "mechanism": "REST",
    "name": "Delinquency Buckets API",
    "description": "API endpoints for managing delinquency buckets.",
    "path": "/fineract-provider/api/v1/delinquency/buckets",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Relative path defined in DELINQUENCY_BUCKETS_URL"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.products",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/products/DelinquencyRangesHelper.java",
    "mechanism": "REST",
    "name": "Delinquency Ranges API",
    "description": "API endpoints for managing delinquency ranges.",
    "path": "/fineract-provider/api/v1/delinquency/ranges",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Relative URL path defined in constant DELINQUENCY_RANGES_URL"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.provisioning",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/provisioning/ProvisioningTransactionHelper.java",
    "mechanism": "REST",
    "name": "Provisioning Category API",
    "description": "Retrieves provisioning categories.",
    "path": "/fineract-provider/api/v1/provisioningcategory",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.provisioning",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/provisioning/ProvisioningTransactionHelper.java",
    "mechanism": "REST",
    "name": "Create Provisioning Criteria API",
    "description": "Creates new provisioning criteria.",
    "path": "/fineract-provider/api/v1/provisioningcriteria",
    "method": "POST",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.provisioning",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/provisioning/ProvisioningTransactionHelper.java",
    "mechanism": "REST",
    "name": "Provisioning Criteria Detail API",
    "description": "Retrieves, updates, or deletes a specific provisioning criteria.",
    "path": "/fineract-provider/api/v1/provisioningcriteria/{criteriaId}",
    "method": "GET, PUT, DELETE",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.provisioning",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/provisioning/ProvisioningTransactionHelper.java",
    "mechanism": "REST",
    "name": "Create Provisioning Entries API",
    "description": "Creates provisioning entries.",
    "path": "/fineract-provider/api/v1/provisioningentries",
    "method": "POST",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.provisioning",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/provisioning/ProvisioningTransactionHelper.java",
    "mechanism": "REST",
    "name": "Update Provisioning Entry API",
    "description": "Updates a provisioning entry with a specific command.",
    "path": "/fineract-provider/api/v1/provisioningentries/{entryId}",
    "method": "POST",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.provisioning",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/provisioning/ProvisioningTransactionHelper.java",
    "mechanism": "REST",
    "name": "Retrieve Provisioning Entry API",
    "description": "Retrieves a specific provisioning entry.",
    "path": "/fineract-provider/api/v1/provisioningentries/{provisioningEntry}",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.provisioning",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/provisioning/ProvisioningTransactionHelper.java",
    "mechanism": "REST",
    "name": "Retrieve Related Provisioning Entries API",
    "description": "Retrieves entries related to a specific ID.",
    "path": "/fineract-provider/api/v1/provisioningentries/entries",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.provisioning",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/provisioning/ProvisioningTransactionHelper.java",
    "mechanism": "REST",
    "name": "Retrieve All Provisioning Entries API",
    "description": "Retrieves all provisioning entries.",
    "path": "/fineract-provider/api/v1/provisioningentries",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.rates",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/rates/RatesHelper.java",
    "mechanism": "REST",
    "name": "Rates API",
    "description": "The Fineract Rates API used to manage rate definitions.",
    "path": "/fineract-provider/api/v1/rates",
    "method": "GET, POST, PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON object containing rate details (name, percentage, locale, etc.)",
    "responseBody": "JSON object or array containing rate resource details",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.recurringdeposit.RecurringDepositAccountHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/recurringdeposit/RecurringDepositAccountHelper.java",
    "mechanism": "REST",
    "name": "Recurring Deposit Account API",
    "description": "API for managing recurring deposit accounts (create, update, approve, transact).",
    "path": "/fineract-provider/api/v1/recurringdepositaccounts",
    "method": "POST, GET, PUT, DELETE",
    "direction": "CONSUMER",
    "requestBody": "JSON payload containing account details (clientId, productId, dates, interest settings) or command parameters.",
    "responseBody": "JSON response containing resource ID, status, or account details.",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.recurringdeposit.RecurringDepositAccountStatusChecker",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/recurringdeposit/RecurringDepositAccountStatusChecker.java",
    "mechanism": "REST",
    "name": "Get Recurring Deposit Account Status",
    "description": "Retrieves the status details of a specific recurring deposit account via the Fineract API.",
    "path": "/fineract-provider/api/v1/recurringdepositaccounts/{recurringDepositAccountID}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON object containing the 'status' map of the account",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.recurringdeposit.RecurringDepositProductHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/recurringdeposit/RecurringDepositProductHelper.java",
    "mechanism": "REST",
    "name": "Create Recurring Deposit Product",
    "description": "Creates a new recurring deposit product definition in the system.",
    "path": "/fineract-provider/api/v1/recurringdepositproducts",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON object containing product details (name, currency, terms, charts, etc.)",
    "responseBody": "JSON object containing the resourceId of the created product",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.recurringdeposit.RecurringDepositProductHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/recurringdeposit/RecurringDepositProductHelper.java",
    "mechanism": "REST",
    "name": "Retrieve All Recurring Deposit Products",
    "description": "Fetches a list of all recurring deposit products.",
    "path": "/fineract-provider/api/v1/recurringdepositproducts",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON array of product definitions",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.recurringdeposit.RecurringDepositProductHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/recurringdeposit/RecurringDepositProductHelper.java",
    "mechanism": "REST",
    "name": "Retrieve Recurring Deposit Product By ID",
    "description": "Fetches details of a single recurring deposit product.",
    "path": "/fineract-provider/api/v1/recurringdepositproducts/{productId}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON object of the product definition",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.recurringdeposit.RecurringDepositProductHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/recurringdeposit/RecurringDepositProductHelper.java",
    "mechanism": "REST",
    "name": "Retrieve Interest Rate Charts",
    "description": "Fetches interest rate chart slabs for a specific product.",
    "path": "/fineract-provider/api/v1/interestratecharts",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON object containing chart slabs",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.savings",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/savings/SavingsStatusChecker.java",
    "mechanism": "REST",
    "name": "Savings Account API",
    "description": "Retrieves status and sub-status information for savings accounts.",
    "path": "/fineract-provider/api/v1/savingsaccounts/{savingsID}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON object containing status or subStatus fields",
    "connectionInfo": "Relative URL path defined in SAVINGS_ACCOUNT_URL"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.savings.AccountTransferHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/savings/AccountTransferHelper.java",
    "mechanism": "REST",
    "name": "Account Transfer API",
    "description": "Endpoint to execute account transfers between clients/accounts.",
    "path": "/fineract-provider/api/v1/accounttransfers",
    "method": "POST",
    "requestBody": "JSON object containing from/to client and account IDs, types, amount, date, and locale.",
    "responseBody": "JSON containing the resource ID (savingsId).",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.savings.AccountTransferHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/savings/AccountTransferHelper.java",
    "mechanism": "REST",
    "name": "Loan Refund By Transfer API",
    "description": "Endpoint to refund a loan via an account transfer.",
    "path": "/fineract-provider/api/v1/accounttransfers/refundByTransfer",
    "method": "POST",
    "requestBody": "JSON object containing from/to client and account IDs, types, amount, date, and locale.",
    "responseBody": "JSON containing the resource ID (savingsId).",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.savings.SavingsAccountHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/savings/SavingsAccountHelper.java",
    "mechanism": "REST",
    "name": "Savings Account API",
    "description": "Consumes the Fineract Savings Account REST API to perform CRUD operations and commands on savings accounts.",
    "path": "/fineract-provider/api/v1/savingsaccounts",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via RequestSpecification (RestAssured)"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.savings.SavingsProductHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/savings/SavingsProductHelper.java",
    "mechanism": "REST",
    "name": "Create Savings Product",
    "description": "Creates a new savings product definition in the system.",
    "path": "/fineract-provider/api/v1/savingsproducts",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON representation of the savings product (constructed by build())",
    "responseBody": "JSON containing the resourceId of the created product"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.savings.SavingsProductHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/savings/SavingsProductHelper.java",
    "mechanism": "REST",
    "name": "Get Savings Product",
    "description": "Retrieves a savings product definition to verify its creation.",
    "path": "/fineract-provider/api/v1/savingsproducts/{id}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON representation of the savings product"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.shares",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/shares/ShareDividendsTransactionHelper.java",
    "mechanism": "REST",
    "name": "Create Share Product Dividend",
    "description": "Creates a new dividend for a share product via the API.",
    "path": "/fineract-provider/api/v1/shareproduct/{productId}/dividend",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON containing dividend details",
    "responseBody": "JSON containing resourceId",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.shares",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/shares/ShareDividendsTransactionHelper.java",
    "mechanism": "REST",
    "name": "Update Share Product Dividend",
    "description": "Updates or executes a command on a dividend via the API.",
    "path": "/fineract-provider/api/v1/shareproduct/{productId}/dividend/{dividendId}",
    "method": "PUT",
    "direction": "PRODUCER",
    "requestBody": "JSON containing update details",
    "responseBody": "JSON containing resourceId",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.shares",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/shares/ShareDividendsTransactionHelper.java",
    "mechanism": "REST",
    "name": "Retrieve Dividend Details",
    "description": "Fetches details of a specific dividend via the API.",
    "path": "/fineract-provider/api/v1/shareproduct/{productId}/dividend/{dividendId}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON map of dividend details",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.shares",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/shares/ShareDividendsTransactionHelper.java",
    "mechanism": "REST",
    "name": "Retrieve All Dividends",
    "description": "Fetches all dividends for a share product via the API.",
    "path": "/fineract-provider/api/v1/shareproduct/{productId}/dividend",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON map/list of dividends",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.shares",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/shares/ShareAccountTransactionHelper.java",
    "mechanism": "REST",
    "name": "Create Share Account",
    "description": "Calls the API to create a new share account.",
    "path": "/fineract-provider/api/v1/accounts/share",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON representation of share account",
    "responseBody": "JSON containing resourceId"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.shares",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/shares/ShareAccountTransactionHelper.java",
    "mechanism": "REST",
    "name": "Retrieve Share Account",
    "description": "Calls the API to retrieve share account details.",
    "path": "/fineract-provider/api/v1/accounts/share/{id}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON map of account details"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.shares",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/shares/ShareAccountTransactionHelper.java",
    "mechanism": "REST",
    "name": "Update Share Account",
    "description": "Calls the API to update a share account.",
    "path": "/fineract-provider/api/v1/accounts/share/{id}",
    "method": "PUT",
    "direction": "PRODUCER",
    "requestBody": "JSON representation of updates",
    "responseBody": "JSON containing resourceId"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.shares",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/shares/ShareAccountTransactionHelper.java",
    "mechanism": "REST",
    "name": "Share Account Command",
    "description": "Calls the API to execute a command on a share account.",
    "path": "/fineract-provider/api/v1/accounts/share/{id}?command={command}",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON body for command",
    "responseBody": "JSON containing resourceId"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.shares.DividendsIntegrationTests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/shares/DividendsIntegrationTests.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Interacts with the Fineract platform via HTTP REST endpoints to manage clients, accounts, and dividends.",
    "path": "Dynamic (handled by TransactionHelpers)",
    "method": "GET, POST",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.shares.ShareAccountIntegrationTests",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/shares/ShareAccountIntegrationTests.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Interacts with the Fineract Core Banking Platform REST API to perform integration tests.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.shares.ShareProductTransactionHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/shares/ShareProductTransactionHelper.java",
    "mechanism": "REST",
    "name": "Create Share Product",
    "description": "Consumes the API to create a new share product.",
    "path": "/fineract-provider/api/v1/products/share",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON representation of the share product",
    "responseBody": "JSON containing the resourceId"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.shares.ShareProductTransactionHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/shares/ShareProductTransactionHelper.java",
    "mechanism": "REST",
    "name": "Retrieve Share Product",
    "description": "Consumes the API to retrieve details of a share product.",
    "path": "/fineract-provider/api/v1/products/share/{shareProductId}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON map of share product details"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.shares.ShareProductTransactionHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/shares/ShareProductTransactionHelper.java",
    "mechanism": "REST",
    "name": "Update Share Product",
    "description": "Consumes the API to update an existing share product.",
    "path": "/fineract-provider/api/v1/products/share/{shareProductId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON representation of provisioning criteria",
    "responseBody": "JSON containing the resourceId"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.system",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/system/DatatableHelper.java",
    "mechanism": "REST",
    "name": "Datatable API",
    "description": "Consumes the Fineract Datatable API to manage datatables and their entries.",
    "path": "/fineract-provider/api/v1/datatables",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.system",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/system/AccountNumberPreferencesHelper.java",
    "mechanism": "REST",
    "name": "Account Number Formats API",
    "description": "API endpoint for managing account number preferences.",
    "path": "/fineract-provider/api/v1/accountnumberformats",
    "method": "POST, GET, PUT, DELETE",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Relative path defined in constant ACCOUNT_NUMBER_FORMATS_REQUEST_URL"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.system.CodeHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/system/CodeHelper.java",
    "mechanism": "REST",
    "name": "Codes API",
    "description": "API to manage system codes (reference data categories).",
    "path": "/fineract-provider/api/v1/codes",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "requestBody": "JSON (name)",
    "responseBody": "JSON (id, name, systemDefined)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.system.CodeHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/system/CodeHelper.java",
    "mechanism": "REST",
    "name": "Code Values API",
    "description": "API to manage specific values within a system code category.",
    "path": "/fineract-provider/api/v1/codes/{codeId}/codevalues",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "requestBody": "JSON (name, description, position)",
    "responseBody": "JSON (id, name, description, position)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.xbrl.XBRLIntegrationTestHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/xbrl/XBRLIntegrationTestHelper.java",
    "mechanism": "REST",
    "name": "Get Taxonomy List",
    "description": "Retrieves the list of XBRL taxonomies via HTTP GET.",
    "path": "/fineract-provider/api/v1/mixtaxonomy",
    "method": "GET",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Relative URL constructed with Utils.TENANT_IDENTIFIER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.common.xbrl.XBRLIntegrationTestHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/common/xbrl/XBRLIntegrationTestHelper.java",
    "mechanism": "REST",
    "name": "Get Taxonomy Mapping",
    "description": "Retrieves the XBRL taxonomy mappings via HTTP GET.",
    "path": "/fineract-provider/api/v1/mixmapping",
    "method": "GET",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Relative URL constructed with Utils.TENANT_IDENTIFIER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.datatable",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/datatable/DatatableIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to test Datatable functionality.",
    "path": "/fineract-provider/api/v1/datatables/*",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.datatable",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/datatable/DatatableAdvancedQueryTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming Fineract APIs to create entities and query data tables.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.datatable",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/datatable/DatatableUniqueAndIndexColumnTest.java",
    "mechanism": "REST",
    "name": "Datatable API",
    "description": "The test class acts as a consumer of the Fineract Datatable REST API to create, read, and update datatable definitions.",
    "path": "/datatables",
    "method": "POST, PUT, GET",
    "direction": "CONSUMER",
    "requestBody": "PostDataTablesRequest, PutDataTablesRequest",
    "responseBody": "PostDataTablesResponse, GetDataTablesResponse",
    "authentication": "unknown",
    "protocol": "HTTP",
    "connectionInfo": "Managed by DatatableHelper/REST Assured"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.guarantor.GuarantorHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/guarantor/GuarantorHelper.java",
    "mechanism": "REST",
    "name": "Create Guarantor",
    "description": "Creates a new guarantor for a loan via the API.",
    "path": "/fineract-provider/api/v1/loans/{loanId}/guarantors/",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON representation of the guarantor",
    "responseBody": "JSON containing the resource ID"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.guarantor.GuarantorHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/guarantor/GuarantorHelper.java",
    "mechanism": "REST",
    "name": "Update Guarantor",
    "description": "Updates an existing guarantor via the API.",
    "path": "/fineract-provider/api/v1/loans/{loanId}/guarantors/{guarantorId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON representation of fields to update",
    "responseBody": "JSON containing changes"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.guarantor.GuarantorHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/guarantor/GuarantorHelper.java",
    "mechanism": "REST",
    "name": "Delete Guarantor",
    "description": "Deletes a guarantor via the API.",
    "path": "/fineract-provider/api/v1/loans/{loanId}/guarantors/{guarantorId}",
    "method": "DELETE",
    "direction": "CONSUMER",
    "requestBody": "None",
    "responseBody": "JSON response"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.guarantor.GuarantorHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/guarantor/GuarantorHelper.java",
    "mechanism": "REST",
    "name": "Get Guarantor",
    "description": "Retrieves a specific guarantor via the API.",
    "path": "/fineract-provider/api/v1/loans/{loanId}/guarantors/{guarantorId}",
    "method": "GET",
    "direction": "CONSUMER",
    "requestBody": "None",
    "responseBody": "JSON representation of the guarantor"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.guarantor.GuarantorHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/guarantor/GuarantorHelper.java",
    "mechanism": "REST",
    "name": "Get All Guarantors",
    "description": "Retrieves all guarantors for a loan via the API.",
    "path": "/fineract-provider/api/v1/loans/{loanId}/guarantors/",
    "method": "GET",
    "direction": "CONSUMER",
    "requestBody": "None",
    "responseBody": "JSON list of guarantors"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.guarantor.GuarantorTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/guarantor/GuarantorTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes Fineract REST APIs to perform integration testing of the Guarantor module.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.inlinecob",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/inlinecob/InlineLoanCOBHelper.java",
    "mechanism": "REST",
    "name": "Execute Inline Loan COB",
    "description": "Invokes the Fineract API to run the Loan Close of Business job inline for specific loans.",
    "path": "/fineract-provider/api/v1/jobs/LOAN_COB/inline",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON object containing a list of loan IDs (e.g., {\"loanIds\": [1, 2]})",
    "responseBody": "JSON response from the server (structure depends on Utils implementation)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.inlinecob.InlineLoanCOBTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/inlinecob/InlineLoanCOBTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming Fineract APIs to create entities, manage loans, and trigger COB processes.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.interoperation.InteropHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/interoperation/InteropHelper.java",
    "mechanism": "REST",
    "name": "Get Health",
    "description": "Checks the health of the interoperation service.",
    "path": "/fineract-provider/api/v1/interoperation/health",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.interoperation.InteropHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/interoperation/InteropHelper.java",
    "mechanism": "REST",
    "name": "Get Party",
    "description": "Retrieves party information by identifier.",
    "path": "/fineract-provider/api/v1/interoperation/parties/{idType}/{idValue}",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.interoperation.InteropHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/interoperation/InteropHelper.java",
    "mechanism": "REST",
    "name": "Post Party",
    "description": "Registers or updates a party.",
    "path": "/fineract-provider/api/v1/interoperation/parties/{idType}/{idValue}",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON containing accountId"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.interoperation.InteropHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/interoperation/InteropHelper.java",
    "mechanism": "REST",
    "name": "Delete Party",
    "description": "Deletes a party.",
    "path": "/fineract-provider/api/v1/interoperation/parties/{idType}/{idValue}",
    "method": "DELETE",
    "direction": "CONSUMER",
    "requestBody": "JSON containing accountId"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.interoperation.InteropHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/interoperation/InteropHelper.java",
    "mechanism": "REST",
    "name": "Get Transaction Request",
    "description": "Retrieves a transaction request.",
    "path": "/fineract-provider/api/v1/interoperation/transactions/{transactionCode}/requests/{requestCode}",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.interoperation.InteropHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/interoperation/InteropHelper.java",
    "mechanism": "REST",
    "name": "Post Transaction Request",
    "description": "Creates a transaction request.",
    "path": "/fineract-provider/api/v1/interoperation/requests",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON with transaction details"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.interoperation.InteropHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/interoperation/InteropHelper.java",
    "mechanism": "REST",
    "name": "Get Quote",
    "description": "Retrieves a quote.",
    "path": "/fineract-provider/api/v1/interoperation/transactions/{transactionCode}/quotes/{quoteCode}",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.interoperation.InteropHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/interoperation/InteropHelper.java",
    "mechanism": "REST",
    "name": "Post Quote",
    "description": "Creates a quote.",
    "path": "/fineract-provider/api/v1/interoperation/quotes",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON with quote details"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.interoperation.InteropHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/interoperation/InteropHelper.java",
    "mechanism": "REST",
    "name": "Get Transfer",
    "description": "Retrieves a transfer.",
    "path": "/fineract-provider/api/v1/interoperation/transactions/{transactionCode}/transfers/{transferCode}",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.interoperation.InteropHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/interoperation/InteropHelper.java",
    "mechanism": "REST",
    "name": "Post Transfer",
    "description": "Creates or prepares a transfer.",
    "path": "/fineract-provider/api/v1/interoperation/transfers",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON with transfer details"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.interoperation.InteropTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/interoperation/InteropTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to perform integration tests.",
    "path": "Various (managed by helper classes)",
    "method": "GET, POST, PUT, DELETE",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Determined by Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.investor.externalassetowner",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/ExternalAssetOwnerTransferCancelTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming Fineract APIs to perform operations like creating clients, loans, and managing asset transfers.",
    "path": "Various (e.g., /loans, /external-asset-owners)",
    "method": "GET, POST, PUT, DELETE",
    "direction": "PRODUCER",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Configured via Utils.initializeRESTAssured()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.investor.externalassetowner",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/ExternalAssetOwnerTransferTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Consumes Fineract REST APIs to perform integration tests.",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "Configured via Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey()"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.investor.externalassetowner",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/SearchExternalAssetOwnerTransferTest.java",
    "mechanism": "REST",
    "name": "External Asset Owner API",
    "description": "Consumes the External Asset Owner REST API to search for, initiate, and cancel asset transfers.",
    "path": "/external-asset-owners/transfers/search",
    "method": "GET",
    "direction": "CONSUMER",
    "requestBody": "PagedRequestExternalAssetOwnerSearchRequest (as query params)",
    "responseBody": "PageExternalTransferData"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.investor.externalassetowner.InitiateExternalAssetOwnerTransferTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/InitiateExternalAssetOwnerTransferTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "Interacts with the Fineract platform API to create clients, loans, and manage external asset owner transfers.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.support.instancemode",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/support/instancemode/InstanceModeSupportExtension.java",
    "mechanism": "REST",
    "name": "Instance Mode Configuration API",
    "description": "Calls the application's API to change the instance mode (read/write/batch settings).",
    "direction": "PRODUCER",
    "authentication": "Basic Auth (via Utils helper)",
    "protocol": "HTTP",
    "connectionInfo": "Managed by RestAssured configuration"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.support.instancemode",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/support/instancemode/InstanceModeHelper.java",
    "mechanism": "REST",
    "name": "Change Instance Mode",
    "description": "Updates the operational mode of the Fineract instance via API.",
    "path": "/fineract-provider/api/v1/instance-mode",
    "method": "PUT",
    "direction": "PRODUCER",
    "requestBody": "ChangeInstanceModeRequest (JSON)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.useradministration.roles",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/useradministration/roles/RolesHelper.java",
    "mechanism": "REST",
    "name": "Create Role",
    "description": "Creates a new role via the API.",
    "path": "/fineract-provider/api/v1/roles",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON object with 'name' and 'description'",
    "responseBody": "JSON object containing 'resourceId'"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.useradministration.roles",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/useradministration/roles/RolesHelper.java",
    "mechanism": "REST",
    "name": "Get Role Details",
    "description": "Retrieves details of a specific role.",
    "path": "/fineract-provider/api/v1/roles/{roleId}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON object with role details"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.useradministration.roles",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/useradministration/roles/RolesHelper.java",
    "mechanism": "REST",
    "name": "Disable Role",
    "description": "Disables a role using a command parameter.",
    "path": "/fineract-provider/api/v1/roles/{roleId}?command=disable",
    "method": "POST",
    "direction": "CONSUMER",
    "responseBody": "JSON object containing 'resourceId'"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.useradministration.roles",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/useradministration/roles/RolesHelper.java",
    "mechanism": "REST",
    "name": "Enable Role",
    "description": "Enables a role using a command parameter.",
    "path": "/fineract-provider/api/v1/roles/{roleId}?command=enable",
    "method": "POST",
    "direction": "CONSUMER",
    "responseBody": "JSON object containing 'resourceId'"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.useradministration.roles",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/useradministration/roles/RolesHelper.java",
    "mechanism": "REST",
    "name": "Delete Role",
    "description": "Deletes a role.",
    "path": "/fineract-provider/api/v1/roles/{roleId}?command=enable",
    "method": "DELETE",
    "direction": "CONSUMER",
    "responseBody": "JSON object containing 'resourceId'"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.useradministration.roles",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/useradministration/roles/RolesHelper.java",
    "mechanism": "REST",
    "name": "Update Permissions",
    "description": "Updates permissions for a role.",
    "path": "/fineract-provider/api/v1/roles/{roleId}/permissions",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON object with 'permissions' map",
    "responseBody": "JSON response"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.useradministration.users",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/useradministration/users/UserHelper.java",
    "mechanism": "REST",
    "name": "Create User",
    "description": "Creates a new user in the system.",
    "path": "/fineract-provider/api/v1/users",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON object containing user details (username, firstname, lastname, email, officeId, staffId, roles, etc.)",
    "responseBody": "JSON object containing the resourceId of the created user"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.useradministration.users",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/useradministration/users/UserHelper.java",
    "mechanism": "REST",
    "name": "Get Users",
    "description": "Retrieves a list of all users.",
    "path": "/fineract-provider/api/v1/users",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON array of user objects"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.useradministration.users",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/useradministration/users/UserHelper.java",
    "mechanism": "REST",
    "name": "Update User",
    "description": "Updates an existing user.",
    "path": "/fineract-provider/api/v1/users/{userId}",
    "method": "PUT",
    "direction": "PRODUCER",
    "requestBody": "JSON object containing fields to update",
    "responseBody": "JSON object containing changes"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.useradministration.users",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/useradministration/users/UserHelper.java",
    "mechanism": "REST",
    "name": "Delete User",
    "description": "Deletes a user from the system.",
    "path": "/fineract-provider/api/v1/users/{userId}",
    "method": "DELETE",
    "direction": "PRODUCER",
    "responseBody": "JSON object confirming deletion"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.variableinstallments.VariableInstallmentsIntegrationTest",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/variableinstallments/VariableInstallmentsIntegrationTest.java",
    "mechanism": "REST",
    "name": "Fineract API",
    "description": "The test class acts as a REST client consuming the Fineract API to create products, clients, loans, and manage installments.",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (Base64 encoded key)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.variableinstallments.VariableIntallmentsTransactionHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/variableinstallments/VariableIntallmentsTransactionHelper.java",
    "mechanism": "REST",
    "name": "Retrieve Loan Schedule",
    "description": "Fetches the repayment schedule for a loan via the Fineract API.",
    "path": "/fineract-provider/api/v1/loans/{loanId}",
    "method": "GET",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "https://localhost:8443/fineract-provider/api/v1/loans/"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.variableinstallments.VariableIntallmentsTransactionHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/variableinstallments/VariableIntallmentsTransactionHelper.java",
    "mechanism": "REST",
    "name": "Calculate Loan Schedule (Validate Variations)",
    "description": "Calculates the loan schedule based on provided variations without persisting them.",
    "path": "/fineract-provider/api/v1/loans/{loanId}/schedule",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON string containing variation exceptions",
    "protocol": "HTTP",
    "connectionInfo": "https://localhost:8443/fineract-provider/api/v1/loans/"
  },
  {
    "namespace": "org.apache.fineract.integrationtests.variableinstallments.VariableIntallmentsTransactionHelper",
    "filepath": "integration-tests/src/test/java/org/apache/fineract/integrationtests/variableinstallments/VariableIntallmentsTransactionHelper.java",
    "mechanism": "REST",
    "name": "Add Variations (Submit Variations)",
    "description": "Submits variable installment variations to be added to the loan schedule.",
    "path": "/fineract-provider/api/v1/loans/{loanId}/schedule",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON string containing variation exceptions",
    "protocol": "HTTP",
    "connectionInfo": "https://localhost:8443/fineract-provider/api/v1/loans/"
  },
  {
    "namespace": "org.apache.fineract.interoperation.api.InteropApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/interoperation/api/InteropApiResource.java",
    "mechanism": "REST",
    "name": "Interoperation API",
    "description": "Main API resource for interoperation functionality.",
    "path": "/v1/interoperation",
    "method": "GET, POST, DELETE",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.interoperation.api.InteropApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/interoperation/api/InteropApiResource.java",
    "mechanism": "REST",
    "name": "Health Check",
    "description": "Health check endpoint.",
    "path": "/v1/interoperation/health",
    "method": "GET"
  },
  {
    "namespace": "org.apache.fineract.interoperation.api.InteropApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/interoperation/api/InteropApiResource.java",
    "mechanism": "REST",
    "name": "Get Account Details",
    "description": "Endpoint to retrieve account details.",
    "path": "/v1/interoperation/accounts/{accountId}",
    "method": "GET"
  },
  {
    "namespace": "org.apache.fineract.interoperation.api.InteropApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/interoperation/api/InteropApiResource.java",
    "mechanism": "REST",
    "name": "Get Account Transactions",
    "description": "Endpoint to retrieve account transactions.",
    "path": "/v1/interoperation/accounts/{accountId}/transactions",
    "method": "GET"
  },
  {
    "namespace": "org.apache.fineract.interoperation.api.InteropApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/interoperation/api/InteropApiResource.java",
    "mechanism": "REST",
    "name": "Get Account Identifiers",
    "description": "Endpoint to retrieve account identifiers.",
    "path": "/v1/interoperation/accounts/{accountId}/identifiers",
    "method": "GET"
  },
  {
    "namespace": "org.apache.fineract.interoperation.api.InteropApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/interoperation/api/InteropApiResource.java",
    "mechanism": "REST",
    "name": "Get Account By Identifier",
    "description": "Endpoint to retrieve account by identifier.",
    "path": "/v1/interoperation/parties/{idType}/{idValue}",
    "method": "GET"
  },
  {
    "namespace": "org.apache.fineract.interoperation.api.InteropApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/interoperation/api/InteropApiResource.java",
    "mechanism": "REST",
    "name": "Register Account Identifier",
    "description": "Endpoint to register account identifier.",
    "path": "/v1/interoperation/parties/{idType}/{idValue}",
    "method": "POST"
  },
  {
    "namespace": "org.apache.fineract.interoperation.api.InteropApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/interoperation/api/InteropApiResource.java",
    "mechanism": "REST",
    "name": "Delete Account Identifier",
    "description": "Endpoint to delete account identifier.",
    "path": "/v1/interoperation/parties/{idType}/{idValue}",
    "method": "DELETE"
  },
  {
    "namespace": "org.apache.fineract.interoperation.api.InteropApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/interoperation/api/InteropApiResource.java",
    "mechanism": "REST",
    "name": "Get Transaction Request",
    "description": "Endpoint to get transaction request details.",
    "path": "/v1/interoperation/transactions/{transactionCode}/requests/{requestCode}",
    "method": "GET"
  },
  {
    "namespace": "org.apache.fineract.interoperation.api.InteropApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/interoperation/api/InteropApiResource.java",
    "mechanism": "REST",
    "name": "Create Transaction Request",
    "description": "Endpoint to create a transaction request.",
    "path": "/v1/interoperation/requests",
    "method": "POST"
  },
  {
    "namespace": "org.apache.fineract.interoperation.api.InteropApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/interoperation/api/InteropApiResource.java",
    "mechanism": "REST",
    "name": "Get Quote",
    "description": "Endpoint to get quote details.",
    "path": "/v1/interoperation/transactions/{transactionCode}/quotes/{quoteCode}",
    "method": "GET"
  },
  {
    "namespace": "org.apache.fineract.interoperation.api.InteropApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/interoperation/api/InteropApiResource.java",
    "mechanism": "REST",
    "name": "Create Quote",
    "description": "Endpoint to create a quote.",
    "path": "/v1/interoperation/quotes",
    "method": "POST"
  },
  {
    "namespace": "org.apache.fineract.interoperation.api.InteropApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/interoperation/api/InteropApiResource.java",
    "mechanism": "REST",
    "name": "Get Transfer",
    "description": "Endpoint to get transfer details.",
    "path": "/v1/interoperation/transactions/{transactionCode}/transfers/{transferCode}",
    "method": "GET"
  },
  {
    "namespace": "org.apache.fineract.interoperation.api.InteropApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/interoperation/api/InteropApiResource.java",
    "mechanism": "REST",
    "name": "Perform Transfer",
    "description": "Endpoint to perform a transfer.",
    "path": "/v1/interoperation/transfers",
    "method": "POST"
  },
  {
    "namespace": "org.apache.fineract.interoperation.api.InteropApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/interoperation/api/InteropApiResource.java",
    "mechanism": "REST",
    "name": "Get Client KYC",
    "description": "Endpoint to get client KYC.",
    "path": "/v1/interoperation/accounts/{accountId}/kyc",
    "method": "GET"
  },
  {
    "namespace": "org.apache.fineract.interoperation.api.InteropApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/interoperation/api/InteropApiResource.java",
    "mechanism": "REST",
    "name": "Disburse Loan",
    "description": "Endpoint to disburse a loan.",
    "path": "/v1/interoperation/transactions/{accountId}/disburse",
    "method": "POST"
  },
  {
    "namespace": "org.apache.fineract.interoperation.api.InteropApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/interoperation/api/InteropApiResource.java",
    "mechanism": "REST",
    "name": "Loan Repayment",
    "description": "Endpoint to repay a loan.",
    "path": "/v1/interoperation/transactions/{accountId}/loanrepayment",
    "method": "POST"
  },
  {
    "namespace": "org.apache.fineract.investor.api",
    "filepath": "fineract-investor/src/main/java/org/apache/fineract/investor/api/ExternalAssetOwnersApiResource.java",
    "mechanism": "REST",
    "name": "External Asset Owners API",
    "description": "Provides endpoints for managing external asset owners, including loan transfers (sale/buyback), cancellations, and data retrieval.",
    "path": "/v1/external-asset-owners",
    "method": "GET, POST",
    "direction": "BIDIRECTIONAL",
    "authentication": "Platform User Rights (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.investor.exception.exceptionmapper.ExternalAssetOwnerInitiateTransferExceptionMapper",
    "filepath": "fineract-investor/src/main/java/org/apache/fineract/investor/exception/exceptionmapper/ExternalAssetOwnerInitiateTransferExceptionMapper.java",
    "mechanism": "REST",
    "name": "ExternalAssetOwnerInitiateTransferExceptionMapper",
    "description": "JAX-RS ExceptionMapper that maps ExternalAssetOwnerInitiateTransferException to HTTP 403 responses.",
    "direction": "PRODUCER",
    "responseBody": "JSON object representing ApiParameterError",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.investor.service",
    "filepath": "fineract-investor/src/main/java/org/apache/fineract/investor/service/ExternalAssetOwnerLoanStatusChangePlatformServiceImpl.java",
    "mechanism": "OTHER",
    "name": "LoanStatusChangedBusinessEvent Listener",
    "description": "Consumes internal business events triggered when a loan's status changes.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.investor.service.CancelLoanFromExternalAssetOwnerHandler",
    "filepath": "fineract-investor/src/main/java/org/apache/fineract/investor/service/CancelLoanFromExternalAssetOwnerHandler.java",
    "mechanism": "OTHER",
    "name": "ASSET_OWNER_TRANSACTION CANCEL",
    "description": "Fineract Command Handler for cancelling asset owner transactions.",
    "path": "ASSET_OWNER_TRANSACTION / CANCEL",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.mix.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/mix/api/MixTaxonomyMappingApiResource.java",
    "mechanism": "REST",
    "name": "retrieveTaxonomyMapping",
    "description": "Endpoint to retrieve MIX taxonomy mapping data.",
    "path": "/v1/mixmapping",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON representation of MixTaxonomyMappingData",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.mix.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/mix/api/MixTaxonomyMappingApiResource.java",
    "mechanism": "REST",
    "name": "updateTaxonomyMapping",
    "description": "Endpoint to update MIX taxonomy mapping configuration.",
    "path": "/v1/mixmapping",
    "method": "PUT",
    "requestBody": "JSON configuration for taxonomy mapping",
    "responseBody": "JSON representation of CommandProcessingResult",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.mix.api.MixReportApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/mix/api/MixReportApiResource.java",
    "mechanism": "REST",
    "name": "retrieveXBRLReport",
    "description": "Endpoint to retrieve XBRL reports based on date range and currency.",
    "path": "/v1/mixreport",
    "method": "GET",
    "responseBody": "XML String (application/xml)"
  },
  {
    "namespace": "org.apache.fineract.mix.api.MixTaxonomyApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/mix/api/MixTaxonomyApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAll",
    "description": "Retrieves the list of Mix Taxonomy data.",
    "path": "/v1/mixtaxonomy",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON list of MixTaxonomyData",
    "authentication": "Platform Security Context",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.mix.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/mix/handler/UpdateTaxonomyMappingCommandHandler.java",
    "mechanism": "OTHER",
    "name": "XBRLMAPPING UPDATE Command Handler",
    "description": "Registers a handler for the Fineract Command Query Separation (CQS) engine to process UPDATE actions on XBRLMAPPING entities.",
    "path": "XBRLMAPPING/UPDATE",
    "direction": "CONSUMER",
    "requestBody": "JsonCommand",
    "responseBody": "CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.notification.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/notification/api/NotificationApiResource.java",
    "mechanism": "REST",
    "name": "getAllNotifications",
    "description": "Endpoint to retrieve paginated notifications for the user.",
    "path": "/v1/notifications",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON representation of Page<NotificationData>",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.notification.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/notification/api/NotificationApiResource.java",
    "mechanism": "REST",
    "name": "update",
    "description": "Endpoint to mark notifications as read.",
    "path": "/v1/notifications",
    "method": "PUT",
    "requestBody": "None",
    "responseBody": "None",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.notification.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/notification/api/NotificationApiResourceSwagger.java",
    "mechanism": "REST",
    "name": "GetNotificationsResponse",
    "description": "Defines the schema and example structure for the response body of the notification retrieval REST API endpoint.",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.notification.config",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/notification/config/MessagingConfiguration.java",
    "mechanism": "ACTIVEMQ-QUEUE",
    "name": "NotificationQueue",
    "description": "JMS Queue used for receiving notification events.",
    "queueOrTopicName": "NotificationQueue",
    "direction": "CONSUMER",
    "connectionInfo": "tcp://localhost:61616 (default) or configured via 'brokerUrl' property"
  },
  {
    "namespace": "org.apache.fineract.notification.config",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/notification/config/MessagingConfiguration.java",
    "mechanism": "ACTIVEMQ-QUEUE",
    "name": "JmsTemplate",
    "description": "JMS Template configured for sending messages to ActiveMQ.",
    "direction": "PRODUCER",
    "connectionInfo": "tcp://localhost:61616 (default) or configured via 'brokerUrl' property"
  },
  {
    "namespace": "org.apache.fineract.notification.eventandlistener",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/notification/eventandlistener/ActiveMQNotificationEventListener.java",
    "mechanism": "ACTIVEMQ-QUEUE",
    "name": "ActiveMQ Notification Listener",
    "description": "Consumes JMS messages containing NotificationData objects when ActiveMQ is enabled.",
    "messageType": "ObjectMessage containing NotificationData",
    "direction": "CONSUMER",
    "protocol": "JMS (Jakarta Messaging)",
    "connectionInfo": "Managed by Spring JMS container (implied by SessionAwareMessageListener)"
  },
  {
    "namespace": "org.apache.fineract.notification.eventandlistener",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/notification/eventandlistener/SpringNotificationEventPublisher.java",
    "mechanism": "OTHER",
    "name": "Spring Application Event Bus",
    "description": "Publishes internal application events using Spring's ApplicationEventPublisher mechanism.",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.notification.eventandlistener",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/notification/eventandlistener/ActiveMQNotificationEventPublisher.java",
    "mechanism": "ACTIVEMQ-QUEUE",
    "name": "NotificationQueue",
    "description": "ActiveMQ queue used for broadcasting notification events.",
    "path": "NotificationQueue",
    "queueOrTopicName": "NotificationQueue",
    "messageType": "ObjectMessage (NotificationData)",
    "direction": "PRODUCER",
    "protocol": "JMS/ActiveMQ",
    "connectionInfo": "Managed by JmsTemplate"
  },
  {
    "namespace": "org.apache.fineract.notification.eventandlistener",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/notification/eventandlistener/SpringNotificationEventListener.java",
    "mechanism": "OTHER",
    "name": "Spring Application Event Listener",
    "description": "Listens for internal Spring application events (NotificationEvent) as an alternative to external messaging when ActiveMQ is disabled.",
    "messageType": "NotificationEvent",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.oauth2tests.OAuth2AuthenticationTest",
    "filepath": "oauth2-tests/src/test/java/org/apache/fineract/oauth2tests/OAuth2AuthenticationTest.java",
    "mechanism": "REST",
    "name": "Actuator Health",
    "description": "Spring Boot Actuator health check endpoint used to verify service availability.",
    "path": "/fineract-provider/actuator/health",
    "method": "GET",
    "direction": "CONSUMER",
    "protocol": "HTTP",
    "connectionInfo": "https://localhost:8443"
  },
  {
    "namespace": "org.apache.fineract.oauth2tests.OAuth2AuthenticationTest",
    "filepath": "oauth2-tests/src/test/java/org/apache/fineract/oauth2tests/OAuth2AuthenticationTest.java",
    "mechanism": "REST",
    "name": "Keycloak Token Endpoint",
    "description": "External Identity Provider endpoint used to obtain OAuth2 tokens.",
    "path": "/auth/realms/fineract/token",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "grant_type, client_id, client_secret, assertion",
    "responseBody": "access_token",
    "protocol": "HTTP",
    "connectionInfo": "http://localhost:9000"
  },
  {
    "namespace": "org.apache.fineract.oauth2tests.OAuth2AuthenticationTest",
    "filepath": "oauth2-tests/src/test/java/org/apache/fineract/oauth2tests/OAuth2AuthenticationTest.java",
    "mechanism": "REST",
    "name": "Fineract API - Offices",
    "description": "Protected API endpoint to retrieve office details.",
    "path": "/fineract-provider/api/v1/offices/1",
    "method": "GET",
    "direction": "CONSUMER",
    "authentication": "Bearer Token (OAuth2)",
    "protocol": "HTTP",
    "connectionInfo": "https://localhost:8443"
  },
  {
    "namespace": "org.apache.fineract.oauth2tests.OAuth2AuthenticationTest",
    "filepath": "oauth2-tests/src/test/java/org/apache/fineract/oauth2tests/OAuth2AuthenticationTest.java",
    "mechanism": "REST",
    "name": "Fineract API - User Details",
    "description": "Protected API endpoint to retrieve current user authentication details.",
    "path": "/fineract-provider/api/v1/userdetails",
    "method": "GET",
    "direction": "CONSUMER",
    "authentication": "Bearer Token (OAuth2)",
    "protocol": "HTTP",
    "connectionInfo": "https://localhost:8443"
  },
  {
    "namespace": "org.apache.fineract.organisation.holiday.api.HolidaysApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/api/HolidaysApiResource.java",
    "mechanism": "REST",
    "name": "Create Holiday",
    "description": "Endpoint to create a new holiday.",
    "path": "/v1/holidays",
    "method": "POST",
    "requestBody": "JSON object with holiday details (name, dates, offices)",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.organisation.holiday.api.HolidaysApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/api/HolidaysApiResource.java",
    "mechanism": "REST",
    "name": "Activate Holiday",
    "description": "Endpoint to activate a pending holiday.",
    "path": "/v1/holidays/{holidayId}",
    "method": "POST",
    "requestBody": "Empty JSON or specific command parameters",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.organisation.holiday.api.HolidaysApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/api/HolidaysApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Holiday",
    "description": "Endpoint to retrieve a single holiday by ID.",
    "path": "/v1/holidays/{holidayId}",
    "method": "GET",
    "responseBody": "JSON object representing HolidayData"
  },
  {
    "namespace": "org.apache.fineract.organisation.holiday.api.HolidaysApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/api/HolidaysApiResource.java",
    "mechanism": "REST",
    "name": "Update Holiday",
    "description": "Endpoint to update an existing holiday.",
    "path": "/v1/holidays/{holidayId}",
    "method": "PUT",
    "requestBody": "JSON object with fields to update",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.organisation.holiday.api.HolidaysApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/api/HolidaysApiResource.java",
    "mechanism": "REST",
    "name": "Delete Holiday",
    "description": "Endpoint to soft-delete a holiday.",
    "path": "/v1/holidays/{holidayId}",
    "method": "DELETE",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.organisation.holiday.api.HolidaysApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/api/HolidaysApiResource.java",
    "mechanism": "REST",
    "name": "List Holidays",
    "description": "Endpoint to list holidays with optional filtering.",
    "path": "/v1/holidays",
    "method": "GET",
    "responseBody": "JSON array of HolidayData objects"
  },
  {
    "namespace": "org.apache.fineract.organisation.holiday.api.HolidaysApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/holiday/api/HolidaysApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Template",
    "description": "Endpoint to retrieve options for repayment schedule updates.",
    "path": "/v1/holidays/template",
    "method": "GET",
    "responseBody": "JSON object with template options"
  },
  {
    "namespace": "org.apache.fineract.organisation.monetary.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/monetary/api/CurrenciesApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Currency Configuration",
    "description": "Endpoint to retrieve the list of permitted and available currencies.",
    "path": "/v1/currencies",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "ApplicationCurrencyConfigurationData (JSON)"
  },
  {
    "namespace": "org.apache.fineract.organisation.monetary.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/monetary/api/CurrenciesApiResource.java",
    "mechanism": "REST",
    "name": "Update Currency Configuration",
    "description": "Endpoint to update the list of permitted currencies.",
    "path": "/v1/currencies",
    "method": "PUT",
    "direction": "PRODUCER",
    "requestBody": "JSON payload with currency options",
    "responseBody": "CommandProcessingResult (JSON)"
  },
  {
    "namespace": "org.apache.fineract.organisation.office.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/office/api/OfficeTransactionsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Office Transactions",
    "description": "Endpoint to get a list of office transactions.",
    "path": "/v1/officetransactions",
    "method": "GET",
    "responseBody": "JSON array of OfficeTransactionData",
    "authentication": "PlatformSecurityContext (Internal)"
  },
  {
    "namespace": "org.apache.fineract.organisation.office.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/office/api/OfficeTransactionsApiResource.java",
    "mechanism": "REST",
    "name": "New Office Transaction Template",
    "description": "Endpoint to retrieve a template for creating a new office transaction.",
    "path": "/v1/officetransactions/template",
    "method": "GET",
    "responseBody": "JSON object of OfficeTransactionData (template)",
    "authentication": "PlatformSecurityContext (Internal)"
  },
  {
    "namespace": "org.apache.fineract.organisation.office.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/office/api/OfficeTransactionsApiResource.java",
    "mechanism": "REST",
    "name": "Transfer Money",
    "description": "Endpoint to create a new office transaction (transfer money).",
    "path": "/v1/officetransactions",
    "method": "POST",
    "requestBody": "JSON object defining the transaction",
    "responseBody": "JSON object of CommandProcessingResult",
    "authentication": "PlatformSecurityContext (Internal)"
  },
  {
    "namespace": "org.apache.fineract.organisation.office.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/office/api/OfficeTransactionsApiResource.java",
    "mechanism": "REST",
    "name": "Delete Transaction",
    "description": "Endpoint to delete a specific office transaction.",
    "path": "/v1/officetransactions/{transactionId}",
    "method": "DELETE",
    "responseBody": "JSON object of CommandProcessingResult",
    "authentication": "PlatformSecurityContext (Internal)"
  },
  {
    "namespace": "org.apache.fineract.organisation.office.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/office/api/OfficesApiResourceSwagger.java",
    "mechanism": "REST",
    "name": "Offices API Schemas",
    "description": "Defines the Swagger/OpenAPI schemas (Request and Response bodies) for the Offices REST API endpoints.",
    "direction": "BOTH",
    "protocol": "HTTP/JSON"
  },
  {
    "namespace": "org.apache.fineract.organisation.office.api.OfficesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/office/api/OfficesApiResource.java",
    "mechanism": "REST",
    "name": "List Offices",
    "description": "Endpoint to retrieve a list of offices.",
    "path": "/v1/offices",
    "method": "GET",
    "responseBody": "JSON array of OfficeData"
  },
  {
    "namespace": "org.apache.fineract.organisation.office.api.OfficesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/office/api/OfficesApiResource.java",
    "mechanism": "REST",
    "name": "Create Office",
    "description": "Endpoint to create a new office.",
    "path": "/v1/offices",
    "method": "POST",
    "requestBody": "JSON object with office details",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.organisation.office.api.OfficesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/office/api/OfficesApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Office",
    "description": "Endpoint to retrieve a specific office by ID.",
    "path": "/v1/offices/{officeId}",
    "method": "GET",
    "responseBody": "JSON object of OfficeData"
  },
  {
    "namespace": "org.apache.fineract.organisation.office.api.OfficesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/office/api/OfficesApiResource.java",
    "mechanism": "REST",
    "name": "Update Office",
    "description": "Endpoint to update an existing office.",
    "path": "/v1/offices/{officeId}",
    "method": "PUT",
    "requestBody": "JSON object with fields to update",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.organisation.office.api.OfficesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/office/api/OfficesApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Office by External ID",
    "description": "Endpoint to retrieve an office using an external ID.",
    "path": "/v1/offices/external-id/{externalId}",
    "method": "GET",
    "responseBody": "JSON object of OfficeData"
  },
  {
    "namespace": "org.apache.fineract.organisation.office.api.OfficesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/office/api/OfficesApiResource.java",
    "mechanism": "REST",
    "name": "Download Template",
    "description": "Endpoint to download an Excel template for bulk import.",
    "path": "/v1/offices/downloadtemplate",
    "method": "GET",
    "responseBody": "application/vnd.ms-excel file"
  },
  {
    "namespace": "org.apache.fineract.organisation.office.api.OfficesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/office/api/OfficesApiResource.java",
    "mechanism": "REST",
    "name": "Upload Template",
    "description": "Endpoint to upload a filled Excel template for bulk import.",
    "path": "/v1/offices/uploadtemplate",
    "method": "POST",
    "requestBody": "Multipart form data with file",
    "responseBody": "JSON object with import document ID"
  },
  {
    "namespace": "org.apache.fineract.organisation.provisioning.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/api/ProvisioningCategoryApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve All Provisioning Categories",
    "description": "Endpoint to retrieve all provisioning categories.",
    "path": "/v1/provisioningcategory",
    "method": "GET",
    "responseBody": "JSON array of ProvisioningCategoryData",
    "authentication": "PlatformSecurityContext",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.organisation.provisioning.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/api/ProvisioningCategoryApiResource.java",
    "mechanism": "REST",
    "name": "Create Provisioning Category",
    "description": "Endpoint to create a new provisioning category.",
    "path": "/v1/provisioningcategory",
    "method": "POST",
    "requestBody": "JSON object defining the category",
    "responseBody": "JSON object with command processing result",
    "authentication": "PlatformSecurityContext",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.organisation.provisioning.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/api/ProvisioningCategoryApiResource.java",
    "mechanism": "REST",
    "name": "Update Provisioning Category",
    "description": "Endpoint to update an existing provisioning category.",
    "path": "/v1/provisioningcategory/{categoryId}",
    "method": "PUT",
    "requestBody": "JSON object with updates",
    "responseBody": "JSON object with command processing result",
    "authentication": "PlatformSecurityContext",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.organisation.provisioning.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/api/ProvisioningCategoryApiResource.java",
    "mechanism": "REST",
    "name": "Delete Provisioning Category",
    "description": "Endpoint to delete a provisioning category.",
    "path": "/v1/provisioningcategory/{categoryId}",
    "method": "DELETE",
    "responseBody": "JSON object with command processing result",
    "authentication": "PlatformSecurityContext",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.organisation.provisioning.api.ProvisioningCriteriaApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/api/ProvisioningCriteriaApiResource.java",
    "mechanism": "REST",
    "name": "Provisioning Criteria API",
    "description": "RESTful endpoints for managing Provisioning Criteria.",
    "path": "/v1/provisioningcriteria",
    "method": "GET, POST, PUT, DELETE",
    "direction": "BIDIRECTIONAL",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.organisation.provisioning.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/UpdateProvisioningCategoryRequestCommandHandler.java",
    "mechanism": "OTHER",
    "name": "PROVISIONCATEGORY UPDATE Command Handler",
    "description": "Registers a handler for the 'UPDATE' action on 'PROVISIONCATEGORY' entities within the Fineract command framework.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.organisation.provisioning.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/CreateProvisioningCriteriaRequestCommandHandler.java",
    "mechanism": "OTHER",
    "name": "PROVISIONCRITERIA CREATE Handler",
    "description": "Registers as a handler for the internal Command Bus for the entity 'PROVISIONCRITERIA' and action 'CREATE'.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.organisation.provisioning.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/handler/CreateProvisioningCategoryRequestCommandHandler.java",
    "mechanism": "OTHER",
    "name": "PROVISIONCATEGORY CREATE Command",
    "description": "Registers a handler for the internal command bus to process 'CREATE' actions for 'PROVISIONCATEGORY' entities.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.organisation.staff.api.StaffApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/staff/api/StaffApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAll",
    "description": "Retrieve Staff",
    "path": "/v1/staff",
    "method": "GET",
    "responseBody": "JSON array of StaffData",
    "authentication": "PlatformSecurityContext (internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.organisation.staff.api.StaffApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/staff/api/StaffApiResource.java",
    "mechanism": "REST",
    "name": "create",
    "description": "Create a staff member",
    "path": "/v1/staff",
    "method": "POST",
    "requestBody": "JSON object (StaffApiResourceSwagger.PostStaffRequest)",
    "responseBody": "JSON object (StaffApiResourceSwagger.CreateStaffResponse)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.organisation.staff.api.StaffApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/staff/api/StaffApiResource.java",
    "mechanism": "REST",
    "name": "retrieveOne",
    "description": "Retrieve a Staff Member",
    "path": "/v1/staff/{staffId}",
    "method": "GET",
    "responseBody": "JSON object (StaffApiResourceSwagger.RetrieveOneResponse)",
    "authentication": "PlatformSecurityContext (internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.organisation.staff.api.StaffApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/staff/api/StaffApiResource.java",
    "mechanism": "REST",
    "name": "update",
    "description": "Update a Staff Member",
    "path": "/v1/staff/{staffId}",
    "method": "PUT",
    "requestBody": "JSON object (StaffApiResourceSwagger.PutStaffRequest)",
    "responseBody": "JSON object (StaffApiResourceSwagger.UpdateStaffResponse)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.organisation.staff.api.StaffApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/staff/api/StaffApiResource.java",
    "mechanism": "REST",
    "name": "getTemplate",
    "description": "Download staff import template",
    "path": "/v1/staff/downloadtemplate",
    "method": "GET",
    "responseBody": "application/vnd.ms-excel",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.organisation.staff.api.StaffApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/staff/api/StaffApiResource.java",
    "mechanism": "REST",
    "name": "postTemplate",
    "description": "Upload staff template",
    "path": "/v1/staff/uploadtemplate",
    "method": "POST",
    "requestBody": "multipart/form-data",
    "responseBody": "JSON object (Import Document ID)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.organisation.teller.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerJournalApiResource.java",
    "mechanism": "REST",
    "name": "getJournalData",
    "description": "REST endpoint to retrieve cashier journal entries.",
    "path": "/v1/cashiersjournal",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON array of TellerJournalData objects",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.organisation.teller.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/CashierApiResource.java",
    "mechanism": "REST",
    "name": "Get Cashier Data",
    "description": "Endpoint to retrieve cashier information based on filters.",
    "path": "/v1/cashiers",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON array of CashierData objects",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.organisation.teller.api.TellerApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResource.java",
    "mechanism": "REST",
    "name": "Get Tellers",
    "description": "Retrieves list of tellers",
    "path": "/v1/tellers",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.organisation.teller.api.TellerApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResource.java",
    "mechanism": "REST",
    "name": "Create Teller",
    "description": "Creates a new teller",
    "path": "/v1/tellers",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON payload with teller details"
  },
  {
    "namespace": "org.apache.fineract.organisation.teller.api.TellerApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResource.java",
    "mechanism": "REST",
    "name": "Find Teller",
    "description": "Retrieves a specific teller",
    "path": "/v1/tellers/{tellerId}",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.organisation.teller.api.TellerApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResource.java",
    "mechanism": "REST",
    "name": "Update Teller",
    "description": "Updates a specific teller",
    "path": "/v1/tellers/{tellerId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON payload with updated teller details"
  },
  {
    "namespace": "org.apache.fineract.organisation.teller.api.TellerApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResource.java",
    "mechanism": "REST",
    "name": "Delete Teller",
    "description": "Deletes a specific teller",
    "path": "/v1/tellers/{tellerId}",
    "method": "DELETE",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.organisation.teller.api.TellerApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResource.java",
    "mechanism": "REST",
    "name": "Get Cashiers",
    "description": "Lists cashiers for a teller",
    "path": "/v1/tellers/{tellerId}/cashiers",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.organisation.teller.api.TellerApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResource.java",
    "mechanism": "REST",
    "name": "Create Cashier",
    "description": "Allocates a cashier to a teller",
    "path": "/v1/tellers/{tellerId}/cashiers",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON payload with cashier allocation details"
  },
  {
    "namespace": "org.apache.fineract.organisation.teller.api.TellerApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResource.java",
    "mechanism": "REST",
    "name": "Find Cashier",
    "description": "Retrieves a specific cashier",
    "path": "/v1/tellers/{tellerId}/cashiers/{cashierId}",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.organisation.teller.api.TellerApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResource.java",
    "mechanism": "REST",
    "name": "Update Cashier",
    "description": "Updates a cashier allocation",
    "path": "/v1/tellers/{tellerId}/cashiers/{cashierId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON payload with updated cashier details"
  },
  {
    "namespace": "org.apache.fineract.organisation.teller.api.TellerApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResource.java",
    "mechanism": "REST",
    "name": "Delete Cashier",
    "description": "Deletes a cashier allocation",
    "path": "/v1/tellers/{tellerId}/cashiers/{cashierId}",
    "method": "DELETE",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.organisation.teller.api.TellerApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResource.java",
    "mechanism": "REST",
    "name": "Allocate Cash",
    "description": "Allocates cash to a cashier",
    "path": "/v1/tellers/{tellerId}/cashiers/{cashierId}/allocate",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON payload with allocation amount and currency"
  },
  {
    "namespace": "org.apache.fineract.organisation.teller.api.TellerApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResource.java",
    "mechanism": "REST",
    "name": "Settle Cash",
    "description": "Settles cash from a cashier",
    "path": "/v1/tellers/{tellerId}/cashiers/{cashierId}/settle",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON payload with settlement amount and currency"
  },
  {
    "namespace": "org.apache.fineract.organisation.teller.api.TellerApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResource.java",
    "mechanism": "REST",
    "name": "Get Cashier Transactions",
    "description": "Retrieves transactions for a cashier",
    "path": "/v1/tellers/{tellerId}/cashiers/{cashierId}/transactions",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.organisation.teller.api.TellerApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResource.java",
    "mechanism": "REST",
    "name": "Get Teller Transactions",
    "description": "Retrieves transactions for a teller",
    "path": "/v1/tellers/{tellerId}/transactions",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.organisation.teller.api.TellerApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/teller/api/TellerApiResource.java",
    "mechanism": "REST",
    "name": "Get Teller Journals",
    "description": "Retrieves journals for a teller",
    "path": "/v1/tellers/{tellerId}/journals",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.organisation.workingdays.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/workingdays/api/WorkingDaysApiResource.java",
    "mechanism": "REST",
    "name": "List Working days",
    "description": "Retrieves the list of working days configuration.",
    "path": "/v1/workingdays",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON array of WorkingDaysData",
    "authentication": "PlatformSecurityContext (internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.organisation.workingdays.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/workingdays/api/WorkingDaysApiResource.java",
    "mechanism": "REST",
    "name": "Update a Working Day",
    "description": "Updates the configuration for working days.",
    "path": "/v1/workingdays",
    "method": "PUT",
    "requestBody": "JSON object (PutWorkingDaysRequest)",
    "responseBody": "JSON object (PutWorkingDaysResponse)",
    "authentication": "PlatformSecurityContext (internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.organisation.workingdays.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/organisation/workingdays/api/WorkingDaysApiResource.java",
    "mechanism": "REST",
    "name": "Working Days Template",
    "description": "Retrieves template data for working days UI.",
    "path": "/v1/workingdays/template",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON object (GetWorkingDaysTemplateResponse)",
    "authentication": "PlatformSecurityContext (internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.account.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/account/api/StandingInstructionApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Template",
    "description": "Endpoint to retrieve standing instruction template data.",
    "path": "/v1/standinginstructions/template",
    "method": "GET",
    "direction": "BIDIRECTIONAL"
  },
  {
    "namespace": "org.apache.fineract.portfolio.account.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/account/api/StandingInstructionApiResource.java",
    "mechanism": "REST",
    "name": "Create Standing Instruction",
    "description": "Endpoint to create a new standing instruction.",
    "path": "/v1/standinginstructions",
    "method": "POST",
    "direction": "BIDIRECTIONAL",
    "requestBody": "JSON payload defined by StandingInstructionApiResourceSwagger.PostStandingInstructionsRequest"
  },
  {
    "namespace": "org.apache.fineract.portfolio.account.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/account/api/StandingInstructionApiResource.java",
    "mechanism": "REST",
    "name": "Update/Delete Standing Instruction",
    "description": "Endpoint to update or delete a standing instruction.",
    "path": "/v1/standinginstructions/{standingInstructionId}",
    "method": "PUT",
    "direction": "BIDIRECTIONAL",
    "requestBody": "JSON payload defined by StandingInstructionApiResourceSwagger.PutStandingInstructionsStandingInstructionIdRequest"
  },
  {
    "namespace": "org.apache.fineract.portfolio.account.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/account/api/StandingInstructionApiResource.java",
    "mechanism": "REST",
    "name": "List Standing Instructions",
    "description": "Endpoint to list standing instructions with filtering.",
    "path": "/v1/standinginstructions",
    "method": "GET",
    "direction": "BIDIRECTIONAL"
  },
  {
    "namespace": "org.apache.fineract.portfolio.account.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/account/api/StandingInstructionApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Standing Instruction",
    "description": "Endpoint to retrieve a specific standing instruction.",
    "path": "/v1/standinginstructions/{standingInstructionId}",
    "method": "GET",
    "direction": "BIDIRECTIONAL"
  },
  {
    "namespace": "org.apache.fineract.portfolio.account.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/account/api/StandingInstructionHistoryApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAll",
    "description": "Endpoint to retrieve standing instruction run history",
    "path": "/v1/standinginstructionrunhistory",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON array of StandingInstructionHistoryData",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.account.api.AccountTransfersApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/account/api/AccountTransfersApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Account Transfer Template",
    "description": "Retrieves a template for creating account transfers.",
    "path": "/v1/accounttransfers/template",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON (AccountTransferData)",
    "authentication": "PlatformSecurityContext",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.account.api.AccountTransfersApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/account/api/AccountTransfersApiResource.java",
    "mechanism": "REST",
    "name": "Create new Transfer",
    "description": "Creates a new transfer of monetary funds.",
    "path": "/v1/accounttransfers",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON (PostAccountTransfersRequest)",
    "responseBody": "JSON (PostAccountTransfersResponse)",
    "authentication": "PlatformSecurityContext",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.account.api.AccountTransfersApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/account/api/AccountTransfersApiResource.java",
    "mechanism": "REST",
    "name": "List account transfers",
    "description": "Lists account transfers with pagination and search.",
    "path": "/v1/accounttransfers",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON (GetAccountTransfersResponse)",
    "authentication": "PlatformSecurityContext",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.account.api.AccountTransfersApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/account/api/AccountTransfersApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve account transfer",
    "description": "Retrieves a specific account transfer by ID.",
    "path": "/v1/accounttransfers/{transferId}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON (GetAccountTransfersPageItems)",
    "authentication": "PlatformSecurityContext",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.account.api.AccountTransfersApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/account/api/AccountTransfersApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Refund Template",
    "description": "Retrieves a template for refunding a loan by transfer.",
    "path": "/v1/accounttransfers/templateRefundByTransfer",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON (GetAccountTransfersTemplateRefundByTransferResponse)",
    "authentication": "PlatformSecurityContext",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.account.api.AccountTransfersApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/account/api/AccountTransfersApiResource.java",
    "mechanism": "REST",
    "name": "Refund by Transfer",
    "description": "Executes a refund of an active loan by transfer.",
    "path": "/v1/accounttransfers/refundByTransfer",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON (PostAccountTransfersRefundByTransferRequest)",
    "responseBody": "JSON (PostAccountTransfersRefundByTransferResponse)",
    "authentication": "PlatformSecurityContext",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.accounts.api.AccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/accounts/api/AccountsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Share Account Template",
    "description": "Retrieves the template data required for creating a share account.",
    "path": "/v1/accounts/{type}/template",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON object containing field defaults and allowed value lists"
  },
  {
    "namespace": "org.apache.fineract.portfolio.accounts.api.AccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/accounts/api/AccountsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Share Account",
    "description": "Retrieves details of a specific share account.",
    "path": "/v1/accounts/{type}/{accountId}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON object representing the share account"
  },
  {
    "namespace": "org.apache.fineract.portfolio.accounts.api.AccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/accounts/api/AccountsApiResource.java",
    "mechanism": "REST",
    "name": "List Share Accounts",
    "description": "Lists share applications or accounts with pagination.",
    "path": "/v1/accounts/{type}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON array of share accounts"
  },
  {
    "namespace": "org.apache.fineract.portfolio.accounts.api.AccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/accounts/api/AccountsApiResource.java",
    "mechanism": "REST",
    "name": "Create Share Account",
    "description": "Submits a new share application.",
    "path": "/v1/accounts/{type}",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON object with account details (clientId, productId, etc.)",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.portfolio.accounts.api.AccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/accounts/api/AccountsApiResource.java",
    "mechanism": "REST",
    "name": "Handle Account Commands",
    "description": "Performs actions like approve, reject, activate, close, or redeem on a share account.",
    "path": "/v1/accounts/{type}/{accountId}",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON object specific to the command (e.g., note, date)",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.portfolio.accounts.api.AccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/accounts/api/AccountsApiResource.java",
    "mechanism": "REST",
    "name": "Update Share Account",
    "description": "Modifies a share application.",
    "path": "/v1/accounts/{type}/{accountId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON object with fields to update",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.portfolio.accounts.api.AccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/accounts/api/AccountsApiResource.java",
    "mechanism": "REST",
    "name": "Download Template",
    "description": "Downloads an Excel template for bulk import.",
    "path": "/v1/accounts/{type}/downloadtemplate",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "application/vnd.ms-excel file"
  },
  {
    "namespace": "org.apache.fineract.portfolio.accounts.api.AccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/accounts/api/AccountsApiResource.java",
    "mechanism": "REST",
    "name": "Upload Template",
    "description": "Uploads a populated Excel template for bulk import.",
    "path": "/v1/accounts/{type}/uploadtemplate",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "Multipart form data containing the file",
    "responseBody": "JSON object with import document ID"
  },
  {
    "namespace": "org.apache.fineract.portfolio.address.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/address/api/EntityFieldConfigurationApiResource.java",
    "mechanism": "REST",
    "name": "getAddresses",
    "description": "Retrieves the Entity Field Configuration for a specific entity.",
    "path": "/v1/fieldconfiguration/{entity}",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON array of FieldConfigurationData",
    "authentication": "PlatformSecurityContext (Internal Token/Session)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.calendar.api.CalendarsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/api/CalendarsApiResource.java",
    "mechanism": "REST",
    "name": "Calendar Management API",
    "description": "API endpoints for managing calendars associated with entities.",
    "path": "/v1/{entityType}/{entityId}/calendars",
    "method": "GET, POST, PUT, DELETE",
    "requestBody": "JSON (for POST/PUT)",
    "responseBody": "JSON (CalendarData or CommandProcessingResult)",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.calendar.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/handler/UpdateCalendarCommandHandler.java",
    "mechanism": "OTHER",
    "name": "CALENDAR UPDATE Command Handler",
    "description": "Registers a handler for UPDATE actions on the CALENDAR entity via the Fineract Command framework.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.charge.api.ChargesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/api/ChargesApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAllCharges",
    "description": "Retrieve list of defined charges",
    "path": "/v1/charges",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON array of ChargeData",
    "authentication": "PlatformSecurityContext (READ permission)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.charge.api.ChargesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/api/ChargesApiResource.java",
    "mechanism": "REST",
    "name": "retrieveCharge",
    "description": "Retrieve details of a specific charge",
    "path": "/v1/charges/{chargeId}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON object of ChargeData",
    "authentication": "PlatformSecurityContext (READ permission)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.charge.api.ChargesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/api/ChargesApiResource.java",
    "mechanism": "REST",
    "name": "retrieveNewChargeDetails",
    "description": "Retrieve charge template",
    "path": "/v1/charges/template",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON object of ChargeData (Template)",
    "authentication": "PlatformSecurityContext (READ permission)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.charge.api.ChargesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/api/ChargesApiResource.java",
    "mechanism": "REST",
    "name": "createCharge",
    "description": "Create a new charge",
    "path": "/v1/charges",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON object (PostChargesRequest)",
    "responseBody": "JSON object (PostChargesResponse)",
    "authentication": "PlatformSecurityContext",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.charge.api.ChargesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/api/ChargesApiResource.java",
    "mechanism": "REST",
    "name": "updateCharge",
    "description": "Update an existing charge",
    "path": "/v1/charges/{chargeId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON object (PutChargesChargeIdRequest)",
    "responseBody": "JSON object (PutChargesChargeIdResponse)",
    "authentication": "PlatformSecurityContext",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.charge.api.ChargesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/api/ChargesApiResource.java",
    "mechanism": "REST",
    "name": "deleteCharge",
    "description": "Delete a charge",
    "path": "/v1/charges/{chargeId}",
    "method": "DELETE",
    "direction": "CONSUMER",
    "responseBody": "JSON object (DeleteChargesChargeIdResponse)",
    "authentication": "PlatformSecurityContext",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.charge.service.ChargeReadPlatformServiceImpl",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeReadPlatformServiceImpl.java",
    "mechanism": "OTHER",
    "name": "Spring Cache",
    "description": "The method 'retrieveAllCharges' is annotated with @Cacheable(value = \"charges\", ...), indicating it integrates with a caching mechanism (like EhCache, Redis, or an in-memory map) managed by Spring's cache abstraction layer. This caches the full list of charges to improve performance for subsequent requests.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientIdentifiersApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAllClientIdentifiers",
    "description": "List all Identifiers for a Client",
    "path": "/v1/clients/{clientId}/identifiers",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON array of ClientIdentifierData"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientIdentifiersApiResource.java",
    "mechanism": "REST",
    "name": "newClientIdentifierDetails",
    "description": "Retrieve Client Identifier Details Template",
    "path": "/v1/clients/{clientId}/identifiers/template",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON object of ClientIdentifierData with template fields"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientIdentifiersApiResource.java",
    "mechanism": "REST",
    "name": "createClientIdentifier",
    "description": "Create an Identifier for a Client",
    "path": "/v1/clients/{clientId}/identifiers",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON object (PostClientsClientIdIdentifiersRequest)",
    "responseBody": "JSON object (PostClientsClientIdIdentifiersResponse)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientIdentifiersApiResource.java",
    "mechanism": "REST",
    "name": "retrieveClientIdentifiers",
    "description": "Retrieve a specific Client Identifier",
    "path": "/v1/clients/{clientId}/identifiers/{identifierId}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON object of ClientIdentifierData"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientIdentifiersApiResource.java",
    "mechanism": "REST",
    "name": "updateClientIdentifer",
    "description": "Update a Client Identifier",
    "path": "/v1/clients/{clientId}/identifiers/{identifierId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON object (PutClientsClientIdIdentifiersIdentifierIdRequest)",
    "responseBody": "JSON object (PutClientsClientIdIdentifiersIdentifierIdResponse)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientIdentifiersApiResource.java",
    "mechanism": "REST",
    "name": "deleteClientIdentifier",
    "description": "Delete a Client Identifier",
    "path": "/v1/clients/{clientId}/identifiers/{identifierId}",
    "method": "DELETE",
    "direction": "CONSUMER",
    "responseBody": "JSON object (DeleteClientsClientIdIdentifiersIdentifierIdResponse)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientAddressApiResource.java",
    "mechanism": "REST",
    "name": "getAddressesTemplate",
    "description": "Endpoint to retrieve an address template",
    "path": "/v1/client/addresses/template",
    "method": "GET",
    "responseBody": "JSON object containing address template fields"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientAddressApiResource.java",
    "mechanism": "REST",
    "name": "addClientAddress",
    "description": "Endpoint to create a new address for a client",
    "path": "/v1/client/{clientid}/addresses",
    "method": "POST",
    "requestBody": "JSON object with address details",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientAddressApiResource.java",
    "mechanism": "REST",
    "name": "getAddresses",
    "description": "Endpoint to list addresses for a client with optional filtering",
    "path": "/v1/client/{clientid}/addresses",
    "method": "GET",
    "responseBody": "JSON array of address data objects"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientAddressApiResource.java",
    "mechanism": "REST",
    "name": "updateClientAddress",
    "description": "Endpoint to update an existing client address",
    "path": "/v1/client/{clientid}/addresses",
    "method": "PUT",
    "requestBody": "JSON object with updated address fields",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientFamilyMembersApiResource.java",
    "mechanism": "REST",
    "name": "Get Family Member",
    "description": "Retrieves a single family member by ID.",
    "path": "/v1/clients/{clientId}/familymembers/{familyMemberId}",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON object representing ClientFamilyMembersData"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientFamilyMembersApiResource.java",
    "mechanism": "REST",
    "name": "Get Family Members",
    "description": "Retrieves all family members for a client.",
    "path": "/v1/clients/{clientId}/familymembers",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON array of ClientFamilyMembersData"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientFamilyMembersApiResource.java",
    "mechanism": "REST",
    "name": "Get Template",
    "description": "Retrieves a template for creating a family member.",
    "path": "/v1/clients/{clientId}/familymembers/template",
    "method": "GET",
    "direction": "CONSUMER",
    "responseBody": "JSON object with template options"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientFamilyMembersApiResource.java",
    "mechanism": "REST",
    "name": "Update Family Member",
    "description": "Updates an existing family member.",
    "path": "/v1/clients/{clientId}/familymembers/{familyMemberId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON payload with update details",
    "responseBody": "JSON object representing CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientFamilyMembersApiResource.java",
    "mechanism": "REST",
    "name": "Add Family Member",
    "description": "Creates a new family member.",
    "path": "/v1/clients/{clientId}/familymembers",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON payload with new family member details",
    "responseBody": "JSON object representing CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientFamilyMembersApiResource.java",
    "mechanism": "REST",
    "name": "Delete Family Member",
    "description": "Deletes a family member.",
    "path": "/v1/clients/{clientId}/familymembers/{familyMemberId}",
    "method": "DELETE",
    "direction": "CONSUMER",
    "responseBody": "JSON object representing CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientTransactionsApiResourceSwagger.java",
    "mechanism": "REST",
    "name": "GetClientsClientIdTransactionsResponse",
    "description": "Defines the response schema for retrieving a paginated list of client transactions.",
    "path": "/clients/{clientId}/transactions",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON object containing totalFilteredRecords and a set of pageItems (transactions)."
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientTransactionsApiResourceSwagger.java",
    "mechanism": "REST",
    "name": "GetClientsClientIdTransactionsTransactionIdResponse",
    "description": "Defines the response schema for retrieving a specific client transaction by ID.",
    "path": "/clients/{clientId}/transactions/{transactionId}",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON object containing transaction details like id, officeId, type, date, currency, and amount."
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientTransactionsApiResourceSwagger.java",
    "mechanism": "REST",
    "name": "PostClientsClientIdTransactionsTransactionIdResponse",
    "description": "Defines the response schema for modifying a specific client transaction (e.g., undoing a transaction).",
    "path": "/clients/{clientId}/transactions/{transactionId}",
    "method": "POST",
    "direction": "PRODUCER",
    "responseBody": "JSON object containing resourceId, clientId, and officeId."
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/InternalClientInformationApiResource.java",
    "mechanism": "REST",
    "name": "Get Client Audit Fields",
    "description": "Endpoint to retrieve audit information (created/modified details) for a specific client.",
    "path": "/v1/internal/client/{clientId}/audit",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON object containing audit fields (createdBy, createdDate, lastModifiedBy, lastModifiedDate)",
    "authentication": "unknown",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientChargesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientChargesApiResource.java",
    "mechanism": "REST",
    "name": "List Client Charges",
    "description": "Retrieves a paginated list of charges for a client.",
    "path": "/v1/clients/{clientId}/charges",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientChargesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientChargesApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Template",
    "description": "Retrieves a template for creating a new client charge.",
    "path": "/v1/clients/{clientId}/charges/template",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientChargesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientChargesApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Client Charge",
    "description": "Retrieves a specific client charge.",
    "path": "/v1/clients/{clientId}/charges/{chargeId}",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientChargesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientChargesApiResource.java",
    "mechanism": "REST",
    "name": "Add Client Charge",
    "description": "Creates a new charge for a client.",
    "path": "/v1/clients/{clientId}/charges",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON payload defined by ClientChargesApiResourceSwagger.PostClientsClientIdChargesRequest"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientChargesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientChargesApiResource.java",
    "mechanism": "REST",
    "name": "Pay, Waive, or Inactivate Charge",
    "description": "Performs actions (pay, waive, inactivate) on a client charge based on the command parameter.",
    "path": "/v1/clients/{clientId}/charges/{chargeId}",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON payload defined by ClientChargesApiResourceSwagger.PostClientsClientIdChargesChargeIdRequest"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientChargesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientChargesApiResource.java",
    "mechanism": "REST",
    "name": "Delete Client Charge",
    "description": "Deletes a client charge.",
    "path": "/v1/clients/{clientId}/charges/{chargeId}",
    "method": "DELETE",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientTransactionsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientTransactionsApiResource.java",
    "mechanism": "REST",
    "name": "List Client Transactions (Internal ID)",
    "description": "Retrieve all transactions for a client using internal ID",
    "path": "/v1/clients/{clientId}/transactions",
    "method": "GET",
    "direction": "CONSUMER",
    "requestBody": "n/a",
    "responseBody": "JSON list of ClientTransactionData"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientTransactionsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientTransactionsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Client Transaction (Internal ID)",
    "description": "Retrieve a specific transaction using internal IDs",
    "path": "/v1/clients/{clientId}/transactions/{transactionId}",
    "method": "GET",
    "direction": "CONSUMER",
    "requestBody": "n/a",
    "responseBody": "JSON object of ClientTransactionData"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientTransactionsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientTransactionsApiResource.java",
    "mechanism": "REST",
    "name": "Undo Client Transaction (Internal ID)",
    "description": "Undo a specific transaction using internal IDs",
    "path": "/v1/clients/{clientId}/transactions/{transactionId}",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON payload (optional)",
    "responseBody": "JSON object of CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientTransactionsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientTransactionsApiResource.java",
    "mechanism": "REST",
    "name": "List Client Transactions (External ID)",
    "description": "Retrieve all transactions for a client using external ID",
    "path": "/v1/clients/external-id/{clientExternalId}/transactions",
    "method": "GET",
    "direction": "CONSUMER",
    "requestBody": "n/a",
    "responseBody": "JSON list of ClientTransactionData"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientTransactionsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientTransactionsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Client Transaction (External ID)",
    "description": "Retrieve a specific transaction using external client ID",
    "path": "/v1/clients/external-id/{clientExternalId}/transactions/{transactionId}",
    "method": "GET",
    "direction": "CONSUMER",
    "requestBody": "n/a",
    "responseBody": "JSON object of ClientTransactionData"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientTransactionsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientTransactionsApiResource.java",
    "mechanism": "REST",
    "name": "Undo Client Transaction (External ID)",
    "description": "Undo a specific transaction using external client ID",
    "path": "/v1/clients/external-id/{clientExternalId}/transactions/{transactionId}",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON payload (optional)",
    "responseBody": "JSON object of CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientTransactionsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientTransactionsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Client Transaction (External Transaction ID)",
    "description": "Retrieve a specific transaction using external transaction ID",
    "path": "/v1/clients/{clientId}/transactions/external-id/{transactionExternalId}",
    "method": "GET",
    "direction": "CONSUMER",
    "requestBody": "n/a",
    "responseBody": "JSON object of ClientTransactionData"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientTransactionsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientTransactionsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Client Transaction (Both External IDs)",
    "description": "Retrieve a specific transaction using both external client and transaction IDs",
    "path": "/v1/clients/external-id/{clientExternalId}/transactions/external-id/{transactionExternalId}",
    "method": "GET",
    "direction": "CONSUMER",
    "requestBody": "n/a",
    "responseBody": "JSON object of ClientTransactionData"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientTransactionsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientTransactionsApiResource.java",
    "mechanism": "REST",
    "name": "Undo Client Transaction (External Transaction ID)",
    "description": "Undo a specific transaction using external transaction ID",
    "path": "/v1/clients/{clientId}/transactions/external-id/{transactionExternalId}",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON payload (optional)",
    "responseBody": "JSON object of CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientTransactionsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientTransactionsApiResource.java",
    "mechanism": "REST",
    "name": "Undo Client Transaction (Both External IDs)",
    "description": "Undo a specific transaction using both external client and transaction IDs",
    "path": "/v1/clients/external-id/{clientExternalId}/transactions/external-id/{transactionExternalId}",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON payload (optional)",
    "responseBody": "JSON object of CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Client Template",
    "description": "Retrieve Client Details Template",
    "path": "/v1/clients/template",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResource.java",
    "mechanism": "REST",
    "name": "List Clients",
    "description": "List Clients with pagination and sorting",
    "path": "/v1/clients",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Client",
    "description": "Retrieve a Client by ID",
    "path": "/v1/clients/{clientId}",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResource.java",
    "mechanism": "REST",
    "name": "Create Client",
    "description": "Create a Client",
    "path": "/v1/clients",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON payload with client details"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResource.java",
    "mechanism": "REST",
    "name": "Update Client",
    "description": "Update a Client",
    "path": "/v1/clients/{clientId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON payload with updates"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResource.java",
    "mechanism": "REST",
    "name": "Delete Client",
    "description": "Delete a Client",
    "path": "/v1/clients/{clientId}",
    "method": "DELETE",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResource.java",
    "mechanism": "REST",
    "name": "Activate/Command Client",
    "description": "Activate, Close, Reject, Withdraw, etc.",
    "path": "/v1/clients/{clientId}",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON payload for command"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Client Accounts",
    "description": "Retrieve client accounts overview",
    "path": "/v1/clients/{clientId}/accounts",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResource.java",
    "mechanism": "REST",
    "name": "Download Template",
    "description": "Download client import template",
    "path": "/v1/clients/downloadtemplate",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResource.java",
    "mechanism": "REST",
    "name": "Upload Template",
    "description": "Upload client template",
    "path": "/v1/clients/uploadtemplate",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "Multipart form data"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Obligee Details",
    "description": "Retrieve client obligee details",
    "path": "/v1/clients/{clientId}/obligeedetails",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Transfer Proposal",
    "description": "Retrieve client transfer template",
    "path": "/v1/clients/{clientId}/transferproposaldate",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Client by External ID",
    "description": "Retrieve a Client by External Id",
    "path": "/v1/clients/external-id/{externalId}",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Accounts by External ID",
    "description": "Retrieve client accounts overview by External Id",
    "path": "/v1/clients/external-id/{externalId}/accounts",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResource.java",
    "mechanism": "REST",
    "name": "Update Client by External ID",
    "description": "Update a Client using the External Id",
    "path": "/v1/clients/external-id/{externalId}",
    "method": "PUT",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResource.java",
    "mechanism": "REST",
    "name": "Command Client by External ID",
    "description": "Activate/Command Client using External Id",
    "path": "/v1/clients/external-id/{externalId}",
    "method": "POST",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResource.java",
    "mechanism": "REST",
    "name": "Delete Client by External ID",
    "description": "Delete a Client using External Id",
    "path": "/v1/clients/external-id/{externalId}",
    "method": "DELETE",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Obligee by External ID",
    "description": "Retrieve client obligee details using External Id",
    "path": "/v1/clients/external-id/{externalId}/obligeedetails",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.ClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Transfer Proposal by External ID",
    "description": "Retrieve client transfer template using External Id",
    "path": "/v1/clients/external-id/{externalId}/transferproposaldate",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.api.v2.search.ClientSearchV2ApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/v2/search/ClientSearchV2ApiResource.java",
    "mechanism": "REST",
    "name": "searchByText",
    "description": "API endpoint for searching clients by text.",
    "path": "/v2/clients/search",
    "method": "POST",
    "direction": "BIDIRECTIONAL",
    "requestBody": "PagedRequest<ClientTextSearch> (JSON)",
    "responseBody": "Page<ClientSearchData> (JSON)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/CreateClientChargeCommandHandler.java",
    "mechanism": "OTHER",
    "name": "CLIENT_CHARGE_ACTION_CREATE",
    "description": "Internal command handler registration for creating client charges. This handler is mapped to the 'CLIENT_CHARGES' resource and 'CREATE' action via the Fineract Command Bus.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/handler/CreateClientCommandHandler.java",
    "mechanism": "OTHER",
    "name": "CLIENT CREATE Command Handler",
    "description": "Registers as a handler for the CREATE action on the CLIENT entity within the Fineract command processing framework.",
    "path": "CLIENT/CREATE",
    "method": "CommandType Annotation",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.client.service.ClientWritePlatformServiceJpaRepositoryImpl",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/client/service/ClientWritePlatformServiceJpaRepositoryImpl.java",
    "mechanism": "OTHER",
    "name": "BusinessEventNotifierService",
    "description": "Publishes business events (ClientCreateBusinessEvent, ClientActivateBusinessEvent, ClientRejectBusinessEvent) to the internal event handling system.",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.collateral.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/api/CollateralsApiResource.java",
    "mechanism": "REST",
    "name": "Loan Collateral API",
    "description": "API endpoints for managing loan collaterals.",
    "path": "/v1/loans/{loanId}/collaterals",
    "method": "GET, POST, PUT, DELETE",
    "requestBody": "JSON (for POST/PUT)",
    "responseBody": "JSON",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.collateralmanagement.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/api/ClientCollateralManagementApiResource.java",
    "mechanism": "REST",
    "name": "Get Client Collaterals",
    "description": "Retrieve a list of collateral products for a client.",
    "path": "/v1/clients/{clientId}/collaterals",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "List<ClientCollateralManagementData>"
  },
  {
    "namespace": "org.apache.fineract.portfolio.collateralmanagement.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/api/ClientCollateralManagementApiResource.java",
    "mechanism": "REST",
    "name": "Get Client Collateral Data",
    "description": "Retrieve details of a specific client collateral.",
    "path": "/v1/clients/{clientId}/collaterals/{clientCollateralId}",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "ClientCollateralManagementData"
  },
  {
    "namespace": "org.apache.fineract.portfolio.collateralmanagement.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/api/ClientCollateralManagementApiResource.java",
    "mechanism": "REST",
    "name": "Get Client Collateral Template",
    "description": "Retrieve the template for creating client collateral.",
    "path": "/v1/clients/{clientId}/collaterals/template",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "List<LoanCollateralTemplateData>"
  },
  {
    "namespace": "org.apache.fineract.portfolio.collateralmanagement.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/api/ClientCollateralManagementApiResource.java",
    "mechanism": "REST",
    "name": "Add Client Collateral",
    "description": "Create a new collateral entry for a client.",
    "path": "/v1/clients/{clientId}/collaterals",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "PostClientCollateralRequest",
    "responseBody": "CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.portfolio.collateralmanagement.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/api/ClientCollateralManagementApiResource.java",
    "mechanism": "REST",
    "name": "Update Client Collateral",
    "description": "Update an existing collateral entry.",
    "path": "/v1/clients/{clientId}/collaterals/{collateralId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "PutClientCollateralRequest",
    "responseBody": "CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.portfolio.collateralmanagement.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/api/ClientCollateralManagementApiResource.java",
    "mechanism": "REST",
    "name": "Delete Client Collateral",
    "description": "Delete a client collateral entry.",
    "path": "/v1/clients/{clientId}/collaterals/{collateralId}",
    "method": "DELETE",
    "direction": "CONSUMER",
    "responseBody": "CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.portfolio.collateralmanagement.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/api/CollateralManagementApiResource.java",
    "mechanism": "REST",
    "name": "createCollateral",
    "description": "Endpoint to create a new collateral product.",
    "path": "/v1/collateral-management",
    "method": "POST",
    "requestBody": "JSON representation of CollateralManagementProduct",
    "responseBody": "JSON representation of CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.portfolio.collateralmanagement.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/api/CollateralManagementApiResource.java",
    "mechanism": "REST",
    "name": "getCollateral",
    "description": "Endpoint to fetch a specific collateral product by ID.",
    "path": "/v1/collateral-management/{collateralId}",
    "method": "GET",
    "responseBody": "JSON representation of CollateralManagementData"
  },
  {
    "namespace": "org.apache.fineract.portfolio.collateralmanagement.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/api/CollateralManagementApiResource.java",
    "mechanism": "REST",
    "name": "getAllCollaterals",
    "description": "Endpoint to fetch all collateral products.",
    "path": "/v1/collateral-management",
    "method": "GET",
    "responseBody": "JSON array of CollateralManagementData"
  },
  {
    "namespace": "org.apache.fineract.portfolio.collateralmanagement.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/api/CollateralManagementApiResource.java",
    "mechanism": "REST",
    "name": "getCollateralTemplate",
    "description": "Endpoint to fetch the template (currencies) for creating collaterals.",
    "path": "/v1/collateral-management/template",
    "method": "GET",
    "responseBody": "JSON array of CurrencyData"
  },
  {
    "namespace": "org.apache.fineract.portfolio.collateralmanagement.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/api/CollateralManagementApiResource.java",
    "mechanism": "REST",
    "name": "updateCollateral",
    "description": "Endpoint to update an existing collateral product.",
    "path": "/v1/collateral-management/{collateralId}",
    "method": "PUT",
    "requestBody": "JSON representation of updates",
    "responseBody": "JSON representation of CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.portfolio.collateralmanagement.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/api/CollateralManagementApiResource.java",
    "mechanism": "REST",
    "name": "deleteCollateral",
    "description": "Endpoint to delete a collateral product.",
    "path": "/v1/collateral-management/{collateralId}",
    "method": "DELETE",
    "responseBody": "JSON representation of CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.portfolio.collateralmanagement.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/api/LoanCollateralManagementApiResource.java",
    "mechanism": "REST",
    "name": "deleteLoanCollateral",
    "description": "Endpoint to delete a loan collateral entry.",
    "path": "/v1/loan-collateral-management/{id}",
    "method": "DELETE",
    "requestBody": "n/a",
    "responseBody": "JSON representation of CommandProcessingResult",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.collateralmanagement.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/collateralmanagement/api/LoanCollateralManagementApiResource.java",
    "mechanism": "REST",
    "name": "getLoanCollateral",
    "description": "Endpoint to retrieve details of a loan collateral entry.",
    "path": "/v1/loan-collateral-management/{collateralId}",
    "method": "GET",
    "requestBody": "n/a",
    "responseBody": "JSON representation of LoanCollateralResponseData",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.collectionsheet.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/api/CollectionSheetApiResource.java",
    "mechanism": "REST",
    "name": "generateCollectionSheet",
    "description": "Generates or saves individual collection sheets based on the command parameter.",
    "path": "/v1/collectionsheet",
    "method": "POST",
    "direction": "BIDIRECTIONAL",
    "requestBody": "JSON payload (CollectionSheetApiResourceSwagger.PostCollectionSheetRequest)",
    "responseBody": "JSON response (CollectionSheetApiResourceSwagger.PostCollectionSheetResponse)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.collectionsheet.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/collectionsheet/handler/SaveIndividualCollectionSheetCommandHandler.java",
    "mechanism": "OTHER",
    "name": "COLLECTIONSHEET SAVE Command Handler",
    "description": "Registers a handler for the SAVE action on the COLLECTIONSHEET entity using the Fineract Command framework.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.delinquency.api.DelinquencyApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/delinquency/api/DelinquencyApiResource.java",
    "mechanism": "REST",
    "name": "getDelinquencyRanges",
    "description": "List all Delinquency Ranges",
    "path": "/v1/delinquency/ranges",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "Array of DelinquencyRangeData",
    "authentication": "PlatformSecurityContext (READ permission)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.delinquency.api.DelinquencyApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/delinquency/api/DelinquencyApiResource.java",
    "mechanism": "REST",
    "name": "getDelinquencyRange",
    "description": "Retrieve a specific Delinquency Range based on the Id",
    "path": "/v1/delinquency/ranges/{delinquencyRangeId}",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "DelinquencyRangeData",
    "authentication": "PlatformSecurityContext (READ permission)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.delinquency.api.DelinquencyApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/delinquency/api/DelinquencyApiResource.java",
    "mechanism": "REST",
    "name": "createDelinquencyRange",
    "description": "Create Delinquency Range",
    "path": "/v1/delinquency/ranges",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "PostDelinquencyRangeRequest",
    "responseBody": "PostDelinquencyRangeResponse",
    "authentication": "PlatformSecurityContext (CREATE permission)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.delinquency.api.DelinquencyApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/delinquency/api/DelinquencyApiResource.java",
    "mechanism": "REST",
    "name": "updateDelinquencyRange",
    "description": "Update Delinquency Range based on the Id",
    "path": "/v1/delinquency/ranges/{delinquencyRangeId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "PostDelinquencyRangeRequest",
    "responseBody": "PutDelinquencyRangeResponse",
    "authentication": "PlatformSecurityContext (UPDATE permission)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.delinquency.api.DelinquencyApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/delinquency/api/DelinquencyApiResource.java",
    "mechanism": "REST",
    "name": "deleteDelinquencyRange",
    "description": "Delete Delinquency Range based on the Id",
    "path": "/v1/delinquency/ranges/{delinquencyRangeId}",
    "method": "DELETE",
    "direction": "CONSUMER",
    "responseBody": "DeleteDelinquencyRangeResponse",
    "authentication": "PlatformSecurityContext (DELETE permission)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.delinquency.api.DelinquencyApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/delinquency/api/DelinquencyApiResource.java",
    "mechanism": "REST",
    "name": "getDelinquencyBuckets",
    "description": "List all Delinquency Buckets",
    "path": "/v1/delinquency/buckets",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "Array of DelinquencyBucketData",
    "authentication": "PlatformSecurityContext (READ permission)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.delinquency.api.DelinquencyApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/delinquency/api/DelinquencyApiResource.java",
    "mechanism": "REST",
    "name": "getDelinquencyBucket",
    "description": "Retrieve a specific Delinquency Bucket based on the Id",
    "path": "/v1/delinquency/buckets/{delinquencyBucketId}",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "DelinquencyBucketData",
    "authentication": "PlatformSecurityContext (READ permission)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.delinquency.api.DelinquencyApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/delinquency/api/DelinquencyApiResource.java",
    "mechanism": "REST",
    "name": "createDelinquencyBucket",
    "description": "Create Delinquency Bucket",
    "path": "/v1/delinquency/buckets",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "PostDelinquencyBucketRequest",
    "responseBody": "PostDelinquencyBucketResponse",
    "authentication": "PlatformSecurityContext (CREATE permission)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.delinquency.api.DelinquencyApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/delinquency/api/DelinquencyApiResource.java",
    "mechanism": "REST",
    "name": "updateDelinquencyBucket",
    "description": "Update Delinquency Bucket based on the Id",
    "path": "/v1/delinquency/buckets/{delinquencyBucketId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "PostDelinquencyBucketRequest",
    "responseBody": "PutDelinquencyBucketResponse",
    "authentication": "PlatformSecurityContext (UPDATE permission)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.delinquency.api.DelinquencyApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/delinquency/api/DelinquencyApiResource.java",
    "mechanism": "REST",
    "name": "deleteDelinquencyBucket",
    "description": "Delete Delinquency Bucket based on the Id",
    "path": "/v1/delinquency/buckets/{delinquencyBucketId}",
    "method": "DELETE",
    "direction": "CONSUMER",
    "responseBody": "DeleteDelinquencyBucketResponse",
    "authentication": "PlatformSecurityContext (DELETE permission)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.floatingrates.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/api/FloatingRatesApiResource.java",
    "mechanism": "REST",
    "name": "Create Floating Rate",
    "description": "Endpoint to create a new floating rate.",
    "path": "/v1/floatingrates",
    "method": "POST",
    "requestBody": "JSON object with floating rate details (name, isBaseLendingRate, etc.)",
    "responseBody": "JSON object containing the result of the creation command",
    "authentication": "PlatformSecurityContext (implied)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.floatingrates.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/api/FloatingRatesApiResource.java",
    "mechanism": "REST",
    "name": "List Floating Rates",
    "description": "Endpoint to retrieve all floating rates.",
    "path": "/v1/floatingrates",
    "method": "GET",
    "responseBody": "JSON array of floating rate data",
    "authentication": "PlatformSecurityContext (implied)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.floatingrates.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/api/FloatingRatesApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Floating Rate",
    "description": "Endpoint to retrieve a single floating rate by ID.",
    "path": "/v1/floatingrates/{floatingRateId}",
    "method": "GET",
    "responseBody": "JSON object of the floating rate data",
    "authentication": "PlatformSecurityContext (implied)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.floatingrates.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/api/FloatingRatesApiResource.java",
    "mechanism": "REST",
    "name": "Update Floating Rate",
    "description": "Endpoint to update an existing floating rate.",
    "path": "/v1/floatingrates/{floatingRateId}",
    "method": "PUT",
    "requestBody": "JSON object with updated floating rate details",
    "responseBody": "JSON object containing the result of the update command",
    "authentication": "PlatformSecurityContext (implied)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.floatingrates.handler.UpdateFloatingRateCommandHandler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/handler/UpdateFloatingRateCommandHandler.java",
    "mechanism": "OTHER",
    "name": "FLOATINGRATE UPDATE Command Handler",
    "description": "Registers a handler for the 'UPDATE' action on the 'FLOATINGRATE' entity within the application's command processing framework.",
    "direction": "CONSUMER",
    "protocol": "Internal Command Bus"
  },
  {
    "namespace": "org.apache.fineract.portfolio.fund.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/fund/api/FundsApiResource.java",
    "mechanism": "REST",
    "name": "retrieveFunds",
    "description": "Endpoint to retrieve a list of funds.",
    "path": "/v1/funds",
    "method": "GET",
    "responseBody": "JSON array of FundData",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.fund.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/fund/api/FundsApiResource.java",
    "mechanism": "REST",
    "name": "createFund",
    "description": "Endpoint to create a new fund.",
    "path": "/v1/funds",
    "method": "POST",
    "requestBody": "JSON object defining the fund",
    "responseBody": "JSON object with command processing result",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.fund.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/fund/api/FundsApiResource.java",
    "mechanism": "REST",
    "name": "retrieveFund",
    "description": "Endpoint to retrieve a specific fund by ID.",
    "path": "/v1/funds/{fundId}",
    "method": "GET",
    "responseBody": "JSON object of FundData",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.fund.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/fund/api/FundsApiResource.java",
    "mechanism": "REST",
    "name": "updateFund",
    "description": "Endpoint to update an existing fund.",
    "path": "/v1/funds/{fundId}",
    "method": "PUT",
    "requestBody": "JSON object with fields to update",
    "responseBody": "JSON object with command processing result",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.fund.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/fund/handler/CreateFundCommandHandler.java",
    "mechanism": "OTHER",
    "name": "CREATE FUND Command Handler",
    "description": "Fineract Command Handler registered for Entity 'FUND' and Action 'CREATE'.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.group.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/group/api/GroupsApiResource.java",
    "mechanism": "REST",
    "name": "Groups API",
    "description": "RESTful endpoints for managing Groups.",
    "path": "/v1/groups",
    "method": "GET, POST, PUT, DELETE",
    "requestBody": "JSON (application/json) or Multipart (multipart/form-data)",
    "responseBody": "JSON (application/json) or Excel (application/vnd.ms-excel)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.group.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/group/api/CentersApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Center Template",
    "description": "Endpoint to retrieve a template for creating or closing a center.",
    "path": "/v1/centers/template",
    "method": "GET",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.group.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/group/api/CentersApiResource.java",
    "mechanism": "REST",
    "name": "List Centers",
    "description": "Endpoint to retrieve a paginated list of centers.",
    "path": "/v1/centers",
    "method": "GET",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.group.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/group/api/CentersApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Center",
    "description": "Endpoint to retrieve details of a specific center.",
    "path": "/v1/centers/{centerId}",
    "method": "GET",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.group.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/group/api/CentersApiResource.java",
    "mechanism": "REST",
    "name": "Create Center",
    "description": "Endpoint to create a new center.",
    "path": "/v1/centers",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON object with center details (name, officeId, etc.)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.group.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/group/api/CentersApiResource.java",
    "mechanism": "REST",
    "name": "Update Center",
    "description": "Endpoint to update an existing center.",
    "path": "/v1/centers/{centerId}",
    "method": "PUT",
    "direction": "PRODUCER",
    "requestBody": "JSON object with fields to update"
  },
  {
    "namespace": "org.apache.fineract.portfolio.group.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/group/api/CentersApiResource.java",
    "mechanism": "REST",
    "name": "Delete Center",
    "description": "Endpoint to delete a center.",
    "path": "/v1/centers/{centerId}",
    "method": "DELETE",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.group.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/group/api/CentersApiResource.java",
    "mechanism": "REST",
    "name": "Center Actions",
    "description": "Endpoint to perform actions like activate, close, or manage groups for a center.",
    "path": "/v1/centers/{centerId}",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON payload specific to the command"
  },
  {
    "namespace": "org.apache.fineract.portfolio.group.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/group/api/CentersApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Center Accounts",
    "description": "Endpoint to retrieve account summaries for a center.",
    "path": "/v1/centers/{centerId}/accounts",
    "method": "GET",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.group.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/group/api/CentersApiResource.java",
    "mechanism": "REST",
    "name": "Download Template",
    "description": "Endpoint to download the bulk import Excel template.",
    "path": "/v1/centers/downloadtemplate",
    "method": "GET",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.group.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/group/api/CentersApiResource.java",
    "mechanism": "REST",
    "name": "Upload Template",
    "description": "Endpoint to upload a bulk import Excel file.",
    "path": "/v1/centers/uploadtemplate",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "Multipart form data containing the file"
  },
  {
    "namespace": "org.apache.fineract.portfolio.group.api.GroupsLevelApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/group/api/GroupsLevelApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAllGroups",
    "description": "API endpoint to retrieve all group levels.",
    "path": "/v1/grouplevels",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON collection of GroupLevelData",
    "authentication": "PlatformSecurityContext (Requires 'GROUP' read permission)",
    "protocol": "HTTP"
  },
  {
    "namespace": "org.apache.fineract.portfolio.group.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/group/handler/CloseCenterCommandHandler.java",
    "mechanism": "OTHER",
    "name": "CommandType CENTER CLOSE",
    "description": "Registers a handler for the CLOSE action on CENTER entities within the Fineract command processing framework.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.group.service.GroupingTypesWritePlatformServiceJpaRepositoryImpl",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/group/service/GroupingTypesWritePlatformServiceJpaRepositoryImpl.java",
    "mechanism": "OTHER",
    "name": "BusinessEventNotifierService",
    "description": "Publishes business events (CentersCreateBusinessEvent, GroupsCreateBusinessEvent) to an internal event handling system.",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.interestratechart.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/api/InterestRateChartsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Chart Template",
    "description": "Retrieves a template for creating a new interest rate chart.",
    "path": "/v1/interestratecharts/template",
    "method": "GET",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.interestratechart.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/api/InterestRateChartsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve All Charts",
    "description": "Retrieves all interest rate charts, optionally filtered by product ID.",
    "path": "/v1/interestratecharts",
    "method": "GET",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.interestratechart.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/api/InterestRateChartsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve One Chart",
    "description": "Retrieves a specific interest rate chart by ID.",
    "path": "/v1/interestratecharts/{chartId}",
    "method": "GET",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.interestratechart.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/api/InterestRateChartsApiResource.java",
    "mechanism": "REST",
    "name": "Create Chart",
    "description": "Creates a new interest rate chart.",
    "path": "/v1/interestratecharts",
    "method": "POST",
    "requestBody": "JSON payload defined by PostInterestRateChartsRequest",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.interestratechart.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/api/InterestRateChartsApiResource.java",
    "mechanism": "REST",
    "name": "Update Chart",
    "description": "Updates an existing interest rate chart.",
    "path": "/v1/interestratecharts/{chartId}",
    "method": "PUT",
    "requestBody": "JSON payload defined by PutInterestRateChartsChartIdRequest",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.interestratechart.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/api/InterestRateChartsApiResource.java",
    "mechanism": "REST",
    "name": "Delete Chart",
    "description": "Deletes an interest rate chart.",
    "path": "/v1/interestratecharts/{chartId}",
    "method": "DELETE",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.interestratechart.api.InterestRateChartSlabsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/api/InterestRateChartSlabsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Template",
    "description": "Endpoint to retrieve a template for creating a new interest rate chart slab.",
    "path": "/v1/interestratecharts/{chartId}/chartslabs/template",
    "method": "GET",
    "direction": "BIDIRECTIONAL"
  },
  {
    "namespace": "org.apache.fineract.portfolio.interestratechart.api.InterestRateChartSlabsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/api/InterestRateChartSlabsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve All Slabs",
    "description": "Endpoint to retrieve all slabs associated with a chart.",
    "path": "/v1/interestratecharts/{chartId}/chartslabs",
    "method": "GET",
    "direction": "BIDIRECTIONAL"
  },
  {
    "namespace": "org.apache.fineract.portfolio.interestratechart.api.InterestRateChartSlabsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/api/InterestRateChartSlabsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve One Slab",
    "description": "Endpoint to retrieve a single slab by ID.",
    "path": "/v1/interestratecharts/{chartId}/chartslabs/{chartSlabId}",
    "method": "GET",
    "direction": "BIDIRECTIONAL"
  },
  {
    "namespace": "org.apache.fineract.portfolio.interestratechart.api.InterestRateChartSlabsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/api/InterestRateChartSlabsApiResource.java",
    "mechanism": "REST",
    "name": "Create Slab",
    "description": "Endpoint to create a new interest rate slab.",
    "path": "/v1/interestratecharts/{chartId}/chartslabs",
    "method": "POST",
    "direction": "BIDIRECTIONAL",
    "requestBody": "JSON payload with slab details (periodType, fromPeriod, annualInterestRate, etc.)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.interestratechart.api.InterestRateChartSlabsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/api/InterestRateChartSlabsApiResource.java",
    "mechanism": "REST",
    "name": "Update Slab",
    "description": "Endpoint to update an existing slab.",
    "path": "/v1/interestratecharts/{chartId}/chartslabs/{chartSlabId}",
    "method": "PUT",
    "direction": "BIDIRECTIONAL",
    "requestBody": "JSON payload with fields to update"
  },
  {
    "namespace": "org.apache.fineract.portfolio.interestratechart.api.InterestRateChartSlabsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/interestratechart/api/InterestRateChartSlabsApiResource.java",
    "mechanism": "REST",
    "name": "Delete Slab",
    "description": "Endpoint to delete a slab.",
    "path": "/v1/interestratecharts/{chartId}/chartslabs/{chartSlabId}",
    "method": "DELETE",
    "direction": "BIDIRECTIONAL"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoanChargesApiResource.java",
    "mechanism": "REST",
    "name": "Loan Charges API",
    "description": "REST API endpoints for managing loan charges.",
    "path": "/v1/loans",
    "method": "GET, POST, PUT, DELETE",
    "requestBody": "JSON (LoanChargeData)",
    "responseBody": "JSON (LoanChargeData or CommandProcessingResult)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoanScheduleApiResource.java",
    "mechanism": "REST",
    "name": "Loan Schedule Endpoint",
    "description": "Endpoint to calculate loan schedules or manage loan term variations.",
    "path": "/v1/loans/{loanId}/schedule",
    "method": "POST",
    "requestBody": "JSON payload containing schedule exceptions or variation details (LoanScheduleApiResourceSwagger.PostLoansLoanIdScheduleRequest)",
    "responseBody": "JSON containing LoanScheduleData or CommandProcessingResult",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/BulkLoansApiResource.java",
    "mechanism": "REST",
    "name": "loanReassignmentTemplate",
    "description": "Endpoint to retrieve template data for bulk loan reassignment.",
    "path": "/v1/loans/loanreassignment/template",
    "method": "GET",
    "requestBody": "None (Query Parameters: officeId, fromLoanOfficerId)",
    "responseBody": "JSON representation of BulkTransferLoanOfficerData",
    "authentication": "PlatformSecurityContext (OAuth2/Basic implied)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/BulkLoansApiResource.java",
    "mechanism": "REST",
    "name": "loanReassignment",
    "description": "Endpoint to execute the bulk loan reassignment command.",
    "path": "/v1/loans/loanreassignment",
    "method": "POST",
    "requestBody": "JSON payload containing reassignment details",
    "responseBody": "JSON representation of CommandProcessingResult",
    "authentication": "PlatformSecurityContext (OAuth2/Basic implied)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoanDisbursementDetailApiResource.java",
    "mechanism": "REST",
    "name": "updateDisbursementDate",
    "description": "Updates the disbursement date for a specific loan disbursement.",
    "path": "/v1/loans/{loanId}/disbursements/{disbursementId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON",
    "responseBody": "JSON"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoanDisbursementDetailApiResource.java",
    "mechanism": "REST",
    "name": "addAndDeleteDisbursementDetail",
    "description": "Adds or deletes disbursement details for a loan.",
    "path": "/v1/loans/{loanId}/disbursements/editDisbursements",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON",
    "responseBody": "JSON"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoanDisbursementDetailApiResource.java",
    "mechanism": "REST",
    "name": "retriveDetail",
    "description": "Retrieves details of a specific disbursement.",
    "path": "/v1/loans/{loanId}/disbursements/{disbursementId}",
    "method": "GET",
    "direction": "PRODUCER",
    "requestBody": "None",
    "responseBody": "JSON"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.InternalLoanInformationApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/InternalLoanInformationApiResource.java",
    "mechanism": "REST",
    "name": "Get Loan Audit Fields",
    "description": "Endpoint to retrieve audit metadata for a loan.",
    "path": "/v1/internal/loan/{loanId}/audit",
    "method": "GET",
    "direction": "PRODUCER",
    "requestBody": "none",
    "responseBody": "JSON object containing createdBy, createdDate, lastModifiedBy, lastModifiedDate"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.InternalLoanInformationApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/InternalLoanInformationApiResource.java",
    "mechanism": "REST",
    "name": "Get Loan Transaction Audit Fields",
    "description": "Endpoint to retrieve audit metadata for a loan transaction.",
    "path": "/v1/internal/loan/{loanId}/transaction/{transactionId}/audit",
    "method": "GET",
    "direction": "PRODUCER",
    "requestBody": "none",
    "responseBody": "JSON object containing createdBy, createdDate, lastModifiedBy, lastModifiedDate"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.InternalLoanInformationApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/InternalLoanInformationApiResource.java",
    "mechanism": "REST",
    "name": "Get Loans By Status",
    "description": "Endpoint to retrieve a list of loan IDs matching a status.",
    "path": "/v1/internal/loan/status/{statusId}",
    "method": "GET",
    "direction": "PRODUCER",
    "requestBody": "none",
    "responseBody": "JSON array of Long (loan IDs)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.InternalLoanInformationApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/InternalLoanInformationApiResource.java",
    "mechanism": "REST",
    "name": "Get Advanced Payment Allocation Rules",
    "description": "Endpoint to retrieve payment allocation rules for a loan.",
    "path": "/v1/internal/loan/{loanId}/advanced-payment-allocation-rules",
    "method": "GET",
    "direction": "PRODUCER",
    "requestBody": "none",
    "responseBody": "JSON array of AdvancedPaymentData"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.LoanTransactionsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoanTransactionsApiResource.java",
    "mechanism": "REST",
    "name": "Loan Transactions API",
    "description": "API endpoints for managing loan transactions (retrieval, execution, adjustment).",
    "path": "/v1/loans",
    "method": "GET, POST, PUT",
    "requestBody": "JSON (LoanTransactionData)",
    "responseBody": "JSON (LoanTransactionData or CommandProcessingResult)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.LoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Loan Approval Template",
    "description": "Endpoint to retrieve the approval template for a loan.",
    "path": "/v1/loans/{loanId}/template",
    "method": "GET"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.LoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Loan Template",
    "description": "Endpoint to retrieve a template for creating a new loan application.",
    "path": "/v1/loans/template",
    "method": "GET"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.LoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Loan",
    "description": "Endpoint to retrieve details of a specific loan.",
    "path": "/v1/loans/{loanId}",
    "method": "GET"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.LoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java",
    "mechanism": "REST",
    "name": "List Loans",
    "description": "Endpoint to list loans with pagination and search.",
    "path": "/v1/loans",
    "method": "GET"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.LoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java",
    "mechanism": "REST",
    "name": "Calculate Schedule or Submit Application",
    "description": "Endpoint to calculate loan schedule or submit a new application.",
    "path": "/v1/loans",
    "method": "POST"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.LoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java",
    "mechanism": "REST",
    "name": "Modify Loan Application",
    "description": "Endpoint to modify an existing loan application.",
    "path": "/v1/loans/{loanId}",
    "method": "PUT"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.LoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java",
    "mechanism": "REST",
    "name": "Delete Loan Application",
    "description": "Endpoint to delete a loan application.",
    "path": "/v1/loans/{loanId}",
    "method": "DELETE"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.LoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java",
    "mechanism": "REST",
    "name": "State Transitions",
    "description": "Endpoint to perform state transitions (approve, disburse, etc.) on a loan.",
    "path": "/v1/loans/{loanId}",
    "method": "POST"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.LoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java",
    "mechanism": "REST",
    "name": "Download Loan Template",
    "description": "Endpoint to download Excel template for loan import.",
    "path": "/v1/loans/downloadtemplate",
    "method": "GET"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.LoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java",
    "mechanism": "REST",
    "name": "Get GLIM Repayment Template",
    "description": "Endpoint to get repayment template for GLIM account.",
    "path": "/v1/loans/glimAccount/{glimId}",
    "method": "GET"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.LoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java",
    "mechanism": "REST",
    "name": "GLIM State Transitions",
    "description": "Endpoint for GLIM loan state transitions.",
    "path": "/v1/loans/glimAccount/{glimId}",
    "method": "POST"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.LoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java",
    "mechanism": "REST",
    "name": "Download Repayment Template",
    "description": "Endpoint to download Excel template for repayment import.",
    "path": "/v1/loans/repayments/downloadtemplate",
    "method": "GET"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.LoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java",
    "mechanism": "REST",
    "name": "Upload Loan Template",
    "description": "Endpoint to upload loan import file.",
    "path": "/v1/loans/uploadtemplate",
    "method": "POST"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.LoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java",
    "mechanism": "REST",
    "name": "Upload Repayment Template",
    "description": "Endpoint to upload repayment import file.",
    "path": "/v1/loans/repayments/uploadtemplate",
    "method": "POST"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.LoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java",
    "mechanism": "REST",
    "name": "Get Delinquency Tags",
    "description": "Endpoint to get delinquency tag history.",
    "path": "/v1/loans/{loanId}/delinquencytags",
    "method": "GET"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.LoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Approval Template (External ID)",
    "description": "Endpoint to retrieve approval template using external ID.",
    "path": "/v1/loans/external-id/{loanExternalId}/template",
    "method": "GET"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.LoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Loan (External ID)",
    "description": "Endpoint to retrieve loan details using external ID.",
    "path": "/v1/loans/external-id/{loanExternalId}",
    "method": "GET"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.LoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java",
    "mechanism": "REST",
    "name": "Modify Loan (External ID)",
    "description": "Endpoint to modify loan using external ID.",
    "path": "/v1/loans/external-id/{loanExternalId}",
    "method": "PUT"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.LoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java",
    "mechanism": "REST",
    "name": "Delete Loan (External ID)",
    "description": "Endpoint to delete loan using external ID.",
    "path": "/v1/loans/external-id/{loanExternalId}",
    "method": "DELETE"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.LoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java",
    "mechanism": "REST",
    "name": "State Transitions (External ID)",
    "description": "Endpoint for state transitions using external ID.",
    "path": "/v1/loans/external-id/{loanExternalId}",
    "method": "POST"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.api.LoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/api/LoansApiResource.java",
    "mechanism": "REST",
    "name": "Get Delinquency Tags (External ID)",
    "description": "Endpoint to get delinquency tags using external ID.",
    "path": "/v1/loans/external-id/{loanExternalId}/delinquencytags",
    "method": "GET"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.guarantor.api.GuarantorsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/api/GuarantorsApiResource.java",
    "mechanism": "REST",
    "name": "Guarantors API",
    "description": "RESTful endpoints for managing loan guarantors.",
    "path": "/v1/loans/{loanId}/guarantors",
    "method": "GET, POST, PUT, DELETE",
    "direction": "BIDIRECTIONAL",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.guarantor.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/handler/DeleteGuarantorCommandHandler.java",
    "mechanism": "OTHER",
    "name": "GUARANTOR DELETE Command Handler",
    "description": "Registers a handler for the internal command processing system for the GUARANTOR entity with action DELETE.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/handler/LoanRepaymentCommandHandler.java",
    "mechanism": "OTHER",
    "name": "Command Handler (LOAN REPAYMENT)",
    "description": "Registers a handler for the internal command processing framework for Entity 'LOAN' and Action 'REPAYMENT'.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/handler/LoanApplicationApprovalUndoCommandHandler.java",
    "mechanism": "OTHER",
    "name": "LOAN APPROVALUNDO Command Handler",
    "description": "Registers a handler for the internal command bus to process LOAN APPROVALUNDO actions.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/handler/DeleteLoanChargeCommandHandler.java",
    "mechanism": "OTHER",
    "name": "LOANCHARGE DELETE Command Handler",
    "description": "Registers a handler for the internal command bus to process DELETE actions on LOANCHARGE entities.",
    "direction": "CONSUMER",
    "requestBody": "JsonCommand containing loanId and entityId",
    "responseBody": "CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/handler/UpdateLoanChargeCommandHandler.java",
    "mechanism": "OTHER",
    "name": "Fineract Command Handler",
    "description": "Registers as a handler for the Fineract Command Processing infrastructure via @CommandType.",
    "path": "LOANCHARGE / UPDATE",
    "method": "n/a",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/handler/GLIMBulkRepaymentCommandHandler.java",
    "mechanism": "OTHER",
    "name": "GLIMLOAN REPAYMENT Command Handler",
    "description": "Registers a handler for 'GLIMLOAN' entity 'REPAYMENT' actions within the Fineract command processing framework.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/handler/WriteOffLoanCommandHandler.java",
    "mechanism": "OTHER",
    "name": "LOAN WRITEOFF Command Handler",
    "description": "Registers a handler for the 'WRITEOFF' action on 'LOAN' entities within the Fineract command processing framework.",
    "direction": "CONSUMER",
    "requestBody": "JsonCommand containing Loan ID and write-off details",
    "protocol": "Internal Java Interface / Spring Bean"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.handler.UndoChargeOffLoanCommandHandler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/handler/UndoChargeOffLoanCommandHandler.java",
    "mechanism": "OTHER",
    "name": "LOAN UNDOCHARGEOFF",
    "description": "Fineract Command Handler registered for the LOAN entity and UNDOCHARGEOFF action.",
    "direction": "CONSUMER",
    "protocol": "Internal CQRS Dispatch"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.jobs.addaccrualentries",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/jobs/addaccrualentries/AddAccrualEntriesTasklet.java",
    "mechanism": "OTHER",
    "name": "AddAccrualEntriesTasklet",
    "description": "Spring Batch Tasklet execution point",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.jobs.addperiodicaccrualentriesforloanswithincomepostedastransactions",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/jobs/addperiodicaccrualentriesforloanswithincomepostedastransactions/AddPeriodicAccrualEntriesForLoansConfig.java",
    "mechanism": "OTHER",
    "name": "ADD_PERIODIC_ACCRUAL_ENTRIES_FOR_LOANS_WITH_INCOME_POSTED_AS_TRANSACTIONS",
    "description": "Spring Batch Job definition for processing periodic accrual entries.",
    "direction": "OTHER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.jobs.applychargetooverdueloaninstallment.ApplyChargeToOverdueLoanInstallmentConfig",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/jobs/applychargetooverdueloaninstallment/ApplyChargeToOverdueLoanInstallmentConfig.java",
    "mechanism": "OTHER",
    "name": "APPLY_CHARGE_TO_OVERDUE_LOAN_INSTALLMENT",
    "description": "Spring Batch Job definition for applying charges to overdue loans.",
    "direction": "OTHER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.jobs.applychargetooverdueloaninstallment.ApplyChargeToOverdueLoanInstallmentTasklet",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/jobs/applychargetooverdueloaninstallment/ApplyChargeToOverdueLoanInstallmentTasklet.java",
    "mechanism": "OTHER",
    "name": "Spring Batch Tasklet",
    "description": "Implements a Spring Batch Tasklet to run as a background job step.",
    "direction": "OTHER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.jobs.applyholidaystoloans",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/jobs/applyholidaystoloans/ApplyHolidaysToLoansTasklet.java",
    "mechanism": "OTHER",
    "name": "BusinessEventNotifierService",
    "description": "Publishes internal business events when a loan is rescheduled due to a holiday.",
    "messageType": "LoanRescheduledDueHolidayBusinessEvent",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.rescheduleloan.api.RescheduleLoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/api/RescheduleLoansApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Reschedule Reasons Template",
    "description": "Endpoint to retrieve template data for creating reschedule requests.",
    "path": "/v1/rescheduleloans/template",
    "method": "GET",
    "responseBody": "JSON (LoanRescheduleRequestData)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.rescheduleloan.api.RescheduleLoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/api/RescheduleLoansApiResource.java",
    "mechanism": "REST",
    "name": "Read Loan Reschedule Request",
    "description": "Endpoint to retrieve a specific request or preview a schedule.",
    "path": "/v1/rescheduleloans/{scheduleId}",
    "method": "GET",
    "responseBody": "JSON (LoanRescheduleRequestData or LoanScheduleData)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.rescheduleloan.api.RescheduleLoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/api/RescheduleLoansApiResource.java",
    "mechanism": "REST",
    "name": "Create Loan Reschedule Request",
    "description": "Endpoint to submit a new loan reschedule request.",
    "path": "/v1/rescheduleloans",
    "method": "POST",
    "requestBody": "JSON",
    "responseBody": "JSON (CommandProcessingResult)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.rescheduleloan.api.RescheduleLoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/api/RescheduleLoansApiResource.java",
    "mechanism": "REST",
    "name": "Update Loan Reschedule Request",
    "description": "Endpoint to approve or reject a reschedule request.",
    "path": "/v1/rescheduleloans/{scheduleId}",
    "method": "POST",
    "requestBody": "JSON",
    "responseBody": "JSON (CommandProcessingResult)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.rescheduleloan.api.RescheduleLoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/api/RescheduleLoansApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve All Reschedule Requests",
    "description": "Endpoint to list reschedule requests with optional filtering.",
    "path": "/v1/rescheduleloans",
    "method": "GET",
    "responseBody": "JSON Array (LoanRescheduleRequestData)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.service",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/ReplayedTransactionBusinessEventServiceImpl.java",
    "mechanism": "OTHER",
    "name": "BusinessEventNotifierService",
    "description": "Internal application event bus for notifying business events.",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.service",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanStatusChangePlatformServiceImpl.java",
    "mechanism": "OTHER",
    "name": "LoanStatusChangedBusinessEvent Listener",
    "description": "Listens for internal business events indicating a change in loan status.",
    "messageType": "LoanStatusChangedBusinessEvent",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.service.LoanApplicationWritePlatformServiceJpaRepositoryImpl",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanApplicationWritePlatformServiceJpaRepositoryImpl.java",
    "mechanism": "OTHER",
    "name": "BusinessEventNotifierService",
    "description": "Publishes internal business events when loan states change (Created, Approved, Rejected, Undo Approval).",
    "messageType": "LoanBusinessEvent",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanaccount.service.LoanWritePlatformServiceJpaRepositoryImpl",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanWritePlatformServiceJpaRepositoryImpl.java",
    "mechanism": "OTHER",
    "name": "BusinessEventNotifierService",
    "description": "Internal event notification service used to broadcast business events (e.g., LoanDisbursalBusinessEvent) to other parts of the system.",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanproduct.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResource.java",
    "mechanism": "REST",
    "name": "Create Loan Product",
    "description": "Endpoint to create a new loan product.",
    "path": "/v1/loanproducts",
    "method": "POST",
    "requestBody": "JSON object representing the loan product definition",
    "responseBody": "JSON object with the created resource ID"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanproduct.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve All Loan Products",
    "description": "Endpoint to list all loan products.",
    "path": "/v1/loanproducts",
    "method": "GET",
    "responseBody": "JSON array of loan product data"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanproduct.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Template",
    "description": "Endpoint to retrieve a template for creating loan products.",
    "path": "/v1/loanproducts/template",
    "method": "GET",
    "responseBody": "JSON object with default values and dropdown options"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanproduct.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Loan Product",
    "description": "Endpoint to retrieve a single loan product by ID.",
    "path": "/v1/loanproducts/{productId}",
    "method": "GET",
    "responseBody": "JSON object with loan product details"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanproduct.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResource.java",
    "mechanism": "REST",
    "name": "Update Loan Product",
    "description": "Endpoint to update a loan product by ID.",
    "path": "/v1/loanproducts/{productId}",
    "method": "PUT",
    "requestBody": "JSON object with fields to update",
    "responseBody": "JSON object with the updated resource ID"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanproduct.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Loan Product by External ID",
    "description": "Endpoint to retrieve a single loan product by its external ID.",
    "path": "/v1/loanproducts/external-id/{externalProductId}",
    "method": "GET",
    "responseBody": "JSON object with loan product details"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanproduct.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/api/LoanProductsApiResource.java",
    "mechanism": "REST",
    "name": "Update Loan Product by External ID",
    "description": "Endpoint to update a loan product by its external ID.",
    "path": "/v1/loanproducts/external-id/{externalProductId}",
    "method": "PUT",
    "requestBody": "JSON object with fields to update",
    "responseBody": "JSON object with the updated resource ID"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanproduct.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/handler/CreateLoanProductCommandHandler.java",
    "mechanism": "OTHER",
    "name": "Fineract Command Handler",
    "description": "Registers a handler for the CREATE action on LOANPRODUCT entities via the Fineract Command framework annotation @CommandType.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.loanproduct.productmix.api.ProductMixApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/productmix/api/ProductMixApiResource.java",
    "mechanism": "REST",
    "name": "Product Mix API",
    "description": "RESTful endpoints for managing loan product mix configurations.",
    "path": "/v1/loanproducts/{productId}/productmix",
    "method": "GET, POST, PUT, DELETE",
    "requestBody": "JSON (ProductMixData)",
    "responseBody": "JSON (ProductMixData or CommandProcessingResult)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.meeting.api.MeetingsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/api/MeetingsApiResource.java",
    "mechanism": "REST",
    "name": "Meetings API",
    "description": "API endpoints for managing meetings and attendance.",
    "path": "/v1/{entityType}/{entityId}/meetings",
    "method": "GET, POST, PUT, DELETE",
    "direction": "BIDIRECTIONAL",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.note.api.NotesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/note/api/NotesApiResource.java",
    "mechanism": "REST",
    "name": "Notes API",
    "description": "RESTful endpoints for managing notes on various resources.",
    "path": "/v1/{resourceType}/{resourceId}/notes",
    "method": "GET, POST, PUT, DELETE",
    "direction": "PRODUCER",
    "requestBody": "JSON (NoteData)",
    "responseBody": "JSON (NoteData or CommandProcessingResult)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.paymenttype.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/paymenttype/api/PaymentTypeApiResource.java",
    "mechanism": "REST",
    "name": "getAllPaymentTypes",
    "description": "Retrieve all Payment Types",
    "path": "/v1/paymenttypes",
    "method": "GET",
    "responseBody": "JSON array of PaymentTypeData",
    "authentication": "PlatformSecurityContext (implied)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.paymenttype.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/paymenttype/api/PaymentTypeApiResource.java",
    "mechanism": "REST",
    "name": "retrieveOnePaymentType",
    "description": "Retrieve a Payment Type",
    "path": "/v1/paymenttypes/{paymentTypeId}",
    "method": "GET",
    "responseBody": "JSON object of PaymentTypeData",
    "authentication": "PlatformSecurityContext (implied)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.paymenttype.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/paymenttype/api/PaymentTypeApiResource.java",
    "mechanism": "REST",
    "name": "createPaymentType",
    "description": "Create a Payment Type",
    "path": "/v1/paymenttypes",
    "method": "POST",
    "requestBody": "JSON object (name, description, etc.)",
    "responseBody": "JSON object (CommandProcessingResult)",
    "authentication": "PlatformSecurityContext (implied)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.paymenttype.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/paymenttype/api/PaymentTypeApiResource.java",
    "mechanism": "REST",
    "name": "updatePaymentType",
    "description": "Update a Payment Type",
    "path": "/v1/paymenttypes/{paymentTypeId}",
    "method": "PUT",
    "requestBody": "JSON object (fields to update)",
    "responseBody": "JSON object (CommandProcessingResult)",
    "authentication": "PlatformSecurityContext (implied)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.paymenttype.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/paymenttype/api/PaymentTypeApiResource.java",
    "mechanism": "REST",
    "name": "deleteCode",
    "description": "Delete a Payment Type",
    "path": "/v1/paymenttypes/{paymentTypeId}",
    "method": "DELETE",
    "responseBody": "JSON object (CommandProcessingResult)",
    "authentication": "PlatformSecurityContext (implied)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.paymenttype.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/paymenttype/api/PaymentTypeApiResourceSwagger.java",
    "mechanism": "REST",
    "name": "Payment Types API Schemas",
    "description": "Defines the Swagger/OpenAPI schemas (Request and Response bodies) for Payment Type REST operations.",
    "path": "/paymenttypes (implied by schema names)",
    "method": "GET, POST, PUT, DELETE",
    "direction": "BOTH",
    "requestBody": "PostPaymentTypesRequest, PutPaymentTypesPaymentTypeIdRequest",
    "responseBody": "GetPaymentTypesResponse, PostPaymentTypesResponse, PutPaymentTypesPaymentTypeIdResponse, DeletePaymentTypesPaymentTypeIdResponse"
  },
  {
    "namespace": "org.apache.fineract.portfolio.products.api.ProductsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/products/api/ProductsApiResource.java",
    "mechanism": "REST",
    "name": "Products API",
    "description": "RESTful endpoints for managing products.",
    "path": "/v1/products/{type}",
    "method": "GET, POST, PUT",
    "requestBody": "JSON (ProductData)",
    "responseBody": "JSON (ProductData or CommandProcessingResult)",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.rate.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/api/RateApiResource.java",
    "mechanism": "REST",
    "name": "retrieveRate",
    "description": "Endpoint to retrieve a single rate by ID.",
    "path": "/v1/rates/{rateId}",
    "method": "GET",
    "responseBody": "JSON representation of RateData"
  },
  {
    "namespace": "org.apache.fineract.portfolio.rate.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/api/RateApiResource.java",
    "mechanism": "REST",
    "name": "createRate",
    "description": "Endpoint to create a new rate.",
    "path": "/v1/rates",
    "method": "POST",
    "requestBody": "JSON payload for rate creation",
    "responseBody": "JSON representation of CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.portfolio.rate.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/api/RateApiResource.java",
    "mechanism": "REST",
    "name": "getAllRates",
    "description": "Endpoint to retrieve all rates.",
    "path": "/v1/rates",
    "method": "GET",
    "responseBody": "JSON array of RateData"
  },
  {
    "namespace": "org.apache.fineract.portfolio.rate.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/rate/api/RateApiResource.java",
    "mechanism": "REST",
    "name": "updateRate",
    "description": "Endpoint to update an existing rate.",
    "path": "/v1/rates/{rateId}",
    "method": "PUT",
    "requestBody": "JSON payload for rate update",
    "responseBody": "JSON representation of CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.portfolio.repaymentwithpostdatedchecks.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/repaymentwithpostdatedchecks/api/RepaymentWithPostDatedChecksApiResource.java",
    "mechanism": "REST",
    "name": "Get All Post Dated Checks",
    "description": "Endpoint to retrieve all post-dated checks for a loan.",
    "path": "/v1/loans/{loanId}/postdatedchecks",
    "method": "GET",
    "responseBody": "List<PostDatedChecksData>"
  },
  {
    "namespace": "org.apache.fineract.portfolio.repaymentwithpostdatedchecks.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/repaymentwithpostdatedchecks/api/RepaymentWithPostDatedChecksApiResource.java",
    "mechanism": "REST",
    "name": "Get Post Dated Check",
    "description": "Endpoint to retrieve a specific post-dated check by installment ID.",
    "path": "/v1/loans/{loanId}/postdatedchecks/{installmentId}",
    "method": "GET",
    "responseBody": "PostDatedChecksData"
  },
  {
    "namespace": "org.apache.fineract.portfolio.repaymentwithpostdatedchecks.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/repaymentwithpostdatedchecks/api/RepaymentWithPostDatedChecksApiResource.java",
    "mechanism": "REST",
    "name": "Update Post Dated Check",
    "description": "Endpoint to update a post-dated check or mark it as bounced.",
    "path": "/v1/loans/{loanId}/postdatedchecks/{postDatedCheckId}",
    "method": "PUT",
    "requestBody": "JSON payload defined by PostDatedChecksApiResourceSwagger.UpdatePostDatedCheckRequest",
    "responseBody": "CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.portfolio.repaymentwithpostdatedchecks.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/repaymentwithpostdatedchecks/api/RepaymentWithPostDatedChecksApiResource.java",
    "mechanism": "REST",
    "name": "Delete Post Dated Check",
    "description": "Endpoint to delete a post-dated check.",
    "path": "/v1/loans/{loanId}/postdatedchecks/{postDatedCheckId}",
    "method": "DELETE",
    "responseBody": "CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.portfolio.repaymentwithpostdatedchecks.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/repaymentwithpostdatedchecks/handler/BouncePostDatedCheckHandler.java",
    "mechanism": "OTHER",
    "name": "Fineract Command Handler",
    "description": "Registers a handler for the REPAYMENT_WITH_POSTDATEDCHECKS entity and BOUNCE action.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.repaymentwithpostdatedchecks.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/repaymentwithpostdatedchecks/handler/EditPostDatedChecksHandler.java",
    "mechanism": "OTHER",
    "name": "REPAYMENT_WITH_POSTDATEDCHECKS UPDATE",
    "description": "Internal Command Handler for updating post-dated checks.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositProductsApiResource.java",
    "mechanism": "REST",
    "name": "Create Recurring Deposit Product",
    "description": "Endpoint to create a new recurring deposit product definition.",
    "path": "/v1/recurringdepositproducts",
    "method": "POST",
    "requestBody": "JSON object representing the recurring deposit product",
    "responseBody": "JSON object with the command processing result"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositProductsApiResource.java",
    "mechanism": "REST",
    "name": "Update Recurring Deposit Product",
    "description": "Endpoint to update an existing recurring deposit product.",
    "path": "/v1/recurringdepositproducts/{productId}",
    "method": "PUT",
    "requestBody": "JSON object with fields to update",
    "responseBody": "JSON object with the command processing result"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositProductsApiResource.java",
    "mechanism": "REST",
    "name": "List Recurring Deposit Products",
    "description": "Endpoint to retrieve all recurring deposit products.",
    "path": "/v1/recurringdepositproducts",
    "method": "GET",
    "responseBody": "JSON array of recurring deposit products"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositProductsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Recurring Deposit Product",
    "description": "Endpoint to retrieve a single recurring deposit product by ID.",
    "path": "/v1/recurringdepositproducts/{productId}",
    "method": "GET",
    "responseBody": "JSON object representing the recurring deposit product"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositProductsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Template",
    "description": "Endpoint to retrieve a template with default values and options for creating a product.",
    "path": "/v1/recurringdepositproducts/template",
    "method": "GET",
    "responseBody": "JSON object representing the product template"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositProductsApiResource.java",
    "mechanism": "REST",
    "name": "Delete Recurring Deposit Product",
    "description": "Endpoint to delete a recurring deposit product.",
    "path": "/v1/recurringdepositproducts/{productId}",
    "method": "DELETE",
    "responseBody": "JSON object with the command processing result"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/SavingsAccountChargesApiResource.java",
    "mechanism": "REST",
    "name": "Savings Account Charges API",
    "description": "API endpoints for managing charges on savings accounts.",
    "path": "/v1/savingsaccounts/{savingsAccountId}/charges",
    "method": "GET, POST, PUT, DELETE",
    "direction": "BIDIRECTIONAL",
    "requestBody": "JSON (SavingsAccountChargeData)",
    "responseBody": "JSON (SavingsAccountChargeData or CommandProcessingResult)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/SavingsAccountTransactionsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Transaction Template",
    "description": "Retrieves the template data required for creating a new savings transaction.",
    "path": "/v1/savingsaccounts/{savingsId}/transactions/template",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON object containing template data and payment type options."
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/SavingsAccountTransactionsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Transaction",
    "description": "Retrieves a specific savings account transaction.",
    "path": "/v1/savingsaccounts/{savingsId}/transactions/{transactionId}",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON object representing the transaction."
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/SavingsAccountTransactionsApiResource.java",
    "mechanism": "REST",
    "name": "Search Transactions",
    "description": "Searches for transactions based on query parameters.",
    "path": "/v1/savingsaccounts/{savingsId}/transactions/search",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON array/page of transactions."
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/SavingsAccountTransactionsApiResource.java",
    "mechanism": "REST",
    "name": "Advanced Query",
    "description": "Executes an advanced search query for transactions.",
    "path": "/v1/savingsaccounts/{savingsId}/transactions/query",
    "method": "POST",
    "requestBody": "JSON object containing advanced query criteria.",
    "responseBody": "JSON list of query results."
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/SavingsAccountTransactionsApiResource.java",
    "mechanism": "REST",
    "name": "Execute Transaction",
    "description": "Performs a transaction (deposit, withdrawal, etc.) based on the command parameter.",
    "path": "/v1/savingsaccounts/{savingsId}/transactions",
    "method": "POST",
    "requestBody": "JSON object containing transaction details.",
    "responseBody": "JSON object containing the command processing result."
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/SavingsAccountTransactionsApiResource.java",
    "mechanism": "REST",
    "name": "Adjust Transaction",
    "description": "Modifies an existing transaction (reverse, undo, etc.) based on the command parameter.",
    "path": "/v1/savingsaccounts/{savingsId}/transactions/{transactionId}",
    "method": "POST",
    "requestBody": "JSON object containing adjustment details.",
    "responseBody": "JSON object containing the command processing result."
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/FixedDepositAccountTransactionsApiResource.java",
    "mechanism": "REST",
    "name": "Fixed Deposit Account Transactions API",
    "description": "API endpoints for managing fixed deposit account transactions.",
    "path": "/v1/fixeddepositaccounts/{fixedDepositAccountId}/transactions",
    "method": "GET, POST",
    "requestBody": "JSON payload for transaction details (deposit/withdrawal/adjust)",
    "responseBody": "JSON representation of the transaction or processing result",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/DepositAccountOnHoldFundTransactionsApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAll",
    "description": "Endpoint to retrieve on-hold transactions for a savings account.",
    "path": "/v1/savingsaccounts/{savingsId}/onholdtransactions",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON representation of Page<DepositAccountOnHoldTransactionData>",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.FixedDepositAccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/FixedDepositAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Template",
    "description": "Retrieve Fixed Deposit Account Template",
    "path": "/v1/fixeddepositaccounts/template",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON (DepositAccountData)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.FixedDepositAccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/FixedDepositAccountsApiResource.java",
    "mechanism": "REST",
    "name": "List Accounts",
    "description": "List Fixed deposit applications/accounts",
    "path": "/v1/fixeddepositaccounts",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON Array (DepositAccountData)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.FixedDepositAccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/FixedDepositAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Submit Application",
    "description": "Submit new fixed deposit application",
    "path": "/v1/fixeddepositaccounts",
    "method": "POST",
    "requestBody": "JSON (PostFixedDepositAccountsRequest)",
    "responseBody": "JSON (PostFixedDepositAccountsResponse)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.FixedDepositAccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/FixedDepositAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve One",
    "description": "Retrieve a fixed deposit application/account",
    "path": "/v1/fixeddepositaccounts/{accountId}",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON (FixedDepositAccountData)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.FixedDepositAccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/FixedDepositAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Update Application",
    "description": "Modify a fixed deposit application",
    "path": "/v1/fixeddepositaccounts/{accountId}",
    "method": "PUT",
    "requestBody": "JSON (PutFixedDepositAccountsAccountIdRequest)",
    "responseBody": "JSON (PutFixedDepositAccountsAccountIdResponse)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.FixedDepositAccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/FixedDepositAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Handle Commands",
    "description": "Approve, Reject, Activate, Close, Calculate Interest, etc.",
    "path": "/v1/fixeddepositaccounts/{accountId}",
    "method": "POST",
    "requestBody": "JSON (PostFixedDepositAccountsAccountIdRequest)",
    "responseBody": "JSON (PostFixedDepositAccountsAccountIdResponse)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.FixedDepositAccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/FixedDepositAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Delete Application",
    "description": "Delete a fixed deposit application",
    "path": "/v1/fixeddepositaccounts/{accountId}",
    "method": "DELETE",
    "requestBody": "None",
    "responseBody": "JSON (DeleteFixedDepositAccountsAccountIdResponse)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.FixedDepositAccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/FixedDepositAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Account Closure Template",
    "description": "Retrieve account closure template",
    "path": "/v1/fixeddepositaccounts/{accountId}/template",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON (DepositAccountData)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.FixedDepositAccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/FixedDepositAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Download Template",
    "description": "Download fixed deposit import template",
    "path": "/v1/fixeddepositaccounts/downloadtemplate",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "application/vnd.ms-excel",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.FixedDepositAccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/FixedDepositAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Upload Template",
    "description": "Upload fixed deposit import template",
    "path": "/v1/fixeddepositaccounts/uploadtemplate",
    "method": "POST",
    "requestBody": "Multipart/Form-Data",
    "responseBody": "JSON (ImportDocumentId)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.FixedDepositAccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/FixedDepositAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Download Transaction Template",
    "description": "Download fixed deposit transaction import template",
    "path": "/v1/fixeddepositaccounts/transaction/downloadtemplate",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "application/vnd.ms-excel",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.FixedDepositAccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/FixedDepositAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Upload Transaction Template",
    "description": "Upload fixed deposit transaction import template",
    "path": "/v1/fixeddepositaccounts/transaction/uploadtemplate",
    "method": "POST",
    "requestBody": "Multipart/Form-Data",
    "responseBody": "JSON (ImportDocumentId)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.FixedDepositProductsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/FixedDepositProductsApiResource.java",
    "mechanism": "REST",
    "name": "Create Fixed Deposit Product",
    "description": "Endpoint to create a new fixed deposit product definition.",
    "path": "/v1/fixeddepositproducts",
    "method": "POST",
    "requestBody": "JSON object matching FixedDepositProductData structure",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.FixedDepositProductsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/FixedDepositProductsApiResource.java",
    "mechanism": "REST",
    "name": "Update Fixed Deposit Product",
    "description": "Endpoint to update an existing fixed deposit product.",
    "path": "/v1/fixeddepositproducts/{productId}",
    "method": "PUT",
    "requestBody": "JSON object with fields to update",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.FixedDepositProductsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/FixedDepositProductsApiResource.java",
    "mechanism": "REST",
    "name": "List Fixed Deposit Products",
    "description": "Endpoint to retrieve a list of all fixed deposit products.",
    "path": "/v1/fixeddepositproducts",
    "method": "GET",
    "responseBody": "JSON array of FixedDepositProductData"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.FixedDepositProductsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/FixedDepositProductsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Fixed Deposit Product",
    "description": "Endpoint to retrieve a single fixed deposit product by ID.",
    "path": "/v1/fixeddepositproducts/{productId}",
    "method": "GET",
    "responseBody": "JSON object of FixedDepositProductData"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.FixedDepositProductsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/FixedDepositProductsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Template",
    "description": "Endpoint to retrieve template data for creating a fixed deposit product.",
    "path": "/v1/fixeddepositproducts/template",
    "method": "GET",
    "responseBody": "JSON object with default values and dropdown options"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.FixedDepositProductsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/FixedDepositProductsApiResource.java",
    "mechanism": "REST",
    "name": "Delete Fixed Deposit Product",
    "description": "Endpoint to delete a fixed deposit product.",
    "path": "/v1/fixeddepositproducts/{productId}",
    "method": "DELETE",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.RecurringDepositAccountTransactionsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositAccountTransactionsApiResource.java",
    "mechanism": "REST",
    "name": "Recurring Deposit Account Transactions API",
    "description": "API endpoints for managing transactions on recurring deposit accounts.",
    "path": "/v1/recurringdepositaccounts/{recurringDepositAccountId}/transactions",
    "method": "GET, POST",
    "requestBody": "JSON payload containing transaction details (amount, date, payment type, etc.)",
    "responseBody": "JSON representation of the transaction data or processing result",
    "authentication": "PlatformSecurityContext (implied OAuth/Basic Auth)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.RecurringDepositAccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Template",
    "description": "Retrieve recurring Deposit Account Template",
    "path": "/v1/recurringdepositaccounts/template",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.RecurringDepositAccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositAccountsApiResource.java",
    "mechanism": "REST",
    "name": "List Accounts",
    "description": "List Recurring deposit applications/accounts",
    "path": "/v1/recurringdepositaccounts",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.RecurringDepositAccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Submit Application",
    "description": "Submit new recurring deposit application",
    "path": "/v1/recurringdepositaccounts",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON payload with account details"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.RecurringDepositAccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve One",
    "description": "Retrieve a recurring deposit application/account",
    "path": "/v1/recurringdepositaccounts/{accountId}",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.RecurringDepositAccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Update Application",
    "description": "Modify a recurring deposit application",
    "path": "/v1/recurringdepositaccounts/{accountId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON payload with update details"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.RecurringDepositAccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Handle Commands",
    "description": "Perform actions like approve, reject, activate, close, etc.",
    "path": "/v1/recurringdepositaccounts/{accountId}",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON payload (optional depending on command)"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.RecurringDepositAccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Delete Application",
    "description": "Delete a recurring deposit application",
    "path": "/v1/recurringdepositaccounts/{accountId}",
    "method": "DELETE",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.RecurringDepositAccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Closure Template",
    "description": "Retrieve account closure template",
    "path": "/v1/recurringdepositaccounts/{accountId}/template",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.RecurringDepositAccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Download Import Template",
    "description": "Download bulk import template for accounts",
    "path": "/v1/recurringdepositaccounts/downloadtemplate",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.RecurringDepositAccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Upload Import Template",
    "description": "Upload bulk import template for accounts",
    "path": "/v1/recurringdepositaccounts/uploadtemplate",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "Multipart form data"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.RecurringDepositAccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Download Transaction Template",
    "description": "Download bulk import template for transactions",
    "path": "/v1/recurringdepositaccounts/transactions/downloadtemplate",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.RecurringDepositAccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/RecurringDepositAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Upload Transaction Template",
    "description": "Upload bulk import template for transactions",
    "path": "/v1/recurringdepositaccounts/transactions/uploadtemplate",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "Multipart form data"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.SavingsAccountsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/SavingsAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Savings Account API",
    "description": "Exposes RESTful endpoints for managing savings accounts.",
    "path": "/v1/savingsaccounts",
    "method": "GET, POST, PUT, DELETE",
    "direction": "PRODUCER",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.SavingsProductsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/SavingsProductsApiResource.java",
    "mechanism": "REST",
    "name": "Create Savings Product",
    "description": "Endpoint to create a new savings product.",
    "path": "/v1/savingsproducts",
    "method": "POST",
    "requestBody": "JSON object representing the savings product (SavingsProductsApiResourceSwagger.PostSavingsProductsRequest)",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.SavingsProductsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/SavingsProductsApiResource.java",
    "mechanism": "REST",
    "name": "Update Savings Product",
    "description": "Endpoint to update an existing savings product.",
    "path": "/v1/savingsproducts/{productId}",
    "method": "PUT",
    "requestBody": "JSON object with fields to update",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.SavingsProductsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/SavingsProductsApiResource.java",
    "mechanism": "REST",
    "name": "List Savings Products",
    "description": "Endpoint to retrieve all savings products.",
    "path": "/v1/savingsproducts",
    "method": "GET",
    "responseBody": "JSON array of savings product data"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.SavingsProductsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/SavingsProductsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Savings Product",
    "description": "Endpoint to retrieve a single savings product by ID.",
    "path": "/v1/savingsproducts/{productId}",
    "method": "GET",
    "responseBody": "JSON object of savings product data"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.SavingsProductsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/SavingsProductsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Template",
    "description": "Endpoint to retrieve a template with defaults and options for creating a savings product.",
    "path": "/v1/savingsproducts/template",
    "method": "GET",
    "responseBody": "JSON object containing template data and dropdown options"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.api.SavingsProductsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/api/SavingsProductsApiResource.java",
    "mechanism": "REST",
    "name": "Delete Savings Product",
    "description": "Endpoint to delete a savings product.",
    "path": "/v1/savingsproducts/{productId}",
    "method": "DELETE",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ApplyAnnualFeeSavingsAccountCommandHandler.java",
    "mechanism": "OTHER",
    "name": "SAVINGSACCOUNT | APPLYANNUALFEE",
    "description": "Registers as a command handler in the Fineract CQRS system via the @CommandType annotation.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CalculateInterestRecurringDepositAccountCommandHandler.java",
    "mechanism": "OTHER",
    "name": "RECURRINGDEPOSITACCOUNT | CALCULATEINTEREST",
    "description": "Fineract Command Handler registration via @CommandType annotation. This integrates the class into the application's command processing pipeline.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CalculateInterestFixedDepositAccountCommandHandler.java",
    "mechanism": "OTHER",
    "name": "Command Handler: FIXEDDEPOSITACCOUNT - CALCULATEINTEREST",
    "description": "Registers a handler for the internal command dispatching system to process interest calculation requests for fixed deposit accounts.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UndoTransactionFixedDepositAccountCommandHandler.java",
    "mechanism": "OTHER",
    "name": "FIXEDDEPOSITACCOUNT UNDOTRANSACTION",
    "description": "Registers a command handler for the 'UNDOTRANSACTION' action on 'FIXEDDEPOSITACCOUNT' entities within the Fineract command processing framework.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/RecurringDepositAccountUpdateDepositAmountCommandHandler.java",
    "mechanism": "OTHER",
    "name": "RECURRINGDEPOSITACCOUNT.UPDATEDEPOSITAMOUNT",
    "description": "Internal Command Handler integration point for Fineract's CQRS command processing pipeline.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/SavingsAccountApplicationDeletionCommandHandler.java",
    "mechanism": "OTHER",
    "name": "Command Handler Registration",
    "description": "Registers as a handler for SAVINGSACCOUNT DELETE commands via the @CommandType annotation, integrating with the application's internal command processing bus.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CloseRecurringDepositAccountCommandHandler.java",
    "mechanism": "OTHER",
    "name": "RECURRINGDEPOSITACCOUNT CLOSE",
    "description": "Fineract Command Handler for closing recurring deposit accounts",
    "path": "n/a",
    "method": "CLOSE",
    "direction": "CONSUMER",
    "requestBody": "JsonCommand",
    "responseBody": "CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CloseFixedDepositAccountCommandHandler.java",
    "mechanism": "OTHER",
    "name": "CommandType Annotation",
    "description": "Registers this class as a handler for internal command processing within the Fineract framework.",
    "path": "Entity: FIXEDDEPOSITACCOUNT, Action: CLOSE",
    "method": "n/a",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/UnblockDebitsFromSavingsAccountCommandHandler.java",
    "mechanism": "OTHER",
    "name": "Command Handler Registration",
    "description": "Registers as a handler for SAVINGSACCOUNT entity and UNBLOCKDEBIT action via the Fineract Command framework.",
    "direction": "CONSUMER",
    "requestBody": "JsonCommand containing savingsId",
    "responseBody": "CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/CalculateInterestSavingsAccountCommandHandler.java",
    "mechanism": "OTHER",
    "name": "SAVINGSACCOUNT CALCULATEINTEREST",
    "description": "Internal Command Handler registered via @CommandType to process 'CALCULATEINTEREST' actions for 'SAVINGSACCOUNT' entities.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/ActivateSavingsAccountCommandHandler.java",
    "mechanism": "OTHER",
    "name": "SAVINGSACCOUNT-ACTIVATE",
    "description": "Fineract Command Handler for activating savings accounts, mapped via @CommandType annotation.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/BlockSavingsAccountCommandHandler.java",
    "mechanism": "OTHER",
    "name": "Command Handler (SAVINGSACCOUNT | BLOCK)",
    "description": "Registers a handler for the internal command processing engine for the entity 'SAVINGSACCOUNT' and action 'BLOCK'.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/AddSavingsAccountChargeCommandHandler.java",
    "mechanism": "OTHER",
    "name": "SAVINGSACCOUNTCHARGE CREATE Command",
    "description": "Internal Fineract Command Handler for creating savings account charges",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/DeleteSavingsProductCommandHandler.java",
    "mechanism": "OTHER",
    "name": "Command Handler Registration",
    "description": "Registers this class as a handler for the internal command processing bus via the @CommandType annotation.",
    "path": "SAVINGSPRODUCT/DELETE",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.handler.FixedDepositAccountApplicationDeletionCommandHandler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositAccountApplicationDeletionCommandHandler.java",
    "mechanism": "OTHER",
    "name": "Fixed Deposit Account Application Deletion Command",
    "description": "This class acts as a handler for an internal command within the Apache Fineract framework, following a CQRS pattern. It is registered via the @CommandType annotation to listen for 'DELETE' commands on the 'FIXEDDEPOSITACCOUNT' entity. When such a command is dispatched by the internal command bus, this handler's processCommand method is invoked to execute the deletion logic.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.handler.FixedDepositTransactionAdjustmentCommandHandler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/FixedDepositTransactionAdjustmentCommandHandler.java",
    "mechanism": "OTHER",
    "name": "FIXEDDEPOSITACCOUNT.ADJUSTTRANSACTION",
    "description": "This handler is registered to process internal commands for adjusting a transaction on a fixed deposit account. It is invoked by the application's command bus/dispatcher when a command with entity 'FIXEDDEPOSITACCOUNT' and action 'ADJUSTTRANSACTION' is submitted. The command is typically triggered by an API call, but this class is one step removed from the direct API endpoint.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.handler.GSIMDepositCommandHandler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/handler/GSIMDepositCommandHandler.java",
    "mechanism": "OTHER",
    "name": "GSIMACCOUNT DEPOSIT Command Handler",
    "description": "Registers a handler for the internal command bus for Entity 'GSIMACCOUNT' and Action 'DEPOSIT' via the @CommandType annotation.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.jobs.applyannualfeeforsavings",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/jobs/applyannualfeeforsavings/ApplyAnnualFeeForSavingsConfig.java",
    "mechanism": "OTHER",
    "name": "APPLY_ANNUAL_FEE_FOR_SAVINGS",
    "description": "Spring Batch Job definition used by the application scheduler to apply annual fees.",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.jobs.payduesavingscharges",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/jobs/payduesavingscharges/PayDueSavingsChargesConfig.java",
    "mechanism": "OTHER",
    "name": "PAY_DUE_SAVINGS_CHARGES",
    "description": "Spring Batch Job definition for processing due savings charges",
    "direction": "OTHER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.jobs.transferinteresttosavings",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/jobs/transferinteresttosavings/TransferInterestToSavingsConfig.java",
    "mechanism": "OTHER",
    "name": "TRANSFER_INTEREST_TO_SAVINGS",
    "description": "Defines a Spring Batch Job for transferring interest to savings, which is likely triggered by an internal scheduler.",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.jobs.updatesavingsdormantaccounts.UpdateSavingsDormantAccountsTasklet",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/jobs/updatesavingsdormantaccounts/UpdateSavingsDormantAccountsTasklet.java",
    "mechanism": "OTHER",
    "name": "UpdateSavingsDormantAccountsTasklet",
    "description": "Spring Batch Tasklet execution logic for updating savings account statuses."
  },
  {
    "namespace": "org.apache.fineract.portfolio.savings.service.SavingsAccountWritePlatformServiceJpaRepositoryImpl",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java",
    "mechanism": "OTHER",
    "name": "BusinessEventNotifierService",
    "description": "Internal event bus to notify other parts of the system about business events.",
    "messageType": "SavingsActivateBusinessEvent, SavingsCloseBusinessEvent, SavingsPostInterestBusinessEvent",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.search.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/search/api/SearchApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAdHocSearchQueryTemplate",
    "description": "Retrieves the ad-hoc search query template.",
    "path": "/v1/search/template",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON object representing the ad-hoc search template",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.search.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/search/api/SearchApiResource.java",
    "mechanism": "REST",
    "name": "searchData",
    "description": "Searches for resources (clients, groups, loans) based on query parameters.",
    "path": "/v1/search",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON array of search results",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.search.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/search/api/SearchApiResource.java",
    "mechanism": "REST",
    "name": "advancedSearch",
    "description": "Performs an advanced ad-hoc search using a JSON request body.",
    "path": "/v1/search/advance",
    "method": "POST",
    "requestBody": "JSON object containing ad-hoc query search conditions",
    "responseBody": "JSON array of ad-hoc search results",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.account.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/account/api/SelfBeneficiariesTPTApiResource.java",
    "mechanism": "REST",
    "name": "Get Template",
    "description": "Retrieves template data for creating a beneficiary.",
    "path": "/v1/self/beneficiaries/tpt/template",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON object containing account type options"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.account.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/account/api/SelfBeneficiariesTPTApiResource.java",
    "mechanism": "REST",
    "name": "Add Beneficiary",
    "description": "Adds a new third-party beneficiary.",
    "path": "/v1/self/beneficiaries/tpt",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON object with name, officeName, accountNumber, transferLimit",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.account.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/account/api/SelfBeneficiariesTPTApiResource.java",
    "mechanism": "REST",
    "name": "Update Beneficiary",
    "description": "Updates an existing beneficiary.",
    "path": "/v1/self/beneficiaries/tpt/{beneficiaryId}",
    "method": "PUT",
    "direction": "PRODUCER",
    "requestBody": "JSON object with fields to update",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.account.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/account/api/SelfBeneficiariesTPTApiResource.java",
    "mechanism": "REST",
    "name": "Delete Beneficiary",
    "description": "Deletes a beneficiary.",
    "path": "/v1/self/beneficiaries/tpt/{beneficiaryId}",
    "method": "DELETE",
    "direction": "PRODUCER",
    "responseBody": "JSON object with command processing result"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.account.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/account/api/SelfBeneficiariesTPTApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve All",
    "description": "Retrieves all beneficiaries for the user.",
    "path": "/v1/self/beneficiaries/tpt",
    "method": "GET",
    "direction": "PRODUCER",
    "responseBody": "JSON array of beneficiary data"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.account.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/account/api/SelfAccountTransferApiResource.java",
    "mechanism": "REST",
    "name": "Self Account transfer",
    "description": "API endpoints for self-service account transfers",
    "path": "/v1/self/accounttransfers",
    "method": "GET, POST",
    "direction": "BIDIRECTIONAL",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.client.api.SelfClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/client/api/SelfClientsApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAll",
    "description": "List Clients associated to the user",
    "path": "/v1/self/clients",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.client.api.SelfClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/client/api/SelfClientsApiResource.java",
    "mechanism": "REST",
    "name": "retrieveOne",
    "description": "Retrieve a Client",
    "path": "/v1/self/clients/{clientId}",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.client.api.SelfClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/client/api/SelfClientsApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAssociatedAccounts",
    "description": "Retrieve client accounts overview",
    "path": "/v1/self/clients/{clientId}/accounts",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.client.api.SelfClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/client/api/SelfClientsApiResource.java",
    "mechanism": "REST",
    "name": "retrieveImage",
    "description": "Retrieve Client Image",
    "path": "/v1/self/clients/{clientId}/images",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.client.api.SelfClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/client/api/SelfClientsApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAllClientCharges",
    "description": "List Client Charges",
    "path": "/v1/self/clients/{clientId}/charges",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.client.api.SelfClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/client/api/SelfClientsApiResource.java",
    "mechanism": "REST",
    "name": "retrieveClientCharge",
    "description": "Retrieve a Client Charge",
    "path": "/v1/self/clients/{clientId}/charges/{chargeId}",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.client.api.SelfClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/client/api/SelfClientsApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAllClientTransactions",
    "description": "List Client Transactions",
    "path": "/v1/self/clients/{clientId}/transactions",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.client.api.SelfClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/client/api/SelfClientsApiResource.java",
    "mechanism": "REST",
    "name": "retrieveClientTransaction",
    "description": "Retrieve a Client Transaction",
    "path": "/v1/self/clients/{clientId}/transactions/{transactionId}",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.client.api.SelfClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/client/api/SelfClientsApiResource.java",
    "mechanism": "REST",
    "name": "addNewClientImage",
    "description": "Add new client image (Multipart)",
    "path": "/v1/self/clients/{clientId}/images",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "Multipart Form Data"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.client.api.SelfClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/client/api/SelfClientsApiResource.java",
    "mechanism": "REST",
    "name": "addNewClientImage",
    "description": "Add new client image (JSON/Text)",
    "path": "/v1/self/clients/{clientId}/images",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON or Text"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.client.api.SelfClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/client/api/SelfClientsApiResource.java",
    "mechanism": "REST",
    "name": "deleteClientImage",
    "description": "Delete Client Image",
    "path": "/v1/self/clients/{clientId}/images",
    "method": "DELETE",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.client.api.SelfClientsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/client/api/SelfClientsApiResource.java",
    "mechanism": "REST",
    "name": "retrieveObligeeDetails",
    "description": "Retrieve Obligee Details",
    "path": "/v1/self/clients/{clientId}/obligeedetails",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.client.data.SelfClientDataValidator",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/client/data/SelfClientDataValidator.java",
    "mechanism": "REST",
    "name": "REST Request Validation",
    "description": "Consumes JAX-RS UriInfo to validate incoming HTTP query parameters for client data operations.",
    "path": "n/a",
    "method": "n/a",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.loanaccount.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/loanaccount/api/SelfLoansApiResourceSwagger.java",
    "mechanism": "REST",
    "name": "Self Loans API Schemas",
    "description": "Defines the JSON schemas (Requests and Responses) for the Self Service Loans REST API. While this file does not contain the JAX-RS annotations, it defines the contract for endpoints such as retrieving loan details, creating loans, and updating loan status.",
    "path": "/self/loans (implied by schema names)",
    "method": "GET, POST, PUT",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.loanaccount.api.SelfLoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/loanaccount/api/SelfLoansApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Loan",
    "description": "Endpoint to retrieve a single loan by ID.",
    "path": "/v1/self/loans/{loanId}",
    "method": "GET",
    "responseBody": "JSON representation of the Loan"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.loanaccount.api.SelfLoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/loanaccount/api/SelfLoansApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Transaction",
    "description": "Endpoint to retrieve a specific transaction for a loan.",
    "path": "/v1/self/loans/{loanId}/transactions/{transactionId}",
    "method": "GET",
    "responseBody": "JSON representation of the Transaction"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.loanaccount.api.SelfLoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/loanaccount/api/SelfLoansApiResource.java",
    "mechanism": "REST",
    "name": "List Loan Charges",
    "description": "Endpoint to list all charges for a loan.",
    "path": "/v1/self/loans/{loanId}/charges",
    "method": "GET",
    "responseBody": "JSON array of Loan Charges"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.loanaccount.api.SelfLoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/loanaccount/api/SelfLoansApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Loan Charge",
    "description": "Endpoint to retrieve a specific charge for a loan.",
    "path": "/v1/self/loans/{loanId}/charges/{chargeId}",
    "method": "GET",
    "responseBody": "JSON representation of the Loan Charge"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.loanaccount.api.SelfLoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/loanaccount/api/SelfLoansApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Loan Template",
    "description": "Endpoint to retrieve loan template data for UI construction.",
    "path": "/v1/self/loans/template",
    "method": "GET",
    "responseBody": "JSON representation of the Loan Template"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.loanaccount.api.SelfLoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/loanaccount/api/SelfLoansApiResource.java",
    "mechanism": "REST",
    "name": "Calculate Schedule or Submit Application",
    "description": "Endpoint to calculate repayment schedule or submit a new loan application.",
    "path": "/v1/self/loans",
    "method": "POST",
    "requestBody": "JSON payload for loan application",
    "responseBody": "JSON response with schedule or loan details"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.loanaccount.api.SelfLoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/loanaccount/api/SelfLoansApiResource.java",
    "mechanism": "REST",
    "name": "Modify Loan Application",
    "description": "Endpoint to modify a pending loan application.",
    "path": "/v1/self/loans/{loanId}",
    "method": "PUT",
    "requestBody": "JSON payload for modification",
    "responseBody": "JSON response of modified loan"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.loanaccount.api.SelfLoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/loanaccount/api/SelfLoansApiResource.java",
    "mechanism": "REST",
    "name": "State Transitions",
    "description": "Endpoint for loan state transitions (e.g., withdrawal).",
    "path": "/v1/self/loans/{loanId}",
    "method": "POST",
    "requestBody": "JSON payload for transition",
    "responseBody": "JSON response of transition result"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.loanaccount.api.SelfLoansApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/loanaccount/api/SelfLoansApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Guarantors",
    "description": "Endpoint to retrieve guarantors for a loan.",
    "path": "/v1/self/loans/{loanId}/guarantors",
    "method": "GET",
    "responseBody": "JSON representation of Guarantors"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.pockets.api.PocketApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/api/PocketApiResource.java",
    "mechanism": "REST",
    "name": "Link/Delink Accounts",
    "description": "Endpoint to link or delink accounts to/from a pocket.",
    "path": "/v1/self/pockets",
    "method": "POST",
    "requestBody": "JSON payload containing account details to link/delink",
    "responseBody": "JSON result of the command processing",
    "authentication": "Unknown (likely handled by filter/interceptor)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.pockets.api.PocketApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/api/PocketApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Linked Accounts",
    "description": "Endpoint to retrieve all accounts linked to the pocket.",
    "path": "/v1/self/pockets",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON array of linked accounts",
    "authentication": "Unknown (likely handled by filter/interceptor)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.pockets.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/handler/DelinkAccountsFromPocketCommandHandler.java",
    "mechanism": "OTHER",
    "name": "Fineract Command Bus",
    "description": "Registers as a handler for the 'DELINKACCOUNTS' action on the 'POCKET' entity via the @CommandType annotation.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.products.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/products/api/SelfLoanProductsApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAllLoanProducts",
    "description": "Endpoint to retrieve all loan products for self-service.",
    "path": "/v1/self/loanproducts",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON array of loan products",
    "authentication": "Implicit (likely Basic Auth or OAuth handled by container/filter)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.products.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/products/api/SelfLoanProductsApiResource.java",
    "mechanism": "REST",
    "name": "retrieveLoanProductDetails",
    "description": "Endpoint to retrieve details of a specific loan product.",
    "path": "/v1/self/loanproducts/{productId}",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON object of loan product details",
    "authentication": "Implicit",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.products.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/products/api/SelfSavingsProductsApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAll",
    "description": "Endpoint to retrieve all savings products for a self-service client.",
    "path": "/v1/self/savingsproducts",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON array of savings products",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.products.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/products/api/SelfSavingsProductsApiResource.java",
    "mechanism": "REST",
    "name": "retrieveOne",
    "description": "Endpoint to retrieve a single savings product by ID.",
    "path": "/v1/self/savingsproducts/{productId}",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON object of savings product details",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.products.api.SelfShareProductsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/products/api/SelfShareProductsApiResource.java",
    "mechanism": "REST",
    "name": "retrieveProduct",
    "description": "Endpoint to retrieve a single share product by ID.",
    "path": "/v1/self/products/share/{productId}",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON representation of the share product",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.products.api.SelfShareProductsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/products/api/SelfShareProductsApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAllProducts",
    "description": "Endpoint to retrieve all share products.",
    "path": "/v1/self/products/share",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON representation of a list of share products",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.registration.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/registration/api/SelfServiceRegistrationApiResource.java",
    "mechanism": "REST",
    "name": "createSelfServiceRegistrationRequest",
    "description": "Endpoint for submitting a self-service registration request.",
    "path": "/v1/self/registration",
    "method": "POST",
    "direction": "BIDIRECTIONAL",
    "requestBody": "JSON string containing registration details",
    "responseBody": "Success message string"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.registration.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/registration/api/SelfServiceRegistrationApiResource.java",
    "mechanism": "REST",
    "name": "createSelfServiceUser",
    "description": "Endpoint for creating a self-service user.",
    "path": "/v1/self/registration/user",
    "method": "POST",
    "direction": "BIDIRECTIONAL",
    "requestBody": "JSON string containing user details",
    "responseBody": "JSON object containing the created user's ID"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.registration.service.SelfServiceRegistrationWritePlatformServiceImpl",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/registration/service/SelfServiceRegistrationWritePlatformServiceImpl.java",
    "mechanism": "OTHER",
    "name": "GmailBackedPlatformEmailService",
    "description": "Sends authorization emails to users via an internal email service wrapper.",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.registration.service.SelfServiceRegistrationWritePlatformServiceImpl",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/registration/service/SelfServiceRegistrationWritePlatformServiceImpl.java",
    "mechanism": "OTHER",
    "name": "SmsMessageScheduledJobService",
    "description": "Queues and triggers SMS messages for delivery via an internal job service.",
    "direction": "PRODUCER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.runreport.SelfRunReportApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/runreport/SelfRunReportApiResource.java",
    "mechanism": "REST",
    "name": "runReport",
    "description": "Endpoint to run a report for self-service users.",
    "path": "/v1/self/runreports/{reportName}",
    "method": "GET",
    "requestBody": "None (Query parameters via UriInfo)",
    "responseBody": "JSON, CSV, PDF, HTML, or Excel depending on negotiation",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.savings.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/savings/api/SelfSavingsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Savings Account",
    "description": "Endpoint to retrieve a single savings account for the authenticated user.",
    "path": "/v1/self/savingsaccounts/{accountId}",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.savings.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/savings/api/SelfSavingsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Savings Transaction",
    "description": "Endpoint to retrieve a specific transaction for a savings account.",
    "path": "/v1/self/savingsaccounts/{accountId}/transactions/{transactionId}",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.savings.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/savings/api/SelfSavingsApiResource.java",
    "mechanism": "REST",
    "name": "List Savings Charges",
    "description": "Endpoint to list charges for a savings account.",
    "path": "/v1/self/savingsaccounts/{accountId}/charges",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.savings.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/savings/api/SelfSavingsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Savings Charge",
    "description": "Endpoint to retrieve a specific charge for a savings account.",
    "path": "/v1/self/savingsaccounts/{accountId}/charges/{savingsAccountChargeId}",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.savings.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/savings/api/SelfSavingsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Template",
    "description": "Endpoint to retrieve a savings account application template.",
    "path": "/v1/self/savingsaccounts/template",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.savings.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/savings/api/SelfSavingsApiResource.java",
    "mechanism": "REST",
    "name": "Submit Application",
    "description": "Endpoint to submit a new savings account application.",
    "path": "/v1/self/savingsaccounts",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON payload containing application details"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.savings.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/savings/api/SelfSavingsApiResource.java",
    "mechanism": "REST",
    "name": "Modify Application",
    "description": "Endpoint to modify an existing savings account application.",
    "path": "/v1/self/savingsaccounts/{accountId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON payload containing modification details"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.security.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/security/api/SelfUserApiResource.java",
    "mechanism": "REST",
    "name": "Update User",
    "description": "API endpoint for self-service users to update their own profile information.",
    "path": "/v1/self/user",
    "method": "PUT",
    "requestBody": "JSON object containing 'password' and 'repeatPassword'.",
    "responseBody": "JSON response confirming the update.",
    "authentication": "Implicitly required via PlatformSecurityContext usage."
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.security.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/security/api/SelfAuthenticationApiResource.java",
    "mechanism": "REST",
    "name": "Self Authentication",
    "description": "Endpoint for self-service user authentication.",
    "path": "/v1/self/authentication",
    "method": "POST",
    "direction": "PRODUCER",
    "requestBody": "JSON structure defined by AuthenticationApiResourceSwagger.PostAuthenticationRequest",
    "responseBody": "JSON structure defined by SelfAuthenticationApiResourceSwagger.PostSelfAuthenticationResponse",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.security.api.SelfUserDetailsApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/security/api/SelfUserDetailsApiResource.java",
    "mechanism": "REST",
    "name": "Fetch Authenticated User Details",
    "description": "Endpoint to retrieve the authenticated user's details, roles, and permissions.",
    "path": "/v1/self/userdetails",
    "method": "GET",
    "responseBody": "JSON representation of user details (SelfUserDetailsApiResourceSwagger.GetSelfUserDetailsResponse)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.shareaccounts.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/shareaccounts/api/SelfShareAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Share Account Template",
    "description": "Endpoint to retrieve data required to create a share account application.",
    "path": "/v1/self/shareaccounts/template",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON object containing ShareAccountData (products, charges, client info)",
    "authentication": "PlatformSecurityContext (implied)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.shareaccounts.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/shareaccounts/api/SelfShareAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Submit new share application",
    "description": "Endpoint to submit a new share account application.",
    "path": "/v1/self/shareaccounts",
    "method": "POST",
    "requestBody": "JSON object with share application details (clientId, productId, etc.)",
    "responseBody": "JSON object with creation result",
    "authentication": "PlatformSecurityContext (implied)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.shareaccounts.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/shareaccounts/api/SelfShareAccountsApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve a share application/account",
    "description": "Endpoint to retrieve details of a specific share account.",
    "path": "/v1/self/shareaccounts/{accountId}",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON object containing AccountData",
    "authentication": "PlatformSecurityContext (implied)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.spm.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/spm/api/SelfScorecardApiResource.java",
    "mechanism": "REST",
    "name": "findByClient",
    "description": "Endpoint to retrieve scorecards for a specific client.",
    "path": "/v1/self/surveys/scorecards/clients/{clientId}",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "List<ScorecardData> (JSON)",
    "authentication": "PlatformSecurityContext (implied)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.spm.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/spm/api/SelfScorecardApiResource.java",
    "mechanism": "REST",
    "name": "createScorecard",
    "description": "Endpoint to create a new scorecard for a survey.",
    "path": "/v1/self/surveys/scorecards/{surveyId}",
    "method": "POST",
    "requestBody": "ScorecardData (JSON)",
    "responseBody": "None",
    "authentication": "PlatformSecurityContext (implied)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.self.spm.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/self/spm/api/SelfSpmApiResource.java",
    "mechanism": "REST",
    "name": "fetchAllSurveys",
    "description": "Endpoint to retrieve active surveys for self-service users.",
    "path": "/v1/self/surveys",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "List<SurveyData> (JSON)",
    "authentication": "PlatformSecurityContext (Implicit)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.shareaccounts.handler.RejectShareAccountCommandHandler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/RejectShareAccountCommandHandler.java",
    "mechanism": "OTHER",
    "name": "SHAREACCOUNT REJECT Command",
    "description": "Registers as a handler for the SHAREACCOUNT entity and REJECT action within the Fineract command processing framework via @CommandType.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.shareproducts.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/api/ShareDividendApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve All Dividends",
    "description": "Retrieves a list of dividends for a share product.",
    "path": "/v1/shareproduct/{productId}/dividend",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.shareproducts.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/api/ShareDividendApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Dividend Details",
    "description": "Retrieves details of a specific dividend.",
    "path": "/v1/shareproduct/{productId}/dividend/{dividendId}",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.shareproducts.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/api/ShareDividendApiResource.java",
    "mechanism": "REST",
    "name": "Create Dividend",
    "description": "Creates a new dividend payout.",
    "path": "/v1/shareproduct/{productId}/dividend",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON payload defining the dividend payout"
  },
  {
    "namespace": "org.apache.fineract.portfolio.shareproducts.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/api/ShareDividendApiResource.java",
    "mechanism": "REST",
    "name": "Update Dividend",
    "description": "Updates (approves) a dividend payout.",
    "path": "/v1/shareproduct/{productId}/dividend/{dividendId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON payload for the update"
  },
  {
    "namespace": "org.apache.fineract.portfolio.shareproducts.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/api/ShareDividendApiResource.java",
    "mechanism": "REST",
    "name": "Delete Dividend",
    "description": "Deletes a dividend payout.",
    "path": "/v1/shareproduct/{productId}/dividend/{dividendId}",
    "method": "DELETE",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.shareproducts.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/handler/DeleteShareProductDividendCommandHandler.java",
    "mechanism": "OTHER",
    "name": "Command Handler",
    "description": "Registers as a handler for the Fineract Command Processing infrastructure.",
    "path": "SHAREPRODUCT / DELETE_DIVIDEND",
    "method": "n/a",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.tax.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/api/TaxGroupApiResource.java",
    "mechanism": "REST",
    "name": "List Tax Groups",
    "description": "Retrieves a list of all tax groups.",
    "path": "/v1/taxes/group",
    "method": "GET",
    "responseBody": "JSON array of TaxGroupData",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.tax.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/api/TaxGroupApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Tax Group",
    "description": "Retrieves a specific tax group by ID.",
    "path": "/v1/taxes/group/{taxGroupId}",
    "method": "GET",
    "responseBody": "JSON object of TaxGroupData",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.tax.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/api/TaxGroupApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Tax Group Template",
    "description": "Retrieves a template for creating a tax group.",
    "path": "/v1/taxes/group/template",
    "method": "GET",
    "responseBody": "JSON object of TaxGroupData (Template)",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.tax.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/api/TaxGroupApiResource.java",
    "mechanism": "REST",
    "name": "Create Tax Group",
    "description": "Creates a new tax group.",
    "path": "/v1/taxes/group",
    "method": "POST",
    "requestBody": "JSON object defining the tax group",
    "responseBody": "JSON object with command processing result",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.tax.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/api/TaxGroupApiResource.java",
    "mechanism": "REST",
    "name": "Update Tax Group",
    "description": "Updates an existing tax group.",
    "path": "/v1/taxes/group/{taxGroupId}",
    "method": "PUT",
    "requestBody": "JSON object with fields to update",
    "responseBody": "JSON object with command processing result",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.portfolio.tax.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/api/TaxComponentApiResourceSwagger.java",
    "mechanism": "REST",
    "name": "Tax Component API Schemas",
    "description": "Defines the request and response body schemas for Tax Component REST API operations, used by Swagger to generate API documentation.",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.portfolio.tax.api.TaxComponentApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/api/TaxComponentApiResource.java",
    "mechanism": "REST",
    "name": "List Tax Components",
    "description": "Endpoint to retrieve all tax components.",
    "path": "/v1/taxes/component",
    "method": "GET",
    "responseBody": "JSON array of TaxComponentData"
  },
  {
    "namespace": "org.apache.fineract.portfolio.tax.api.TaxComponentApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/api/TaxComponentApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Tax Component",
    "description": "Endpoint to retrieve a single tax component by ID.",
    "path": "/v1/taxes/component/{taxComponentId}",
    "method": "GET",
    "responseBody": "JSON object of TaxComponentData"
  },
  {
    "namespace": "org.apache.fineract.portfolio.tax.api.TaxComponentApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/api/TaxComponentApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Template",
    "description": "Endpoint to retrieve a tax component template.",
    "path": "/v1/taxes/component/template",
    "method": "GET",
    "responseBody": "JSON object of TaxComponentData"
  },
  {
    "namespace": "org.apache.fineract.portfolio.tax.api.TaxComponentApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/api/TaxComponentApiResource.java",
    "mechanism": "REST",
    "name": "Create Tax Component",
    "description": "Endpoint to create a new tax component.",
    "path": "/v1/taxes/component",
    "method": "POST",
    "requestBody": "JSON object defining the tax component",
    "responseBody": "JSON object of CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.portfolio.tax.api.TaxComponentApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/api/TaxComponentApiResource.java",
    "mechanism": "REST",
    "name": "Update Tax Component",
    "description": "Endpoint to update an existing tax component.",
    "path": "/v1/taxes/component/{taxComponentId}",
    "method": "PUT",
    "requestBody": "JSON object with updated fields",
    "responseBody": "JSON object of CommandProcessingResult"
  },
  {
    "namespace": "org.apache.fineract.portfolio.transfer.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/ProposeAndAcceptClientTransferCommandHandler.java",
    "mechanism": "OTHER",
    "name": "CommandType: CLIENT - PROPOSEANDACCEPTTRANSFER",
    "description": "Registers a handler for the PROPOSEANDACCEPTTRANSFER action on the CLIENT entity within the Fineract command framework.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.portfolio.transfer.handler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/handler/RejectClientTransferCommandHandler.java",
    "mechanism": "OTHER",
    "name": "REJECTTRANSFER",
    "description": "Fineract Command Handler for the 'REJECTTRANSFER' action on the 'CLIENT' entity. This is part of the internal command processing pipeline, likely triggered via a generic REST command endpoint.",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.spm.api.LookupTableApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/spm/api/LookupTableApiResource.java",
    "mechanism": "REST",
    "name": "fetchLookupTables",
    "description": "List all Lookup Table entries for a survey",
    "path": "/v1/surveys/{surveyId}/lookuptables",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "List<LookupTableData> (JSON)",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.spm.api.LookupTableApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/spm/api/LookupTableApiResource.java",
    "mechanism": "REST",
    "name": "findLookupTable",
    "description": "Retrieve a Lookup Table entry by key",
    "path": "/v1/surveys/{surveyId}/lookuptables/{key}",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "LookupTableData (JSON)",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.spm.api.LookupTableApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/spm/api/LookupTableApiResource.java",
    "mechanism": "REST",
    "name": "createLookupTable",
    "description": "Create a Lookup Table entry",
    "path": "/v1/surveys/{surveyId}/lookuptables",
    "method": "POST",
    "requestBody": "LookupTableData (JSON)",
    "responseBody": "None",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.spm.api.ScorecardApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/spm/api/ScorecardApiResource.java",
    "mechanism": "REST",
    "name": "List Scorecards by Survey",
    "description": "Endpoint to retrieve all scorecards for a given survey ID.",
    "path": "/v1/surveys/scorecards/{surveyId}",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "List<ScorecardData> (JSON)",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.spm.api.ScorecardApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/spm/api/ScorecardApiResource.java",
    "mechanism": "REST",
    "name": "Create Scorecard",
    "description": "Endpoint to create a new scorecard entry.",
    "path": "/v1/surveys/scorecards/{surveyId}",
    "method": "POST",
    "requestBody": "ScorecardData (JSON)",
    "responseBody": "None (200 OK)",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.spm.api.ScorecardApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/spm/api/ScorecardApiResource.java",
    "mechanism": "REST",
    "name": "List Scorecards by Survey and Client",
    "description": "Endpoint to retrieve scorecards for a specific survey and client.",
    "path": "/v1/surveys/scorecards/{surveyId}/clients/{clientId}",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "List<ScorecardData> (JSON)",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.spm.api.ScorecardApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/spm/api/ScorecardApiResource.java",
    "mechanism": "REST",
    "name": "List Scorecards by Client",
    "description": "Endpoint to retrieve all scorecards for a specific client.",
    "path": "/v1/surveys/scorecards/clients/{clientId}",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "List<ScorecardData> (JSON)",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.spm.api.SpmApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/spm/api/SpmApiResource.java",
    "mechanism": "REST",
    "name": "List all Surveys",
    "description": "Endpoint to retrieve a list of surveys, optionally filtering for active ones.",
    "path": "/v1/surveys",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "List<SurveyData> (JSON)",
    "authentication": "PlatformSecurityContext"
  },
  {
    "namespace": "org.apache.fineract.spm.api.SpmApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/spm/api/SpmApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve a Survey",
    "description": "Endpoint to retrieve a specific survey by ID.",
    "path": "/v1/surveys/{id}",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "SurveyData (JSON)",
    "authentication": "PlatformSecurityContext"
  },
  {
    "namespace": "org.apache.fineract.spm.api.SpmApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/spm/api/SpmApiResource.java",
    "mechanism": "REST",
    "name": "Create a Survey",
    "description": "Endpoint to create a new survey.",
    "path": "/v1/surveys",
    "method": "POST",
    "requestBody": "SurveyData (JSON)",
    "responseBody": "{\"resourceId\": <id>} (JSON)",
    "authentication": "PlatformSecurityContext"
  },
  {
    "namespace": "org.apache.fineract.spm.api.SpmApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/spm/api/SpmApiResource.java",
    "mechanism": "REST",
    "name": "Edit Survey",
    "description": "Endpoint to update an existing survey.",
    "path": "/v1/surveys/{id}",
    "method": "PUT",
    "requestBody": "SurveyData (JSON)",
    "responseBody": "{\"resourceId\": <id>} (JSON)",
    "authentication": "PlatformSecurityContext"
  },
  {
    "namespace": "org.apache.fineract.spm.api.SpmApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/spm/api/SpmApiResource.java",
    "mechanism": "REST",
    "name": "Activate/Deactivate Survey",
    "description": "Endpoint to change the status of a survey via a command query parameter.",
    "path": "/v1/surveys/{id}",
    "method": "POST",
    "requestBody": "None",
    "responseBody": "None",
    "authentication": "PlatformSecurityContext"
  },
  {
    "namespace": "org.apache.fineract.template.api.TemplatesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/template/api/TemplatesApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve All Templates",
    "description": "Get a list of all templates or filter by type and entity.",
    "path": "/v1/templates",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.template.api.TemplatesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/template/api/TemplatesApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Template Details",
    "description": "Get template metadata/structure.",
    "path": "/v1/templates/template",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.template.api.TemplatesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/template/api/TemplatesApiResource.java",
    "mechanism": "REST",
    "name": "Create Template",
    "description": "Create a new template.",
    "path": "/v1/templates",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON representation of the template"
  },
  {
    "namespace": "org.apache.fineract.template.api.TemplatesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/template/api/TemplatesApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve One Template",
    "description": "Get a specific template by ID.",
    "path": "/v1/templates/{templateId}",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.template.api.TemplatesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/template/api/TemplatesApiResource.java",
    "mechanism": "REST",
    "name": "Get Template By Template",
    "description": "Get template data for a specific ID.",
    "path": "/v1/templates/{templateId}/template",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.template.api.TemplatesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/template/api/TemplatesApiResource.java",
    "mechanism": "REST",
    "name": "Update Template",
    "description": "Update an existing template.",
    "path": "/v1/templates/{templateId}",
    "method": "PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON representation of the template updates"
  },
  {
    "namespace": "org.apache.fineract.template.api.TemplatesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/template/api/TemplatesApiResource.java",
    "mechanism": "REST",
    "name": "Delete Template",
    "description": "Delete a template.",
    "path": "/v1/templates/{templateId}",
    "method": "DELETE",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.template.api.TemplatesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/template/api/TemplatesApiResource.java",
    "mechanism": "REST",
    "name": "Merge Template",
    "description": "Merge a template with data to produce a document.",
    "path": "/v1/templates/{templateId}",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON data map for merging",
    "responseBody": "HTML or text content"
  },
  {
    "namespace": "org.apache.fineract.template.handler.UpdateTemplateCommandHandler",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/template/handler/UpdateTemplateCommandHandler.java",
    "mechanism": "OTHER",
    "name": "TEMPLATE UPDATE Command Handler",
    "description": "Registers as a handler for UPDATE actions on TEMPLATE entities via the Fineract Command processing infrastructure.",
    "direction": "CONSUMER",
    "protocol": "Internal Java Interface / Spring Bean",
    "connectionInfo": "Annotation: @CommandType(entity = \"TEMPLATE\", action = \"UPDATE\")"
  },
  {
    "namespace": "org.apache.fineract.template.service",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/template/service/TemplateMergeService.java",
    "mechanism": "REST",
    "name": "Template Data Mappers",
    "description": "Fetches JSON data from dynamic URLs defined in the template configuration to populate the template context.",
    "path": "Dynamic (defined in template mappers)",
    "method": "GET",
    "direction": "CONSUMER",
    "authentication": "Basic Auth (using application token or SecurityContext credentials)",
    "protocol": "HTTP/1.1",
    "connectionInfo": "Dynamic URLs resolved at runtime"
  },
  {
    "namespace": "org.apache.fineract.twofactortests.TwoFactorAuthenticationTest",
    "filepath": "twofactor-tests/src/test/java/org/apache/fineract/twofactortests/TwoFactorAuthenticationTest.java",
    "mechanism": "REST",
    "name": "Authentication API",
    "description": "Endpoint for user login and authentication.",
    "path": "/fineract-provider/api/v1/authentication",
    "method": "POST",
    "direction": "CONSUMER",
    "requestBody": "JSON with username and password",
    "responseBody": "JSON with authentication key and 2FA status"
  },
  {
    "namespace": "org.apache.fineract.twofactortests.TwoFactorAuthenticationTest",
    "filepath": "twofactor-tests/src/test/java/org/apache/fineract/twofactortests/TwoFactorAuthenticationTest.java",
    "mechanism": "REST",
    "name": "Two-Factor API",
    "description": "Endpoints for managing 2FA: requesting tokens, validating tokens, and configuration.",
    "path": "/fineract-provider/api/v1/twofactor",
    "method": "GET, POST, PUT",
    "direction": "CONSUMER",
    "requestBody": "JSON for validation or configuration",
    "responseBody": "JSON with tokens or configuration details"
  },
  {
    "namespace": "org.apache.fineract.twofactortests.TwoFactorAuthenticationTest",
    "filepath": "twofactor-tests/src/test/java/org/apache/fineract/twofactortests/TwoFactorAuthenticationTest.java",
    "mechanism": "REST",
    "name": "Actuator Health",
    "description": "Spring Boot Actuator health check endpoint.",
    "path": "/fineract-provider/actuator/health",
    "method": "GET",
    "direction": "CONSUMER"
  },
  {
    "namespace": "org.apache.fineract.twofactortests.TwoFactorAuthenticationTest",
    "filepath": "twofactor-tests/src/test/java/org/apache/fineract/twofactortests/TwoFactorAuthenticationTest.java",
    "mechanism": "OTHER",
    "name": "SMTP Mock",
    "description": "Interacts with a mocked SMTP server (GreenMail) to intercept emails sent by the application.",
    "direction": "CONSUMER",
    "protocol": "SMTP"
  },
  {
    "namespace": "org.apache.fineract.useradministration.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve All Users",
    "description": "Endpoint to retrieve a list of all users.",
    "path": "/v1/users",
    "method": "GET",
    "responseBody": "Array of AppUserData JSON"
  },
  {
    "namespace": "org.apache.fineract.useradministration.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve One User",
    "description": "Endpoint to retrieve a single user by ID.",
    "path": "/v1/users/{userId}",
    "method": "GET",
    "responseBody": "AppUserData JSON"
  },
  {
    "namespace": "org.apache.fineract.useradministration.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve User Template",
    "description": "Endpoint to retrieve a user creation template.",
    "path": "/v1/users/template",
    "method": "GET",
    "responseBody": "AppUserData JSON (Template)"
  },
  {
    "namespace": "org.apache.fineract.useradministration.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResource.java",
    "mechanism": "REST",
    "name": "Create User",
    "description": "Endpoint to create a new user.",
    "path": "/v1/users",
    "method": "POST",
    "requestBody": "User creation JSON",
    "responseBody": "CommandProcessingResult JSON"
  },
  {
    "namespace": "org.apache.fineract.useradministration.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResource.java",
    "mechanism": "REST",
    "name": "Update User",
    "description": "Endpoint to update an existing user.",
    "path": "/v1/users/{userId}",
    "method": "PUT",
    "requestBody": "User update JSON",
    "responseBody": "CommandProcessingResult JSON"
  },
  {
    "namespace": "org.apache.fineract.useradministration.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResource.java",
    "mechanism": "REST",
    "name": "Delete User",
    "description": "Endpoint to delete a user.",
    "path": "/v1/users/{userId}",
    "method": "DELETE",
    "responseBody": "CommandProcessingResult JSON"
  },
  {
    "namespace": "org.apache.fineract.useradministration.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResource.java",
    "mechanism": "REST",
    "name": "Download Template",
    "description": "Endpoint to download Excel template for bulk import.",
    "path": "/v1/users/downloadtemplate",
    "method": "GET",
    "responseBody": "application/vnd.ms-excel"
  },
  {
    "namespace": "org.apache.fineract.useradministration.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/useradministration/api/UsersApiResource.java",
    "mechanism": "REST",
    "name": "Upload Template",
    "description": "Endpoint to upload Excel template for bulk import.",
    "path": "/v1/users/uploadtemplate",
    "method": "POST",
    "requestBody": "multipart/form-data",
    "responseBody": "Import Document ID JSON"
  },
  {
    "namespace": "org.apache.fineract.useradministration.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PermissionsApiResource.java",
    "mechanism": "REST",
    "name": "Permissions API",
    "description": "API endpoint for managing application permissions.",
    "path": "/v1/permissions",
    "method": "GET",
    "responseBody": "JSON array of PermissionData",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.useradministration.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PermissionsApiResource.java",
    "mechanism": "REST",
    "name": "Update Permissions API",
    "description": "API endpoint for updating permission settings (Maker-Checker).",
    "path": "/v1/permissions",
    "method": "PUT",
    "requestBody": "JSON object defining permission updates",
    "responseBody": "CommandProcessingResult JSON",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.useradministration.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PasswordPreferencesApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Password Preferences",
    "description": "Endpoint to retrieve the active password validation policy.",
    "path": "/v1/passwordpreferences",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON representation of PasswordValidationPolicyData",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.useradministration.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PasswordPreferencesApiResource.java",
    "mechanism": "REST",
    "name": "Update Password Preferences",
    "description": "Endpoint to update the password validation policy.",
    "path": "/v1/passwordpreferences",
    "method": "PUT",
    "requestBody": "JSON payload for PutPasswordPreferencesTemplateRequest",
    "responseBody": "JSON representation of CommandProcessingResult",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.useradministration.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/useradministration/api/PasswordPreferencesApiResource.java",
    "mechanism": "REST",
    "name": "Retrieve Password Preferences Template",
    "description": "Endpoint to list all available password validation policies.",
    "path": "/v1/passwordpreferences/template",
    "method": "GET",
    "requestBody": "None",
    "responseBody": "JSON array of PasswordValidationPolicyData",
    "authentication": "PlatformSecurityContext (Internal)",
    "protocol": "HTTP/1.1"
  },
  {
    "namespace": "org.apache.fineract.useradministration.api",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/useradministration/api/RolesApiResourceSwagger.java",
    "mechanism": "REST",
    "name": "Roles API Schemas",
    "description": "Defines the Swagger/OpenAPI schemas (Request and Response bodies) for the Roles management REST API. These schemas model the data structures for creating, retrieving, updating, and deleting roles and their permissions.",
    "path": "/roles (inferred)",
    "method": "GET, POST, PUT, DELETE",
    "direction": "BOTH"
  },
  {
    "namespace": "org.apache.fineract.useradministration.api.RolesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/useradministration/api/RolesApiResource.java",
    "mechanism": "REST",
    "name": "retrieveAllRoles",
    "description": "List all roles",
    "path": "/v1/roles",
    "method": "GET",
    "responseBody": "JSON array of RoleData"
  },
  {
    "namespace": "org.apache.fineract.useradministration.api.RolesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/useradministration/api/RolesApiResource.java",
    "mechanism": "REST",
    "name": "createRole",
    "description": "Create a new role",
    "path": "/v1/roles",
    "method": "POST",
    "requestBody": "JSON object with name and description",
    "responseBody": "JSON object with resourceId"
  },
  {
    "namespace": "org.apache.fineract.useradministration.api.RolesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/useradministration/api/RolesApiResource.java",
    "mechanism": "REST",
    "name": "retrieveRole",
    "description": "Retrieve a specific role",
    "path": "/v1/roles/{roleId}",
    "method": "GET",
    "responseBody": "JSON object of RoleData"
  },
  {
    "namespace": "org.apache.fineract.useradministration.api.RolesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/useradministration/api/RolesApiResource.java",
    "mechanism": "REST",
    "name": "actionsOnRoles",
    "description": "Enable or Disable a role",
    "path": "/v1/roles/{roleId}",
    "method": "POST",
    "requestBody": "Empty or JSON",
    "responseBody": "JSON object with resourceId"
  },
  {
    "namespace": "org.apache.fineract.useradministration.api.RolesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/useradministration/api/RolesApiResource.java",
    "mechanism": "REST",
    "name": "updateRole",
    "description": "Update a role",
    "path": "/v1/roles/{roleId}",
    "method": "PUT",
    "requestBody": "JSON object with updates",
    "responseBody": "JSON object with resourceId"
  },
  {
    "namespace": "org.apache.fineract.useradministration.api.RolesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/useradministration/api/RolesApiResource.java",
    "mechanism": "REST",
    "name": "retrieveRolePermissions",
    "description": "Retrieve permissions for a role",
    "path": "/v1/roles/{roleId}/permissions",
    "method": "GET",
    "responseBody": "JSON object of RolePermissionsData"
  },
  {
    "namespace": "org.apache.fineract.useradministration.api.RolesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/useradministration/api/RolesApiResource.java",
    "mechanism": "REST",
    "name": "updateRolePermissions",
    "description": "Update permissions for a role",
    "path": "/v1/roles/{roleId}/permissions",
    "method": "PUT",
    "requestBody": "JSON object with permissions",
    "responseBody": "JSON object with resourceId"
  },
  {
    "namespace": "org.apache.fineract.useradministration.api.RolesApiResource",
    "filepath": "fineract-provider/src/main/java/org/apache/fineract/useradministration/api/RolesApiResource.java",
    "mechanism": "REST",
    "name": "deleteRole",
    "description": "Delete a role",
    "path": "/v1/roles/{roleId}",
    "method": "DELETE",
    "responseBody": "JSON object with resourceId"
  },
  {
    "namespace": "window",
    "filepath": "fineract-provider/src/main/resources/static/legacy-docs/jquery-1.7.min.js",
    "mechanism": "REST",
    "name": "jQuery.ajax",
    "description": "Performs asynchronous HTTP requests to fetch or send data to a server.",
    "path": "Dynamic (determined by url parameter)",
    "method": "Dynamic (GET, POST, PUT, DELETE)",
    "direction": "BIDIRECTIONAL",
    "protocol": "HTTP/1.1"
  }
]