REST API Reference
The GetTalk API lets you programmatically manage bookings, availability, and event types. Available on Pro plans.
Base URL
https://gettalk.co/api/v1Authentication
All API requests require an API key passed in the Authorization header. Create API keys in your dashboard.
curl -X GET "https://gettalk.co/api/v1/bookings" \
-H "Authorization: Bearer gtk_your_api_key_here"Security: Keep your API keys secure. Never expose them in client-side code. Rotate keys if they are compromised.
Error Handling
The API uses standard HTTP status codes and returns JSON error responses.
| Status | Description |
|---|---|
200 | Success |
201 | Created |
400 | Bad request - Invalid parameters |
401 | Unauthorized - Invalid or missing API key |
403 | Forbidden - Insufficient permissions |
404 | Not found |
500 | Internal server error |
{
"error": "Booking not found"
}Pagination
List endpoints return paginated results. Use limit and offset parameters.
{
"data": [...],
"pagination": {
"total": 150,
"limit": 50,
"offset": 0,
"hasMore": true
}
}Bookings
/api/v1/bookingsReturns a list of bookings for the authenticated user.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
status | string | Filter by status: PENDING, CONFIRMED, CANCELLED, COMPLETED, NO_SHOW |
from | datetime | Filter bookings starting from this date |
to | datetime | Filter bookings ending before this date |
limit | integer | Max results (default: 50, max: 100) |
offset | integer | Offset for pagination (default: 0) |
curl -X GET "https://gettalk.co/api/v1/bookings?status=confirmed&limit=10" \
-H "Authorization: Bearer gtk_your_api_key"/api/v1/bookingsCreates a new booking.
Request Body
{
"eventTypeId": "cuid_optional",
"startTime": "2026-01-15T10:00:00Z",
"endTime": "2026-01-15T10:30:00Z",
"timezone": "Europe/Oslo",
"attendeeName": "John Doe",
"attendeeEmail": "[email protected]",
"attendeePhone": "+1234567890",
"attendeeCompany": "Acme Inc",
"attendeeNotes": "Looking forward to the call",
"meetingType": "video",
"meetingLocation": "https://meet.google.com/xxx"
}/api/v1/bookings/:idRetrieves a single booking by ID.
curl -X GET "https://gettalk.co/api/v1/bookings/cuid123" \
-H "Authorization: Bearer gtk_your_api_key"/api/v1/bookings/:idUpdates a booking. Can change status, reschedule, or update meeting details.
Request Body
{
"status": "CONFIRMED",
"startTime": "2026-01-16T14:00:00Z",
"endTime": "2026-01-16T14:30:00Z",
"meetingLink": "https://zoom.us/j/xxx",
"internalNotes": "Customer is a VIP"
}/api/v1/bookings/:idCancels a booking. Sets status to CANCELLED.
curl -X DELETE "https://gettalk.co/api/v1/bookings/cuid123" \
-H "Authorization: Bearer gtk_your_api_key"Availability
/api/v1/availabilityReturns available time slots for booking.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
date * | string | Start date in YYYY-MM-DD format |
eventTypeId | string | Filter by specific event type |
timezone | string | Timezone for slots (default: UTC) |
days | integer | Number of days to return (default: 7, max: 30) |
curl -X GET "https://gettalk.co/api/v1/availability?date=2026-01-15&days=7" \
-H "Authorization: Bearer gtk_your_api_key"Response
{
"data": {
"timezone": "UTC",
"duration": 30,
"eventType": null,
"availability": [
{
"date": "2026-01-15",
"slots": [
{ "start": "2026-01-15T09:00:00Z", "end": "2026-01-15T09:30:00Z" },
{ "start": "2026-01-15T09:30:00Z", "end": "2026-01-15T10:00:00Z" },
{ "start": "2026-01-15T10:00:00Z", "end": "2026-01-15T10:30:00Z" }
]
}
]
}
}Event Types
/api/v1/event-typesReturns a list of event types.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
active | boolean | Filter by active status |
limit | integer | Max results (default: 50, max: 100) |
offset | integer | Offset for pagination |
curl -X GET "https://gettalk.co/api/v1/event-types?active=true" \
-H "Authorization: Bearer gtk_your_api_key"/api/v1/event-typesCreates a new event type.
Request Body
{
"name": "30 Minute Meeting",
"slug": "30-min-meeting",
"description": "A quick sync to discuss your needs",
"duration": 30,
"color": "#f59e0b",
"meetingType": "video",
"meetingLocation": "Google Meet",
"bufferBefore": 5,
"bufferAfter": 5,
"minNoticeMinutes": 60,
"maxDaysInAdvance": 60,
"isActive": true,
"isDefault": false
}/api/v1/event-types/:idRetrieves a single event type.
curl -X GET "https://gettalk.co/api/v1/event-types/cuid123" \
-H "Authorization: Bearer gtk_your_api_key"/api/v1/event-types/:idUpdates an event type.
{
"name": "Quick Chat",
"duration": 15,
"isActive": true
}/api/v1/event-types/:idDeletes an event type. If bookings exist, it will be deactivated instead.
curl -X DELETE "https://gettalk.co/api/v1/event-types/cuid123" \
-H "Authorization: Bearer gtk_your_api_key"SDK Examples
Use these code examples to integrate GetTalk into your application.
JavaScriptNode.js / Browser
// GetTalk API Client
const GETTALK_API_KEY = process.env.GETTALK_API_KEY
async function getBookings(options = {}) {
const params = new URLSearchParams(options)
const res = await fetch(`https://gettalk.co/api/v1/bookings?${params}`, {
headers: { 'Authorization': `Bearer ${GETTALK_API_KEY}` }
})
return res.json()
}
async function createBooking(data) {
const res = await fetch('https://gettalk.co/api/v1/bookings', {
method: 'POST',
headers: {
'Authorization': `Bearer ${GETTALK_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
})
return res.json()
}
// Usage
const bookings = await getBookings({ status: 'confirmed', limit: 10 })Pythonrequests
import os
import requests
GETTALK_API_KEY = os.environ.get('GETTALK_API_KEY')
BASE_URL = 'https://gettalk.co/api/v1'
headers = {'Authorization': f'Bearer {GETTALK_API_KEY}'}
def get_bookings(**params):
response = requests.get(f'{BASE_URL}/bookings', headers=headers, params=params)
return response.json()
def create_booking(data):
response = requests.post(f'{BASE_URL}/bookings', headers=headers, json=data)
return response.json()
# Usage
bookings = get_bookings(status='confirmed', limit=10)
print(f"Found {len(bookings['data'])} bookings")Gonet/http
package main
import (
"encoding/json"
"fmt"
"net/http"
"os"
)
var apiKey = os.Getenv("GETTALK_API_KEY")
const baseURL = "https://gettalk.co/api/v1"
func getBookings() (map[string]interface{}, error) {
req, _ := http.NewRequest("GET", baseURL+"/bookings?status=confirmed", nil)
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
return result, nil
}