Invite member
curl --request POST \
--url https://neo.api.projectdiscovery.io/api/v1/teams/members/invite \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "jsmith@example.com",
"billable": true,
"project_access": "all",
"role": "member",
"spending_cap_credits": 1
}
'import requests
url = "https://neo.api.projectdiscovery.io/api/v1/teams/members/invite"
payload = {
"email": "jsmith@example.com",
"billable": True,
"project_access": "all",
"role": "member",
"spending_cap_credits": 1
}
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: 'jsmith@example.com',
billable: true,
project_access: 'all',
role: 'member',
spending_cap_credits: 1
})
};
fetch('https://neo.api.projectdiscovery.io/api/v1/teams/members/invite', 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://neo.api.projectdiscovery.io/api/v1/teams/members/invite",
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' => 'jsmith@example.com',
'billable' => true,
'project_access' => 'all',
'role' => 'member',
'spending_cap_credits' => 1
]),
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://neo.api.projectdiscovery.io/api/v1/teams/members/invite"
payload := strings.NewReader("{\n \"email\": \"jsmith@example.com\",\n \"billable\": true,\n \"project_access\": \"all\",\n \"role\": \"member\",\n \"spending_cap_credits\": 1\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://neo.api.projectdiscovery.io/api/v1/teams/members/invite")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"jsmith@example.com\",\n \"billable\": true,\n \"project_access\": \"all\",\n \"role\": \"member\",\n \"spending_cap_credits\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://neo.api.projectdiscovery.io/api/v1/teams/members/invite")
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\": \"jsmith@example.com\",\n \"billable\": true,\n \"project_access\": \"all\",\n \"role\": \"member\",\n \"spending_cap_credits\": 1\n}"
response = http.request(request)
puts response.read_body{
"member": {
"email": "jsmith@example.com",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"invited_at": "2023-11-07T05:31:56Z",
"accepted_at": "2023-11-07T05:31:56Z",
"billable": true,
"cap": {
"limit": 123,
"remaining": 123,
"used": 123
},
"created_at": "2023-11-07T05:31:56Z",
"invited_by": "jsmith@example.com",
"updated_at": "2023-11-07T05:31:56Z"
}
}{
"error": "Bad request",
"code": "user_spending_cap_reached",
"error_id": "<string>",
"kind": "forbidden request",
"message": "<string>"
}{
"error": "Bad request",
"code": "user_spending_cap_reached",
"error_id": "<string>",
"kind": "forbidden request",
"message": "<string>"
}{
"error": "Bad request",
"code": "user_spending_cap_reached",
"error_id": "<string>",
"kind": "forbidden request",
"message": "<string>"
}{
"error": "Bad request",
"code": "user_spending_cap_reached",
"error_id": "<string>",
"kind": "forbidden request",
"message": "<string>"
}{
"error": "Bad request",
"code": "user_spending_cap_reached",
"error_id": "<string>",
"kind": "forbidden request",
"message": "<string>"
}Teams
Invite member
Invite a new member to the team by email. The member can be an existing or new user.
POST
/
api
/
v1
/
teams
/
members
/
invite
Invite member
curl --request POST \
--url https://neo.api.projectdiscovery.io/api/v1/teams/members/invite \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "jsmith@example.com",
"billable": true,
"project_access": "all",
"role": "member",
"spending_cap_credits": 1
}
'import requests
url = "https://neo.api.projectdiscovery.io/api/v1/teams/members/invite"
payload = {
"email": "jsmith@example.com",
"billable": True,
"project_access": "all",
"role": "member",
"spending_cap_credits": 1
}
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: 'jsmith@example.com',
billable: true,
project_access: 'all',
role: 'member',
spending_cap_credits: 1
})
};
fetch('https://neo.api.projectdiscovery.io/api/v1/teams/members/invite', 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://neo.api.projectdiscovery.io/api/v1/teams/members/invite",
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' => 'jsmith@example.com',
'billable' => true,
'project_access' => 'all',
'role' => 'member',
'spending_cap_credits' => 1
]),
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://neo.api.projectdiscovery.io/api/v1/teams/members/invite"
payload := strings.NewReader("{\n \"email\": \"jsmith@example.com\",\n \"billable\": true,\n \"project_access\": \"all\",\n \"role\": \"member\",\n \"spending_cap_credits\": 1\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://neo.api.projectdiscovery.io/api/v1/teams/members/invite")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"jsmith@example.com\",\n \"billable\": true,\n \"project_access\": \"all\",\n \"role\": \"member\",\n \"spending_cap_credits\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://neo.api.projectdiscovery.io/api/v1/teams/members/invite")
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\": \"jsmith@example.com\",\n \"billable\": true,\n \"project_access\": \"all\",\n \"role\": \"member\",\n \"spending_cap_credits\": 1\n}"
response = http.request(request)
puts response.read_body{
"member": {
"email": "jsmith@example.com",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"invited_at": "2023-11-07T05:31:56Z",
"accepted_at": "2023-11-07T05:31:56Z",
"billable": true,
"cap": {
"limit": 123,
"remaining": 123,
"used": 123
},
"created_at": "2023-11-07T05:31:56Z",
"invited_by": "jsmith@example.com",
"updated_at": "2023-11-07T05:31:56Z"
}
}{
"error": "Bad request",
"code": "user_spending_cap_reached",
"error_id": "<string>",
"kind": "forbidden request",
"message": "<string>"
}{
"error": "Bad request",
"code": "user_spending_cap_reached",
"error_id": "<string>",
"kind": "forbidden request",
"message": "<string>"
}{
"error": "Bad request",
"code": "user_spending_cap_reached",
"error_id": "<string>",
"kind": "forbidden request",
"message": "<string>"
}{
"error": "Bad request",
"code": "user_spending_cap_reached",
"error_id": "<string>",
"kind": "forbidden request",
"message": "<string>"
}{
"error": "Bad request",
"code": "user_spending_cap_reached",
"error_id": "<string>",
"kind": "forbidden request",
"message": "<string>"
}Authorizations
BearerAuthApiKeyAuth
JWT authentication token
Body
application/json
Email of the member to invite
Whether this member consumes a paid subscription seat. false invites a non-premium member (no seat, zero credit access) - bypasses the seat limit but the member cannot run paid tasks until promoted.
Project access scope for the member. 'all' (default) grants access to every shared team project. 'restricted' grants access only to projects the member is explicitly added to. Ignored for admins (always 'all').
Available options:
all, restricted Role to assign to the member
Available options:
admin, member, viewer Optional credit cap to apply at invite time, closing the gap until an admin can PATCH /cap.
Required range:
x >= 0Response
Invitation sent
Show child attributes
Show child attributes
⌘I

