API reference/Client logins
Invite a client login
Try itEmails 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}/loginsAuthentication
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 -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"]}'{
"site_id": "SITE_ID",
"email": "dana@maplestreetbakery.test",
"permissions": [
"content.edit",
"media.upload",
"forms.view"
]
}{
"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
}