DocsREST API

REST API Reference

The GetTalk API lets you programmatically manage bookings, availability, and event types. Available on Pro plans.

Base URL

bash
https://gettalk.co/api/v1

Authentication

All API requests require an API key passed in the Authorization header. Create API keys in your dashboard.

bash
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.

StatusDescription
200Success
201Created
400Bad request - Invalid parameters
401Unauthorized - Invalid or missing API key
403Forbidden - Insufficient permissions
404Not found
500Internal server error
json
{
  "error": "Booking not found"
}

Pagination

List endpoints return paginated results. Use limit and offset parameters.

json
{
  "data": [...],
  "pagination": {
    "total": 150,
    "limit": 50,
    "offset": 0,
    "hasMore": true
  }
}

Bookings

GET/api/v1/bookings

Returns a list of bookings for the authenticated user.

Query Parameters

ParameterTypeDescription
statusstringFilter by status: PENDING, CONFIRMED, CANCELLED, COMPLETED, NO_SHOW
fromdatetimeFilter bookings starting from this date
todatetimeFilter bookings ending before this date
limitintegerMax results (default: 50, max: 100)
offsetintegerOffset for pagination (default: 0)
bash
curl -X GET "https://gettalk.co/api/v1/bookings?status=confirmed&limit=10" \
  -H "Authorization: Bearer gtk_your_api_key"
POST/api/v1/bookings

Creates a new booking.

Request Body

json
{
  "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"
}
GET/api/v1/bookings/:id

Retrieves a single booking by ID.

bash
curl -X GET "https://gettalk.co/api/v1/bookings/cuid123" \
  -H "Authorization: Bearer gtk_your_api_key"
PATCH/api/v1/bookings/:id

Updates a booking. Can change status, reschedule, or update meeting details.

Request Body

json
{
  "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"
}
DELETE/api/v1/bookings/:id

Cancels a booking. Sets status to CANCELLED.

bash
curl -X DELETE "https://gettalk.co/api/v1/bookings/cuid123" \
  -H "Authorization: Bearer gtk_your_api_key"

Availability

GET/api/v1/availability

Returns available time slots for booking.

Query Parameters

ParameterTypeDescription
date *stringStart date in YYYY-MM-DD format
eventTypeIdstringFilter by specific event type
timezonestringTimezone for slots (default: UTC)
daysintegerNumber of days to return (default: 7, max: 30)
bash
curl -X GET "https://gettalk.co/api/v1/availability?date=2026-01-15&days=7" \
  -H "Authorization: Bearer gtk_your_api_key"

Response

json
{
  "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

GET/api/v1/event-types

Returns a list of event types.

Query Parameters

ParameterTypeDescription
activebooleanFilter by active status
limitintegerMax results (default: 50, max: 100)
offsetintegerOffset for pagination
bash
curl -X GET "https://gettalk.co/api/v1/event-types?active=true" \
  -H "Authorization: Bearer gtk_your_api_key"
POST/api/v1/event-types

Creates a new event type.

Request Body

json
{
  "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
}
GET/api/v1/event-types/:id

Retrieves a single event type.

bash
curl -X GET "https://gettalk.co/api/v1/event-types/cuid123" \
  -H "Authorization: Bearer gtk_your_api_key"
PATCH/api/v1/event-types/:id

Updates an event type.

json
{
  "name": "Quick Chat",
  "duration": 15,
  "isActive": true
}
DELETE/api/v1/event-types/:id

Deletes an event type. If bookings exist, it will be deactivated instead.

bash
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

javascript
// 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

python
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

go
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
}