Lone Wolf Deals API

Partner-integration API (release 25.01.00) covering deal records across the Lone Wolf Foundation platform. All requests require an Authorization header carrying a Bearer JWT obtained by POSTing credentials to https://authentication.api.lwolf.com/v1/login. The largest operation surface published by Lone Wolf — 53 paths / 86 operations. The OpenAPI definition declares no servers block; the production base URL recorded here (https://deals.api.lwolf.com) comes from the Getting Started and Searching Deals sections of the published documentation, which show GET https://deals.api.lwolf.com/v1 and /v1/deals/search. The definition also declares no operationIds, so its operations cannot be addressed by name from workflows, MCP tool bindings or agent skills.

OpenAPI Specification

lone-wolf-deals-api-openapi.yml Raw ↑
---
openapi: 3.0.3
info:
  title: Deals API
  version: 1.0.0
  description: |+
    ## Index

    For partner integration use (25.01.00)

    ### Getting Started

    #### Getting a JWT Access Token

    `POST https://authentication.api.lwolf.com/v1/login`

    All APIs require an *Authorization* HTTP Header that contains a *Bearer {token}* as its value. The token is a JSON Web Token (JWT) and can be generated as needed from the Authentication API using a POST request to the `/v1/login` endpoint with your provided credentials / secrets.

    This will provide a JWT token in the response which can then be used as your Bearer token in your Authorization header when making API calls.

    **Request Example**

    ```json
    {
      "emailAddress": "api-aaaa111@apps.lwolf.com",
      "password": "AAAA111",
      "clientId": "GgP8g-zksBgWuXum!DbXh*qASYCsfNZF"
    }
    ```

    **cURL**

    ```bash
    curl --location --request POST 'https://authentication.api.lwolf.com/v1/login' \
    --header 'Content-Type: application/json' \
    --data-raw '{
    "emailAddress": "api-aaa111@apps.lwolf.com",
    "clientId": "AAAA111",
    "password": "GgP8g-zksBgWuXum!DbXh*qASYCsfNZF"
    }'
    ```

    **Response Example (200 OK)**

    ```json
    {
      "token": "<JWT string>",
      "expiresIn": 86400
    }
    ```

    ### Searching Deals

    #### Using Field Search on Summaries

    `GET https://deals.api.lwolf.com/v1/search`

    The Deals API supports searching deal summaries, compact and heavily indexed versions of deals, by a single field and value.

    **Example**

    ```
    https://deals.api.lwolf.com/v1/deals/search?entityPath=deal&fieldName=bwId&searchText=12345
    ```

    #### Using OData on Full Details

    `GET https://deals.api.lwolf.com/v1/deals`

    The Deals API supports searching deals using a subset of OData queries ($filter, $top, $skip, $limit). Any top-level field can be used in a query however at the current time fields from nested objects is not supported. As well the use of the IN operator is not supported, however multiple OR operators can be used instead.

    **Example**

    ```
    https://deals.api.lwolf.com/v1/deals?$filter=addressStreetNumber%20eq%20%27263%27%20and%20%20addressStreetName%20eq%20%27Wellington%20St%27%20and%20addressUnitNumber%20eq%20%27701%27
    ```

    API for managing deals, commissions, conditions, and client contacts.

    ## Roster API

    Lone Wolf Technologies Roster API

    **API Endpoint:** `https://roster.api.lwolf.com/v1`

    **Schemes:** https

    **Version:** 1.0.0

    ### Authentication

    **Bearer Token**

    Use the Authentication API to retrieve the JSON Web Token for all calls to this API. Pass the token as `Authorization: Bearer {token}` in the request header.

    ### Members

    #### Add new member

    `POST /members`

    If the 'id' is passed in this object, the API will attempt to use that for its member id. If 'id' is null or undefined, the API will generate one.

    **Request Example**

    ```json
    {
      "id": "string (UUID)",
      "bwId": "number (int32)",
      "firstName": "string",
      "middleName": "string",
      "lastName": "string",
      "number": "string",
      "officeId": "string (UUID)",
      "bwOfficeId": "number (int32)",
      "inactiveDate": "string (date)",
      "legalName": "string",
      "primaryEmailAddress": "string",
      "addressLine1": "string",
      "addressLine2": "string",
      "addressCity": "string",
      "addressPostalCode": "string",
      "addressProvinceCode": "string",
      "addressCountryCode": "string",
      "birthDate": "string (date)",
      "typeId": "string",
      "lwaId": "string (UUID)",
      "memberTypeCode": {
        "createdTimestamp": "string (date-time)",
        "modifiedTimestamp": "string (date-time)",
        "id": "string (UUID)",
        "code": "string",
        "name": "string"
      }
    }
    ```

    | Response | Description |
    |---|---|
    | 201 Created | Member created |
    | 400 Bad Request | Invalid request. See response body for details. |
    | 401 Unauthorized | Unauthorized request. See response body for details. |
    | 403 Forbidden | Permission denied. See response body for details. |
    | 409 Conflict | Member already exists. |
    | 500 Internal Server Error | Unknown error. See response body for details. |

    **Response Example (201 Created)**

    ```json
    {
      "createdTimestamp": "string (date-time)",
      "modifiedTimestamp": "string (date-time)",
      "id": "string (UUID)",
      "version": "number (int32)",
      "bwId": "number (int32)",
      "firstName": "string",
      "middleName": "string",
      "lastName": "string",
      "number": "string",
      "officeId": "string (UUID)",
      "bwOfficeId": "number (int32)",
      "inactiveDate": "string (date)",
      "legalName": "string",
      "primaryEmailAddress": "string",
      "addressLine1": "string",
      "addressLine2": "string",
      "addressCity": "string",
      "addressPostalCode": "string",
      "addressProvinceCode": "string",
      "addressCountryCode": "string",
      "birthDate": "string (date)",
      "typeId": "string",
      "lwaId": "string (UUID)",
      "memberTypeCode": {
        "createdTimestamp": "string (date-time)",
        "modifiedTimestamp": "string (date-time)",
        "id": "string (UUID)",
        "code": "string",
        "name": "string"
      }
    }
    ```

    **Response Example (409 Conflict)**

    ```json
    {
      "code": "integer (int32)",
      "message": "string",
      "details": ["string"]
    }
    ```

    #### Get list of members

    `GET /members`

    | Response | Description |
    |---|---|
    | 200 OK | Success |
    | 400 Bad Request | Invalid request. See response body for details. |
    | 401 Unauthorized | Unauthorized request. See response body for details. |
    | 403 Forbidden | Permission denied. See response body for details. |
    | 500 Internal Server Error | Unknown error. See response body for details. |

    **Response Example (200 OK)**

    ```json
    [
      {
        "createdTimestamp": "string (date-time)",
        "modifiedTimestamp": "string (date-time)",
        "id": "string (UUID)",
        "version": "number (int32)",
        "bwId": "number (int32)",
        "firstName": "string",
        "middleName": "string",
        "lastName": "string",
        "number": "string",
        "officeId": "string (UUID)",
        "bwOfficeId": "number (int32)",
        "inactiveDate": "string (date)",
        "legalName": "string",
        "primaryEmailAddress": "string",
        "addressLine1": "string",
        "addressLine2": "string",
        "addressCity": "string",
        "addressPostalCode": "string",
        "addressProvinceCode": "string",
        "addressCountryCode": "string",
        "birthDate": "string (date)",
        "typeId": "string",
        "lwaId": "string (UUID)",
        "memberTypeCode": {
          "createdTimestamp": "string (date-time)",
          "modifiedTimestamp": "string (date-time)",
          "id": "string (UUID)",
          "code": "string",
          "name": "string"
        }
      }
    ]
    ```

    #### Delete a specific member

    `DELETE /members/{memberId}`

    **Path Parameters**

    | Parameter | Type | Description |
    |---|---|---|
    | memberId | string (UUID) | |

    | Response | Description |
    |---|---|
    | 200 OK | Member deleted. |
    | 400 Bad Request | Invalid request. See response body for details. |
    | 401 Unauthorized | Unauthorized request. See response body for details. |
    | 403 Forbidden | Permission denied. See response body for details. |
    | 404 Not Found | Member not found. |
    | 500 Internal Server Error | Unknown error. See response body for details. |

    **Response Example (404 Not Found)**

    ```json
    {
      "code": "integer (int32)",
      "message": "string",
      "details": ["string"]
    }
    ```

    #### Get a specific member

    `GET /members/{memberId}`

    **Path Parameters**

    | Parameter | Type | Description |
    |---|---|---|
    | memberId | string (UUID) | |

    **Query Parameters**

    | Parameter | Type | Description |
    |---|---|---|
    | isBwId | boolean | Indicates whether the passed 'memberId' should be treated as the brokerWOLF id |

    | Response | Description |
    |---|---|
    | 200 OK | Member found. |
    | 400 Bad Request | Invalid request. See response body for details. |
    | 401 Unauthorized | Unauthorized request. See response body for details. |
    | 403 Forbidden | Permission denied. See response body for details. |
    | 404 Not Found | Member not found. |
    | 500 Internal Server Error | Unknown error. See response body for details. |

    #### Update a member property

    `PATCH /members/{memberId}`

    Updates properties on the member entity. None of its child collections can be updated with this route.

    **Path Parameters**

    | Parameter | Type | Description |
    |---|---|---|
    | memberId | string (UUID) | |

    **Request Example**

    ```json
    {
      "bwId": "number (int32)",
      "firstName": "string",
      "middleName": "string",
      "lastName": "string",
      "number": "string",
      "officeId": "string (UUID)",
      "bwOfficeId": "number (int32)",
      "inactiveDate": "string (date)",
      "legalName": "string",
      "primaryEmailAddress": "string",
      "addressLine1": "string",
      "addressLine2": "string",
      "addressCity": "string",
      "addressPostalCode": "string",
      "addressProvinceCode": "string",
      "addressCountryCode": "string",
      "birthDate": "string (date)",
      "typeId": "string",
      "lwaId": "string (UUID)",
      "memberTypeCode": {
        "createdTimestamp": "string (date-time)",
        "modifiedTimestamp": "string (date-time)",
        "id": "string (UUID)",
        "code": "string",
        "name": "string"
      }
    }
    ```

    | Response | Description |
    |---|---|
    | 200 OK | Member updated. |
    | 400 Bad Request | Invalid request. See response body for details. |
    | 401 Unauthorized | Unauthorized request. See response body for details. |
    | 403 Forbidden | Permission denied. See response body for details. |
    | 404 Not Found | Member not found. |
    | 412 Precondition Failed | Optimistic concurrency check failed. The If-Match header is missing or it does not contain the version currently in the database. |
    | 500 Internal Server Error | Unknown error. See response body for details. |

    ### Offices

    #### Add new office

    `POST /offices`

    If the 'id' is passed in this object, the API will attempt to use that for its office id. If 'id' is null or undefined, the API will generate one.

    **Request Example**

    ```json
    {
      "id": "string (UUID)",
      "bwId": "number (int32)",
      "name": "string",
      "shortName": "string",
      "inactiveDate": "string (date)"
    }
    ```

    | Response | Description |
    |---|---|
    | 201 Created | Office created |
    | 400 Bad Request | Invalid request. See response body for details. |
    | 401 Unauthorized | Unauthorized request. See response body for details. |
    | 403 Forbidden | Permission denied. See response body for details. |
    | 409 Conflict | Office already exists. |
    | 500 Internal Server Error | Unknown error. See response body for details. |

    **Response Example (201 Created)**

    ```json
    {
      "createdTimestamp": "string (date-time)",
      "modifiedTimestamp": "string (date-time)",
      "id": "string (UUID)",
      "version": "number (int32)",
      "bwId": "number (int32)",
      "name": "string",
      "shortName": "string",
      "inactiveDate": "string (date)"
    }
    ```

    #### Get list of offices

    `GET /offices`

    | Response | Description |
    |---|---|
    | 200 OK | Success |
    | 400 Bad Request | Invalid request. See response body for details. |
    | 401 Unauthorized | Unauthorized request. See response body for details. |
    | 403 Forbidden | Permission denied. See response body for details. |
    | 500 Internal Server Error | Unknown error. See response body for details. |

    **Response Example (200 OK)**

    ```json
    [
      {
        "createdTimestamp": "string (date-time)",
        "modifiedTimestamp": "string (date-time)",
        "version": "number (int32)",
        "id": "string (UUID)",
        "bwId": "number (int32)",
        "name": "string",
        "shortName": "string",
        "inactiveDate": "string (date)"
      }
    ]
    ```

    #### Delete a specific office

    `DELETE /offices/{officeId}`

    **Path Parameters**

    | Parameter | Type | Description |
    |---|---|---|
    | officeId | string (UUID) | |

    | Response | Description |
    |---|---|
    | 200 OK | Office deleted. |
    | 400 Bad Request | Invalid request. See response body for details. |
    | 401 Unauthorized | Unauthorized request. See response body for details. |
    | 403 Forbidden | Permission denied. See response body for details. |
    | 404 Not Found | Office not found. |
    | 500 Internal Server Error | Unknown error. See response body for details. |

    #### Get a specific office

    `GET /offices/{officeId}`

    **Path Parameters**

    | Parameter | Type | Description |
    |---|---|---|
    | officeId | string (UUID) | |

    **Query Parameters**

    | Parameter | Type | Description |
    |---|---|---|
    | isBwId | boolean | Indicates whether the passed 'officeId' should be treated as the brokerWOLF id |

    | Response | Description |
    |---|---|
    | 200 OK | Office found. |
    | 400 Bad Request | Invalid request. See response body for details. |
    | 401 Unauthorized | Unauthorized request. See response body for details. |
    | 403 Forbidden | Permission denied. See response body for details. |
    | 404 Not Found | Office not found. |
    | 500 Internal Server Error | Unknown error. See response body for details. |

    #### Update an office property

    `PATCH /offices/{officeId}`

    **Path Parameters**

    | Parameter | Type | Description |
    |---|---|---|
    | officeId | string (UUID) | |

    | Response | Description |
    |---|---|
    | 200 OK | Office updated. |
    | 400 Bad Request | Invalid request. See response body for details. |
    | 401 Unauthorized | Unauthorized request. See response body for details. |
    | 403 Forbidden | Permission denied. See response body for details. |
    | 404 Not Found | Office not found. |
    | 412 Precondition Failed | Optimistic concurrency check failed. The If-Match header is missing or it does not contain the version currently in the database. |
    | 500 Internal Server Error | Unknown error. See response body for details. |

    #### Get list of office summaries

    `GET /offices/summary`

    | Response | Description |
    |---|---|
    | 200 OK | Success |
    | 400 Bad Request | Invalid request. See response body for details. |
    | 401 Unauthorized | Unauthorized request. See response body for details. |
    | 403 Forbidden | Permission denied. See response body for details. |
    | 500 Internal Server Error | Unknown error. See response body for details. |

    **Response Example (200 OK)**

    ```json
    [
      {
        "id": "string (UUID)",
        "name": "string",
        "shortName": "string",
        "inactiveDate": "string (date)"
      }
    ]
    ```

    ### Brokerages

    #### Add new brokerage

    `POST /brokerages`

    If the 'id' is passed in this object, the API will attempt to use that for its brokerage id. If 'id' is null or undefined, the API will generate one. An internal token is needed to access this endpoint.

    **Request Example**

    ```json
    {
      "createdTimestamp": "string (date-time)",
      "modifiedTimestamp": "string (date-time)",
      "name": "string",
      "shortName": "string",
      "id": "string",
      "companyTypeCode": "string",
      "addressPostalCode": "string",
      "addressCountryCode": "string"
    }
    ```

    | Response | Description |
    |---|---|
    | 201 Created | Brokerage created |
    | 400 Bad Request | Invalid request. See response body for details. |
    | 401 Unauthorized | Unauthorized request. See response body for details. |
    | 403 Forbidden | Permission denied. See response body for details. |
    | 409 Conflict | Brokerage already exists. |
    | 500 Internal Server Error | Unknown error. See response body for details. |

    **Response Example (201 Created)**

    ```json
    {
      "createdTimestamp": "string (date-time)",
      "modifiedTimestamp": "string (date-time)",
      "name": "string",
      "shortName": "string",
      "id": "string",
      "companyTypeCode": "string",
      "addressPostalCode": "string",
      "addressCountryCode": "string"
    }
    ```

    #### Retrieve all brokerages

    `GET /brokerages`

    This endpoint is internal only and requires an internal token. The response will be all brokerages in the database.

    **Query Parameters**

    | Parameter | Type | Description |
    |---|---|---|
    | filter | string | Filter that will be used to query the database. |

    | Response | Description |
    |---|---|
    | 200 OK | Success |
    | 400 Bad Request | Invalid request. See response body for details. |
    | 401 Unauthorized | Unauthorized request. See response body for details. |
    | 500 Internal Server Error | Unknown error. See response body for details. |

    #### Delete a specific brokerage

    `DELETE /brokerages/{clientId}`

    **Path Parameters**

    | Parameter | Type | Description |
    |---|---|---|
    | clientId | string (UUID) | |

    | Response | Description |
    |---|---|
    | 200 OK | Brokerage deleted. |
    | 400 Bad Request | Invalid request. See response body for details. |
    | 401 Unauthorized | Unauthorized request. See response body for details. |
    | 403 Forbidden | Permission denied. See response body for details. |
    | 404 Not Found | Brokerage not found. |
    | 500 Internal Server Error | Unknown error. See response body for details. |

    #### Get a specific brokerage

    `GET /brokerages/{clientId}`

    **Path Parameters**

    | Parameter | Type | Description |
    |---|---|---|
    | clientId | string | |

    | Response | Description |
    |---|---|
    | 200 OK | Brokerage found. |
    | 400 Bad Request | Invalid request. See response body for details. |
    | 401 Unauthorized | Unauthorized request. See response body for details. |
    | 403 Forbidden | Permission denied. See response body for details. |
    | 404 Not Found | Brokerage not found. |
    | 500 Internal Server Error | Unknown error. See response body for details. |

    ### Member Types

    #### Get a specific Member Type

    `GET /member-types`

    **Path Parameters**

    | Parameter | Type | Description |
    |---|---|---|
    | id | string (UUID) | |

    | Response | Description |
    |---|---|
    | 200 OK | Member Type found. |
    | 400 Bad Request | Invalid request. See response body for details. |
    | 401 Unauthorized | Unauthorized request. See response body for details. |
    | 403 Forbidden | Permission denied. See response body for details. |
    | 404 Not Found | Brokerage not found. |
    | 500 Internal Server Error | Unknown error. See response body for details. |

    **Response Example (200 OK)**

    ```json
    {
      "id": "string (UUID)",
      "createdTimestamp": "string (date-time)",
      "modifiedTimestamp": "string (date-time)",
      "version": "number (int32)",
      "code": "string",
      "name": "string"
    }
    ```

    #### Retrieve all Member Types

    `GET /member-types`

    This endpoint is internal only and requires an internal token. The response will be all brokerages in the database.

    **Query Parameters**

    | Parameter | Type | Description |
    |---|---|---|
    | filter | string | Filter that will be used to query the database. |

    | Response | Description |
    |---|---|
    | 200 OK | Success |
    | 400 Bad Request | Invalid request. See response body for details. |
    | 401 Unauthorized | Unauthorized request. See response body for details. |
    | 500 Internal Server Error | Unknown error. See response body for details. |

    ### Schema Definitions

    #### HttpStatus400

    Invalid request. See response body for details.

    ```json
    {
      "code": "integer (int32)",
      "message": "string",
      "details": ["string"]
    }
    ```

    #### HttpStatus401

    Unauthorized request. See response body for details.

    ```json
    {
      "code": "integer (int32)",
      "message": "string",
      "details": ["string"]
    }
    ```

    #### HttpStatus403

    Permission denied. See response body for details.

    ```json
    {
      "code": "integer (int32)",
      "message": "string",
      "details": ["string"]
    }
    ```

    #### HttpStatus412

    Optimistic concurrency check failed. The If-Match header is missing or it does not contain the version currently in the database.

    ```json
    {
      "code": "integer (int32)",
      "message": "string",
      "details": ["string"]
    }
    ```

    #### HttpStatus500

    Unknown error. See response body for details.

    ```json
    {
      "code": "integer (int32)",
      "message": "string",
      "details": ["string"]
    }
    ```

    #### ApiError

    | Field | Type | Description |
    |---|---|---|
    | code | integer (int32) | An error code. This is typically the same as the http status code but can be different in some cases. |
    | message | string | Simple message about the error. |
    | details | string[] | An array of strings holding more details about the error. |

    ```json
    {
      "code": "integer (int32)",
      "message": "string",
      "details": ["string"]
    }
    ```

    #### Member

    | Field | Type | Description |
    |---|---|---|
    | createdTimestamp | string (date-time) | |
    | modifiedTimestamp | string (date-time) | |
    | id | string (UUID) | |
    | bwId | number (int32) | The brokerWOLF Id of the member. This should not be used by third party systems as this value could go away in the future. |
    | version | number (int32) | The version of the member in the database. Used for optimistic concurrency checking. |
    | firstName | string | |
    | middleName | string | |
    | lastName | string | |
    | number | string | The brokerage specified number. |
    | officeId | string (UUID) | |
    | bwOfficeId | number (int32) | The brokerWOLF Id of the office. This should not be used by third party systems as this value could go away in the future. |
    | inactiveDate | string (date) | The date the member went inactive. If this is null, the member is active. |
    | legalName | string | The legal name of member. |
    | primaryEmailAddress | string | The primary email address of a member. |
    | addressLine1 | string | The address of a member. |
    | addressLine2 | string | The second address of a member. |
    | addressCity | string | The city of a member. |
    | addressPostalCode | string | The postal code of a member. |
    | addressProvinceCode | string | The province code of a member. |
    | addressCountryCode | string | The country code of a member. |
    | birthDate | string | The birth date of a member. |
    | typeId | string | The type id of a member. |
    | lwaId | string | The lwaId of a member. |
    | memberTypeCode | string | The member type of a member. |

    #### Office

    | Field | Type | Description |
    |---|---|---|
    | createdTimestamp | string (date-time) | |
    | modifiedTimestamp | string (date-time) | |
    | id | string (UUID) | |
    | version | number (int32) | The version of the office in the database. Used for optimistic concurrency checking. |
    | bwId | number (int32) | The brokerWOLF Id of the office. This should not be used by third party systems as this value could go away in the future. |
    | name | string | Main name of the office. |
    | shortName | string | Short name for the office. |
    | inactiveDate | string (date) | The date the office went inactive. If this is null, the office is active. |

    #### Brokerage

    | Field | Type | Description |
    |---|---|---|
    | createdTimestamp | string (date-time) | |
    | modifiedTimestamp | string (date-time) | |
    | version | number (int32) | The version of the brokerage in the database. Used for optimistic concurrency checking. |
    | name | string | Main name of the brokerage. |
    | shortName | string | Short name for the brokerage. |
    | id | string | |
    | companyTypeCode | string | Company Type Code for the brokerage. |
    | addressPostalCode | string | Address Postal Code for the brokerage. |
    | addressCountryCode | string | Country Code for the brokerage. |

    #### Member Type

    | Field | Type | Description |
    |---|---|---|
    | createdTimestamp | string (date-time) | |
    | modifiedTimestamp | string (date-time) | |
    | id | string | |
    | version | number (int32) | The version of the brokerage in the database. Used for optimistic concurrency checking. |
    | code | string | Member type code. |
    | name | string | Name of the member type. |

    #### Office Summary

    | Field | Type | Description |
    |---|---|---|
    | id | string (UUID) | |
    | name | string | Main name of the office. |
    | shortName | string | Short name for the office. |
    | inactiveDate | string (date) | The date the office went inactive. If this is null, the office is active. |

security:
- BearerToken: []
components:
  securitySchemes:
    BearerToken:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'JSON Web Token obtained from the Authentication API (`POST /v1/login`).
        Pass the token as `Authorization: Bearer <token>` in every request. Tokens
        expire after the number of seconds specified in the `expiresIn` field of the
        login response.'
  schemas:
    Address:
      type: object
    PhoneNumber:
      type: object
    Condition:
      type: object
    ExternalAgent:
      type: object
    ConditionType:
      type: object
    Deposit:
      type: object
    EmailAddress:
      type: object
    Commission:
      type: object
    Classification:
      type: object
    ContactType:
      type: object
    PropertyType:
      type: object
    ClientContact:
      type: object
    ExternalCommission:
      type: object
    DealSyncStatus:
      type: object
    BusinessContact:
      type: object
    Deal:
      type: object
      properties:
        id:
          type: string
          format: uuid
        version:
          type: integer
          format: int32
        createdTimestamp:
          type: string
          format: date-time
        modifiedTimestamp:
          type: string
          format: date-time
        culture:
          type: string
        number:
          type: string
        mlsNumber:
          type: string
        statusCode:
          type: string
        classCode:
          type: string
        name:
          type: string
        addressStreetNumber:
          type: string
        addressStreetName:
          type: string
        addressStreetDirection:
          type: string
        addressUnitNumber:
          type: string
        addressCity:
          type: string
        addressProvinceCode:
          type: string
        addressPostalCode:
          type: string
        addressCountryCode:
          type: string
        offerDate:
          type: string
          format: date
        closeDate:
          type: string
          format: date
        entryDate:
          type: string
          format: date
        finalizeDate:
          type: string
          format: date
        firmDate:
          type: string
          format: date
        closePrice:
          type: number
          format: float
        legalDescription:
          type: string
        classification:
          type: object
          properties:
            id:
              type: string
              format: uuid
            createdTimestamp:
              type: string
              format: date-time
            modifiedTimestamp:
              type: string
              format: date-time
            code:
              type: string
            name:
              type: string
            endTypeCode:
              type: string
            endCount:
              type: string
        propertyType:
          type: object
          properties:
            id:
              type: string
              format: uuid
            createdTimestamp:
              type: string
              format: date-time
            modifiedTimestamp:
              type: string
              format: date-time
            code:
              type: string
            name:
              type: string
            shortName:
              type: string
            classCode:
              type: string
        businessContacts:
          type: array
          items: {}
        client-contacts:
          type: array
          items: {}
        conditions:
          type: array
          items: {}
        deposits:
          type: array
          items: {}
        externalAgents:
          type: array
          items: {}
        tiers:
          type: array
          items: {}
    SourceOfBusiness:
      type: object
    Tier:
      type: object
    DealSummary:
      type: object
    ApiError:
      type: object
      properties:
        code:
          type: integer
          format: int32
        message:
          type: string
        details:
          type: array
          items:
            type: string
    Login:
      type: object
      required:
      - emailAddress
      - password
      properties:
        emailAddress:
          type: string
          format: email
          description: The email address for the user's account.
        password:
          type: string
          description: The user's password.
        clientId:
          type: string
          description: Penderis code for brokerWOLF logins. Extranet or penderis code
            for WOLFconnect logins. If not passed and the user belongs to only one
            client, that client is returned in the JWT. If the user belongs to multiple
            clients and this is not passed, no client information is included in the
            JWT.
    TokenInfo:
      type: object
      properties:
        token:
          type: string
          description: The JSON Web Token to use in the Authorization header for all
            requests to any API.
        expiresIn:
          type: integer
          format: int32
          description: The number of seconds in which the token will expire.
paths:
  "/business-contacts/{businessContactId}":
    get:
      summary: Get a business contact
      description: Using the business contact guid in the request path, the method
        requests a business contact.
      tags:
      - Business Contact
      security:
      - BearerToken: []
      parameters:
      - name: businessContactId
        in: in path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Retrieved business contact successfully.
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/BusinessContact"
        '400':
          description: Invalid request. See response body for details.
        '401':
          description: Unauthorized request. See response body for details.
        '403':
          description: Permission denied. See response body for details.
        '404':
          description: Business contact not found.
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/ApiError"
        '500':
          description: Unknown error. See response body for details.
    patch:
      summary: Update a business contact
      description: Using the business contact guid in the request path, the method
        updates the list of changes specified in the request body.
      tags:
      - Business Contact
      security:
      - BearerToken: []
      parameters:
      - name: businessContactId
        in: in path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Successfully updated the business contact.
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/BusinessContact"
        '400':
          description: In

# --- truncated at 32 KB (152 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/lone-wolf/refs/heads/main/openapi/lone-wolf-deals-api-openapi.yml