PHPackages                             larasdks/zoom - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. larasdks/zoom

ActiveLibrary[API Development](/categories/api)

larasdks/zoom
=============

A Laravel package by laraSDKs to facilitate seamless integration with the Zoom API.

0.0.5(5mo ago)0357MITPHPPHP &gt;=8.2

Since Dec 23Pushed 5mo agoCompare

[ Source](https://github.com/larasdks/zoom)[ Packagist](https://packagist.org/packages/larasdks/zoom)[ RSS](/packages/larasdks-zoom/feed)WikiDiscussions main Synced today

READMEChangelogDependencies (5)Versions (6)Used By (0)

Laravel Zoom API SDK
====================

[](#laravel-zoom-api-sdk)

A Laravel-native SDK for the Zoom API. Integrates seamlessly with Laravel 11+, using the HTTP client, service providers, facades, and Socialite for OAuth 2.0 authentication. Supports both OAuth 2.0 and Server-to-Server OAuth authentication methods.

Installation
------------

[](#installation)

```
composer require larasdks/zoom
```

Configuration
-------------

[](#configuration)

Publish the config file:

```
php artisan vendor:publish --provider="laraSDKs\Zoom\Providers\ZoomServiceProvider" --tag=config
```

Set your credentials in `.env`:

### For OAuth 2.0 Authentication

[](#for-oauth-20-authentication)

```
ZOOM_CLIENT_ID=your_client_id
ZOOM_CLIENT_SECRET=your_client_secret
ZOOM_REDIRECT_URI=https://your-app.com/auth/zoom/callback

```

### For Server-to-Server OAuth Authentication

[](#for-server-to-server-oauth-authentication)

```
ZOOM_ACCOUNT_ID=your_account_id
ZOOM_S2S_CLIENT_ID=your_s2s_client_id
ZOOM_S2S_CLIENT_SECRET=your_s2s_client_secret

```

### Optional Configuration

[](#optional-configuration)

```
ZOOM_API_ENDPOINT=https://api.zoom.us/v2
ZOOM_TIMEOUT=60

```

Socialite Setup (OAuth 2.0)
---------------------------

[](#socialite-setup-oauth-20)

Add to `config/services.php`:

```
'zoom' => [
    'client_id' => env('ZOOM_CLIENT_ID'),
    'client_secret' => env('ZOOM_CLIENT_SECRET'),
    'redirect' => env('ZOOM_REDIRECT_URI'),
],
```

Register the custom Socialite provider in your `AppServiceProvider`:

```
use laraSDKs\Zoom\Socialite\ZoomProvider;
use Laravel\Socialite\Contracts\Factory;

public function boot(): void
{
    $socialite = $this->app->make(Factory::class);
    $socialite->extend('zoom', function ($app) use ($socialite) {
        $config = $app['config']['services.zoom'];
        return $socialite->buildProvider(ZoomProvider::class, $config);
    });
}
```

Authentication Guide
--------------------

[](#authentication-guide)

### OAuth 2.0 Authentication

[](#oauth-20-authentication)

Example controller for Socialite login:

```
use Laravel\Socialite\Facades\Socialite;
use laraSDKs\Zoom\Facades\Zoom;

public function redirectToZoom()
{
    return Socialite::driver('zoom')->redirect();
}

public function handleZoomCallback()
{
    $user = Socialite::driver('zoom')->user();

    // Store $user->token in your database
    $accessToken = $user->token;

    // Use the token for API calls
    Zoom::setToken($accessToken);

    // Now you can make API calls
    $meetings = Zoom::meetings()->list('me');
}
```

### Server-to-Server OAuth Authentication

[](#server-to-server-oauth-authentication)

Server-to-Server OAuth doesn't require user interaction and is ideal for server-side operations:

```
use laraSDKs\Zoom\Facades\Zoom;

// Enable Server-to-Server authentication
Zoom::setServerToServerAuth();

// Now you can make API calls without user tokens
$users = Zoom::users()->list();
```

Usage Examples
--------------

[](#usage-examples)

### Meetings

[](#meetings)

```
use laraSDKs\Zoom\Facades\Zoom;

// Set authentication (OAuth 2.0)
Zoom::setToken($userAccessToken);

// Or use Server-to-Server OAuth
Zoom::setServerToServerAuth();

// Create a meeting
$meeting = Zoom::meetings()->create('me', [
    'topic' => 'Team Standup',
    'type' => 2, // Scheduled meeting
    'start_time' => '2024-01-15T10:00:00Z',
    'duration' => 30,
    'timezone' => 'America/New_York',
    'settings' => [
        'host_video' => true,
        'participant_video' => true,
    ],
]);

// List all meetings for a user
$meetings = Zoom::meetings()->list('me', [
    'type' => 'scheduled',
    'page_size' => 30,
]);

// Get a meeting by ID
$meeting = Zoom::meetings()->get($meetingId);

// Update a meeting
Zoom::meetings()->update($meetingId, [
    'topic' => 'Updated Meeting Topic',
]);

// Delete a meeting
Zoom::meetings()->delete($meetingId);

// Add a registrant to a meeting
$registrant = Zoom::meetings()->addRegistrant($meetingId, [
    'email' => 'participant@example.com',
    'first_name' => 'John',
    'last_name' => 'Doe',
]);

// List meeting registrants
$registrants = Zoom::meetings()->listRegistrants($meetingId);
```

### Users

[](#users)

```
use laraSDKs\Zoom\Facades\Zoom;

// List all users
$users = Zoom::users()->list([
    'status' => 'active',
    'page_size' => 30,
]);

// Get a user by ID or email
$user = Zoom::users()->get('user@example.com');

// Create a new user
$user = Zoom::users()->create([
    'action' => 'create',
    'user_info' => [
        'email' => 'newuser@example.com',
        'type' => 1, // Basic user
        'first_name' => 'Jane',
        'last_name' => 'Doe',
    ],
]);

// Update a user
Zoom::users()->update($userId, [
    'first_name' => 'Updated Name',
]);

// Delete a user
Zoom::users()->delete($userId, [
    'action' => 'delete',
]);

// Get user settings
$settings = Zoom::users()->getSettings($userId);

// Update user settings
Zoom::users()->updateSettings($userId, [
    'schedule_meeting' => [
        'host_video' => true,
    ],
]);
```

### Webinars

[](#webinars)

```
use laraSDKs\Zoom\Facades\Zoom;

// Create a webinar
$webinar = Zoom::webinars()->create('me', [
    'topic' => 'Product Launch Webinar',
    'type' => 5, // Webinar
    'start_time' => '2024-01-20T14:00:00Z',
    'duration' => 60,
    'timezone' => 'America/New_York',
]);

// List all webinars for a user
$webinars = Zoom::webinars()->list('me');

// Get a webinar by ID
$webinar = Zoom::webinars()->get($webinarId);

// Update a webinar
Zoom::webinars()->update($webinarId, [
    'topic' => 'Updated Webinar Topic',
]);

// Delete a webinar
Zoom::webinars()->delete($webinarId);

// Add a registrant to a webinar
$registrant = Zoom::webinars()->addRegistrant($webinarId, [
    'email' => 'attendee@example.com',
    'first_name' => 'Alice',
    'last_name' => 'Smith',
]);

// List webinar registrants
$registrants = Zoom::webinars()->listRegistrants($webinarId);
```

### Reports

[](#reports)

```
use laraSDKs\Zoom\Facades\Zoom;

// Get meeting participants report
$participants = Zoom::reports()->getMeetingParticipants($meetingId, [
    'page_size' => 30,
]);

// Get a meeting detail report
$meetingDetail = Zoom::reports()->getMeetingDetail($meetingId);

// Get daily usage report
$dailyUsage = Zoom::reports()->getDailyUsage([
    'year' => 2024,
    'month' => 1,
]);

// Get webinar participants report
$webinarParticipants = Zoom::reports()->getWebinarParticipants($webinarId);

// Get webinar detail report
$webinarDetail = Zoom::reports()->getWebinarDetail($webinarId);

// Get user activity report
$userActivity = Zoom::reports()->getUserActivity([
    'from' => '2024-01-01',
    'to' => '2024-01-31',
]);

// Get user activity for a specific user
$userActivity = Zoom::reports()->getUserActivityByUser($userId, [
    'from' => '2024-01-01',
    'to' => '2024-01-31',
]);
```

Error Handling
--------------

[](#error-handling)

The package provides specific exception types for different error scenarios:

```
use laraSDKs\Zoom\Exceptions\ZoomApiException;
use laraSDKs\Zoom\Exceptions\AuthenticationException;
use laraSDKs\Zoom\Exceptions\NotFoundException;
use laraSDKs\Zoom\Exceptions\ValidationException;

try {
    $meeting = Zoom::meetings()->get($meetingId);
} catch (AuthenticationException $e) {
    // Handle authentication errors (401, 403)
    logger()->error('Zoom authentication failed: ' . $e->getMessage());
} catch (NotFoundException $e) {
    // Handle not found errors (404)
    logger()->warning('Meeting not found: ' . $e->getMessage());
} catch (ValidationException $e) {
    // Handle validation errors (400, 422)
    $errors = $e->getErrors();
    logger()->error('Validation failed', ['errors' => $errors]);
} catch (ZoomApiException $e) {
    // Handle other API errors
    logger()->error('Zoom API error: ' . $e->getMessage());
}
```

Authentication Methods
----------------------

[](#authentication-methods)

### OAuth 2.0

[](#oauth-20)

- User-based authentication
- Requires user consent
- Access tokens are user-specific
- Use when you need to act on behalf of users

### Server-to-Server OAuth

[](#server-to-server-oauth)

- Application-level authentication
- No user interaction required
- Uses account-level credentials
- Use for server-side operations and administrative tasks

Pagination
----------

[](#pagination)

Zoom API uses cursor-based pagination. The response includes pagination information in the response body. Check the `next_page_token` field in the response to fetch the next page:

```
$response = Zoom::meetings()->list('me', ['page_size' => 30]);
// Handle pagination manually based on response structure
```

Requirements
------------

[](#requirements)

- PHP &gt;= 8.1
- Laravel &gt;= 11.0 or &gt;= 10.0
- Zoom API credentials (OAuth 2.0 or Server-to-Server OAuth)

License
-------

[](#license)

MIT

---

**See the source code for full PHPDoc documentation.**

###  Health Score

35

—

LowBetter than 77% of packages

Maintenance72

Regular maintenance activity

Popularity14

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity41

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~8 days

Total

5

Last Release

157d ago

PHP version history (2 changes)0.0.1PHP &gt;=8.1

0.0.4PHP &gt;=8.2

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/163016156?v=4)[Developh](/maintainers/developh)[@Developh](https://github.com/Developh)

---

Top Contributors

[![HamzaAlayed](https://avatars.githubusercontent.com/u/7230722?v=4)](https://github.com/HamzaAlayed "HamzaAlayed (13 commits)")

###  Code Quality

TestsPest

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/larasdks-zoom/health.svg)

```
[![Health](https://phpackages.com/badges/larasdks-zoom/health.svg)](https://phpackages.com/packages/larasdks-zoom)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3355.3M345](/packages/psalm-plugin-laravel)[defstudio/telegraph

A laravel facade to interact with Telegram Bots

816333.6k3](/packages/defstudio-telegraph)[api-platform/laravel

API Platform support for Laravel

58171.4k14](/packages/api-platform-laravel)[simplestats-io/laravel-client

Server-side analytics for Laravel that follows the full funnel from visit to registration to payment, attributed to the channel that drove it. Revenue, MRR, churn and ad-spend profit (ROAS/CAC) per channel. GDPR compliant, ad-blocker proof.

5021.9k](/packages/simplestats-io-laravel-client)[jasara/php-amzn-selling-partner-api

A fluent interface for Amazon's Selling Partner API in PHP

1348.7k1](/packages/jasara-php-amzn-selling-partner-api)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
