Search by

jeffersongoncalves / laravel-savvycal

jeffersongoncalves

A lightweight SavvyCal REST API client for Laravel.

Package info

github.com/jeffersongoncalves/laravel-savvycal

pkg:composer/jeffersongoncalves/laravel-savvycal

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 0

1.0.0 2026-09-08 00:49 UTC

This package is auto-updated.

Last update: 2026-09-08 00:52:29 UTC


README

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.