Menu
Public API

Introduction

Showdigs API Documentation

Base URL: https://api.showdigs.com

This reference, the OpenAPI document, and llms.txt describe the same public /api/v1 surface. Endpoint paths and authentication behavior stay compatible across releases; correcting documentation hosts is not a breaking API change.

API operations

Operating rules for production integrations. Endpoint-specific request and response details remain in the groups below; this section does not replace them.

Credential lifecycle

  1. Create a public API token in integrations settings.
  2. Send it as Authorization: Bearer {token} on authenticated requests (see Authenticating requests).
  3. Store the token as a secret. Treat leakage as a credential incident: revoke the token in integrations settings and create a replacement.
  4. Rotate by creating a new token, updating your integration, then revoking the old token. Tokens are not recoverable after creation; only a new token can be issued.
  5. Revoking a token immediately rejects further requests that use it (401).

Pagination

List endpoints that accept page and per_page use Laravel-style pagination:

Query Rules
page Integer ≥ 1. Defaults to 1 when omitted.
per_page Integer from 1 to 100.

Successful list responses include a data array plus links (first, last, prev, next) and meta (current_page, per_page, from, to, and related fields).

Traversal:

  1. Start at page=1 (or omit page).
  2. Follow links.next while it is non-null, or increment page until a page returns fewer than per_page items (or an empty data array).
  3. Do not assume a stable total count across long-running crawls; re-query when you need a fresh snapshot.

Invalid page / per_page values return 422 with the standard error shape below.

Rate limits and retries

Most /api/v1 routes use the application api throttle: 180 requests per minute per client IP. Exceeding the limit returns HTTP 429.

When you receive 429:

  1. Honor the Retry-After header when present (seconds to wait).
  2. Back off and retry with jitter; do not tight-loop.
  3. Keep concurrency modest; fan-out from many IPs to bypass limits is not a supported integration pattern.

Successful idempotent GETs may be retried after transient 5xx or network failures. For non-idempotent POST / PUT / DELETE, retry only when you can safely detect duplicates on your side (for example via your own idempotency keys or by re-reading created resources). The API does not currently document a request-level idempotency key header.

Errors

Prefer the JSON error bodies already shown on individual endpoints. Common shapes:

Unauthenticated (401)

{
    "message": "Unauthenticated."
}

Validation or domain failure (422)

{
    "message": "Validation error",
    "errors": {
        "field_name": [
            "The field_name field is required."
        ]
    }
}

Some domain failures return only { "message": "..." } at 422 without an errors object. Missing models on this API surface are typically expressed as 422 with a message such as Unit doesn't exist, not 404.

Rate limited (429)

Empty or framework default body; use status + Retry-After.

Do not parse HTML error pages. Always send Accept: application/json.

Versioning and deprecation

Public routes are versioned under /api/v1/.... Additive, non-breaking documentation and response field additions may ship without a new version. Breaking changes to paths, auth, or required fields require a new versioned prefix and advance notice through release notes. Until a successor version is published, treat /api/v1 as current.

Test environment

There is no separate public sandbox API host for third-party integrations today. Integrate against https://api.showdigs.com with credentials for a business you control. Do not point production traffic at local or .test hosts. Capabilities that are not listed in this reference or the OpenAPI document are unsupported regardless of what appears in staging UIs.

API release notes

Documentation freshness appears as “Last updated” on this page. Behavioral changes to the public API are called out in product/engineering release notes when they affect integrators. Before releasing an integration change, confirm /docs/, /docs.openapi, and /llms.txt all reflect the contract you coded against.

Authenticating requests

To authenticate requests, include an Authorization header with the value "Bearer {YOUR_AUTH_KEY}".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

You can retrieve your token by visiting your integrations settings page.

Agent Coverage

Endpoints for checking agent coverage.

Check location coverage

requires authentication

Returns the coverage status of a location. For better accuracy and performance, we recommend using the latitude and longitude parameters.

Example request:
curl --request GET \
    --get "https://api.showdigs.com/api/v1/coverage?latitude=40.762569&longitude=-73.8314318&price=45" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.showdigs.com/api/v1/coverage"
);

const params = {
    "latitude": "40.762569",
    "longitude": "-73.8314318",
    "price": "45",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.showdigs.com/api/v1/coverage',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'latitude' => '40.762569',
            'longitude' => '-73.8314318',
            'price' => '45',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.showdigs.com/api/v1/coverage'
params = {
  'latitude': '40.762569',
  'longitude': '-73.8314318',
  'price': '45',
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200):


{
    "data": {
        "probability": 0.87,
        "is_covered": true,
        "network": "primary"
    }
}
 

Example response (422):


{
    "message": "failed to match given address to a place"
}
 

Example response (424):


{
    "message": "Unable to determine coverage at this time"
}
 

Request   

GET api/v1/coverage

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

latitude   number   

Coordinate latitude. Example: 40.762569

longitude   number   

Coordinate longitude. Example: -73.8314318

price   number  optional  

Optional showing price. Example: 45

address   string  optional  

Units

Endpoints for managing units.

Get all units

requires authentication

Returns a paginated list of all units.

Example request:
curl --request GET \
    --get "https://api.showdigs.com/api/v1/units?page=1&per_page=10" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.showdigs.com/api/v1/units"
);

const params = {
    "page": "1",
    "per_page": "10",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.showdigs.com/api/v1/units',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'page' => '1',
            'per_page' => '10',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.showdigs.com/api/v1/units'
params = {
  'page': '1',
  'per_page': '10',
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200):


{
    "data": [
        {
            "id": "35d5abef-2e5d-46dc-a7ed-005d3ea3fcdc",
            "timezone": "Asia/Jerusalem",
            "name": null,
            "short_address": "26432 Leuschke Throughway Apt. 227, Lake Noahberg",
            "vicinity": "Lake Noahberg",
            "location": {
                "latitude": 32.064511,
                "longitude": 34.897845
            },
            "size": null,
            "bedrooms": null,
            "bathrooms": null,
            "listing_title": null,
            "listing_description": null,
            "amenities": [],
            "is_showing": false,
            "origin_id": null
        },
        {
            "id": "ec54b498-a119-4ac3-97ef-de8502c28c70",
            "timezone": "Asia/Jerusalem",
            "name": null,
            "short_address": "771 Padberg Expressway, Port Lethachester",
            "vicinity": "Port Lethachester",
            "location": {
                "latitude": 32.024912,
                "longitude": 34.883938
            },
            "size": null,
            "bedrooms": null,
            "bathrooms": null,
            "listing_title": null,
            "listing_description": null,
            "amenities": [],
            "is_showing": false,
            "origin_id": null
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": null,
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "current_page_url": "/?page=1",
        "from": 1,
        "path": "/",
        "per_page": "10",
        "to": 2
    }
}
 

Request   

GET api/v1/units

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

page   integer  optional  

The page number. Must be at least 1. Example: 1

per_page   integer  optional  

The number of items per page. Must be at least 1. Must not be greater than 100. Example: 10

Get unit by uuid

requires authentication

Returns a specific unit by UUID.

Example request:
curl --request GET \
    --get "https://api.showdigs.com/api/v1/units/e1d8e8da-36e5-4083-83db-1f2bd1e35c6a" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.showdigs.com/api/v1/units/e1d8e8da-36e5-4083-83db-1f2bd1e35c6a"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.showdigs.com/api/v1/units/e1d8e8da-36e5-4083-83db-1f2bd1e35c6a',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.showdigs.com/api/v1/units/e1d8e8da-36e5-4083-83db-1f2bd1e35c6a'
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "id": "286d0ce0-e3d4-45f6-8600-f0e20ea5691c",
        "timezone": "Asia/Jerusalem",
        "name": null,
        "short_address": "27905 Fahey Wells, West Herberttown",
        "vicinity": "West Herberttown",
        "location": {
            "latitude": 32.042066,
            "longitude": 34.781538
        },
        "size": null,
        "bedrooms": null,
        "bathrooms": null,
        "listing_title": null,
        "listing_description": null,
        "amenities": [],
        "is_showing": false,
        "origin_id": null
    }
}
 

Request   

GET api/v1/units/{uuid}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

uuid   string   

The UUID of the unit. Example: e1d8e8da-36e5-4083-83db-1f2bd1e35c6a

Listings

Endpoints for managing listings.

Create a Listing

requires authentication

Example request:
curl --request POST \
    "https://api.showdigs.com/api/v1/units/123e4567-e89b-12d3-a456-426614174000/listing" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data '{
    "type": "architecto",
    "agent_backup": false,
    "only_consecutive_tours": false,
    "property_link": "https://example.com/property",
    "application_link": "https://example.com/application",
    "manager_email": "manager@example.com",
    "access_hardware": "keypad",
    "access_code": "1234 (required for non smart access hardware such as lockboxes or keypads)",
    "serial_number": "12345678 (required if `access_hardware` is set to smart device: Codebox, Sentrilock)",
    "notes": "This is a sample listing.",
    "tours_limit": 10,
    "rent": 1000,
    "security_deposit": 500,
    "screening_template_uuid": "123e4567-e89b-12d3-a456-426614174000",
    "schedule_template_uuid": "123e4567-e89b-12d3-a456-426614174000 (required if `type` is restricted)",
    "ai_identity_verification": true,
    "tenants": null,
    "report_emails": null,
    "availability_date": "2023-01-01",
    "showing_start_date": "2023-01-01"
}'
const url = new URL(
    "https://api.showdigs.com/api/v1/units/123e4567-e89b-12d3-a456-426614174000/listing"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "type": "architecto",
    "agent_backup": false,
    "only_consecutive_tours": false,
    "property_link": "https:\/\/example.com\/property",
    "application_link": "https:\/\/example.com\/application",
    "manager_email": "manager@example.com",
    "access_hardware": "keypad",
    "access_code": "1234 (required for non smart access hardware such as lockboxes or keypads)",
    "serial_number": "12345678 (required if `access_hardware` is set to smart device: Codebox, Sentrilock)",
    "notes": "This is a sample listing.",
    "tours_limit": 10,
    "rent": 1000,
    "security_deposit": 500,
    "screening_template_uuid": "123e4567-e89b-12d3-a456-426614174000",
    "schedule_template_uuid": "123e4567-e89b-12d3-a456-426614174000 (required if `type` is restricted)",
    "ai_identity_verification": true,
    "tenants": null,
    "report_emails": null,
    "availability_date": "2023-01-01",
    "showing_start_date": "2023-01-01"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://api.showdigs.com/api/v1/units/123e4567-e89b-12d3-a456-426614174000/listing',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'type' => 'architecto',
            'agent_backup' => false,
            'only_consecutive_tours' => false,
            'property_link' => 'https://example.com/property',
            'application_link' => 'https://example.com/application',
            'manager_email' => 'manager@example.com',
            'access_hardware' => 'keypad',
            'access_code' => '1234 (required for non smart access hardware such as lockboxes or keypads)',
            'serial_number' => '12345678 (required if `access_hardware` is set to smart device: Codebox, Sentrilock)',
            'notes' => 'This is a sample listing.',
            'tours_limit' => 10,
            'rent' => 1000,
            'security_deposit' => 500,
            'screening_template_uuid' => '123e4567-e89b-12d3-a456-426614174000',
            'schedule_template_uuid' => '123e4567-e89b-12d3-a456-426614174000 (required if `type` is restricted)',
            'ai_identity_verification' => true,
            'tenants' => null,
            'report_emails' => null,
            'availability_date' => '2023-01-01',
            'showing_start_date' => '2023-01-01',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.showdigs.com/api/v1/units/123e4567-e89b-12d3-a456-426614174000/listing'
payload = {
    "type": "architecto",
    "agent_backup": false,
    "only_consecutive_tours": false,
    "property_link": "https:\/\/example.com\/property",
    "application_link": "https:\/\/example.com\/application",
    "manager_email": "manager@example.com",
    "access_hardware": "keypad",
    "access_code": "1234 (required for non smart access hardware such as lockboxes or keypads)",
    "serial_number": "12345678 (required if `access_hardware` is set to smart device: Codebox, Sentrilock)",
    "notes": "This is a sample listing.",
    "tours_limit": 10,
    "rent": 1000,
    "security_deposit": 500,
    "screening_template_uuid": "123e4567-e89b-12d3-a456-426614174000",
    "schedule_template_uuid": "123e4567-e89b-12d3-a456-426614174000 (required if `type` is restricted)",
    "ai_identity_verification": true,
    "tenants": null,
    "report_emails": null,
    "availability_date": "2023-01-01",
    "showing_start_date": "2023-01-01"
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (201, success):


{
    "unit_uuid": "123e4567-e89b-12d3-a456-426614174000",
    "scheduling_url": "https://showdigs.co/x1Y2z3",
    "pms_unit_id": "550e8400-e29b-41d4-a716-446655440000"
}
 

Example response (404, unit not found):


{
    "message": "Unit not found"
}
 

Example response (422, validation error):


{
    "message": "Validation error",
    "errors": {
        "field_name": [
            "The field_name field is required."
        ]
    }
}
 

Request   

POST api/v1/units/{uuid}/listing

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

uuid   string   

The UUID of the unit. Example: 123e4567-e89b-12d3-a456-426614174000

Body Parameters

type   string   

The type of the listing. Supported values: high_availability, publish_listing, self_showing, restricted Example: architecto

agent_backup   boolean  optional  

Example: false

only_consecutive_tours   boolean  optional  

Example: false

property_link   string   

The URL of the property. Example: https://example.com/property

application_link   string   

The URL of the application. Example: https://example.com/application

manager_email   string   

The email of the manager. Example: manager@example.com

access_hardware   string   

The type of access hardware. Example: keypad

access_code   string  optional  

The access code. Example: 1234 (required for non smart access hardware such as lockboxes or keypads)

serial_number   string  optional  

A smart access device serial number. Example: 12345678 (required ifaccess_hardwareis set to smart device: Codebox, Sentrilock)

notes   string   

Notes about the listing. Example: This is a sample listing.

tours_limit   integer   

The limit of tours. Example: 10

rent   integer   

The rent amount. Example: 1000

security_deposit   integer  optional  

The security deposit amount. Example: 500

screening_template_uuid   string  optional  

The UUID of the screening template. Example: 123e4567-e89b-12d3-a456-426614174000

schedule_template_uuid   string  optional  

The UUID of the schedule template. Example: 123e4567-e89b-12d3-a456-426614174000 (required iftypeis restricted)

ai_identity_verification   boolean   

Whether AI identity verification is enabled. Example: true

tenants   string[]   

The list of tenants.

first_name   string  optional  

This field is required when tenants.*.last_name is not present. Must be at least 2 characters. Example: zmiy

last_name   string  optional  

This field is required when tenants.*.first_name is not present. Must be at least 2 characters. Example: vdlj

phone_number   string  optional  

This field is required when tenants.*.email is not present.

email   string  optional  

This field is required when tenants.*.phone_number is not present.

report_emails   string[]  optional  

The list of emails that will receive reports about this listing.

availability_date   date  optional  

The availability date. Example: 2023-01-01

showing_start_date   date  optional  

The showing start date. Example: 2023-01-01

Update a Listing

requires authentication

Update a listing by UUID param.

Example request:
curl --request PUT \
    "https://api.showdigs.com/api/v1/units/6ff8f7f6-1eb3-3525-be4a-3932c805afed/listing" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data '{
    "rent": 1500,
    "security_deposit": 500,
    "application_url": "https://application.com/123Main",
    "notes": "Updated notes"
}'
const url = new URL(
    "https://api.showdigs.com/api/v1/units/6ff8f7f6-1eb3-3525-be4a-3932c805afed/listing"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "rent": 1500,
    "security_deposit": 500,
    "application_url": "https:\/\/application.com\/123Main",
    "notes": "Updated notes"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->put(
    'https://api.showdigs.com/api/v1/units/6ff8f7f6-1eb3-3525-be4a-3932c805afed/listing',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'rent' => 1500,
            'security_deposit' => 500,
            'application_url' => 'https://application.com/123Main',
            'notes' => 'Updated notes',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.showdigs.com/api/v1/units/6ff8f7f6-1eb3-3525-be4a-3932c805afed/listing'
payload = {
    "rent": 1500,
    "security_deposit": 500,
    "application_url": "https:\/\/application.com\/123Main",
    "notes": "Updated notes"
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PUT', url, headers=headers, json=payload)
response.json()

Example response (200, success):


{
    "message": "Listing updated successfully"
}
 

Example response (404, unit not found):


{
    "message": "Unit not found"
}
 

Example response (422, unit is not listed):


{
    "message": "Unit is not listed"
}
 

Request   

PUT api/v1/units/{uuid}/listing

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

uuid   string   

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Body Parameters

rent   integer  optional  

nullable The rent amount. Example: 1500

security_deposit   integer  optional  

nullable The security deposit amount. Example: 500

application_url   string  optional  

nullable The application url. Example: https://application.com/123Main

notes   string  optional  

nullable Additional notes. Example: Updated notes

List all listings

requires authentication

Returns a list of all listings.

Example request:
curl --request GET \
    --get "https://api.showdigs.com/api/v1/listings" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.showdigs.com/api/v1/listings"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.showdigs.com/api/v1/listings',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.showdigs.com/api/v1/listings'
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200, Listings returned):


{
    "data": {
        "units": [
            {
                "id": "123e4567-e89b-12d3-a456-426614174000",
                "property_id": 123,
                "timezone": "America/Los_Angeles",
                "name": "Unit 101",
                "cover_image": "https://example.com/listing.jpg",
                "market_name": "Seattle",
                "short_address": "42 Florentia St, Seattle",
                "vicinity": "Seattle",
                "state": "WA",
                "location": {
                    "latitude": 47.6512,
                    "longitude": -122.3519
                },
                "rent": 1800,
                "size": 750,
                "bedrooms": "1",
                "bathrooms": 1,
                "screening_criteria": {
                    "availability_date": "2026-08-01 00:00:00"
                },
                "is_high_availability": true,
                "is_video_tours_supported": false,
                "is_self_showing": false,
                "is_open_house": false,
                "is_publish_listing": false,
                "scheduling_url": "https://showdigs.co/x1Y2z3",
                "application_url": "https://example.com/apply",
                "listing_url": "https://example.com/listing",
                "pms_unit_id": "550e8400-e29b-41d4-a716-446655440000",
                "pms_listing_id": "660e8400-e29b-41d4-a716-446655440001"
            }
        ],
        "business": {
            "formatted_phone_number": "(206) 555-0100",
            "email": "leasing@example.com",
            "name": "Example Property Management",
            "show_listing_apply_button": true,
            "logo_url": "https://example.com/logo.png",
            "website_url": "https://example.com",
            "theme": {
                "primary": "#1F2937"
            }
        }
    }
}
 

Request   

GET api/v1/listings

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Get listing by uuid

requires authentication

Returns a specific listing by UUID.

Please provide UUID for better accuracy and performance. UUID can be either Showdigs unit UUID or PMS listing ID.

Example request:
curl --request GET \
    --get "https://api.showdigs.com/api/v1/listings/123e4567-e89b-12d3-a456-426614174000" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.showdigs.com/api/v1/listings/123e4567-e89b-12d3-a456-426614174000"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.showdigs.com/api/v1/listings/123e4567-e89b-12d3-a456-426614174000',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.showdigs.com/api/v1/listings/123e4567-e89b-12d3-a456-426614174000'
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200, Listing returned):


{
    "data": {
        "unit": {
            "id": "123e4567-e89b-12d3-a456-426614174000",
            "property_id": 123,
            "timezone": "America/Los_Angeles",
            "name": "Unit 101",
            "cover_image": "https://example.com/listing.jpg",
            "market_name": "Seattle",
            "short_address": "42 Florentia St, Seattle",
            "vicinity": "Seattle",
            "state": "WA",
            "location": {
                "latitude": 47.6512,
                "longitude": -122.3519
            },
            "rent": 1800,
            "size": 750,
            "bedrooms": "1",
            "bathrooms": 1,
            "screening_criteria": {
                "availability_date": "2026-08-01 00:00:00"
            },
            "is_high_availability": true,
            "is_video_tours_supported": false,
            "is_self_showing": false,
            "is_open_house": false,
            "is_publish_listing": false,
            "scheduling_url": "https://showdigs.co/x1Y2z3",
            "application_url": "https://example.com/apply",
            "listing_url": "https://example.com/listing",
            "pms_unit_id": "550e8400-e29b-41d4-a716-446655440000",
            "pms_listing_id": "660e8400-e29b-41d4-a716-446655440001"
        },
        "business": {
            "formatted_phone_number": "(206) 555-0100",
            "email": "leasing@example.com",
            "name": "Example Property Management",
            "show_listing_apply_button": true,
            "logo_url": "https://example.com/logo.png",
            "website_url": "https://example.com",
            "theme": {
                "primary": "#1F2937"
            }
        }
    }
}
 

Request   

GET api/v1/listings/{uuid}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

uuid   string   

The UUID of the unit. Example: 123e4567-e89b-12d3-a456-426614174000

Delete listing by uuid

requires authentication

Delete a listing by UUID param.

Please provide UUID for better accuracy and performance. The UUID can be either Showdigs unit UUID, PMS unit ID, or PMS listing ID.

Example request:
curl --request DELETE \
    "https://api.showdigs.com/api/v1/listings/6ff8f7f6-1eb3-3525-be4a-3932c805afed" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.showdigs.com/api/v1/listings/6ff8f7f6-1eb3-3525-be4a-3932c805afed"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
    'https://api.showdigs.com/api/v1/listings/6ff8f7f6-1eb3-3525-be4a-3932c805afed',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.showdigs.com/api/v1/listings/6ff8f7f6-1eb3-3525-be4a-3932c805afed'
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('DELETE', url, headers=headers)
response.json()

Example response (200):


scenario { "message": "Listing deactivated successfully" }
 

Example response (404):


scenario { "message": "Unit not found" }
 

Example response (422):


scenario { "message": "Unit is not listed" } || { "message": "Some tours are planned to take place soon and can not be cancelled, try deactivating the listing after those tours are completed" }
 

Request   

DELETE api/v1/listings/{uuid}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

uuid   string   

Example: 6ff8f7f6-1eb3-3525-be4a-3932c805afed

Inquiries

Endpoints for managing inquiries.

Create an inquiry

requires authentication

Creates a new inquiry.

Example request:
curl --request POST \
    "https://api.showdigs.com/api/v1/inquiries" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data '{
    "first_name": "John",
    "last_name": "Doe",
    "email": "johndoe@example.com",
    "phone_number": "+123456789",
    "property_interest": "42 florentia st, Seattle",
    "listing_id": "1f06224c-1587-49ac-999f-5e9fcca35fac",
    "campaign": "Summer Leasing Push"
}'
const url = new URL(
    "https://api.showdigs.com/api/v1/inquiries"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "first_name": "John",
    "last_name": "Doe",
    "email": "johndoe@example.com",
    "phone_number": "+123456789",
    "property_interest": "42 florentia st, Seattle",
    "listing_id": "1f06224c-1587-49ac-999f-5e9fcca35fac",
    "campaign": "Summer Leasing Push"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://api.showdigs.com/api/v1/inquiries',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'first_name' => 'John',
            'last_name' => 'Doe',
            'email' => 'johndoe@example.com',
            'phone_number' => '+123456789',
            'property_interest' => '42 florentia st, Seattle',
            'listing_id' => '1f06224c-1587-49ac-999f-5e9fcca35fac',
            'campaign' => 'Summer Leasing Push',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.showdigs.com/api/v1/inquiries'
payload = {
    "first_name": "John",
    "last_name": "Doe",
    "email": "johndoe@example.com",
    "phone_number": "+123456789",
    "property_interest": "42 florentia st, Seattle",
    "listing_id": "1f06224c-1587-49ac-999f-5e9fcca35fac",
    "campaign": "Summer Leasing Push"
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200, Inquiry created):


{
    "inquiry_id": "7494ab9f-7da6-4598-8c3f-bc2c1f10e7b5",
    "scheduling_url": "https://showdigs.co/x1Y2z3"
}
 

Request   

POST api/v1/inquiries

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

first_name   string   

The first name of the person making an inquiry. Example: John

last_name   string   

The last name of the person making an inquiry. Example: Doe

email   string   

The email of the person making an inquiry. Example: johndoe@example.com

phone_number   string   

The phone number of the person making an inquiry. Example: +123456789

property_interest   string   

if listing_id isn't provided. The property address (including unit name) prospect is interested in. Example: 42 florentia st, Seattle

listing_id   string   

if property_interest isn't provided. The listing id prospect is interested in. Example: 1f06224c-1587-49ac-999f-5e9fcca35fac

campaign   string  optional  

optional The marketing campaign to associate with the inquiry. Example: Summer Leasing Push

Response

Response Fields

inquiry_id   string   

The unique identifier of the inquiry.

scheduling_url   string   

The URL for scheduling.

Condition reports

Endpoints for requesting, retrieving, and cancelling condition reports.

List requested and recently completed condition reports

requires authentication

Returns a paginated list owned by the authenticated business. Includes all in-progress reports and reports completed in the last month, matching the Requested and Recently Completed tabs. Cancelled reports are excluded. state is the machine-readable state; status is the PM UI label. preferred_from and preferred_until describe the current requested or scheduled inspection window in UTC; they are null before a time is chosen.

Example request:
curl --request GET \
    --get "https://api.showdigs.com/api/v1/condition-reports?page=1&per_page=10" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.showdigs.com/api/v1/condition-reports"
);

const params = {
    "page": "1",
    "per_page": "10",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.showdigs.com/api/v1/condition-reports',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'page' => '1',
            'per_page' => '10',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.showdigs.com/api/v1/condition-reports'
params = {
  'page': '1',
  'per_page': '10',
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200):


{
    "data": [
        {
            "uuid": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
            "condition_report_id": 12345,
            "type": "periodic",
            "state": "waiting_for_tenant",
            "status": "Waiting for tenant",
            "unit_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
            "address": "506 E Howell St, Seattle - E-308",
            "timezone": "America/Los_Angeles",
            "preferred_from": null,
            "preferred_until": null,
            "instructions": "Check smoke alarms",
            "lock_box_code": null,
            "access_instructions": null,
            "associated_member_email": "manager@example.com",
            "tenants": [
                {
                    "first_name": "Jane",
                    "last_name": "Doe",
                    "phone_number": "+12065550123",
                    "email": "jane@example.com"
                }
            ],
            "price": 249,
            "created_at": "2026-06-11T18:30:00.000000Z",
            "completed_at": null,
            "report_url": null
        }
    ],
    "links": {
        "first": "https://api.showdigs.com/api/v1/condition-reports?page=1",
        "last": "https://api.showdigs.com/api/v1/condition-reports?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "last_page": 1,
        "per_page": 15,
        "total": 1
    }
}
 

Request   

GET api/v1/condition-reports

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

page   integer  optional  

The page number. Must be at least 1. Example: 1

per_page   integer  optional  

The number of items per page. Must be at least 1. Must not be greater than 100. Example: 10

Get a condition report

requires authentication

Returns a report owned by the authenticated business, including archived completed and cancelled reports. Accepts either identifier returned by POST. Times are UTC; preferred_from / preferred_until are the current requested or scheduled window. status uses the PM UI labels while state is stable for integrations. Completion notifications are documented under Condition report completed.

Example request:
curl --request GET \
    --get "https://api.showdigs.com/api/v1/condition-reports/f47ac10b-58cc-4372-a567-0e02b2c3d479" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.showdigs.com/api/v1/condition-reports/f47ac10b-58cc-4372-a567-0e02b2c3d479"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.showdigs.com/api/v1/condition-reports/f47ac10b-58cc-4372-a567-0e02b2c3d479',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.showdigs.com/api/v1/condition-reports/f47ac10b-58cc-4372-a567-0e02b2c3d479'
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "data": {
        "uuid": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
        "condition_report_id": 12345,
        "type": "move_in_out",
        "state": "scheduled",
        "status": "Scheduled",
        "unit_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "address": "506 E Howell St, Seattle - E-308",
        "timezone": "America/Los_Angeles",
        "preferred_from": "2026-06-20T16:00:00.000000Z",
        "preferred_until": "2026-06-20T20:00:00.000000Z",
        "instructions": "Check smoke alarms",
        "lock_box_code": "1234",
        "access_instructions": "Use the side entrance",
        "associated_member_email": "manager@example.com",
        "tenants": [],
        "price": 249,
        "created_at": "2026-06-11T18:30:00.000000Z",
        "completed_at": null,
        "report_url": null
    }
}
 

Example response (404):


{
    "message": "Condition report not found"
}
 

Request   

GET api/v1/condition-reports/{uuid}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

uuid   string   

The report UUID returned by POST. GET also accepts the numeric condition_report_id. Example: f47ac10b-58cc-4372-a567-0e02b2c3d479

Schedule a condition report

requires authentication

Creates a condition report for a unit owned by the authenticated business.

Supported types:

The create response uuid is the inspection UUID used for cancellation. The completed_condition_report webhook's uuid field currently refers to the unit UUID.

Example request:
curl --request POST \
    "https://api.showdigs.com/api/v1/condition-reports" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data '{
    "type": "move_in_out",
    "unit_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "instructions": "Focus on kitchen appliances",
    "associated_member_email": "manager@example.com",
    "lock_box_code": "4821",
    "access_instructions": "Lockbox on the railing by the front door.",
    "preferred_from": "2026-06-20 09:00:00 -07:00",
    "tenants": [
        {
            "first_name": "Jane",
            "last_name": "Doe",
            "phone_number": "+12065550123",
            "email": "jane@example.com"
        }
    ]
}'
const url = new URL(
    "https://api.showdigs.com/api/v1/condition-reports"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "type": "move_in_out",
    "unit_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "instructions": "Focus on kitchen appliances",
    "associated_member_email": "manager@example.com",
    "lock_box_code": "4821",
    "access_instructions": "Lockbox on the railing by the front door.",
    "preferred_from": "2026-06-20 09:00:00 -07:00",
    "tenants": [
        {
            "first_name": "Jane",
            "last_name": "Doe",
            "phone_number": "+12065550123",
            "email": "jane@example.com"
        }
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://api.showdigs.com/api/v1/condition-reports',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => \deepclone_from_array([
            'classes' => 'stdClass',
            'objectMeta' => 1,
            'prepared' => [
                'type' => 'move_in_out',
                'unit_uuid' => 'a1b2c3d4-e5f6-7890-abcd-ef1234567890',
                'instructions' => 'Focus on kitchen appliances',
                'associated_member_email' => 'manager@example.com',
                'lock_box_code' => '4821',
                'access_instructions' => 'Lockbox on the railing by the front door.',
                'preferred_from' => '2026-06-20 09:00:00 -07:00',
                'tenants' => [0],
            ],
            'mask' => [
                'tenants' => [true],
            ],
            'properties' => [
                'stdClass' => [
                    'first_name' => ['Jane'],
                    'last_name' => ['Doe'],
                    'phone_number' => ['+12065550123'],
                    'email' => ['jane@example.com'],
                ],
            ],
        ], null, true),
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.showdigs.com/api/v1/condition-reports'
payload = {
    "type": "move_in_out",
    "unit_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "instructions": "Focus on kitchen appliances",
    "associated_member_email": "manager@example.com",
    "lock_box_code": "4821",
    "access_instructions": "Lockbox on the railing by the front door.",
    "preferred_from": "2026-06-20 09:00:00 -07:00",
    "tenants": [
        {
            "first_name": "Jane",
            "last_name": "Doe",
            "phone_number": "+12065550123",
            "email": "jane@example.com"
        }
    ]
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (201, move-in/out scheduled):


{
    "uuid": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
    "condition_report_id": 12345,
    "type": "move_in_out",
    "state": "ordered",
    "unit_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "address": "506 E Howell St, Seattle - E-308",
    "timezone": "America/Los_Angeles",
    "preferred_from": "2026-06-20T16:00:00.000000Z",
    "preferred_until": "2026-06-20T20:00:00.000000Z",
    "price": 249,
    "created_at": "2026-06-11T18:30:00.000000Z"
}
 

Example response (404, unit not found):


{
    "message": "Unit not found"
}
 

Example response (422, no subscription):


{
    "message": "Please renew your subscription"
}
 

Example response (422, occupied vacancy check):


{
    "message": "Please note that the vacancy check report is not available because this unit is occupied"
}
 

Example response (422, existing report):


{
    "message": "Existing condition report for this unit is currently in progress.",
    "error": "existingInspection"
}
 

Request   

POST api/v1/condition-reports

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

type   string   

Condition report type. One of: move_in_out, periodic, vacancy_check. Example: move_in_out

unit_uuid   string   

Showdigs unit UUID owned by the authenticated business. Example: a1b2c3d4-e5f6-7890-abcd-ef1234567890

instructions   string  optional  

Special instructions for the agent. Example: Focus on kitchen appliances

associated_member_email   string  optional  

PM team member email to associate with the report. Must be an account owner or member on the business. Example: manager@example.com

lock_box_code   string  optional  

Required for move_in_out and vacancy_check. Example: 4821

access_instructions   string  optional  

Required for move_in_out and vacancy_check. Example: Lockbox on the railing by the front door.

preferred_from   string  optional  

Required for move_in_out and vacancy_check. Must be inside operating hours. ISO 8601 datetime for move_in_out; Showdigs will create the default move-in/out inspection window. For vacancy_check, send a property-local YYYY-MM-DD date; Showdigs will create a 9 AM to 6 PM property-local window. Example: 2026-06-20 09:00:00 -07:00

tenants   string[]  optional  

Required for periodic. 1-10 tenant objects.

first_name   string   

Tenant first name. Example: Jane

last_name   string  optional  

Tenant last name. Example: Doe

phone_number   string  optional  

Tenant phone number. Required for the first tenant; optional for additional tenants. Example: +12065550123

email   string  optional  

Tenant email. Required for the first tenant; optional for additional tenants. Example: jane@example.com

Cancel a condition report

requires authentication

Cancels a condition report that belongs to the authenticated business and has not completed or already been cancelled.

Example request:
curl --request DELETE \
    "https://api.showdigs.com/api/v1/condition-reports/f47ac10b-58cc-4372-a567-0e02b2c3d479" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.showdigs.com/api/v1/condition-reports/f47ac10b-58cc-4372-a567-0e02b2c3d479"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
    'https://api.showdigs.com/api/v1/condition-reports/f47ac10b-58cc-4372-a567-0e02b2c3d479',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.showdigs.com/api/v1/condition-reports/f47ac10b-58cc-4372-a567-0e02b2c3d479'
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('DELETE', url, headers=headers)
response.json()

Example response (204, cancelled):

Empty response
 

Example response (404, condition report not found):


{
    "message": "Condition report not found"
}
 

Example response (422, already completed):


{
    "message": "Inspection is already completed"
}
 

Example response (422, already cancelled):


{
    "message": "Inspection is already cancelled"
}
 

Request   

DELETE api/v1/condition-reports/{uuid}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

uuid   string   

The inspection UUID returned by the create endpoint. Example: f47ac10b-58cc-4372-a567-0e02b2c3d479

Endpoints

POST api/v1/webhooks/subscribe

requires authentication

Example request:
curl --request POST \
    "https://api.showdigs.com/api/v1/webhooks/subscribe" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data '{
    "url": "https:"
}'
const url = new URL(
    "https://api.showdigs.com/api/v1/webhooks/subscribe"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "url": "https:"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://api.showdigs.com/api/v1/webhooks/subscribe',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'url' => 'https:',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.showdigs.com/api/v1/webhooks/subscribe'
payload = {
    "url": "https:"
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Request   

POST api/v1/webhooks/subscribe

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

url   string   

Must be a valid URL. Must match the regex /^https:/. Example: https:

DELETE api/v1/webhooks/unsubscribe

requires authentication

Example request:
curl --request DELETE \
    "https://api.showdigs.com/api/v1/webhooks/unsubscribe" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data '{
    "url": "https:"
}'
const url = new URL(
    "https://api.showdigs.com/api/v1/webhooks/unsubscribe"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "url": "https:"
};

fetch(url, {
    method: "DELETE",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
    'https://api.showdigs.com/api/v1/webhooks/unsubscribe',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'url' => 'https:',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.showdigs.com/api/v1/webhooks/unsubscribe'
payload = {
    "url": "https:"
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('DELETE', url, headers=headers, json=payload)
response.json()

Request   

DELETE api/v1/webhooks/unsubscribe

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

url   string  optional  

Must be a valid URL. Must match the regex /^https:/. Example: https:

GET api/v1/webhooks/sample

requires authentication

Example request:
curl --request GET \
    --get "https://api.showdigs.com/api/v1/webhooks/sample" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://api.showdigs.com/api/v1/webhooks/sample"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.showdigs.com/api/v1/webhooks/sample',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.showdigs.com/api/v1/webhooks/sample'
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
vary: Origin
 

{
    "message": "Unauthenticated."
}
 

Request   

GET api/v1/webhooks/sample

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Properties

Endpoints for managing properties and their units.

Create a Property and its Units

requires authentication

This endpoint allows you to create a new property along with its associated units.

Example request:
curl --request POST \
    "https://api.showdigs.com/api/v1/properties" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data '{
    "origin_id": "p_1",
    "property_type": "Single Family Home",
    "street": "4536 S Pennsylvania Ave",
    "city": "Oklahoma City",
    "state": "OK",
    "zip": "73119",
    "latitude": 35.4197022,
    "longitude": -97.5471714,
    "units": [
        {
            "name": "Unit A",
            "bedrooms": 3,
            "bathrooms": 2,
            "size": 1200,
            "images": [
                "https://placehold.co/600x400/blue/black"
            ]
        }
    ]
}'
const url = new URL(
    "https://api.showdigs.com/api/v1/properties"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "origin_id": "p_1",
    "property_type": "Single Family Home",
    "street": "4536 S Pennsylvania Ave",
    "city": "Oklahoma City",
    "state": "OK",
    "zip": "73119",
    "latitude": 35.4197022,
    "longitude": -97.5471714,
    "units": [
        {
            "name": "Unit A",
            "bedrooms": 3,
            "bathrooms": 2,
            "size": 1200,
            "images": [
                "https:\/\/placehold.co\/600x400\/blue\/black"
            ]
        }
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://api.showdigs.com/api/v1/properties',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'origin_id' => 'p_1',
            'property_type' => 'Single Family Home',
            'street' => '4536 S Pennsylvania Ave',
            'city' => 'Oklahoma City',
            'state' => 'OK',
            'zip' => '73119',
            'latitude' => 35.4197022,
            'longitude' => -97.5471714,
            'units' => [
                [
                    'name' => 'Unit A',
                    'bedrooms' => 3,
                    'bathrooms' => 2,
                    'size' => 1200,
                    'images' => ['https://placehold.co/600x400/blue/black'],
                ],
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.showdigs.com/api/v1/properties'
payload = {
    "origin_id": "p_1",
    "property_type": "Single Family Home",
    "street": "4536 S Pennsylvania Ave",
    "city": "Oklahoma City",
    "state": "OK",
    "zip": "73119",
    "latitude": 35.4197022,
    "longitude": -97.5471714,
    "units": [
        {
            "name": "Unit A",
            "bedrooms": 3,
            "bathrooms": 2,
            "size": 1200,
            "images": [
                "https:\/\/placehold.co\/600x400\/blue\/black"
            ]
        }
    ]
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (201, Property created):


{
    "origin_id": "p_1",
    "created_at": "2024-07-25 13:40:54",
    "updated_at": "2024-07-25 13:40:54",
    "property_type": "Single Family Home",
    "short_address": "4536 S Pennsylvania Ave, Oklahoma City",
    "timezone": "America/Denver",
    "location": {
        "type": "Point",
        "coordinates": [
            -97.5471714,
            35.4197022
        ]
    },
    "units": [
        {
            "uuid": "u_1",
            "created_at": "2024-07-25 13:40:54",
            "updated_at": "2024-07-25 13:40:54",
            "name": null,
            "images": [
                "https://example.com/pic.jpg",
                "https://example.com/pic2.jpg"
            ],
            "bedrooms": 3,
            "bathrooms": 2,
            "size": 1200
        }
    ]
}
 

Request   

POST api/v1/properties

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

origin_id   string  optional  

The unique identifier for the property. Example: p_1

property_type   string  optional  

The type of the property. Example: Single Family Home

street   string   

The street address of the property. Example: 4536 S Pennsylvania Ave

city   string   

The city where the property is located. Example: Oklahoma City

state   string   

The state where the property is located. Example: OK

zip   string   

The postal code of the property. Example: 73119

latitude   number   

The latitude coordinate of the property. Example: 35.4197022

longitude   number   

The longitude coordinate of the property. Example: -97.5471714

units   object[]   

An array of units associated with the property.

name   string  optional  

The name of the unit. Example: Unit A

bedrooms   integer  optional  

The number of bedrooms in the unit. Example: 3

bathrooms   integer  optional  

The number of bathrooms in the unit. Example: 2

size   integer  optional  

The size of the unit in square feet. Example: 1200

images   string[]  optional  

An array of image URLs for the unit.

Update a Property and its Units

requires authentication

This endpoint allows you to update an existing property along with its associated units.

Example request:
curl --request PUT \
    "https://api.showdigs.com/api/v1/properties/architecto" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data '{
    "property_type": "Single Family Home",
    "street": "4536 S Pennsylvania Ave",
    "city": "Oklahoma City",
    "state": "OK",
    "zip": "73119",
    "latitude": 35.4197022,
    "longitude": -97.5471714,
    "units": [
        {
            "uuid": "54f4b3b3-1b1b-4b3b-8b3b-1b1b4b3b8b3b",
            "name": "Unit A",
            "bedrooms": 3,
            "bathrooms": 2,
            "size": 1200,
            "images": [
                "https://placehold.co/600x400/blue/black"
            ]
        }
    ]
}'
const url = new URL(
    "https://api.showdigs.com/api/v1/properties/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "property_type": "Single Family Home",
    "street": "4536 S Pennsylvania Ave",
    "city": "Oklahoma City",
    "state": "OK",
    "zip": "73119",
    "latitude": 35.4197022,
    "longitude": -97.5471714,
    "units": [
        {
            "uuid": "54f4b3b3-1b1b-4b3b-8b3b-1b1b4b3b8b3b",
            "name": "Unit A",
            "bedrooms": 3,
            "bathrooms": 2,
            "size": 1200,
            "images": [
                "https:\/\/placehold.co\/600x400\/blue\/black"
            ]
        }
    ]
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->put(
    'https://api.showdigs.com/api/v1/properties/architecto',
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'property_type' => 'Single Family Home',
            'street' => '4536 S Pennsylvania Ave',
            'city' => 'Oklahoma City',
            'state' => 'OK',
            'zip' => '73119',
            'latitude' => 35.4197022,
            'longitude' => -97.5471714,
            'units' => [
                [
                    'uuid' => '54f4b3b3-1b1b-4b3b-8b3b-1b1b4b3b8b3b',
                    'name' => 'Unit A',
                    'bedrooms' => 3,
                    'bathrooms' => 2,
                    'size' => 1200,
                    'images' => ['https://placehold.co/600x400/blue/black'],
                ],
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.showdigs.com/api/v1/properties/architecto'
payload = {
    "property_type": "Single Family Home",
    "street": "4536 S Pennsylvania Ave",
    "city": "Oklahoma City",
    "state": "OK",
    "zip": "73119",
    "latitude": 35.4197022,
    "longitude": -97.5471714,
    "units": [
        {
            "uuid": "54f4b3b3-1b1b-4b3b-8b3b-1b1b4b3b8b3b",
            "name": "Unit A",
            "bedrooms": 3,
            "bathrooms": 2,
            "size": 1200,
            "images": [
                "https:\/\/placehold.co\/600x400\/blue\/black"
            ]
        }
    ]
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PUT', url, headers=headers, json=payload)
response.json()

Example response (202, Property updated):


{
    "origin_id": "p_1",
    "created_at": "2024-07-25 13:40:54",
    "updated_at": "2024-07-25 13:40:54",
    "property_type": "Single Family Home",
    "short_address": "4536 S Pennsylvania Ave, Oklahoma City",
    "timezone": "America/Denver",
    "location": {
        "type": "Point",
        "coordinates": [
            -97.5471714,
            35.4197022
        ]
    },
    "units": [
        {
            "uuid": "u_1",
            "created_at": "2024-07-25 13:40:54",
            "updated_at": "2024-07-25 13:40:54",
            "name": null,
            "images": [
                "https://example.com/pic.jpg",
                "https://example.com/pic2.jpg"
            ],
            "bedrooms": 3,
            "bathrooms": 2,
            "size": 1200
        }
    ]
}
 

Example response (422, update property validation error):


{
    "message": "The given data was invalid.",
    "errors": {
        "street": [
            "The street field is required."
        ],
        "city": [
            "The city field is required."
        ],
        "state": [
            "The state field is required."
        ],
        "zip": [
            "The zip field is required."
        ],
        "latitude": [
            "The latitude field is required."
        ],
        "longitude": [
            "The longitude field is required."
        ],
        "units": [
            "The units field is required."
        ],
        "units.0.uuid": [
            "The units.0.uuid id field is required."
        ],
        "units.0.bedrooms": [
            "The units.0.bedrooms field is required."
        ],
        "units.0.bathrooms": [
            "The units.0.bathrooms field is required."
        ],
        "units.0.size": [
            "The units.0.size field is required."
        ]
    }
}
 

Request   

PUT api/v1/properties/{origin_id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

origin_id   string   

The ID of the origin. Example: architecto

propertyOriginId   string   

The unique identifier for the property. Example: p_1

Body Parameters

property_type   string  optional  

The type of the property. Example: Single Family Home

street   string   

The street address of the property. Example: 4536 S Pennsylvania Ave

city   string   

The city where the property is located. Example: Oklahoma City

state   string   

The state where the property is located. Example: OK

zip   string   

The postal code of the property. Example: 73119

latitude   number   

The latitude coordinate of the property. Example: 35.4197022

longitude   number   

The longitude coordinate of the property. Example: -97.5471714

units   object[]   

An array of units associated with the property.

uuid   string  optional  

The unique identifier for the unit. Omitting this field implies you're creating a new unit. Example: 54f4b3b3-1b1b-4b3b-8b3b-1b1b4b3b8b3b

name   string  optional  

The name of the unit. Example: Unit A

bedrooms   integer  optional  

The number of bedrooms in the unit. Example: 3

bathrooms   integer  optional  

The number of bathrooms in the unit. Example: 2

size   integer  optional  

The size of the unit in square feet. Example: 1200

images   string[]  optional  

An array of image URLs for the unit.

Webhooks

Overview

Showdigs provides a webhook integration that allows you to receive requests in real-time.

In the settings page of your Showdigs account, you can configure a webhook URL to receive events. You can also configure a webhook access token to verify the authenticity of the request.

Showdigs Webhook Integration

Webhook events can be differentiated based on their event_type, which will be included as the first element in every webhook object.

Webhook Access Token

When the token is set, it will be included in the request headers.

"Authorization:" "Bearer TOKEN"

Delivery, acknowledgment, retries, and deduplication

Showdigs delivers each subscribed event as an HTTP POST of a JSON body to the webhook URL configured for your business (settings UI or POST /api/v1/webhooks/subscribe).

Delivery expectations

Acknowledgment

Retries

Deduplication (your responsibility)

Unsupported guarantees (plainly)

Inquiry Created

When a new inquiry is received for a property.

{
    "event_type": "new_inquiry",
    "inquiry_id": "4789",
    "unit_internal_id": "2345",
    "address": "506 E Howell St, Seattle - E-308",
    "timezone": "America/Los_Angeles",
    "prospect": {
        "id": 98,
        "first_name": "Brenna",
        "last_name": "Webb",
        "full_name": "Brenna Webb",
        "phone_number": "+972549143350",
        "email": "jelado@mailinator.com"
    },
    "comment": null,
    "inquiry_source": "Manual",
    "pms_unit_id": "550e8400-e29b-41d4-a716-446655440000",
    "pms_listing_id": "660e8400-e29b-41d4-a716-446655440001",
    "uuid": "1e840593-2e20-47f1-b7bc-65e96fe4740d",
    "message": "Brenna Webb has inquired about 1473 22nd Ave, Seattle: https://app.showigs.com/prospects/98"
}

event_type
The webhook event.

inquiry_id
The inquiry identifier.

unit_internal_id
The PMS identifier for the property.

address
The address of the property the prospect is interested in.

timezone
The timezone the property is in.

prospect.id
The Showdigs prospect identifier.

prospect.first_name The prospect's first name.

prospect.last_name
The prospect's last name.

prospect.full_name
The prospect's full name.

prospect.phone_number The prospect's phone number.

prospect.email
The prospect's email.

comment
The message, if any, contained in the prospect’s inquiry.

inquiry_source The source of the inquiry.
Example values: Zillow Rental Network, Zillow, Manual, PM Website (the Showdigs listing page), plus many more

pms_unit_id
The PMS unit identifier.

pms_listing_id
The PMS listing identifier.

uuid
The Showdigs identifier, which can be used in the /listings:{uuid} API call.

message
A human readable message to describe what happened.

Disqualified Lead

When a prospect completes the pre-screening and is disqualified from touring a property.

{
    "event_type": "disqualified_lead",
    "inquiry_id": "4789",
    "unit_internal_id": "2345",
    "address": "506 E Howell St, Seattle - E-308",
    "timezone": "America/Los_Angeles",
    "prospect": {
        "id": 98,
        "first_name": "Brenna",
        "last_name": "Webb",
        "full_name": "Brenna Webb",
        "phone_number": "+972549143350",
        "email": "jelado@mailinator.com"
    },
    "pre_screening_answers": {
        "data": {
            "move_in_date": {
                "tour_at": "2023-03-18T18:30:00+02:00",
                "move_in_date": "2023-03-18T14:28:00.000Z"
            },
            "smoking_policy": "no",
            "minimum_lease_length": "2_years",
            "maximum_allowed_tenants": "1_tenant"
        },
        "is_qualified": false
    },
    "pms_unit_id": "550e8400-e29b-41d4-a716-446655440000",
    "pms_listing_id": "660e8400-e29b-41d4-a716-446655440001",
    "uuid": "1e840593-2e20-47f1-b7bc-65e96fe4740d",
    "message": "Brenna Webb completed the pre-screening and was disqualified from touring 506 E Howell St, Seattle - E-308: https://app.showdigs.com/prospects/98"
}

event_type
The webhook event.

inquiry_id
The inquiry identifier.

unit_internal_id
The PMS identifier for the property.

address
The address of the property the prospect was disqualified from touring.

timezone
The timezone the property is in.

prospect.id
The Showdigs prospect identifier.

prospect.first_name The prospect's first name.

prospect.last_name
The prospect's last name.

prospect.full_name
The prospect's full name.

prospect.phone_number The prospect's phone number.

prospect.email
The prospect's email.

pre_screening_answers
This section contains the prospect's responses to pre-screening questions they were asked. The contents will differ based on your individual showing configuration.

pms_unit_id
The PMS unit identifier.

pms_listing_id
The PMS listing identifier.

uuid
The Showdigs identifier, which can be used in the /listings:{uuid} API call.

message
A human readable message to describe what happened.

Tour Scheduled

When a tour is scheduled.

{
    "event_type": "tour_scheduled",
    "tour_type": "agent",
    "tour_id": 59,
    "unit_internal_id": "my_int_id",
    "address": "1473 22nd Ave, Seattle",
    "timezone": "America/Los_Angeles",
    "tour_at": "2023-03-18T16:30:00.000Z",
    "tour_until": "2023-03-18T17:00:00.000Z",
    "inquiry_id": 456,
    "prospect_id": 123,
    "prospect_first_name": "Shanon",
    "prospect_last_name": "Klocko",
    "prospect_phone_number": "+201255564049",
    "prospect_email": "ouhwfiop@showdigs.testfake",
    "pre_screening_answers": {
        "data": {
            "move_in_date": {
                "tour_at": "2023-03-18T18:30:00+02:00",
                "move_in_date": "2023-03-18T14:28:00.000Z"
            },
            "smoking_policy": "no",
            "minimum_lease_length": "2_years",
            "maximum_allowed_tenants": "1_tenant"
        },
        "is_qualified": true
    },
    "identity_verification": null,
    "pms_unit_id": "550e8400-e29b-41d4-a716-446655440000",
    "pms_listing_id": "660e8400-e29b-41d4-a716-446655440001",
    "uuid": "1e840593-2e20-47f1-b7bc-65e96fe4740d",
    "message": "Shanon Klocko scheduled a tour 1473 22nd Ave, Seattle: https://app.showdigs.com/tours/59"
}

event_type
The webhook event.

tour_type
The type of tour that was scheduled.
Possible values: self_showing, open_house, agent

tour_id
The Showdigs identifier for the tour. This will be consistent for a single tour across the tour-related webhooks.

unit_internal_id
The PMS identifier for the property.

address
The address of the property being toured.

timezone
The timezone the property is in.

tour_at
The scheduled start time for the tour.

tour_until
The scheduled end time for the tour.

inquiry_id
The inquiry identifier that led to the tour.

prospect_id
The Showdigs identifier for the prospect. This will be the same for the prospect for all properties they request to tour.

prospect_first_name
The prospect's first name.

prospect_last_name
The prospect's last name.

prospect_phone_number
The prospect's phone number.

prospect_email
The prospect's email address.

pre_screening_answers
This section contains the prospect's responses to pre-screening questions they were asked when scheduling the tour. The contents will differ based on your individual showing configuration.

pre_screening_answers.data.move_in_date
This provides the tour time and then the calculated move in date based on the "Move in date" pre-screening criteria.

pre_screening_answers.data.smoking_policy
The prospect's answer to the question, "will you be smoking in this property?"
Possible values: yes, no

pre_screening_answers.data.minimum_lease_length
The prospect's answer to the question, "how long are you planning to lease the property for?"

pre_screening_answers.data.maximum_allowed_tenants
The prospect's answer to the question, "how many tenants are expected to live in the property?"

pre_screening_answers.is_qualified
The overall result of the pre-screening questions.
Possible values: true (is qualified), false (is not qualified)

identity_verification
This is an area we are planning to build into. For now, this will always be null.

pms_unit_id
The PMS unit identifier.

pms_listing_id
The PMS listing identifier.

uuid
The Showdigs identifier, which can be used in the /listings:{uuid} API call.

message
A human readable message to describe what happened.

Tour Completed

When a tour is completed.

{
    "event_type": "tour_completed",
    "tour_type": "agent",
    "tour_id": 59,
    "outcome": "completed",
    "unit_internal_id": "my_int_id",
    "address": "1473 22nd Ave, Seattle",
    "timezone": "America/Los_Angeles",
    "tour_at": "2023-03-18T16:30:00.000Z",
    "tour_until": "2023-03-18T17:00:00.000Z",
    "survey_results": [
        {
            "key": "outcome",
            "answer": "Successful tour",
            "question": "Tour outcome"
        },
        {
            "key": "does_unit_show_well",
            "answer": "yes",
            "question": "Does the unit show well? If not, what can be done to make it show better?"
        }
    ],
    "prospects_count": 2,
    "prospects": [
        {
            "id": 90,
            "first_name": "Ottis",
            "last_name": "Feest",
            "phone": "+201255563527",
            "email": "ukbkadhj@showdigs.testfake",
            "likely_to_apply": "Maybe",
            "inquiry_id": 456
        },
        {
            "id": 91,
            "first_name": "Shanon",
            "last_name": "Klocko",
            "phone": "+201255564049",
            "email": "ouhwfiop@showdigs.testfake",
            "likely_to_apply": "Yes",
            "inquiry_id": 789
        }
    ],
    "charge": 45,
    "pms_unit_id": "550e8400-e29b-41d4-a716-446655440000",
    "pms_listing_id": "660e8400-e29b-41d4-a716-446655440001",
    "uuid": "1e840593-2e20-47f1-b7bc-65e96fe4740d",
    "message": "Multiple prospects completed a tour of 1473 22nd Ave, Seattle: https://app.showdigs.com/tours/59"
}

event_type
The webhook event.

tour_type
The type of tour that was scheduled.
Possible values: self_showing, open_house, agent

tour_id
The Showdigs identifier for the tour. This will be consistent for a single tour across the tour-related webhooks.

outcome
The outcome of the tour. Keep in mind that tour_cancelled is a different webhook.
Possible values: completed, no_show, technical_issue (typically refers to an access issue that prevented the tour from occurring)

unit_internal_id
The PMS identifier for the property.

address
The address of the property being toured.

timezone
The timezone the property is in.

tour_at
The scheduled start time for the tour.

tour_until
The scheduled end time for the tour.

survey_results
An array of the questions asked to the agent and their responses about the tour and property.

prospects_count
The number of prospects that attended the tour.

prospects
An array of the prospects that attended the tour. This will include each prospect's id, name, phone, email, original inquiry identifier, and the agent's thoughts regarding the likelihood of the prospect to apply.

charge
This is the amount that was charged to complete the tour.
Value will be numeric, and will not have any "money" formatting applied.

pms_unit_id
The PMS unit identifier.

pms_listing_id
The PMS listing identifier.

uuid
The Showdigs identifier, which can be used in the /listings:{uuid} API call.

message
A human readable message to describe what happened

Tour Cancelled

When a tour is cancelled.

{
    "event_type": "tour_cancelled",
    "tour_type": "agent",
    "tour_id": 59,
    "unit_internal_id": "my_int_id",
    "address": "1473 22nd Ave, Seattle",
    "timezone": "America/Los_Angeles",
    "tour_at": "2023-03-18T16:30:00.000Z",
    "tour_until": "2023-03-18T17:00:00.000Z",
    "prospects": [
        {
            "id": 90,
            "first_name": "Ottis",
            "last_name": "Feest",
            "phone": "+201255563527",
            "email": "ukbkadhj@showdigs.testfake",
            "inquiry_id": 456
        }
    ],
    "pms_unit_id": "550e8400-e29b-41d4-a716-446655440000",
    "pms_listing_id": "660e8400-e29b-41d4-a716-446655440001",
    "uuid": "1e840593-2e20-47f1-b7bc-65e96fe4740d",
    "message": "Ottis Feest cancelled a tour 1473 22nd Ave, Seattle: https://app.showdigs.com/tours/59"
}

event_type
The webhook event.

tour_type
The type of tour that was scheduled.
Possible values: self_showing, open_house, agent

tour_id
The Showdigs identifier for the tour. This will be consistent for a single tour across the tour-related webhooks.

unit_internal_id
The PMS identifier for the property.

address
The address of the property being toured.

timezone
The timezone the property is in.

tour_at
The scheduled start time for the tour.

tour_until
The scheduled end time for the tour.

prospects
An array of the prospects that were scheduled to attend the tour. This will include each prospect's id, name, phone, email, and their original inquiry identifier.

pms_unit_id
The PMS unit identifier.

pms_listing_id
The PMS listing identifier.

uuid
The Showdigs identifier, which can be used in the /listings:{uuid} API call.

message
A human readable message to describe what happened

Condition report completed

When a condition report is completed.

{
    "event_type": "completed_condition_report",
    "condition_report_id": 123,
    "address": "506 E Howell St, Seattle - E-308",
    "timezone": "America/Los_Angeles",
    "report_url": "sd.test/9pdYyM",
    "cost": "20",
    "condition_report_type": "move_in_out",
    "inspected_at": "2023-03-18T17:00:00.000Z",
    "uuid": "1e840593-2e20-47f1-b7bc-65e96fe4740d",
    "message": "A condition report was completed for 506 E Howell St, Seattle - E-308"
}

event_type
The webhook event.

condition_report_id
The Shodigs identifier for the condition report.

address
The address of the property that the report was completed for.

timezone
The timezone the property is in.

report_url
The url of the completed condition report.

cost This is the amount that was charged to complete the condition report.
Value will be numeric, and will not have any "money" formatting applied.

condition_report_type
The type of condition report that was completed.
Possible values: periodic, move_in_out, vacancy_check

inspected_at
The date and time the condition report was completed at.

uuid
The Showdigs identifier, which can be used in the /listings:{uuid} API call.

message
A human readable message to describe what happened

Scheduling Widget

You can load Showdigs scheduling widget inside your listing page.

Showdigs Scheduling Widget

Contact Showdigs support and provide a list of domains you're expecting to load the widget from.

Once feature is enabled for your account, you can embed the widget as an iframe in your site.


<iframe
    src="https://lead.showdigs.com/embed/ACCOUNT_ID/INTERNAL_UNIT_ID?name=John Doe&phone=%2b15555551234"
    width="100%"
    height="600px"
    style="border:none;">
</iframe>