{
  "info": {
    "name": "Pioneer Loan Platform API",
    "description": "Official Postman collection for the Pioneer Loan Platform API. Set the `apiKey` collection variable to your pk_test_* (staging) or pk_live_* (production) key and point `baseUrl` at the matching environment — every request inherits collection-level bearer auth. Path variables (e.g. `:id`) are editable per request under the URL bar.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{apiKey}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.staging.pioneerft.com/api",
      "type": "string"
    },
    {
      "key": "apiKey",
      "value": "",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "Loans",
      "description": "Access and update loan data including details, summaries, status, and entities",
      "item": [
        {
          "name": "List loans",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "50",
                  "description": "type: number",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "type: number",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "type: string",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "draft",
                  "description": "type: string — one of: draft, application, active, denied, withdrawn, funded",
                  "disabled": true
                },
                {
                  "key": "productId",
                  "value": "",
                  "description": "type: string",
                  "disabled": true
                },
                {
                  "key": "sort",
                  "value": "createdAt",
                  "description": "type: string — one of: createdAt, centsAmount, status, loanNumber",
                  "disabled": true
                },
                {
                  "key": "order",
                  "value": "desc",
                  "description": "type: string — one of: asc, desc",
                  "disabled": true
                }
              ]
            },
            "description": "Retrieve a paginated list of loans. Supports filtering by status and product ID. Returns loan summary information without sensitive details."
          }
        },
        {
          "name": "List loans ready to board",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/boarding-queue",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                "boarding-queue"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "50",
                  "description": "type: number",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "type: number",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "type: string",
                  "disabled": true
                },
                {
                  "key": "boarded",
                  "value": "false",
                  "description": "type: string — one of: true, false",
                  "disabled": true
                },
                {
                  "key": "boardedSince",
                  "value": "",
                  "description": "type: string",
                  "disabled": true
                }
              ]
            },
            "description": "Loans a banker released to the core and nobody has boarded yet, oldest first. A loan reaches this queue only once a banker releases it — being funded is not enough on its own. Acknowledge a board with `POST /loans/{id}/boarding` and the loan leaves the queue, so a scheduled pull only ever returns work that is still outstanding: a board that failed on your side simply stays. Pass `boarded=true` (optionally with `boardedSince`) to reconcile instead — the loans already boarded."
          }
        },
        {
          "name": "Get loan details",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Retrieve detailed information about a specific loan by ID. Returns loan terms, amounts, dates, and status without exposing sensitive internal data."
          }
        },
        {
          "name": "Update a loan",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Update loan fields. Money is in whole cents (`centsAmount: 50000000` is $500,000.00) and rates in basis points (`bpsFixedRate: 525` is 5.25%). Only allowlisted fields can be updated — server-managed fields like status and stage are excluded.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"centsAmount\": 0,\n  \"bpsFixedRate\": 0,\n  \"bpsSpreadRate\": 0,\n  \"bpsPrimeRate\": 0,\n  \"rateType\": \"fixed\",\n  \"monthsTerm\": 0,\n  \"monthsInterestOnly\": 0,\n  \"paymentFrequency\": \"weekly\",\n  \"purpose\": \"\",\n  \"purposeNarrative\": \"\",\n  \"type\": \"business\",\n  \"loanNumber\": \"\",\n  \"productId\": \"\",\n  \"applicationDate\": \"\",\n  \"closeDate\": \"\",\n  \"firstPaymentDate\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Archive a loan",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Soft-delete a loan by setting its deletion timestamp. The loan will no longer appear in list results but can be restored by Pioneer support."
          }
        },
        {
          "name": "Get loan summary",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/:id/summary",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                ":id",
                "summary"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Retrieve a summary of a loan including key metrics like total amount, monthly payment, term, and activity status (open tasks, message activity). `hasMessages` reflects non-internal (customer/broker-visible) conversation only — internal banker threads are never exposed."
          }
        },
        {
          "name": "Get loan entities",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/:id/entities",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                ":id",
                "entities"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Retrieve businesses and people associated with a loan. Returns entity names, types, and roles. Sensitive data like full SSN/EIN is excluded (only last 4 digits shown)."
          }
        },
        {
          "name": "Search loans",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/search",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                "search"
              ]
            },
            "description": "Advanced loan search with complex filtering capabilities. Supports multiple status filters, date ranges, amount ranges (in whole cents), and custom sorting. Use this endpoint when you need more control than the basic list endpoint.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"filters\": {\n    \"status\": [\n      \"draft\"\n    ],\n    \"productIds\": [\n      \"\"\n    ],\n    \"centsAmountMin\": 0,\n    \"centsAmountMax\": 0,\n    \"dateRange\": {\n      \"from\": \"\",\n      \"to\": \"\"\n    }\n  },\n  \"pagination\": {\n    \"limit\": 50,\n    \"offset\": 0,\n    \"cursor\": \"\"\n  },\n  \"sort\": {\n    \"field\": \"createdAt\",\n    \"order\": \"desc\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Get loan status",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/:id/status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                ":id",
                "status"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Get a loan's current status and stage."
          }
        },
        {
          "name": "Get loan status timeline",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/:id/timeline",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                ":id",
                "timeline"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Get the loan's status-transition history (most recent first), sourced from the audit log."
          }
        },
        {
          "name": "Get a loan's boarding state",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/:id/boarding",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                ":id",
                "boarding"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Whether a banker released the loan to the core, who released it and when, and whether the core has acknowledged the board."
          }
        },
        {
          "name": "Acknowledge a board",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "",
                "description": "Optional opaque key (e.g. a UUID) to make this write safely retryable. A replay with the same key returns the original response instead of repeating the side effect. — type: string"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/:id/boarding",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                ":id",
                "boarding"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Record that the core boarded the loan. The loan leaves the boarding queue and the event is audited. Only a loan a banker released can be acknowledged — a loan that never reached the queue returns 400. Safe to repeat: a second call returns the boarding that already stands rather than overwriting it, so a retry after a lost response cannot rewrite when the core boarded the loan. Send `coreRecordNumber` to store the core’s own identifier for the loan on the Pioneer record.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"coreRecordNumber\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Tasks",
      "description": "Read a loan’s workflow approval tasks",
      "item": [
        {
          "name": "List loan tasks",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/:id/tasks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                ":id",
                "tasks"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "List the workflow tasks (submit / pre-approve / approve / re-submit steps) for a loan, with open/completed status. Read-only: tasks are completed automatically by the loan workflow/decision engine when the corresponding action occurs, not via a direct API write."
          }
        }
      ]
    },
    {
      "name": "Decisions",
      "description": "Read per-product underwriting decisions for a loan",
      "item": [
        {
          "name": "List underwriting decisions",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/:id/decisions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                ":id",
                "decisions"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "List the per-product underwriting decisions for a loan. Returns the verdict (approved/declined) and, for declines, the reason. Raw rule internals and applicant data are never exposed."
          }
        }
      ]
    },
    {
      "name": "Disbursements",
      "description": "List and manage loan disbursements (amounts in whole cents)",
      "item": [
        {
          "name": "List loan disbursements",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/:id/disbursements",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                ":id",
                "disbursements"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Retrieve the disbursements recorded against a loan, including amounts (in whole cents), recipients, payment methods, and status."
          }
        },
        {
          "name": "Create a disbursement",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "",
                "description": "Optional opaque key (e.g. a UUID) to make this write safely retryable. A replay with the same key returns the original response instead of repeating the side effect. — type: string"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/:id/disbursements",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                ":id",
                "disbursements"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Create a disbursement on a loan. `centsAmount` is in whole cents — 50000000 is $500,000.00.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"category\": \"borrower_proceeds\",\n  \"centsAmount\": 0,\n  \"recipientName\": \"\",\n  \"recipientType\": \"borrower\",\n  \"paymentMethod\": \"wire\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "List GL accounts",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/gl-accounts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "gl-accounts"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "50",
                  "description": "type: number",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "0",
                  "description": "type: number",
                  "disabled": true
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "type: string",
                  "disabled": true
                },
                {
                  "key": "includeInactive",
                  "value": "false",
                  "description": "type: boolean",
                  "disabled": true
                }
              ]
            },
            "description": "List the organization’s general-ledger accounts. Returns active accounts by default."
          }
        },
        {
          "name": "Update a disbursement",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "",
                "description": "Optional opaque key (e.g. a UUID) to make this write safely retryable. A replay with the same key returns the original response instead of repeating the side effect. — type: string"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/:loanId/disbursements/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                ":loanId",
                "disbursements",
                ":id"
              ],
              "variable": [
                {
                  "key": "loanId",
                  "value": "",
                  "description": "type: string"
                },
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Update an existing disbursement on a loan. Only the fields provided in the request body are changed; `centsAmount` is in whole cents.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"category\": \"borrower_proceeds\",\n  \"centsAmount\": 0,\n  \"recipientName\": \"\",\n  \"recipientType\": \"borrower\",\n  \"paymentMethod\": \"wire\",\n  \"status\": \"pending\",\n  \"notes\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Collateral",
      "description": "List and manage loan collateral (cents for money, basis points for rates)",
      "item": [
        {
          "name": "List loan collateral",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/:id/collateral",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                ":id",
                "collateral"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Retrieve the collateral items securing a loan, including descriptions, values (in whole cents), advance rate (in basis points), and types."
          }
        },
        {
          "name": "Add collateral to a loan",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "",
                "description": "Optional opaque key (e.g. a UUID) to make this write safely retryable. A replay with the same key returns the original response instead of repeating the side effect. — type: string"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/:id/collateral",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                ":id",
                "collateral"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Add collateral to a loan. Money is in whole cents and `bpsAdvanceRate` is in basis points (8500 = 85%).",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"description\": \"\",\n  \"category\": \"\",\n  \"centsMarketValue\": 0,\n  \"bpsAdvanceRate\": 0,\n  \"centsManualPriorLien\": 0,\n  \"ownerType\": \"person\",\n  \"ownerId\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Update collateral",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "",
                "description": "Optional opaque key (e.g. a UUID) to make this write safely retryable. A replay with the same key returns the original response instead of repeating the side effect. — type: string"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/:loanId/collateral/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                ":loanId",
                "collateral",
                ":id"
              ],
              "variable": [
                {
                  "key": "loanId",
                  "value": "",
                  "description": "type: string"
                },
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Update collateral. Money is in whole cents and `bpsAdvanceRate` is in basis points (8500 = 85%).",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"description\": \"\",\n  \"category\": \"\",\n  \"centsMarketValue\": 0,\n  \"bpsAdvanceRate\": 0,\n  \"centsManualPriorLien\": 0,\n  \"ownerType\": \"person\",\n  \"ownerId\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Debt",
      "description": "Read a loan’s debt schedule (read-only)",
      "item": [
        {
          "name": "List loan debt schedule",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/:id/debt",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                ":id",
                "debt"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "List a loan's debt schedule (read-only). Debt records are synced from the loan's components/underwriting data and are not editable row-by-row via the API; money is in whole cents and `bpsInterestRate` is in basis points."
          }
        }
      ]
    },
    {
      "name": "Entities",
      "description": "Read, create, and update the businesses and people on a loan. `GET /loans/{id}/entities` lists them; the per-entity GETs add full addresses and contact details. Tax identifiers are masked to the last 4 digits unless the key carries `read:businesses:ein` / `read:people:ssn`.",
      "item": [
        {
          "name": "Get a business",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/businesses/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "businesses",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Retrieve full details for a business, including its addresses. The EIN is returned masked (`einLast4`) unless the API key also holds the `read:businesses:ein` scope, in which case the full value is returned in `ein`. A null `ein` with a non-null `einLast4` means the key lacks that scope; both null means no EIN is on record."
          }
        },
        {
          "name": "Get a person",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/people/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "people",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Retrieve full details for a person, including their addresses. The SSN is returned masked (`ssnLast4`) unless the API key also holds the `read:people:ssn` scope, in which case the full value is returned in `ssn`."
          }
        },
        {
          "name": "Create a business on a loan",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "",
                "description": "Optional opaque key (e.g. a UUID) to make this write safely retryable. A replay with the same key returns the original response instead of repeating the side effect. — type: string"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/:id/businesses",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                ":id",
                "businesses"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Create a business and attach it to the loan with the given role (e.g. \"borrower\", \"guarantor\"). Accepts a full EIN; only the last 4 digits are ever returned.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"\",\n  \"role\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Update a business on a loan",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "",
                "description": "Optional opaque key (e.g. a UUID) to make this write safely retryable. A replay with the same key returns the original response instead of repeating the side effect. — type: string"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/:loanId/businesses/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                ":loanId",
                "businesses",
                ":id"
              ],
              "variable": [
                {
                  "key": "loanId",
                  "value": "",
                  "description": "type: string"
                },
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Update the details of a business associated with a loan. Only the fields provided in the request body are changed.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"\",\n  \"ein\": \"\",\n  \"dba\": \"\",\n  \"entityType\": \"C-Corp\",\n  \"state\": \"\",\n  \"naics\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Create a person on a loan",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "",
                "description": "Optional opaque key (e.g. a UUID) to make this write safely retryable. A replay with the same key returns the original response instead of repeating the side effect. — type: string"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/:id/people",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                ":id",
                "people"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Create a person and attach them to the loan with the given role. Accepts a full SSN; only the last 4 digits are ever returned.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"firstName\": \"\",\n  \"lastName\": \"\",\n  \"role\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Update a person on a loan",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "",
                "description": "Optional opaque key (e.g. a UUID) to make this write safely retryable. A replay with the same key returns the original response instead of repeating the side effect. — type: string"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/:loanId/people/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                ":loanId",
                "people",
                ":id"
              ],
              "variable": [
                {
                  "key": "loanId",
                  "value": "",
                  "description": "type: string"
                },
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Update the details of a person associated with a loan. Only the fields provided in the request body are changed.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"firstName\": \"\",\n  \"lastName\": \"\",\n  \"ssn\": \"\",\n  \"email\": \"\",\n  \"dob\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Documents",
      "description": "List, upload, download, update, and delete loan documents",
      "item": [
        {
          "name": "List loan documents",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/:id/documents",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                ":id",
                "documents"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Retrieve every document on a loan: files uploaded against a document requirement (the rows on the loan's Documents tab, whether the requirement targets the loan, a person, or a business) plus loan-level artifacts the platform generates, such as term sheets and adverse-action notices. Each entry carries the `requirement` it satisfies — including its review `status` and its `id`, which is what you pass as `requirementID` when uploading. `requirement` is null for generated artifacts. Use the download endpoint to get a presigned URL for the file itself."
          }
        },
        {
          "name": "Upload a document",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "",
                "description": "Optional opaque key (e.g. a UUID) to make this upload safely retryable. A replay with the same key returns the original response instead of creating a duplicate record. — type: string"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/:id/documents",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                ":id",
                "documents"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Step 1 of 2. Creates the document record and returns a presigned upload URL; PUT the file content to that URL, then call `POST /documents/{id}/confirm` — the confirm step is what verifies the bytes landed and attaches the file to its requirement. A document that is never confirmed stays invisible to the bank.\n\nPass `requirementID` (a requirement `id` from `GET /loans/{id}/documents`) so the upload satisfies that requirement and appears on the banker's Documents tab for review. Omit it only for a loan-level attachment that answers no requirement — those are not surfaced for review.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"\",\n  \"type\": \"\",\n  \"size\": 0\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Get document download URL",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/documents/:id/download",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "documents",
                ":id",
                "download"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Get a presigned download URL for a document. The URL is valid for 5 minutes. Use this URL to download the actual document file directly."
          }
        },
        {
          "name": "Confirm a document upload",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "",
                "description": "Optional opaque key (e.g. a UUID) to make this write safely retryable. A replay with the same key returns the original response instead of repeating the side effect. — type: string"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/public/v1/documents/:id/confirm",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "documents",
                ":id",
                "confirm"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Step 2 of 2. Call after PUTting the file content to the presigned URL. Verifies the blob actually arrived (and is within the size cap) and, for a requirement-backed upload, attaches it to that requirement so it appears on the banker's Documents tab as `PENDING` review.\n\nUntil this is called the record exists but the bank cannot see the document.\n\n**Pass `period` when the requirement collects more than one** (three years of tax returns, say) — those 400 with `period_key_required` otherwise, since nothing can infer which year the file answers. Use the `period` value from `GET /loans/{id}/documents`.\n\nRetrying is safe in the sense that it never corrupts anything, but it is NOT a no-op: re-confirming an already-attached file adds another version to the same requirement, matching how a re-upload behaves in the UI. Retry after a *failed* confirm, not after a successful one.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"period\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Update document metadata",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/public/v1/documents/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "documents",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Update document metadata. Currently only the document name can be updated.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Delete a document",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/documents/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "documents",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Soft-delete a document by setting its deletion timestamp. The document will no longer appear in list results. If it satisfied a requirement it is also detached from it, and any requirement period left with no remaining file returns to `AWAITING_UPLOAD`."
          }
        }
      ]
    },
    {
      "name": "Products",
      "description": "List available loan products",
      "item": [
        {
          "name": "List products",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/products",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "products"
              ]
            },
            "description": "Retrieve a list of available loan products. Returns product details including name, description, terms, and rate types."
          }
        },
        {
          "name": "Get product details",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/products/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "products",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Retrieve detailed information about a specific loan product by ID. Returns product name, description, terms, amortization period, rate type, and payment frequency."
          }
        }
      ]
    },
    {
      "name": "Webhooks",
      "description": "Manage outbound webhook endpoints and inspect delivery attempts",
      "item": [
        {
          "name": "List webhook endpoints",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/webhook-endpoints",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "webhook-endpoints"
              ]
            },
            "description": "List your organization's webhook endpoints. The signing secret is never returned."
          }
        },
        {
          "name": "Register a webhook endpoint",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "",
                "description": "Optional opaque key (e.g. a UUID) to make this write safely retryable. A replay with the same key returns the original response instead of repeating the side effect. — type: string"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/public/v1/webhook-endpoints",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "webhook-endpoints"
              ]
            },
            "description": "Register an HTTPS endpoint to receive event deliveries. The signing secret is returned ONCE in this response and never again — store it securely. Private/loopback URLs are rejected.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"\",\n  \"url\": \"\",\n  \"subscribedEvents\": [\n    \"loan.created\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Get a webhook endpoint",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/webhook-endpoints/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "webhook-endpoints",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Retrieve a single webhook endpoint by ID, including its target URL, subscribed event types, and status."
          }
        },
        {
          "name": "Update a webhook endpoint",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "",
                "description": "Optional opaque key (e.g. a UUID) to make this write safely retryable. A replay with the same key returns the original response instead of repeating the side effect. — type: string"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/public/v1/webhook-endpoints/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "webhook-endpoints",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Update a webhook endpoint — change its target URL, subscribed event types, or status. Only the fields provided in the request body are changed.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"\",\n  \"url\": \"\",\n  \"subscribedEvents\": [\n    \"loan.created\"\n  ],\n  \"status\": \"active\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Delete a webhook endpoint",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "",
                "description": "Optional opaque key (e.g. a UUID) to make this write safely retryable. A replay with the same key returns the original response instead of repeating the side effect. — type: string"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/public/v1/webhook-endpoints/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "webhook-endpoints",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Soft-delete (disable) a webhook endpoint. Delivery history is retained."
          }
        },
        {
          "name": "Rotate a webhook signing secret",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "",
                "description": "Optional opaque key (e.g. a UUID) to make this write safely retryable. A replay with the same key returns the original response instead of repeating the side effect. — type: string"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/public/v1/webhook-endpoints/:id/rotate-secret",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "webhook-endpoints",
                ":id",
                "rotate-secret"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Generate a new signing secret. It is returned ONCE in this response and never again."
          }
        },
        {
          "name": "Send a test event",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/webhook-endpoints/:id/test",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "webhook-endpoints",
                ":id",
                "test"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Synchronously deliver a `test.ping` event to the endpoint and return the result. Does not count toward auto-disable, and is intentionally NOT idempotency-keyed (safe to repeat)."
          }
        },
        {
          "name": "List delivery attempts for an endpoint",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/webhook-endpoints/:id/deliveries",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "webhook-endpoints",
                ":id",
                "deliveries"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "50",
                  "description": "type: number",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "type: number",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "type: string",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "pending",
                  "description": "type: string — one of: pending, delivered, failed, retrying",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Retrieve recent delivery attempts for a webhook endpoint, including status, response codes, and timestamps, to help debug your integration."
          }
        },
        {
          "name": "List supported webhook event types",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/webhook-events",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "webhook-events"
              ]
            },
            "description": "List the webhook event types you can subscribe an endpoint to, with a short description of each."
          }
        }
      ]
    },
    {
      "name": "Messages",
      "item": [
        {
          "name": "List loan messages",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/public/v1/loans/:id/messages",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "public",
                "v1",
                "loans",
                ":id",
                "messages"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "50",
                  "description": "type: number",
                  "disabled": true
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": "type: number",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "type: string",
                  "disabled": true
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "type: string"
                }
              ]
            },
            "description": "Retrieve messages posted on a loan across its customer/broker-visible chatrooms. Internal banker-only threads are never returned."
          }
        }
      ]
    }
  ]
}