Every API here is available over the APIs.io API and to AI agents over MCP.
{
"openapi": "3.0.4",
"info": {
"title": "REALTOR.ca DDF® Web API Documentation",
"description": "",
"contact": {
"name": "Realtor Support",
"email": "support@realtor.ca"
},
"license": {
"name": "MIT",
"url": "https://opensource.org/licenses/MIT"
},
"version": "1.0"
},
"servers": [
{
"url": "https://localhost:7051"
}
],
"paths": {
"/odata/v1/Destination": {
"get": {
"tags": [
"Destination"
],
"summary": "Get a list of Client Destinations",
"parameters": [
{
"name": "$select",
"in": "query",
"description": "Selects which properties to include in the response.",
"schema": {
"type": "string"
}
},
{
"name": "$count",
"in": "query",
"description": "Return, along with the results, the total number of records in the dataset. NOTE: There is a performance cost with this query option.",
"schema": {
"type": "boolean"
}
},
{
"name": "$filter",
"in": "query",
"description": "Filters the results, based on a Boolean condition.",
"schema": {
"type": "string"
}
},
{
"name": "$top",
"in": "query",
"description": "Returns only the first n results.",
"schema": {
"type": "string"
}
},
{
"name": "$skip",
"in": "query",
"description": "Skips the first n results.",
"schema": {
"type": "string"
}
},
{
"name": "$orderby",
"in": "query",
"description": "Sorts the results.",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Infrastructure.Swagger.ExampleModels.ODataListResponse`1[[DDF.Core.Entities.Destination, DDF.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
}
}
}
},
"/odata/v1/Destination/{DestinationKey}": {
"get": {
"tags": [
"Destination"
],
"summary": "Get a single Client Destination by DestinationId",
"description": "Both methods are valid and return the same result: a single Destination entity identified by its unique DestinationId.\nThe path-style is more intuitive and commonly used in RESTful APIs.\nThe function-style follows OData conventions and may be required in certain query contexts (e.g., when the key contains special characters or is not a simple numeric ID).\n\n<b>Path-style access: </b>```/odata/v1/Destination/{DestinationKey}```\n\n<b>Example: </b>```/odata/v1/Destination/1301```\n\n<b>Function-style access: </b>```/odata/v1/Destination({DestinationKey})```\n\n<b>Example: </b>```/odata/v1/Destination(1301)```",
"parameters": [
{
"name": "DestinationKey",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "$select",
"in": "query",
"description": "Selects which properties to include in the response.",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK (DDF.Core.Entities.Destination object)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Infrastructure.Swagger.ExampleModels.ODataSingleResponse`1[[DDF.Core.Entities.Destination, DDF.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
}
}
}
},
"/v1/Lead/CreateLead": {
"post": {
"tags": [
"Lead"
],
"summary": "Create an email lead for a Member",
"parameters": [
{
"name": "SuppressEmail",
"in": "query",
"description": "Suppresses an email from being sent to the Realtor when set to true.",
"schema": {
"type": "boolean",
"default": false
},
"example": true
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.LeadModel"
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.LeadResponse"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.LeadResponse"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.LeadResponse"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.LeadResponse"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.LeadResponse"
}
}
}
}
}
}
},
"/odata/v1/Member": {
"get": {
"tags": [
"Member"
],
"summary": "Get a list of members",
"parameters": [
{
"name": "$select",
"in": "query",
"description": "Selects which properties to include in the response.",
"schema": {
"type": "string"
}
},
{
"name": "$count",
"in": "query",
"description": "Return, along with the results, the total number of records in the dataset. NOTE: There is a performance cost with this query option.",
"schema": {
"type": "boolean"
}
},
{
"name": "$filter",
"in": "query",
"description": "Filters the results, based on a Boolean condition.",
"schema": {
"type": "string"
}
},
{
"name": "$top",
"in": "query",
"description": "Returns only the first n results.",
"schema": {
"type": "string"
}
},
{
"name": "$skip",
"in": "query",
"description": "Skips the first n results.",
"schema": {
"type": "string"
}
},
{
"name": "$orderby",
"in": "query",
"description": "Sorts the results.",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Infrastructure.Swagger.ExampleModels.ODataListResponse`1[[DDF.Core.Entities.Member, DDF.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
}
}
}
},
"/odata/v1/Member/{MemberKey}": {
"get": {
"tags": [
"Member"
],
"summary": "Get a single member by MemberKey",
"description": "Both methods are valid and return the same result: a single Member entity identified by its unique MemberKey.\nThe path-style is more intuitive and commonly used in RESTful APIs.\nThe function-style follows OData conventions and may be required in certain query contexts (e.g., when the key contains special characters or is not a simple numeric ID).\n\n<b>Path-style access: </b>```/odata/v1/Member/{MemberKey}```\n\n<b>Example: </b>```/odata/v1/Member/14090```\n\n<b>Function-style access: </b>```/odata/v1/Member('{MemberKey}')```\n\n<b>Example: </b>```/odata/v1/Member('14090')```",
"parameters": [
{
"name": "MemberKey",
"in": "path",
"description": "A unique identifier for this record from the immediate source",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "$select",
"in": "query",
"description": "Selects which properties to include in the response.",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK (DDF.Core.Entities.Member object)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Infrastructure.Swagger.ExampleModels.ODataSingleResponse`1[[DDF.Core.Entities.Member, DDF.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
}
}
}
},
"/odata/v1/Member/MemberReplication()": {
"get": {
"tags": [
"Member"
],
"summary": "Get a list of members for all destinations",
"description": "Both methods are valid and return the same result:\nThe path-style is more intuitive and commonly used in RESTful APIs.\nThe function-style follows OData conventions.\n\n<b>Path-style access: </b>```/odata/v1/Member/MemberReplication```\n\n<b>Function-style access: </b>```/odata/v1/Member/MemberReplication()```\n\n",
"parameters": [
{
"name": "$select",
"in": "query",
"description": "Selects which properties to include in the response.",
"schema": {
"type": "string"
}
},
{
"name": "$count",
"in": "query",
"description": "Return, along with the results, the total number of records in the dataset. NOTE: There is a performance cost with this query option.",
"schema": {
"type": "boolean"
}
},
{
"name": "$filter",
"in": "query",
"description": "Filters the results, based on a Boolean condition.",
"schema": {
"type": "string"
}
},
{
"name": "$orderby",
"in": "query",
"description": "Sorts the results.",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Infrastructure.Swagger.ExampleModels.ODataReplicationListResponse`2[[DDF.Core.Entities.MemberIdentifier, DDF.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[DDF.Core.Entities.Member, DDF.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
}
}
}
},
"/odata/v1/Member/MemberReplication(DestinationId={DestinationId})": {
"get": {
"tags": [
"Member"
],
"summary": "Get a list of members for a single destination",
"operationId": "odata/v1/Member/MemberReplication(DestinationId={DestinationId})",
"parameters": [
{
"name": "DestinationId",
"in": "path",
"description": "A unique identifier for the desired destination",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "$select",
"in": "query",
"description": "Selects which properties to include in the response.",
"schema": {
"type": "string"
}
},
{
"name": "$count",
"in": "query",
"description": "Return, along with the results, the total number of records in the dataset. NOTE: There is a performance cost with this query option.",
"schema": {
"type": "boolean"
}
},
{
"name": "$filter",
"in": "query",
"description": "Filters the results, based on a Boolean condition.",
"schema": {
"type": "string"
}
},
{
"name": "$orderby",
"in": "query",
"description": "Sorts the results.",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Infrastructure.Swagger.ExampleModels.ODataReplicationListResponse`2[[DDF.Core.Entities.MemberIdentifier, DDF.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[DDF.Core.Entities.Member, DDF.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
}
}
}
},
"/odata/v1/Office": {
"get": {
"tags": [
"Office"
],
"summary": "Get a list of offices",
"parameters": [
{
"name": "$select",
"in": "query",
"description": "Selects which properties to include in the response.",
"schema": {
"type": "string"
}
},
{
"name": "$count",
"in": "query",
"description": "Return, along with the results, the total number of records in the dataset. NOTE: There is a performance cost with this query option.",
"schema": {
"type": "boolean"
}
},
{
"name": "$filter",
"in": "query",
"description": "Filters the results, based on a Boolean condition.",
"schema": {
"type": "string"
}
},
{
"name": "$top",
"in": "query",
"description": "Returns only the first n results.",
"schema": {
"type": "string"
}
},
{
"name": "$skip",
"in": "query",
"description": "Skips the first n results.",
"schema": {
"type": "string"
}
},
{
"name": "$orderby",
"in": "query",
"description": "Sorts the results.",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Infrastructure.Swagger.ExampleModels.ODataListResponse`1[[DDF.Core.Entities.Office, DDF.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
}
}
}
},
"/odata/v1/Office/{OfficeKey}": {
"get": {
"tags": [
"Office"
],
"summary": "Gets a single office by OfficeKey",
"description": "Both methods are valid and return the same result: a single Office entity identified by its unique OfficeKey.\nThe path-style is more intuitive and commonly used in RESTful APIs.\nThe function-style follows OData conventions and may be required in certain query contexts (e.g., when the key contains special characters or is not a simple numeric ID).\n\n<b>Path-style access: </b>```/odata/v1/Office/{OfficeKey}```\n\n<b>Example: </b>```/odata/v1/Office/49```\n\n<b> Function-style access: </b>```/odata/v1/Office('{OfficeKey}')```\n\n<b>Example: </b>```/odata/v1/Office('49')```",
"parameters": [
{
"name": "OfficeKey",
"in": "path",
"description": "A unique identifier for this record from the immediate source",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "$select",
"in": "query",
"description": "Selects which properties to include in the response.",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK (DDF.Core.Entities.Office object)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Infrastructure.Swagger.ExampleModels.ODataSingleResponse`1[[DDF.Core.Entities.Office, DDF.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
}
}
}
},
"/odata/v1/Office/OfficeReplication()": {
"get": {
"tags": [
"Office"
],
"summary": "Get a list of offices for all destinations",
"description": "Both methods are valid and return the same result:\nThe path-style is more intuitive and commonly used in RESTful APIs.\nThe function-style follows OData conventions.\n\n<b>Path-style access: </b>```/odata/v1/Office/OfficeReplication```\n\n<b>Function-style access: </b>```/odata/v1/Office/OfficeReplication()```\n\n",
"parameters": [
{
"name": "$select",
"in": "query",
"description": "Selects which properties to include in the response.",
"schema": {
"type": "string"
}
},
{
"name": "$count",
"in": "query",
"description": "Return, along with the results, the total number of records in the dataset. NOTE: There is a performance cost with this query option.",
"schema": {
"type": "boolean"
}
},
{
"name": "$filter",
"in": "query",
"description": "Filters the results, based on a Boolean condition.",
"schema": {
"type": "string"
}
},
{
"name": "$orderby",
"in": "query",
"description": "Sorts the results.",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Infrastructure.Swagger.ExampleModels.ODataReplicationListResponse`2[[DDF.Core.Entities.OfficeIdentifier, DDF.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[DDF.Core.Entities.Office, DDF.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DDF.Core.Models.CustomOdataError"
}
}
}
}
}
}
},
"/odata/v1/Office/OfficeReplication(DestinationId={DestinationId})": {
"get": {
"tags": [
"Office"
],
"summary": "Get a list of offices for a single destination",
"operationId": "odata/v1/Office/OfficeReplication(DestinationId={DestinationId})",
"parameters": [
{
"name": "DestinationId",
"in": "path",
"description": "A unique identifier for the desired destination",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "$select",
"in": "query",
"description": "Selects which properties to include in the response.",
"schema": {
"type": "string"
}
},
{
"name": "$count",
"in": "query",
"description": "Return, along with the results, the total number of records in the dataset. NOTE: There is a performance cost with this query option.",
"schema": {
"type": "boolean"
}
},
{
"name": "$filter",
"in": "query",
"description": "Filters the results, based on a Boolean condition.",
"schema": {
"type": "string"
}
},
{
"name": "$orderby",
"in": "query",
"description": "Sorts the results.",
"schema": {
"type": "string"
}
}
],
"respons
# --- truncated at 32 KB (271 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/realtor-ca/refs/heads/main/openapi/realtor-ca-ddf-web-api-openapi.json