MyOwnConference public API
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.
"request":
{
"key": "%--api-key-from-your-profile--%",
"action": "%--required-api-command--%",
"params":
{
"%--parameter--%": "%--value--%",
"%--parameter--%": "%--value--%"
}
}Or it carries a plain list of values.
"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.
{
"request": { "action": "%--required-api-command--%", "params": { } },
"response": { "%--parameter--%": "%--value--%" }
}A success with nothing to return.
{
"request": { "action": "%--required-api-command--%", "params": { } },
"response": { "success": "%--message--%" }
}An error, with a description of what went wrong.
{
"request": { "action": "%--required-api-command--%", "params": { } },
"response": { "error": "%--message--%" }
}Success and error messages come back in English, whatever language your account uses.
PHP example
$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
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.
| Field | Limit |
|---|---|
| Full name | 2 to 64 characters |
| 6 to 128 characters | |
| Phone | up to 16 characters |
| Company details | up 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.
$data[ 'request' ] = json_encode( [
'key' => '%--api-key-from-your-profile--%',
'action' => 'profileGet',
'params' => [
'name',
'timezone',
],
] );Send an empty params array to get everything.
| Field | What it holds |
|---|---|
name | Your first and last name. Every webinar invitation is sent under this name. |
email | The address the account is registered to. |
timezone | Your 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. |
timemove | Whether the system follows daylight saving time. YES shifts your event times automatically, NO leaves them alone. |
language | Default interface language for webinars you schedule later. EN, DE, ES, FR, PL, RU or UK. |
gateway | The payment system on the account, either PAYSERA or PAYPAL. |
subscribe | YES when you are subscribed to service news, NO when you are not. |
company | Company 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.
$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.
$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.
$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.
| Parameter | What it does |
|---|---|
email | The moderator you are editing, identified by their current address. |
newEmail | The new email address. |
newName | The new full name. |
avatar | An 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.
| Parameter | What it does |
|---|---|
fields | The fields you want back. An empty array returns everything. |
alias | Limits the list to one webinar. |
search | Text 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.
$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.
$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.
| Parameter | What it does |
|---|---|
newemail | Replaces the address the attendee is stored under. |
name | Full name. |
phone | Phone number. |
company | Company. |
department | Department. |
city | City. |
born | Date 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.
| Parameter | What it does |
|---|---|
fields | Which fields to return. Optional, and without it you get only name and email. |
onPage | How many attendees to return per page. Defaults to 100. Leave it out to get the list unpaginated. |
page | Which page to return. |
alias | Restricts the list to one webinar. |
search | Text matched against attendee names and emails. |
order | ASC for ascending or DESC for descending. ASC by default. |
orderField | Sort by name, email or creation_date. name by default. |
type | ACTIVE, PENDING or BANNED. |
imported | How the attendee got into the system. YES for added by the account owner, NO for self-registered. |
webinars | An array of webinar aliases to test attendance against. |
webinarsOrder | IN returns attendees who joined those webinars, OUT returns those who did not. |
withEmail | YES returns only attendees who have an email address, NO only those without. Omit it to get everyone. |
group | The 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.
$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
| Command | What it does |
|---|---|
attendeesCreateGroup | Creates a group from a name and returns its group_id. |
attendeesGroupsRename | Renames a group, addressed by id, using newname. |
attendeesDeleteGroup | Deletes a group by id. |
attendeesGroupsList | Returns every group as id and name pairs. |
attendeesAssignToGroup | Adds an attendees array of emails to group_id. |
attendeesUnAssignFromGroup | Removes an attendees array of emails from group_id. |
attendeesCommonGroups | Takes 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.
$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.
$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.
| Parameter | What it does |
|---|---|
alias | The webinar you are editing. |
name | Title or topic. |
description | Extended description in HTML. Optional. |
start | Start date and time as YYYY-MM-DD HH:MM:SS, read in your profile time zone. |
duration | Length in minutes, up to 1439. |
close | YES for a private webinar, NO for a public one. |
language | Two-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. |
logo | Room logo as a Base64 image. |
logotype_url | Page opened when someone clicks the logo. |
banner | Room banner as a Base64 image. |
banner_url | Page opened when someone clicks the banner. |
settings | Everything below, passed as a nested array. |
These are the room settings.
| Setting | What it does |
|---|---|
webcamPosition | LEFT puts the moderator camera left of the chat, RIGHT puts it on the right. |
themebg | Room background colour in HEX, for example #f2f2f2. |
themetext | Icon and text colour in HEX, for example #d3d3d3. |
cameraSize | mini, middle or big. The event settings screen calls this "Webcam width", and "Chat width" for a meeting or an event that broadcasts from OBS. |
userList | YES shows attendees the list of who is in the room, NO hides it. |
flags | YES shows country flags in that list. It does nothing while userList is NO. |
buttonQuestion | YES shows the "Ask the question" item in the attendee's Feedback menu. The event settings screen calls this "Enable private chat with moderators". |
buttonVoice | YES 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". |
chat | YES gives attendees the chat field, NO takes it away so they cannot send messages. |
showBeforeTimer | YES shows the countdown to the start of the webinar. |
showLoginStart | YES shows the start time on the entry page. |
showLoginName | YES shows the webinar title on the entry page. |
showLoginModerators | YES lists the moderators on the entry page. |
showSocialButtons | YES shows social login buttons on the entry page. |
showLoginCounter | YES shows how many seats are still free. |
group | Collects everyone who registers into the group with this id. Use attendeesGroupsList to find it. |
loginfields | Which 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. |
beforeStartTime | How many minutes before the start attendees may enter, from 5 to 60. |
emailIdntLogin | YES turns on personalised entry links. |
emailIdntRecord | YES turns on personalised links for watching the recording. |
sendRecord | YES sends a link to the recording once the event ends. |
sendRecordTo | Who 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 => "".
| Mode | What it captures |
|---|---|
recordWebCams | Webcams only. |
recordArea | Webcams, microphones and the material display area. |
recordAreaNoChat | Webcams, microphones, chat and the material display area. |
recordWhole | The 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.
| Parameter | What it does |
|---|---|
fields | Which fields to return. Optional, and without it you get all of them. |
status | ACTIVE for webinars running or still to come, FINISHED for those that have ended. |
date | Returns 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.
| Type | When it goes out |
|---|---|
REGISTRATIONCONFIRM | When someone registers through the webinar entry page. |
3DAY | 3 days (72 hours) before the webinar. |
1DAY | 1 day (24 hours) before the webinar. |
1HOUR | 1 hour before the webinar. |
STARTED | To invited attendees who had not entered the room when the event began. |
FINISHED | After 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.
$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.
| Parameter | What it does |
|---|---|
alias | The webinar whose chat receives the message. |
bot | The email you gave a virtual moderator, or the id you got when creating a virtual attendee. |
text | The 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.