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, or 2 to 128 for your own name in profileSet |
| 6 to 128 characters | |
| Phone | starts with + and the country code, such as +44 20 7946 0958, with no fixed length |
| Company details | up to 1000 bytes, so about 1000 characters of plain Latin text but only about 500 in Cyrillic |
| Attendee company, department, city and position | 2 to 128 characters |
Names accept any character except the backtick and ^~!@#$%^&*()+=[{}]\|:;,<>/?. Your own name, group names and virtual attendee names cannot contain a dot either. Companies, departments and cities take any character.
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 | The interface language of your account, as a lowercase code such as en, de, es, fr, pl, ru or uk. Webinars you schedule later open in this language. |
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 your payments as made by a legal entity, and invoices name these details as the payer instead of your name and email. |
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 except email, which cannot be changed through the API. It also takes password, from 6 to 64 characters.
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. Unlike the control panel, the API does not refuse the main moderator, so keep that address out of the 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, PNG and GIF 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 running or upcoming 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. |
skype and position are accepted as well.
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, from 5 to 1000. Leave it out to get the whole list at once. |
page | Which page to return, counting from 0. |
alias | Restricts the list to one webinar. |
search | Text matched against attendee names and emails. |
order | The list currently comes back in ascending order whatever you pass here. |
orderField | Sort by name, email or creation_date. name by default. |
type | ACTIVE returns attendees who can receive emails, PENDING those who unsubscribed or whose address bounced, and BANNED those blocked from webinar rooms. |
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, the default, returns those who were added to them but never came in. |
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, skype, company, department, city, born, creation_date, country and type. When you also pass alias, you can add notified (how many invitations have gone out) and link (the attendee's joining link).
attendeesAddToWebinar and attendeesRemoveFromWebinar
Attach attendees to a scheduled webinar, or take them off it. Both take alias plus an attendees array of email addresses. Only attendees who are already in your list and can receive emails are attached, and other addresses are skipped without an error, so create new attendees with attendeesCreate first.
$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, wrapped in one more array. |
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 that all of them belong to. |
attendeesUnbanned
Lifts a block from an attendee who was banned from a webinar room. Pass email with one address.
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 1440, which is exactly one 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 as plain text, up to 300 characters. HTML tags are removed. 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 1440. |
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 include 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, big or full. 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, skype, city, company, department and born, and the list must include name. 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 and microphones only. |
recordArea | Webcams, microphones, chat and the material display area. |
recordAreaNoChat | Webcams, microphones and the material display area, without the chat. |
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. Passing any of the three, even as NO, puts the recording into recordWhole mode 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 720p, paid plans below 500 attendees up to 1080p, and 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. The response holds alias, name, description, start, duration, close, language, google_id, yandex_id, created, status, records (the number of recordings made so far) and a settings block with the room switches, the theme, the entry page fields and the group.
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 of up to 2000 characters 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, or of the whole account when you leave out alias. Each one carries id, name, status (recording while the webinar is still being recorded, process while the file is being prepared and ready once it can be downloaded), 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 files in your storage, or only those of one webinar when you pass its alias. Pass type as well, because without it the list comes back empty. PRESENTATION returns presentations and images, and MEDIA returns video and audio files (.mp4, .mov, .webm, .mkv and .mp3) 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. A chat row holds the time, the name, the message text, a G or M marker for guest or moderator, and the guest's email. An attendance entry holds the name, the same G or M marker, the country, the email, the IP address, the first entry and last exit times, and uptime, the share of the webinar spent in the room in percent. For a permanent room, also pass date in YYYY-MM-DD format.
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. Chat locks, slides, video and webinarsFinish act through a virtual moderator, so put one in the room with webinarsAddModerToRoom first. Without it they return an error.
webinarsAddModerToRoom and webinarsRemoveModerFromRoom
webinarsAddModerToRoom puts a virtual moderator in a room. It takes alias and the email of a moderator you created with moderatorsCreate, and the room shows that moderator's 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--%',
],
] );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 attendee out again, addressed by alias and id, 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, up to 500 characters. |
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. webinarsStopPresentation 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. It can also play a recording by its id from webinarsRecordsList. webinarsStopVideo stops playback and takes only alias.
webinarsFinish
Ends the webinar and disconnects everyone in the room. It takes alias, and like the chat, slide and video commands it needs a virtual moderator in the room.
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 1440, which is exactly one 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 720p, paid plans below 500 attendees up to 1080p, and 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.