Create a meet workspace
Create a meet workspace — the parent resource that holds your SAML cert + private key for one Google Workspace's SSO config.
A meet workspace represents one Google Workspace whose Legacy SSO profile points at our /v2/meet-sso/* endpoints. The cert and key on the workspace are shared by every meet_login (Workspace user identity) you attach to it, mirroring how Google Workspace stores a single verification certificate per SSO profile.
Two creation paths, same response shape:
- Server-generated keypair — pass
generate_keypair: true. The server creates a self-signed RSA-2048 keypair with 10-year validity. Use this if you don't already have a SAML cert and want the simplest setup. - Bring-your-own keypair — pass
cert_pemandprivate_key_pemtogether. Use this if you want to manage your own crypto or already have a cert/key pair you trust.
Mutually exclusive: provide either generate_keypair: true OR (cert_pem + private_key_pem), not both.
Response always includes cert_pem so you can upload it to Google's Legacy SSO profile in your Workspace admin console. private_key_pem is never returned.
After creation, you must:
- Upload the returned
cert_pemto Google Admin Console → Security → Set up SSO with third-party IdP → Legacy SSO profile. - Set Sign-in URL to
https://api.meetingbaas.com/v2/meet-sso/sign-inand Sign-out URL tohttps://api.meetingbaas.com/v2/meet-sso/sign-outin the same SSO profile. Enable "Use a domain-specific issuer" and assign the SSO profile to all users. - Create one or more Workspace users that bots will sign in as, complete the "Welcome to Workspace" interactive login for each, and set language to "English (United States)".
- Add
meet_logins(one per Workspace user) referencing thisworkspace_id. - Optionally call
POST /v2/meet-workspaces/:workspace_id/verifyto run pre-flight checks.
Security: The cert and key are encrypted at rest using AES-256-GCM. private_key_pem is never echoed in any response — including subsequent GETs. If you need it back, you must rotate via PATCH.
Per-team uniqueness: Each domain may exist at most once per team. Attempting to create a duplicate returns 409.
Error Scenarios:
409 Conflict: A workspace for thisdomainalready exists.422 Unprocessable Entity: Invalid cert/key (parse failure or modulus mismatch); bothgenerate_keypairandcert_pemprovided; neither provided.
Authorization
ApiKeyAuth Your Meeting BaaS API key. Get one from your account settings.
In: header
Request Body
application/json
PEM-encoded X.509 certificate.
1 <= lengthGoogle Workspace domain (or subdomain) where the Legacy SSO profile is configured. Must be a domain you own with the SAML SSO endpoints pointing at our /v2/meet-sso/* URLs.
^[a-z0-9.-]+\.[a-z]{2,}$1 <= length <= 253Set to true to have the server generate a self-signed keypair. Mutually exclusive with cert_pem/private_key_pem.
User-friendly label for the workspace. Not unique — names can repeat within a team.
"Google Workspace"1 <= length <= 100PEM-encoded RSA private key matching cert_pem. Never echoed back in any response.
1 <= lengthResponse Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://api.meetingbaas.com/v2/meet-workspaces" \ -H "Content-Type: application/json" \ -d '{ "domain": "bots.acme.com" }'{
"data": {
"cert_pem": "string",
"created_at": "string",
"domain": "string",
"extra": {
"environment": "production",
"tenant_id": "t_123"
},
"failure_data": null,
"last_error_at": "string",
"last_error_message": "string",
"name": "string",
"state": "active",
"updated_at": "string",
"workspace_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
},
"success": true
}{
"code": "string",
"error": "string",
"message": "string",
"statusCode": 9007199254740991,
"success": false
}{
"code": "string",
"details": "string",
"error": "string",
"message": "string",
"statusCode": 9007199254740991,
"success": false
}{
"code": "string",
"details": "string",
"error": "string",
"message": "string",
"retryAfter": 9007199254740991,
"statusCode": 9007199254740991,
"success": false
}{
"code": "string",
"details": "string",
"error": "string",
"message": "string",
"statusCode": 9007199254740991,
"success": false
}