🐍 Python example
This example creates a meeting and attaches a clientSettingsOverride
POST module.
import hashlib
import json
import requests
from urllib.parse import urlencode
ENDPOINT = "https://bbb.example.com/bigbluebutton/api"
SECRET = "YOUR_SHARED_SECRET"
# 1) Query params for create (checksum uses ONLY the query string)
params = {
"name": "Demo with Overrides",
"meetingID": "demo-123",
"attendeePW": "ap",
"moderatorPW": "mp",
# enable per-call overrides if not globally enabled
"allowOverrideClientSettingsOnCreateCall": "true",
}
query = urlencode(params)
# 2) checksum = sha1("create" + query + secret)
checksum_src = f"create{query}{SECRET}".encode("utf-8")
checksum = hashlib.sha1(checksum_src).hexdigest()
url = f"{ENDPOINT}/create?{query}&checksum={checksum}"
# 3) The JSON override goes inside CDATA in the XML POST body
override = {
"public": {
"app": {"appName": "Greenlight", "helpLink": "greenlight.example.com"},
"defaultSettings": {
"application": {"autoJoin": True, "askForConfirmationOnLeave": False},
"user": {"userSettingsStorage": "sessionStorage",
"application": {"overrideLocale": "en"}},
},
}
}
json_str = json.dumps(override, separators=(",", ":"), ensure_ascii=False)
xml_body = f'<modules><module name="clientSettingsOverride"><![CDATA[{json_str}]]></module></modules>'
# 4) POST it
resp = requests.post(url, data=xml_body, headers={"Content-Type": "application/xml"}, timeout=30)
resp.raise_for_status()
print(resp.text) # XML response