Skip to content
API reference/Client logins

Invite a client login

Try it

Emails someone at the client's business an invitation to edit this site, in your brand (never ours). The link works once, for that address, for 7 days; a new invitation replaces a waiting one. Default permissions: edit words and pictures, upload pictures, write blog posts, read form messages.

POST/api/v1/sites/{site_id}/logins

Authentication

An API key as Authorization: Bearer or x-api-key. It needs the clients:write scope — add and edit clients; invite and remove client logins.

clients:writeChanges the draft or a recordIdempotency-Key requiredMCP tool: invite_client_login

Parameters

Named placeholders go in the path; the rest in a JSON body.

site_idstringPath · required
The site's id.1 to 100 characters
emailstringBody · required
Their own email address.At most 200 characters
permissionsarray of stringBody · optional
What they may do: content.edit (Edit words and pictures), media.upload (Upload pictures), pages.manage (Add and arrange pages), design.edit (Change the design), blog.manage (Write blog posts), events.manage (Keep the events calendar), collections.manage (Keep the site's lists up to date), forms.view (Read form messages), seo.edit (Search settings), site.publish (Publish changes), store.manage (Run the online store), invoices.pay (See and pay invoices), donations.view (See donations), members.manage (Look after site members).

Response

201 with JSON on success (schema on the right). Errors use the standard envelope; a retry with the same Idempotency-Key gets the first answer back (how retries work).

curl
curl -X POST 'https://websites.workflowcorp.com/api/v1/sites/SITE_ID/logins' \
  -H "Authorization: Bearer $WEBSITEBUDDY_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"email":"dana@maplestreetbakery.test","permissions":["content.edit","media.upload","forms.view"]}'
Example arguments
{
  "site_id": "SITE_ID",
  "email": "dana@maplestreetbakery.test",
  "permissions": [
    "content.edit",
    "media.upload",
    "forms.view"
  ]
}
Response schema
{
  "type": "object",
  "properties": {
    "email": {
      "type": "string"
    },
    "permissions": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "mailed": {
      "type": "boolean",
      "description": "false = this server has no email set up: send the invitation from the console instead, where its link can be copied."
    },
    "sentence": {
      "type": "string"
    }
  },
  "required": [
    "email",
    "permissions",
    "mailed",
    "sentence"
  ],
  "additionalProperties": false
}