REALTOR.ca Board API

The REALTOR.ca Board API is a separate, smaller roster-distribution API for CREA's member boards and associations rather than for listing consumers. CREA describes it as "a data distribution API that allows Boards to access Members and Offices roster information built on modern industry standards" and states that "Board Data API is normalized based on the RESO Data Dictionary standards". Boards can enter data-sharing agreements with other boards to pull roster information for consenting partner boards. It exposes four documented operations - GET /Member, GET /Member/{MemberNationalAssociationId}, GET /Office and GET /Office/{OfficeNationalAssociationId} - and is plain JSON rather than OData; every request must carry an Accept header of application/json or the service answers HTTP 406 "Invalid Accept Header". Authentication is OAuth 2.0 client credentials at https://identity.crea.ca/connect/token with scope BoardDataApi.read. Credentials are provided by CREA to boards; there is no self-serve path.

OpenAPI Specification

crea-realtor-ca-board-api-openapi.json Raw ↑
{
  "openapi": "3.0.1",
  "info": {
    "title": "REALTOR.ca Board API Documentation",
    "description": "The REALTOR.ca Board API is a data distribution API that allows Boards to access Members and Offices roster information built on modern industry standards. Board Data API is normalized based on the RESO Data Dictionary standards.\r\n\r\nBoards can create data-sharing agreements with other boards, allowing them to pull roster information for any or all consenting partner boards. See Data Sharing Agreements appendix for details on how to set up data-sharing agreements between boards. \r\n\r\nThe Board API data and endpoints are behind an authentication layer requiring a valid access_token. To access the Board API data or endpoints, include access_token with each call made to the API. The access_token can be generated by using the credentials provided and calling our authentication server.\r\n\r\n# Quickstart Overview \r\n\r\nThis quickstart example will walk you through requesting the <code>access_token</code> and accessing the Board API endpoints by making API calls. \r\n\r\nFor this guide, you can use any API client of your choice.  \r\n\r\n### Prerequisites \r\n\r\nTo run this quickstart, you need the following prerequisites: \r\n\r\n- API Client of your choice\r\n- <code>client_id</code> - provided by CREA\r\n- <code>client_secret</code> - provided by CREA\r\n\r\n</br>\r\n\r\n### Step 1 - Get an access token \r\n\r\nAn access token is required to make requests to Board API. To generate one, make a request to identity.crea.ca. The access token lasts for 60 minutes. \r\n\r\n**Example Request:** \r\n\r\n\tPOST /connect/token \r\n\tHost: identity.crea.ca \r\n    application/x-www-form-urlencoded\r\n\r\n    Body\r\n\tgrant_type : \"client_credentials\"\r\n\tclient_id : \"xxxxxxxx\"\r\n\tclient_secret : \"xxxxxxxx\"\r\n\tscope : \"BoardDataApi.read\"\r\n\r\n**Example Response:**\r\n\r\nThe response includes the access_token. This is what you will use to make API calls to Board API.\r\n\r\n```json\r\n{\r\n    \"access_token\": \"{access_ token}\",\r\n    \"expires_in\": 3600,\r\n    \"token_type\": \"Bearer\",\r\n    \"scope\": \"BoardDataApi.read\"\r\n}\r\n```\r\n</br>\r\n\r\n### Step 2 - Make an API call to any resource available \r\n\r\nProceed to make an API call to our member endpoint in Board API using the <code>access_token</code> generated in the previous step. Please note that all incoming REALTOR.ca Board API requests should include the 'Accept' header with a value of 'application/json'.\r\n\r\n**Example Request:**\r\n\r\n\tGET /Member \r\n\tHost: boardapi.realtor.ca \r\n\tAuthorization: Bearer {access_token} \r\n    Accept: application/json\r\n\r\n**Example Response:** \r\n\r\nStatus: 200 OK \r\n```json\t\r\n{\r\n  {\r\n    \"pagination\": {\r\n        \"skip\": 0,\r\n        \"top\": 100\r\n    },\r\n    \"data\": [\r\n        {\r\n            \"MemberFirstName\": \"John\",\r\n            \"MemberMiddleName\": null,\r\n            \"MemberLastName\": \"Barbisan\",\r\n            \"MemberStatus\": \"Active\",\r\n            \"MemberNationalAssociationId\": \"1029825\",\r\n            \"OfficeNationalAssociationId\": \"1087778\",\r\n            \"MemberAORKey\": \"6\",\r\n            \"MemberNamePrefix\": null,\r\n            \"MemberNameSuffix\": null,\r\n            \"MemberNickname\": null,\r\n            \"JobTitle\": null,\r\n            \"MemberEmail\": \"barbisan@telus.net\",\r\n            \"MemberAddress1\": null,\r\n            \"MemberAddress2\": null,\r\n            \"MemberPostalCode\": null,\r\n            \"MemberCity\": null,\r\n            \"ModificationTimestamp\": \"2021-10-08T09:36:00Z\",\r\n            \"OriginalEntryTimestamp\": \"2006-06-20T17:48:00Z\"\r\n        }\r\n     ]\r\n}\r\n```\r\n</br>\r\n\r\n# Authorization\r\n\r\nAuthorization for the Board API platform is done through an Identity Server. The Identity Server leverages OAUTH 2.0 to provide access tokens to Board API. \r\n\r\n## API Access Tokens \r\n\r\nAll data access for an application is authorized and authenticated using API tokens.  \r\n\r\nFor Board API we recommend using a server token to implement server-to-server API requests. Client-to-server API token requests create a security risk and could allow unauthorized access to your data feeds. \r\n\r\nEach request to the Board API requires valid credentials to obtain an access token. \r\n\r\nTo request a token, send a POST request to the following endpoint.  \r\n\r\n    https://identity.crea.ca/connect/token \r\n\r\nThe following fields should be in the request body and should be x-www-form-urlencoded. \r\n\r\n| Field | Description | \r\n| ----------- | ----------- |\r\n| <code>client_id</code> | The <code>username</code> of your Board |\r\n| <code>client_secret</code> | The <code>password</code> of your Board |\r\n| <code>grant_type</code> | Use the value <code>client_credentials</code> |\r\n| <code>scope</code> | Use the value <code>BoardDataApi.read</code> |\r\n\r\nThe response will have the following fields when successful  \r\n\r\n| Field | Description | \r\n| ----------- | ----------- |\r\n| <code>access_token</code> | The value of the requested access token |\r\n| <code>expires_in</code> | The time in which the token expires (in seconds). Should be 3600 by default. <br /><br />NOTE: The token supplied is not a sliding token. After one hour a new token must be requested regardless. |\r\n| <code>token_type</code> | The type of token. It should always be <code>Bearer</code>. |\r\n| <code>scope</code> | It should always be <code>BoardDataApi.read</code> |\r\n\r\nAfter receiving the token, add the \"Authorization\" header with the bearer token to gain access to the API.  \r\n\r\n![auth-diagram](/Content/images/Auth_Diagram.png)\r\n</br>\r\n\r\n# Board API \r\n\r\nThe Board API platform fetches Members and Office roster information built on RESO standards. Board Data API is normalized based on the RESO Data Dictionary standards. \r\n\r\n## Error Codes \r\n\r\nThe Board API may return the following HTTP status codes. For non-200 statuses, we also return an error object within the response body, with a message containing additional specifics about the error. \r\n\r\n| Code      | Description | Message |\r\n| ----------- | ----------- | ----------- |\r\n| 200 | OK | N/A |\r\n| 400 | Bad request | Only integer values between 1-1000 are allowed for top. </br></br> Only non-negative integer values are allowed for skip. </br></br> Only true or false is allowed for count.|\r\n| 401 | Unauthorized access | Invalid or expired token.|\r\n| 404 | Not found | Invalid Endpoint. |\r\n| 408 | Request timeout | N/A | \r\n| 415 | Unsupported MIME type | N/A | \r\n| 500 | Unexpected Internal server error | N/A |\r\n| 503 | Service unavailable | N/A | \r\n| 404 | The requested office cannot be accessed as it either does not exist or the authenticated user lacks the necessary permissions to access it. | Unable to access the requested office.|\r\n| 404 | The requested member cannot be accessed as it either does not exist or the authenticated user lacks the necessary permissions to access it. | Unable to access the requested Member.|\r\n\r\n\r\n\r\n\r\n</br>\r\n\r\n## API Endpoints \r\n\r\nThe following are endpoints defined by the Board API.  \r\n\r\n| Endpoint | Description | URI\r\n| ----------- | ----------- | ----------- |\r\n| Office | Supplies a list of Office data. | /Office|\r\n| Office | Supplies a single Office data.| /Office/<code>OfficeNationalAssociationId</code>|\r\n| Member | Supplies a list of Member data.| /Member |\r\n| Member | Supplies a single Member data.| /Member/<code>MemberNationalAssociationId</code>|\r\n\r\nAll endpoints are accessible through an authorization layer described in the next section. For a full description of the API endpoints, see the [API definition](#tag/Member). \r\n\r\n</br>\r\n\r\n## API Response \r\n\r\nAll API responses are returned in <code>json</code> format.  \r\n\r\nThe API response can contain a single or multiple data records. For complete details of data models in the API see the [Models](#tag/member_model) section of the API Definition. \r\n\r\n</br>\r\n\r\n## Paginating through results \r\n\r\nIn order to minimize the data returned in a single query, results are paginated. By default, a page will contain a maximum of 100 results. This value can be increased using the <code>top</code> query parameter, increasing the page size to a maximum of 1000 records. \r\n\r\nTotal record count will be provided in response when <code>count</code> is set to true in the request. To determine total amount of pages, the <code>count</code> query parameter should be used to retrieve the total amount of records which should be divided by the page size. <strong>Note</strong> that the <code>count</code> parameter increases the overhead of a request therefore it is recommended that the total count of the data is requested once and not for each request of a page.\r\n\r\nUsers can use <code>skip</code> request parameter to retrieve the next page if the record count is greater than returned number of records in response.\r\n\r\n**Example Response:**\r\n```json\r\n{ \r\n    \"pagination\": {\r\n        \"count\": 2525,\r\n        \"skip\": 101,\r\n        \"top\": 100\r\n    },\r\n    \"data\": [...]\r\n} \r\n```\r\n\r\n## Testing Requests\r\n\r\nTo test any request in the Board API you will need to send an access token which cannot be done through a typical web browser. Postman (https://www.postman.com/) is the preferred option to test out any request in the API quickly, however there are other tools available that may be your preference. Below are a few screenshots taken from Postman that outline typical requests.\r\n\r\n### Requesting A Token\r\n\r\n![Example Token Request](/Content/images/Request_Token.png)\r\n\r\n### Requesting A Member\r\n\r\n![Example Member Request](/Content/images/Request_Member.png)\r\n\r\n</br>\r\n\r\n## Example of Requests\r\n\r\n**Get a list of members for a specific MemberAORKey:**\r\n    \r\n\thttps://boardapi.realtor.ca/Member?MemberAORKey=1234\r\n\r\n**Get a list of inactive members for a specific MemberAORKey:**\r\n\r\n    https://boardapi.realtor.ca/Member?MemberAORKey=1234&MemberStatus=Inactive \r\n\r\n**Get a list of members for all accessible MemberAORKey:**\r\n\r\n    https://boardapi.realtor.ca/Member \r\n\r\n**Get a list of inactive members for all accessible MemberAORKey:**\r\n\r\n    https://boardapi.realtor.ca/Member?MemberStatus=Inactive \r\n\r\n**Get a single member by MemberNationalAssociationId:**\r\n\r\n    https://boardapi.realtor.ca/Member/1234\r\n\r\n**Get a list of offices for a specific OfficeAORKey:**\r\n\r\n    https://boardapi.realtor.ca/Office?OfficeAORKey=1234\r\n\r\n**Get a list of inactive offices for a specific OfficeAORKey:**\r\n\r\n    https://boardapi.realtor.ca/Office?OfficeAORKey=1234&OfficeStatus=Inactive \r\n\r\n**Get a list of offices for all accessible OfficeAORKey:**\r\n\r\n    https://boardapi.realtor.ca/Office \r\n\r\n**Get a list of inactive offices for all accessible OfficeAORKey:**\r\n\r\n    https://boardapi.realtor.ca/Office?OfficeStatus=Inactive \r\n\r\n**Get a single office by OfficeNationalAssociationId:**\r\n\r\n    https://boardapi.realtor.ca/Office/1234\r\n\r\n**Get a list of offices that have been modified greater than or equal to the provided ModifiedTimestamp**\r\n    \r\n    https://boardapi.realtor.ca/Office?ModificationTimestamp=2021-10-08T09:36:00Z\r\n\r\n# Support and Updates \r\n\r\nIf you have any questions about using the APIs available on the platform, contact support at support@realtor.ca \r\n\r\nCurrently support is only offered in English. ",
    "contact": {
      "name": "Realtor Support",
      "email": "support@realtor.ca"
    },
    "license": {
      "name": "MIT",
      "url": "https://opensource.org/licenses/MIT"
    },
    "version": null
  },
  "servers": [
    {
      "url": "https://boardapi.realtor.ca/"
    }
  ],
  "paths": {
    "/Member": {
      "get": {
        "tags": [
          "Member"
        ],
        "summary": "Get a list of members",
        "parameters": [
          {
            "name": "skip",
            "in": "query",
            "description": "Skips this number of results. Default: 0",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "top",
            "in": "query",
            "description": "Request the server start at other than the first record in the set of matching records. Default: 0",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "count",
            "in": "query",
            "description": "Request the server to apply a limit on the number of records returned. Default: 100. Maximum of 1000 records enforced.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "memberAORKey",
            "in": "query",
            "description": "A system unique identifier. This is the Board ID of the Member's Primary Board or Association of REALTORS.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "modificationTimestamp",
            "in": "query",
            "description": "Date/time the member record was last modified.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "memberStatus",
            "in": "query",
            "description": "The current status of the member.",
            "schema": {
              "enum": [
                "Active",
                "Inactive"
              ],
              "type": "string",
              "default": "Active"
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "406": {
            "description": "Not Acceptable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Member"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/Member/{MemberNationalAssociationId}": {
      "get": {
        "tags": [
          "Member"
        ],
        "summary": "Get a single member by the MemberNationalAssociationId",
        "parameters": [
          {
            "name": "memberNationalAssociationId",
            "in": "path",
            "description": "The national association ID of the member i.e. CREA Id of the member.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "406": {
            "description": "Not Acceptable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Member"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/Office": {
      "get": {
        "tags": [
          "Office"
        ],
        "summary": "Get a list of offices",
        "parameters": [
          {
            "name": "skip",
            "in": "query",
            "description": "Skips this number of results. Default: 0",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "top",
            "in": "query",
            "description": "Request the server start at other than the first record in the set of matching records. Default: 0",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "count",
            "in": "query",
            "description": "Request the server to apply a limit on the number of records returned. Default: 100. Maximum of 1000 records enforced.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "officeAORKey",
            "in": "query",
            "description": "A system unique identifier. This is the Board ID of the Office's Primary Board or Association of REALTORS.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "modificationTimestamp",
            "in": "query",
            "description": "Date/time the office record was last modified",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "officeStatus",
            "in": "query",
            "description": "Is the office active, inactive or under disciplinary action.",
            "schema": {
              "enum": [
                "Active",
                "Inactive"
              ],
              "type": "string",
              "default": "Active"
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "406": {
            "description": "Not Acceptable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Office"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/Office/{OfficeNationalAssociationId}": {
      "get": {
        "tags": [
          "Office"
        ],
        "summary": "Get a single office by the OfficeNationalAssociationId",
        "parameters": [
          {
            "name": "officeNationalAssociationId",
            "in": "path",
            "description": "The national association ID of the office. i.e. In Canada, this is the Organization ID of the Office.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "406": {
            "description": "Not Acceptable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "500": {
            "description": "Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          },
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Office"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Media": {
        "type": "object",
        "properties": {
          "MediaKey": {
            "type": "string",
            "description": "A unique identifier for this record from the immediate source.",
            "nullable": true,
            "example": "1234"
          },
          "LongDescription": {
            "type": "string",
            "description": "The full description of the object.",
            "nullable": true,
            "example": "REALTOR.ca Logo"
          },
          "MediaURL": {
            "type": "string",
            "description": "The URI to the media file referenced by this record.",
            "nullable": true,
            "example": "https:///ddfcdn.realtor.ca/realtorlogo.png"
          },
          "Order": {
            "type": "integer",
            "description": "The order in which the media object is displayed. Zero is the primary photo per RETS convention.",
            "format": "int32",
            "nullable": true,
            "example": 1
          },
          "PreferredPhotoYN": {
            "type": "boolean",
            "description": "When set to true, the media record in question is the preferred photo. This will typically mean the photo to be shown when only one of the photos is to be displayed.",
            "nullable": true,
            "example": true
          },
          "ResourceRecordId": {
            "type": "string",
            "description": "The well known identifier of the related record from the source resource.",
            "nullable": true,
            "example": "123"
          },
          "MediaCategory": {
            "enum": [
              "Alternate Feature Sheet Website",
              "Video Tour Website",
              "Sound Bite Website",
              "Sales Brochure Website",
              "Additional Pictures Website"
            ],
            "type": "string",
            "description": "For the complete list of enum values, please visit https://support.crea.ca/Boards/NDS/LookupTypes. \n\n Category describing the , Photos, Documents, Video, Unbranded Virtual Tour, Branded Virtual Tour, Floor Plan, Logo",
            "nullable": true,
            "example": "Office Logo"
          },
          "ResourceName": {
            "enum": [
              "Office",
              "Member",
              "Property"
            ],
            "type": "string",
            "description": "The resource or table of the listing or other record the media relates to. i.e. Property, Member, Office, etc.",
            "nullable": true,
            "example": "Office"
          },
          "ResourceRecordKey": {
            "type": "string",
            "description": "The primary key of the related record from the source resource.",
            "nullable": true,
            "example": "1234"
          },
          "ModificationTimestamp": {
            "type": "string",
            "description": "Date/time the record was last modified.",
            "format": "date-time",
            "nullable": true,
            "example": "2019-08-24T14:15:22Z"
          },
          "ResourceNameId": {
            "type": "string",
            "nullable": true,
            "writeOnly": true
          },
          "MediaCategoryId": {
            "type": "string",
            "nullable": true,
            "writeOnly": true
          },
          "MediaKeyNumeric": {
            "type": "integer",
            "format": "int64",
            "writeOnly": true
          },
          "ResourceRecordKeyNumeric": {
            "type": "integer",
            "format": "int32",
            "nullable": true,
            "writeOnly": true
          }
        },
        "additionalProperties": false
      },
      "Member": {
        "type": "object",
        "properties": {
          "MemberFirstName": {
            "type": "string",
            "description": "The first name of the Member.",
            "nullable": true,
            "example": "John"
          },
          "MemberMiddleName": {
            "type": "string",
            "description": "The middle name of the Member.",
            "nullable": true,
            "example": "Bob"
          },
          "MemberLastName": {
            "type": "string",
            "description": "The last name of the Member.",
            "nullable": true,
            "example": "Doe"
          },
          "MemberStatus": {
            "enum": [
              "Active",
              "Inactive"
            ],
            "type": "string",
            "description": "The current status of the member.",
            "nullable": true,
            "example": "Active"
          },
          "MemberNationalAssociationId": {
            "type": "string",
            "description": "The national association ID of the member. i.e. In Canada this is the CREA ID of the member.",
            "nullable": true,
            "example": "1234"
          },
          "OfficeNationalAssociationId": {
            "type": "string",
            "description": "The national association ID of the office. i.e. In Canada, this is the Organization ID of the Office.",
            "nullable": true,
            "example": "5678"
          },
          "MemberMlsId": {
            "type": "string",
            "description": "The local, well-known identifier. This value may not be unique, specifically in the case of aggregation systems, this value should be the identifier from the original system.",
            "nullable": true,
            "example": "123"
          },
          "MemberType": {
            "enum": [
              "Broker",
              "Non-MLS®",
              "Salesperson",
              "Firm",
              "Affiliate"
            ],
            "type": "string",
            "description": "For the complete list of enum values, please visit https://support.crea.ca/Boards/NDS/LookupTypes. \n\n The type of member.",
            "nullable": true,
            "example": "GlobalAffiliate"
          },
          "MemberAORKey": {
            "type": "string",
            "description": "A system unique identifier. This is the Board ID of the Member's Primary Board or Association of REALTORS.",
            "nullable": true,
            "example": "12"
          },
          "MemberAOR": {
            "enum": [
              "Abitibi-Témiscamingue",
              "Alberta West",
              "AREA",
              "ASR",
              "Bancroft"
            ],
            "type": "string",
            "description": "For the complete list of enum values, please visit https://support.crea.ca/Boards/NDS/LookupTypes. \n\n The Member's Primary Board Name or Association's Name of REALTORS.",
            "nullable": true,
            "example": "Yukon"
          },
          "MemberNamePrefix": {
            "type": "string",
            "description": "Prefix to the name (e.g. Dr. Mr. Ms. etc.)",
            "nullable": true,
            "example": "Mr."
          },
          "MemberNameSuffix": {
            "type": "string",
            "description": "Suffix to the surname (e.g. Esq., Jr., III etc.)",
            "nullable": true,
            "example": "II"
          },
          "MemberNickname": {
            "type": "string",
            "description": "An alternate name used by the Member, usually as a substitute for the first name.",
            "nullable": true,
            "example": "Mike"
          },
          "JobTitle": {
            "type": "string",
            "description": "The title or position of the member within their organization.",
            "nullable": true,
            "example": "Personal Real Estate Corporation"
          },
          "Media": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Media"
            },
            "description": "A collection of the types of media fields available for this Member.",
            "nullable": true
          },
          "MemberSocialMedia": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SocialMedia"
            },
            "description": "A collection of the types of social media fields available for this member. The collection includes the type of system and other details pertinent about social media.",
            "nullable": true
          },
          "MemberOfficePhone": {
            "type": "string",
            "description": "North American 10 digit phone numbers should be in the format of ###-###-#### (separated by hyphens). Other conventions should use the common local standard. International numbers should be preceded by a plus symbol.",
            "nullable": true,
            "example": "123-456-7890"
          },
          "MemberOfficePhoneExt": {
            "type": "string",
            "description": "The extension of the given phone number (if applicable).",
            "nullable": true,
            "example": "12"
          },
          "MemberFax": {
            "type": "string",
            "description": "North American 10 digit phone numbers should be in the format of ###-###-#### (separated by hyphens). Other conventions should use the common local standard. International numbers should be preceded by a plus symbol.",
            "nullable": true,
            "example": "123-456-7890"
          },
          "MemberPager": {
            "type": "string",
            "description": "North American 10 digit phone numbers should be in the format of ###-###-#### (separated by hyphens). Other conventions should use the common local standard. International numbers should be preceded by a plus symbol.",
            "nullable": true,
            "example": "123-456-7890"
          },
          "MemberTollFreePhone": {
            "type": "string",
            "description": "North American 10 digit phone numbers should be in the format of ###-###-#### (separated by hyphens). Other conventions should use the common local standard. International numbers should be preceded by a plus symbol.",
            "nullable": true,
            "example": "123-456-7890"
      

# --- truncated at 32 KB (48 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/crea/refs/heads/main/openapi/crea-realtor-ca-board-api-openapi.json