{
  "info": {
    "_postman_id": "6d2d4578-f900-4a3b-a89e-9e040bb7d83e",
    "name": "LendEasy Public API v1",
    "description": "Generated from the LendEasy OpenAPI 3.1 target contract. Includes the Servicing Plane and optional Lending Core.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{token}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://sandbox.api.lendeasy.ai"
    },
    {
      "key": "authUrl",
      "value": "https://auth.lendeasy.ai/oauth2/token"
    },
    {
      "key": "clientId",
      "value": ""
    },
    {
      "key": "clientSecret",
      "value": ""
    },
    {
      "key": "token",
      "value": ""
    },
    {
      "key": "caseId",
      "value": "case_HBR_COL_51"
    },
    {
      "key": "queueId",
      "value": "queue_EARLY_STAGE"
    },
    {
      "key": "taskId",
      "value": "task_HBR_118"
    },
    {
      "key": "interactionId",
      "value": "int_HBR_EMAIL_92"
    },
    {
      "key": "decisionId",
      "value": "dec_HBR_7301"
    },
    {
      "key": "promiseId",
      "value": "ptp_HBR_19"
    },
    {
      "key": "actionRequestId",
      "value": "ar_HBR_84"
    },
    {
      "key": "documentId",
      "value": "1204"
    },
    {
      "key": "verificationSessionId",
      "value": "vs_HBR_42"
    },
    {
      "key": "aiSessionId",
      "value": "ais_HBR_22"
    },
    {
      "key": "outputId",
      "value": "aio_HBR_17"
    },
    {
      "key": "privacyRequestId",
      "value": "pr_HBR_08"
    },
    {
      "key": "webhookSubscriptionId",
      "value": "whsub_72P0"
    },
    {
      "key": "bindingId",
      "value": "bind_BYOC_HBR_1"
    },
    {
      "key": "actionId",
      "value": "act_BYOC_HBR_51"
    },
    {
      "key": "customerId",
      "value": "412"
    },
    {
      "key": "historyId",
      "value": "h_01JZ7M5K9Y"
    },
    {
      "key": "addressId",
      "value": "311"
    },
    {
      "key": "contactPointId",
      "value": "512"
    },
    {
      "key": "identifierId",
      "value": "66"
    },
    {
      "key": "consentId",
      "value": "71"
    },
    {
      "key": "instrumentId",
      "value": "704"
    },
    {
      "key": "partyId",
      "value": "88"
    },
    {
      "key": "loanId",
      "value": "7204"
    },
    {
      "key": "restrictionId",
      "value": "41"
    },
    {
      "key": "paymentId",
      "value": "9011"
    },
    {
      "key": "rail",
      "value": "ACH"
    },
    {
      "key": "fundingId",
      "value": "5107"
    },
    {
      "key": "exceptionId",
      "value": "3301"
    },
    {
      "key": "linkId",
      "value": "61"
    },
    {
      "key": "noteId",
      "value": "802"
    },
    {
      "key": "formKey",
      "value": "consumer_income"
    },
    {
      "key": "entryId",
      "value": "5501"
    },
    {
      "key": "statementId",
      "value": "7719"
    },
    {
      "key": "chargeId",
      "value": "21"
    },
    {
      "key": "productId",
      "value": "3"
    },
    {
      "key": "transactionId",
      "value": "30411"
    },
    {
      "key": "variationId",
      "value": "12"
    },
    {
      "key": "scheduleId",
      "value": "5"
    },
    {
      "key": "auditId",
      "value": "118"
    },
    {
      "key": "loanChargeId",
      "value": "44"
    },
    {
      "key": "id",
      "value": "14"
    },
    {
      "key": "advanceId",
      "value": "ma_northstar_6N8Q"
    }
  ],
  "item": [
    {
      "name": "Authentication",
      "item": [
        {
          "name": "Exchange client credentials",
          "request": {
            "auth": {
              "type": "basic",
              "basic": [
                {
                  "key": "username",
                  "value": "{{clientId}}",
                  "type": "string"
                },
                {
                  "key": "password",
                  "value": "{{clientSecret}}",
                  "type": "string"
                }
              ]
            },
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/x-www-form-urlencoded"
              }
            ],
            "body": {
              "mode": "urlencoded",
              "urlencoded": [
                {
                  "key": "grant_type",
                  "value": "client_credentials"
                },
                {
                  "key": "scope",
                  "value": "lending:read lending:write servicing:read servicing:write"
                }
              ]
            },
            "url": "{{authUrl}}"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Cases",
      "description": "Durable borrower and merchant matters, workflow state, timelines, escalation, and closure.",
      "item": [
        {
          "name": "List cases",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/cases",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "cases"
              ]
            },
            "description": "Returns permission-filtered cases with cursor pagination and stable sort.\n\nRequired permission: READ_CASE."
          },
          "response": []
        },
        {
          "name": "Create a case",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/cases",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "cases"
              ]
            },
            "description": "Creates or deduplicates a durable servicing matter and resolves its workflow version, queue, service levels, and first tasks.\n\nRequired permission: CREATE_CASE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"caseType\": \"collections\",\n  \"customerId\": \"cus_72P0MAYA\",\n  \"loanIds\": [\n    \"loan_harbor_7X2K\"\n  ],\n  \"source\": \"delinquency_monitor\",\n  \"sourceReference\": \"signal_2027-05-01_HBR\",\n  \"reasonCode\": \"installment_past_due\",\n  \"priority\": \"high\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve a case",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/cases/{{caseId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "cases",
                "{{caseId}}"
              ]
            },
            "description": "Returns current case state, workflow stage, context freshness, deadlines, links, and next allowed transitions.\n\nRequired permission: READ_CASE."
          },
          "response": []
        },
        {
          "name": "Update case routing fields",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/cases/{{caseId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "cases",
                "{{caseId}}"
              ]
            },
            "description": "Updates mutable routing fields under optimistic concurrency; workflow state changes use the transition endpoint.\n\nRequired permission: UPDATE_CASE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"priority\": \"urgent\",\n  \"queueId\": \"queue_supervisor_collections\",\n  \"expectedVersion\": 6\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Transition a case",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/cases/{{caseId}}/transitions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "cases",
                "{{caseId}}",
                "transitions"
              ]
            },
            "description": "Applies one workflow-permitted transition after checking stage exit criteria.\n\nRequired permission: TRANSITION_CASE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"transition\": \"wait_for_borrower\",\n  \"reasonCode\": \"documents_requested\",\n  \"wakeAt\": \"2027-05-05T09:00:00-07:00\",\n  \"expectedVersion\": 6\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Close a case",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/cases/{{caseId}}/close",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "cases",
                "{{caseId}}",
                "close"
              ]
            },
            "description": "Finalizes an already-resolved case with a structured outcome and closure reason.\n\nRequired permission: CLOSE_CASE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"outcome\": \"promise_kept\",\n  \"closureReason\": \"authoritative_payment_confirmed\",\n  \"expectedVersion\": 11\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Escalate a case",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/cases/{{caseId}}/escalate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "cases",
                "{{caseId}}",
                "escalate"
              ]
            },
            "description": "Moves a case to its configured escalation route with urgency, reason, and service-level impact.\n\nRequired permission: ESCALATE_CASE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reasonCode\": \"vulnerable_customer\",\n  \"destination\": \"supervisor_review\",\n  \"note\": \"Borrower requested specialist support.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "List case timeline",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/cases/{{caseId}}/timeline",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "cases",
                "{{caseId}}",
                "timeline"
              ]
            },
            "description": "Returns a cursor-paginated, permission-aware timeline of state, task, interaction, decision, action, and evidence events.\n\nRequired permission: READ_CASE."
          },
          "response": []
        },
        {
          "name": "Export case evidence",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/cases/{{caseId}}/evidence-export",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "cases",
                "{{caseId}}",
                "evidence-export"
              ]
            },
            "description": "Creates a tamper-evident, access-filtered evidence package for the case.\n\nRequired permission: EXPORT_CASE_EVIDENCE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"format\": \"zip_json_pdf\",\n  \"includeInteractions\": true,\n  \"includeRestrictedEvidence\": false\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Tasks",
      "description": "Queue work, reservation, assignment, execution, and completion.",
      "item": [
        {
          "name": "List tasks",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/tasks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "tasks"
              ]
            },
            "description": "Lists tasks visible to the caller by queue, state, case, skill, and due time.\n\nRequired permission: READ_TASK."
          },
          "response": []
        },
        {
          "name": "Reserve the next task",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/queues/{{queueId}}/tasks/reserve-next",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "queues",
                "{{queueId}}",
                "tasks",
                "reserve-next"
              ]
            },
            "description": "Atomically selects and temporarily reserves the highest-ranked eligible task for the worker.\n\nRequired permission: RESERVE_TASK.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"workerId\": \"worker_ANA_4\",\n  \"skills\": [\n    \"collections\",\n    \"english\"\n  ],\n  \"reservationSeconds\": 120\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Accept a task",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/tasks/{{taskId}}/accept",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "tasks",
                "{{taskId}}",
                "accept"
              ]
            },
            "description": "Accept a task through the task state machine and records the actor, reason, and timestamp.\n\nRequired permission: UPDATE_TASK.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"workerId\": \"worker_ANA_4\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Start a task",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/tasks/{{taskId}}/start",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "tasks",
                "{{taskId}}",
                "start"
              ]
            },
            "description": "Start a task through the task state machine and records the actor, reason, and timestamp.\n\nRequired permission: UPDATE_TASK.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"workerId\": \"worker_ANA_4\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Complete a task",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/tasks/{{taskId}}/complete",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "tasks",
                "{{taskId}}",
                "complete"
              ]
            },
            "description": "Complete a task through the task state machine and records the actor, reason, and timestamp.\n\nRequired permission: UPDATE_TASK.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"outcome\": \"borrower_reached\",\n  \"note\": \"Promise terms captured.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Release a task",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/tasks/{{taskId}}/release",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "tasks",
                "{{taskId}}",
                "release"
              ]
            },
            "description": "Release a task through the task state machine and records the actor, reason, and timestamp.\n\nRequired permission: UPDATE_TASK.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reasonCode\": \"reservation_released\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Cancel a task",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/tasks/{{taskId}}/cancel",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "tasks",
                "{{taskId}}",
                "cancel"
              ]
            },
            "description": "Cancel a task through the task state machine and records the actor, reason, and timestamp.\n\nRequired permission: UPDATE_TASK.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reasonCode\": \"case_resolved\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Reassign a task",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/tasks/{{taskId}}/reassign",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "tasks",
                "{{taskId}}",
                "reassign"
              ]
            },
            "description": "Reassigns a task to an eligible queue or worker with a recorded reason.\n\nRequired permission: REASSIGN_TASK.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"queueId\": \"queue_vulnerable_customer\",\n  \"workerId\": null,\n  \"reasonCode\": \"specialist_skill_required\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Interactions",
      "description": "Inbound and outbound communications across voice, email, SMS, secure message, and mail.",
      "item": [
        {
          "name": "List interactions",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/interactions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "interactions"
              ]
            },
            "description": "Lists permission-filtered interactions by case, customer, channel, direction, and time.\n\nRequired permission: READ_INTERACTION."
          },
          "response": []
        },
        {
          "name": "Create an interaction",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/interactions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "interactions"
              ]
            },
            "description": "Creates, schedules, or executes an inbound/outbound interaction and rechecks channel eligibility at execution.\n\nRequired permission: CREATE_INTERACTION.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"caseId\": \"case_HBR_COL_51\",\n  \"direction\": \"outbound\",\n  \"channel\": \"voice\",\n  \"purpose\": \"collections\",\n  \"contactPointId\": \"cp_MAYA_MOBILE_1\",\n  \"content\": {\n    \"scriptVersion\": \"collections-opening-v5\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve an interaction",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/interactions/{{interactionId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "interactions",
                "{{interactionId}}"
              ]
            },
            "description": "Returns normalized delivery, outcome, compliance, content, provider, and evidence links.\n\nRequired permission: READ_INTERACTION."
          },
          "response": []
        },
        {
          "name": "Cancel a scheduled interaction",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/interactions/{{interactionId}}/cancel",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "interactions",
                "{{interactionId}}",
                "cancel"
              ]
            },
            "description": "Cancels an interaction before provider execution and preserves its schedule and reason.\n\nRequired permission: CANCEL_INTERACTION.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reasonCode\": \"case_resolved\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Reply in an interaction thread",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/interactions/{{interactionId}}/replies",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "interactions",
                "{{interactionId}}",
                "replies"
              ]
            },
            "description": "Creates an outbound reply linked to the original thread with a fresh compliance decision.\n\nRequired permission: CREATE_INTERACTION.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"channel\": \"email\",\n  \"purpose\": \"document_follow_up\",\n  \"content\": {\n    \"templateId\": \"tpl_DOC_FOLLOWUP\",\n    \"variables\": {\n      \"secureUploadExpiresOn\": \"2027-05-08\"\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Compliance decisions",
      "description": "Execution-time, explainable policy decisions grounded in fresh facts.",
      "item": [
        {
          "name": "Evaluate an action",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/compliance/evaluations",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "compliance",
                "evaluations"
              ]
            },
            "description": "Evaluates a proposed action against current facts and effective policies without executing it.\n\nRequired permission: EVALUATE_COMPLIANCE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"action\": \"send_interaction\",\n  \"subject\": {\n    \"customerId\": \"cus_72P0MAYA\",\n    \"loanIds\": [\n      \"loan_harbor_7X2K\"\n    ]\n  },\n  \"parameters\": {\n    \"channel\": \"voice\",\n    \"purpose\": \"collections\",\n    \"contactPointId\": \"cp_MAYA_MOBILE_1\"\n  },\n  \"asOf\": \"2027-05-01T10:11:58-07:00\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Evaluate contact eligibility",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/compliance/contact-eligibility",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "compliance",
                "contact-eligibility"
              ]
            },
            "description": "Returns channel-specific contact eligibility, restrictions, convenient time, and remaining configured contact budget.\n\nRequired permission: EVALUATE_COMPLIANCE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"caseId\": \"case_HBR_COL_51\",\n  \"customerId\": \"cus_72P0MAYA\",\n  \"loanId\": \"loan_harbor_7X2K\",\n  \"channel\": \"voice\",\n  \"purpose\": \"collections\",\n  \"contactPointId\": \"cp_MAYA_MOBILE_1\",\n  \"requestedAt\": \"2027-05-01T10:11:58-07:00\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Explain a compliance decision",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/compliance/decisions/{{decisionId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "compliance",
                "decisions",
                "{{decisionId}}"
              ]
            },
            "description": "Returns the immutable rule trace, facts, provenance, policy versions, warnings, and expiry for one decision.\n\nRequired permission: READ_COMPLIANCE_DECISION."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Promises",
      "description": "Borrower payment commitments, approval, revision, suppression, and evaluation.",
      "item": [
        {
          "name": "List case promises",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/cases/{{caseId}}/promises",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "cases",
                "{{caseId}}",
                "promises"
              ]
            },
            "description": "Lists current and historical promises linked to a case.\n\nRequired permission: READ_PROMISE."
          },
          "response": []
        },
        {
          "name": "Create a promise-to-pay",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/cases/{{caseId}}/promises",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "cases",
                "{{caseId}}",
                "promises"
              ]
            },
            "description": "Creates a structured payment commitment and returns its guardrail and approval outcome.\n\nRequired permission: CREATE_PROMISE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"loanId\": \"loan_harbor_7X2K\",\n  \"commitments\": [\n    {\n      \"amount\": \"260.00\",\n      \"dueDate\": \"2027-05-08\"\n    },\n    {\n      \"amount\": \"257.14\",\n      \"dueDate\": \"2027-05-22\"\n    }\n  ],\n  \"sourceInteractionId\": \"int_HBR_CALL_91\",\n  \"borrowerConfirmedAt\": \"2027-05-01T10:18:42-07:00\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve a promise",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/promises/{{promiseId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "promises",
                "{{promiseId}}"
              ]
            },
            "description": "Returns terms, versions, guardrail trace, evaluation, covering payments, and outreach suppression.\n\nRequired permission: READ_PROMISE."
          },
          "response": []
        },
        {
          "name": "Revise a promise",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/promises/{{promiseId}}/revisions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "promises",
                "{{promiseId}}",
                "revisions"
              ]
            },
            "description": "Creates a superseding promise version and reruns guardrails without rewriting the original commitment.\n\nRequired permission: CREATE_PROMISE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"commitments\": [\n    {\n      \"amount\": \"517.14\",\n      \"dueDate\": \"2027-05-22\"\n    }\n  ],\n  \"reasonCode\": \"borrower_requested_single_payment\",\n  \"expectedVersion\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Cancel a promise",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/promises/{{promiseId}}/cancel",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "promises",
                "{{promiseId}}",
                "cancel"
              ]
            },
            "description": "Cancels an active promise with effective time and structured reason.\n\nRequired permission: CANCEL_PROMISE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reasonCode\": \"borrower_withdrew_commitment\",\n  \"effectiveAt\": \"2027-05-03T11:20:00-07:00\",\n  \"expectedVersion\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Re-evaluate a promise",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/promises/{{promiseId}}/evaluate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "promises",
                "{{promiseId}}",
                "evaluate"
              ]
            },
            "description": "Re-reads authoritative payment facts and evaluates current promise state idempotently.\n\nRequired permission: EVALUATE_PROMISE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"asOf\": \"2027-05-23T08:00:00-07:00\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Action requests",
      "description": "Case-linked, typed requests to change an authoritative system of record.",
      "item": [
        {
          "name": "Preview an action request",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/action-requests/preview",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "action-requests",
                "preview"
              ]
            },
            "description": "Evaluates capabilities, facts, financial/schedule effect, compliance, and approvals without preparing or executing an action.\n\nRequired permission: PREPARE_ACTION.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"caseId\": \"case_HBR_COL_51\",\n  \"loanId\": \"loan_harbor_7X2K\",\n  \"actionType\": \"take_payment\",\n  \"parameters\": {\n    \"amount\": \"517.14\",\n    \"currency\": \"USD\",\n    \"effectiveDate\": \"2027-05-08\",\n    \"paymentInstrumentId\": \"pi_HBR_ACH_04\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "List action requests",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/action-requests",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "action-requests"
              ]
            },
            "description": "Lists action requests by case, loan, type, state, and execution mode.\n\nRequired permission: READ_ACTION."
          },
          "response": []
        },
        {
          "name": "Prepare an action request",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/action-requests",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "action-requests"
              ]
            },
            "description": "Freezes a typed, case-linked action payload and its execution context.\n\nRequired permission: PREPARE_ACTION.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"caseId\": \"case_HBR_COL_51\",\n  \"loanId\": \"loan_harbor_7X2K\",\n  \"actionType\": \"take_payment\",\n  \"parameters\": {\n    \"amount\": \"517.14\",\n    \"currency\": \"USD\",\n    \"effectiveDate\": \"2027-05-08\",\n    \"paymentInstrumentId\": \"pi_HBR_ACH_04\"\n  },\n  \"previewToken\": \"prv_AR_71\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve an action request",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/action-requests/{{actionRequestId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "action-requests",
                "{{actionRequestId}}"
              ]
            },
            "description": "Returns requested and applied payloads, approvals, attempts, acknowledgements, and reconciliation.\n\nRequired permission: READ_ACTION."
          },
          "response": []
        },
        {
          "name": "Approve an action request",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/action-requests/{{actionRequestId}}/approve",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "action-requests",
                "{{actionRequestId}}",
                "approve"
              ]
            },
            "description": "Approve an action request against the frozen action hash and records a durable decision.\n\nRequired permission: APPROVE_ACTION.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"decision\": \"approve\",\n  \"note\": \"Terms and evidence reviewed.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Reject an action request",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/action-requests/{{actionRequestId}}/reject",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "action-requests",
                "{{actionRequestId}}",
                "reject"
              ]
            },
            "description": "Reject an action request against the frozen action hash and records a durable decision.\n\nRequired permission: APPROVE_ACTION.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"decision\": \"reject\",\n  \"reasonCode\": \"insufficient_evidence\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Submit an action request",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/action-requests/{{actionRequestId}}/submit",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "action-requests",
                "{{actionRequestId}}",
                "submit"
              ]
            },
            "description": "Submit an action request against the frozen action hash and records a durable decision.\n\nRequired permission: EXECUTE_ACTION.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"expectedVersion\": 2\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Cancel an action request",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/action-requests/{{actionRequestId}}/cancel",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "action-requests",
                "{{actionRequestId}}",
                "cancel"
              ]
            },
            "description": "Cancel an action request against the frozen action hash and records a durable decision.\n\nRequired permission: PREPARE_ACTION.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reasonCode\": \"borrower_changed_request\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Case documents",
      "description": "Register, classify, review, and securely retrieve case evidence.",
      "item": [
        {
          "name": "List case documents",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/cases/{{caseId}}/documents",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "cases",
                "{{caseId}}",
                "documents"
              ]
            },
            "description": "Lists document metadata allowed for the caller without exposing storage paths.\n\nRequired permission: READ_DOCUMENT."
          },
          "response": []
        },
        {
          "name": "Register a case document",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/cases/{{caseId}}/documents",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "cases",
                "{{caseId}}",
                "documents"
              ]
            },
            "description": "Registers metadata and returns a controlled upload target; bytes are scanned before availability.\n\nRequired permission: CREATE_DOCUMENT.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"income_evidence\",\n  \"fileName\": \"pay-statement-april.pdf\",\n  \"mediaType\": \"application/pdf\",\n  \"byteLength\": 184220,\n  \"sha256\": \"sha256:2d8c…188a\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve document metadata",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/documents/{{documentId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "documents",
                "{{documentId}}"
              ]
            },
            "description": "Returns classification, scan, review, retention, and evidence metadata.\n\nRequired permission: READ_DOCUMENT."
          },
          "response": []
        },
        {
          "name": "Review a document",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/documents/{{documentId}}/review",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "documents",
                "{{documentId}}",
                "review"
              ]
            },
            "description": "Records structured acceptance, rejection, classification correction, and reviewer evidence.\n\nRequired permission: REVIEW_DOCUMENT.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"decision\": \"accepted\",\n  \"classification\": \"income_evidence\",\n  \"note\": \"Name and pay period verified.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Create a document download",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/documents/{{documentId}}/download",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "documents",
                "{{documentId}}",
                "download"
              ]
            },
            "description": "Returns a short-lived, tenant-scoped URL after access evaluation.\n\nRequired permission: DOWNLOAD_DOCUMENT."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Verification",
      "description": "Identity and authority verification sessions with attempt controls.",
      "item": [
        {
          "name": "Create a verification session",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/verification-sessions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "verification-sessions"
              ]
            },
            "description": "Creates a purpose-bound verification session and returns allowed challenges without exposing answers.\n\nRequired permission: CREATE_VERIFICATION.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"customerId\": \"cus_72P0MAYA\",\n  \"caseId\": \"case_HBR_COL_51\",\n  \"purpose\": \"account_access\",\n  \"channel\": \"voice\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve a verification session",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/verification-sessions/{{verificationSessionId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "verification-sessions",
                "{{verificationSessionId}}"
              ]
            },
            "description": "Returns state, expiry, attempts, satisfied factors, and permitted next steps.\n\nRequired permission: READ_VERIFICATION."
          },
          "response": []
        },
        {
          "name": "Submit verification answers",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/verification-sessions/{{verificationSessionId}}/answers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "verification-sessions",
                "{{verificationSessionId}}",
                "answers"
              ]
            },
            "description": "Evaluates supplied challenge answers without returning stored expected values.\n\nRequired permission: COMPLETE_VERIFICATION.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"answers\": [\n    {\n      \"challengeId\": \"challenge_postal_code\",\n      \"value\": \"95814\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "End an unsuccessful verification",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/verification-sessions/{{verificationSessionId}}/fail",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "verification-sessions",
                "{{verificationSessionId}}",
                "fail"
              ]
            },
            "description": "Ends the session with a normalized reason and triggers configured safeguards.\n\nRequired permission: COMPLETE_VERIFICATION.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reasonCode\": \"attempts_exhausted\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "AI sessions",
      "description": "Governed AI work sessions, proposed output, review, and termination.",
      "item": [
        {
          "name": "Create an AI work session",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/ai-sessions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "ai-sessions"
              ]
            },
            "description": "Starts a bounded session from a signed work packet with allowed facts, tools, budgets, and prohibited actions.\n\nRequired permission: CREATE_AI_SESSION.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"caseId\": \"case_HBR_COL_51\",\n  \"agentProfile\": \"collections_assistant\",\n  \"objective\": \"Summarize the case and recommend the next compliant step.\",\n  \"autonomyLevel\": \"A2\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve an AI session",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/ai-sessions/{{aiSessionId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "ai-sessions",
                "{{aiSessionId}}"
              ]
            },
            "description": "Returns work-packet version, tool ledger, budgets, outputs, review, and stop state.\n\nRequired permission: READ_AI_SESSION."
          },
          "response": []
        },
        {
          "name": "Submit an AI output",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/ai-sessions/{{aiSessionId}}/outputs",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "ai-sessions",
                "{{aiSessionId}}",
                "outputs"
              ]
            },
            "description": "Stores a proposed summary, recommendation, or draft with citations to allowed facts and evidence.\n\nRequired permission: CREATE_AI_OUTPUT.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"next_action_recommendation\",\n  \"content\": \"Offer the in-policy two-installment promise option.\",\n  \"citations\": [\n    {\n      \"fact\": \"loan.amountPastDue\",\n      \"evidenceId\": \"evd_FACT_81\"\n    }\n  ],\n  \"confidence\": \"high\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Review an AI output",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/ai-outputs/{{outputId}}/review",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "ai-outputs",
                "{{outputId}}",
                "review"
              ]
            },
            "description": "Accepts, edits, rejects, ignores, escalates, or blocks a proposed AI output with reason.\n\nRequired permission: REVIEW_AI_OUTPUT.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"decision\": \"accepted\",\n  \"reasonCode\": \"facts_and_policy_verified\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Stop an AI session",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/ai-sessions/{{aiSessionId}}/stop",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "ai-sessions",
                "{{aiSessionId}}",
                "stop"
              ]
            },
            "description": "Revokes tool access for the session and records the stop source and reason.\n\nRequired permission: STOP_AI_SESSION.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reasonCode\": \"human_took_ownership\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Privacy requests",
      "description": "Access, deletion, correction, and portability workflows.",
      "item": [
        {
          "name": "List privacy requests",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/privacy-requests",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "privacy-requests"
              ]
            },
            "description": "Lists requests by state, type, jurisdiction, customer, and deadline.\n\nRequired permission: READ_PRIVACY_REQUEST."
          },
          "response": []
        },
        {
          "name": "Create a privacy request",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/privacy-requests",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "privacy-requests"
              ]
            },
            "description": "Creates an access, correction, deletion, or portability workflow with identity-verification and deadline policy.\n\nRequired permission: CREATE_PRIVACY_REQUEST.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"customerId\": \"cus_72P0MAYA\",\n  \"type\": \"access\",\n  \"jurisdiction\": \"US-CA\",\n  \"receivedAt\": \"2027-05-01T09:40:00-07:00\",\n  \"sourceInteractionId\": \"int_PRIVACY_4\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve a privacy request",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/privacy-requests/{{privacyRequestId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "privacy-requests",
                "{{privacyRequestId}}"
              ]
            },
            "description": "Returns verification, data-source tasks, holds, exceptions, exports, and deadline history.\n\nRequired permission: READ_PRIVACY_REQUEST."
          },
          "response": []
        },
        {
          "name": "Complete a privacy request",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/privacy-requests/{{privacyRequestId}}/complete",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "privacy-requests",
                "{{privacyRequestId}}",
                "complete"
              ]
            },
            "description": "Finalizes the request only when required source tasks, exception reviews, and delivery evidence are complete.\n\nRequired permission: COMPLETE_PRIVACY_REQUEST.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"outcome\": \"fulfilled\",\n  \"responseDocumentId\": \"doc_PRIVACY_RESPONSE_4\",\n  \"deliveryInteractionId\": \"int_PRIVACY_EMAIL_8\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Core bindings",
      "description": "Bring-your-own-core capabilities, facts, actions, identity mappings, and reconciliation.",
      "item": [
        {
          "name": "Create a core binding",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/core-bindings",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "core-bindings"
              ]
            },
            "description": "Creates an isolated BYOC binding with authentication, tenant, and adapter metadata; secrets are write-only.\n\nRequired permission: MANAGE_CORE_BINDING.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Primary lending core\",\n  \"adapterType\": \"custom_https\",\n  \"baseUrl\": \"https://core.example.test/lendeasy\",\n  \"authentication\": {\n    \"type\": \"oauth2_client_credentials\",\n    \"secretReference\": \"vault://core-prod\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve core capabilities",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/core-bindings/{{bindingId}}/capabilities",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "core-bindings",
                "{{bindingId}}",
                "capabilities"
              ]
            },
            "description": "Returns effective fact/action capability modes and their schema/version contract.\n\nRequired permission: READ_CORE_BINDING."
          },
          "response": []
        },
        {
          "name": "Publish core capabilities",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/core-bindings/{{bindingId}}/capabilities",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "core-bindings",
                "{{bindingId}}",
                "capabilities"
              ]
            },
            "description": "Publishes a new effective-dated capability version after schema and enabled-workflow validation.\n\nRequired permission: MANAGE_CORE_BINDING.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"effectiveAt\": \"2027-05-01T00:00:00Z\",\n  \"facts\": {\n    \"loan.summary\": \"lms_provided\",\n    \"loan.schedule\": \"lms_provided\",\n    \"loan.apr\": \"unavailable\"\n  },\n  \"actions\": {\n    \"take_payment\": \"lms_provided\",\n    \"re_amortize\": \"manual_only\",\n    \"apply_restriction\": \"lms_provided\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Create an identity mapping",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/core-bindings/{{bindingId}}/identity-mappings",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "core-bindings",
                "{{bindingId}}",
                "identity-mappings"
              ]
            },
            "description": "Maps one stable LendEasy entity to one source entity and rejects active collisions.\n\nRequired permission: MANAGE_CORE_BINDING.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"entityType\": \"loan\",\n  \"lendeasyId\": \"loan_harbor_7X2K\",\n  \"sourceId\": \"LN-0081442\",\n  \"sourceVersion\": \"acct-etag-99104\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Read canonical core facts",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/core-bindings/{{bindingId}}/facts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "core-bindings",
                "{{bindingId}}",
                "facts"
              ]
            },
            "description": "Requests purpose-aware canonical facts and exposes source, as-of time, observation time, and freshness.\n\nRequired permission: READ_CORE_FACT.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"purpose\": \"contact_eligibility\",\n  \"entities\": [\n    {\n      \"type\": \"loan\",\n      \"id\": \"loan_harbor_7X2K\"\n    }\n  ],\n  \"facts\": [\n    \"loan.summary\",\n    \"loan.delinquency\",\n    \"loan.restrictions\"\n  ],\n  \"maximumAgeSeconds\": 30\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Submit a governed core action",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/core-bindings/{{bindingId}}/actions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "core-bindings",
                "{{bindingId}}",
                "actions"
              ]
            },
            "description": "Submits an already-governed typed action with expected source version and stable execution key.\n\nRequired permission: EXECUTE_CORE_ACTION.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"actionId\": \"act_HBR_PMT_812\",\n  \"actionType\": \"take_payment\",\n  \"entity\": {\n    \"loanId\": \"loan_harbor_7X2K\",\n    \"sourceAccountId\": \"LN-0081442\"\n  },\n  \"expectedSourceVersion\": \"acct-etag-99104\",\n  \"parameters\": {\n    \"amount\": \"517.14\",\n    \"currency\": \"USD\",\n    \"effectiveDate\": \"2027-05-08\",\n    \"sourceInstrumentId\": \"BANK-TOKEN-204\"\n  },\n  \"context\": {\n    \"caseId\": \"case_HBR_COL_51\",\n    \"reasonCode\": \"promise_installment\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve a core action",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/core-bindings/{{bindingId}}/actions/{{actionId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "core-bindings",
                "{{bindingId}}",
                "actions",
                "{{actionId}}"
              ]
            },
            "description": "Returns normalized acknowledgement, attempts, applied payload, source references, and reconciliation status.\n\nRequired permission: READ_CORE_ACTION."
          },
          "response": []
        },
        {
          "name": "List core-binding drift",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/core-bindings/{{bindingId}}/reconciliation",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "core-bindings",
                "{{bindingId}}",
                "reconciliation"
              ]
            },
            "description": "Lists identity, fact, action, acknowledgement, and source-to-ledger divergence.\n\nRequired permission: READ_RECONCILIATION."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Webhooks",
      "description": "Tenant-owned event subscriptions, signing-secret rotation, tests, and delivery history.",
      "item": [
        {
          "name": "List webhook subscriptions",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/webhook-subscriptions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "webhook-subscriptions"
              ]
            },
            "description": "Lists destinations, event filters, state, secret version, and recent delivery health without returning secrets.\n\nRequired permission: READ_WEBHOOK."
          },
          "response": []
        },
        {
          "name": "Create a webhook subscription",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/webhook-subscriptions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "webhook-subscriptions"
              ]
            },
            "description": "Creates a tenant-owned HTTPS subscription and returns the signing secret exactly once.\n\nRequired permission: MANAGE_WEBHOOK.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://events.example.test/lendeasy\",\n  \"eventTypes\": [\n    \"payment.posted\",\n    \"payment.returned\",\n    \"funding.posted\",\n    \"case.transitioned\"\n  ],\n  \"apiVersion\": \"2026-07-01\",\n  \"description\": \"Portfolio event consumer\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve a webhook subscription",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/webhook-subscriptions/{{webhookSubscriptionId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "webhook-subscriptions",
                "{{webhookSubscriptionId}}"
              ]
            },
            "description": "Returns configuration, health, version, and delivery summary; signing secrets are write-only.\n\nRequired permission: READ_WEBHOOK."
          },
          "response": []
        },
        {
          "name": "Update a webhook subscription",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/webhook-subscriptions/{{webhookSubscriptionId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "webhook-subscriptions",
                "{{webhookSubscriptionId}}"
              ]
            },
            "description": "Updates destination or event filters under optimistic concurrency and re-verifies a changed destination.\n\nRequired permission: MANAGE_WEBHOOK.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"eventTypes\": [\n    \"payment.posted\",\n    \"payment.returned\",\n    \"case.transitioned\"\n  ],\n  \"expectedVersion\": 3\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Rotate a webhook signing secret",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/webhook-subscriptions/{{webhookSubscriptionId}}/rotate-secret",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "webhook-subscriptions",
                "{{webhookSubscriptionId}}",
                "rotate-secret"
              ]
            },
            "description": "Creates a new signing secret with a bounded overlap window and returns the new value once.\n\nRequired permission: MANAGE_WEBHOOK.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"overlapSeconds\": 3600,\n  \"expectedVersion\": 3\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Send a test webhook",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/webhook-subscriptions/{{webhookSubscriptionId}}/test",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "webhook-subscriptions",
                "{{webhookSubscriptionId}}",
                "test"
              ]
            },
            "description": "Queues a signed, non-business test event through the normal delivery and retry path.\n\nRequired permission: MANAGE_WEBHOOK.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"eventType\": \"endpoint.test\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Deactivate a webhook subscription",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/webhook-subscriptions/{{webhookSubscriptionId}}/deactivate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "webhook-subscriptions",
                "{{webhookSubscriptionId}}",
                "deactivate"
              ]
            },
            "description": "Stops new deliveries while preserving configuration and delivery history.\n\nRequired permission: MANAGE_WEBHOOK.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reasonCode\": \"destination_retired\",\n  \"expectedVersion\": 3\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "List webhook deliveries",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/servicing/webhook-subscriptions/{{webhookSubscriptionId}}/deliveries",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "servicing",
                "webhook-subscriptions",
                "{{webhookSubscriptionId}}",
                "deliveries"
              ]
            },
            "description": "Lists event, attempt, response, timing, and next-retry metadata without response-body secrets.\n\nRequired permission: READ_WEBHOOK."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Customers",
      "description": "Customer aggregates with a closed INDIVIDUAL or CORPORATE profile, masked ordinary reads, audited sensitive reads, and an append-only history ledger.",
      "item": [
        {
          "name": "List customers",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/customers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers"
              ]
            },
            "description": "Returns masked customer summaries ordered by last modification, newest first, using limit/offset paging. Summaries never include street, contact, or identifier values.\n\nRequired permission: READ_LMS_CUSTOMER."
          },
          "response": []
        },
        {
          "name": "Create a customer",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/customers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers"
              ]
            },
            "description": "Creates a customer profile and, in the same request only, optional initial addresses, contact points, identifiers, and consents. The profile is a closed INDIVIDUAL or CORPORATE union; after creation the profile changes through PUT and each child collection changes through its own focused route.\n\nRequired permission: CREATE_LMS_CUSTOMER.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"profile\": {\n    \"customerType\": \"INDIVIDUAL\",\n    \"firstName\": \"Maya\",\n    \"lastName\": \"Chen\",\n    \"dateOfBirth\": \"1991-11-04\",\n    \"externalId\": \"crm-person-81042\"\n  },\n  \"addresses\": [\n    {\n      \"addressType\": \"PRIMARY_RESIDENCE\",\n      \"line1\": \"428 Alder Way\",\n      \"city\": \"Sacramento\",\n      \"stateCode\": \"US-CA\",\n      \"postalCode\": \"95814\",\n      \"country\": \"US\",\n      \"isPrimary\": true\n    }\n  ],\n  \"contactPoints\": [\n    {\n      \"contactType\": \"EMAIL\",\n      \"value\": \"maya.chen@example.test\",\n      \"isPrimary\": true\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve a customer",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}"
              ]
            },
            "description": "Returns the customer aggregate: profile plus current addresses, masked contact points, consents, and masked identifiers. This is the only current-state read for those child collections; removed children are omitted.\n\nRequired permission: READ_LMS_CUSTOMER."
          },
          "response": []
        },
        {
          "name": "Update a customer profile",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}"
              ]
            },
            "description": "Merge-updates profile fields only: supplied fields change, omitted fields stay, and an explicit null clears a nullable field. customerType is immutable and child collections are rejected here; use the focused address, contact-point, identifier, and consent routes.\n\nRequired permission: UPDATE_LMS_CUSTOMER_PROFILE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"lastName\": \"Chen-Liu\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve sensitive customer values",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/sensitive",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "sensitive"
              ]
            },
            "description": "Returns complete identifier values, raw contact values, and consent evidence references. Requires both the ordinary and the sensitive read permission; every call is audited and the response is never cached.\n\nRequired permission: READ_LMS_CUSTOMER & READ_LMS_CUSTOMER_SENSITIVE."
          },
          "response": []
        },
        {
          "name": "Look up a customer by exact identifier",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/lookup",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "lookup"
              ]
            },
            "description": "Finds customers whose current identifier exactly equals the supplied value. A POST body keeps the value out of URLs and logs; the route accepts no Idempotency-Key, is audited, and answers with masked summaries only. An empty result never reveals whether a hidden match exists.\n\nRequired permission: READ_LMS_CUSTOMER & READ_LMS_CUSTOMER_SENSITIVE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"identifierType\": \"SSN\",\n  \"value\": \"601114821\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "List customer history",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/history",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "history"
              ]
            },
            "description": "Returns the append-only change ledger for the customer and its children, newest first, with cursor paging. Without the sensitive read permission, protected values appear as redacted placeholders.\n\nRequired permission: READ_LMS_CUSTOMER_HISTORY."
          },
          "response": []
        },
        {
          "name": "Retrieve a history event",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/history/{{historyId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "history",
                "{{historyId}}"
              ]
            },
            "description": "Returns one history event with its field-level before/after changes, actor, and correlation id linking sibling events written by the same command.\n\nRequired permission: READ_LMS_CUSTOMER_HISTORY."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Search",
      "description": "Permission-aware exact and prefix search across customers and loans.",
      "item": [
        {
          "name": "Search customers and loans",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/portfolio/search",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "portfolio",
                "search"
              ]
            },
            "description": "Permission-aware exact and prefix search: name token-prefix, exact current email, canonical phone, and exact loan account number. Results are safe summaries; the query and matched contact values are never echoed, and the response is never cached.\n\nRequired permission: READ_LMS_CUSTOMER | READ_LMS_LOAN_SUMMARY."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Addresses",
      "description": "Typed customer addresses with focused mutations and history.",
      "item": [
        {
          "name": "Add a customer address",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/addresses",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "addresses"
              ]
            },
            "description": "Adds a typed address. addressType is immutable; PRIMARY_RESIDENCE, MAILING, LEGAL_NOTICE, and STATEMENT allow one active address each. country is ISO 3166-1 alpha-2 and stateCode is the full ISO 3166-2 code matching it. Verification, deliverability, and geolocation fields are accepted only from trusted integrations.\n\nRequired permission: UPDATE_LMS_CUSTOMER_ADDRESS.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"addressType\": \"MAILING\",\n  \"line1\": \"PO Box 210\",\n  \"city\": \"Sacramento\",\n  \"stateCode\": \"US-CA\",\n  \"postalCode\": \"95812\",\n  \"country\": \"US\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Update a customer address",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/addresses/{{addressId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "addresses",
                "{{addressId}}"
              ]
            },
            "description": "Merge-updates address fields; addressType is immutable. The change is recorded in customer history with field-level before/after values.\n\nRequired permission: UPDATE_LMS_CUSTOMER_ADDRESS.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"line2\": \"Unit 4\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Remove a customer address",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/addresses/{{addressId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "addresses",
                "{{addressId}}"
              ]
            },
            "description": "Soft-removes the address with no request body. The row leaves the aggregate read but its full history is retained.\n\nRequired permission: UPDATE_LMS_CUSTOMER_ADDRESS."
          },
          "response": []
        },
        {
          "name": "List address history",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/addresses/{{addressId}}/history",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "addresses",
                "{{addressId}}",
                "history"
              ]
            },
            "description": "Returns the change ledger for one address with cursor paging; the category is fixed to ADDRESS.\n\nRequired permission: READ_LMS_CUSTOMER_HISTORY."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Contact points",
      "description": "Email and phone contact points with explicit texting permission and trusted-integration verification.",
      "item": [
        {
          "name": "Add a customer contact point",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/contact-points",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "contact-points"
              ]
            },
            "description": "Adds an EMAIL or PHONE contact point. New values default to UNVERIFIED; canReceiveSms is explicit texting permission (default false) and requires smsPermissionChangedAt whenever supplied. Verification, carrier, and deliverability results are accepted only from trusted integrations.\n\nRequired permission: UPDATE_LMS_CUSTOMER_CONTACT.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"contactType\": \"PHONE\",\n  \"value\": \"+19165550126\",\n  \"phoneType\": \"MOBILE\",\n  \"canReceiveSms\": true,\n  \"smsPermissionChangedAt\": \"2026-08-01T17:05:00Z\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Update a customer contact point",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/contact-points/{{contactPointId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "contact-points",
                "{{contactPointId}}"
              ]
            },
            "description": "Merge-updates the contact point; contactType is immutable. Changing a phone value resets texting permission and verification state unless fresh trusted results arrive in the same change.\n\nRequired permission: UPDATE_LMS_CUSTOMER_CONTACT.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"canReceiveSms\": false,\n  \"smsPermissionChangedAt\": \"2027-05-01T10:32:00Z\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Remove a customer contact point",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/contact-points/{{contactPointId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "contact-points",
                "{{contactPointId}}"
              ]
            },
            "description": "Soft-removes the contact point with no request body; history is retained.\n\nRequired permission: UPDATE_LMS_CUSTOMER_CONTACT."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Customer identifiers",
      "description": "Government identifiers stored normalized, masked on ordinary reads, revealed only through audited sensitive routes.",
      "item": [
        {
          "name": "Add a customer identifier",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/identifiers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "identifiers"
              ]
            },
            "description": "Attaches a government identifier. The complete value is supplied once, stored normalized, and masked on every ordinary read; SSN and EIN normalize to nine digits. Verification state is set only by trusted integrations. INDIVIDUAL customers use SSN, DRIVER_LICENSE, or PASSPORT; CORPORATE customers use EIN.\n\nRequired permission: UPDATE_LMS_CUSTOMER_IDENTIFIER.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"identifierType\": \"SSN\",\n  \"value\": \"601-11-4821\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Update a customer identifier",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/identifiers/{{identifierId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "identifiers",
                "{{identifierId}}"
              ]
            },
            "description": "Merge-updates the identifier; identifierType is immutable. Complete values never appear in command audit, history, events, or logs.\n\nRequired permission: UPDATE_LMS_CUSTOMER_IDENTIFIER.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"evidenceRef\": \"evd_IDV_81\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Remove a customer identifier",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/identifiers/{{identifierId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "identifiers",
                "{{identifierId}}"
              ]
            },
            "description": "Soft-removes the identifier with no request body; masked history is retained.\n\nRequired permission: UPDATE_LMS_CUSTOMER_IDENTIFIER."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Forms",
      "description": "Administered form definitions and typed customer and loan form entries with derived per-form permissions.",
      "item": [
        {
          "name": "List form definitions",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/form-definitions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "form-definitions"
              ]
            },
            "description": "Lists definitions with target type, entry mode, and lifecycle status, ordered by form key.\n\nRequired permission: ADMIN_LMS_FORM_DEFINITION."
          },
          "response": []
        },
        {
          "name": "Create a form definition",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/form-definitions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "form-definitions"
              ]
            },
            "description": "Creates a draft definition for a CUSTOMER or LOAN target with SINGLE or MULTIPLE entry mode and a typed field schema. Creation atomically registers the form’s derived read, write, and delete permissions from its immutable key.\n\nRequired permission: ADMIN_LMS_FORM_DEFINITION.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"formKey\": \"consumer_income\",\n  \"targetType\": \"CUSTOMER\",\n  \"entryMode\": \"SINGLE\",\n  \"name\": \"Consumer income\",\n  \"schema\": {\n    \"sections\": [\n      {\n        \"fields\": [\n          {\n            \"fieldKey\": \"employment_status\",\n            \"dataType\": \"SINGLE_SELECT\",\n            \"required\": true,\n            \"options\": [\n              {\n                \"code\": \"EMPLOYED\",\n                \"label\": \"Employed\"\n              },\n              {\n                \"code\": \"SELF_EMPLOYED\",\n                \"label\": \"Self-employed\"\n              },\n              {\n                \"code\": \"RETIRED\",\n                \"label\": \"Retired\"\n              }\n            ]\n          },\n          {\n            \"fieldKey\": \"gross_monthly_income\",\n            \"dataType\": \"DECIMAL\",\n            \"required\": true\n          }\n        ]\n      }\n    ]\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve a form definition",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/form-definitions/{{formKey}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "form-definitions",
                "{{formKey}}"
              ]
            },
            "description": "Returns the definition with its current publication, any working draft, and the durable field registry with active flags.\n\nRequired permission: ADMIN_LMS_FORM_DEFINITION."
          },
          "response": []
        },
        {
          "name": "Replace the working draft",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/form-definitions/{{formKey}}/draft",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "form-definitions",
                "{{formKey}}",
                "draft"
              ]
            },
            "description": "Replaces the definition’s single mutable draft in place. Drafts do not affect entries until published.\n\nRequired permission: ADMIN_LMS_FORM_DEFINITION.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Consumer income\",\n  \"schema\": {\n    \"sections\": [\n      {\n        \"fields\": [\n          {\n            \"fieldKey\": \"employment_status\",\n            \"dataType\": \"SINGLE_SELECT\",\n            \"required\": true,\n            \"options\": [\n              {\n                \"code\": \"EMPLOYED\",\n                \"label\": \"Employed\"\n              },\n              {\n                \"code\": \"SELF_EMPLOYED\",\n                \"label\": \"Self-employed\"\n              },\n              {\n                \"code\": \"RETIRED\",\n                \"label\": \"Retired\"\n              }\n            ]\n          },\n          {\n            \"fieldKey\": \"gross_monthly_income\",\n            \"dataType\": \"DECIMAL\",\n            \"required\": true\n          }\n        ]\n      }\n    ]\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Publish a form definition",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/form-definitions/{{formKey}}/publish",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "form-definitions",
                "{{formKey}}",
                "publish"
              ]
            },
            "description": "Publishes the pending draft as an immutable publication and makes it the active version. Field keys keep their types forever — a type change is rejected — and a draft identical to the current publication publishes as a no-op.\n\nRequired permission: ADMIN_LMS_FORM_DEFINITION."
          },
          "response": []
        },
        {
          "name": "Retire a form definition",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/form-definitions/{{formKey}}/retire",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "form-definitions",
                "{{formKey}}",
                "retire"
              ]
            },
            "description": "Retires the definition with a required reason. Existing entries remain readable; new entries are rejected. The derived permissions are retained.\n\nRequired permission: ADMIN_LMS_FORM_DEFINITION.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reason\": \"Superseded by consumer_income_v2.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "List form-definition history",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/form-definitions/{{formKey}}/history",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "form-definitions",
                "{{formKey}}",
                "history"
              ]
            },
            "description": "Returns creation, publication, and retirement events, newest first. Draft saves are not events.\n\nRequired permission: ADMIN_LMS_FORM_DEFINITION."
          },
          "response": []
        },
        {
          "name": "Retrieve a form-definition event",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/form-definitions/{{formKey}}/history/{{historyId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "form-definitions",
                "{{formKey}}",
                "history",
                "{{historyId}}"
              ]
            },
            "description": "Returns one lifecycle event; publication events include the exact schema that was published.\n\nRequired permission: ADMIN_LMS_FORM_DEFINITION."
          },
          "response": []
        },
        {
          "name": "List customer form entries",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/forms/{{formKey}}/entries",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "forms",
                "{{formKey}}",
                "entries"
              ]
            },
            "description": "Lists current entries for this form and target with limit/offset paging, sorting, and creation-time ranges.\n\nRequired permission: READ_LMS_FORM_<KEY>."
          },
          "response": []
        },
        {
          "name": "Submit a customer form entry",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/forms/{{formKey}}/entries",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "forms",
                "{{formKey}}",
                "entries"
              ]
            },
            "description": "Validates typed answers against the form’s active publication and stores the entry. Required active fields must be present; option codes must exist. SINGLE-mode forms allow one current entry per target — a second create conflicts with the existing entry.\n\nRequired permission: WRITE_LMS_FORM_<KEY>.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"answers\": {\n    \"employment_status\": \"EMPLOYED\",\n    \"gross_monthly_income\": \"6400\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "List loan form entries",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/forms/{{formKey}}/entries",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "forms",
                "{{formKey}}",
                "entries"
              ]
            },
            "description": "Lists current entries for this form and target with limit/offset paging, sorting, and creation-time ranges.\n\nRequired permission: READ_LMS_FORM_<KEY>."
          },
          "response": []
        },
        {
          "name": "Submit a loan form entry",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/forms/{{formKey}}/entries",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "forms",
                "{{formKey}}",
                "entries"
              ]
            },
            "description": "Validates typed answers against the form’s active publication and stores the entry. Required active fields must be present; option codes must exist. SINGLE-mode forms allow one current entry per target — a second create conflicts with the existing entry.\n\nRequired permission: WRITE_LMS_FORM_<KEY>.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"answers\": {\n    \"employment_status\": \"EMPLOYED\",\n    \"gross_monthly_income\": \"6400\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve a form entry",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/form-entries/{{entryId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "form-entries",
                "{{entryId}}"
              ]
            },
            "description": "Returns the entry with typed answers for active fields. Removed entries return 404.\n\nRequired permission: READ_LMS_FORM_<KEY>."
          },
          "response": []
        },
        {
          "name": "Update a form entry",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/form-entries/{{entryId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "form-entries",
                "{{entryId}}"
              ]
            },
            "description": "Replaces the complete answer set: omitted optional fields clear, and an identical replacement records no change. Field-level deltas are recorded in entry history.\n\nRequired permission: WRITE_LMS_FORM_<KEY>.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"answers\": {\n    \"employment_status\": \"SELF_EMPLOYED\",\n    \"gross_monthly_income\": \"7100\"\n  },\n  \"changeReason\": \"Employment change reported.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Remove a form entry",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/form-entries/{{entryId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "form-entries",
                "{{entryId}}"
              ]
            },
            "description": "Soft-removes the entry with a required reason. Idempotent; history is retained.\n\nRequired permission: DELETE_LMS_FORM_<KEY>.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reason\": \"Captured against the wrong customer.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "List form-entry history",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/form-entries/{{entryId}}/history",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "form-entries",
                "{{entryId}}",
                "history"
              ]
            },
            "description": "Returns semantic entry events — created, answers updated with field-level deltas, removed — newest first.\n\nRequired permission: READ_LMS_FORM_<KEY>."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Notes",
      "description": "Customer and loan notes with immutable revisions, links, and permanent redaction.",
      "item": [
        {
          "name": "List customer notes",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/notes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "notes"
              ]
            },
            "description": "Lists note markers — status, flags, and redaction state — pinned first, newest first. Bodies are read one note at a time.\n\nRequired permission: READ_LMS_NOTE."
          },
          "response": []
        },
        {
          "name": "Create a customer note",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/notes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "notes"
              ]
            },
            "description": "Creates a note as revision one of an immutable revision chain. Marking a note sensitive requires the sensitive read permission; notes never trigger borrower communication.\n\nRequired permission: CREATE_LMS_NOTE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"body\": \"Maya requested email delivery for the payoff figure.\",\n  \"sensitive\": false,\n  \"pinned\": false\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "List loan notes",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/notes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "notes"
              ]
            },
            "description": "Lists note markers — status, flags, and redaction state — pinned first, newest first. Bodies are read one note at a time.\n\nRequired permission: READ_LMS_NOTE."
          },
          "response": []
        },
        {
          "name": "Create a loan note",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/notes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "notes"
              ]
            },
            "description": "Creates a note as revision one of an immutable revision chain. Marking a note sensitive requires the sensitive read permission; notes never trigger borrower communication.\n\nRequired permission: CREATE_LMS_NOTE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"body\": \"Maya requested email delivery for the payoff figure.\",\n  \"sensitive\": false,\n  \"pinned\": false\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve a note",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/notes/{{noteId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "notes",
                "{{noteId}}"
              ]
            },
            "description": "Returns the note with its current revision body. Sensitive bodies require the sensitive read permission; a redacted note returns a redaction placeholder and its prior content is never served again.\n\nRequired permission: READ_LMS_NOTE."
          },
          "response": []
        },
        {
          "name": "Revise a note",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/notes/{{noteId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "notes",
                "{{noteId}}"
              ]
            },
            "description": "Appends a new content revision with an optional change reason. The original revision is never edited or deleted; redacted notes cannot be revised.\n\nRequired permission: UPDATE_LMS_NOTE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"body\": \"Maya requested secure-message delivery for the payoff figure.\",\n  \"changeReason\": \"Channel corrected.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "List note revisions",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/notes/{{noteId}}/history",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "notes",
                "{{noteId}}",
                "history"
              ]
            },
            "description": "Returns revision metadata newest first — revision number, type, and reasons. Revision bodies never appear in history.\n\nRequired permission: READ_LMS_NOTE."
          },
          "response": []
        },
        {
          "name": "Add a note link",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/notes/{{noteId}}/links",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "notes",
                "{{noteId}}",
                "links"
              ]
            },
            "description": "Links the note to another customer or loan.\n\nRequired permission: UPDATE_LMS_NOTE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"targetType\": \"CUSTOMER\",\n  \"targetRef\": \"412\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Remove a note link",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/notes/{{noteId}}/links/{{linkId}}/remove",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "notes",
                "{{noteId}}",
                "links",
                "{{linkId}}",
                "remove"
              ]
            },
            "description": "Deactivates one link; the link row and its removal are retained.\n\nRequired permission: UPDATE_LMS_NOTE."
          },
          "response": []
        },
        {
          "name": "Archive a note",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/notes/{{noteId}}/archive",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "notes",
                "{{noteId}}",
                "archive"
              ]
            },
            "description": "Archives the note with no request body. Idempotent; revisions are retained.\n\nRequired permission: ARCHIVE_LMS_NOTE."
          },
          "response": []
        },
        {
          "name": "Redact a note",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/notes/{{noteId}}/redact",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "notes",
                "{{noteId}}",
                "redact"
              ]
            },
            "description": "Permanently redacts the note’s content with a required reason. A redaction revision is appended, every read thereafter returns a placeholder, and redaction cannot be undone.\n\nRequired permission: REDACT_LMS_NOTE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"redactionReason\": \"Contained payment card digits.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Documents",
      "description": "Customer and loan documents with virus scanning, checksum-verified downloads, links, and history.",
      "item": [
        {
          "name": "Upload a document",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/documents",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "documents"
              ]
            },
            "description": "Uploads content and registers metadata in one multipart request with two parts: a JSON metadata part and the file part. At least one CUSTOMER or LOAN link is required. The server derives the checksum and content type; content is virus-scanned before it can be downloaded, and rejected content is quarantined and deleted. Marking a document sensitive requires the sensitive read permission.\n\nRequired permission: CREATE_LMS_DOCUMENT."
          },
          "response": []
        },
        {
          "name": "Retrieve document metadata",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/documents/{{documentId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "documents",
                "{{documentId}}"
              ]
            },
            "description": "Returns metadata, scan status, checksum, and active links. Sensitive documents additionally require the sensitive read permission.\n\nRequired permission: READ_LMS_DOCUMENT."
          },
          "response": []
        },
        {
          "name": "Update document metadata",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/documents/{{documentId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "documents",
                "{{documentId}}"
              ]
            },
            "description": "Updates title, description, or the sensitive flag. Content, origin, and checksum are immutable; replacement content is a new document that supersedes this one.\n\nRequired permission: UPDATE_LMS_DOCUMENT.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"title\": \"Pay statement — April 2027\",\n  \"sensitive\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Download document content",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/documents/{{documentId}}/content",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "documents",
                "{{documentId}}",
                "content"
              ]
            },
            "description": "Streams the original bytes as an attachment after re-verifying the stored checksum. Only CLEAN-scanned documents are downloadable; the response is never cached.\n\nRequired permission: READ_LMS_DOCUMENT."
          },
          "response": []
        },
        {
          "name": "List document history",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/documents/{{documentId}}/history",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "documents",
                "{{documentId}}",
                "history"
              ]
            },
            "description": "Returns the document’s change events — creation, metadata updates, link changes, archive — newest first.\n\nRequired permission: READ_LMS_DOCUMENT."
          },
          "response": []
        },
        {
          "name": "Add a document link",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/documents/{{documentId}}/links",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "documents",
                "{{documentId}}",
                "links"
              ]
            },
            "description": "Links the document to another customer or loan.\n\nRequired permission: UPDATE_LMS_DOCUMENT.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"targetType\": \"CUSTOMER\",\n  \"targetRef\": \"412\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Remove a document link",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/documents/{{documentId}}/links/{{linkId}}/remove",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "documents",
                "{{documentId}}",
                "links",
                "{{linkId}}",
                "remove"
              ]
            },
            "description": "Deactivates one link with an optional reason; the link row and its removal are retained.\n\nRequired permission: UPDATE_LMS_DOCUMENT.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reasonCode\": \"LINKED_IN_ERROR\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Archive a document",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/documents/{{documentId}}/archive",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "documents",
                "{{documentId}}",
                "archive"
              ]
            },
            "description": "Archives the document with no request body. Idempotent; content and history are retained.\n\nRequired permission: ARCHIVE_LMS_DOCUMENT."
          },
          "response": []
        },
        {
          "name": "List customer documents",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/documents",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "documents"
              ]
            },
            "description": "Lists documents actively linked to the customer, newest first.\n\nRequired permission: READ_LMS_DOCUMENT."
          },
          "response": []
        },
        {
          "name": "List loan documents",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/documents",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "documents"
              ]
            },
            "description": "Lists documents actively linked to the loan, newest first, including system-generated statements.\n\nRequired permission: READ_LMS_DOCUMENT."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Consents",
      "description": "The closed consent catalog: grants with capture evidence and immutable revocation.",
      "item": [
        {
          "name": "Record a consent",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/consents",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "consents"
              ]
            },
            "description": "Records a granted consent from the closed catalog: ELECTRONIC_COMMUNICATION, AUTODIALED_CALL, ARTIFICIAL_VOICE, or UNUSUAL_TIME. Capture time and method are required; evidence and legal-basis references are optional.\n\nRequired permission: UPDATE_LMS_CUSTOMER_CONSENT.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"consentType\": \"AUTODIALED_CALL\",\n  \"capturedAt\": \"2026-08-01T17:05:00Z\",\n  \"captureMethod\": \"BORROWER_PORTAL\",\n  \"evidenceRef\": \"evd_CONSENT_41\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Revoke a consent",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/consents/{{consentId}}/revoke",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "consents",
                "{{consentId}}",
                "revoke"
              ]
            },
            "description": "Revokes the consent with no request body; the server derives the effective time. The original grant and its evidence remain immutable in history.\n\nRequired permission: UPDATE_LMS_CUSTOMER_CONSENT."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Payment instruments",
      "description": "Processor-tokenized bank and card instruments with masked reads and provider-event verification.",
      "item": [
        {
          "name": "List customer payment instruments",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/payment-instruments",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "payment-instruments"
              ]
            },
            "description": "Lists masked instruments with verification and validation state; tokens and authorization references are never returned on masked reads.\n\nRequired permission: READ_LMS_PAYMENT_INSTRUMENT."
          },
          "response": []
        },
        {
          "name": "Add a customer payment instrument",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/payment-instruments",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "payment-instruments"
              ]
            },
            "description": "Attaches a processor-tokenized customer instrument. providerTokenRef must be a vault token; raw account, routing, or card numbers are rejected. The server resolves the token to derive the masked display, rail capabilities, and type. New instruments start UNVERIFIED; verification completes through provider events, never through a public route.\n\nRequired permission: CREATE_LMS_PAYMENT_INSTRUMENT.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"instrumentType\": \"ACH_BANK\",\n  \"providerTokenRef\": \"vault:ach:tok_sandbox_bank_44\",\n  \"authorizationRef\": \"evd_BANK_AUTH_11\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve a payment instrument",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/payment-instruments/{{instrumentId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "payment-instruments",
                "{{instrumentId}}"
              ]
            },
            "description": "Returns masked metadata and lifecycle state. No public route returns raw account or card values; they are never stored.\n\nRequired permission: READ_LMS_PAYMENT_INSTRUMENT."
          },
          "response": []
        },
        {
          "name": "Update a payment instrument",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/payment-instruments/{{instrumentId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "payment-instruments",
                "{{instrumentId}}"
              ]
            },
            "description": "Replaces the vault token or authorization reference. A new token must resolve to the same immutable instrument type and refreshes the masked display and rail capabilities.\n\nRequired permission: UPDATE_LMS_PAYMENT_INSTRUMENT.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"providerTokenRef\": \"vault:ach:tok_sandbox_bank_45\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Deactivate a payment instrument",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/payment-instruments/{{instrumentId}}/deactivate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "payment-instruments",
                "{{instrumentId}}",
                "deactivate"
              ]
            },
            "description": "Stops future use and cascades dependent autopay enrollments into review. Idempotent: deactivating an inactive instrument is a no-op.\n\nRequired permission: UPDATE_LMS_PAYMENT_INSTRUMENT.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reasonCode\": \"CUSTOMER_REQUEST\",\n  \"comment\": \"Account closed at bank.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve sensitive instrument references",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/payment-instruments/{{instrumentId}}/sensitive",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "payment-instruments",
                "{{instrumentId}}",
                "sensitive"
              ]
            },
            "description": "Returns the masked fields plus the vault token and authorization reference. Requires both read permissions; every call is audited and the response is never cached.\n\nRequired permission: READ_LMS_PAYMENT_INSTRUMENT & READ_LMS_PAYMENT_INSTRUMENT_SENSITIVE."
          },
          "response": []
        },
        {
          "name": "List external-party payment instruments",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/external-parties/{{partyId}}/payment-instruments",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "external-parties",
                "{{partyId}}",
                "payment-instruments"
              ]
            },
            "description": "Lists masked instruments with verification and validation state; tokens and authorization references are never returned on masked reads.\n\nRequired permission: READ_LMS_PAYMENT_INSTRUMENT."
          },
          "response": []
        },
        {
          "name": "Add an external-party payment instrument",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/external-parties/{{partyId}}/payment-instruments",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "external-parties",
                "{{partyId}}",
                "payment-instruments"
              ]
            },
            "description": "Attaches a processor-tokenized external-party instrument. providerTokenRef must be a vault token; raw account, routing, or card numbers are rejected. The server resolves the token to derive the masked display, rail capabilities, and type. New instruments start UNVERIFIED; verification completes through provider events, never through a public route.\n\nRequired permission: CREATE_LMS_PAYMENT_INSTRUMENT.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"instrumentType\": \"ACH_BANK\",\n  \"providerTokenRef\": \"vault:ach:tok_sandbox_bank_44\",\n  \"authorizationRef\": \"evd_BANK_AUTH_11\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve a payment instrument",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/external-parties/{{partyId}}/payment-instruments/{{instrumentId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "external-parties",
                "{{partyId}}",
                "payment-instruments",
                "{{instrumentId}}"
              ]
            },
            "description": "Returns masked metadata and lifecycle state. No public route returns raw account or card values; they are never stored.\n\nRequired permission: READ_LMS_PAYMENT_INSTRUMENT."
          },
          "response": []
        },
        {
          "name": "Update a payment instrument",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/external-parties/{{partyId}}/payment-instruments/{{instrumentId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "external-parties",
                "{{partyId}}",
                "payment-instruments",
                "{{instrumentId}}"
              ]
            },
            "description": "Replaces the vault token or authorization reference. A new token must resolve to the same immutable instrument type and refreshes the masked display and rail capabilities.\n\nRequired permission: UPDATE_LMS_PAYMENT_INSTRUMENT.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"providerTokenRef\": \"vault:ach:tok_sandbox_bank_45\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Deactivate a payment instrument",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/external-parties/{{partyId}}/payment-instruments/{{instrumentId}}/deactivate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "external-parties",
                "{{partyId}}",
                "payment-instruments",
                "{{instrumentId}}",
                "deactivate"
              ]
            },
            "description": "Stops future use and cascades dependent autopay enrollments into review. Idempotent: deactivating an inactive instrument is a no-op.\n\nRequired permission: UPDATE_LMS_PAYMENT_INSTRUMENT.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reasonCode\": \"CUSTOMER_REQUEST\",\n  \"comment\": \"Account closed at bank.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve sensitive instrument references",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/external-parties/{{partyId}}/payment-instruments/{{instrumentId}}/sensitive",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "external-parties",
                "{{partyId}}",
                "payment-instruments",
                "{{instrumentId}}",
                "sensitive"
              ]
            },
            "description": "Returns the masked fields plus the vault token and authorization reference. Requires both read permissions; every call is audited and the response is never cached.\n\nRequired permission: READ_LMS_PAYMENT_INSTRUMENT & READ_LMS_PAYMENT_INSTRUMENT_SENSITIVE."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Loan parties",
      "description": "Co-borrower, guarantor, and authorized-party relationships with explicit authority scopes.",
      "item": [
        {
          "name": "List loan parties",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/parties",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "parties"
              ]
            },
            "description": "Lists co-borrower, guarantor, and authorized-party relationships for the loan. Removed parties are excluded unless requested by status.\n\nRequired permission: READ_LMS_LOAN_PARTY."
          },
          "response": []
        },
        {
          "name": "Add a loan party",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/parties",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "parties"
              ]
            },
            "description": "Creates a role-scoped relationship for a customer or external party with an explicit authority scope. Parties start PENDING_VERIFICATION unless created ACTIVE with evidence; an all-false authority scope is valid only for INFORMATIONAL_PARTY.\n\nRequired permission: MANAGE_LMS_LOAN_PARTY.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"partyOwnerType\": \"CUSTOMER\",\n  \"partyOwnerRef\": \"412\",\n  \"role\": \"AUTHORIZED_THIRD_PARTY\",\n  \"authorityScope\": {\n    \"mayReceiveInformation\": true,\n    \"mayMakePayments\": false,\n    \"maySignDocuments\": false,\n    \"mayApproveActions\": false,\n    \"mayReceiveNotices\": true\n  },\n  \"effectiveFrom\": \"2027-05-01T00:00:00Z\",\n  \"evidenceRef\": \"doc_POA_4\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve a loan party",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/parties/{{partyId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "parties",
                "{{partyId}}"
              ]
            },
            "description": "Returns the relationship, authority scope, status, effective interval, and evidence reference.\n\nRequired permission: READ_LMS_LOAN_PARTY."
          },
          "response": []
        },
        {
          "name": "Update a loan party",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/parties/{{partyId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "parties",
                "{{partyId}}"
              ]
            },
            "description": "Updates role, authority scope, status, effective interval, or evidence. The party owner is immutable.\n\nRequired permission: MANAGE_LMS_LOAN_PARTY.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"authorityScope\": {\n    \"mayReceiveInformation\": true,\n    \"mayMakePayments\": true,\n    \"maySignDocuments\": false,\n    \"mayApproveActions\": false,\n    \"mayReceiveNotices\": true\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Remove a loan party",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/parties/{{partyId}}/remove",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "parties",
                "{{partyId}}",
                "remove"
              ]
            },
            "description": "Ends the relationship with a required reason; the historical interval is retained.\n\nRequired permission: MANAGE_LMS_LOAN_PARTY.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reasonCode\": \"AUTHORITY_REVOKED\",\n  \"comment\": \"Power of attorney withdrawn.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "List a customer’s loan roles",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/loan-party-links",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "loan-party-links"
              ]
            },
            "description": "Lists the loans on which this customer holds a party role, excluding removed links by default.\n\nRequired permission: READ_LMS_LOAN_PARTY."
          },
          "response": []
        }
      ]
    },
    {
      "name": "External parties",
      "description": "Merchants and other verified counterparties eligible to receive funding.",
      "item": [
        {
          "name": "List external parties",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/external-parties",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "external-parties"
              ]
            },
            "description": "Lists counterparties by type, verification state, activation, and case-insensitive name search.\n\nRequired permission: READ_LMS_EXTERNAL_PARTY."
          },
          "response": []
        },
        {
          "name": "Create an external party",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/external-parties",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "external-parties"
              ]
            },
            "description": "Creates a merchant or other permitted counterparty. Parties start UNVERIFIED and inactive; activation requires VERIFIED. Tax identifiers are vault references — raw values are rejected.\n\nRequired permission: MANAGE_LMS_EXTERNAL_PARTY.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"partyType\": \"MERCHANT\",\n  \"displayName\": \"Juniper Home Market\",\n  \"legalName\": \"Juniper Home Market LLC\",\n  \"externalReference\": \"merchant-2048\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve an external party",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/external-parties/{{partyId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "external-parties",
                "{{partyId}}"
              ]
            },
            "description": "Returns the party detail, including the vaulted tax-identifier reference and metadata that list reads omit.\n\nRequired permission: READ_LMS_EXTERNAL_PARTY."
          },
          "response": []
        },
        {
          "name": "Update an external party",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/external-parties/{{partyId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "external-parties",
                "{{partyId}}"
              ]
            },
            "description": "Merge-updates the party. Activation and verification changes require an audit comment; moving away from VERIFIED automatically deactivates the party.\n\nRequired permission: MANAGE_LMS_EXTERNAL_PARTY.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"active\": true,\n  \"verificationState\": \"VERIFIED\",\n  \"comment\": \"KYB review completed.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Loan products",
      "description": "Progressive loan products carrying LendEasy APR, statement, and overpayment configuration.",
      "item": [
        {
          "name": "List loan products",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loanproducts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loanproducts"
              ]
            },
            "description": "Returns loan products with their LendEasy configuration — product class, APR and statement policy. Products without configuration are reported as configurationStatus MISSING and cannot originate loans.\n\nRequired permission: READ_LMS_PRODUCT."
          },
          "response": []
        },
        {
          "name": "Create a loan product",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loanproducts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loanproducts"
              ]
            },
            "description": "Creates a progressive loan product and its required LendEasy configuration atomically. The body has two blocks: the native product settings — progressive schedule, no interest recalculation, charges referenced by id — and lmsConfig with product class, APR policy, statement policy, and optional overpayment tolerance. The server owns the payment-allocation order.\n\nRequired permission: CREATE_LMS_LOAN_PRODUCT.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"fineract\": {\n    \"name\": \"Harbor 18-month personal loan\",\n    \"shortName\": \"HBR18\",\n    \"currencyCode\": \"USD\",\n    \"principal\": 8400,\n    \"numberOfRepayments\": 18,\n    \"repaymentEvery\": 1,\n    \"repaymentFrequencyType\": 2,\n    \"interestRatePerPeriod\": 13.25,\n    \"interestRateFrequencyType\": 3,\n    \"amortizationType\": 1,\n    \"interestType\": 0,\n    \"interestCalculationPeriodType\": 1,\n    \"transactionProcessingStrategyCode\": \"advanced-payment-allocation-strategy\",\n    \"loanScheduleType\": \"PROGRESSIVE\",\n    \"isInterestRecalculationEnabled\": false,\n    \"accountingRule\": 1,\n    \"charges\": [\n      {\n        \"id\": 12\n      }\n    ]\n  },\n  \"lmsConfig\": {\n    \"productClass\": \"COVERED_CONSUMER\",\n    \"aprEnabled\": true,\n    \"aprRounding\": \"NEAREST_0_01_PERCENT_HALF_UP\",\n    \"aprTolerancePolicy\": \"REGULAR\",\n    \"statementEnabled\": true,\n    \"statementLeadDays\": 10\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve the product template",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loanproducts/template",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loanproducts",
                "template"
              ]
            },
            "description": "Returns the option catalogs for creating a loan product, including LendEasy product-class, APR-rounding, and APR-tolerance options.\n\nRequired permission: READ_LMS_PRODUCT."
          },
          "response": []
        },
        {
          "name": "Retrieve a loan product",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loanproducts/{{productId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loanproducts",
                "{{productId}}"
              ]
            },
            "description": "Returns one product with its LendEasy configuration.\n\nRequired permission: READ_LMS_PRODUCT."
          },
          "response": []
        },
        {
          "name": "Update a loan product",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loanproducts/{{productId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loanproducts",
                "{{productId}}"
              ]
            },
            "description": "Replaces the product aggregate — native settings and LendEasy configuration together. Every referenced charge must exist and carry its own classification.\n\nRequired permission: UPDATE_LMS_LOAN_PRODUCT.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"fineract\": {\n    \"name\": \"Harbor 18-month personal loan\",\n    \"shortName\": \"HBR18\",\n    \"currencyCode\": \"USD\",\n    \"principal\": 8400,\n    \"numberOfRepayments\": 18,\n    \"repaymentEvery\": 1,\n    \"repaymentFrequencyType\": 2,\n    \"interestRatePerPeriod\": 12.75,\n    \"interestRateFrequencyType\": 3,\n    \"amortizationType\": 1,\n    \"interestType\": 0,\n    \"interestCalculationPeriodType\": 1,\n    \"transactionProcessingStrategyCode\": \"advanced-payment-allocation-strategy\",\n    \"loanScheduleType\": \"PROGRESSIVE\",\n    \"isInterestRecalculationEnabled\": false,\n    \"accountingRule\": 1,\n    \"charges\": [\n      {\n        \"id\": 12\n      }\n    ]\n  },\n  \"lmsConfig\": {\n    \"productClass\": \"COVERED_CONSUMER\",\n    \"aprEnabled\": true,\n    \"aprRounding\": \"NEAREST_0_01_PERCENT_HALF_UP\",\n    \"aprTolerancePolicy\": \"REGULAR\",\n    \"statementEnabled\": true,\n    \"statementLeadDays\": 10\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Loans",
      "description": "Loan applications, lifecycle commands, embedded schedules, and the servicing summary read model with payoff and APR.",
      "item": [
        {
          "name": "List loans",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loans",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans"
              ]
            },
            "description": "Lists loans with native offset paging. The envelope is totalFilteredRecords plus pageItems.\n\nRequired permission: READ_LOAN."
          },
          "response": []
        },
        {
          "name": "Create a loan application",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans"
              ]
            },
            "description": "Creates a loan application for a customer against an active product; the clientId is the numeric value of the LendEasy customerId. Dates are parsed with the supplied dateFormat and locale. With command=calculateLoanSchedule the same body returns the computed amortization schedule — periods and totals — without persisting anything, which is how schedules are previewed before origination.\n\nRequired permission: CREATE_LOAN.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"clientId\": 412,\n  \"productId\": 3,\n  \"loanType\": \"individual\",\n  \"principal\": 8400,\n  \"loanTermFrequency\": 18,\n  \"loanTermFrequencyType\": 2,\n  \"numberOfRepayments\": 18,\n  \"repaymentEvery\": 1,\n  \"repaymentFrequencyType\": 2,\n  \"interestRatePerPeriod\": 13.25,\n  \"interestType\": 0,\n  \"interestCalculationPeriodType\": 1,\n  \"amortizationType\": 1,\n  \"transactionProcessingStrategyCode\": \"advanced-payment-allocation-strategy\",\n  \"expectedDisbursementDate\": \"2026-08-12\",\n  \"submittedOnDate\": \"2026-08-11\",\n  \"externalId\": \"origination-HBR-2026-001\",\n  \"dateFormat\": \"yyyy-MM-dd\",\n  \"locale\": \"en\",\n  \"charges\": [\n    {\n      \"chargeId\": 12,\n      \"amount\": 252\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve a loan",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}"
              ]
            },
            "description": "Returns the full loan model. The associations parameter selects embedded relations — repaymentSchedule, transactions, charges, or all — so the authoritative repayment schedule is read here rather than from a separate route; exclude and fields trim the response.\n\nRequired permission: READ_LOAN."
          },
          "response": []
        },
        {
          "name": "Approve, reject, withdraw, or terminate a loan",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}"
              ]
            },
            "description": "Executes a lifecycle command selected by the command parameter: approve (approvedOnDate, optional approvedLoanAmount and expectedDisbursementDate), reject (rejectedOnDate), withdrawnByApplicant (withdrawnOnDate), and the governed contractTermination and undoContractTermination. Governed commands require a LendEasy-Case header when case management is enabled, and maker-checker may park the command for a second approver. Disbursement has no public command — money moves through the funding API.\n\nRequired permission: APPROVE_LOAN | REJECT_LOAN | WITHDRAW_LOAN | CONTRACT_TERMINATION_LOAN.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"approvedOnDate\": \"2026-08-11\",\n  \"approvedLoanAmount\": 8400,\n  \"expectedDisbursementDate\": \"2026-08-12\",\n  \"dateFormat\": \"yyyy-MM-dd\",\n  \"locale\": \"en\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Update a submitted application",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}"
              ]
            },
            "description": "Modifies a loan application while it is still submitted and pending approval, accepting the same field catalog as creation. With command=markAsFraud — a governed variant carrying a body of fraud true or false — the route instead toggles the loan’s fraud flag.\n\nRequired permission: UPDATE_LOAN.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"principal\": 8400,\n  \"expectedDisbursementDate\": \"2026-08-12\",\n  \"dateFormat\": \"yyyy-MM-dd\",\n  \"locale\": \"en\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve a loan summary",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/summary",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "summary"
              ]
            },
            "description": "Returns the servicing read model in one call: balances, overdue components, the payoff projection, the APR disclosure, the latest statement, in-flight payments, open action requests, autopay state, and active restrictions. The payoff block is computed for payoffGoodThroughDate — or the current business date when omitted — with no ledger effect; there is no separate payoff-quote or APR route.\n\nRequired permission: READ_LMS_LOAN_SUMMARY."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Payments",
      "description": "Loan payment intents from creation through rail submission, posting, and provider-driven returns.",
      "item": [
        {
          "name": "List loan payments",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/payments",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "payments"
              ]
            },
            "description": "Lists payment intents for the loan with status, rail, source, and return metadata when present.\n\nRequired permission: READ_LMS_PAYMENT."
          },
          "response": []
        },
        {
          "name": "Create a payment",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/payments",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "payments"
              ]
            },
            "description": "Creates a payment intent against a verified, borrower-owned instrument and submits it to the selected rail. The amount plus other in-flight intents may not exceed the loan’s total outstanding, and PAYMENT_HOLD restrictions block creation. Reusing an Idempotency-Key with a different payload fails with a fingerprint mismatch.\n\nRequired permission: CREATE_LMS_PAYMENT.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"instrumentId\": 704,\n  \"amount\": \"517.14\",\n  \"currency\": \"USD\",\n  \"rail\": \"ACH\",\n  \"effectiveDate\": \"2026-09-12\",\n  \"source\": \"BORROWER\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Record an external payment",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/payments/record-external",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "payments",
                "record-external"
              ]
            },
            "description": "Records money received outside LendEasy — lockbox, wire, import — without calling a payment rail. STAFF-sourced records require an evidence reference; a rationale is always required. Set postToFineract to false to record without posting, leaving the intent in RECORDED_EXTERNAL for reconciliation.\n\nRequired permission: RECORD_LMS_EXTERNAL_PAYMENT.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": \"260.00\",\n  \"currency\": \"USD\",\n  \"effectiveDate\": \"2027-05-08\",\n  \"externalRecordRef\": \"lockbox-20270508-881\",\n  \"source\": \"STAFF\",\n  \"evidenceRef\": \"evd_LOCKBOX_8\",\n  \"rationale\": \"Lockbox batch 881 posting.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve a payment",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/payments/{{paymentId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "payments",
                "{{paymentId}}"
              ]
            },
            "description": "Returns the payment intent with its state timeline. Returned payments carry the return code, returned amount, and any scheduled retry; retries are new intents linked through retryRootPaymentId.\n\nRequired permission: READ_LMS_PAYMENT."
          },
          "response": []
        },
        {
          "name": "Download a payment receipt",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/payments/{{paymentId}}/receipt",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "payments",
                "{{paymentId}}",
                "receipt"
              ]
            },
            "description": "Returns the receipt PDF for a POSTED payment as an attachment. Requesting a receipt for any other status fails validation; a later return does not alter an issued receipt.\n\nRequired permission: READ_LMS_PAYMENT."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Autopay",
      "description": "Single current enrollment per loan, Regulation E authorization, and per-rail failure policies.",
      "item": [
        {
          "name": "Retrieve autopay enrollment",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/autopay",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "autopay"
              ]
            },
            "description": "Returns the current enrollment: status, masked instrument, policies, authorization reference, and failure count. Loans with no enrollment return 404.\n\nRequired permission: READ_LMS_AUTOPAY."
          },
          "response": []
        },
        {
          "name": "Enroll in autopay",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/autopay",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "autopay"
              ]
            },
            "description": "Creates the loan’s single current enrollment from a verified instrument, timing policy, and amount policy. A Regulation E authorization reference is required to activate. FULL_DUE enrollments must leave enough statement lead time for the ten-day advance notice.\n\nRequired permission: ENROLL_LMS_AUTOPAY.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"instrumentId\": 704,\n  \"authorizationRef\": \"evd_JUN_AP_73\",\n  \"timingPolicy\": {\n    \"initiateDaysBeforeDue\": 0,\n    \"businessDayConvention\": \"FOLLOWING\"\n  },\n  \"amountPolicy\": {\n    \"type\": \"FULL_DUE\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Pause autopay",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/autopay/pause",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "autopay",
                "pause"
              ]
            },
            "description": "Pauses an ACTIVE enrollment. Requires a reason code from the closed catalog; a request that would repeat the current state is a successful no-op.\n\nRequired permission: PAUSE_LMS_AUTOPAY.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reasonCode\": \"BORROWER_REQUEST\",\n  \"comment\": \"Requested via secure message.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Resume autopay",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/autopay/resume",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "autopay",
                "resume"
              ]
            },
            "description": "Resumes a PAUSED or REVIEW_REQUIRED enrollment, clearing the review reason and failure count. Requires a reason code from the closed catalog; a request that would repeat the current state is a successful no-op.\n\nRequired permission: RESUME_LMS_AUTOPAY.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reasonCode\": \"BORROWER_REQUEST\",\n  \"comment\": \"Borrower reauthorized after account change.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Cancel autopay",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/autopay/cancel",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "autopay",
                "cancel"
              ]
            },
            "description": "Cancels the enrollment from any state and cancels its pending unsubmitted payment intents; Regulation E treats this as revocation. Requires a reason code from the closed catalog; a request that would repeat the current state is a successful no-op.\n\nRequired permission: CANCEL_LMS_AUTOPAY.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reasonCode\": \"BORROWER_REQUEST\",\n  \"comment\": \"Requested via secure message.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "List autopay failure policies",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/autopay/failure-policies",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "autopay",
                "failure-policies"
              ]
            },
            "description": "Returns the tenant’s per-rail failure policy, including retry rules and per-return-code overrides. Unknown return codes always fail closed into review.\n\nRequired permission: READ_LMS_AUTOPAY_FAILURE_POLICY."
          },
          "response": []
        },
        {
          "name": "Configure an autopay failure policy",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/autopay/failure-policies/{{rail}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "autopay",
                "failure-policies",
                "{{rail}}"
              ]
            },
            "description": "Replaces the full policy for one rail — base retry rules and the complete return-code list. The rail path segment is ACH or CARD.\n\nRequired permission: CONFIGURE_LMS_AUTOPAY_FAILURE_POLICY.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"automaticRetry\": true,\n  \"retryAfterBusinessDays\": 2,\n  \"maxRetryAttempts\": 2,\n  \"maxConsecutiveFailedCycles\": 3,\n  \"runNextScheduledCycle\": true,\n  \"exhaustionAction\": \"REVIEW_REQUIRED\",\n  \"returnCodes\": [\n    {\n      \"returnCode\": \"R01\",\n      \"retryAllowed\": true,\n      \"instrumentAction\": \"KEEP\",\n      \"autopayAction\": \"CONTINUE\",\n      \"caseAction\": \"NONE\",\n      \"recommendedAction\": \"NONE\",\n      \"treatAsUnauthorized\": false\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Funding",
      "description": "Approval-gated disbursements and outbound refunds to verified recipients.",
      "item": [
        {
          "name": "List loan fundings",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/fundings",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "fundings"
              ]
            },
            "description": "Lists the loan’s fundings, newest first.\n\nRequired permission: READ_LMS_FUNDING."
          },
          "response": []
        },
        {
          "name": "Create a funding",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/fundings",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "fundings"
              ]
            },
            "description": "Creates an outbound payout — a DISBURSEMENT for an approved loan or a REFUND — to a verified borrower or external-party instrument. Every funding starts in APPROVAL_REQUIRED; a different user must approve before submission. DISBURSEMENT_HOLD restrictions block creation.\n\nRequired permission: CREATE_LMS_FUNDING.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": \"8400.00\",\n  \"currency\": \"USD\",\n  \"fundingType\": \"DISBURSEMENT\",\n  \"recipientType\": \"BORROWER\",\n  \"recipientRef\": \"412\",\n  \"instrumentId\": 705,\n  \"rail\": \"ACH\",\n  \"reason\": \"Initial disbursement for approved loan.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Record external funding",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/fundings/record-external",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "fundings",
                "record-external"
              ]
            },
            "description": "Records a payout made outside LendEasy — for example a treasury wire — with an external record reference. No instrument or rail is involved and no money moves; the record enters reconciliation as RECORDED_EXTERNAL.\n\nRequired permission: CREATE_LMS_FUNDING.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": \"8400.00\",\n  \"currency\": \"USD\",\n  \"fundingType\": \"DISBURSEMENT\",\n  \"recipientType\": \"BORROWER\",\n  \"recipientRef\": \"412\",\n  \"externalRecordRef\": \"wire-20260812-881\",\n  \"reason\": \"Disbursed by treasury wire.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve a funding",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/fundings/{{fundingId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "fundings",
                "{{fundingId}}"
              ]
            },
            "description": "Returns the funding with its status, recipient, rail, posted transaction reference, and failure reason when present.\n\nRequired permission: READ_LMS_FUNDING."
          },
          "response": []
        },
        {
          "name": "Approve a funding",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/fundings/{{fundingId}}/approve",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "fundings",
                "{{fundingId}}",
                "approve"
              ]
            },
            "description": "Approves a funding in APPROVAL_REQUIRED. The creator can never approve their own funding; approval releases it for value-dated submission to the rail.\n\nRequired permission: APPROVE_LMS_FUNDING."
          },
          "response": []
        },
        {
          "name": "Reject a funding",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/fundings/{{fundingId}}/reject",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "fundings",
                "{{fundingId}}",
                "reject"
              ]
            },
            "description": "Rejects a funding awaiting approval with a required reason code.\n\nRequired permission: APPROVE_LMS_FUNDING.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reasonCode\": \"AMOUNT_INCORRECT\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Cancel a funding",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/fundings/{{fundingId}}/cancel",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "fundings",
                "{{fundingId}}",
                "cancel"
              ]
            },
            "description": "Cancels a funding before money movement — while CREATED, VALIDATED, APPROVAL_REQUIRED, or APPROVED. After submission the funding can no longer be cancelled; cancelling an already-cancelled funding is a no-op.\n\nRequired permission: CREATE_LMS_FUNDING.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reasonCode\": \"OPERATOR_REQUEST\",\n  \"comment\": \"Recreating with corrected amount.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Statements",
      "description": "Job-generated due-date statements with governed regeneration and PDF download.",
      "item": [
        {
          "name": "List loan statements",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/statements",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "statements"
              ]
            },
            "description": "Lists the loan’s statements, newest due date first. Statements are generated by the scheduled statement job at the product’s lead time; there is no public generate operation. Superseded versions remain listed.\n\nRequired permission: READ_LMS_STATEMENT."
          },
          "response": []
        },
        {
          "name": "Download a statement",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/statements/{{statementId}}/download",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "statements",
                "{{statementId}}",
                "download"
              ]
            },
            "description": "Streams the statement PDF as an attachment. Only COMPLETED statements are downloadable.\n\nRequired permission: READ_LMS_STATEMENT."
          },
          "response": []
        },
        {
          "name": "Regenerate a statement",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/statements/{{statementId}}/regenerate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "statements",
                "{{statementId}}",
                "regenerate"
              ]
            },
            "description": "Creates a corrected replacement for a COMPLETED statement with a closed reason code — SOURCE_DATA_CORRECTION, TEMPLATE_CORRECTION, COMPLIANCE_CORRECTION, OPERATIONAL_RECOVERY, or OTHER (comment required). The source statement becomes SUPERSEDED only when the replacement completes.\n\nRequired permission: REGENERATE_LMS_STATEMENT.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reasonCode\": \"SOURCE_DATA_CORRECTION\",\n  \"comment\": \"Reflects the corrected 2026-09-12 payment allocation.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Accounting",
      "description": "Balanced journal entries and the chart of accounts.",
      "item": [
        {
          "name": "List journal entries",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/journalentries",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "journalentries"
              ]
            },
            "description": "Lists balanced ledger entries by account, office, loan, transaction, date range, and manual-entry flag, using the native totalFilteredRecords envelope.\n\nRequired permission: READ_JOURNALENTRY."
          },
          "response": []
        },
        {
          "name": "Create a manual journal entry",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/journalentries",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "journalentries"
              ]
            },
            "description": "Posts a balanced manual journal entry with matching debit and credit lines. This route is restricted to accounting administrators; loan-servicing money movement never posts manual entries.\n\nRequired permission: CREATE_JOURNALENTRY.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"officeId\": 1,\n  \"transactionDate\": \"2026-09-30\",\n  \"currencyCode\": \"USD\",\n  \"comments\": \"Monthly accrual adjustment.\",\n  \"debits\": [\n    {\n      \"glAccountId\": 22,\n      \"amount\": 120\n    }\n  ],\n  \"credits\": [\n    {\n      \"glAccountId\": 14,\n      \"amount\": 120\n    }\n  ],\n  \"dateFormat\": \"yyyy-MM-dd\",\n  \"locale\": \"en\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "List ledger accounts",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/glaccounts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "glaccounts"
              ]
            },
            "description": "Returns the chart of accounts with type, usage, and activation.\n\nRequired permission: READ_GLACCOUNT."
          },
          "response": []
        },
        {
          "name": "Retrieve a ledger account",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/glaccounts/{{id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "glaccounts",
                "{{id}}"
              ]
            },
            "description": "Returns one ledger account.\n\nRequired permission: READ_GLACCOUNT."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Charges",
      "description": "Charge definitions with immutable Regulation Z classification, and governed loan-charge commands.",
      "item": [
        {
          "name": "List charge definitions",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/charges",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "charges"
              ]
            },
            "description": "Returns loan charge definitions with their LendEasy classification. Definitions without a classification are reported as configurationStatus MISSING and cannot be attached to products or loans.\n\nRequired permission: READ_LMS_CHARGE."
          },
          "response": []
        },
        {
          "name": "Create a charge definition",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/charges",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "charges"
              ]
            },
            "description": "Creates a loan charge definition and its required LendEasy classification atomically. The body has two blocks: the native charge settings and lmsConfig with the Regulation Z finance-charge flag and legal basis.\n\nRequired permission: CREATE_LMS_CHARGE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"fineract\": {\n    \"name\": \"Late fee\",\n    \"currencyCode\": \"USD\",\n    \"amount\": 18,\n    \"chargeAppliesTo\": 1,\n    \"chargeTimeType\": 9,\n    \"chargeCalculationType\": 1,\n    \"penalty\": true,\n    \"active\": true\n  },\n  \"lmsConfig\": {\n    \"financeChargeFlag\": \"EXCLUDED\",\n    \"legalBasis\": \"CA Fin. Code §22307\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve the charge template",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/charges/template",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "charges",
                "template"
              ]
            },
            "description": "Returns the option catalogs for creating a charge definition, including the LendEasy finance-charge classification options.\n\nRequired permission: READ_LMS_CHARGE."
          },
          "response": []
        },
        {
          "name": "Retrieve a charge definition",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/charges/{{chargeId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "charges",
                "{{chargeId}}"
              ]
            },
            "description": "Returns one charge definition with its LendEasy classification.\n\nRequired permission: READ_LMS_CHARGE."
          },
          "response": []
        },
        {
          "name": "Update a charge definition",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/charges/{{chargeId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "charges",
                "{{chargeId}}"
              ]
            },
            "description": "Replaces the charge definition aggregate. The finance-charge classification is immutable once set — only the legal basis may be corrected; APR treatment never changes retroactively.\n\nRequired permission: UPDATE_LMS_CHARGE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"fineract\": {\n    \"name\": \"Late fee\",\n    \"currencyCode\": \"USD\",\n    \"amount\": 20,\n    \"chargeAppliesTo\": 1,\n    \"chargeTimeType\": 9,\n    \"chargeCalculationType\": 1,\n    \"penalty\": true,\n    \"active\": true\n  },\n  \"lmsConfig\": {\n    \"financeChargeFlag\": \"EXCLUDED\",\n    \"legalBasis\": \"CA Fin. Code §22307\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "List loan charges",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/charges",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "charges"
              ]
            },
            "description": "Lists charges applied to the loan with assessed, paid, waived, and outstanding amounts.\n\nRequired permission: READ_LOANCHARGE."
          },
          "response": []
        },
        {
          "name": "Add a loan charge",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/charges",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "charges"
              ]
            },
            "description": "Applies a configured charge definition to the loan — a governed command requiring a LendEasy-Case header for human servicing calls when case management is enabled. Automated fees such as returned-payment fees are assessed by the system, not through this route.\n\nRequired permission: CREATE_LOANCHARGE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"chargeId\": 21,\n  \"amount\": 18,\n  \"dueDate\": \"2027-04-10\",\n  \"dateFormat\": \"yyyy-MM-dd\",\n  \"locale\": \"en\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve the loan-charge template",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/charges/template",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "charges",
                "template"
              ]
            },
            "description": "Returns the applicable charge options for adding a charge to this loan.\n\nRequired permission: READ_LOANCHARGE."
          },
          "response": []
        },
        {
          "name": "Retrieve a loan charge",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/charges/{{loanChargeId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "charges",
                "{{loanChargeId}}"
              ]
            },
            "description": "Returns one applied charge with its amounts and lifecycle flags.\n\nRequired permission: READ_LOANCHARGE."
          },
          "response": []
        },
        {
          "name": "Waive or adjust a loan charge",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/charges/{{loanChargeId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "charges",
                "{{loanChargeId}}"
              ]
            },
            "description": "Executes a governed charge command selected by the command parameter: waive forgives the outstanding amount, and adjustment corrects an assessed amount with a transaction date. Requires a LendEasy-Case header for human servicing calls when case management is enabled.\n\nRequired permission: WAIVE_LOANCHARGE | ADJUSTMENT_LOANCHARGE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": 18,\n  \"transactionDate\": \"2027-04-15\",\n  \"dateFormat\": \"yyyy-MM-dd\",\n  \"locale\": \"en\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Update a loan charge",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/charges/{{loanChargeId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "charges",
                "{{loanChargeId}}"
              ]
            },
            "description": "Updates the amount or due date of an applied charge before financial dependencies exist — a governed command.\n\nRequired permission: UPDATE_LOANCHARGE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": 20,\n  \"dueDate\": \"2027-04-11\",\n  \"dateFormat\": \"yyyy-MM-dd\",\n  \"locale\": \"en\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Remove a loan charge",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/charges/{{loanChargeId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "charges",
                "{{loanChargeId}}"
              ]
            },
            "description": "Removes an unapplied charge from the loan with no request body — a governed command. Assessed charges are waived or adjusted instead.\n\nRequired permission: DELETE_LOANCHARGE."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Servicing actions",
      "description": "Governed loan commands under case governance and maker-checker, reschedules, interest pauses, and the governance ledger.",
      "item": [
        {
          "name": "List loan governance records",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/governance-records",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "governance-records"
              ]
            },
            "description": "Returns the governance ledger for governed commands executed against the loan: who acted, under which case or system context, through which route, newest first.\n\nRequired permission: READ_LMS_GOVERNANCE."
          },
          "response": []
        },
        {
          "name": "List customer governance records",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/governance-records",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "governance-records"
              ]
            },
            "description": "Returns the governance ledger for governed commands executed against the customer, newest first.\n\nRequired permission: READ_LMS_GOVERNANCE."
          },
          "response": []
        },
        {
          "name": "Execute a governed transaction command",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/transactions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "transactions"
              ]
            },
            "description": "Executes one of 19 governed transaction commands selected by the command parameter — interest waivers, write-off and charge-off with their undos, close, foreclosure, refunds and credits, recovery payment, re-age, and re-amortize. Human servicing calls require a LendEasy-Case header naming an open case for this borrower when case management is enabled; each execution writes a governance record and maker-checker may park the command for a second approver. Repayments and disbursements are not accepted here — money moves through the payment and funding APIs.\n\nRequired permission: Per command (native permission, maker-checker configurable).",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"transactionDate\": \"2027-08-20\",\n  \"transactionAmount\": 92.75,\n  \"note\": \"Hardship interest waiver per case plan.\",\n  \"dateFormat\": \"yyyy-MM-dd\",\n  \"locale\": \"en\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve a transaction template",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/transactions/template",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "transactions",
                "template"
              ]
            },
            "description": "Returns the prefilled amounts and option catalogs for a prospective transaction; command selects the disburse or repayment template used by operator interfaces.\n\nRequired permission: READ_LOANTRANSACTION."
          },
          "response": []
        },
        {
          "name": "Retrieve a loan transaction",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/transactions/{{transactionId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "transactions",
                "{{transactionId}}"
              ]
            },
            "description": "Returns one ledger transaction with its type, amounts, allocation components, and reversal state.\n\nRequired permission: READ_LOANTRANSACTION."
          },
          "response": []
        },
        {
          "name": "List interest pauses",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/interest-pauses",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "interest-pauses"
              ]
            },
            "description": "Returns the loan’s interest-pause periods.\n\nRequired permission: READ_INTEREST_PAUSE."
          },
          "response": []
        },
        {
          "name": "Pause interest accrual",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/interest-pauses",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "interest-pauses"
              ]
            },
            "description": "Creates a governed interest-free period between two dates, typically as hardship relief. Requires a LendEasy-Case header for human servicing calls when case management is enabled.\n\nRequired permission: CREATE_INTEREST_PAUSE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"startDate\": \"2027-08-01\",\n  \"endDate\": \"2027-10-31\",\n  \"dateFormat\": \"yyyy-MM-dd\",\n  \"locale\": \"en\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Update an interest pause",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/interest-pauses/{{variationId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "interest-pauses",
                "{{variationId}}"
              ]
            },
            "description": "Adjusts the dates of an interest-pause period.\n\nRequired permission: UPDATE_INTEREST_PAUSE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"startDate\": \"2027-08-01\",\n  \"endDate\": \"2027-11-30\",\n  \"dateFormat\": \"yyyy-MM-dd\",\n  \"locale\": \"en\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Remove an interest pause",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/loans/{{loanId}}/interest-pauses/{{variationId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "loans",
                "{{loanId}}",
                "interest-pauses",
                "{{variationId}}"
              ]
            },
            "description": "Removes an interest-pause period with no request body.\n\nRequired permission: DELETE_INTEREST_PAUSE."
          },
          "response": []
        },
        {
          "name": "List reschedule requests",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/rescheduleloans",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "rescheduleloans"
              ]
            },
            "description": "Lists loan reschedule requests and their approval state.\n\nRequired permission: READ_RESCHEDULELOAN."
          },
          "response": []
        },
        {
          "name": "Request a reschedule",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/rescheduleloans",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "rescheduleloans"
              ]
            },
            "description": "Creates a governed reschedule request — grace periods, extra terms, a new interest rate, an adjusted due date, or a recurring moratorium — effective from rescheduleFromDate. The request does not change the schedule until a different user approves it.\n\nRequired permission: CREATE_RESCHEDULELOAN.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"loanId\": 7204,\n  \"rescheduleFromDate\": \"2027-09-01\",\n  \"rescheduleReasonId\": 61,\n  \"submittedOnDate\": \"2027-08-20\",\n  \"graceOnPrincipal\": 2,\n  \"recalculateInterest\": true,\n  \"rescheduleReasonComment\": \"Temporary income reduction.\",\n  \"dateFormat\": \"yyyy-MM-dd\",\n  \"locale\": \"en\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve the reschedule template",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/rescheduleloans/template",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "rescheduleloans",
                "template"
              ]
            },
            "description": "Returns the reason-code catalog for creating a reschedule request.\n\nRequired permission: READ_RESCHEDULELOAN."
          },
          "response": []
        },
        {
          "name": "Retrieve a reschedule request",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/rescheduleloans/{{scheduleId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "rescheduleloans",
                "{{scheduleId}}"
              ]
            },
            "description": "Returns one reschedule request with its proposed changes and decision state.\n\nRequired permission: READ_RESCHEDULELOAN."
          },
          "response": []
        },
        {
          "name": "Approve or reject a reschedule",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/rescheduleloans/{{scheduleId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "rescheduleloans",
                "{{scheduleId}}"
              ]
            },
            "description": "Approves or rejects a pending reschedule request. Approval is the second-person control — the approver must differ from the requester — and applies the schedule change; it retains the originating governance linkage and takes no new LendEasy-Case header.\n\nRequired permission: APPROVE_RESCHEDULELOAN | REJECT_RESCHEDULELOAN.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"approvedOnDate\": \"2027-08-21\",\n  \"dateFormat\": \"yyyy-MM-dd\",\n  \"locale\": \"en\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "List commands awaiting approval",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/makercheckers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "makercheckers"
              ]
            },
            "description": "Returns the checker inbox: governed commands parked by maker-checker and awaiting a second approver.\n\nRequired permission: READ_MAKERCHECKER."
          },
          "response": []
        },
        {
          "name": "Approve or reject a parked command",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/makercheckers/{{auditId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "makercheckers",
                "{{auditId}}"
              ]
            },
            "description": "Completes maker-checker for one parked command. The decider must be a different user holding the command’s checker permission; approval executes the original command and completes its governance record.\n\nRequired permission: Per command checker permission."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Restrictions",
      "description": "Customer- and loan-scoped holds enforced at execution time.",
      "item": [
        {
          "name": "List customer restrictions",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/restrictions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "restrictions"
              ]
            },
            "description": "Returns the customer’s restrictions, newest first, including cleared rows with their clearedAt time.\n\nRequired permission: READ_LMS_CUSTOMER."
          },
          "response": []
        },
        {
          "name": "Apply a restriction",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/restrictions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "restrictions"
              ]
            },
            "description": "Applies a typed hold at customer scope, or loan scope when loanRef is supplied. The server derives the effective time; applying an already-active restriction of the same type and scope is idempotent. AUTOPAY_HOLD and COLLECTIONS_HOLD pause affected autopay enrollments in the same transaction.\n\nRequired permission: APPLY_LMS_RESTRICTION.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"restrictionType\": \"PAYMENT_HOLD\",\n  \"loanRef\": \"7204\",\n  \"source\": \"bankruptcy-notice-91\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Clear a restriction",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/customers/{{customerId}}/restrictions/{{restrictionId}}/clear",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "customers",
                "{{customerId}}",
                "restrictions",
                "{{restrictionId}}",
                "clear"
              ]
            },
            "description": "Clears the restriction with no request body; the server records who cleared it and when. The applied interval remains in history and governance records.\n\nRequired permission: APPLY_LMS_RESTRICTION."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Reconciliation",
      "description": "Exceptions between provider events, money intents, and the ledger, with CSV export.",
      "item": [
        {
          "name": "List reconciliation exceptions",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/recon-exceptions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "recon-exceptions"
              ]
            },
            "description": "Lists differences between provider events, payment and funding intents, and the ledger. Exception types include stuck-before-submit, settled-not-posted, recorded-not-posted, return-needs-review, duplicate-reference, and record-mismatch checks.\n\nRequired permission: READ_LMS_RECONCILIATION."
          },
          "response": []
        },
        {
          "name": "Retrieve a reconciliation exception",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/recon-exceptions/{{exceptionId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "recon-exceptions",
                "{{exceptionId}}"
              ]
            },
            "description": "Returns the exception with its target reference, structured detail, and resolution note when resolved.\n\nRequired permission: READ_LMS_RECONCILIATION."
          },
          "response": []
        },
        {
          "name": "Update exception status",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/recon-exceptions/{{exceptionId}}/status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "recon-exceptions",
                "{{exceptionId}}",
                "status"
              ]
            },
            "description": "Moves the exception between open, in_review, resolved, and exported. Resolving requires a note explaining the outcome; the route records workflow state and never performs financial repair itself.\n\nRequired permission: RESOLVE_LMS_RECON_EXCEPTION.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"resolved\",\n  \"note\": \"Ledger post repaired from provider settlement evidence.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Export reconciliation exceptions",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/recon-exceptions/export",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "recon-exceptions",
                "export"
              ]
            },
            "description": "Downloads unresolved exceptions as a CSV attachment and marks exported open rows as exported.\n\nRequired permission: READ_LMS_RECONCILIATION."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Merchant advances",
      "description": "Receivables purchases, sales reports, remittances, projections, and breach monitoring.",
      "item": [
        {
          "name": "List merchant advances",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/merchant-advances",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "merchant-advances"
              ]
            },
            "description": "Lists advances by merchant, product, state, breach status, and reporting freshness.\n\nRequired permission: READ_MERCHANT_ADVANCE."
          },
          "response": []
        },
        {
          "name": "Create a merchant advance",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/merchant-advances",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "merchant-advances"
              ]
            },
            "description": "Creates a receivables-purchase application with explicit purchase price, purchased amount, sales remittance, and reporting terms.\n\nRequired permission: CREATE_MERCHANT_ADVANCE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"merchantId\": \"party_NORTHSTAR_4\",\n  \"productId\": \"prod_MERCHANT_ADVANCE_1\",\n  \"externalId\": \"northstar-advance-2026\",\n  \"terms\": {\n    \"purchasePrice\": \"48000.00\",\n    \"purchasedAmount\": \"60000.00\",\n    \"currency\": \"USD\",\n    \"remittanceRate\": \"0.12\",\n    \"reportingFrequency\": \"daily\",\n    \"expectedMonthlySales\": \"50000.00\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve a merchant advance",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/merchant-advances/{{advanceId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "merchant-advances",
                "{{advanceId}}"
              ]
            },
            "description": "Returns agreement terms, balance, sales/remittance summary, projection, and breach state.\n\nRequired permission: READ_MERCHANT_ADVANCE."
          },
          "response": []
        },
        {
          "name": "Update a submitted merchant advance",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/merchant-advances/{{advanceId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "merchant-advances",
                "{{advanceId}}"
              ]
            },
            "description": "Updates proposed terms before approval and regenerates projections.\n\nRequired permission: UPDATE_MERCHANT_ADVANCE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"terms\": {\n    \"purchasePrice\": \"48000.00\",\n    \"purchasedAmount\": \"60000.00\",\n    \"remittanceRate\": \"0.12\"\n  },\n  \"expectedVersion\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Approve a merchant advance",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/merchant-advances/{{advanceId}}/approve",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "merchant-advances",
                "{{advanceId}}",
                "approve"
              ]
            },
            "description": "Approve a merchant advance with a versioned commercial decision and reasons.\n\nRequired permission: DECIDE_MERCHANT_ADVANCE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"approvedOn\": \"2026-09-03\",\n  \"approvedPurchasePrice\": \"48000.00\",\n  \"decisionId\": \"decision_NORTHSTAR_4\",\n  \"expectedVersion\": 2\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Reject a merchant advance",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/merchant-advances/{{advanceId}}/reject",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "merchant-advances",
                "{{advanceId}}",
                "reject"
              ]
            },
            "description": "Reject a merchant advance with a versioned commercial decision and reasons.\n\nRequired permission: DECIDE_MERCHANT_ADVANCE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reasonCodes\": [\n    \"merchant_request\"\n  ],\n  \"expectedVersion\": 2\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Withdraw a merchant advance",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/merchant-advances/{{advanceId}}/withdraw",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "merchant-advances",
                "{{advanceId}}",
                "withdraw"
              ]
            },
            "description": "Withdraw a merchant advance with a versioned commercial decision and reasons.\n\nRequired permission: DECIDE_MERCHANT_ADVANCE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reasonCodes\": [\n    \"merchant_request\"\n  ],\n  \"expectedVersion\": 2\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Fund a merchant advance",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/merchant-advances/{{advanceId}}/funding-intents",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "merchant-advances",
                "{{advanceId}}",
                "funding-intents"
              ]
            },
            "description": "Creates the purchase-price payout to the verified merchant and activates only after posting.\n\nRequired permission: CREATE_FUNDING.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"amount\": \"48000.00\",\n  \"currency\": \"USD\",\n  \"paymentInstrumentId\": \"pi_NORTHSTAR_BANK_1\",\n  \"rail\": \"ach_credit\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "List merchant sales reports",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/merchant-advances/{{advanceId}}/sales-reports",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "merchant-advances",
                "{{advanceId}}",
                "sales-reports"
              ]
            },
            "description": "Lists reports, source freshness, adjustments, remittance calculations, and reconciliation.\n\nRequired permission: READ_MERCHANT_ADVANCE."
          },
          "response": []
        },
        {
          "name": "Record a merchant sales report",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/merchant-advances/{{advanceId}}/sales-reports",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "merchant-advances",
                "{{advanceId}}",
                "sales-reports"
              ]
            },
            "description": "Records verified settled sales, calculates remittance, and does not reduce balance until money posts.\n\nRequired permission: CREATE_MERCHANT_REPORT.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"periodStart\": \"2026-09-08\",\n  \"periodEnd\": \"2026-09-09\",\n  \"currency\": \"USD\",\n  \"settledSales\": \"11875.40\",\n  \"source\": \"processor_report\",\n  \"sourceReference\": \"settlement_884210\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "List merchant remittances",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/merchant-advances/{{advanceId}}/remittances",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "merchant-advances",
                "{{advanceId}}",
                "remittances"
              ]
            },
            "description": "Lists remittance intent, settlement, allocation, return, and reconciliation.\n\nRequired permission: READ_MERCHANT_ADVANCE."
          },
          "response": []
        },
        {
          "name": "Create a merchant remittance",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/merchant-advances/{{advanceId}}/remittances",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "merchant-advances",
                "{{advanceId}}",
                "remittances"
              ]
            },
            "description": "Initiates or records a sales-based remittance and posts balance only after settlement.\n\nRequired permission: CREATE_MERCHANT_REMITTANCE.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"salesReportIds\": [\n    \"msr_91DC\"\n  ],\n  \"amount\": \"1425.05\",\n  \"currency\": \"USD\",\n  \"paymentInstrumentId\": \"pi_NORTHSTAR_BANK_1\",\n  \"rail\": \"ach_debit\",\n  \"effectiveDate\": \"2026-09-10\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Retrieve remittance projection",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/merchant-advances/{{advanceId}}/projection",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "merchant-advances",
                "{{advanceId}}",
                "projection"
              ]
            },
            "description": "Returns a versioned forecast; projected dates are not contractual maturity promises.\n\nRequired permission: READ_MERCHANT_ADVANCE."
          },
          "response": []
        },
        {
          "name": "Retrieve merchant reconciliation",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/merchant-advances/{{advanceId}}/reconciliation",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "merchant-advances",
                "{{advanceId}}",
                "reconciliation"
              ]
            },
            "description": "Explains sales report, remittance, settlement, and balance differences by reporting period.\n\nRequired permission: READ_RECONCILIATION."
          },
          "response": []
        },
        {
          "name": "Evaluate merchant breach status",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/merchant-advances/{{advanceId}}/breach-evaluations",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "merchant-advances",
                "{{advanceId}}",
                "breach-evaluations"
              ]
            },
            "description": "Evaluates versioned near-breach and breach rules from fresh sales, reporting, remittance, and agreement facts.\n\nRequired permission: EVALUATE_MERCHANT_BREACH.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"asOf\": \"2026-10-01T08:00:00-07:00\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Reporting",
      "description": "The operational report-definition catalog.",
      "item": [
        {
          "name": "List report definitions",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/reports",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "reports"
              ]
            },
            "description": "Returns the operational report catalog with each report’s parameters. This surface is definition metadata; report execution and downloads are operator-side and are not part of the public API.\n\nRequired permission: READ_REPORT."
          },
          "response": []
        },
        {
          "name": "Retrieve a report definition",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/reports/{{id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "reports",
                "{{id}}"
              ]
            },
            "description": "Returns one report definition and its parameters.\n\nRequired permission: READ_REPORT."
          },
          "response": []
        }
      ]
    }
  ]
}