Blend Home Lending Applications API

Create, list, retrieve, update, and delete home lending (mortgage) applications. Manage LOS milestones, decisions, intent-to-proceed, underwriting results, activities, and lender takeover. The minimum to create an application is the primary borrower party name and email.

OpenAPI Specification

blend-mortgage-openapi.yml Raw ↑
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 }