Kita Underwriter
Push borrower documents from your core banking system or LOS, read fraud-checked and fully-traceable credit signals, and generate cited credit memos, all over a REST API. Kita recommends; your team decides. The API never approves a loan.
https://underwriter.kita.ai/api/v1AuthApiKey kita_uw_...ContractOpenAPI 3.1 · 152 operationsOverview
The Kita Platform API exposes the same three product layers as the dashboard: Kita Capture for document extraction and fraud signals, AI Credit Officer for borrower communication, and AI Underwriter for deterministic analysis, policy evaluation, and cited credit memos. A typical LOS integration does three things:
- Write: push a borrower application and its documents in one call (
POST /intake). - Read: poll the deterministic credit picture as extraction tightens (
GET …/credit). - Generate: trigger and pull back the cited credit memo (
POST …/memo→GET …/memo).
Processing is continuous: every accepted document immediately updates the assessment. There is no “100% complete” gate before underwriting starts.
Lender endpoints use /api/v1; the separate borrower-safe surface uses /api/borrower/v1. JSON success responses use a { "data": ... } envelope, with optional pagination. Every response includes X-Request-ID and X-Kita-API-Version; binary export routes return their native file type.
Base URL
https://underwriter.kita.ai/api/v1MCP Server
kita-docs-mcp exposes the core Underwriter workflow to Claude Code, Claude Desktop, and Codex: intake borrower files, upload documents, read the credit picture, generate memos, sync borrower conversations, and export workbooks or PDFs. Use the REST API or OpenAPI contract for the complete platform surface documented below.
Claude Code
claude mcp add kita-docs --env KITA_UNDERWRITER_API_KEY=kita_uw_xxxxxxxxxxxx -- npx -y kita-docs-mcpenvironment
| Field | Type | Description |
|---|---|---|
KITA_UNDERWRITER_API_KEYrequired | secret | Underwriter API key beginning with kita_uw_. Required for every underwriter_* tool. |
KITA_UNDERWRITER_API_BASE | url | Optional. Defaults to https://underwriter.kita.ai/api/v1. Include /api/v1 when overriding. |
KITA_API_KEY | secret | Optional. Enables the same MCP server’s Kita Capture tools. |
Use server-side keys only
KITA_UNDERWRITER_API_KEY out of browser code and public repos.Authentication
Authenticate lender requests with a member-bound organization API key. Mint keys in Settings → API keys. A key looks like kita_uw_… and is shown exactly once at creation. Kita stores only a SHA-256 hash, so it cannot be recovered. Keys can expire, be rotated, or be revoked independently.
Pass the key in the Authorization header in either form:
Authorization header
Authorization: ApiKey kita_uw_xxxxxxxxxxxx
# or
Authorization: Bearer kita_uw_xxxxxxxxxxxxKeep keys server-side
Scopes & permissions
New keys use resource-specific permissions. Scope is enforced per endpoint, then intersected with the bound member’s live role, approval authority, and per-application access. A valid key without sufficient access receives 403.
| Field | Type | Description |
|---|---|---|
applications | applications:read · applications:write · applications:assign · applications:archive | Application records, controls, assignment, access, lifecycle, archive, and restore. |
borrowers | borrowers:read · borrowers:write | Borrower profiles and guarantors. |
documents | documents:read · documents:write | Kita Capture documents, evidence, transcripts, review, reprocessing, and exports. |
underwriting | underwriting:read · underwriting:run · underwriting:write | Assessments, financials, adjustments, scorecards, projections, policy evaluations, and review actions. |
memos | memos:read · memos:write | Credit memo generation, sections, revisions, conditions, status, and exports. |
decisions | decisions:read · decisions:write | Lender decisions and reason codes. |
messages | messages:read · messages:write | Borrower conversations and message drafts. |
portfolio | portfolio:read | Organization or assigned-file portfolio statistics. |
operations | operations:read | Durable operation status and result polling. |
assistants | assistants:use | Lender assistant requests over authorized application context. |
organization | organization:read · organization:write | Organization settings. |
members | members:read · members:write | Members, invitations, roles, and permission settings. |
products | products:read · products:write | Loan products, policy rules, and memo-section configuration. |
integrations | integrations:read · integrations:write · integrations:run | Connections, configuration, and provider execution. |
API keys | api_keys:manage | Create, list, rotate, and revoke API keys. |
webhooks | webhooks:manage | Webhook endpoints, event types, delivery history, and retries. |
Least privilege
applications:read, underwriting:read, and memos:read, while an intake connector may need applications:write and documents:write.Errors
Errors use a consistent envelope and standard HTTP status codes:
Error envelope
{ "message": "This API key lacks the 'documents:write' scope required for this endpoint." }Status codes
| Field | Type | Description |
|---|---|---|
200 / 201 | ok | Success. 201 on resource creation. |
400 | client | Malformed body, missing required field, or bad parameter. |
401 | auth | Missing, malformed, unknown, or revoked API key. |
403 | auth | Valid key, but it lacks the scope this endpoint requires. |
404 | client | Application or document not found in your org (cross-org access is indistinguishable from not-found). |
409 | client | Mutation conflict, including an idempotency key reused with a different request. |
429 | client | Rate limit exceeded. Honor Retry-After and the X-RateLimit-* headers. |
500 | server | Unexpected server-side failure. Provide X-Request-ID when contacting Kita. |
503 | server | A required dependency or the idempotency/authentication layer is temporarily unavailable. |
Rate limits are enforced by operation category. Use Retry-After and the X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset response headers. Send your own X-Request-ID when you need end-to-end correlation.
Quickstart
Push a borrower and a tax return in one call, then read the credit picture. Replace the key and file path:
1. Intake an application with a document
curl -X POST https://underwriter.kita.ai/api/v1/intake \
-H "Authorization: ApiKey kita_uw_xxxxxxxxxxxx" \
-F 'application={
"business_name": "Rivera Family Bakery LLC",
"borrower_email": "maria@riverabakery.com",
"loan_type": "SBA 7(a)",
"loan_amount": 250000,
"external_ref": "LOS-44821"
};type=application/json' \
-F "file=@./2023_form_1120s.pdf"Response · 201 Created
{
"data": {
"id": "b1e7c9a4-...-...",
"app_id": "APP-1042",
"external_ref": "LOS-44821",
"business_name": "Rivera Family Bakery LLC",
"borrower_email": "maria@riverabakery.com",
"loan_type": "SBA 7(a)",
"loan_amount": 250000,
"status": "submitted",
"file_completeness": 0,
"documents": [
{ "id": "9f2...", "doc_name": "2023_form_1120s.pdf", "status": "awaiting" }
]
}
}2. Read the credit picture (poll as docs process)
curl https://underwriter.kita.ai/api/v1/applications/APP-1042/credit \
-H "Authorization: ApiKey kita_uw_xxxxxxxxxxxx"End-to-end workflow
The canonical loop a lender integration runs:
- Intake.
POST /intakewith the borrower, loan terms, and document files. Passexternal_ref(your LOS/loan id) so retries are idempotent. - Wait for extraction. Each document moves
awaiting → processing → verified(orlow_confidence). PollGET …/documentsor a singleGET …/documents/{docId}. - Read the assessment.
GET …/creditreturns the spread (adjusted EBITDA/DSCR/ratios with per-metric provenance), the normalization adjustments, and the policy decision. It tightens as more documents land. - Generate the memo.
POST …/memosynthesizes the cited credit memo, then pollGET …/memo/statusuntil synthesis settles and read it withGET …/memo. - Sync back. Pull
…/conversationfor the borrower thread and…/exportfor the extraction workbook into your system of record.
Human-in-the-loop by design
Idempotency
Send Idempotency-Key on lender-side mutations. Synchronous mutations replay the stored response for 24 hours. Durable mutations reuse the same operation record, so a retry cannot start duplicate underwriting work. Reusing a key with a different method, path, actor, or request payload returns 409.
POST /intake also supports resource-level deduplication with external_ref, your LOS or core-banking record ID. API-key creation/rotation and webhook creation return secrets and intentionally reject Idempotency-Key.
Automated integrations
external_ref for the loan and a unique Idempotency-Key for each mutation attempt.Async & polling
Long-running endpoints return 202 Accepted. Durable operations include a status object and Location URL; poll that URL with operations:read. Document processing and the compatibility memo trigger are request-owned background work:
- Documents: after
POST …/documentsor/intake, poll a document untilstatusleavesawaiting/processing. - Memo: after
POST …/memo, pollGET …/memo/statusuntilsynthesis_in_progressisfalseandis_staleisfalse. - Durable work: assessment runs, provider calls, document review/reprocessing, memo generation, projections, research, normalization, decisions, and assistant requests can be polled through
GET /operations/{id}.
Use exponential backoff starting around 2–3 seconds. For event-driven integrations, register a signed endpoint with POST /webhooks, inspect delivery history, and retry failed deliveries through the webhook-delivery API.
/intakeapplications:writeSingle-call application intake for a core banking system or LOS. Create the borrower + loan and push every document file in one request; Kita stores each file and kicks off extraction immediately. The file appears in the dashboard right away.
Body: two shapes
multipart/form-data: an application part holding the JSON metadata below, plus repeated file/files parts. Or application/json: the metadata object alone (no documents).
application metadata
| Field | Type | Description |
|---|---|---|
business_namerequired | string | Borrower business / legal name. |
borrower_emailrequired | string | Borrower contact email. |
borrower_phone | string | Borrower contact phone. |
loan_type | string | e.g. "SBA 7(a)", "Term loan". |
loan_amount | number | Requested amount in dollars. |
application_context | string | Loan purpose / free-text context for the file. |
external_ref | string | Your unique loan/record id. Enables idempotent retries. |
send_outreach | boolean | Default false. If true, Kita emails the borrower for missing docs. |
Request
curl -X POST https://underwriter.kita.ai/api/v1/intake \
-H "Authorization: ApiKey kita_uw_xxxxxxxxxxxx" \
-F 'application={"business_name":"Rivera Family Bakery LLC","borrower_email":"maria@riverabakery.com","loan_type":"SBA 7(a)","loan_amount":250000,"external_ref":"LOS-44821"};type=application/json' \
-F "file=@./2023_form_1120s.pdf" \
-F "file=@./jan_bank_statement.pdf"Response · 201 (or 200 on idempotent retry)
{
"data": {
"id": "b1e7c9a4-...",
"app_id": "APP-1042",
"external_ref": "LOS-44821",
"business_name": "Rivera Family Bakery LLC",
"borrower_name": null,
"borrower_email": "maria@riverabakery.com",
"borrower_phone": null,
"loan_type": "SBA 7(a)",
"loan_amount": 250000,
"status": "submitted",
"file_completeness": 0,
"application_context": null,
"submitted_at": "2026-06-17T18:04:11.000Z",
"last_activity_at": "2026-06-17T18:04:11.000Z",
"documents": [
{ "id": "9f2...", "doc_name": "2023_form_1120s.pdf", "doc_type": null, "classified_type": null, "status": "awaiting", "flag_message": null, "source": "API upload", "storage_path": "org/app/2023_form_1120s.pdf" }
]
}
}/applicationsapplications:writeCreate an application without files. Same metadata as intake, minus external_ref (use /intake when you need idempotency). Add documents afterwards with the upload endpoint.
body (application/json)
| Field | Type | Description |
|---|---|---|
business_namerequired | string | Borrower business / legal name. |
borrower_emailrequired | string | Borrower contact email. |
borrower_phone | string | Borrower contact phone. |
loan_type | string | Loan product. |
loan_amount | number | Requested amount. |
application_context | string | Loan purpose / context. |
send_outreach | boolean | Default false. |
Request
curl -X POST https://underwriter.kita.ai/api/v1/applications \
-H "Authorization: ApiKey kita_uw_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"business_name": "Rivera Family Bakery LLC",
"borrower_email": "maria@riverabakery.com",
"loan_type": "SBA 7(a)",
"loan_amount": 250000
}'/applicationsapplications:readList applications in your org, most-recently-active first.
query parameters
| Field | Type | Description |
|---|---|---|
status | string | Filter to one status value (see Status reference). |
limit | number | Default 50, clamped to 1–200. |
offset | number | Default 0. Use with limit to page. |
Request
curl "https://underwriter.kita.ai/api/v1/applications?status=underwriting&limit=25" \
-H "Authorization: ApiKey kita_uw_xxxxxxxxxxxx"Response · 200
{
"data": [ { "id": "...", "app_id": "APP-1042", "status": "underwriting", "...": "..." } ],
"pagination": { "total": 137, "limit": 25, "offset": 0 }
}/applications/{id}applications:readFetch one application by UUID or by human app_id (e.g. APP-1042). Includes a live document_count.
Request
curl https://underwriter.kita.ai/api/v1/applications/APP-1042 \
-H "Authorization: ApiKey kita_uw_xxxxxxxxxxxx"/applications/{id}applications:writeUpdate mutable fields. All fields optional; omit to leave unchanged.
body (application/json)
| Field | Type | Description |
|---|---|---|
business_name | string | Non-empty. Applies only if the app has a linked borrower. |
loan_type | string | Non-empty. |
loan_amount | number | Must be > 0. |
application_context | string | null | Loan purpose / context. |
status | string | One of the 7 status values (see Status reference). |
Request
curl -X PATCH https://underwriter.kita.ai/api/v1/applications/APP-1042 \
-H "Authorization: ApiKey kita_uw_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{ "status": "approved" }'/applications/{id}applications:archivePermanently delete an application, its documents (files + storage), and any orphaned borrower record. Returns { "data": { "deleted": true } }.
Request
curl -X DELETE https://underwriter.kita.ai/api/v1/applications/APP-1042 \
-H "Authorization: ApiKey kita_uw_xxxxxxxxxxxx"/applications/{id}/documentsdocuments:writeUpload one or more files to an existing application as multipart/form-data. Accepts a single file field or repeated file/files fields (a whole package in one call). Each file’s pipeline (prescreen → classify → extract) runs after the response.
Request
curl -X POST https://underwriter.kita.ai/api/v1/applications/APP-1042/documents \
-H "Authorization: ApiKey kita_uw_xxxxxxxxxxxx" \
-F "file=@./941_q1.pdf" \
-F "file=@./balance_sheet.pdf"Single vs. multiple
data. Poll the document(s) for pipeline progress./applications/{id}/documentsdocuments:readList an application’s documents. Add ?include=download_url to attach a signed download URL (1-hour expiry) to each.
Request
curl "https://underwriter.kita.ai/api/v1/applications/APP-1042/documents?include=download_url" \
-H "Authorization: ApiKey kita_uw_xxxxxxxxxxxx"Response · 200
{
"data": [
{
"id": "9f2...",
"doc_name": "2023_form_1120s.pdf",
"doc_type": "Tax Return",
"classified_type": "form_1120s",
"status": "verified",
"flag_message": null,
"source": "API upload",
"storage_path": "org/app/2023_form_1120s.pdf",
"download_url": "https://...signed...&expires=3600"
}
]
}/applications/{id}/documents/{docId}documents:readFetch a single document including the full extraction result. Poll this endpoint for pipeline progress: status transitions awaiting → processing → verified / low_confidence.
additional fields (vs. list)
| Field | Type | Description |
|---|---|---|
kita_raw | object | null | Full grounded extraction result (shape varies by document type). |
recommendations | array | null | System/AI recommendations for the document. |
inconsistencies | array | null | Detected inconsistencies / fraud signals. |
Request
curl https://underwriter.kita.ai/api/v1/applications/APP-1042/documents/9f2... \
-H "Authorization: ApiKey kita_uw_xxxxxxxxxxxx"/applications/{id}/documents/{docId}documents:writeDelete a document (row + storage file) and recompute file completeness. Returns { "data": { "deleted": true } }.
Request
curl -X DELETE https://underwriter.kita.ai/api/v1/applications/APP-1042/documents/9f2... \
-H "Authorization: ApiKey kita_uw_xxxxxxxxxxxx"/applications/{id}/creditunderwriting:readThe deterministic credit picture: the numbers the dashboard shows, minus the memo narrative. Three layers, each null until computed (the assessment is continuous):
| Field | Type | Description |
|---|---|---|
spread | object | null | Adjusted EBITDA/net income, normalized ratios (DSCR, margins, debt-to-worth, current ratio, reserve months, LTV), the DSCR sensitivity table, and per-metric provenance (formula, version, inputs, threshold). No LLM math. |
adjustments | array | Normalization line items applied to this borrower's own reported numbers (owner-comp add-backs, non-recurring items), each tagged ai or lo. |
decision | object | null | Policy engine routing recommendation, whether it auto-routed, and every rule's pass/fail with observed vs. expected. |
Response · 200 (abridged)
{
"data": {
"application_id": "b1e7c9a4-...",
"app_id": "APP-1042",
"spread": {
"adjusted_ebitda": 412000,
"adjusted_net_income": 188500,
"ratios": { "dscr": 1.42, "global_dscr": 1.31, "debt_to_worth": 2.1, "current_ratio": 1.6, "ltv": 0.74 },
"sensitivity": [ /* DSCR at revenue stress levels */ ],
"metric_results": [ /* per-metric provenance */ ],
"engine_version": "biz-v3"
},
"adjustments": [ { "line_item": "owner_comp_addback", "label": "Owner compensation to market", "amount": 60000, "source": "ai" } ],
"decision": {
"routing": "human_review",
"auto_routed": false,
"rules": [ { "label": "Min DSCR 1.25x", "outcome": "pass", "actual": 1.42, "expected": 1.25 } ]
}
}
}/applications/{id}/memomemos:writeSynthesize the credit memo: promote verified extractions into the memo tables, refresh deterministic metrics + policy routing, then start request-owned background synthesis. The route returns 202; poll …/memo/status, then read …/memo. For a durable operation record, use POST …/memo/generate instead.
Request
curl -X POST https://underwriter.kita.ai/api/v1/applications/APP-1042/memo \
-H "Authorization: ApiKey kita_uw_xxxxxxxxxxxx"/applications/{id}/memomemos:readRead the memo sections in order. Bodies are plain text with internal [Cn] citation markers stripped.
Response · 200
{
"data": {
"last_synthesis_at": "2026-06-17T18:22:09.000Z",
"sections": [
{ "section_number": 1, "title": "Deal Summary", "body": "Rivera Family Bakery...", "locked_by_lo": false, "updated_at": "2026-06-17T18:22:09.000Z" }
]
}
}/applications/{id}/memo/statusmemos:readFreshness + synthesis progress. Poll after POST …/memo until synthesis_in_progress is false.
| Field | Type | Description |
|---|---|---|
synthesis_in_progress | boolean | A synthesis run is currently underway. |
is_stale | boolean | Memo is out of date vs. current docs/messages. |
stale_reasons | string[] | Why it's stale. |
new_doc_count | number | Documents added since last synthesis. |
new_message_count | number | Messages added since last synthesis. |
last_run_status | string | null | completed | failed. |
last_synthesis_at | string | null | Timestamp of last successful synthesis. |
/applications/{id}/conversationmessages:readThe borrower-facing thread, ordered by display_order. Pass ?after={display_order} to fetch only newer messages for incremental sync.
Request
curl "https://underwriter.kita.ai/api/v1/applications/APP-1042/conversation?after=12" \
-H "Authorization: ApiKey kita_uw_xxxxxxxxxxxx"/applications/{id}/exportdocuments:readDownload the extraction workbook (a Summary sheet plus one sheet per file area) as .xlsx. Returns 404 if no document has extraction data yet.
Request
curl https://underwriter.kita.ai/api/v1/applications/APP-1042/export \
-H "Authorization: ApiKey kita_uw_xxxxxxxxxxxx" \
-o "rivera-extractions.xlsx"Complete API reference
The catalog below lists all 152 operations in the current contract. The machine-readable OpenAPI 3.1 document is the source of truth for request bodies, query parameters, response codes, async behavior, and idempotency metadata.
OpenAPI 3.1
curl https://underwriter.kita.ai/api/v1/openapiTwo authentication boundaries
/api/v1 use a member-bound organization API key. Borrower routes under /api/borrower/v1 use short-lived borrower bearer tokens and expose only borrower-safe application data.Applications & borrowers
Create, assign, archive, restore, and inspect lender-side borrower files.
/api/v1/applications/{id}/accessapplications:read/api/v1/applications/{id}/accessapplications:assign/api/v1/applications/{id}/activityapplications:read/api/v1/applications/{id}/assigneeapplications:assign/api/v1/applications/{id}/borrowerborrowers:read/api/v1/applications/{id}/borrowerborrowers:write/api/v1/applications/{id}/controlsapplications:read/api/v1/applications/{id}/controlsapplications:write/api/v1/applications/{id}/guarantors/{guarantorId}borrowers:write/api/v1/applications/{id}/guarantors/{guarantorId}borrowers:write/api/v1/applications/{id}/guarantorsborrowers:read/api/v1/applications/{id}/guarantorsborrowers:write/api/v1/applications/{id}/lifecycleapplications:read/api/v1/applications/{id}/lifecycleapplications:write/api/v1/applications/{id}applications:read/api/v1/applications/{id}applications:write/api/v1/applications/{id}applications:archive/api/v1/applications/archived/{id}/restoreapplications:archive/api/v1/applications/archivedapplications:archive/api/v1/applicationsapplications:write/api/v1/applicationsapplications:read/api/v1/borrowers/{id}borrowers:read/api/v1/borrowers/{id}borrowers:write/api/v1/borrowersborrowers:read/api/v1/intakeapplications:writeKita Capture
Upload, classify, review, reprocess, extract, transcribe, and export borrower documents.
/api/v1/applications/{id}/checklistdocuments:read/api/v1/applications/{id}/documents/{docId}/extractiondocuments:read/api/v1/applications/{id}/documents/{docId}/extractiondocuments:write/api/v1/applications/{id}/documents/{docId}/metadatadocuments:write/api/v1/applications/{id}/documents/{docId}/reprocessdocuments:write/api/v1/applications/{id}/documents/{docId}/reviewdocuments:write/api/v1/applications/{id}/documents/{docId}documents:read/api/v1/applications/{id}/documents/{docId}documents:write/api/v1/applications/{id}/documents/{docId}/transcriptdocuments:read/api/v1/applications/{id}/documentsdocuments:write/api/v1/applications/{id}/documentsdocuments:read/api/v1/applications/{id}/exportdocuments:read/api/v1/applications/{id}/transcriptsdocuments:readAI Underwriter
Assessments, financials, policy decisions, adjustments, scorecards, projections, providers, and review actions.
/api/v1/applications/{id}/assessmentunderwriting:read/api/v1/applications/{id}/assessment/rununderwriting:run/api/v1/applications/{id}/creditunderwriting:read/api/v1/applications/{id}/decision-inputunderwriting:read/api/v1/applications/{id}/decisions/causesdecisions:read/api/v1/applications/{id}/decisionsdecisions:read/api/v1/applications/{id}/decisionsdecisions:write/api/v1/applications/{id}/discrepancies/{discrepancyId}underwriting:write/api/v1/applications/{id}/discrepanciesunderwriting:read/api/v1/applications/{id}/financialsunderwriting:read/api/v1/applications/{id}/intake-answersunderwriting:read/api/v1/applications/{id}/intake-answersunderwriting:write/api/v1/applications/{id}/items/{itemId}underwriting:write/api/v1/applications/{id}/itemsunderwriting:read/api/v1/applications/{id}/normalization-adjustments/{adjustmentId}underwriting:write/api/v1/applications/{id}/normalization-adjustments/{adjustmentId}underwriting:write/api/v1/applications/{id}/normalization-adjustmentsunderwriting:write/api/v1/applications/{id}/normalization-adjustments/proposeunderwriting:run/api/v1/applications/{id}/policy-evaluationsunderwriting:read/api/v1/applications/{id}/projectionsunderwriting:read/api/v1/applications/{id}/projectionsunderwriting:write/api/v1/applications/{id}/projections/generateunderwriting:run/api/v1/applications/{id}/providersunderwriting:read/api/v1/applications/{id}/providers/runintegrations:run/api/v1/applications/{id}/review-actionsunderwriting:read/api/v1/applications/{id}/review-actionsunderwriting:write/api/v1/applications/{id}/scorecard-inputsunderwriting:read/api/v1/applications/{id}/scorecard-inputsunderwriting:write/api/v1/applications/{id}/scorecardunderwriting:read/api/v1/applications/{id}/web-researchunderwriting:read/api/v1/applications/{id}/web-researchunderwriting:runCredit memos
Generate, poll, revise, edit, condition, and export credit memos.
/api/v1/applications/{id}/memo/conditionsmemos:read/api/v1/applications/{id}/memo/conditionsmemos:write/api/v1/applications/{id}/memo/exportmemos:read/api/v1/applications/{id}/memo/generatememos:write/api/v1/applications/{id}/memo/revisionsmemos:read/api/v1/applications/{id}/memomemos:write/api/v1/applications/{id}/memomemos:read/api/v1/applications/{id}/memo/sections/{sectionNumber}memos:write/api/v1/applications/{id}/memo/sectionsmemos:read/api/v1/applications/{id}/memo/statusmemos:readAI Credit Officer
Borrower conversations, message drafts, lender assistant calls, and portfolio intelligence.
/api/v1/applications/{id}/conversationmessages:read/api/v1/applications/{id}/conversationmessages:write/api/v1/applications/{id}/message-draftmessages:read/api/v1/applications/{id}/message-draftmessages:write/api/v1/applications/{id}/message-draftmessages:write/api/v1/applications/{id}/message-draftmessages:write/api/v1/assistantassistants:use/api/v1/portfolio/statsportfolio:readPlatform administration
Organization, members, products, policy, integrations, operations, API keys, audit events, and webhooks.
/api/v1/openapipublic/api/v1/api-keys/{keyId}/rotateapi_keys:manage/api/v1/api-keys/{keyId}api_keys:manage/api/v1/api-keysapi_keys:manage/api/v1/api-keysapi_keys:manage/api/v1/audit-eventsorganization:read/api/v1/integrations/{provider}/runintegrations:run/api/v1/integrations/plaidintegrations:read/api/v1/integrations/plaidintegrations:write/api/v1/integrations/plaidintegrations:write/api/v1/integrationsintegrations:read/api/v1/integrations/salesforceintegrations:read/api/v1/integrations/salesforceintegrations:write/api/v1/integrations/salesforceintegrations:write/api/v1/integrations/submittableintegrations:read/api/v1/integrations/submittableintegrations:write/api/v1/integrations/submittableintegrations:write/api/v1/integrations/underwriting/{provider}integrations:write/api/v1/integrations/underwriting/{provider}integrations:write/api/v1/operations/{id}operations:read/api/v1/operationsoperations:read/api/v1/organization/invites/{inviteId}members:write/api/v1/organization/members/{userId}members:write/api/v1/organization/members/{userId}members:write/api/v1/organization/membersmembers:read/api/v1/organization/membersmembers:write/api/v1/organization/permissionsmembers:read/api/v1/organization/permissionsmembers:write/api/v1/organizationorganization:read/api/v1/organizationorganization:write/api/v1/policy-rules/{ruleId}products:write/api/v1/policy-rules/{ruleId}products:write/api/v1/policy-rulesproducts:read/api/v1/policy-rulesproducts:write/api/v1/products/{productId}/memo-sections/{sectionKey}products:write/api/v1/products/{productId}/memo-sectionsproducts:read/api/v1/products/{productId}/memo-sectionsproducts:write/api/v1/products/{productId}/memo-sectionsproducts:write/api/v1/products/{productId}products:read/api/v1/products/{productId}products:write/api/v1/products/{productId}products:write/api/v1/productsproducts:read/api/v1/productsproducts:write/api/v1/webhook-deliveries/{id}/retrywebhooks:manage/api/v1/webhook-deliverieswebhooks:manage/api/v1/webhooks/{id}webhooks:manage/api/v1/webhooks/{id}webhooks:manage/api/v1/webhooks/{id}webhooks:manage/api/v1/webhooks/event-typeswebhooks:manage/api/v1/webhookswebhooks:manage/api/v1/webhookswebhooks:manageBorrower API
A separate borrower-safe surface authenticated with short-lived borrower access tokens.
/api/borrower/v1/applications/{id}/assistantborrower/api/borrower/v1/applications/{id}/documents/{documentId}borrower/api/borrower/v1/applications/{id}/documentsborrower/api/borrower/v1/applications/{id}/documentsborrower/api/borrower/v1/applications/{id}/messagesborrower/api/borrower/v1/applications/{id}/messagesborrower/api/borrower/v1/applications/{id}/profileborrower/api/borrower/v1/applications/{id}/questions/{questionId}/answerborrower/api/borrower/v1/applications/{id}borrower/api/borrower/v1/applicationsborrower/api/borrower/v1/auth/passwordpublic/api/borrower/v1/auth/refreshpublic/api/borrower/v1/auth/sessionborrower/api/borrower/v1/auth/sessionborrowerStatus reference
Application status: the lifecycle value on every application:
| Field | Type | Description |
|---|---|---|
submitted | status | Created; intake received. |
awaiting_docs | status | Waiting on borrower documents. |
underwriting | status | Assessment in progress as docs process. |
question_raised | status | An open question / escalation on the file. |
memo_drafted | status | A credit memo has been synthesized. |
approved | status | Marked approved by the lender. |
declined | status | Marked declined by the lender. |
Document status: the extraction state of each file:
| Field | Type | Description |
|---|---|---|
awaiting | status | Queued; pipeline not started. |
processing | status | Prescreen / parse / extraction running. |
verified | status | Extracted and grounded with high confidence. |
low_confidence | status | Extracted but flagged for review. |
missing | status | A required document not yet provided. |
Need help?
