MENU navbar-image

Introduction

This documentation aims to provide all the information you need to work with our API.

Authenticating requests

To authenticate requests, include an Authorization header with the value "Bearer your-token".

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

You can generate an API Token by visiting Integrations & API from your company settings.

You can validate a token with the Token GET endpoint. A 200 response will also include a payload that identifies the token's Company at data.attributes.company_id. The token has access to all of this company's endpoints.

Tokens

API for validating API Token.

Show

requires authentication

If a 200 response is received, the payload will contain the id of the company the token may access.

Example request:
curl --request GET \
    --get "https://slottable.app/api/v1/token" \
    --header "Authorization: Bearer aacPvVb6hZ8d14Dfekg63E5" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://slottable.app/api/v1/token',
    [
        'headers' => [
            'Authorization' => 'Bearer aacPvVb6hZ8d14Dfekg63E5',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://slottable.app/api/v1/token"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "36",
        "type": "companyAccessTokens",
        "attributes": {
            "id": 36,
            "company_id": 1,
            "name": "Zapier",
            "created_at": "2023-06-26T22:38:25.000000Z"
        },
        "relationships": {},
        "meta": {},
        "links": {}
    },
    "included": [],
    "jsonapi": {
        "version": "1.0",
        "meta": {}
    }
}
 

Request   

GET api/v1/token

Headers

Authorization      

Example: Bearer aacPvVb6hZ8d14Dfekg63E5

Content-Type      

Example: application/json

Accept      

Example: application/json

Company Webhooks

API for managing the Company's Webhooks

List

requires authentication

Example request:
curl --request GET \
    --get "https://slottable.app/api/v1/companies/1/webhooks?page%5Bnumber%5D=1&page%5Blimit%5D=20" \
    --header "Authorization: Bearer 81fP3a6cEa5kbZDeVvhg46d" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://slottable.app/api/v1/companies/1/webhooks',
    [
        'headers' => [
            'Authorization' => 'Bearer 81fP3a6cEa5kbZDeVvhg46d',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'page[number]' => '1',
            'page[limit]' => '20',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://slottable.app/api/v1/companies/1/webhooks"
);

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

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "238",
            "type": "companyWebhooks",
            "attributes": {
                "id": 238,
                "company_id": 1,
                "url": "https://your-webhook.url/uri",
                "method": "post",
                "filter_key": null,
                "model": "Contact",
                "events": "changed",
                "created_at": "2023-06-26T22:38:26.000000Z",
                "updated_at": "2023-06-26T22:38:26.000000Z"
            },
            "relationships": {},
            "meta": {},
            "links": {}
        },
        {
            "id": "239",
            "type": "companyWebhooks",
            "attributes": {
                "id": 239,
                "company_id": 1,
                "url": "https://your-webhook.url/uri",
                "method": "post",
                "filter_key": "SlotType:1",
                "model": "BookingContact",
                "events": "changed",
                "created_at": "2023-06-26T22:38:26.000000Z",
                "updated_at": "2023-06-26T22:38:26.000000Z"
            },
            "relationships": {},
            "meta": {},
            "links": {}
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1"
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 20,
        "to": 2,
        "total": 2
    },
    "included": [],
    "jsonapi": {
        "version": "1.0",
        "meta": {}
    }
}
 

Request   

GET api/v1/companies/{company_id}/webhooks

Headers

Authorization      

Example: Bearer 81fP3a6cEa5kbZDeVvhg46d

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

company_id   integer   

The ID of the company. Example: 1

Query Parameters

page[number]   integer  optional  

Page number. Example: 1

page[limit]   integer  optional  

Number of results per page. Default: 20. Max: 100. Example: 20

Create

requires authentication

Example request:
curl --request POST \
    "https://slottable.app/api/v1/companies/1/webhooks" \
    --header "Authorization: Bearer EvZg68Vf45bka6dca3eP1Dh" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"url\": \"https:\\/\\/your-webhook.url\",
    \"method\": \"post\",
    \"filter_key\": \"SlotType:1\",
    \"model\": \"BookingContact\",
    \"events\": \"changed\"
}"
$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://slottable.app/api/v1/companies/1/webhooks',
    [
        'headers' => [
            'Authorization' => 'Bearer EvZg68Vf45bka6dca3eP1Dh',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'url' => 'https://your-webhook.url',
            'method' => 'post',
            'filter_key' => 'SlotType:1',
            'model' => 'BookingContact',
            'events' => 'changed',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://slottable.app/api/v1/companies/1/webhooks"
);

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

let body = {
    "url": "https:\/\/your-webhook.url",
    "method": "post",
    "filter_key": "SlotType:1",
    "model": "BookingContact",
    "events": "changed"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "240",
        "type": "companyWebhooks",
        "attributes": {
            "id": 240,
            "company_id": 1,
            "url": "https://your-webhook.url/uri",
            "method": "post",
            "filter_key": "SlotType:1",
            "model": "BookingContact",
            "events": "changed",
            "created_at": "2023-06-26T22:38:26.000000Z",
            "updated_at": "2023-06-26T22:38:26.000000Z"
        },
        "relationships": {},
        "meta": {},
        "links": {}
    },
    "included": [],
    "jsonapi": {
        "version": "1.0",
        "meta": {}
    }
}
 

Request   

POST api/v1/companies/{company_id}/webhooks

Headers

Authorization      

Example: Bearer EvZg68Vf45bka6dca3eP1Dh

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

company_id   integer   

The ID of the company. Example: 1

Body Parameters

url   string   

The webhook url. Example: https://your-webhook.url

method   string   

The HTTP method Slottable should use when triggering webhook url. Example: post

filter_key   string  optional  

Filter events by an associated model. Example: SlotType:1

model   string   

The model whose event/s you want to subscribe. Example: BookingContact

events   string   

A comma separated list of the events you want to subscribe. Example: changed

Show

requires authentication

Example request:
curl --request GET \
    --get "https://slottable.app/api/v1/companies/1/webhooks/8" \
    --header "Authorization: Bearer 6vP8aVgbk41ZDhdfe56aEc3" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://slottable.app/api/v1/companies/1/webhooks/8',
    [
        'headers' => [
            'Authorization' => 'Bearer 6vP8aVgbk41ZDhdfe56aEc3',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://slottable.app/api/v1/companies/1/webhooks/8"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "241",
        "type": "companyWebhooks",
        "attributes": {
            "id": 241,
            "company_id": 1,
            "url": "https://your-webhook.url/uri",
            "method": "post",
            "filter_key": "SlotType:1",
            "model": "BookingContact",
            "events": "changed",
            "created_at": "2023-06-26T22:38:26.000000Z",
            "updated_at": "2023-06-26T22:38:26.000000Z"
        },
        "relationships": {},
        "meta": {},
        "links": {}
    },
    "included": [],
    "jsonapi": {
        "version": "1.0",
        "meta": {}
    }
}
 

Request   

GET api/v1/companies/{company_id}/webhooks/{id}

Headers

Authorization      

Example: Bearer 6vP8aVgbk41ZDhdfe56aEc3

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

company_id   integer   

The ID of the company. Example: 1

id   integer   

The ID of the webhook. Example: 8

Delete

requires authentication

Example request:
curl --request DELETE \
    "https://slottable.app/api/v1/companies/1/webhooks/8" \
    --header "Authorization: Bearer EvaZb41hkc63Dga6f5Pe8dV" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
$client = new \GuzzleHttp\Client();
$response = $client->delete(
    'https://slottable.app/api/v1/companies/1/webhooks/8',
    [
        'headers' => [
            'Authorization' => 'Bearer EvaZb41hkc63Dga6f5Pe8dV',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://slottable.app/api/v1/companies/1/webhooks/8"
);

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

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (204):

Empty response
 

Request   

DELETE api/v1/companies/{company_id}/webhooks/{id}

Headers

Authorization      

Example: Bearer EvaZb41hkc63Dga6f5Pe8dV

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

company_id   integer   

The ID of the company. Example: 1

id   integer   

The ID of the webhook. Example: 8

Company Contacts

API for managing a company's contacts

List

requires authentication

Example request:
curl --request GET \
    --get "https://slottable.app/api/v1/companies/1/contacts?page%5Bnumber%5D=1&page%5Blimit%5D=20" \
    --header "Authorization: Bearer 136fdcgZD4VbPha6eakEv85" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://slottable.app/api/v1/companies/1/contacts',
    [
        'headers' => [
            'Authorization' => 'Bearer 136fdcgZD4VbPha6eakEv85',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'page[number]' => '1',
            'page[limit]' => '20',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://slottable.app/api/v1/companies/1/contacts"
);

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

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "3615",
            "type": "contacts",
            "attributes": {
                "id": 3615,
                "company_id": 1,
                "stripe_customer_id": null,
                "first_name": "Angeline",
                "last_name": "Kirlin",
                "email": "jadon81@hotmail.com",
                "phone": "+1 (740) 374-0599",
                "street_address": "51648 Auer Trail",
                "street_address_2": null,
                "city": "Lake Stanleyborough",
                "state": "Arizona",
                "postal": "70272-2194",
                "country": "USA",
                "is_subscribed": false,
                "created_at": "2023-06-26T22:38:26.000000Z",
                "updated_at": "2023-06-26T22:38:26.000000Z"
            },
            "relationships": {},
            "meta": {},
            "links": {}
        },
        {
            "id": "3616",
            "type": "contacts",
            "attributes": {
                "id": 3616,
                "company_id": 1,
                "stripe_customer_id": null,
                "first_name": "Mariano",
                "last_name": "Keeling",
                "email": "shea.wuckert@oberbrunner.biz",
                "phone": "+1-458-683-9137",
                "street_address": "8441 Pfeffer Passage",
                "street_address_2": null,
                "city": "Parismouth",
                "state": "Hawaii",
                "postal": "54099-8122",
                "country": "USA",
                "is_subscribed": false,
                "created_at": "2023-06-26T22:38:26.000000Z",
                "updated_at": "2023-06-26T22:38:26.000000Z"
            },
            "relationships": {},
            "meta": {},
            "links": {}
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1"
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next »",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 20,
        "to": 2,
        "total": 2
    },
    "included": [],
    "jsonapi": {
        "version": "1.0",
        "meta": {}
    }
}
 

Request   

GET api/v1/companies/{company_id}/contacts

Headers

Authorization      

Example: Bearer 136fdcgZD4VbPha6eakEv85

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

company_id   integer   

The ID of the company. Example: 1

Query Parameters

page[number]   integer  optional  

Page number. Example: 1

page[limit]   integer  optional  

Number of results per page. Default: 20. Max: 100. Example: 20

Show

requires authentication

Example request:
curl --request GET \
    --get "https://slottable.app/api/v1/companies/1/contacts/1" \
    --header "Authorization: Bearer fd5ZahaV8vc64DkE13bgeP6" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://slottable.app/api/v1/companies/1/contacts/1',
    [
        'headers' => [
            'Authorization' => 'Bearer fd5ZahaV8vc64DkE13bgeP6',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://slottable.app/api/v1/companies/1/contacts/1"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "3617",
        "type": "contacts",
        "attributes": {
            "id": 3617,
            "company_id": 1,
            "stripe_customer_id": null,
            "first_name": "Wilhelmine",
            "last_name": "Lindgren",
            "email": "josh82@hotmail.com",
            "phone": "+1-938-774-9323",
            "street_address": "244 Hickle Harbor",
            "street_address_2": null,
            "city": "Cronaside",
            "state": "Wisconsin",
            "postal": "64263",
            "country": "USA",
            "is_subscribed": true,
            "created_at": "2023-06-26T22:38:26.000000Z",
            "updated_at": "2023-06-26T22:38:26.000000Z"
        },
        "relationships": {},
        "meta": {},
        "links": {}
    },
    "included": [],
    "jsonapi": {
        "version": "1.0",
        "meta": {}
    }
}
 

Request   

GET api/v1/companies/{company_id}/contacts/{id}

Headers

Authorization      

Example: Bearer fd5ZahaV8vc64DkE13bgeP6

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

company_id   integer   

The ID of the company. Example: 1

id   integer   

The ID of the contact. Example: 1

Slot Types

API for managing a Company's Slot Types

List

requires authentication

Example request:
curl --request GET \
    --get "https://slottable.app/api/v1/companies/1/slot-types?page%5Bnumber%5D=1&page%5Blimit%5D=20" \
    --header "Authorization: Bearer 6aEvc6hfdbe3Z15kPD8a4Vg" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://slottable.app/api/v1/companies/1/slot-types',
    [
        'headers' => [
            'Authorization' => 'Bearer 6aEvc6hfdbe3Z15kPD8a4Vg',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'page[number]' => '1',
            'page[limit]' => '20',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://slottable.app/api/v1/companies/1/slot-types"
);

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

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "157",
            "type": "slotTypes",
            "attributes": {
                "id": 157,
                "company_id": 1,
                "stripe_product_id": null,
                "name": "consectetur",
                "description_html": "<div><p>Voluptas soluta molestias et. Vitae odit perspiciatis in culpa.</p></div>",
                "duration_unit": "Days",
                "timezone": "Europe/Vatican",
                "default_duration": 6,
                "default_slot_count": 30,
                "default_require_payment": false,
                "default_price": 0,
                "default_time": null,
                "allow_cancelling": false,
                "allow_rescheduling": false,
                "allow_add_remove_participants": true,
                "allow_edit_participants": false,
                "cancel_reschedule_duration": 30,
                "process_refunds": false,
                "participants_per_booking": 2,
                "disallow_multiple_instances_per_participant": false,
                "multiple_instances_disallowed_message": "Eos molestias inventore fuga totam.",
                "participant_noun": "Participant",
                "require_terms_conditions": true,
                "terms_label": "Terms and Conditions",
                "terms_message": "<div><p>Neque cupiditate rerum beatae dolor. Harum sunt ut necessitatibus voluptas veniam excepturi qui. Alias consequuntur voluptatem quo eum harum non. Consequatur voluptatem dolorem aspernatur.</p></div>",
                "is_active": true,
                "created_at": "2023-06-26T22:38:26.000000Z",
                "updated_at": "2023-06-26T22:38:26.000000Z"
            },
            "relationships": {},
            "meta": {},
            "links": {}
        },
        {
            "id": "158",
            "type": "slotTypes",
            "attributes": {
                "id": 158,
                "company_id": 1,
                "stripe_product_id": null,
                "name": "neque",
                "description_html": "<div><p>Quidem consectetur accusamus necessitatibus qui voluptas fugiat ratione. Et blanditiis tenetur non voluptatem aspernatur aut. Nobis voluptatem repellendus atque blanditiis rem.</p></div>",
                "duration_unit": "Minutes",
                "timezone": "Antarctica/Mawson",
                "default_duration": 40,
                "default_slot_count": 36,
                "default_require_payment": false,
                "default_price": 0,
                "default_time": "13:28",
                "allow_cancelling": false,
                "allow_rescheduling": true,
                "allow_add_remove_participants": true,
                "allow_edit_participants": true,
                "cancel_reschedule_duration": 30,
                "process_refunds": false,
                "participants_per_booking": 4,
                "disallow_multiple_instances_per_participant": true,
                "multiple_instances_disallowed_message": "Sed qui ut at aspernatur.",
                "participant_noun": "Participant",
                "require_terms_conditions": true,
                "terms_label": "Terms and Conditions",
                "terms_message": "<div><p>Nobis inventore doloribus et dolores. Qui ipsa est illum dolores ea placeat in. Nobis expedita nihil eos sint aperiam dicta nisi. Qui architecto architecto est reiciendis omnis.</p></div>",
                "is_active": true,
                "created_at": "2023-06-26T22:38:26.000000Z",
                "updated_at": "2023-06-26T22:38:26.000000Z"
            },
            "relationships": {},
            "meta": {},
            "links": {}
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1"
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 20,
        "to": 2,
        "total": 2
    },
    "included": [],
    "jsonapi": {
        "version": "1.0",
        "meta": {}
    }
}
 

Request   

GET api/v1/companies/{company_id}/slot-types

Headers

Authorization      

Example: Bearer 6aEvc6hfdbe3Z15kPD8a4Vg

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

company_id   integer   

The ID of the company. Example: 1

Query Parameters

page[number]   integer  optional  

Page number. Example: 1

page[limit]   integer  optional  

Number of results per page. Default: 20. Max: 100. Example: 20

Show

requires authentication

Example request:
curl --request GET \
    --get "https://slottable.app/api/v1/companies/1/slot-types/1" \
    --header "Authorization: Bearer 5cdbkae36aPhZ4g1vV8Df6E" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://slottable.app/api/v1/companies/1/slot-types/1',
    [
        'headers' => [
            'Authorization' => 'Bearer 5cdbkae36aPhZ4g1vV8Df6E',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://slottable.app/api/v1/companies/1/slot-types/1"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "159",
        "type": "slotTypes",
        "attributes": {
            "id": 159,
            "company_id": 1,
            "stripe_product_id": null,
            "name": "autem",
            "description_html": "<div><p>Sunt pariatur sit aspernatur rerum. Et quos iste aut numquam totam deleniti omnis. Corporis sint libero voluptatum commodi architecto non aut.</p></div>",
            "duration_unit": "Minutes",
            "timezone": "Europe/Vatican",
            "default_duration": 22,
            "default_slot_count": 25,
            "default_require_payment": true,
            "default_price": 2615,
            "default_time": "08:42",
            "allow_cancelling": true,
            "allow_rescheduling": false,
            "allow_add_remove_participants": true,
            "allow_edit_participants": false,
            "cancel_reschedule_duration": 150,
            "process_refunds": false,
            "participants_per_booking": 2,
            "disallow_multiple_instances_per_participant": true,
            "multiple_instances_disallowed_message": "Minus quas quae minima at nam.",
            "participant_noun": "Participant",
            "require_terms_conditions": true,
            "terms_label": "Terms and Conditions",
            "terms_message": "<div><p>Assumenda soluta alias et facere. Pariatur alias praesentium libero corporis eum ex exercitationem. Nulla assumenda distinctio et maxime quia adipisci sapiente. Vel omnis voluptatem quas aspernatur tempore. Doloribus repellat ut autem odio dolorem suscipit maiores. Est quia repellat omnis veritatis. Voluptas nulla sed sit quas.</p></div>",
            "is_active": true,
            "created_at": "2023-06-26T22:38:26.000000Z",
            "updated_at": "2023-06-26T22:38:26.000000Z"
        },
        "relationships": {},
        "meta": {},
        "links": {}
    },
    "included": [],
    "jsonapi": {
        "version": "1.0",
        "meta": {}
    }
}
 

Request   

GET api/v1/companies/{company_id}/slot-types/{id}

Headers

Authorization      

Example: Bearer 5cdbkae36aPhZ4g1vV8Df6E

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

company_id   integer   

The ID of the company. Example: 1

id   integer   

The ID of the slot type. Example: 1

Slot Type Instances

API for managing a Slot Type's Instances

List

requires authentication

Example request:
curl --request GET \
    --get "https://slottable.app/api/v1/companies/1/slot-types/1/slot-type-instances?page%5Bnumber%5D=1&page%5Blimit%5D=20" \
    --header "Authorization: Bearer dZDfE3Vhvea81b6Pg45ck6a" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://slottable.app/api/v1/companies/1/slot-types/1/slot-type-instances',
    [
        'headers' => [
            'Authorization' => 'Bearer dZDfE3Vhvea81b6Pg45ck6a',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'page[number]' => '1',
            'page[limit]' => '20',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://slottable.app/api/v1/companies/1/slot-types/1/slot-type-instances"
);

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

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "838",
            "type": "slotTypeInstances",
            "attributes": {
                "id": 838,
                "slot_type_id": 56,
                "token": "3tdmokTTqhRRqguaN5fq",
                "booking_page_id": null,
                "followup_process_id": null,
                "integration_setting_id": null,
                "location_id": null,
                "datetime": "2023-03-18T21:59:56.000000Z",
                "timezone": null,
                "duration": 7,
                "require_payment": false,
                "price": null,
                "instructions": "<div><p>Temporibus facilis suscipit facere ut sint quas aut. Ex rerum distinctio ea nulla dolore eveniet. Doloremque quo molestiae cum aut velit rerum.</p></div>",
                "total_slots": 95,
                "is_published": true,
                "created_at": "2023-06-26T22:38:26.000000Z",
                "updated_at": "2023-06-26T22:38:26.000000Z"
            },
            "relationships": {},
            "meta": {},
            "links": {}
        },
        {
            "id": "839",
            "type": "slotTypeInstances",
            "attributes": {
                "id": 839,
                "slot_type_id": 66,
                "token": "1AtdjguKjIeabPCiTDop",
                "booking_page_id": null,
                "followup_process_id": null,
                "integration_setting_id": null,
                "location_id": null,
                "datetime": "2023-03-09T00:00:00.000000Z",
                "timezone": null,
                "duration": 28,
                "require_payment": true,
                "price": 2440,
                "instructions": "<div><p>Qui eum sed quisquam qui alias. Quas doloribus veritatis quis soluta culpa. Quos fuga ullam debitis assumenda perferendis eum dicta.</p></div>",
                "total_slots": 37,
                "is_published": false,
                "created_at": "2023-06-26T22:38:26.000000Z",
                "updated_at": "2023-06-26T22:38:26.000000Z"
            },
            "relationships": {},
            "meta": {},
            "links": {}
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1"
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 20,
        "to": 2,
        "total": 2
    },
    "included": [],
    "jsonapi": {
        "version": "1.0",
        "meta": {}
    }
}
 

Request   

GET api/v1/companies/{company_id}/slot-types/{slot_type_id}/slot-type-instances

Headers

Authorization      

Example: Bearer dZDfE3Vhvea81b6Pg45ck6a

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

company_id   integer   

The ID of the company. Example: 1

slot_type_id   integer   

The ID of the slot type. Example: 1

Query Parameters

page[number]   integer  optional  

Page number. Example: 1

page[limit]   integer  optional  

Number of results per page. Default: 20. Max: 100. Example: 20

Show

requires authentication

Example request:
curl --request GET \
    --get "https://slottable.app/api/v1/companies/1/slot-types/1/slot-type-instances/1" \
    --header "Authorization: Bearer 41ea3avfEV8d5hPkDb6gZc6" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://slottable.app/api/v1/companies/1/slot-types/1/slot-type-instances/1',
    [
        'headers' => [
            'Authorization' => 'Bearer 41ea3avfEV8d5hPkDb6gZc6',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://slottable.app/api/v1/companies/1/slot-types/1/slot-type-instances/1"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": {
        "id": "840",
        "type": "slotTypeInstances",
        "attributes": {
            "id": 840,
            "slot_type_id": 18,
            "token": "MZhziVDrZyTwsOnjPEZk",
            "booking_page_id": null,
            "followup_process_id": null,
            "integration_setting_id": null,
            "location_id": null,
            "datetime": "2024-01-07T00:00:00.000000Z",
            "timezone": null,
            "duration": 18,
            "require_payment": true,
            "price": 9086,
            "instructions": "<div><p>Enim eum totam est vel explicabo voluptatem et architecto. Ut laudantium ut dolorem officiis voluptas culpa sint. Voluptatibus praesentium neque vitae voluptas.</p></div>",
            "total_slots": 96,
            "is_published": true,
            "created_at": "2023-06-26T22:38:26.000000Z",
            "updated_at": "2023-06-26T22:38:26.000000Z"
        },
        "relationships": {},
        "meta": {},
        "links": {}
    },
    "included": [],
    "jsonapi": {
        "version": "1.0",
        "meta": {}
    }
}
 

Request   

GET api/v1/companies/{company_id}/slot-types/{slot_type_id}/slot-type-instances/{id}

Headers

Authorization      

Example: Bearer 41ea3avfEV8d5hPkDb6gZc6

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

company_id   integer   

The ID of the company. Example: 1

slot_type_id   integer   

The ID of the slot type. Example: 1

id   integer   

The ID of the slot type instance. Example: 1

Slot Type Instance Roster

API for managing a Slot Type Instance's Roster

List

requires authentication

Example request:
curl --request GET \
    --get "https://slottable.app/api/v1/companies/1/slot-types/1/slot-type-instances/1/contacts?page%5Bnumber%5D=1&page%5Blimit%5D=20" \
    --header "Authorization: Bearer 3Da1haZ54Pg6bvekVfd68cE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://slottable.app/api/v1/companies/1/slot-types/1/slot-type-instances/1/contacts',
    [
        'headers' => [
            'Authorization' => 'Bearer 3Da1haZ54Pg6bvekVfd68cE',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'page[number]' => '1',
            'page[limit]' => '20',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://slottable.app/api/v1/companies/1/slot-types/1/slot-type-instances/1/contacts"
);

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

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "",
            "type": "bookingContact",
            "attributes": {
                "id": null,
                "booking_id": 791,
                "contact_id": 3611,
                "registered_at": "2023-06-26T22:38:26.000000Z",
                "current_stage": null,
                "entered_at": null,
                "contact": {
                    "id": 3611,
                    "company_id": 1,
                    "stripe_customer_id": null,
                    "first_name": "Tremaine",
                    "last_name": "Berge",
                    "email": "edmond83@wisoky.org",
                    "phone": "928.365.9311",
                    "street_address": "98449 Earl Roads Suite 208",
                    "street_address_2": null,
                    "city": "New Josefinamouth",
                    "state": "South Carolina",
                    "postal": "14428-3707",
                    "country": "USA",
                    "is_subscribed": false,
                    "created_at": "2023-06-26T22:38:26.000000Z",
                    "updated_at": "2023-06-26T22:38:26.000000Z"
                }
            },
            "relationships": {},
            "meta": {},
            "links": {}
        },
        {
            "id": "",
            "type": "bookingContact",
            "attributes": {
                "id": null,
                "booking_id": 792,
                "contact_id": 3612,
                "registered_at": "2023-06-26T22:38:26.000000Z",
                "current_stage": null,
                "entered_at": null,
                "contact": {
                    "id": 3612,
                    "company_id": 1,
                    "stripe_customer_id": null,
                    "first_name": "Alfreda",
                    "last_name": "D'Amore",
                    "email": "yolanda.ryan@corkery.com",
                    "phone": "+1-770-568-2177",
                    "street_address": "4559 Alanna Isle Apt. 161",
                    "street_address_2": null,
                    "city": "North Raoulborough",
                    "state": "Illinois",
                    "postal": "41627-3990",
                    "country": "USA",
                    "is_subscribed": true,
                    "created_at": "2023-06-26T22:38:26.000000Z",
                    "updated_at": "2023-06-26T22:38:26.000000Z"
                }
            },
            "relationships": {},
            "meta": {},
            "links": {}
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1"
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 20,
        "to": 2,
        "total": 2
    },
    "included": [],
    "jsonapi": {
        "version": "1.0",
        "meta": {}
    }
}
 

Request   

GET api/v1/companies/{company_id}/slot-types/{slot_type_id}/slot-type-instances/{slot_type_instance_id}/contacts

Headers

Authorization      

Example: Bearer 3Da1haZ54Pg6bvekVfd68cE

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

company_id   integer   

The ID of the company. Example: 1

slot_type_id   integer   

The ID of the slot type. Example: 1

slot_type_instance_id   integer   

The ID of the slot type instance. Example: 1

Query Parameters

page[number]   integer  optional  

Page number. Example: 1

page[limit]   integer  optional  

Number of results per page. Default: 20. Max: 100. Example: 20

Latest BookingContacts

requires authentication

Example request:
curl --request GET \
    --get "https://slottable.app/api/v1/companies/1/latest-booking-contacts" \
    --header "Authorization: Bearer faEcPbve418D6Z6a35dhkVg" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://slottable.app/api/v1/companies/1/latest-booking-contacts',
    [
        'headers' => [
            'Authorization' => 'Bearer faEcPbve418D6Z6a35dhkVg',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://slottable.app/api/v1/companies/1/latest-booking-contacts"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "",
            "type": "bookingContact",
            "attributes": {
                "id": null,
                "booking_id": 793,
                "contact_id": 3613,
                "registered_at": "2023-06-26T22:38:26.000000Z",
                "current_stage": null,
                "entered_at": null,
                "contact": {
                    "id": 3613,
                    "company_id": 1,
                    "stripe_customer_id": null,
                    "first_name": "Trinity",
                    "last_name": "Hahn",
                    "email": "cremin.stevie@gmail.com",
                    "phone": "+1.270.588.3718",
                    "street_address": "3960 Hailee Shoals Suite 295",
                    "street_address_2": null,
                    "city": "Lake Norenetown",
                    "state": "Hawaii",
                    "postal": "82690-5997",
                    "country": "USA",
                    "is_subscribed": false,
                    "created_at": "2023-06-26T22:38:26.000000Z",
                    "updated_at": "2023-06-26T22:38:26.000000Z"
                }
            },
            "relationships": {},
            "meta": {},
            "links": {}
        },
        {
            "id": "",
            "type": "bookingContact",
            "attributes": {
                "id": null,
                "booking_id": 794,
                "contact_id": 3614,
                "registered_at": "2023-06-26T22:38:26.000000Z",
                "current_stage": null,
                "entered_at": null,
                "contact": {
                    "id": 3614,
                    "company_id": 1,
                    "stripe_customer_id": null,
                    "first_name": "Matilda",
                    "last_name": "Mante",
                    "email": "feeney.riley@gmail.com",
                    "phone": "+1 (818) 396-2561",
                    "street_address": "794 O'Keefe Track",
                    "street_address_2": null,
                    "city": "South Bradytown",
                    "state": "Arkansas",
                    "postal": "46973-1714",
                    "country": "USA",
                    "is_subscribed": true,
                    "created_at": "2023-06-26T22:38:26.000000Z",
                    "updated_at": "2023-06-26T22:38:26.000000Z"
                }
            },
            "relationships": {},
            "meta": {},
            "links": {}
        }
    ],
    "included": [],
    "jsonapi": {
        "version": "1.0",
        "meta": {}
    }
}
 

Request   

GET api/v1/companies/{company_id}/latest-booking-contacts

Headers

Authorization      

Example: Bearer faEcPbve418D6Z6a35dhkVg

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

company_id   integer   

The ID of the company. Example: 1

Slot Type Instance Bookings

API for managing a Slot Type Instance's Bookings.

List

requires authentication

Example request:
curl --request GET \
    --get "https://slottable.app/api/v1/companies/1/slot-types/1/slot-type-instances/1/bookings?page%5Bnumber%5D=1&page%5Blimit%5D=20" \
    --header "Authorization: Bearer kbPv6cDE3aadegVfhZ15648" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://slottable.app/api/v1/companies/1/slot-types/1/slot-type-instances/1/bookings',
    [
        'headers' => [
            'Authorization' => 'Bearer kbPv6cDE3aadegVfhZ15648',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'page[number]' => '1',
            'page[limit]' => '20',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://slottable.app/api/v1/companies/1/slot-types/1/slot-type-instances/1/bookings"
);

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

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": "795",
            "type": "bookings",
            "attributes": {
                "id": 795,
                "slot_type_instance_id": 845,
                "listing_page_id": null,
                "token": "hyZf8B0Dki9Qq9hRfAuf",
                "canceled_at": null,
                "created_at": "2023-06-26T22:38:26.000000Z",
                "updated_at": "2023-06-26T22:38:26.000000Z"
            },
            "relationships": {},
            "meta": {},
            "links": {}
        },
        {
            "id": "796",
            "type": "bookings",
            "attributes": {
                "id": 796,
                "slot_type_instance_id": 846,
                "listing_page_id": null,
                "token": "j4E7wpKV3T1Ll3SEfgWx",
                "canceled_at": null,
                "created_at": "2023-06-26T22:38:26.000000Z",
                "updated_at": "2023-06-26T22:38:26.000000Z"
            },
            "relationships": {},
            "meta": {},
            "links": {}
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1"
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "active": false
            }
        ],
        "path": "/",
        "per_page": 20,
        "to": 2,
        "total": 2
    },
    "included": [],
    "jsonapi": {
        "version": "1.0",
        "meta": {}
    }
}
 

Request   

GET api/v1/companies/{company_id}/slot-types/{slot_type_id}/slot-type-instances/{slot_type_instance_id}/bookings

Headers

Authorization      

Example: Bearer kbPv6cDE3aadegVfhZ15648

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

company_id   integer   

The ID of the company. Example: 1

slot_type_id   integer   

The ID of the slot type. Example: 1

slot_type_instance_id   integer   

The ID of the slot type instance. Example: 1

Query Parameters

page[number]   integer  optional  

Page number. Example: 1

page[limit]   integer  optional  

Number of results per page. Default: 20. Max: 100. Example: 20