curl --request POST \
--url https://api.vomo.org/v1/users \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com",
"birthday": "1975-12-01",
"gender": "M",
"password": "password1234",
"org": "vomo",
"invite_code": "vomoinvitationcode",
"phone": "555-867-5309",
"role": "VOLUNTEER"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
first_name: 'John',
last_name: 'Doe',
email: 'john.doe@example.com',
birthday: '1975-12-01',
gender: 'M',
password: 'password1234',
org: 'vomo',
invite_code: 'vomoinvitationcode',
phone: '555-867-5309',
role: 'VOLUNTEER'
})
};
fetch('https://api.vomo.org/v1/users', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.vomo.org/v1/users"
payload = {
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com",
"birthday": "1975-12-01",
"gender": "M",
"password": "password1234",
"org": "vomo",
"invite_code": "vomoinvitationcode",
"phone": "555-867-5309",
"role": "VOLUNTEER"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)using RestSharp;
var options = new RestClientOptions("https://api.vomo.org/v1/users");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
request.AddJsonBody("{\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john.doe@example.com\",\n \"birthday\": \"1975-12-01\",\n \"gender\": \"M\",\n \"password\": \"password1234\",\n \"org\": \"vomo\",\n \"invite_code\": \"vomoinvitationcode\",\n \"phone\": \"555-867-5309\",\n \"role\": \"VOLUNTEER\"\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.vomo.org/v1/users",
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([
'first_name' => 'John',
'last_name' => 'Doe',
'email' => 'john.doe@example.com',
'birthday' => '1975-12-01',
'gender' => 'M',
'password' => 'password1234',
'org' => 'vomo',
'invite_code' => 'vomoinvitationcode',
'phone' => '555-867-5309',
'role' => 'VOLUNTEER'
]),
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;
}HttpResponse<String> response = Unirest.post("https://api.vomo.org/v1/users")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john.doe@example.com\",\n \"birthday\": \"1975-12-01\",\n \"gender\": \"M\",\n \"password\": \"password1234\",\n \"org\": \"vomo\",\n \"invite_code\": \"vomoinvitationcode\",\n \"phone\": \"555-867-5309\",\n \"role\": \"VOLUNTEER\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vomo.org/v1/users")
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 \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john.doe@example.com\",\n \"birthday\": \"1975-12-01\",\n \"gender\": \"M\",\n \"password\": \"password1234\",\n \"org\": \"vomo\",\n \"invite_code\": \"vomoinvitationcode\",\n \"phone\": \"555-867-5309\",\n \"role\": \"VOLUNTEER\"\n}"
response = http.request(request)
puts response.read_bodyconst url = 'https://api.vomo.org/v1/users';
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
first_name: 'John',
last_name: 'Doe',
email: 'john.doe@example.com',
birthday: '1975-12-01',
gender: 'M',
password: 'password1234',
org: 'vomo',
invite_code: 'vomoinvitationcode',
phone: '555-867-5309',
role: 'VOLUNTEER'
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));{
"code": "200",
"message": "User updated.",
"data": {
"type": "user",
"id": "8205",
"first_name": "Tyler",
"last_name": "Reyes",
"full_name": "Tyler Reyes",
"email": "tyler.reyes@example.org",
"address": "321 Pine Rd, McKinney, TX 75069, USA",
"phone": "(555) 012-0105",
"birthday": "1995-06-30",
"gender": "M",
"created_at": "2025-11-04T08:00:00+00:00",
"updated_at": "2025-11-19T10:15:00+00:00",
"user_status": "VERIFIED",
"membership_status": "ACCEPTED",
"membership_role": "VOLUNTEER",
"participations": [],
"profile_field_values": []
}
}{
"code": "201",
"message": "User created.",
"data": {
"type": "user",
"id": "8311",
"first_name": "Margaret",
"last_name": "Williams",
"full_name": "Margaret Williams",
"email": "margaret.williams@example.org",
"address": "654 Elm Ct, McKinney, TX 75069, USA",
"phone": "(555) 012-0111",
"birthday": "1975-12-01",
"gender": "F",
"created_at": "2025-11-20T13:00:00+00:00",
"updated_at": "2025-11-20T13:00:00+00:00",
"user_status": "VERIFIED",
"membership_status": "ACCEPTED",
"membership_role": "VOLUNTEER",
"participations": [],
"profile_field_values": []
}
}{
"code": 400,
"message": "The organization provided was not found."
}{
"error": {
"code": 401,
"message": "No API key provided"
}
}{
"message": "The given data was invalid.",
"errors": {
"email": [
"The email field is required."
],
"password": [
"The password field is required."
]
}
}{
"message": "Too Many Attempts."
}{
"message": "Server Error"
}Create / Update User
Upserts a user by email address. If no user with the given email exists, a new user is created and a 201 response is returned. If a user with that email already exists, their record is updated and a 200 response is returned. Note: if the user belongs to an organization other than your own organization or one of its child organizations, their core profile fields (name, email, password) cannot be modified — only their membership role within your organization can be adjusted.
curl --request POST \
--url https://api.vomo.org/v1/users \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com",
"birthday": "1975-12-01",
"gender": "M",
"password": "password1234",
"org": "vomo",
"invite_code": "vomoinvitationcode",
"phone": "555-867-5309",
"role": "VOLUNTEER"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
first_name: 'John',
last_name: 'Doe',
email: 'john.doe@example.com',
birthday: '1975-12-01',
gender: 'M',
password: 'password1234',
org: 'vomo',
invite_code: 'vomoinvitationcode',
phone: '555-867-5309',
role: 'VOLUNTEER'
})
};
fetch('https://api.vomo.org/v1/users', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.vomo.org/v1/users"
payload = {
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com",
"birthday": "1975-12-01",
"gender": "M",
"password": "password1234",
"org": "vomo",
"invite_code": "vomoinvitationcode",
"phone": "555-867-5309",
"role": "VOLUNTEER"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)using RestSharp;
var options = new RestClientOptions("https://api.vomo.org/v1/users");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
request.AddJsonBody("{\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john.doe@example.com\",\n \"birthday\": \"1975-12-01\",\n \"gender\": \"M\",\n \"password\": \"password1234\",\n \"org\": \"vomo\",\n \"invite_code\": \"vomoinvitationcode\",\n \"phone\": \"555-867-5309\",\n \"role\": \"VOLUNTEER\"\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.vomo.org/v1/users",
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([
'first_name' => 'John',
'last_name' => 'Doe',
'email' => 'john.doe@example.com',
'birthday' => '1975-12-01',
'gender' => 'M',
'password' => 'password1234',
'org' => 'vomo',
'invite_code' => 'vomoinvitationcode',
'phone' => '555-867-5309',
'role' => 'VOLUNTEER'
]),
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;
}HttpResponse<String> response = Unirest.post("https://api.vomo.org/v1/users")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john.doe@example.com\",\n \"birthday\": \"1975-12-01\",\n \"gender\": \"M\",\n \"password\": \"password1234\",\n \"org\": \"vomo\",\n \"invite_code\": \"vomoinvitationcode\",\n \"phone\": \"555-867-5309\",\n \"role\": \"VOLUNTEER\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vomo.org/v1/users")
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 \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john.doe@example.com\",\n \"birthday\": \"1975-12-01\",\n \"gender\": \"M\",\n \"password\": \"password1234\",\n \"org\": \"vomo\",\n \"invite_code\": \"vomoinvitationcode\",\n \"phone\": \"555-867-5309\",\n \"role\": \"VOLUNTEER\"\n}"
response = http.request(request)
puts response.read_bodyconst url = 'https://api.vomo.org/v1/users';
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
first_name: 'John',
last_name: 'Doe',
email: 'john.doe@example.com',
birthday: '1975-12-01',
gender: 'M',
password: 'password1234',
org: 'vomo',
invite_code: 'vomoinvitationcode',
phone: '555-867-5309',
role: 'VOLUNTEER'
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));{
"code": "200",
"message": "User updated.",
"data": {
"type": "user",
"id": "8205",
"first_name": "Tyler",
"last_name": "Reyes",
"full_name": "Tyler Reyes",
"email": "tyler.reyes@example.org",
"address": "321 Pine Rd, McKinney, TX 75069, USA",
"phone": "(555) 012-0105",
"birthday": "1995-06-30",
"gender": "M",
"created_at": "2025-11-04T08:00:00+00:00",
"updated_at": "2025-11-19T10:15:00+00:00",
"user_status": "VERIFIED",
"membership_status": "ACCEPTED",
"membership_role": "VOLUNTEER",
"participations": [],
"profile_field_values": []
}
}{
"code": "201",
"message": "User created.",
"data": {
"type": "user",
"id": "8311",
"first_name": "Margaret",
"last_name": "Williams",
"full_name": "Margaret Williams",
"email": "margaret.williams@example.org",
"address": "654 Elm Ct, McKinney, TX 75069, USA",
"phone": "(555) 012-0111",
"birthday": "1975-12-01",
"gender": "F",
"created_at": "2025-11-20T13:00:00+00:00",
"updated_at": "2025-11-20T13:00:00+00:00",
"user_status": "VERIFIED",
"membership_status": "ACCEPTED",
"membership_role": "VOLUNTEER",
"participations": [],
"profile_field_values": []
}
}{
"code": 400,
"message": "The organization provided was not found."
}{
"error": {
"code": 401,
"message": "No API key provided"
}
}{
"message": "The given data was invalid.",
"errors": {
"email": [
"The email field is required."
],
"password": [
"The password field is required."
]
}
}{
"message": "Too Many Attempts."
}{
"message": "Server Error"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
User to create / update
Request body for creating or updating a user.
The first name of the user
"John"
The last name of the user
"Doe"
The email for the user
"john.doe@example.com"
The birthday for the user
"1975-12-01"
The gender for the user
M, F, N "M"
The user's password. Must be at least 10 characters and include letters and numbers.
"password1234"
Optional. The slug of the organization to assign the user to. Defaults to your partner organization. Must be your own organization or one of its child organizations.
"vomo"
Optional. The invitation code for the target organization. When supplied, this takes precedence over the org field and determines which organization the user is added to.
"vomoinvitationcode"
Optional. The phone number for the user.
"555-867-5309"
Optional. The user's role within your organization. Defaults to VOLUNTEER when not provided. Possible values: VOLUNTEER — standard volunteer member; ORGANIZER — can create and manage projects and events; ADMIN — organization administrator with full management access.
VOLUNTEER, ORGANIZER, ADMIN "VOLUNTEER"
Was this page helpful?