PHPackages                             slakbal/gotowebinar - 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. slakbal/gotowebinar

ActiveLibrary[API Development](/categories/api)

slakbal/gotowebinar
===================

GotoWebinar API wrapper for laravel 5+

v7.0.5(1y ago)1513.1k12[4 issues](https://github.com/slakbal/gotowebinar/issues)[1 PRs](https://github.com/slakbal/gotowebinar/pulls)MITPHPPHP &gt;=7.1.3

Since Sep 21Pushed 12mo ago2 watchersCompare

[ Source](https://github.com/slakbal/gotowebinar)[ Packagist](https://packagist.org/packages/slakbal/gotowebinar)[ RSS](/packages/slakbal-gotowebinar/feed)WikiDiscussions master Synced 1w ago

READMEChangelog (10)Dependencies (3)Versions (23)Used By (0)

GotoWebinar API wrapper for Laravel
===================================

[](#gotowebinar-api-wrapper-for-laravel)

This package is a GotoWebinar API service wrapper and facade for Laravel 5.4+.

This new release makes use of the latest version of the GotoWebinar API and Authentication methods. This release is not compatible with the previous versions and is a complete new implementation.

Compatible API Version
----------------------

[](#compatible-api-version)

Known Issues
------------

[](#known-issues)

- There are still some issues with the deletion of Registrants from a Webinar by registrantKey
- Retrieving session attendees by registrantKey

Contributions and Bug
---------------------

[](#contributions-and-bug)

Please create a pull request for any changes, update or bugs. Thanks!

Installing
----------

[](#installing)

You can use Composer to install the library

```
composer require slakbal/gotowebinar

```

If you have Laravel 5.5+ the package will be auto-discovered:

```
  "extra": {
    "laravel": {
      "providers": [
        "Slakbal\\Gotowebinar\\GotoWebinarServiceProvider"
      ],
      "aliases": {
        "Webinars": "Slakbal\\Gotowebinar\\Facade\\Webinars",
        "Registrants": "Slakbal\\Gotowebinar\\Facade\\Registrants",
        "Attendees": "Slakbal\\Gotowebinar\\Facade\\Attendees"
      }
    }
  },
```

Otherwise, find the `providers` array in the `config/app.php` file and add the following Service Provider:

```
'providers' => [
  // ...
  Slakbal\Gotowebinar\GotoWebinarServiceProvider::class
];
```

Now find the `aliases` array in the same config file and add the following Facade class:

```
'aliases' => [
  // ...
  'Webinars' => Slakbal\\Gotowebinar\\Facade\\Webinars,
  'Registrants' => Slakbal\\Gotowebinar\\Facade\\Registrants,
  'Attendees' => Slakbal\\Gotowebinar\\Facade\\Attendees
  'Sessions' => Slakbal\\Gotowebinar\\Facade\\Sessions
];
```

Config
------

[](#config)

Before you can use the service provider you have configure it. You can create and App with API access keys here: [GotoWebinar Developer portal](https://goto-developer.logmeininc.com). Look for the `My Apps` menu.

Note that you need to have an active or trial account for the API to function properly. Just dev credentials alone might not work since those tokens are sometimes restricted or expire.

The provider currently only support [OAuth2](https://goto-developer.logmeininc.com/how-get-access-token-and-organizer-key) authentication. Since this is used for backend integration and not clients like for examples mobile applications, etc. the initial authentication is done via Goto's [Direct Login](https://goto-developer.logmeininc.com/how-use-direct-login).

The package's configuration requires at a minimum the following environment values are required in your `.env` file.

```
GOTO_CONSUMER_KEY=Oa0fdvd82FdXcLrsts3EQYdsuGhdscV41
GOTO_CONSUMER_SECRET=8mbIGtkfdfhjksad68
GOTO_DIRECT_USERNAME=webinars@company.com
GOTO_DIRECT_PASSWORD=Password

```

The provider can also publish it's config. You can publish the configuration file if you want to with:

```
php artisan vendor:publish
```

Dev Environment
---------------

[](#dev-environment)

In your development environment, when you run the following artisan command:

```
php artisan route:list
```

You will notice that there are some test routes, which you can look at for examples and use in the browser to test your integration with. Once your environment is in `production` in your `.env` file these routes will no longer be available.

```
_goto
_goto/ping
_goto/authenticate
_goto/flush-auth
_goto/webinars
_goto/webinars/create
_goto/webinars/createByArray
_goto/webinars/{webinarKey}/view
_goto/webinars/{webinarKey}/update
_goto/webinars/{webinarKey}/updateByArray
_goto/webinars/{webinarKey}/registrants
_goto/webinars/{webinarKey}/registrants/create
_goto/webinars/{webinarKey}/registrants/{registrantKey}/view
_goto/webinars/{webinarKey}/registrants/{registrantKey}/delete
_goto/webinars/{webinarKey}/attendees
_goto/webinars/{webinarKey}/delete
_goto/webinars/{webinarKey}/sessions
_goto/webinars/{webinarKey}/sessions/{sessionKey}
_goto/webinars/{webinarKey}/sessions/{sessionKey}/performance
_goto/webinars/{webinarKey}/sessions/{sessionKey}/polls
_goto/webinars/{webinarKey}/sessions/{sessionKey}/questions
_goto/webinars/{webinarKey}/sessions/{sessionKey}/surveys
_goto/webinars/{webinarKey}/sessions/{sessionKey}/attendees
_goto/webinars/{webinarKey}/sessions/{sessionKey}/attendees/{registrantKey}
_goto/webinars/{webinarKey}/sessions/{sessionKey}/attendees/{registrantKey}/polls
_goto/webinars/{webinarKey}/sessions/{sessionKey}/attendees/{registrantKey}/questions
_goto/webinars/{webinarKey}/sessions/{sessionKey}/attendees/{registrantKey}/surveys
```

Authentication Token Caching
----------------------------

[](#authentication-token-caching)

Once your config values are set the authentication tokens etc. are cached and expiry and refreshing of tokens are automatically managed!

**Note a cache which support [tags](https://laravel.com/docs/5.8/cache#storing-tagged-cache-items) is required. Thus file or database cache drivers are not supported.**

So caching the token results in one less round trip to GotoWebinar servers thus improved performance. If you want to manipulate the state manually the following methods can be used:

```
    Webinars::status();

    //note methods are also chainable
    Webinars::authenticate()->status();

    Webinars::flushAuthentication()->status();
```

Usage
-----

[](#usage)

When using this package you'll notice it is closely aligned to the API documentation schemas etc. as can be found here: [GotoWebinar API v2](https://goto-developer.logmeininc.com/content/gotowebinar-api-reference-v2). It is recommended that you also keep an eye on the official API reference while implementing with this package.

#### Examples

[](#examples)

In the following location `vendor/slakbal/gotowebinar/src/routes` , there are route files with the above mentioned routes which can be used to see usage of the package.

For example:

```
    try {
        return Webinars::subject('Event Name')
                       ->description('Event Description*')
                       ->timeFromTo(Carbon::now()->addDays(10), Carbon::now()->addDays(10)->addHours(1))
                       ->timeZone('Europe/Amsterdam')
                       ->singleSession()
                       ->noEmailReminder()
                       ->noEmailAttendeeFollowUp()
                       ->noEmailAbsenteeFollowUp()
                       ->noEmailConfirmation()
                       ->create();
    } catch (Slakbal\Gotowebinar\Exception\GotoException $e) {
        return [$e->getMessage()];
    }
```

Response:

```
    {
        "webinarKey": "4255157664015486220"
    }
```

You can now on $gotoResponse directly access the properties in the response object:

```
$gotoResponse->webinarKey
```

Exception Handling and Logging
------------------------------

[](#exception-handling-and-logging)

When using the package methods it is recommended to call them within a `try`, `catch` block. For example:

```
try {
    $gotoResponse = GotoWebinar::createWebinar($eventParams);
} catch (GotoException $e) {
    //do something, go somewhere or notifify someone
}
```

The package will automatically log some major events and response errors for you to your configured Laravel log file, so you don't need to log them again. For example:

```
[2017-09-21 00:14:38] local.ERROR: GotoWebinar: DELETE - Not Found (404): Webinar with specified key does not exist.
```

GotoWebinar Resources
---------------------

[](#gotowebinar-resources)

Webinars
--------

[](#webinars)

#### Get Webinars (Fluent)

[](#get-webinars-fluent)

```
    $from = Carbon::now()->subYear()->startOfDay();
    $to = Carbon::tomorrow()->endOfDay();

    // Example URL: _goto/webinars?page=10&size=1
    $page = request()->query('page') ?? 0;
    $size = request()->query('size') ?? 5;

    try {
        return Webinars::fromTime($from)
                       ->toTime($to)
                       ->page($page)
                       ->size($size)
                       ->get();
    } catch (Slakbal\Gotowebinar\Exception\GotoException $e) {
        return [$e->getMessage()];
    }
```

#### Create Webinar (Fluent)

[](#create-webinar-fluent)

```
    return Webinars::subject('Event Name')
                   ->description('Event Description')
                   ->timeFromTo(Carbon::now()->addDays(10), Carbon::now()->addDays(10)->addHours(1))
                   ->timeZone('Europe/Amsterdam')
                   ->singleSession()
                   ->noEmailReminder()
                   ->noEmailAttendeeFollowUp()
                   ->noEmailAbsenteeFollowUp()
                   ->noEmailConfirmation()
                   ->create();
```

#### Create Webinar (Array)

[](#create-webinar-array)

```
    return Webinars::noEmailReminder()
                   ->timeFromTo(Carbon::now()->addDays(10), Carbon::now()->addDays(10)->addHours(1))
                   ->create([
                                'subject' => 'Event Name',
                                'description' => 'Event Description*',
                                'timeZone' => 'Europe/Amsterdam',
                                'type' => 'single_session',
                                'isPasswordProtected' => false,
                            ]);
```

#### Update Webinar (Fluent)

[](#update-webinar-fluent)

```
    return Webinars::webinarKey($webinarKey)
                   ->subject('Updated Event Name')
                   ->description('Updated Event Description*')
                   ->timeFromTo(Carbon::now()->addDays(10)->midDay(), Carbon::now()->addDays(10)->midDay()->addHours(2))
                   ->update();
```

#### Update Webinar (Array)

[](#update-webinar-array)

```
    return Webinars::webinarKey($webinarKey)
                   ->timeFromTo(Carbon::now()->addDays(10), Carbon::now()->addDays(10)->addHours(2))
                   ->update([
                                'subject' => 'Event Name',
                                'description' => 'UPDATED Event Description',
                                'timeZone' => 'Europe/Amsterdam',
                                'isPasswordProtected' => false,
                            ]);
```

#### Show Webinar (Fluent)

[](#show-webinar-fluent)

```
    return Webinars::webinarKey($webinarKey)
                   ->get();
```

#### Delete Webinar (Fluent)

[](#delete-webinar-fluent)

Delete a specific Webinar by webinarKey, method returns `true` or `false`

```
    return Webinars::webinarKey($webinarKey)
                   ->sendCancellationEmails()
                   ->delete();
```

#### Webinar Attendees (Fluent)

[](#webinar-attendees-fluent)

```
    return Webinars::webinarKey($webinarKey)
                    ->page($page)
                    ->size($size)
                    ->get();
```

#### Webinar Meeting Times (Fluent)

[](#webinar-meeting-times-fluent)

```
    return Webinars::webinarKey($webinarKey)
                   ->meetingTimes()
                   ->get();
```

#### Webinar Audio (Fluent)

[](#webinar-audio-fluent)

```
    return Webinars::webinarKey($webinarKey)
                   ->audio()
                   ->get();
```

#### Webinar Performance (Fluent)

[](#webinar-performance-fluent)

```
    return Webinars::webinarKey($webinarKey)
                   ->performance()
                   ->get();
```

#### Webinars In-Session (Fluent)

[](#webinars-in-session-fluent)

```
    $from = Carbon::now()->subYears(50)->startOfDay();
    $to = Carbon::now()->addYears(50)->endOfDay();

    return Webinars::insessionWebinars()
                    ->fromTime($from)
                    ->toTime($to)
                    ->get();
```

Registrants
-----------

[](#registrants)

#### Get Registrants (Fluent)

[](#get-registrants-fluent)

Return a list of registrants for a specific Webinar

```
    return Registrants::webinarKey($webinarKey)
                      ->get();
```

#### Create Registrant (Fluent)

[](#create-registrant-fluent)

Create a registrant for a specific WebinarKey

```
    return Registrants::webinarKey($webinarKey)
                      ->firstName('John')
                      ->lastName('Doe')
                      ->timeZone('America/Chicago')
                      ->email('john.doe@email.com')
                      ->resendConfirmation()
                      ->questionsAndComments('Some First Question')
                      ->create();
```

#### Create Registrant (Array)

[](#create-registrant-array)

Create a registrant for a specific WebinarKey

```
    return Registrants::webinarKey($webinarKey)
                      ->resendConfirmation()
                      ->create([
                                   'firstName' => 'Peters',
                                   'lastName' => 'Panske',
                                   'email' => 'peter@pan.com',
                                   'timezone' => 'Europe/Amsterdam',
                                   'phone' => '123',
                                   'country' => 'SA',
                                   'zipcode' => '123',
                                   'source' => 'somewhere',
                                   'address' => '123 Some street',
                                   'city' => 'Some City',
                                   'state' => 'Some State',
                                   'organization' => 'Some Org',
                                   'jobTitle' => 'Boss',
                                   'questionsAndComments' => 'Some Question',
                                   'industry' => 'Some Industry',
                                   'numberOfEmployees' => 'Boss',
                                   'purchasingTimeFrame' => 'Very soon',
                                   'purchasingRole' => 'Some Buyer Role',
                               ]);
```

#### Get Registrant (Fluent)

[](#get-registrant-fluent)

Return a specific registrant by webinarKey and registrantKey

```
    return Registrants::webinarKey($webinarKey)
                      ->registrantKey($registrantKey)
                      ->get();
```

#### Delete Registrant (Fluent)

[](#delete-registrant-fluent)

Delete a specific registrant by webinarKey and registrantKey, method returns `true` or `false`

```
    return Registrants::webinarKey($webinarKey)
                      ->registrantKey($registrantKey)
                      ->delete();
```

Sessions
--------

[](#sessions)

#### Get Organizer Sessions (Fluent)

[](#get-organizer-sessions-fluent)

```
    $from = Carbon\Carbon::now()->subYears(50)->startOfDay();
    $to = Carbon\Carbon::now()->addYears(50)->endOfDay();

    // Example: sessions?page=10&size=1
    $page = request()->query('page') ?? 0;
    $size = request()->query('size') ?? 5;

    return Sessions::organizerSessions()
                   ->fromTime($from)
                   ->toTime($to)
                   ->page($page)
                   ->size($size)
                   ->get();
```

#### Get Webinar Sessions (Fluent)

[](#get-webinar-sessions-fluent)

```
    // Example: sessions?page=10&size=1
    $page = request()->query('page') ?? 0;
    $size = request()->query('size') ?? 5;

    return Sessions::webinarKey($webinarKey)
                   ->page($page)
                   ->size($size)
                   ->get();
```

#### Get Session (Fluent)

[](#get-session-fluent)

```
    return Sessions::webinarKey($webinarKey)
                   ->sessionKey($sessionKey)
                   ->get();
```

#### Get Session Performance (Fluent)

[](#get-session-performance-fluent)

```
    return Sessions::webinarKey($webinarKey)
                   ->sessionKey($sessionKey)
                   ->performance()
                   ->get();
```

#### Get Session Polls (Fluent)

[](#get-session-polls-fluent)

```
    return Sessions::webinarKey($webinarKey)
                   ->sessionKey($sessionKey)
                   ->polls()
                   ->get();
```

#### Get Session Questions (Fluent)

[](#get-session-questions-fluent)

```
    return Sessions::webinarKey($webinarKey)
                   ->sessionKey($sessionKey)
                   ->questions()
                   ->get();
```

#### Get Session Surveys (Fluent)

[](#get-session-surveys-fluent)

```
    return Sessions::webinarKey($webinarKey)
                   ->sessionKey($sessionKey)
                   ->surveys()
                   ->get();
```

Attendees
---------

[](#attendees)

#### Get Session Attendees (Fluent)

[](#get-session-attendees-fluent)

```
    return Attendees::webinarKey($webinarKey)
                   ->sessionKey($sessionKey)
                   ->get();
```

#### Get Attendee (Fluent)

[](#get-attendee-fluent)

```
    return Attendees::webinarKey($webinarKey)
                   ->sessionKey($sessionKey)
                   ->registrantKey($registrantKey)
                   ->get();
```

#### Get Attendee Polls (Fluent)

[](#get-attendee-polls-fluent)

```
    return Attendees::webinarKey($webinarKey)
                   ->sessionKey($sessionKey)
                   ->registrantKey($registrantKey)
                   ->polls()
                   ->get();
```

#### Get Attendee Questions (Fluent)

[](#get-attendee-questions-fluent)

```
    return Attendees::webinarKey($webinarKey)
                   ->sessionKey($sessionKey)
                   ->registrantKey($registrantKey)
                   ->questions()
                   ->get();
```

#### Get Attendee Surveys (Fluent)

[](#get-attendee-surveys-fluent)

```
    return Attendees::webinarKey($webinarKey)
                   ->sessionKey($sessionKey)
                   ->registrantKey($registrantKey)
                   ->surveys()
                   ->get();
```

Your contribution or bug fixes are welcome!

Enjoy!

Slakkie

###  Health Score

43

—

FairBetter than 91% of packages

Maintenance43

Moderate activity, may be stable

Popularity31

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity68

Established project with proven stability

 Bus Factor1

Top contributor holds 73.1% 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 ~145 days

Recently: every ~2 days

Total

20

Last Release

409d ago

Major Versions

v1.0.6 → 2.0.02019-10-16

v2.0.1 → v3.0.02020-02-02

v2.1.0 → v6.0.02020-02-02

v6.0.2 → v7.0.02025-03-25

PHP version history (2 changes)v1.0.0PHP &gt;=7.0.0

2.0.0PHP &gt;=7.1.3

### Community

Maintainers

![](https://www.gravatar.com/avatar/9da7a28c38b059ccdf1df0632e745ce43555bc02bc4ad2609543c674738a748b?d=identicon)[slakbal](/maintainers/slakbal)

---

Top Contributors

[![slakbal](https://avatars.githubusercontent.com/u/4387265?v=4)](https://github.com/slakbal "slakbal (38 commits)")[![upwebdesign](https://avatars.githubusercontent.com/u/1845130?v=4)](https://github.com/upwebdesign "upwebdesign (14 commits)")

---

Tags

laravelGoToWebinarwebinar

### Embed Badge

![Health badge](/badges/slakbal-gotowebinar/health.svg)

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

###  Alternatives

[simplestats-io/laravel-client

Client for SimpleStats!

4515.5k](/packages/simplestats-io-laravel-client)[scalar/laravel

Render your OpenAPI-based API reference

6183.9k2](/packages/scalar-laravel)[njoguamos/laravel-plausible

A laravel package for interacting with plausible analytics api.

208.8k](/packages/njoguamos-laravel-plausible)[codebar-ag/laravel-docuware

DocuWare integration with Laravel

1221.1k](/packages/codebar-ag-laravel-docuware)[codebar-ag/laravel-zammad

Zammad integration with Laravel

106.1k](/packages/codebar-ag-laravel-zammad)[xelon-ag/vmware-php-client

PHP API Client for VmWare

114.3k](/packages/xelon-ag-vmware-php-client)

PHPackages © 2026

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