Assign a badge to a user
curl --request POST \
--url https://app.orgo.space/api/v1/badge_users \
--header 'Api-Token: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"badge": "/api/v1/badges/1",
"user": "/api/v1/users/1",
"dateCreated": "2026-01-15T10:30:00+00:00",
"commentUser": "Confirmed by phone — will arrive at 10am.",
"commentMaster": "Confirmed by phone — will arrive at 10am.",
"status": 42,
"owner": "/api/v1/users/1"
}
'import requests
url = "https://app.orgo.space/api/v1/badge_users"
payload = {
"badge": "/api/v1/badges/1",
"user": "/api/v1/users/1",
"dateCreated": "2026-01-15T10:30:00+00:00",
"commentUser": "Confirmed by phone — will arrive at 10am.",
"commentMaster": "Confirmed by phone — will arrive at 10am.",
"status": 42,
"owner": "/api/v1/users/1"
}
headers = {
"Api-Token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Api-Token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
badge: '/api/v1/badges/1',
user: '/api/v1/users/1',
dateCreated: '2026-01-15T10:30:00+00:00',
commentUser: 'Confirmed by phone — will arrive at 10am.',
commentMaster: 'Confirmed by phone — will arrive at 10am.',
status: 42,
owner: '/api/v1/users/1'
})
};
fetch('https://app.orgo.space/api/v1/badge_users', 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://app.orgo.space/api/v1/badge_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([
'badge' => '/api/v1/badges/1',
'user' => '/api/v1/users/1',
'dateCreated' => '2026-01-15T10:30:00+00:00',
'commentUser' => 'Confirmed by phone — will arrive at 10am.',
'commentMaster' => 'Confirmed by phone — will arrive at 10am.',
'status' => 42,
'owner' => '/api/v1/users/1'
]),
CURLOPT_HTTPHEADER => [
"Api-Token: <api-key>",
"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://app.orgo.space/api/v1/badge_users"
payload := strings.NewReader("{\n \"badge\": \"/api/v1/badges/1\",\n \"user\": \"/api/v1/users/1\",\n \"dateCreated\": \"2026-01-15T10:30:00+00:00\",\n \"commentUser\": \"Confirmed by phone — will arrive at 10am.\",\n \"commentMaster\": \"Confirmed by phone — will arrive at 10am.\",\n \"status\": 42,\n \"owner\": \"/api/v1/users/1\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Api-Token", "<api-key>")
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://app.orgo.space/api/v1/badge_users")
.header("Api-Token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"badge\": \"/api/v1/badges/1\",\n \"user\": \"/api/v1/users/1\",\n \"dateCreated\": \"2026-01-15T10:30:00+00:00\",\n \"commentUser\": \"Confirmed by phone — will arrive at 10am.\",\n \"commentMaster\": \"Confirmed by phone — will arrive at 10am.\",\n \"status\": 42,\n \"owner\": \"/api/v1/users/1\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.orgo.space/api/v1/badge_users")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Api-Token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"badge\": \"/api/v1/badges/1\",\n \"user\": \"/api/v1/users/1\",\n \"dateCreated\": \"2026-01-15T10:30:00+00:00\",\n \"commentUser\": \"Confirmed by phone — will arrive at 10am.\",\n \"commentMaster\": \"Confirmed by phone — will arrive at 10am.\",\n \"status\": 42,\n \"owner\": \"/api/v1/users/1\"\n}"
response = http.request(request)
puts response.read_body{
"id": 42,
"badge": {
"id": 42,
"name": "Boston Chapter",
"type": {
"id": 42,
"name": "Boston Chapter"
},
"translation": "string",
"logo": "https://cdn.orgo.space/tenants/acme/logo.png",
"referrals": 42,
"kind": "STANDARD",
"userType": {
"id": 42,
"name": "Boston Chapter"
},
"steps": [
{
"id": 42,
"position": 42,
"title": "Volunteer Coordinator",
"description": "Quarterly chapter meeting open to all members.",
"translation": "string",
"isOptional": true,
"isArchived": false
}
]
},
"user": {
"id": 42,
"firstName": "James",
"lastName": "Patterson",
"localCenter": {
"alias": "string",
"id": 42,
"name": "Boston Chapter"
},
"localCenterParent": "/api/v1/units/1",
"fullName": "James Patterson",
"logo": "https://cdn.orgo.space/tenants/acme/logo.png"
},
"dateCreated": "2026-01-15T10:30:00+00:00",
"commentUser": "Confirmed by phone — will arrive at 10am.",
"commentMaster": "Confirmed by phone — will arrive at 10am.",
"status": 42,
"owner": {
"id": 42,
"firstName": "James",
"lastName": "Patterson",
"localCenter": {
"alias": "string",
"id": 42,
"name": "Boston Chapter"
},
"localCenterParent": "/api/v1/units/1",
"fullName": "James Patterson",
"logo": "https://cdn.orgo.space/tenants/acme/logo.png"
},
"pointsAtAward": 42,
"badgeUserSteps": [
{
"id": 42,
"step": {
"id": 42,
"position": 42,
"title": "Volunteer Coordinator",
"description": "Quarterly chapter meeting open to all members.",
"translation": "string",
"isOptional": true,
"isArchived": false
},
"status": 42,
"note": "Joined via Boston outreach drive.",
"updatedBy": {
"id": 42,
"firstName": "James",
"lastName": "Patterson",
"localCenter": "/api/v1/local_centers/1",
"localCenterParent": "/api/v1/units/1",
"fullName": "James Patterson",
"logo": "https://cdn.orgo.space/tenants/acme/logo.png"
},
"dateCreated": "2026-01-15T10:30:00+00:00",
"dateUpdated": "2026-01-15T10:30:00+00:00"
}
],
"stepsProgress": [
"string"
]
}BadgeUser
Assign a badge to a user
Manually assigns a badge to a user. Sets the current user as the assignment owner. Requires HR_ASSISTANT_LOCAL permission on the target user, or HR_ASSISTANT_TENANT permission. Validates that the badge belongs to the same tenant.
POST
/
api
/
v1
/
badge_users
Assign a badge to a user
curl --request POST \
--url https://app.orgo.space/api/v1/badge_users \
--header 'Api-Token: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"badge": "/api/v1/badges/1",
"user": "/api/v1/users/1",
"dateCreated": "2026-01-15T10:30:00+00:00",
"commentUser": "Confirmed by phone — will arrive at 10am.",
"commentMaster": "Confirmed by phone — will arrive at 10am.",
"status": 42,
"owner": "/api/v1/users/1"
}
'import requests
url = "https://app.orgo.space/api/v1/badge_users"
payload = {
"badge": "/api/v1/badges/1",
"user": "/api/v1/users/1",
"dateCreated": "2026-01-15T10:30:00+00:00",
"commentUser": "Confirmed by phone — will arrive at 10am.",
"commentMaster": "Confirmed by phone — will arrive at 10am.",
"status": 42,
"owner": "/api/v1/users/1"
}
headers = {
"Api-Token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Api-Token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
badge: '/api/v1/badges/1',
user: '/api/v1/users/1',
dateCreated: '2026-01-15T10:30:00+00:00',
commentUser: 'Confirmed by phone — will arrive at 10am.',
commentMaster: 'Confirmed by phone — will arrive at 10am.',
status: 42,
owner: '/api/v1/users/1'
})
};
fetch('https://app.orgo.space/api/v1/badge_users', 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://app.orgo.space/api/v1/badge_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([
'badge' => '/api/v1/badges/1',
'user' => '/api/v1/users/1',
'dateCreated' => '2026-01-15T10:30:00+00:00',
'commentUser' => 'Confirmed by phone — will arrive at 10am.',
'commentMaster' => 'Confirmed by phone — will arrive at 10am.',
'status' => 42,
'owner' => '/api/v1/users/1'
]),
CURLOPT_HTTPHEADER => [
"Api-Token: <api-key>",
"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://app.orgo.space/api/v1/badge_users"
payload := strings.NewReader("{\n \"badge\": \"/api/v1/badges/1\",\n \"user\": \"/api/v1/users/1\",\n \"dateCreated\": \"2026-01-15T10:30:00+00:00\",\n \"commentUser\": \"Confirmed by phone — will arrive at 10am.\",\n \"commentMaster\": \"Confirmed by phone — will arrive at 10am.\",\n \"status\": 42,\n \"owner\": \"/api/v1/users/1\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Api-Token", "<api-key>")
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://app.orgo.space/api/v1/badge_users")
.header("Api-Token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"badge\": \"/api/v1/badges/1\",\n \"user\": \"/api/v1/users/1\",\n \"dateCreated\": \"2026-01-15T10:30:00+00:00\",\n \"commentUser\": \"Confirmed by phone — will arrive at 10am.\",\n \"commentMaster\": \"Confirmed by phone — will arrive at 10am.\",\n \"status\": 42,\n \"owner\": \"/api/v1/users/1\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.orgo.space/api/v1/badge_users")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Api-Token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"badge\": \"/api/v1/badges/1\",\n \"user\": \"/api/v1/users/1\",\n \"dateCreated\": \"2026-01-15T10:30:00+00:00\",\n \"commentUser\": \"Confirmed by phone — will arrive at 10am.\",\n \"commentMaster\": \"Confirmed by phone — will arrive at 10am.\",\n \"status\": 42,\n \"owner\": \"/api/v1/users/1\"\n}"
response = http.request(request)
puts response.read_body{
"id": 42,
"badge": {
"id": 42,
"name": "Boston Chapter",
"type": {
"id": 42,
"name": "Boston Chapter"
},
"translation": "string",
"logo": "https://cdn.orgo.space/tenants/acme/logo.png",
"referrals": 42,
"kind": "STANDARD",
"userType": {
"id": 42,
"name": "Boston Chapter"
},
"steps": [
{
"id": 42,
"position": 42,
"title": "Volunteer Coordinator",
"description": "Quarterly chapter meeting open to all members.",
"translation": "string",
"isOptional": true,
"isArchived": false
}
]
},
"user": {
"id": 42,
"firstName": "James",
"lastName": "Patterson",
"localCenter": {
"alias": "string",
"id": 42,
"name": "Boston Chapter"
},
"localCenterParent": "/api/v1/units/1",
"fullName": "James Patterson",
"logo": "https://cdn.orgo.space/tenants/acme/logo.png"
},
"dateCreated": "2026-01-15T10:30:00+00:00",
"commentUser": "Confirmed by phone — will arrive at 10am.",
"commentMaster": "Confirmed by phone — will arrive at 10am.",
"status": 42,
"owner": {
"id": 42,
"firstName": "James",
"lastName": "Patterson",
"localCenter": {
"alias": "string",
"id": 42,
"name": "Boston Chapter"
},
"localCenterParent": "/api/v1/units/1",
"fullName": "James Patterson",
"logo": "https://cdn.orgo.space/tenants/acme/logo.png"
},
"pointsAtAward": 42,
"badgeUserSteps": [
{
"id": 42,
"step": {
"id": 42,
"position": 42,
"title": "Volunteer Coordinator",
"description": "Quarterly chapter meeting open to all members.",
"translation": "string",
"isOptional": true,
"isArchived": false
},
"status": 42,
"note": "Joined via Boston outreach drive.",
"updatedBy": {
"id": 42,
"firstName": "James",
"lastName": "Patterson",
"localCenter": "/api/v1/local_centers/1",
"localCenterParent": "/api/v1/units/1",
"fullName": "James Patterson",
"logo": "https://cdn.orgo.space/tenants/acme/logo.png"
},
"dateCreated": "2026-01-15T10:30:00+00:00",
"dateUpdated": "2026-01-15T10:30:00+00:00"
}
],
"stepsProgress": [
"string"
]
}Authorizations
ApiTokenJWT
Server-to-server authentication. Generate a token in the admin UI at
Settings → Developers → API Access. Send the raw token in the
Api-Token header — there is no Bearer prefix.
Tokens can be marked read-only at creation time, in which case the API
rejects any non-GET request with 403 Forbidden.
Body
application/json
The new BadgeUser resource
Response
BadgeUser resource created
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes

