Looking to hire Laravel developers? Try LaraJobs

laravel-savvycal maintained by jeffersongoncalves

Description
A lightweight SavvyCal REST API client for Laravel.
Last update
2026/09/08 02:50 (dev-main)
License
Downloads
1

Comments
comments powered by Disqus

Laravel SavvyCal

Laravel SavvyCal

Tests PHPStan Code Style Latest Version on Packagist Total Downloads License

A lightweight SavvyCal REST API client for Laravel. It wraps the api.savvycal.com v1 endpoints behind a small static client, threads your API key, and defensively returns null (rather than throwing) on network failures or non-2xx responses.

Features

  • Usersme() fetches the authenticated user
  • Scheduling linkslinks(), link(), createLink(), updateLink(), deleteLink(), duplicateLink(), toggleLink(), linkSlots()
  • Eventsevents(), event(), createEvent(), cancelEvent()
  • Webhookswebhooks(), createWebhook(), deleteWebhook()

Installation

composer require jeffersongoncalves/laravel-savvycal

Optionally publish the config file:

php artisan vendor:publish --tag="laravel-savvycal-config"

Configuration

Add to your .env:

SAVVYCAL_API_KEY=sk_live_...

Create an API key from your SavvyCal developer settings.

Config Options

// config/savvycal.php
return [
    'token' => env('SAVVYCAL_API_KEY'),
    'timeout' => (int) env('SAVVYCAL_TIMEOUT', 8),
];

When savvycal.token is null the client falls back to config('services.savvycal.token').

Usage

use JeffersonGoncalves\SavvyCal\SavvyCalClient;

// Users
$me = SavvyCalClient::me();

// Scheduling links
$links = SavvyCalClient::links(['limit' => 50]);
$link = SavvyCalClient::link('link_00000000');
$created = SavvyCalClient::createLink('Intro call', slug: 'intro', durationMinutes: 30);
SavvyCalClient::updateLink('link_00000000', ['name' => 'Discovery call']);
SavvyCalClient::duplicateLink('link_00000000');
SavvyCalClient::toggleLink('link_00000000');
SavvyCalClient::deleteLink('link_00000000');

// Availability
$slots = SavvyCalClient::linkSlots(
    id: 'link_00000000',
    startTime: '2026-09-06T00:00:00Z',
    endTime: '2026-09-13T00:00:00Z',
);

// Events
$events = SavvyCalClient::events(['limit' => 20]);
$event = SavvyCalClient::event('event_00000000');
SavvyCalClient::createEvent(
    schedulingLinkId: 'link_00000000',
    startAt: '2026-09-08T14:00:00Z',
    name: 'Jane Doe',
    email: 'jane@example.com',
);
SavvyCalClient::cancelEvent('event_00000000');

// Webhooks
$webhooks = SavvyCalClient::webhooks();
SavvyCalClient::createWebhook('https://example.com/webhooks/savvycal', ['event.created', 'event.canceled']);
SavvyCalClient::deleteWebhook('hook_00000000');

All methods return array<string, mixed>|null (or bool for deleteLink() and deleteWebhook()), returning null/false on any network failure or non-2xx response instead of throwing. Null arguments are stripped from the payload before it is sent, so optional fields are simply omitted.

Testing

composer test

Static Analysis

composer analyse

Code Formatting

composer format

Changelog

Please see CHANGELOG for more information on what has changed recently.

License

The MIT License (MIT). Please see License File for more information.