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 }