MyOwnConference public API

Automation

The MyOwnConference API lets you run your account from your own code. You can schedule webinars, manage moderators and attendees, pull attendance and chat history, and drive a fully automated event from start to finish. None of it needs the control panel open.

Your access key

Every request is authenticated with a unique key that the system generates for you. Sign in to the control panel, open the "Profile" section and look for the "API Key" field.

If you suspect someone else has your key, generate a new one. The refresh button, shown as two arrows, sits next to the "API Key" field. Click it and the old key stops working the moment the new one appears. Never hand your key to anyone except programmers and other people you have already trusted with access to your control panel.

All API requests are logged and kept for 365 days. If your key is used to reach information that does not belong to your account, the account is blocked automatically. In that case we cannot issue a refund and we do not accept complaints, so treat the key as a password.

Request format

Requests go over HTTPS to a dedicated domain, https://api.mywebinar.com. They are JSON, and you must send them with the POST method inside a single data field named request. Any other approach returns an error every time.

Throughout this document, anything written as %--text--% is a placeholder. Replace it with your own value before sending the request.

A request either carries named parameters.

json
"request":
{
  "key": "%--api-key-from-your-profile--%",
  "action": "%--required-api-command--%",
  "params":
  {
    "%--parameter--%": "%--value--%",
    "%--parameter--%": "%--value--%"
  }
}

Or it carries a plain list of values.

json
"request":
{
  "key": "%--api-key-from-your-profile--%",
  "action": "%--required-api-command--%",
  "params":
  [
    "%--value--%",
    "%--value--%"
  ]
}

key and action are always required. When a command takes no extra parameters, send an empty array for params.

Response format

Responses are always JSON, and each one echoes the original request back alongside the result. You get one of three shapes.

A success with data returned.

json
{
  "request": { "action": "%--required-api-command--%", "params": { } },
  "response": { "%--parameter--%": "%--value--%" }
}

A success with nothing to return.

json
{
  "request": { "action": "%--required-api-command--%", "params": { } },
  "response": { "success": "%--message--%" }
}

An error, with a description of what went wrong.

json
{
  "request": { "action": "%--required-api-command--%", "params": { } },
  "response": { "error": "%--message--%" }
}

Success and error messages come back in English, whatever language your account uses.

PHP example

php
$data['request'] = json_encode( [
  'key'    => '%--api-key-from-your-profile--%',
  'action' => '%--required-api-command--%',
  'params' => [
    '%--parameters--%',
  ],
] );

$ch = curl_init();
curl_setopt_array( $ch, [
  CURLOPT_URL           => 'https://api.mywebinar.com',
  CURLOPT_POST          => 1,
  CURLOPT_TIMEOUT       => 30,
  CURLOPT_RETURNTRANSFER => 1,
  CURLOPT_POSTFIELDS    => $data,
] );

$result = json_decode( curl_exec( $ch ), true );
curl_close( $ch );

var_dump( $result );

Node.js example

js
const https = require( 'https' );
const query = require( 'querystring' );

const data = query.stringify( {
  request: JSON.stringify( {
    key: '%--api-key-from-your-profile--%',
    action: '%--required-api-command--%',
    params: [
      '%--parameters--%',
    ],
  } ),
} );

const options = {
  hostname: 'api.mywebinar.com',
  port: 443,
  path: '/',
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Content-Length': Buffer.byteLength( data ),
  },
};

const request = https.request( options, response => {
  response.on( 'data', result => {
    process.stdout.write( result.toString() );
  } );
} );

request.on( 'error', error => console.error( error ) );
request.write( data );
request.end();

The remaining examples use PHP.

Text field limits

Most commands share the same limits, so they are collected here instead of being repeated.

FieldLimit
Full name2 to 64 characters
Email6 to 128 characters
Phoneup to 16 characters
Company detailsup to 1000 characters

Names, companies, departments and cities accept any character except ^~!@#$%^&*()+=[{}]\|:;,<>/?.

Profile commands

profileGet

Returns the whole profile, or only the fields you ask for.

php
$data[ 'request' ] = json_encode( [
  'key'    => '%--api-key-from-your-profile--%',
  'action' => 'profileGet',
  'params' => [
    'name',
    'timezone',
  ],
] );

Send an empty params array to get everything.

FieldWhat it holds
nameYour first and last name. Every webinar invitation is sent under this name.
emailThe address the account is registered to.
timezoneYour time zone, written as the offset from GMT in minutes. Values can be negative, so GMT+00:00 is 0, GMT+02:00 is 120 and GMT-12:00 is -720. Every event you create is timed against this setting.
timemoveWhether the system follows daylight saving time. YES shifts your event times automatically, NO leaves them alone.
languageDefault interface language for webinars you schedule later. EN, DE, ES, FR, PL, RU or UK.
gatewayThe payment system on the account, either PAYSERA or PAYPAL.
subscribeYES when you are subscribed to service news, NO when you are not.
companyCompany details. A non-empty value marks the account as a legal entity, which makes invoices for bank transfer available.

profileSet

Updates the profile in full or in part. Pass several parameters in one array to change them together.

php
$data[ 'request' ] = json_encode( [
  'key'    => '%--api-key-from-your-profile--%',
  'action' => 'profileSet',
  'params' => [
    'name'      => '%--first-and-last-names--%',
    'timezone'  => '%--timezone-in-minutes--%',
    'subscribe' => '%--yes-or-no--%',
  ],
] );

profileSet accepts the same fields as profileGet.

Moderator commands

Moderators are the people who present your webinars. The moderator created when you registered is the main moderator, also called the account administrator. In the control panel that moderator is marked with a star and cannot be deleted. They reach every webinar and every uploaded file.

moderatorsCreate

Creates a moderator from a name and an email address.

php
$data[ 'request' ] = json_encode( [
  'key'    => '%--api-key-from-your-profile--%',
  'action' => 'moderatorsCreate',
  'params' => [
    'name'  => '%--first-and-last-names--%',
    'email' => '%--email-address-at-domain-com--%',
  ],
] );

moderatorsDelete

Deletes one moderator or a whole array of them. Pass the email addresses as a plain list.

php
$data[ 'request' ] = json_encode( [
  'key'    => '%--api-key-from-your-profile--%',
  'action' => 'moderatorsDelete',
  'params' => [
    '%--email-address-at-domain-com--%',
    '%--email-address-at-domain-com--%',
  ],
] );

moderatorsSet

Changes a moderator's name or email address, or uploads a picture to show instead of their webcam.

ParameterWhat it does
emailThe moderator you are editing, identified by their current address.
newEmailThe new email address.
newNameThe new full name.
avatarAn image shown in place of the webcam feed, which turns the camera off while it is displayed. Encode it in Base64. JPG, JPEG and PNG are accepted.

To encode an image by hand, run cat /path/to/file/test.png | base64.

moderatorsList

Returns your moderators. The parameters below are all optional, and they can be combined in one request.

ParameterWhat it does
fieldsThe fields you want back. An empty array returns everything.
aliasLimits the list to one webinar.
searchText matched against moderator names and emails.

The response can include name, email, registered (the date the moderator was added, down to the second), main (YES for the main moderator) and avatar (YES when a picture replaces the camera).

moderatorsAddToWebinar

Attaches one or more moderators to a webinar. An attached moderator becomes a presenter of that event and starts receiving invitations and reminders.

php
$data[ 'request' ] = json_encode( [
  'key'    => '%--api-key-from-your-profile--%',
  'action' => 'moderatorsAddToWebinar',
  'params' => [
    'alias' => '%--webinar-alias-xxxx-xxxx-xxxx-xxxx--%',
    'email' => [
      '%--email-address-at-domain-com--%',
    ],
  ],
] );

sendInvite is optional. Set it to YES to send the invitation immediately, or NO to let it go out on the normal schedule.

moderatorsRemoveFromWebinar

Detaches moderators from a webinar and strips their access rights. They stop receiving invitation links and lose every other way into the event. The parameters are the same alias and email as the command above.

moderatorsRooms

Returns every webinar a moderator is attached to, given their email address. Each entry carries alias, name, description, start, timezone, duration and moderatorLink.

A moderator link works for one person only. Moderators who pass their link around come back with one of three complaints. They get thrown out of the room, they cannot get in, or somebody is already inside under their name. All three have the same cause. A second entry on the same link always disconnects the first session, so nobody should open a room with a link that was not issued to them.

Attendee commands

attendeesCreate

Creates an attendee from an email address and a name.

php
$data[ 'request' ] = json_encode( [
  'key'    => '%--api-key-from-your-profile--%',
  'action' => 'attendeesCreate',
  'params' => [
    'email' => '%--attendee-email-at-domain-dot-com--%',
    'name'  => '%--attendee-first-and-last-name--%',
  ],
] );

Attendee email addresses accept English letters and digits.

attendeesSet

Updates an existing attendee. Identify them by email, then send whichever fields you want to change.

ParameterWhat it does
newemailReplaces the address the attendee is stored under.
nameFull name.
phonePhone number.
companyCompany.
departmentDepartment.
cityCity.
bornDate of birth in YYYY-MM-DD format.

Your account may hold additional fields beyond this list.

attendeesDelete

Deletes one attendee or an array of them, addressed by email.

attendeesList

Returns attendees you created earlier, with filtering, sorting and pagination.

ParameterWhat it does
fieldsWhich fields to return. Optional, and without it you get only name and email.
onPageHow many attendees to return per page. Defaults to 100. Leave it out to get the list unpaginated.
pageWhich page to return.
aliasRestricts the list to one webinar.
searchText matched against attendee names and emails.
orderASC for ascending or DESC for descending. ASC by default.
orderFieldSort by name, email or creation_date. name by default.
typeACTIVE, PENDING or BANNED.
importedHow the attendee got into the system. YES for added by the account owner, NO for self-registered.
webinarsAn array of webinar aliases to test attendance against.
webinarsOrderIN returns attendees who joined those webinars, OUT returns those who did not.
withEmailYES returns only attendees who have an email address, NO only those without. Omit it to get everyone.
groupThe id of a group the attendees belong to.

Values you can ask for in fields are name, email, phone, company, department, city, born, creation_date, country, type, notified (how many invitations have gone out) and link (the attendee's joining link, available only when you also pass alias).

attendeesAddToWebinar and attendeesRemoveFromWebinar

Attach attendees to a scheduled webinar, or take them off it. Both take alias plus an attendees array of email addresses.

php
$data[ 'request' ] = json_encode( [
  'key'    => '%--api-key-from-your-profile--%',
  'action' => 'attendeesAddToWebinar',
  'params' => [
    'alias'     => '%--webinar-alias-xxxx-xxxx-xxxx-xxxx--%',
    'attendees' => [
      '%--attendee-email-at-domain-dot-com--%',
    ],
  ],
] );

attendeesRooms

Returns every webinar an attendee has been invited to, given their email. Each entry carries alias, name, description, start, timezone, duration and attendeeLink.

Attendee groups

CommandWhat it does
attendeesCreateGroupCreates a group from a name and returns its group_id.
attendeesGroupsRenameRenames a group, addressed by id, using newname.
attendeesDeleteGroupDeletes a group by id.
attendeesGroupsListReturns every group as id and name pairs.
attendeesAssignToGroupAdds an attendees array of emails to group_id.
attendeesUnAssignFromGroupRemoves an attendees array of emails from group_id.
attendeesCommonGroupsTakes one or several attendee emails as a plain list and returns the groups they belong to.

attendeesUnbanned

Lifts a block from an attendee who was banned from a webinar room. Pass email with one address or an array of them.

Webinar commands

Almost everything below is addressed by alias, the unique webinar id. webinarsCreate returns it, and it is also the code you see in the webinar link.

webinarsCreate

Schedules a webinar and returns the links you need.

php
$data[ 'request' ] = json_encode( [
  'key'    => '%--api-key-from-your-profile--%',
  'action' => 'webinarsCreate',
  'params' => [
    'name'     => '%--webinar-name-or-topic--%',
    'start'    => '%--year-month-day-hours-minutes-seconds--%',
    'duration' => '%--webinar-duration-in-minutes--%',
  ],
] );

The response returns alias, plus webinarLink for the public page and mainModeratorLink for the main moderator.

start uses the YYYY-MM-DD HH:MM:SS format and is read in the time zone set in your profile. duration is measured in minutes and cannot exceed 1439, which is one minute short of a full day.

webinarsSet

Changes any setting on a webinar you scheduled earlier.

php
$data[ 'request' ] = json_encode( [
  'key'    => '%--api-key-from-your-profile--%',
  'action' => 'webinarsSet',
  'params' => [
    'alias'    => '%--webinar-alias-xxxx-xxxx-xxxx-xxxx--%',
    'name'     => '%--webinar-name-or-topic--%',
    'language' => '%--webinar-room-language--%',
    'settings' => [
      'cameraSize'    => '%--mini-middle-big--%',
      'userList'      => '%--yes-or-no--%',
      'loginfields'   => [
        'name',
        'email',
      ],
      'recordWhole'   => '',
      'recordUsers'   => '%--yes-or-no--%',
      'recordQuality' => '%--quality-level--%',
    ],
  ],
] );

These are the top-level parameters.

ParameterWhat it does
aliasThe webinar you are editing.
nameTitle or topic.
descriptionExtended description in HTML. Optional.
startStart date and time as YYYY-MM-DD HH:MM:SS, read in your profile time zone.
durationLength in minutes, up to 1439.
closeYES for a private webinar, NO for a public one.
languageTwo-letter room language. The interface opens in this language for presenters and attendees alike. Accepted values are be, bg, de, en, es, et, fr, it, lt, lv, pl, pt, ru, sl, tr and uk.
logoRoom logo as a Base64 image.
logotype_urlPage opened when someone clicks the logo.
bannerRoom banner as a Base64 image.
banner_urlPage opened when someone clicks the banner.
settingsEverything below, passed as a nested array.

These are the room settings.

SettingWhat it does
webcamPositionLEFT puts the moderator camera left of the chat, RIGHT puts it on the right.
themebgRoom background colour in HEX, for example #f2f2f2.
themetextIcon and text colour in HEX, for example #d3d3d3.
cameraSizemini, middle or big. The event settings screen calls this "Webcam width", and "Chat width" for a meeting or an event that broadcasts from OBS.
userListYES shows attendees the list of who is in the room, NO hides it.
flagsYES shows country flags in that list. It does nothing while userList is NO.
buttonQuestionYES shows the "Ask the question" item in the attendee's Feedback menu. The event settings screen calls this "Enable private chat with moderators".
buttonVoiceYES shows the "Ask to speak" item in the attendee's Feedback menu, and NO removes it. The event settings screen calls this "Allow request to speak".
chatYES gives attendees the chat field, NO takes it away so they cannot send messages.
showBeforeTimerYES shows the countdown to the start of the webinar.
showLoginStartYES shows the start time on the entry page.
showLoginNameYES shows the webinar title on the entry page.
showLoginModeratorsYES lists the moderators on the entry page.
showSocialButtonsYES shows social login buttons on the entry page.
showLoginCounterYES shows how many seats are still free.
groupCollects everyone who registers into the group with this id. Use attendeesGroupsList to find it.
loginfieldsWhich fields the entry page asks for, in the order you list them. Available fields are name, email, phone, city, company, department and born. Leave email out and the attendee never reaches the attendees section of the control panel, appearing only in that webinar's statistics.
beforeStartTimeHow many minutes before the start attendees may enter, from 5 to 60.
emailIdntLoginYES turns on personalised entry links.
emailIdntRecordYES turns on personalised links for watching the recording.
sendRecordYES sends a link to the recording once the event ends.
sendRecordToWho receives that link. all for everyone registered, visit for those who attended, miss for those who did not.

Recording modes are set by passing the mode name as a key with an empty value, for example recordWebCams => "".

ModeWhat it captures
recordWebCamsWebcams only.
recordAreaWebcams, microphones and the material display area.
recordAreaNoChatWebcams, microphones, chat and the material display area.
recordWholeThe entire room.

Three more switches change what ends up in the file. recordUsers puts the attendee list in the recording, recordModer prints each moderator's name on their camera, and recordChat includes the chat. Setting recordUsers or recordModer switches the mode to recordWhole on its own.

recordQuality sets the resolution. 0 records at 480p (800x460), 1 at 720p (1280x720), 2 at 1080p (1920x1080), 3 at 2K (2048x1080) and 4 at 2160p. Which level your account can actually use depends on your plan rather than on the API. The free Starter plan records up to 1080p, as do paid plans below 500 attendees, while plans from 500 attendees reach 2160p. The pricing page lists what each plan includes.

webinarsDelete

Deletes a scheduled webinar completely, addressed by alias.

webinarsClone

Copies a webinar to a new date in YYYY-MM-DD format, and returns the new alias, webinarLink and mainModeratorLink.

webinarsList

Returns your webinars.

ParameterWhat it does
fieldsWhich fields to return. Optional, and without it you get all of them.
statusACTIVE for webinars running or still to come, FINISHED for those that have ended.
dateReturns every webinar on one day, in YYYY-MM-DD format.

Each entry can carry name, description, created (creation time in GMT+0), alias, start and language.

webinarsGetInfo

Returns everything the system knows about one webinar, including its settings block, its status, and records, the number of recordings made so far. The amount and shape of the returned data varies from one account to another, so do not hard-code the field list.

webinarsGetLettersInfo and webinarsSetLetters

webinarsGetLettersInfo returns the invitation emails configured for a webinar, each with enabled, status and text.

webinarsSetLetters changes them. It takes alias, a type, an enabled flag of YES or NO, and text, an HTML signature appended to the message. Send text empty to remove the signature.

TypeWhen it goes out
REGISTRATIONCONFIRMWhen someone registers through the webinar entry page.
3DAY3 days (72 hours) before the webinar.
1DAY1 day (24 hours) before the webinar.
1HOUR1 hour before the webinar.
STARTEDTo invited attendees who had not entered the room when the event began.
FINISHEDAfter the webinar ends.

The 1HOUR message cannot be switched off.

webinarsLettersOff and webinarsLettersOn

Stop or restart all invitation emails for one webinar, addressed by alias.

webinarsOnlineList

Returns who is in the room right now, split into moderators and guests.

webinarsRecordsList and webinarsRecordDelete

webinarsRecordsList returns the recordings of a webinar. Each one carries id, name, status (either processing or ready to download), added, size in bytes, duration in seconds, link for watching and download_link for downloading.

webinarsRecordDelete removes one recording by the id you got from that list.

webinarsFilesList

Returns the material uploaded to a webinar. type is optional. PRESENTATION returns presentations and images, and MEDIA returns mp3 and mp4 files along with YouTube and Vimeo videos. Each file carries id, name, added, size, duration (seconds for media, or the number of slides for a presentation), link and download_link.

webinarsHistory

Returns the log of a webinar. Set type to chats for every text chat message or visits for the attendance history. Each row holds the timestamp, the attendee name, the message text, a g or m marker for guest or moderator, and the attendee email.

Automation commands

These commands are the machinery behind automated webinars. They fill a room with virtual moderators and virtual attendees, post chat messages under their names, drive the slides and the video, and end the event when you are done. Everything runs on your timing rather than a presenter's.

webinarsAddModerToRoom and webinarsRemoveModerFromRoom

webinarsAddModerToRoom puts a virtual moderator in a room. It takes alias, a unique email and a name. webinarsRemoveModerFromRoom takes that moderator out again, addressed by alias and email.

php
$data[ 'request' ] = json_encode( [
  'key'    => '%--api-key-from-your-profile--%',
  'action' => 'webinarsAddModerToRoom',
  'params' => [
    'alias' => '%--webinar-alias-xxxx-xxxx-xxxx-xxxx--%',
    'email' => '%--moderator-email-at-domain-dot-com--%',
    'name'  => '%--moderator-first-and-last-name--%',
  ],
] );

webinarsAddBotToRoom, webinarsRemoveBotFromRoom and webinarsGetBotsList

webinarsAddBotToRoom puts a virtual attendee in the room. It takes alias, name and country, a two-letter country code such as US, DE, FR, PL or UA. The response returns the id you will need later.

webinarsRemoveBotFromRoom takes that id away again, and webinarsGetBotsList returns every virtual attendee currently connected to a webinar.

webinarsBotMessage

Sends a chat message on behalf of a virtual moderator or a virtual attendee.

ParameterWhat it does
aliasThe webinar whose chat receives the message.
botThe email you gave a virtual moderator, or the id you got when creating a virtual attendee.
textThe message itself.

Chat controls

webinarsLockChat stops live attendees from writing in the chat and webinarsUnlockChat lets them write again. Moderators and presenters can always post, so locking the chat only ever affects attendees.

webinarsLinkLockInChat and webinarsLinkUnlockInChat do the same for links, blocking or allowing links between live attendees. All four take only alias.

Slides and video

webinarsStartPresentation shows a slide to live attendees. It takes alias, the presentation id from webinarsFilesList, and slide, the page number to display. webinarStopPresentation takes the presentation off the screen with just alias.

webinarsStartVideo plays a video file, a YouTube clip or a Vimeo clip, taking alias and the file id from webinarsFilesList. webinarsStopVideo pauses playback and takes only alias.

webinarsFinish

Ends the webinar and disconnects everyone in the room. It takes alias, and it only works on a webinar that has already started.

If something here is wrong

If you spot an error or an inaccuracy in this document, tell us in the online chat. We will check it and correct the page.

MyOwnConference may change or extend this document at any time. Working from it means you accept that.

Frequently asked questions

What should I do if my API key gets out?

Generate a new one immediately, using the refresh button shown as two arrows next to the "API Key" field in the "Profile" section, since the old key stops working the moment the new one appears. All API requests are logged and kept for 365 days. If your key is used to reach information that does not belong to your account, the account is blocked automatically, and in that case we cannot issue a refund and we do not accept complaints.

Every request I send comes back as an error. What am I doing wrong?

Check how you are sending it before you check the command, because requests go over HTTPS to https://api.mywebinar.com and must use the POST method with the JSON placed inside a single data field named request. Any other approach returns an error every time. key and action are always required, and when a command takes no extra parameters you still send an empty array for params.

Can I schedule a webinar that runs longer than a day?

No, duration is measured in minutes and cannot exceed 1439, which is one minute short of a full day. Check your profile time zone before you schedule anything, because start uses the YYYY-MM-DD HH:MM:SS format and is read in that setting. profileGet returns it as timezone, written as the offset from GMT in minutes, so GMT+02:00 comes back as 120.

Can I ask for a 2160p recording on any plan?

No, which level your account can actually use depends on your plan rather than on the API. The free Starter plan records up to 1080p, as do paid plans below 500 attendees, while plans from 500 attendees reach 2160p. recordQuality itself takes 0 for 480p, 1 for 720p, 2 for 1080p, 3 for 2K and 4 for 2160p, and the pricing page lists what each plan includes.

My presenters keep getting thrown out of the room. What causes that?

A moderator link works for one person only, so a second entry on the same link always disconnects the first session. That one cause is behind all three of the usual complaints, which are getting thrown out, not getting in, and finding somebody already inside under your name. Give every presenter the link issued to them, which moderatorsRooms returns as moderatorLink for each webinar they are attached to.

Get started today

Ready to host webinars that actually convert?

We have been helping people run webinars since 2013. Getting started is completely free

Free forever plan • No credit card • Setup in 2 min