Build on Meetn
Provision accounts, rooms, hosts, and event registrations programmatically. The API is backwards-compatible with the original Meetn partner API.
Base URL
https://api.meetn.com/apiEvery endpoint is a POST with a JSON body. Paths below are relative to this base.
Authentication
Send your PartnerGUID in the body, plus either your partner_token or a request from an allow-listed IP. Existing partners keep their current credentials; contact us to issue a fresh API key.
Responses
Responses carry the status in the body: success is { "status": 200, "data": … }; errors are { "status": 4xx, "msg": [ … ] }. The HTTP status mirrors the body.
curl https://api.meetn.com/api/company/room/info \
-H 'content-type: application/json' \
-d '{ "PartnerGUID": "<your-guid>", "partner_token": "<your-token>", "Room": "acme" }'Rooms
Look up, check, and (with write access) create or rename rooms.
/company/room/infoAccount + plan details for a room.
RoomrequiredPartnerGUIDrequired— Your partner GUID.partner_tokenoptional— Your API token (or authenticate by allow-listed IP).
{
"status": 200,
"data": {
"id": "de502b29be",
"email": "[email protected]",
"room": "blockchainjp",
"room_uuid": "39a079dd7f",
"activation": "06/14/2024",
"plan": "pro"
}
}/company/room/name/availableIs a room name free? (Names are globally unique.)
RoomrequiredPartnerGUIDrequired— Your partner GUID.partner_tokenoptional— Your API token (or authenticate by allow-listed IP).
{ "status": 200, "msg": ["Room: acme is available."] }
// taken:
{ "status": 422, "msg": ["That room name is already taken."] }/company/contact/room/createClaim a room for an existing account.
EmailAddressrequired— Owner of the account.RoomrequiredPartnerGUIDrequired— Your partner GUID.partner_tokenoptional— Your API token (or authenticate by allow-listed IP).
{
"status": 200,
"data": [{ "id": "de502b29be", "email": "[email protected]", "room": "acme", "room_uuid": "…" }]
}/company/room/invite/resendRe-send the “Your room is ready” email (room link + sign-in) to the room’s owner — for when a customer loses the original. The same email is sent automatically when a room is created. Defaults to the account owner; pass EmailAddress to target a specific host of the room. Rate-limited per recipient.
RoomrequiredEmailAddressoptional— Defaults to the account owner; if set, must be a host of the room.PartnerGUIDrequired— Your partner GUID.partner_tokenoptional— Your API token (or authenticate by allow-listed IP).
{ "status": 200, "msg": ["Invite email sent."] }
// too many resends for this recipient recently:
{ "status": 429, "msg": ["This invite was re-sent too many times recently. Please try again later."] }/company/room/name/changeRename a room.
CurrentRoomNamerequiredNewRoomNamerequiredPartnerGUIDrequired— Your partner GUID.partner_tokenoptional— Your API token (or authenticate by allow-listed IP).
{
"status": 200,
"data": [{ "id": "…", "email": "[email protected]", "room": "acme-2", "room_uuid": "…" }]
}/company/room/plan/changeChange a room's plan among the licenses your account already owns, or downgrade to free to release a license. Does not purchase a license — if no license of the target plan is free, it returns an error.
RoomrequiredPlanrequired— free | pro | ultimatePartnerGUIDrequired— Your partner GUID.partner_tokenoptional— Your API token (or authenticate by allow-listed IP).
{ "status": 200, "msg": ["Room plan changed successfully."] }
// no free license of the target plan:
{ "status": 422, "msg": ["No pro license available. Downgrade another room to free a license, or contact support to add one."] }Accounts
Provision and look up accounts owned by your partner.
/company/contact/createCreate an account (workspace) + owner + optional room.
CompanyNamerequiredNameoptional— Owner display name.EmailAddressrequiredPlanrequired— free | pro | ultimateRoomoptional— Claim a room at creation.AffiliateIDoptionalBonusRoomsoptionalPartnerGUIDrequired— Your partner GUID.partner_tokenoptional— Your API token (or authenticate by allow-listed IP).
{
"status": 200,
"data": [{ "id": "…", "email": "[email protected]", "room": "acme", "room_uuid": "…" }]
}/company/contact/deactivateTurn off access when a customer's subscription ends. Reversible, and deletes nothing.
EmailAddressrequired— Account owner.Reasonoptional— Stored on the account for support.PartnerGUIDrequired— Your partner GUID.partner_tokenoptional— Your API token (or authenticate by allow-listed IP).
{ "status": 200, "msg": ["Account deactivated successfully."] }/company/contact/reactivateRestore a deactivated account when the customer resubscribes.
EmailAddressrequired— Account owner.PartnerGUIDrequired— Your partner GUID.partner_tokenoptional— Your API token (or authenticate by allow-listed IP).
{ "status": 200, "msg": ["Account reactivated successfully."] }/company/get/email/roomAll rooms for an account, by owner email.
EmailAddressrequiredPartnerGUIDrequired— Your partner GUID.partner_tokenoptional— Your API token (or authenticate by allow-listed IP).
{
"status": 200,
"data": [{
"id": "de502b29be", "email": "[email protected]",
"rooms": [{ "room": "blockchainjp", "room_id": "39a079dd7f", "plan": "pro", "created": "…" }]
}]
}/company/get/room/emailOwner email for a room.
RoomrequiredPartnerGUIDrequired— Your partner GUID.partner_tokenoptional— Your API token (or authenticate by allow-listed IP).
{ "status": 200, "data": { "id": "…", "email": "[email protected]", "room": "blockchainjp", "room_uuid": "…" } }/company/get/id/roomAll rooms for an account, by account id.
idrequiredPartnerGUIDrequired— Your partner GUID.partner_tokenoptional— Your API token (or authenticate by allow-listed IP).
{ "status": 200, "data": [{ "id": "…", "email": "…", "rooms": [ … ] }] }/company/get/id/emailOwner email for an account id.
idrequiredPartnerGUIDrequired— Your partner GUID.partner_tokenoptional— Your API token (or authenticate by allow-listed IP).
{ "status": 200, "data": { "id": "…", "email": "[email protected]" } }/company/get/roomsThe owning account + its rooms, by room uuid.
room_uuidrequiredPartnerGUIDrequired— Your partner GUID.partner_tokenoptional— Your API token (or authenticate by allow-listed IP).
{ "status": 200, "data": [{ "id": "…", "email": "…", "rooms": [ … ] }] }/company/get/emailOwner email for a room uuid.
room_uuidrequiredPartnerGUIDrequired— Your partner GUID.partner_tokenoptional— Your API token (or authenticate by allow-listed IP).
{ "status": 200, "data": { "id": "…", "email": "…", "room": "…", "room_uuid": "…" } }Hosts & admins
List and (with write access) grant or remove per-room host/admin access.
/company/room/permission/listOwner, admins, and hosts assigned to a room.
RoomrequiredPartnerGUIDrequired— Your partner GUID.partner_tokenoptional— Your API token (or authenticate by allow-listed IP).
{
"status": 200,
"owner": { "name": "Owner", "email": "[email protected]" },
"data": [{ "name": "…", "email": "…", "owner": "N", "admin": "N", "host": "Y", "guest": "N", "type": "permission", "phone": null }],
"records": 1
}/company/room/permission/createGrant host or admin on a room.
EmailAddressrequiredRoomrequiredPermissionrequired— host | adminNameoptionalPartnerGUIDrequired— Your partner GUID.partner_tokenoptional— Your API token (or authenticate by allow-listed IP).
{ "status": 200, "msg": ["Room permission added successfully."] }/company/room/permission/deleteRemove host/admin from a room.
EmailAddressrequiredRoomrequiredPartnerGUIDrequired— Your partner GUID.partner_tokenoptional— Your API token (or authenticate by allow-listed IP).
{ "status": 200, "msg": ["Room permission deleted successfully."] }Events & registrations
Create and list events, register attendees with referral tracking, and pull attendance reports.
/event/createSchedule a one-off event on a room from your own platform.
roomrequiredstart_utcrequired— ISO 8601; must be in the future.nameoptionalduration_minutesoptional— Default 60.timezoneoptional— IANA name for display; default UTC.registrationoptional— "1"/"true" requires attendees to register before joining.PartnerGUIDrequired— Your partner GUID.partner_tokenoptional— Your API token (or authenticate by allow-listed IP).
{ "status": 200, "event_id": "…", "event_url": "https://meetn.com/j/…", "name": "…", "start_utc": "…", "duration_minutes": 60, "timezone": "UTC", "registration": false }/list/events/recording/by-date-rangeEvents/recordings for a room within a window.
roomrequiredstart_daterequired— ISO 8601end_daterequired— ISO 8601PartnerGUIDrequired— Your partner GUID.partner_tokenoptional— Your API token (or authenticate by allow-listed IP).
{
"status": 200,
"data": [{ "event_id": "…", "public_name": "…", "private_name": "…", "timezone": "America/New_York", "start_utc": "…", "status": "Completed" }]
}/list/event/registrantsRegistrant list for an event.
event_idrequiredPartnerGUIDrequired— Your partner GUID.partner_tokenoptional— Your API token (or authenticate by allow-listed IP).
{
"status": 200,
"data": [{ "registration_id": "…", "name": "…", "email": "…", "phone": "…", "phone_prefix": null, "created": "…", "comment": "", "faid": null, "ourl": null }]
}/register/user/eventRegister an attendee, optionally with referral tracking. The returned join_url is the attendee's personal event link - use it as their Join button; alternatively append ?faid=<faid> to the plain event URL. Re-registering the same email updates the registration: fields you send are set, fields you omit keep their previous values.
event_idrequirednamerequiredemailrequiredfaidoptional— Your own attendee id (string or number); rides the join link.ourloptional— Override URL (http/https) - the referral-link button shows this attendee THIS link when the referral gate passes.referrer_emailoptional— The promoter who referred this attendee.referrer_prooptional— "1"/"true" when the referrer is pro on your platform.PartnerGUIDrequired— Your partner GUID.partner_tokenoptional— Your API token (or authenticate by allow-listed IP).
{ "status": 200, "registration_id": "…", "event_id": "…", "name": "…", "email": "…", "join_url": "https://meetn.com/j/…?r=…", "referrer_paying": true, "created": "…" }/list/event/attendancePer-attendee engagement log (entered/exited/chatted/raisedhand) with your faid attribution, plus minute-by-minute attendee counts. Works mid-event and after; hosts and staff are excluded.
event_idrequiredPartnerGUIDrequired— Your partner GUID.partner_tokenoptional— Your API token (or authenticate by allow-listed IP).
{
"status": 200,
"event_status": "ended",
"session_started_utc": "…",
"session_ended_utc": "…",
"attendees": [{ "name": "…", "faid": "…", "email": "…", "registration_id": "…", "entered": "…", "exited": "…", "events": [{ "code": "entered", "at": "…" }] }],
"minute_counts": [{ "minute": "…", "attendee_count": 42 }]
}/event/webhookurlStore a webhook URL for an event.
event_idrequiredwebhookurlrequiredPartnerGUIDrequired— Your partner GUID.partner_tokenoptional— Your API token (or authenticate by allow-listed IP).
{ "status": 200, "data": [] }Not available
These legacy endpoints no longer have an equivalent. They return a clear 422 so existing integrations fail gracefully.
/company/contact/reset/passwordSign-in is passwordless (magic link) — there is no password to reset./user/cancel/accountThis verb meant a permanent delete. Use /company/contact/deactivate instead, which turns off access without destroying the customer's data.