cronofy / cronofy
SDK for Cronofy - the Scheduling Platform for Business
Installs: 634 498
Dependents: 0
Suggesters: 0
Security: 0
Stars: 21
Watchers: 8
Forks: 30
Open Issues: 4
Requires
- php: >=7.1
Requires (Dev)
- dev-master
- v1.x-dev
- v1.7.2
- v1.7.1
- v1.6.0
- v1.5.3
- v1.5.2
- v1.5.1
- v1.5.0
- v1.4.0
- v1.3.0
- v1.2.0
- v1.1.10
- v1.1.9
- v1.1.8
- v1.1.7
- v1.1.6
- v1.1.5
- v1.1.4
- v1.1.3
- v1.1.2
- v1.1.1
- v1.1.0
- v1.0.0
- v0.29.0
- v0.28.0
- v0.27.0
- v0.26.0
- v0.25.2
- v0.25.1
- v0.25.0
- v0.24.0
- v0.23.0
- v0.22.0
- v0.21.0
- v0.20.0
- v0.19.0
- v0.18.0
- v0.17.7
- v0.17.6
- v0.17.5
- v0.17.4
- v0.17.3
- v0.17.2
- v0.17.1
- v0.17.0
- v0.16.0
- v0.15.0
- v0.14.0
- v0.13.5
- v0.13.4
- v0.13.3
- v0.13.2
- v0.12.0
- dev-phpdoc
- dev-move-doc-comments
- dev-bulk-delete-events
- dev-112-hmac-binary
- dev-event-classes
- dev-update-php-8.1
- dev-add-event-classes-support
- dev-readme-update
- dev-add-disable-rts-endpoint
- dev-add-locale-to-upsert-event
- dev-update-packaged-description
- dev-add-rts-fields
- dev-add-init
- dev-update-to-v1.5.0
- dev-hmac-validation
- dev-github-actions-migration
- dev-GitHub
- dev-add-recurrence-hash
- dev-available-periods
- dev-update-to-1.2.0
- dev-add-smoke-test-script
- dev-http-429
- dev-new-features-readme
- dev-add-conference-service-auth
- dev-add-color-to-event-upsert
- dev-boolean-url-encode
- dev-auth-provider-name
- dev-conferencing
- dev-madewithlove-madewithlove-add-delegated-authorizations
- dev-madewithlove-add-list-accessible-calendars
- dev-rules
- dev-application-calendars
- dev-private-events
- dev-send-gzip-accept-header
- dev-smart-invite-cancel
- dev-real-time-scheduling
- dev-add-expiry-to-token
- dev-attendees-support
- dev-event-transparency
- dev-availability-api
- dev-change-participation-status
- dev-update-with-alpha-feathres
- dev-paged-iterator-error-handling
- dev-include-status-codes-in-main-file
- dev-paged-result-iterators
- dev-elevated-permissions
This package is auto-updated.
Last update: 2025-03-30 14:24:25 UTC
README
Cronofy - one API for all the calendars (Google, iCloud, Exchange, Office 365, Outlook.com)
Sample Application
To see this API wrapper in action see our sample app here
Usage
Note: if upgrading from a v0.x.x version to v1.0.0, please read the migration guide
In order to use the Cronofy API you will need to create a developer account.
From there you can use your Calendar Sandbox
to access your own calendars, or you can create an OAuth application
to obtain an OAuth client_id
and client_secret
to be able to use the full
API.
Authorization
Generate a link for a user to grant access to their calendars:
$redirect_uri = "http://yoursite.dev/oauth2/callback"; $cronofy = new Cronofy\Cronofy(["client_id" => "CRONOFY_CLIENT_ID"]); $params = [ 'redirect_uri' => $redirect_uri, 'scope' => ['read_account','list_calendars','read_events','create_event','delete_event'] ]; $auth = $cronofy->getAuthorizationURL($params);
The redirect URI is a page on your website that will handle the OAuth 2.0
callback and receive a code
parameter. You can then use that code to retrieve
an OAuth token granting access to the user's Cronofy account:
$cronofy = new Cronofy\Cronofy([ "client_id" => "CRONOFY_CLIENT_ID", "client_secret" => "CRONOFY_CLIENT_SECRET" ]); $params = [ 'redirect_uri' => $redirect_uri, 'code' => $code ]; $result = $cronofy->requestToken($params); // Retrieve credentials value $accessToken = $cronofy->accessToken; $refreshToken = $cronofy->refreshToken; $expiresIn = $cronofy->expiresIn;
You should save the response's AccessToken
and RefreshToken
for later use.
Note that the exact same redirect URI must be passed to both methods for access to be granted.
$result
will be true
for a successful request; otherwise, it will be an error code.
Please reference our documentation for possible error code.
Refresh Access Token
Refresh an access token for an account:
$cronofy = new Cronofy\Cronofy([ "client_id" => "CRONOFY_CLIENT_ID", "client_secret" => "CRONOFY_CLIENT_SECRET", "grant_type" => "refresh_token", "refresh_token" => "YOUR_REFRESH_TOKEN" ]); $new_access_token = $cronofy->refreshToken();
List calendars
Get a list of all the user's calendars:
$cronofy = new Cronofy\Cronofy([ "client_id" => "CRONOFY_CLIENT_ID", "client_secret" => "CRONOFY_CLIENT_SECRET", "access_token" => "AccessToken", "refresh_token" => "RefreshToken" ]); $calendar = $cronofy->listCalendars();
Read events
Get a list of all the user's events:
$cronofy = new Cronofy\Cronofy([ "client_id" => "CRONOFY_CLIENT_ID", "client_secret" => "CRONOFY_CLIENT_SECRET", "access_token" => "AccessToken", "refresh_token" => "RefreshToken" ]); $params = [ 'tzid' => 'Etc/UTC' ]; $events = $cronofy->readEvents($params); foreach($events->each() as $event){ // process event }
Create or update events
To create or update an event in the user's calendar:
$cronofy = new Cronofy\Cronofy([ "client_id" => "CRONOFY_CLIENT_ID", "client_secret" => "CRONOFY_CLIENT_SECRET", "access_token" => "AccessToken", "refresh_token" => "RefreshToken" ]); $params = [ 'calendar_id' => 'CalendarID', 'event_id' => 'event_test_12345679', 'summary' => 'test event 2', 'description' => 'some event data here', 'start' => '2015-12-07T09:00:00Z', 'end' => '2015-12-08T10:00:00Z' ]; $new_event = $cronofy->upsertEvent($params);
Delete events
To delete an event from user's calendar:
$cronofy = new Cronofy\Cronofy([ "client_id" => "CRONOFY_CLIENT_ID", "client_secret" => "CRONOFY_CLIENT_SECRET", "access_token" => "AccessToken", "refresh_token" => "RefreshToken" ]); $params = [ 'calendar_id' => 'CalendarID', 'event_id' => 'EventID' ]; $delete = $cronofy->deleteEvent($params);
Delete external events
To delete an external event from a user's calendar:
$cronofy = new Cronofy\Cronofy([ "client_id" => "CRONOFY_CLIENT_ID", "client_secret" => "CRONOFY_CLIENT_SECRET", "access_token" => "AccessToken", "refresh_token" => "RefreshToken" ]); $params = [ 'calendar_id' => 'CalendarID', 'event_uid' => 'EventUID' ]; $delete = $cronofy->deleteExternalEvent($params);
Elevated permissions
To elevate a client's permissions for a user's calendar(s):
$cronofy = new Cronofy\Cronofy([ "client_id" => "CRONOFY_CLIENT_ID", "client_secret" => "CRONOFY_CLIENT_SECRET", "access_token" => "AccessToken", "refresh_token" => "RefreshToken" ]); $params = [ 'permissions' => [ [ 'calendar_id' => 'CalendarID_1', 'permission_level' => 'unrestricted' ], [ 'calendar_id' => 'CalendarID_2', 'permission_level' => 'unrestricted' ] ], 'redirect_uri' => 'http://yoursite.dev/elevate/callback' ]; $response = $cronofy->elevatedPermissions($params);
Authorize with a Service Account
To authorize a user's account using a service account:
$cronofy = new Cronofy\Cronofy([ "client_id" => "CRONOFY_CLIENT_ID", "client_secret" => "CRONOFY_CLIENT_SECRET", "access_token" => "AccessToken", "refresh_token" => "RefreshToken" ]); $params = [ 'email' => $email, 'callback_url' => $callback_url, 'scope' => ['read_account','list_calendars','read_events','create_event','delete_event'] ]; $response = $cronofy->authorizeWithServiceAccount($params);
Note: You will need to use a Service Account access token to perform this action.
Create a Calendar
To create a calendar for a user's account profile:
$cronofy = new Cronofy\Cronofy([ "client_id" => "CRONOFY_CLIENT_ID", "client_secret" => "CRONOFY_CLIENT_SECRET", "access_token" => "AccessToken", "refresh_token" => "RefreshToken" ]); $params = [ 'profile_id' => $account_profile_id, 'name' => $new_calendar_name ]; $response = $cronofy->createCalendar($params);
Using an Alternative Data Center
To use an alternative data center:
$cronofy = new Cronofy\Cronofy([ "client_id" => "CRONOFY_CLIENT_ID", "client_secret" => "CRONOFY_CLIENT_SECRET", "access_token" => "AccessToken", "refresh_token" => "RefreshToken", "data_center" => "DataCenter" ]);
List Availability Rules
To retrieve all availability rules saved against an account:
$cronofy = new Cronofy\Cronofy([ "client_id" => "CRONOFY_CLIENT_ID", "client_secret" => "CRONOFY_CLIENT_SECRET", "access_token" => "AccessToken", "refresh_token" => "RefreshToken" ]); $response = $cronofy->listAvailabilityRules();
Read Availability Rule
To retrieve an availability rule:
$cronofy = new Cronofy\Cronofy([ "client_id" => "CRONOFY_CLIENT_ID", "client_secret" => "CRONOFY_CLIENT_SECRET", "access_token" => "AccessToken", "refresh_token" => "RefreshToken" ]); // The String that uniquely identifies the availability rule. $rule_id = "default"; $response = $cronofy->getAvailabilityRule($rule_id);
Delete Availability Rule
To delete an availability rule for the authenticated account:
$cronofy = new Cronofy\Cronofy([ "client_id" => "CRONOFY_CLIENT_ID", "client_secret" => "CRONOFY_CLIENT_SECRET", "access_token" => "AccessToken", "refresh_token" => "RefreshToken" ]); // The String that uniquely identifies the availability rule. $rule_id = "default"; $response = $cronofy->deleteAvailabilityRule($rule_id);
Create or Update Availability Rule
To create or update an availability rule for the authenticated account:
$cronofy = new Cronofy\Cronofy([ "client_id" => "CRONOFY_CLIENT_ID", "client_secret" => "CRONOFY_CLIENT_SECRET", "access_token" => "AccessToken", "refresh_token" => "RefreshToken" ]); // The details of the event to create or update: $params = [ "availability_rule_id" => "default", "calendar_ids" => ["cal_123"], "tzid" => "America/Chicago", "weekly_periods" => [ [ "day" => "monday", "start_time" => "09:30", "end_time" => "12:30" ], [ "day" => "wednesday", "start_time" => "09:30", "end_time" => "12:30" ] ] ]; $response = $cronofy->createAvailabilityRule($params);
Make a Batch request
Send multiple requests as a batch of operations via the [Batch][(https://docs.cronofy.com/developers/api/batch/) endpoint.
$cronofy = new Cronofy\Cronofy([ "client_id" => "CRONOFY_CLIENT_ID", "client_secret" => "CRONOFY_CLIENT_SECRET", "access_token" => "AccessToken", "refresh_token" => "RefreshToken" ]); $eventData = [ 'calendar_id' => 'CalendarID', 'event_id' => 'myapp-event-001', 'summary' => 'Wyld Stallyns band practice', 'start' => date("Y-m-d", strtotime('tomorrow')) . "T15:30:00Z", 'end' => date("Y-m-d", strtotime('tomorrow')) . "T17:00:00Z", ]; $batch = Batch::create() ->upsertEvent($calendarId, $testEventData) ->deleteEvent($calendarId, $testEventId) try { $result = $cronofy->executeBatch($batch); foreach ($result->responses() as $response) { // $response->status(); // $response->headers(); // $response->data(); // $response->request(); } } catch (PartialBatchFailureException $exception) { $result = $exception->result(); foreach ($result->errors() as $response) { // $response->status(); // $response->headers(); // $response->data(); // $response->request(); } }
Running unit tests
make test
Links
Migration guides
v0.X.X
->v1.0.0
: version1.0.0
adds namespacing and standardizes the names of public methods to camelCase (whereas previously some methods were named with camel_case). Where in v0.29.0 you would have written$cronofy = new Cronofy();
and$calendar = $cronofy->list_calendars();
, for v1.0.0 you should write$cronofy = new Cronofy\Cronofy();
and$calendar = $cronofy->listCalendars();
.
A feature I want is not in the SDK, how do I get it?
We add features to this SDK as they are requested, to focus on developing the Cronofy API.
If you're comfortable contributing support for an endpoint or attribute, then we love to receive pull requests! Please create a PR mentioning the feature/API endpoint you’ve added and we’ll review it as soon as we can.
If you would like to request a feature is added by our team then please let us know by getting in touch via support@cronofy.com.