API v2/POST

Create a meet login

Create a meet login — a Google Workspace user identity attached to a parent meet workspace.

Each login represents one Workspace user that bots can sign in as. Many logins can share one workspace; they all use the workspace's cert/key for SAML signing. Round-robin assignment picks the least-loaded active login when a bot is dispatched with meet_config.email_group (or credential_id) on POST /v2/bots.

Prerequisites: Create a meet workspace first via POST /v2/meet-workspaces. Pass the returned workspace_id here.

Domain Validation: The email must belong to the parent workspace's domain (or a subdomain). For example, if the workspace domain is bots.acme.com, valid emails include bot1@bots.acme.com or bot2@dev.bots.acme.com, but not bot1@acme.com. The same rule applies to email_group if provided.

Email Group (optional but encouraged): Set email_group to a Google Group address that contains the bot users as members. When you put this group address on a calendar invite, the assigned bot lands in Meet's verified queue and bypasses the waiting room. Logins sharing the same email_group form one round-robin pool.

Per-team Uniqueness on Email: Each email may exist at most once per team. Attempting to register the same email twice returns 409.

Concurrency: Each login supports up to 20 concurrent SSO sessions by default. When a login hits its capacity, the round-robin assigner skips it and tries the next one in the pool. If all logins in a pool are saturated, the bot creation fails with MEET_LOGIN_UNAVAILABLE (or falls back to anonymous, depending on your fallback setting).

Error Scenarios:

  • 404 Not Found: workspace_id is unknown or does not belong to your team.
  • 409 Conflict: A login for this email already exists.
  • 422 Unprocessable Entity: email or email_group domain does not match the parent workspace's domain.
POST
/v2/meet-logins

Authorization

ApiKeyAuth
x-meeting-baas-api-key<token>

Your Meeting BaaS API key. Get one from your account settings.

In: header

Request Body

application/json

email*string

Email of the Google Workspace user this login signs in as. Domain must match the parent workspace's domain.

Match^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
Formatemail
Lengthlength <= 254
email_group?string

Optional Google Group address used for round-robin pooling. Logins sharing the same email_group form one round-robin pool. If you put this group on calendar invites, the assigned bot will land in the verified queue and bypass the waiting room.

Match^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
Formatemail
Lengthlength <= 254
extra?|
name*string

User-friendly label for this credential. Not unique — names can repeat within a team.

Length1 <= length <= 100
workspace_id*string

UUID of the parent meet_workspace. Create one via POST /v2/meet-workspaces first.

Match^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://api.meetingbaas.com/v2/meet-logins" \  -H "Content-Type: application/json" \  -d '{    "email": "bot1@bots.customer.com",    "name": "Production Bot Pool — Account 1",    "workspace_id": "f0e1d2c3-b4a5-6789-0123-456789abcdef"  }'
{
  "data": {
    "active_session_count": 9007199254740991,
    "created_at": "string",
    "credential_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "email": "string",
    "email_group": "string",
    "extra": {
      "environment": "production",
      "internal_user_id": "u_123"
    },
    "failure_data": null,
    "last_error_at": "string",
    "last_error_message": "string",
    "last_used_at": "string",
    "name": "string",
    "state": "active",
    "updated_at": "string",
    "workspace_id": "string"
  },
  "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",
  "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
}