Invite people by email (bulk)
const url = 'https://shareout.site/v1/workspaces/example/members/invite';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"emails":"Ana <ana@example.com>, luis@example.com","role":"member","message":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://shareout.site/v1/workspaces/example/members/invite \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "emails": "Ana <ana@example.com>, luis@example.com", "role": "member", "message": "example" }'Owner or admin only. emails is an array or one string of pasted text — commas, semicolons, spaces, newlines, Name <email> and spreadsheet columns all work; tokens without @ are ignored, duplicates collapse. Up to 100 valid addresses per call (400 TOO_MANY_EMAILS beyond that — batch). New or not-yet-active people get a 7-day join link by email; people with an account are added and notified. Existing members keep their role (change roles with POST /members). Re-inviting a pending person retires their older links.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Workspace ID or slug.
Request Bodyrequired
Section titled “Request Bodyrequired”object
Optional personal note passed to the invite email.
Responses
Section titled “Responses”Per-email results
object
object
Legacy status; prefer code.
For invited — whether the invite email went out.
Join link, present only when the email did not go out. Share it by hand.
Count per code.
object
Example
{ "results": [ { "code": "invited", "status": "invited" } ]}Invalid request
object
Human-readable message.
Machine-readable error code.
Correlation id (also the X-Request-Id header). Quote it in support tickets.
Finer cause under code. For UNAUTHORIZED: missing, invalid, revoked or expired.
What to do next, in plain words.
The request field at fault.
Doc page for this error.
Present on 5xx — how to reach a human.
object
Example
{ "success": false, "support": { "how": "POST /v1/support/tickets", "include": [ "request_id" ] }}Access denied
object
Human-readable message.
Machine-readable error code.
Correlation id (also the X-Request-Id header). Quote it in support tickets.
Finer cause under code. For UNAUTHORIZED: missing, invalid, revoked or expired.
What to do next, in plain words.
The request field at fault.
Doc page for this error.
Present on 5xx — how to reach a human.
object
Example
{ "success": false, "support": { "how": "POST /v1/support/tickets", "include": [ "request_id" ] }}