GoRunner docs
Search or askSearch⌘K

Give a person a role

PUT/api/embed/v1/accounts/{accountId}/members/{userId}

Gives a person a role in one of an account’s workspaces.

Needs a partner key: Authorization: Bearer gre_…, from Platform › Partner keys. Call it from your server only.

Embed · Self-hosted with an Embed license

Parameters

Path

accountIdRequired · string

Your ID for the customer’s account: 1 to 255 bytes of UTF-8, case-sensitive. URL-encode it: it may contain /.

userIdRequired · string

Your ID for the person.

Body

roleRequired · string

viewer, operator or editor.

workspaceIdOptional · string

Your workspace ID. Left out: the default workspace.

userOptional · object

The person’s name and email, to create someone new.

When the role changes

The person’s older sessions in that workspace end (role_changed) and come back at the new role.

Responses

  • 200OK

    Updated.

  • 201Created

    The membership is new.

  • A field isn’t valid. details.field names it.

  • No such account, workspace or person. Send user.name to create the person.

  • The account is deleted. Restore it first, within 30 days.

  • Something failed on the installation’s side. Try again.

Any call can also answer: 401 UNAUTHORIZED · 403 EMBED_NOT_LICENSED · 403 IP_NOT_ALLOWED · 413 PAYLOAD_TOO_LARGE · 415 INVALID_CONTENT_TYPE · 429 RATE_LIMITED · 503 BUSY. See Errors.

Request

GORUNNER="https://automations.example.com"
GORUNNER_EMBED_KEY="YOUR_PARTNER_KEY"  # gre_…
ACCOUNT_ID="acct-bakery"
USER_ID="ada-123"

URL="$GORUNNER/api/embed/v1/accounts/$ACCOUNT_ID/"
URL="${URL}members/$USER_ID"
curl -X PUT "$URL" \
  -H "Authorization: Bearer $GORUNNER_EMBED_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "role": "operator",
    "workspaceId": "ws-orders"
  }'

Response · 200 OK

json
{
  "data": {
    "user": {
      "id": "ada-123",
      "name": "Ada Lovelace",
      "email": "ada@bakery.example"
    },
    "workspace": {
      "id": "ws-orders",
      "default": false
    },
    "role": "operator",
    "createdAt": "2026-10-22T10:00:00Z"
  }
}
Every field

Body

roleRequired · string

One of viewer, operator, editor.

workspaceIdOptional · string

Omitted = the account’s default workspace (default names it too); the empty value is refused.

userOptional · object
nameOptional · string

Required to create. Left out or null: left as it is.

emailOptional · string or null

Contact data only. Left out: left as it is. Null or empty clears it. Must look like an email address.

Response · 200 OK, 201 Created

dataobject
userobject
idstring
namestring
emailstring or null
workspaceobject
idstring or null

The partner’s workspace id; null for the default workspace.

defaultboolean
rolestring

One of viewer, operator, editor.

createdAttime