curl --request POST \
--url https://api.uselora.com/v1/tags \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Marketing",
"color": "BLUE",
"description": "Campaign links for the 2026 employer brand"
}
'import requests
url = "https://api.uselora.com/v1/tags"
payload = {
"name": "Marketing",
"color": "BLUE",
"description": "Campaign links for the 2026 employer brand"
}
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({
name: 'Marketing',
color: 'BLUE',
description: 'Campaign links for the 2026 employer brand'
})
};
fetch('https://api.uselora.com/v1/tags', 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.uselora.com/v1/tags",
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([
'name' => 'Marketing',
'color' => 'BLUE',
'description' => 'Campaign links for the 2026 employer brand'
]),
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.uselora.com/v1/tags"
payload := strings.NewReader("{\n \"name\": \"Marketing\",\n \"color\": \"BLUE\",\n \"description\": \"Campaign links for the 2026 employer brand\"\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.uselora.com/v1/tags")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Marketing\",\n \"color\": \"BLUE\",\n \"description\": \"Campaign links for the 2026 employer brand\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.uselora.com/v1/tags")
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 \"name\": \"Marketing\",\n \"color\": \"BLUE\",\n \"description\": \"Campaign links for the 2026 employer brand\"\n}"
response = http.request(request)
puts response.read_body{
"id": "a1b2c3d4",
"name": "<string>",
"slug": "<string>",
"color": "DEFAULT",
"workspaceId": "<string>",
"creatorId": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"description": "Campaign links for the 2026 employer brand"
}{
"error": "<string>",
"requestId": "<string>",
"code": "<string>",
"fieldErrors": {},
"traceId": "<string>"
}{
"error": "<string>",
"requestId": "<string>",
"code": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"code": "plan_requires_upgrade",
"requestId": "<string>",
"traceId": "<string>",
"current_plan": "<string>",
"required_capability": "<string>"
}{
"error": "<string>",
"requestId": "<string>",
"code": "<string>",
"traceId": "<string>",
"required_scope": "<string>"
}{
"error": "<string>",
"requestId": "<string>",
"code": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"code": "payload_too_large",
"requestId": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"requestId": "<string>",
"code": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"code": "internal_error",
"requestId": "<string>",
"traceId": "<string>"
}Create tag
Creates a new tag in the specified workspace.
curl --request POST \
--url https://api.uselora.com/v1/tags \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Marketing",
"color": "BLUE",
"description": "Campaign links for the 2026 employer brand"
}
'import requests
url = "https://api.uselora.com/v1/tags"
payload = {
"name": "Marketing",
"color": "BLUE",
"description": "Campaign links for the 2026 employer brand"
}
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({
name: 'Marketing',
color: 'BLUE',
description: 'Campaign links for the 2026 employer brand'
})
};
fetch('https://api.uselora.com/v1/tags', 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.uselora.com/v1/tags",
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([
'name' => 'Marketing',
'color' => 'BLUE',
'description' => 'Campaign links for the 2026 employer brand'
]),
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.uselora.com/v1/tags"
payload := strings.NewReader("{\n \"name\": \"Marketing\",\n \"color\": \"BLUE\",\n \"description\": \"Campaign links for the 2026 employer brand\"\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.uselora.com/v1/tags")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Marketing\",\n \"color\": \"BLUE\",\n \"description\": \"Campaign links for the 2026 employer brand\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.uselora.com/v1/tags")
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 \"name\": \"Marketing\",\n \"color\": \"BLUE\",\n \"description\": \"Campaign links for the 2026 employer brand\"\n}"
response = http.request(request)
puts response.read_body{
"id": "a1b2c3d4",
"name": "<string>",
"slug": "<string>",
"color": "DEFAULT",
"workspaceId": "<string>",
"creatorId": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"description": "Campaign links for the 2026 employer brand"
}{
"error": "<string>",
"requestId": "<string>",
"code": "<string>",
"fieldErrors": {},
"traceId": "<string>"
}{
"error": "<string>",
"requestId": "<string>",
"code": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"code": "plan_requires_upgrade",
"requestId": "<string>",
"traceId": "<string>",
"current_plan": "<string>",
"required_capability": "<string>"
}{
"error": "<string>",
"requestId": "<string>",
"code": "<string>",
"traceId": "<string>",
"required_scope": "<string>"
}{
"error": "<string>",
"requestId": "<string>",
"code": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"code": "payload_too_large",
"requestId": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"requestId": "<string>",
"code": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"code": "internal_error",
"requestId": "<string>",
"traceId": "<string>"
}Authorizations
Workspace API key (lora_sk_…) sent as Authorization: Bearer <api_key>. Each scoped operation names the scope it requires in its security requirement, for example shortcuts.write; a key without it receives 403 with code: insufficient_scope. GET /v1/qr also accepts anonymous requests and requires no scope.
Body
Payload to create a new tag
The tag name (3..50 chars). The slug is derived from this server-side and updates whenever name changes.
3 - 50"Marketing"
Tag color
DEFAULT, GRAY, BROWN, ORANGE, YELLOW, GREEN, BLUE, PURPLE, PINK, RED "BLUE"
Optional one-line description of what the tag is for (up to 200 chars). Line breaks and repeated whitespace are collapsed to single spaces and the ends trimmed; an empty string or null clears it.
"Campaign links for the 2026 employer brand"
Response
The created tag.
A tag.
The tag's unique ID.
^[0-9abcdefghjkmnpqrstvwxyz]{8}$"a1b2c3d4"
DEFAULT, GRAY, BROWN, ORANGE, YELLOW, GREEN, BLUE, PURPLE, PINK, RED ID of the workspace the tag belongs to.
ID of the user who created the tag.
ISO 8601 creation timestamp.
ISO 8601 timestamp of the last update.
What the tag is for, or null when it has none.
"Campaign links for the 2026 employer brand"
Was this page helpful?