Send an invitation
Invites an email address to join as a member (the default) or admin, and emails them the link, which this response also returns.
Inviting an address again replaces its pending invitation. An app limited to reading cannot invite.
Guide: Members and roles
A project secret key: vh_sk_... for production, vh_sk_test_... for test. Keep it on your servers.
In: header
Path parameters
The organization's id, org_....
Request body
application/json
TypeScript definitions
Use the request body type in TypeScript.
The email address to invite; inviting it again replaces its pending invitation.
2 <= lengthThe role the person gets on accepting, member or admin. Defaults to member.
Examples
curl -X POST "https://api.voidhash.com/api/v1/organizations/org_w5xk2e7q0lzv3n8b1c4d6f9g/invitations" \ -H "Authorization: Bearer vh_sk_..." \ -H "Content-Type: application/json" \ -d '{ "email": "alan@example.com", "role": "member" }'{ "id": "inv_c7v0b3n6m9k2j5h8g1f4d7s0", "organizationId": "org_w5xk2e7q0lzv3n8b1c4d6f9g", "email": "alan@example.com", "role": "member", "inviterId": "user_k3m8q1z6v9c2x5b7n4w0e8r1", "createdAt": "2026-03-14T09:40:00.000Z", "expiresAt": "2026-03-21T09:40:00.000Z", "inviteUrl": "https://voidhash.com/auth/invite?token=..."}{ "error": { "type": "invalid_request", "code": "invalid_body", "message": "The request body is invalid: Missing key\n at [\"email\"]" }}{ "error": { "type": "unauthenticated", "code": "invalid_api_key", "message": "This secret key is not valid." }}{ "error": { "type": "permission_denied", "code": "permission_denied", "message": "Insufficient permissions." }}{ "error": { "type": "not_found", "code": "organization_not_found", "message": "There is no organization org_w5xk2e7q0lzv3n8b1c4d6f9g, or this credential cannot use it.", "param": "organizationId" }}{ "error": { "type": "conflict", "code": "already_member", "message": "grace@example.com already belongs to this organization.", "param": "email" }}{ "error": { "type": "rate_limited", "code": "invitation_limit_reached", "message": "This organization sent 50 invitations in the last 24 hours, the most a day allows. Try again later." }}{ "error": { "type": "internal", "code": "internal_error", "message": "Something went wrong on our side. Try again, and contact support with the Request-Id header if it keeps failing." }}Response body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
Errors
| Status | type | code | When |
|---|---|---|---|
| 409 | conflict | already_member | When that person already belongs to the organization. |
| 429 | rate_limited | invitation_limit_reached | Once the organization sent 50 invitations, or you sent 100, in the last 24 hours; revoked invitations count. |
It can also fail with the errors every operation shares, such as unauthenticated; see Errors.
More in Invitations
- List invitations
GET - Retrieve an invitation
GET - Revoke an invitation
DELETE
Something wrong or missing on this page? Tell us by email or on Discord.