openapi: 3.0.3
info:
title: Blend Public API
description: >-
The Blend Public API is the documented REST surface of the Blend Labs digital
lending and account-opening platform (developers.blend.com). It lets lenders and
certified technology partners programmatically create and manage lending
applications across home lending (mortgage), consumer lending, and deposit account
opening; manage borrowers/parties, documents and disclosures, pricing, closings and
eSignature packages, follow-ups (tasks), lenders and assignments; subscribe to
webhook event notifications; and export industry-standard loan files (Fannie Mae
3.2, MISMO 3.3.1/3.4) into a loan origination system (LOS).
endpointsModeled: The paths, methods, and resource names in this document are
modeled from Blend's public developer documentation and reference at
developers.blend.com (llms.txt endpoint index, Quick Start Guide, LOS Guide, and
the create/export home-loan guides). Blend does not publish a fully open
self-service OpenAPI - the reference is credential-gated and access tokens are
issued to Blend customers and certified partners. Request/response schemas below
are representative rather than field-complete; obtain the authoritative machine
spec at https://developers.blend.com/blend/openapi once you hold API credentials.
version: '12.0.0'
contact:
name: Blend Labs
url: https://developers.blend.com/blend
termsOfService: https://blend.com/legal/terms-of-service/
servers:
- url: https://api.blendlabs.com
description: Production
- url: https://api.beta.blendlabs.com
description: Beta / integration environment (used in Blend's documentation examples)
security:
- bearerAuth: []
tags:
- name: Home Lending Applications
description: Create and manage mortgage (home lending) applications.
- name: Borrowers & Parties
description: Borrowers, coborrowers, realtors, employers, incomes, and positions.
- name: Documents & Disclosures
description: Documents, disclosures, tax transcripts, and loan file export.
- name: Products & Pricing
description: Apply a priced product to a loan.
- name: Closings & eSignature
description: Closings, packages, eNotes, and RON sessions.
- name: Follow-ups
description: Borrower tasks and conditions.
- name: Events & Webhooks
description: Event notifications and event status.
- name: Consumer Lending & Deposit
description: Consumer lending, account opening, and deposit account applications.
- name: Lenders & Assignments
description: Lender users and application assignments.
- name: Reporting
description: Reporting and analytics datasets.
paths:
/home-lending/applications:
get:
operationId: listHomeLendingApplications
tags: [Home Lending Applications]
summary: List home lending applications
description: >-
Lists home lending applications. Supports filters used for export flows such
as exportable=true and losId-exists=false.
parameters:
- name: exportable
in: query
schema: { type: boolean }
description: Return only applications ready to export.
- name: losId-exists
in: query
schema: { type: boolean }
description: Filter by whether an LOS ID has been assigned.
responses:
'200':
description: A list of home lending applications.
content:
application/json:
schema:
type: object
properties:
data:
type: array
items: { $ref: '#/components/schemas/Application' }
'401': { $ref: '#/components/responses/Unauthorized' }
post:
operationId: createHomeLendingApplication
tags: [Home Lending Applications]
summary: Create a home lending application
description: >-
Creates a new home lending application. The minimum required input is the
primary borrower party's name (firstName, lastName) and email.
requestBody:
required: true
content:
application/json:
schema: { $ref: '#/components/schemas/CreateApplicationRequest' }
responses:
'201':
description: The created application.
content:
application/json:
schema: { $ref: '#/components/schemas/Application' }
'400': { $ref: '#/components/responses/BadRequest' }
'401': { $ref: '#/components/responses/Unauthorized' }
/home-lending/applications/{id}:
parameters:
- $ref: '#/components/parameters/ApplicationId'
get:
operationId: getApplication
tags: [Home Lending Applications]
summary: Get application data
responses:
'200':
description: The application.
content:
application/json:
schema: { $ref: '#/components/schemas/Application' }
'404': { $ref: '#/components/responses/NotFound' }
patch:
operationId: patchApplication
tags: [Home Lending Applications]
summary: Update application data
description: Update application metadata, including the losId, or archive the application.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
losId: { type: string }
archived: { type: boolean }
responses:
'200':
description: The updated application.
content:
application/json:
schema: { $ref: '#/components/schemas/Application' }
'404': { $ref: '#/components/responses/NotFound' }
delete:
operationId: deleteApplication
tags: [Home Lending Applications]
summary: Delete an application
responses:
'204': { description: Deleted. }
'404': { $ref: '#/components/responses/NotFound' }
/home-lending/applications/{id}/file-export:
parameters:
- $ref: '#/components/parameters/ApplicationId'
get:
operationId: exportApplicationFile
tags: [Documents & Disclosures]
summary: Export the loan application file
description: >-
Exports the industry-standard loan application file in the requested format
for import into an LOS.
parameters:
- name: format
in: query
required: true
schema:
type: string
enum: [FANNIE_MAE_3_2, MISMO_3_3_1, MISMO_3_4]
description: The export format (Fannie Mae 3.2, MISMO 3.3.1, or MISMO 3.4 beta).
responses:
'200':
description: The exported loan file.
content:
application/xml: {}
application/json: {}
'404': { $ref: '#/components/responses/NotFound' }
/home-lending/applications/export-statuses:
get:
operationId: getExportStatuses
tags: [Documents & Disclosures]
summary: Get application export statuses
parameters:
- name: ids
in: query
schema: { type: string }
description: Comma-separated application IDs.
responses:
'200':
description: Export statuses for the requested applications.
content:
application/json:
schema:
type: object
properties:
data:
type: array
items: { $ref: '#/components/schemas/ExportStatus' }
/home-lending/applications/{id}/export-status:
parameters:
- $ref: '#/components/parameters/ApplicationId'
post:
operationId: setExportStatus
tags: [Documents & Disclosures]
summary: Update application export status
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [status]
properties:
status:
type: string
enum: [IN_PROGRESS, SUCCESS, FAILED]
reason: { type: string }
responses:
'200':
description: The updated export status.
content:
application/json:
schema: { $ref: '#/components/schemas/ExportStatus' }
/applications/{id}/parties:
parameters:
- $ref: '#/components/parameters/ApplicationId'
get:
operationId: listParties
tags: [Borrowers & Parties]
summary: List parties for an application
responses:
'200':
description: The parties on the application.
content:
application/json:
schema:
type: object
properties:
data:
type: array
items: { $ref: '#/components/schemas/Party' }
post:
operationId: createParty
tags: [Borrowers & Parties]
summary: Add a party (coborrower, etc.) to an application
requestBody:
required: true
content:
application/json:
schema: { $ref: '#/components/schemas/PartyInput' }
responses:
'201':
description: The created party.
content:
application/json:
schema: { $ref: '#/components/schemas/Party' }
/applications/{id}/parties/{partyId}:
parameters:
- $ref: '#/components/parameters/ApplicationId'
- $ref: '#/components/parameters/PartyId'
patch:
operationId: patchParty
tags: [Borrowers & Parties]
summary: Update a party
requestBody:
required: true
content:
application/json:
schema: { $ref: '#/components/schemas/PartyInput' }
responses:
'200':
description: The updated party.
content:
application/json:
schema: { $ref: '#/components/schemas/Party' }
delete:
operationId: deleteParty
tags: [Borrowers & Parties]
summary: Remove a party
responses:
'204': { description: Removed. }
/applications/{id}/borrower-positions:
parameters:
- $ref: '#/components/parameters/ApplicationId'
get:
operationId: getBorrowerPositions
tags: [Borrowers & Parties]
summary: Get borrower positions
responses:
'200': { description: Borrower positions. }
put:
operationId: putBorrowerPositions
tags: [Borrowers & Parties]
summary: Set borrower positions
requestBody:
required: true
content:
application/json:
schema: { type: object }
responses:
'200': { description: Updated borrower positions. }
/applications/{id}/documents:
parameters:
- $ref: '#/components/parameters/ApplicationId'
get:
operationId: getApplicationDocuments
tags: [Documents & Disclosures]
summary: Get application documents
responses:
'200':
description: Documents attached to the application.
content:
application/json:
schema:
type: object
properties:
data:
type: array
items: { $ref: '#/components/schemas/Document' }
/documents:
post:
operationId: uploadDocument
tags: [Documents & Disclosures]
summary: Upload a document
requestBody:
required: true
content:
multipart/form-data:
schema: { type: object }
responses:
'201':
description: The uploaded document.
content:
application/json:
schema: { $ref: '#/components/schemas/Document' }
get:
operationId: getDocuments
tags: [Documents & Disclosures]
summary: List documents
responses:
'200':
description: A list of documents.
content:
application/json:
schema:
type: object
properties:
data:
type: array
items: { $ref: '#/components/schemas/Document' }
/documents/{documentId}:
parameters:
- $ref: '#/components/parameters/DocumentId'
get:
operationId: getDocument
tags: [Documents & Disclosures]
summary: Get a document
responses:
'200':
description: The document (binary or metadata reference).
'404': { $ref: '#/components/responses/NotFound' }
patch:
operationId: patchDocument
tags: [Documents & Disclosures]
summary: Update document data
requestBody:
required: true
content:
application/json:
schema: { type: object }
responses:
'200':
description: The updated document.
content:
application/json:
schema: { $ref: '#/components/schemas/Document' }
/documents/{documentId}/metadata:
parameters:
- $ref: '#/components/parameters/DocumentId'
get:
operationId: getDocumentMetadata
tags: [Documents & Disclosures]
summary: Get document metadata
responses:
'200': { description: Document metadata. }
/applications/{id}/product:
parameters:
- $ref: '#/components/parameters/ApplicationId'
put:
operationId: putPricedProduct
tags: [Products & Pricing]
summary: Apply a priced product to a loan
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
productId: { type: string }
rate: { type: number }
term: { type: integer }
responses:
'200': { description: The product applied to the loan. }
/closings:
post:
operationId: createClosing
tags: [Closings & eSignature]
summary: Create a closing
requestBody:
required: true
content:
application/json:
schema: { type: object }
responses:
'201':
description: The created closing.
content:
application/json:
schema: { $ref: '#/components/schemas/Closing' }
get:
operationId: listClosings
tags: [Closings & eSignature]
summary: List closings
responses:
'200':
description: A list of closings.
content:
application/json:
schema:
type: object
properties:
data:
type: array
items: { $ref: '#/components/schemas/Closing' }
/closings/{closingId}:
parameters:
- $ref: '#/components/parameters/ClosingId'
get:
operationId: getClosing
tags: [Closings & eSignature]
summary: Get a closing
responses:
'200':
description: The closing.
content:
application/json:
schema: { $ref: '#/components/schemas/Closing' }
patch:
operationId: updateClosing
tags: [Closings & eSignature]
summary: Update a closing
requestBody:
required: true
content:
application/json:
schema: { type: object }
responses:
'200':
description: The updated closing.
content:
application/json:
schema: { $ref: '#/components/schemas/Closing' }
/closings/{closingId}/send:
parameters:
- $ref: '#/components/parameters/ClosingId'
post:
operationId: submitClosing
tags: [Closings & eSignature]
summary: Submit (send) a closing
responses:
'202': { description: Closing submitted for processing. }
/applications/{id}/packages:
parameters:
- $ref: '#/components/parameters/ApplicationId'
get:
operationId: listPackages
tags: [Closings & eSignature]
summary: List eSignature packages
responses:
'200': { description: The packages for the application. }
post:
operationId: createPackage
tags: [Closings & eSignature]
summary: Create an eSignature package
requestBody:
required: true
content:
application/json:
schema: { type: object }
responses:
'201': { description: The created package. }
/applications/{id}/packages/{packageId}/issue:
parameters:
- $ref: '#/components/parameters/ApplicationId'
- name: packageId
in: path
required: true
schema: { type: string }
post:
operationId: issuePackage
tags: [Closings & eSignature]
summary: Issue a draft package for signature
responses:
'202': { description: Package issued to recipients. }
/applications/{id}/follow-ups:
parameters:
- $ref: '#/components/parameters/ApplicationId'
get:
operationId: listFollowUps
tags: [Follow-ups]
summary: List follow-ups
responses:
'200':
description: The follow-ups on the application.
content:
application/json:
schema:
type: object
properties:
data:
type: array
items: { $ref: '#/components/schemas/FollowUp' }
post:
operationId: createFollowUp
tags: [Follow-ups]
summary: Create a follow-up
requestBody:
required: true
content:
application/json:
schema: { $ref: '#/components/schemas/FollowUp' }
responses:
'201':
description: The created follow-up.
content:
application/json:
schema: { $ref: '#/components/schemas/FollowUp' }
/applications/{id}/follow-ups/{followUpId}:
parameters:
- $ref: '#/components/parameters/ApplicationId'
- name: followUpId
in: path
required: true
schema: { type: string }
get:
operationId: getFollowUp
tags: [Follow-ups]
summary: Get a follow-up
responses:
'200':
description: The follow-up.
content:
application/json:
schema: { $ref: '#/components/schemas/FollowUp' }
patch:
operationId: patchFollowUp
tags: [Follow-ups]
summary: Update a follow-up
requestBody:
required: true
content:
application/json:
schema: { $ref: '#/components/schemas/FollowUp' }
responses:
'200':
description: The updated follow-up.
content:
application/json:
schema: { $ref: '#/components/schemas/FollowUp' }
delete:
operationId: removeFollowUp
tags: [Follow-ups]
summary: Remove a follow-up
responses:
'204': { description: Removed. }
/events:
get:
operationId: getEvents
tags: [Events & Webhooks]
summary: List events
description: >-
Lists event notifications (for example Application Submitted, Documents
Submitted, Consumer Information Updated, Application Information Updated).
responses:
'200':
description: A list of events.
content:
application/json:
schema:
type: object
properties:
data:
type: array
items: { $ref: '#/components/schemas/Event' }
/events/descriptions:
get:
operationId: getEventDescriptions
tags: [Events & Webhooks]
summary: Get event descriptions
responses:
'200': { description: Available event types and their descriptions. }
/events/{eventId}:
parameters:
- name: eventId
in: path
required: true
schema: { type: string }
get:
operationId: getEvent
tags: [Events & Webhooks]
summary: Get an event
responses:
'200':
description: The event.
content:
application/json:
schema: { $ref: '#/components/schemas/Event' }
/events/{eventId}/status:
parameters:
- name: eventId
in: path
required: true
schema: { type: string }
post:
operationId: setEventStatus
tags: [Events & Webhooks]
summary: Set event status
description: Acknowledge an event so it is not redelivered.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
status: { type: string, enum: [ACKNOWLEDGED, PROCESSED, FAILED] }
responses:
'200': { description: The updated event status. }
/consumer-lending/applications/{id}:
parameters:
- $ref: '#/components/parameters/ApplicationId'
get:
operationId: getConsumerLendingApplication
tags: [Consumer Lending & Deposit]
summary: Get a consumer lending application
responses:
'200': { description: The consumer lending application. }
patch:
operationId: patchConsumerLendingApplication
tags: [Consumer Lending & Deposit]
summary: Update a consumer lending application
requestBody:
required: true
content:
application/json:
schema: { type: object }
responses:
'200': { description: The updated consumer lending application. }
/account-opening/applications/{id}:
parameters:
- $ref: '#/components/parameters/ApplicationId'
get:
operationId: getAccountOpeningApplication
tags: [Consumer Lending & Deposit]
summary: Get an account opening application
responses:
'200': { description: The account opening application. }
/deposit-accounts/applications:
get:
operationId: listDepositAccountApplications
tags: [Consumer Lending & Deposit]
summary: List deposit account applications
responses:
'200': { description: A list of deposit account applications. }
/deposit-accounts/products:
get:
operationId: listDepositAccountProducts
tags: [Consumer Lending & Deposit]
summary: List deposit account products
responses:
'200': { description: A list of deposit account products. }
/lenders:
get:
operationId: listLenders
tags: [Lenders & Assignments]
summary: List lenders
description: Retrieve lender (employee) users available for assignment.
parameters:
- name: emails
in: query
schema: { type: string }
description: Comma-separated lender emails to look up.
responses:
'200':
description: A list of lenders.
content:
application/json:
schema:
type: object
properties:
data:
type: array
items: { $ref: '#/components/schemas/Lender' }
post:
operationId: createLenders
tags: [Lenders & Assignments]
summary: Create lenders
requestBody:
required: true
content:
application/json:
schema: { type: object }
responses:
'201': { description: The created lenders. }
patch:
operationId: updateLenders
tags: [Lenders & Assignments]
summary: Update lenders
requestBody:
required: true
content:
application/json:
schema: { type: object }
responses:
'200': { description: The updated lenders. }
delete:
operationId: removeLenders
tags: [Lenders & Assignments]
summary: Remove lenders
responses:
'204': { description: Removed. }
/applications/{id}/assignments:
parameters:
- $ref: '#/components/parameters/ApplicationId'
get:
operationId: listAssignments
tags: [Lenders & Assignments]
summary: List assigned users
responses:
'200': { description: The users assigned to the application. }
put:
operationId: overrideAssignments
tags: [Lenders & Assignments]
summary: Override assignees
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
assignees:
type: array
items:
type: object
properties:
userId: { type: string }
role: { type: string, enum: [PRIMARY_ASSIGNEE, ASSIGNEE] }
responses:
'200': { description: The updated assignments. }
/reports/loans:
get:
operationId: getLoansReport
tags: [Reporting]
summary: Retrieve basic loan data
responses:
'200': { description: Loan reporting dataset. }
/reports/lenders:
get:
operationId: getLendersReport
tags: [Reporting]
summary: Retrieve lender users and metrics
responses:
'200': { description: Lender reporting dataset. }
/reports/borrowers:
get:
operationId: getBorrowersReport
tags: [Reporting]
summary: Retrieve borrower users
responses:
'200': { description: Borrower reporting dataset. }
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: >-
Blend authenticates requests with an authorization Bearer token. Each call must
also send blend-api-version (to pin the API version) and blend-target-instance
(tenant~instance) headers. API Secret Keys are exchanged for short-lived,
request-scoped JWTs at Blend's API Gateway. Credentials are issued to Blend
customers and certified partners - contact your Blend account team or
partnerships to obtain them.
parameters:
ApplicationId:
name: id
in: path
required: true
schema: { type: string }
description: The application ID.
PartyId:
name: partyId
in: path
required: true
schema: { type: string }
description: The party ID.
DocumentId:
name: documentId
in: path
required: true
schema: { type: string }
description: The document ID.
ClosingId:
name: closingId
in: path
required: true
schema: { type: string }
description: The closing ID.
responses:
BadRequest:
description: The request was invalid.
content:
application/json:
schema: { $ref: '#/components/schemas/Error' }
Unauthorized:
description: Authentication failed or the token is not authorized for this tenant.
content:
application/json:
schema: { $ref: '#/components/schemas/Error' }
NotFound:
description: The requested resource was not found.
content:
application/json:
schema: { $ref: '#/components/schemas/Error' }
schemas:
CreateApplicationRequest:
type: object
required: [party]
properties:
party:
type: object
required: [name, email]
properties:
name:
type: object
properties:
firstName: { type: string }
lastName: { type: string }
email: { type: string, format: email }
loanPurposeType: { type: string, enum: [PURCHASE, REFINANCE] }
applicationExperienceType: { type: string, example: FULL_APPLICATION }
applicationSource:
type: object
properties:
type: { type: string }
name: { type: string }
crmId: { type: string }
losId: { type: string }
leadId: { type: string }
referenceNumber: { type: string }
sendEmailInvite: { type: boolean }
Application:
type: object
properties:
id: { type: string }
solutionSubType: { type: string }
loanPurposeType: { type: string }
losId: { type: string }
parties:
type: array
items: { $ref: '#/components/schemas/Party' }
PartyInput:
type: object
properties:
name:
type: object
properties:
firstName: { type: string }
lastName: { type: string }
email: { type: string, format: email }
role: { type: string }
Party:
type: object
properties:
id: { type: string }
name:
type: object
properties:
firstName: { type: string }
lastName: { type: string }
email: { type: string, format: email }
econsent: { type: string }
Document:
type: object
properties:
id: { type: string }
type: { type: string }
name: { type: string }
status: { type: string }
ExportStatus:
type: object
properties:
applicationId: { type: string }
status: { type: string, enum: [IN_PROGRESS, SUCCESS, FAILED] }
reason: { type: string }
Closing:
type: object
properties:
id: { type: string }
applicationId: { type: string }
status: { type: string }
FollowUp:
type: object
properties:
id: { type: string }
title: { type: string }
status: { type: string }
dueDate: { type: string, format: date }
Event:
type: object
properties:
id: { type: string }
type: { type: string }
applicationId: { type: string }
createdAt: { type: string, format: date-time }
Lender:
type: object
properties:
id: { type: string }
email: { type: string, format: email }
permittedSolutionSubTypes:
type: array
items: { type: string }
roleNames:
type: array
items: { type: string }
Error:
type: object
properties:
error: { type: string }
message: { type: string }