MENU navbar-image

Introduction

RESTful API for managing bookings, event types, clients, invoices, and more.

Welcome to the API documentation. This API allows you to programmatically manage your scheduling and booking operations.

## Authentication
All API requests require authentication using Bearer tokens. Include your API token in the Authorization header:
```
Authorization: Bearer YOUR_API_TOKEN
```

You can generate API tokens from your team settings in the application.

## Rate Limiting
API requests are rate limited to prevent abuse. Current limits apply per team.

<aside>As you scroll, you'll see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile).</aside>

Authenticating requests

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

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

You can generate API tokens from your team settings. Navigate to Settings → API Tokens and click Create API Token.

Authentication

Login

Authenticate with email and password to receive an API token.

Example request:
curl --request POST \
    "https://app.schedulingkit.com/api/v1/auth/login" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"[email protected]\",
    \"password\": \"password123\",
    \"device_name\": \"My App\"
}"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/auth/login"
);

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

let body = {
    "email": "[email protected]",
    "password": "password123",
    "device_name": "My App"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://app.schedulingkit.com/api/v1/auth/login';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'email' => '[email protected]',
            'password' => 'password123',
            'device_name' => 'My App',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.schedulingkit.com/api/v1/auth/login'
payload = {
    "email": "[email protected]",
    "password": "password123",
    "device_name": "My App"
}
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "token": "1|abc123...",
    "user": {
        "id": 1,
        "name": "Jane Smith",
        "email": "[email protected]",
        "phone": "+1234567890",
        "timezone": "America/New_York",
        "current_team": {
            "id": 1,
            "name": "My Business",
            "slug": "my-business"
        }
    }
}
 

Example response (422):


{
    "message": "The given data was invalid.",
    "errors": {
        "email": [
            "These credentials do not match our records."
        ]
    }
}
 

Request      

POST api/v1/auth/login

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

email   string     

The user's email address. Example: [email protected]

password   string     

The user's password. Example: password123

device_name   string     

A name for the device/application requesting the token. Example: My App

Get authenticated user

requires authentication

Retrieve the currently authenticated user's profile and team info.

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

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

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

url = 'https://app.schedulingkit.com/api/v1/auth/me'
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "user": {
        "id": 1,
        "name": "Jane Smith",
        "email": "[email protected]",
        "phone": "+1234567890",
        "timezone": "America/New_York",
        "current_team": {
            "id": 1,
            "name": "My Business",
            "slug": "my-business"
        }
    }
}
 

Request      

GET api/v1/auth/me

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Logout

requires authentication

Revoke the current API token.

Example request:
curl --request POST \
    "https://app.schedulingkit.com/api/v1/auth/logout" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/auth/logout"
);

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

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

url = 'https://app.schedulingkit.com/api/v1/auth/logout'
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "message": "Logged out successfully."
}
 

Request      

POST api/v1/auth/logout

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Team

Get current team details

requires authentication

Retrieve your current team including members, owner, and settings.

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

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

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

url = 'https://app.schedulingkit.com/api/v1/team'
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "data": {
        "id": 1,
        "name": "My Business",
        "slug": "my-business",
        "owner": {
            "id": 1,
            "name": "Jane Smith",
            "email": "[email protected]"
        },
        "users": []
    }
}
 

Request      

GET api/v1/team

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Update team details

requires authentication

Example request:
curl --request PUT \
    "https://app.schedulingkit.com/api/v1/team" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"My Business\"
}"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/team"
);

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

let body = {
    "name": "My Business"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://app.schedulingkit.com/api/v1/team';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_API_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'My Business',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.schedulingkit.com/api/v1/team'
payload = {
    "name": "My Business"
}
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "message": "Team updated successfully.",
    "data": {
        "id": 1,
        "name": "My Business",
        "slug": "my-business"
    }
}
 

Request      

PUT api/v1/team

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string  optional    

The team name. Example: My Business

Event Types

List team's event types

requires authentication

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

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

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

url = 'https://app.schedulingkit.com/api/v1/event-types'
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "data": [
        {
            "id": 1,
            "name": "30-min Consultation",
            "slug": "30-min-consultation",
            "duration": 30,
            "color": "#3B82F6",
            "is_active": true,
            "requires_payment": false
        }
    ]
}
 

Request      

GET api/v1/event-types

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Get a single event type

requires authentication

Example request:
curl --request GET \
    --get "https://app.schedulingkit.com/api/v1/event-types/1" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/event-types/1"
);

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

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

url = 'https://app.schedulingkit.com/api/v1/event-types/1'
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "data": {
        "id": 1,
        "name": "30-min Consultation",
        "slug": "30-min-consultation",
        "duration": 30,
        "color": "#3B82F6",
        "is_active": true,
        "location_type": "zoom",
        "requires_payment": false,
        "price": 0,
        "increment_minutes": 15
    }
}
 

Request      

GET api/v1/event-types/{id}

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the event type. Example: 1

Create a new event type

requires authentication

Example request:
curl --request POST \
    "https://app.schedulingkit.com/api/v1/event-types" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"30-min Consultation\",
    \"duration\": 30,
    \"color\": \"#3B82F6\",
    \"location_type\": \"zoom\",
    \"increment_minutes\": 15,
    \"requires_payment\": false,
    \"price\": 50,
    \"currency\": \"USD\",
    \"is_active\": true,
    \"description\": \"A quick consultation to discuss your needs\"
}"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/event-types"
);

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

let body = {
    "name": "30-min Consultation",
    "duration": 30,
    "color": "#3B82F6",
    "location_type": "zoom",
    "increment_minutes": 15,
    "requires_payment": false,
    "price": 50,
    "currency": "USD",
    "is_active": true,
    "description": "A quick consultation to discuss your needs"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://app.schedulingkit.com/api/v1/event-types';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_API_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => '30-min Consultation',
            'duration' => 30,
            'color' => '#3B82F6',
            'location_type' => 'zoom',
            'increment_minutes' => 15,
            'requires_payment' => false,
            'price' => 50.0,
            'currency' => 'USD',
            'is_active' => true,
            'description' => 'A quick consultation to discuss your needs',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.schedulingkit.com/api/v1/event-types'
payload = {
    "name": "30-min Consultation",
    "duration": 30,
    "color": "#3B82F6",
    "location_type": "zoom",
    "increment_minutes": 15,
    "requires_payment": false,
    "price": 50,
    "currency": "USD",
    "is_active": true,
    "description": "A quick consultation to discuss your needs"
}
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (201):


{
    "message": "Event type created successfully.",
    "data": {
        "id": 1,
        "name": "30-min Consultation",
        "duration": 30
    }
}
 

Request      

POST api/v1/event-types

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

The event type name. Example: 30-min Consultation

duration   integer     

Duration in minutes. Example: 30

color   string  optional    

The hex color code. Example: #3B82F6

location_type   string  optional    

The meeting location type (zoom, google_meet, teams, phone, in_person). Example: zoom

increment_minutes   integer  optional    

Scheduling increment in minutes. Example: 15

requires_payment   boolean  optional    

Whether payment is required. Example: false

price   number  optional    

The price if payment is required. Example: 50

currency   string  optional    

The currency code. Example: USD

is_active   boolean  optional    

Whether the event type is active. Example: true

description   string  optional    

A description of the event type. Example: A quick consultation to discuss your needs

Update an event type

requires authentication

Example request:
curl --request PUT \
    "https://app.schedulingkit.com/api/v1/event-types/1" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"30-min Consultation\",
    \"duration\": 30,
    \"color\": \"#3B82F6\",
    \"location_type\": \"zoom\",
    \"increment_minutes\": 15,
    \"requires_payment\": false,
    \"price\": 50,
    \"is_active\": true,
    \"description\": \"A quick consultation to discuss your needs\"
}"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/event-types/1"
);

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

let body = {
    "name": "30-min Consultation",
    "duration": 30,
    "color": "#3B82F6",
    "location_type": "zoom",
    "increment_minutes": 15,
    "requires_payment": false,
    "price": 50,
    "is_active": true,
    "description": "A quick consultation to discuss your needs"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://app.schedulingkit.com/api/v1/event-types/1';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_API_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => '30-min Consultation',
            'duration' => 30,
            'color' => '#3B82F6',
            'location_type' => 'zoom',
            'increment_minutes' => 15,
            'requires_payment' => false,
            'price' => 50.0,
            'is_active' => true,
            'description' => 'A quick consultation to discuss your needs',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.schedulingkit.com/api/v1/event-types/1'
payload = {
    "name": "30-min Consultation",
    "duration": 30,
    "color": "#3B82F6",
    "location_type": "zoom",
    "increment_minutes": 15,
    "requires_payment": false,
    "price": 50,
    "is_active": true,
    "description": "A quick consultation to discuss your needs"
}
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "message": "Event type updated successfully.",
    "data": {
        "id": 1,
        "name": "30-min Consultation",
        "duration": 30
    }
}
 

Request      

PUT api/v1/event-types/{id}

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the event type. Example: 1

Body Parameters

name   string  optional    

The event type name. Example: 30-min Consultation

duration   integer  optional    

Duration in minutes. Example: 30

color   string  optional    

The hex color code. Example: #3B82F6

location_type   string  optional    

The meeting location type (zoom, google_meet, teams, phone, in_person). Example: zoom

increment_minutes   integer  optional    

Scheduling increment in minutes. Example: 15

requires_payment   boolean  optional    

Whether payment is required. Example: false

price   number  optional    

The price if payment is required. Example: 50

is_active   boolean  optional    

Whether the event type is active. Example: true

description   string  optional    

A description of the event type. Example: A quick consultation to discuss your needs

Delete an event type

requires authentication

Example request:
curl --request DELETE \
    "https://app.schedulingkit.com/api/v1/event-types/1" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/event-types/1"
);

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

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

url = 'https://app.schedulingkit.com/api/v1/event-types/1'
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "message": "Event type deleted successfully."
}
 

Request      

DELETE api/v1/event-types/{id}

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the event type. Example: 1

Events

List all events

requires authentication

Get a paginated list of all events (bookings) for your team.

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

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

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

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

url = 'https://app.schedulingkit.com/api/v1/events'
params = {
  'page': '1',
  'per_page': '50',
}
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "data": [
        {
            "id": 1,
            "event_type_id": 5,
            "customer_id": 10,
            "date": "2026-02-15",
            "start_time": "2026-02-15T14:00:00Z",
            "end_time": "2026-02-15T15:00:00Z",
            "status": "scheduled",
            "invitee_name": "John Doe",
            "invitee_email": "[email protected]",
            "event_type": {
                "id": 5,
                "name": "Consultation",
                "duration": 60
            }
        }
    ],
    "meta": {
        "current_page": 1,
        "total": 150,
        "per_page": 50
    }
}
 

Request      

GET api/v1/events

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

Page number for pagination. Example: 1

per_page   integer  optional    

Number of items per page. Example: 50

Get a single event

requires authentication

Retrieve detailed information about a specific event including related data like customer, location, extras, and recurring occurrences.

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

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

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

url = 'https://app.schedulingkit.com/api/v1/events/1'
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "data": {
        "id": 1,
        "event_type_id": 5,
        "customer_id": 10,
        "date": "2026-02-15",
        "start_time": "2026-02-15T14:00:00Z",
        "end_time": "2026-02-15T15:00:00Z",
        "status": "scheduled",
        "invitee_name": "John Doe",
        "invitee_email": "[email protected]",
        "invitee_phone": "+1234567890",
        "notes": "Please bring ID",
        "is_recurring": true,
        "recurrence_frequency": "weekly",
        "event_type": {
            "id": 5,
            "name": "Consultation",
            "duration": 60
        },
        "customer": {
            "id": 10,
            "name": "John Doe",
            "email": "[email protected]"
        },
        "location": {
            "id": 2,
            "name": "Main Office"
        },
        "extras": [],
        "occurrences": []
    }
}
 

Example response (404):


{
    "message": "Event not found"
}
 

Request      

GET api/v1/events/{id}

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the event. Example: 1

Create a new event

requires authentication

Create a new booking/event. Supports both one-time and recurring events. If the event type requires payment, include payment details.

Example request:
curl --request POST \
    "https://app.schedulingkit.com/api/v1/events" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"event_type_id\": 5,
    \"start_time\": \"2026-02-15T14:00:00Z\",
    \"end_time\": \"2026-02-15T15:00:00Z\",
    \"invitee_name\": \"John Doe\",
    \"invitee_email\": \"[email protected]\",
    \"invitee_phone\": \"+1234567890\",
    \"notes\": \"Please bring ID\",
    \"invitee_timezone\": \"America\\/New_York\",
    \"location_id\": 2,
    \"staff_id\": 3,
    \"meeting_type\": \"zoom\",
    \"extras\": [
        1,
        2
    ],
    \"coupon_code\": \"SAVE20\",
    \"answers\": {
        \"1\": \"Answer to question 1\"
    },
    \"is_recurring\": true,
    \"recurrence_frequency\": \"weekly\",
    \"recurrence_days\": [
        1,
        3,
        5
    ],
    \"recurrence_count\": 10,
    \"recurrence_end_date\": \"2026-06-15\",
    \"recurring_payment_mode\": \"first_only\",
    \"payment_provider\": \"stripe\",
    \"payment_token\": \"tok_visa\"
}"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/events"
);

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

let body = {
    "event_type_id": 5,
    "start_time": "2026-02-15T14:00:00Z",
    "end_time": "2026-02-15T15:00:00Z",
    "invitee_name": "John Doe",
    "invitee_email": "[email protected]",
    "invitee_phone": "+1234567890",
    "notes": "Please bring ID",
    "invitee_timezone": "America\/New_York",
    "location_id": 2,
    "staff_id": 3,
    "meeting_type": "zoom",
    "extras": [
        1,
        2
    ],
    "coupon_code": "SAVE20",
    "answers": {
        "1": "Answer to question 1"
    },
    "is_recurring": true,
    "recurrence_frequency": "weekly",
    "recurrence_days": [
        1,
        3,
        5
    ],
    "recurrence_count": 10,
    "recurrence_end_date": "2026-06-15",
    "recurring_payment_mode": "first_only",
    "payment_provider": "stripe",
    "payment_token": "tok_visa"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://app.schedulingkit.com/api/v1/events';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_API_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'event_type_id' => 5,
            'start_time' => '2026-02-15T14:00:00Z',
            'end_time' => '2026-02-15T15:00:00Z',
            'invitee_name' => 'John Doe',
            'invitee_email' => '[email protected]',
            'invitee_phone' => '+1234567890',
            'notes' => 'Please bring ID',
            'invitee_timezone' => 'America/New_York',
            'location_id' => 2,
            'staff_id' => 3,
            'meeting_type' => 'zoom',
            'extras' => [
                1,
                2,
            ],
            'coupon_code' => 'SAVE20',
            'answers' => [
                1 => 'Answer to question 1',
            ],
            'is_recurring' => true,
            'recurrence_frequency' => 'weekly',
            'recurrence_days' => [
                1,
                3,
                5,
            ],
            'recurrence_count' => 10,
            'recurrence_end_date' => '2026-06-15',
            'recurring_payment_mode' => 'first_only',
            'payment_provider' => 'stripe',
            'payment_token' => 'tok_visa',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.schedulingkit.com/api/v1/events'
payload = {
    "event_type_id": 5,
    "start_time": "2026-02-15T14:00:00Z",
    "end_time": "2026-02-15T15:00:00Z",
    "invitee_name": "John Doe",
    "invitee_email": "[email protected]",
    "invitee_phone": "+1234567890",
    "notes": "Please bring ID",
    "invitee_timezone": "America\/New_York",
    "location_id": 2,
    "staff_id": 3,
    "meeting_type": "zoom",
    "extras": [
        1,
        2
    ],
    "coupon_code": "SAVE20",
    "answers": {
        "1": "Answer to question 1"
    },
    "is_recurring": true,
    "recurrence_frequency": "weekly",
    "recurrence_days": [
        1,
        3,
        5
    ],
    "recurrence_count": 10,
    "recurrence_end_date": "2026-06-15",
    "recurring_payment_mode": "first_only",
    "payment_provider": "stripe",
    "payment_token": "tok_visa"
}
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (201):


{
    "message": "Booking scheduled successfully",
    "data": {
        "id": 1,
        "event_type_id": 5,
        "start_time": "2026-02-15T14:00:00Z",
        "end_time": "2026-02-15T15:00:00Z",
        "status": "scheduled",
        "invitee_name": "John Doe",
        "invitee_email": "[email protected]"
    }
}
 

Example response (422):


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

Request      

POST api/v1/events

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

event_type_id   integer     

The ID of the event type to book. Example: 5

start_time   string     

The start time in ISO 8601 format. Example: 2026-02-15T14:00:00Z

end_time   string     

The end time in ISO 8601 format. Example: 2026-02-15T15:00:00Z

invitee_name   string     

The name of the person booking. Example: John Doe

invitee_email   string     

The email of the person booking. Example: [email protected]

invitee_phone   string  optional    

The phone number of the person booking. Example: +1234567890

notes   string  optional    

Additional notes or comments. Example: Please bring ID

invitee_timezone   string  optional    

The timezone of the invitee. Example: America/New_York

location_id   integer  optional    

The ID of the location. Example: 2

staff_id   integer  optional    

The ID of the staff member. Example: 3

meeting_type   string  optional    

The type of meeting. Example: zoom

extras   string[]  optional    

Array of extra service IDs.

coupon_code   string  optional    

Coupon code for discount. Example: SAVE20

answers   object  optional    

Answers to custom questions.

is_recurring   boolean  optional    

Whether this is a recurring event. Example: true

recurrence_frequency   string  optional    

Required if is_recurring is true. One of: daily, weekly, biweekly, monthly. Example: weekly

recurrence_days   string[]  optional    

Array of weekday numbers (0=Sunday, 6=Saturday).

recurrence_count   integer  optional    

Number of occurrences. Example: 10

recurrence_end_date   string  optional    

End date for recurrence. Example: 2026-06-15

recurring_payment_mode   string  optional    

Payment mode for recurring: first_only or all. Example: first_only

payment_provider   string  optional    

Required if payment needed. One of: stripe, paypal. Example: stripe

payment_token   string  optional    

Required if payment needed. Payment token from provider. Example: tok_visa

Update an event

requires authentication

Example request:
curl --request PUT \
    "https://app.schedulingkit.com/api/v1/events/1" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/events/1"
);

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

fetch(url, {
    method: "PUT",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://app.schedulingkit.com/api/v1/events/1';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_API_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.schedulingkit.com/api/v1/events/1'
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Request      

PUT api/v1/events/{id}

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the event. Example: 1

Cancel an event

requires authentication

Cancel a scheduled event. This will update the status to cancelled and send notifications.

Example request:
curl --request DELETE \
    "https://app.schedulingkit.com/api/v1/events/1" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"reason\": \"Schedule conflict\"
}"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/events/1"
);

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

let body = {
    "reason": "Schedule conflict"
};

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

url = 'https://app.schedulingkit.com/api/v1/events/1'
payload = {
    "reason": "Schedule conflict"
}
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "message": "Event cancelled successfully",
    "data": {
        "id": 1,
        "status": "cancelled",
        "cancellation_reason": "Schedule conflict"
    }
}
 

Example response (404):


{
    "message": "Event not found"
}
 

Example response (422):


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

Request      

DELETE api/v1/events/{id}

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the event. Example: 1

Body Parameters

reason   string  optional    

Optional cancellation reason. Example: Schedule conflict

Get recurring event occurrences

requires authentication

Retrieve all occurrences in a recurring event series. Only works for parent events in a recurring series.

Example request:
curl --request GET \
    --get "https://app.schedulingkit.com/api/v1/events/1/occurrences" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/events/1/occurrences"
);

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

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

url = 'https://app.schedulingkit.com/api/v1/events/1/occurrences'
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "data": [
        {
            "id": 2,
            "date": "2026-02-15",
            "start_time": "2026-02-15T14:00:00Z",
            "end_time": "2026-02-15T15:00:00Z",
            "status": "scheduled"
        },
        {
            "id": 3,
            "date": "2026-02-22",
            "start_time": "2026-02-22T14:00:00Z",
            "end_time": "2026-02-22T15:00:00Z",
            "status": "scheduled"
        }
    ],
    "meta": {
        "total_count": 10,
        "frequency": "weekly"
    }
}
 

Example response (422):


{
    "message": "This event is not a recurring series parent"
}
 

Request      

GET api/v1/events/{id}/occurrences

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the event. Example: 1

Clients

List team's clients

requires authentication

Get a paginated list of all clients for your team.

Example request:
curl --request GET \
    --get "https://app.schedulingkit.com/api/v1/clients?page=1" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/clients"
);

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

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

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

url = 'https://app.schedulingkit.com/api/v1/clients'
params = {
  'page': '1',
}
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "data": [
        {
            "id": 1,
            "name": "John Doe",
            "email": "[email protected]",
            "phone": "+1234567890"
        }
    ],
    "meta": {
        "current_page": 1,
        "total": 25,
        "per_page": 50
    }
}
 

Request      

GET api/v1/clients

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

Page number for pagination. Example: 1

Get a single client

requires authentication

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

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

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

url = 'https://app.schedulingkit.com/api/v1/clients/1'
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "data": {
        "id": 1,
        "name": "John Doe",
        "email": "[email protected]",
        "phone": "+1234567890",
        "notes": "VIP customer"
    }
}
 

Request      

GET api/v1/clients/{id}

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the client. Example: 1

Create a new client

requires authentication

Example request:
curl --request POST \
    "https://app.schedulingkit.com/api/v1/clients" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"John Doe\",
    \"email\": \"[email protected]\",
    \"phone\": \"+1234567890\",
    \"notes\": \"VIP customer\",
    \"is_active\": true
}"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/clients"
);

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

let body = {
    "name": "John Doe",
    "email": "[email protected]",
    "phone": "+1234567890",
    "notes": "VIP customer",
    "is_active": true
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://app.schedulingkit.com/api/v1/clients';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_API_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'John Doe',
            'email' => '[email protected]',
            'phone' => '+1234567890',
            'notes' => 'VIP customer',
            'is_active' => true,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.schedulingkit.com/api/v1/clients'
payload = {
    "name": "John Doe",
    "email": "[email protected]",
    "phone": "+1234567890",
    "notes": "VIP customer",
    "is_active": true
}
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (201):


{
    "message": "Client created successfully.",
    "data": {
        "id": 1,
        "name": "John Doe",
        "email": "[email protected]",
        "phone": "+1234567890"
    }
}
 

Example response (422):


{
    "message": "Error",
    "errors": {
        "email": [
            "The email has already been taken."
        ]
    }
}
 

Request      

POST api/v1/clients

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

The client's full name. Example: John Doe

email   string     

The client's email address. Example: [email protected]

phone   string  optional    

The client's phone number. Example: +1234567890

notes   string  optional    

Any notes about the client. Example: VIP customer

is_active   boolean  optional    

Whether the client is active. Example: true

Update a client

requires authentication

Example request:
curl --request PUT \
    "https://app.schedulingkit.com/api/v1/clients/1" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"John Doe\",
    \"email\": \"[email protected]\",
    \"phone\": \"+1234567890\",
    \"notes\": \"VIP customer\",
    \"is_active\": true
}"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/clients/1"
);

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

let body = {
    "name": "John Doe",
    "email": "[email protected]",
    "phone": "+1234567890",
    "notes": "VIP customer",
    "is_active": true
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://app.schedulingkit.com/api/v1/clients/1';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_API_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'John Doe',
            'email' => '[email protected]',
            'phone' => '+1234567890',
            'notes' => 'VIP customer',
            'is_active' => true,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.schedulingkit.com/api/v1/clients/1'
payload = {
    "name": "John Doe",
    "email": "[email protected]",
    "phone": "+1234567890",
    "notes": "VIP customer",
    "is_active": true
}
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "message": "Client updated successfully.",
    "data": {
        "id": 1,
        "name": "John Doe",
        "email": "[email protected]"
    }
}
 

Request      

PUT api/v1/clients/{id}

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the client. Example: 1

Body Parameters

name   string  optional    

The client's full name. Example: John Doe

email   string  optional    

The client's email address. Example: [email protected]

phone   string  optional    

The client's phone number. Example: +1234567890

notes   string  optional    

Any notes about the client. Example: VIP customer

is_active   boolean  optional    

Whether the client is active. Example: true

Delete a client

requires authentication

Example request:
curl --request DELETE \
    "https://app.schedulingkit.com/api/v1/clients/1" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/clients/1"
);

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

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

url = 'https://app.schedulingkit.com/api/v1/clients/1'
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "message": "Client deleted successfully."
}
 

Request      

DELETE api/v1/clients/{id}

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the client. Example: 1

Locations

List team's locations

requires authentication

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

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

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

url = 'https://app.schedulingkit.com/api/v1/locations'
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "data": [
        {
            "id": 1,
            "name": "Main Office",
            "address": "123 Main St",
            "city": "New York",
            "state": "NY",
            "country": "US",
            "is_active": true
        }
    ]
}
 

Request      

GET api/v1/locations

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Get a single location

requires authentication

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

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

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

url = 'https://app.schedulingkit.com/api/v1/locations/1'
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "data": {
        "id": 1,
        "name": "Main Office",
        "address": "123 Main St",
        "city": "New York",
        "state": "NY",
        "country": "US",
        "phone": "+1234567890",
        "is_active": true
    }
}
 

Request      

GET api/v1/locations/{id}

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the location. Example: 1

Create a new location

requires authentication

Example request:
curl --request POST \
    "https://app.schedulingkit.com/api/v1/locations" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Main Office\",
    \"address\": \"123 Main St\",
    \"city\": \"New York\",
    \"state\": \"NY\",
    \"zip\": \"10001\",
    \"country\": \"US\",
    \"phone\": \"+1234567890\",
    \"is_active\": true
}"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/locations"
);

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

let body = {
    "name": "Main Office",
    "address": "123 Main St",
    "city": "New York",
    "state": "NY",
    "zip": "10001",
    "country": "US",
    "phone": "+1234567890",
    "is_active": true
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://app.schedulingkit.com/api/v1/locations';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_API_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'Main Office',
            'address' => '123 Main St',
            'city' => 'New York',
            'state' => 'NY',
            'zip' => '10001',
            'country' => 'US',
            'phone' => '+1234567890',
            'is_active' => true,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.schedulingkit.com/api/v1/locations'
payload = {
    "name": "Main Office",
    "address": "123 Main St",
    "city": "New York",
    "state": "NY",
    "zip": "10001",
    "country": "US",
    "phone": "+1234567890",
    "is_active": true
}
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (201):


{
    "message": "Location created successfully.",
    "data": {
        "id": 1,
        "name": "Main Office",
        "address": "123 Main St",
        "city": "New York"
    }
}
 

Request      

POST api/v1/locations

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

The location name. Example: Main Office

address   string  optional    

The street address. Example: 123 Main St

city   string  optional    

The city. Example: New York

state   string  optional    

The state or province. Example: NY

zip   string  optional    

The postal/zip code. Example: 10001

country   string  optional    

The country. Example: US

phone   string  optional    

The location phone number. Example: +1234567890

is_active   boolean  optional    

Whether the location is active. Example: true

Update a location

requires authentication

Example request:
curl --request PUT \
    "https://app.schedulingkit.com/api/v1/locations/1" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Main Office\",
    \"address\": \"123 Main St\",
    \"city\": \"New York\",
    \"state\": \"NY\",
    \"zip\": \"10001\",
    \"country\": \"US\",
    \"phone\": \"+1234567890\",
    \"is_active\": true
}"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/locations/1"
);

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

let body = {
    "name": "Main Office",
    "address": "123 Main St",
    "city": "New York",
    "state": "NY",
    "zip": "10001",
    "country": "US",
    "phone": "+1234567890",
    "is_active": true
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://app.schedulingkit.com/api/v1/locations/1';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_API_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'Main Office',
            'address' => '123 Main St',
            'city' => 'New York',
            'state' => 'NY',
            'zip' => '10001',
            'country' => 'US',
            'phone' => '+1234567890',
            'is_active' => true,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.schedulingkit.com/api/v1/locations/1'
payload = {
    "name": "Main Office",
    "address": "123 Main St",
    "city": "New York",
    "state": "NY",
    "zip": "10001",
    "country": "US",
    "phone": "+1234567890",
    "is_active": true
}
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "message": "Location updated successfully.",
    "data": {
        "id": 1,
        "name": "Main Office",
        "address": "123 Main St"
    }
}
 

Request      

PUT api/v1/locations/{id}

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the location. Example: 1

Body Parameters

name   string  optional    

The location name. Example: Main Office

address   string  optional    

The street address. Example: 123 Main St

city   string  optional    

The city. Example: New York

state   string  optional    

The state or province. Example: NY

zip   string  optional    

The postal/zip code. Example: 10001

country   string  optional    

The country. Example: US

phone   string  optional    

The location phone number. Example: +1234567890

is_active   boolean  optional    

Whether the location is active. Example: true

Delete a location

requires authentication

Example request:
curl --request DELETE \
    "https://app.schedulingkit.com/api/v1/locations/1" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/locations/1"
);

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

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

url = 'https://app.schedulingkit.com/api/v1/locations/1'
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "message": "Location deleted successfully."
}
 

Request      

DELETE api/v1/locations/{id}

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the location. Example: 1

Workflows

List team's workflows

requires authentication

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

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

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

url = 'https://app.schedulingkit.com/api/v1/workflows'
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "data": [
        {
            "id": 1,
            "name": "Follow-up Email",
            "trigger_type": "after_event",
            "is_active": true
        }
    ]
}
 

Request      

GET api/v1/workflows

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Get a single workflow

requires authentication

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

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

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

url = 'https://app.schedulingkit.com/api/v1/workflows/1'
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "data": {
        "id": 1,
        "name": "Follow-up Email",
        "trigger_type": "after_event",
        "trigger_time": 60,
        "is_active": true,
        "actions": []
    }
}
 

Request      

GET api/v1/workflows/{id}

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the workflow. Example: 1

Create a new workflow

requires authentication

Example request:
curl --request POST \
    "https://app.schedulingkit.com/api/v1/workflows" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Follow-up Email\",
    \"event_type_id\": 5,
    \"trigger_type\": \"after_event\",
    \"trigger_time\": 60,
    \"is_active\": true,
    \"actions\": [
        \"architecto\"
    ]
}"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/workflows"
);

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

let body = {
    "name": "Follow-up Email",
    "event_type_id": 5,
    "trigger_type": "after_event",
    "trigger_time": 60,
    "is_active": true,
    "actions": [
        "architecto"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://app.schedulingkit.com/api/v1/workflows';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_API_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'Follow-up Email',
            'event_type_id' => 5,
            'trigger_type' => 'after_event',
            'trigger_time' => 60,
            'is_active' => true,
            'actions' => [
                'architecto',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.schedulingkit.com/api/v1/workflows'
payload = {
    "name": "Follow-up Email",
    "event_type_id": 5,
    "trigger_type": "after_event",
    "trigger_time": 60,
    "is_active": true,
    "actions": [
        "architecto"
    ]
}
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (201):


{
    "message": "Workflow created successfully.",
    "data": {
        "id": 1,
        "name": "Follow-up Email",
        "trigger_type": "after_event"
    }
}
 

Request      

POST api/v1/workflows

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

The workflow name. Example: Follow-up Email

event_type_id   integer  optional    

The event type this workflow applies to. Example: 5

trigger_type   string     

The trigger type (before_event, after_event, on_booking, on_cancellation). Example: after_event

trigger_time   integer  optional    

Time in minutes relative to the trigger. Example: 60

is_active   boolean  optional    

Whether the workflow is active. Example: true

actions   string[]  optional    

The workflow actions.

type   string  optional    

The action type (send_email, send_sms, webhook). Example: send_email

config   object  optional    

The action configuration.

Update a workflow

requires authentication

Example request:
curl --request PUT \
    "https://app.schedulingkit.com/api/v1/workflows/1" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Follow-up Email\",
    \"event_type_id\": 5,
    \"trigger_type\": \"after_event\",
    \"trigger_time\": 60,
    \"is_active\": true,
    \"actions\": [
        \"architecto\"
    ]
}"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/workflows/1"
);

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

let body = {
    "name": "Follow-up Email",
    "event_type_id": 5,
    "trigger_type": "after_event",
    "trigger_time": 60,
    "is_active": true,
    "actions": [
        "architecto"
    ]
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://app.schedulingkit.com/api/v1/workflows/1';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_API_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'Follow-up Email',
            'event_type_id' => 5,
            'trigger_type' => 'after_event',
            'trigger_time' => 60,
            'is_active' => true,
            'actions' => [
                'architecto',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.schedulingkit.com/api/v1/workflows/1'
payload = {
    "name": "Follow-up Email",
    "event_type_id": 5,
    "trigger_type": "after_event",
    "trigger_time": 60,
    "is_active": true,
    "actions": [
        "architecto"
    ]
}
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "message": "Workflow updated successfully.",
    "data": {
        "id": 1,
        "name": "Follow-up Email",
        "trigger_type": "after_event"
    }
}
 

Request      

PUT api/v1/workflows/{id}

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the workflow. Example: 1

Body Parameters

name   string  optional    

The workflow name. Example: Follow-up Email

event_type_id   integer  optional    

The event type this workflow applies to. Example: 5

trigger_type   string  optional    

The trigger type (before_event, after_event, on_booking, on_cancellation). Example: after_event

trigger_time   integer  optional    

Time in minutes relative to the trigger. Example: 60

is_active   boolean  optional    

Whether the workflow is active. Example: true

actions   string[]  optional    

The workflow actions.

Delete a workflow

requires authentication

Example request:
curl --request DELETE \
    "https://app.schedulingkit.com/api/v1/workflows/1" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/workflows/1"
);

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

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

url = 'https://app.schedulingkit.com/api/v1/workflows/1'
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "message": "Workflow deleted successfully."
}
 

Request      

DELETE api/v1/workflows/{id}

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the workflow. Example: 1

Finance

List team's invoices

requires authentication

Get a paginated list of all invoices for your team.

Example request:
curl --request GET \
    --get "https://app.schedulingkit.com/api/v1/invoices?page=1" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/invoices"
);

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

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

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

url = 'https://app.schedulingkit.com/api/v1/invoices'
params = {
  'page': '1',
}
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "data": [
        {
            "id": 1,
            "invoice_number": "INV-0001",
            "customer_name": "John Doe",
            "customer_email": "[email protected]",
            "total": 150,
            "status": "paid",
            "invoice_date": "2026-03-01",
            "due_date": "2026-03-15"
        }
    ],
    "meta": {
        "current_page": 1,
        "total": 25,
        "per_page": 50
    }
}
 

Request      

GET api/v1/invoices

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

Page number for pagination. Example: 1

Get a single invoice

requires authentication

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

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

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

url = 'https://app.schedulingkit.com/api/v1/invoices/1'
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "data": {
        "id": 1,
        "invoice_number": "INV-0001",
        "customer_name": "John Doe",
        "customer_email": "[email protected]",
        "total": 150,
        "status": "paid",
        "invoice_date": "2026-03-01",
        "due_date": "2026-03-15",
        "items": []
    }
}
 

Request      

GET api/v1/invoices/{id}

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the invoice. Example: 1

Create a new invoice

requires authentication

Example request:
curl --request POST \
    "https://app.schedulingkit.com/api/v1/invoices" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"customer_name\": \"John Doe\",
    \"customer_email\": \"[email protected]\",
    \"invoice_date\": \"2026-03-01\",
    \"due_date\": \"2026-03-15\",
    \"currency\": \"USD\",
    \"items\": [
        \"architecto\"
    ],
    \"tax_rate\": 8.5,
    \"discount_amount\": 0,
    \"notes\": \"Thank you for your business\"
}"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/invoices"
);

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

let body = {
    "customer_name": "John Doe",
    "customer_email": "[email protected]",
    "invoice_date": "2026-03-01",
    "due_date": "2026-03-15",
    "currency": "USD",
    "items": [
        "architecto"
    ],
    "tax_rate": 8.5,
    "discount_amount": 0,
    "notes": "Thank you for your business"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://app.schedulingkit.com/api/v1/invoices';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_API_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'customer_name' => 'John Doe',
            'customer_email' => '[email protected]',
            'invoice_date' => '2026-03-01',
            'due_date' => '2026-03-15',
            'currency' => 'USD',
            'items' => [
                'architecto',
            ],
            'tax_rate' => 8.5,
            'discount_amount' => 0.0,
            'notes' => 'Thank you for your business',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.schedulingkit.com/api/v1/invoices'
payload = {
    "customer_name": "John Doe",
    "customer_email": "[email protected]",
    "invoice_date": "2026-03-01",
    "due_date": "2026-03-15",
    "currency": "USD",
    "items": [
        "architecto"
    ],
    "tax_rate": 8.5,
    "discount_amount": 0,
    "notes": "Thank you for your business"
}
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (201):


{
    "message": "Invoice created successfully.",
    "data": {
        "id": 1,
        "invoice_number": "INV-0001",
        "total": 150,
        "status": "draft"
    }
}
 

Request      

POST api/v1/invoices

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

customer_name   string     

The customer's name. Example: John Doe

customer_email   string     

The customer's email. Example: [email protected]

invoice_date   string     

The invoice date (YYYY-MM-DD). Example: 2026-03-01

due_date   string     

The due date (YYYY-MM-DD). Example: 2026-03-15

currency   string  optional    

The currency code. Example: USD

items   string[]     

The invoice line items.

description   string     

The item description. Example: Consultation - 1 hour

quantity   integer     

The quantity. Example: 1

unit_price   number     

The unit price. Example: 150

tax_rate   number  optional    

The tax rate percentage. Example: 8.5

discount_amount   number  optional    

The discount amount. Example: 0

notes   string  optional    

Any notes for the invoice. Example: Thank you for your business

Update an invoice

requires authentication

Example request:
curl --request PUT \
    "https://app.schedulingkit.com/api/v1/invoices/1" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"customer_name\": \"John Doe\",
    \"customer_email\": \"[email protected]\",
    \"due_date\": \"2026-03-15\",
    \"items\": [
        \"architecto\"
    ],
    \"tax_rate\": 15,
    \"discount_amount\": 76,
    \"notes\": \"Thank you for your business\"
}"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/invoices/1"
);

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

let body = {
    "customer_name": "John Doe",
    "customer_email": "[email protected]",
    "due_date": "2026-03-15",
    "items": [
        "architecto"
    ],
    "tax_rate": 15,
    "discount_amount": 76,
    "notes": "Thank you for your business"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://app.schedulingkit.com/api/v1/invoices/1';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_API_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'customer_name' => 'John Doe',
            'customer_email' => '[email protected]',
            'due_date' => '2026-03-15',
            'items' => [
                'architecto',
            ],
            'tax_rate' => 15,
            'discount_amount' => 76,
            'notes' => 'Thank you for your business',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.schedulingkit.com/api/v1/invoices/1'
payload = {
    "customer_name": "John Doe",
    "customer_email": "[email protected]",
    "due_date": "2026-03-15",
    "items": [
        "architecto"
    ],
    "tax_rate": 15,
    "discount_amount": 76,
    "notes": "Thank you for your business"
}
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "message": "Invoice updated successfully.",
    "data": {
        "id": 1,
        "invoice_number": "INV-0001",
        "total": 150
    }
}
 

Request      

PUT api/v1/invoices/{id}

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the invoice. Example: 1

Body Parameters

customer_name   string  optional    

The customer's name. Example: John Doe

customer_email   string  optional    

The customer's email. Example: [email protected]

due_date   string  optional    

The due date (YYYY-MM-DD). Example: 2026-03-15

items   string[]  optional    

The invoice line items.

description   string  optional    

The item description. Example: Consultation - 1 hour

quantity   integer  optional    

The quantity. Example: 1

unit_price   number  optional    

The unit price. Example: 150

tax_rate   number  optional    

Must be at least 0. Must not be greater than 100. Example: 15

discount_amount   number  optional    

Must be at least 0. Example: 76

notes   string  optional    

Any notes for the invoice. Example: Thank you for your business

Delete an invoice

requires authentication

Example request:
curl --request DELETE \
    "https://app.schedulingkit.com/api/v1/invoices/1" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/invoices/1"
);

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

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

url = 'https://app.schedulingkit.com/api/v1/invoices/1'
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "message": "Invoice deleted successfully."
}
 

Request      

DELETE api/v1/invoices/{id}

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the invoice. Example: 1

List team's transactions

requires authentication

Get a paginated list of all payment transactions for your team.

Example request:
curl --request GET \
    --get "https://app.schedulingkit.com/api/v1/transactions?page=1&status=completed&type=payment&provider=stripe&date_from=2026-01-01&date_to=2026-03-31&search=john" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/transactions"
);

const params = {
    "page": "1",
    "status": "completed",
    "type": "payment",
    "provider": "stripe",
    "date_from": "2026-01-01",
    "date_to": "2026-03-31",
    "search": "john",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://app.schedulingkit.com/api/v1/transactions';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_API_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'page' => '1',
            'status' => 'completed',
            'type' => 'payment',
            'provider' => 'stripe',
            'date_from' => '2026-01-01',
            'date_to' => '2026-03-31',
            'search' => 'john',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.schedulingkit.com/api/v1/transactions'
params = {
  'page': '1',
  'status': 'completed',
  'type': 'payment',
  'provider': 'stripe',
  'date_from': '2026-01-01',
  'date_to': '2026-03-31',
  'search': 'john',
}
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "data": [
        {
            "id": 1,
            "amount": 150,
            "currency": "USD",
            "status": "completed",
            "provider": "stripe",
            "created_at": "2026-03-01T12:00:00Z"
        }
    ],
    "meta": {
        "current_page": 1,
        "total": 50,
        "per_page": 50
    }
}
 

Request      

GET api/v1/transactions

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

Page number for pagination. Example: 1

status   string  optional    

Filter by status (completed, pending, failed, refunded). Example: completed

type   string  optional    

Filter by type. Example: payment

provider   string  optional    

Filter by payment provider (stripe, paypal). Example: stripe

date_from   string  optional    

Filter from date (YYYY-MM-DD). Example: 2026-01-01

date_to   string  optional    

Filter to date (YYYY-MM-DD). Example: 2026-03-31

search   string  optional    

Search by customer name or email. Example: john

Get a single transaction

requires authentication

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

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

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

url = 'https://app.schedulingkit.com/api/v1/transactions/1'
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "data": {
        "id": 1,
        "amount": 150,
        "currency": "USD",
        "status": "completed",
        "provider": "stripe",
        "provider_transaction_id": "pi_abc123",
        "created_at": "2026-03-01T12:00:00Z"
    }
}
 

Request      

GET api/v1/transactions/{id}

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the transaction. Example: 1

List team's taxes

requires authentication

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

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

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

url = 'https://app.schedulingkit.com/api/v1/taxes'
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "data": [
        {
            "id": 1,
            "name": "Sales Tax",
            "rate": 8.5,
            "is_active": true
        }
    ]
}
 

Request      

GET api/v1/taxes

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Get a single tax

requires authentication

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

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

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

url = 'https://app.schedulingkit.com/api/v1/taxes/1'
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "data": {
        "id": 1,
        "name": "Sales Tax",
        "rate": 8.5,
        "is_active": true
    }
}
 

Request      

GET api/v1/taxes/{id}

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the tax. Example: 1

Create a new tax

requires authentication

Example request:
curl --request POST \
    "https://app.schedulingkit.com/api/v1/taxes" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Sales Tax\",
    \"rate\": 8.5,
    \"is_active\": true
}"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/taxes"
);

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

let body = {
    "name": "Sales Tax",
    "rate": 8.5,
    "is_active": true
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://app.schedulingkit.com/api/v1/taxes';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_API_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'Sales Tax',
            'rate' => 8.5,
            'is_active' => true,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.schedulingkit.com/api/v1/taxes'
payload = {
    "name": "Sales Tax",
    "rate": 8.5,
    "is_active": true
}
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (201):


{
    "message": "Tax created successfully.",
    "data": {
        "id": 1,
        "name": "Sales Tax",
        "rate": 8.5,
        "is_active": true
    }
}
 

Request      

POST api/v1/taxes

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

The tax name. Example: Sales Tax

rate   number     

The tax rate percentage (0-100). Example: 8.5

is_active   boolean  optional    

Whether the tax is active. Example: true

Update a tax

requires authentication

Example request:
curl --request PUT \
    "https://app.schedulingkit.com/api/v1/taxes/1" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Sales Tax\",
    \"rate\": 8.5,
    \"is_active\": true
}"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/taxes/1"
);

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

let body = {
    "name": "Sales Tax",
    "rate": 8.5,
    "is_active": true
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://app.schedulingkit.com/api/v1/taxes/1';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_API_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'name' => 'Sales Tax',
            'rate' => 8.5,
            'is_active' => true,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.schedulingkit.com/api/v1/taxes/1'
payload = {
    "name": "Sales Tax",
    "rate": 8.5,
    "is_active": true
}
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "message": "Tax updated successfully.",
    "data": {
        "id": 1,
        "name": "Sales Tax",
        "rate": 8.5,
        "is_active": true
    }
}
 

Request      

PUT api/v1/taxes/{id}

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the tax. Example: 1

Body Parameters

name   string  optional    

The tax name. Example: Sales Tax

rate   number  optional    

The tax rate percentage (0-100). Example: 8.5

is_active   boolean  optional    

Whether the tax is active. Example: true

Delete a tax

requires authentication

Example request:
curl --request DELETE \
    "https://app.schedulingkit.com/api/v1/taxes/1" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/taxes/1"
);

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

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

url = 'https://app.schedulingkit.com/api/v1/taxes/1'
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Example response (200):


{
    "message": "Tax deleted successfully."
}
 

Request      

DELETE api/v1/taxes/{id}

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the tax. Example: 1

Other

Register a device push token.

requires authentication

Stores or updates the Expo push token for the authenticated user. If the token already exists for another user, it will be reassigned.

Example request:
curl --request POST \
    "https://app.schedulingkit.com/api/v1/auth/device-token" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"token\": \"b\",
    \"platform\": \"fcm\",
    \"device_name\": \"n\"
}"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/auth/device-token"
);

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

let body = {
    "token": "b",
    "platform": "fcm",
    "device_name": "n"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://app.schedulingkit.com/api/v1/auth/device-token';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_API_TOKEN}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'token' => 'b',
            'platform' => 'fcm',
            'device_name' => 'n',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://app.schedulingkit.com/api/v1/auth/device-token'
payload = {
    "token": "b",
    "platform": "fcm",
    "device_name": "n"
}
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Request      

POST api/v1/auth/device-token

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

token   string     

Must not be greater than 255 characters. Example: b

platform   string  optional    

Example: fcm

Must be one of:
  • expo
  • fcm
  • apns
device_name   string  optional    

Must not be greater than 255 characters. Example: n

Remove a device push token.

requires authentication

Deactivates the push token (used on logout).

Example request:
curl --request DELETE \
    "https://app.schedulingkit.com/api/v1/auth/device-token" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"token\": \"architecto\"
}"
const url = new URL(
    "https://app.schedulingkit.com/api/v1/auth/device-token"
);

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

let body = {
    "token": "architecto"
};

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

url = 'https://app.schedulingkit.com/api/v1/auth/device-token'
payload = {
    "token": "architecto"
}
headers = {
  'Authorization': 'Bearer {YOUR_API_TOKEN}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

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

Request      

DELETE api/v1/auth/device-token

Headers

Authorization        

Example: Bearer {YOUR_API_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

token   string     

Example: architecto