Send Invitation
curl --request POST \
--url https://api.bunship.com/api/v1/organizations/{orgId}/invitations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "<string>",
"role": "<string>"
}
'import requests
url = "https://api.bunship.com/api/v1/organizations/{orgId}/invitations"
payload = {
"email": "<string>",
"role": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({email: '<string>', role: '<string>'})
};
fetch('https://api.bunship.com/api/v1/organizations/{orgId}/invitations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.bunship.com/api/v1/organizations/{orgId}/invitations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'email' => '<string>',
'role' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.bunship.com/api/v1/organizations/{orgId}/invitations"
payload := strings.NewReader("{\n \"email\": \"<string>\",\n \"role\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.bunship.com/api/v1/organizations/{orgId}/invitations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"<string>\",\n \"role\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bunship.com/api/v1/organizations/{orgId}/invitations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"<string>\",\n \"role\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"invitation": {
"id": "inv_abc123",
"organizationId": "org_cld2abc123def456",
"email": "newmember@example.com",
"role": "member",
"invitedBy": {
"id": "usr_cld2abc123def456",
"email": "owner@example.com",
"fullName": "John Doe"
},
"expiresAt": "2024-01-22T10:00:00Z",
"createdAt": "2024-01-15T10:00:00Z",
"status": "pending"
},
"inviteUrl": "https://app.bunship.com/invite/tok_abc123def456..."
}
Invitations
Send Invitation
Invite a user to join the organization
POST
/
api
/
v1
/
organizations
/
{orgId}
/
invitations
Send Invitation
curl --request POST \
--url https://api.bunship.com/api/v1/organizations/{orgId}/invitations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "<string>",
"role": "<string>"
}
'import requests
url = "https://api.bunship.com/api/v1/organizations/{orgId}/invitations"
payload = {
"email": "<string>",
"role": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({email: '<string>', role: '<string>'})
};
fetch('https://api.bunship.com/api/v1/organizations/{orgId}/invitations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.bunship.com/api/v1/organizations/{orgId}/invitations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'email' => '<string>',
'role' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.bunship.com/api/v1/organizations/{orgId}/invitations"
payload := strings.NewReader("{\n \"email\": \"<string>\",\n \"role\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.bunship.com/api/v1/organizations/{orgId}/invitations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"<string>\",\n \"role\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bunship.com/api/v1/organizations/{orgId}/invitations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"<string>\",\n \"role\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"invitation": {
"id": "inv_abc123",
"organizationId": "org_cld2abc123def456",
"email": "newmember@example.com",
"role": "member",
"invitedBy": {
"id": "usr_cld2abc123def456",
"email": "owner@example.com",
"fullName": "John Doe"
},
"expiresAt": "2024-01-22T10:00:00Z",
"createdAt": "2024-01-15T10:00:00Z",
"status": "pending"
},
"inviteUrl": "https://app.bunship.com/invite/tok_abc123def456..."
}
Sends an email invitation to join the organization with a specified role. The invitation expires after 7 days. Cannot send an invitation if the user is already a member or has a pending invitation. Requires the
invitations:create permission.
Auth
Requires a valid Bearer token with
invitations:create permission.Path Parameters
string
required
Organization identifier.
Request Body
string
required
Email address to invite. Must be a valid email format.
string
required
Role to assign when the invitation is accepted. One of
"admin", "member", or "viewer".Response
object
The created invitation object with
id, organizationId, email, role, invitedBy,
expiresAt, createdAt, and status.string
URL for the invitee to accept the invitation.
{
"invitation": {
"id": "inv_abc123",
"organizationId": "org_cld2abc123def456",
"email": "newmember@example.com",
"role": "member",
"invitedBy": {
"id": "usr_cld2abc123def456",
"email": "owner@example.com",
"fullName": "John Doe"
},
"expiresAt": "2024-01-22T10:00:00Z",
"createdAt": "2024-01-15T10:00:00Z",
"status": "pending"
},
"inviteUrl": "https://app.bunship.com/invite/tok_abc123def456..."
}
Errors
| Status | Code | Description |
|---|---|---|
400 | VALIDATION_ERROR | Invalid email address |
401 | AUTHENTICATION_ERROR | Missing or invalid Bearer token |
403 | AUTHORIZATION_ERROR | Insufficient permissions (invitations:create required) |
404 | NOT_FOUND | Organization not found |
409 | CONFLICT | User is already a member, or a pending invitation already exists for this email |
Example
curl -X POST https://api.bunship.com/api/v1/organizations/org_cld2abc123def456/invitations \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{
"email": "newmember@example.com",
"role": "member"
}'

