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."
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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": []
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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."
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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()Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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."
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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]"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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": []
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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": []
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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()Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
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()Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.