Brands
Brand kit management β themes, assets, and AI instructions. Brand assets can also be managed interactively in NextDocs at /brands/{brand_id}.
List brands
Returns a paginated list of the user's brand kits.
Authorization
AuthorizationRequiredBearer <token>NextDocs API key (nxd_xxx format)
In: header
Query Parameters
limitintegerNumber of items to return (1-20).
20Minimum: 1Maximum: 20afterstringCursor for pagination. Pass the ID of the last item from the previous page.
org_idstringOrganization ID returned by organizations.list. Omit for personal scope.
1Response Body
A paginated list of resources.
TypeScript Definitions
Use the response body type in TypeScript.
objectRequiredstring"list"dataRequiredarray<object>has_moreRequiredbooleanWhether there are more items after this page.
Authentication required or API key is invalid.
TypeScript Definitions
Use the response body type in TypeScript.
errorRequiredobjectcurl -X GET "https://api.nextdocs.io/v1/brands?limit=20&after=clxyz123...&org_id=org_2abc123" \
-H "Authorization: Bearer <token>"fetch("https://api.nextdocs.io/v1/brands?limit=20&after=clxyz123...&org_id=org_2abc123", {
headers: {
"Authorization": "Bearer <token>"
}
})package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://api.nextdocs.io/v1/brands?limit=20&after=clxyz123...&org_id=org_2abc123"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}import requests
url = "https://api.nextdocs.io/v1/brands?limit=20&after=clxyz123...&org_id=org_2abc123"
response = requests.request("GET", url, headers = {
"Authorization": "Bearer <token>"
})
print(response.text){
"object": "list",
"data": [
{
"object": "brand",
"id": "brand_abc123",
"name": "Acme Corp",
"ai_instruction": "Use formal tone and blue color scheme.",
"theme_id": "theme_xyz789",
"theme": {
"id": "abc123",
"colors": {
"background": "#FFFFFF",
"foreground": "#1F1F1F",
"muted": "#F5F5F5",
"card": "#FAFAFA",
"text_on_muted": "#6B7280",
"text_on_card": "#374151",
"primary": "#3B82F6",
"secondary": "#8B5CF6",
"tertiary": "#EC4899",
"text_on_primary": "#FFFFFF",
"text_on_secondary": "#FFFFFF",
"text_on_tertiary": "#FFFFFF",
"border": "#E5E7EB"
},
"created_at": "2026-01-15T10:30:00.000Z",
"font_primary": "Playfair Display",
"font_secondary": "Inter",
"is_custom": true,
"name": "Midnight Blue",
"object": "theme",
"updated_at": "2026-04-01T08:00:00.000Z"
},
"assets": [
{
"object": "asset",
"id": "asset_abc123",
"name": "LiveHaus Logo",
"type": "icon",
"url": "https://cdn.nextdocs.com/users/user_123/assets/logo.png",
"slug": "livehaus-logo",
"format": "png",
"usage_mode": "always",
"category": "logo",
"tags": [
"logo",
"brand",
"mark"
],
"brand_id": "brand_abc123",
"size": 2048,
"width": 512,
"height": 512,
"created_at": "2026-04-06T10:30:00.000Z",
"updated_at": "2026-04-06T10:30:00.000Z"
}
],
"created_at": "2026-01-15T10:30:00.000Z",
"updated_at": "2026-04-01T08:00:00.000Z"
}
],
"has_more": false
}{
"error": {
"code": "NOT_FOUND",
"message": "The requested resource was not found."
}
}Create a brand
Creates a brand kit with the specified name and theme_id and optional AI instruction. theme_id must reference a theme owned by the user or a system theme key. Add assets to the brand by passing brand_id when creating or updating assets.
Authorization
AuthorizationRequiredBearer <token>NextDocs API key (nxd_xxx format)
In: header
Request Body
application/jsonOptionalorg_idstringOrganization ID returned by organizations.list. Omit for personal scope.
1nameRequiredstringBrand kit name.
1Maximum length: 100theme_idRequiredstringID of an existing theme or a system theme key.
1ai_instructionstringCustom AI instruction applied when this brand kit is active.
2000Response Body
Resource created successfully.
objectRequiredstring"brand"idRequiredstringnameRequiredstringai_instructionRequiredstring | null | nulltheme_idRequiredstring | null | nullthemeRequiredobject | null | nullassetsRequiredarray<object>@minItems 0
@minItems 0
@minItems 0
created_atRequiredstringupdated_atRequiredstringRequest validation failed.
TypeScript Definitions
Use the response body type in TypeScript.
errorRequiredobjectAuthentication required or API key is invalid.
TypeScript Definitions
Use the response body type in TypeScript.
errorRequiredobjectThe requested resource was not found.
TypeScript Definitions
Use the response body type in TypeScript.
errorRequiredobjectRate limit or usage quota exceeded.
TypeScript Definitions
Use the response body type in TypeScript.
errorRequiredobjectcurl -X POST "https://api.nextdocs.io/v1/brands" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"org_id": "org_2abc123",
"name": "Acme Corp",
"theme_id": "theme_xyz789",
"ai_instruction": "Use formal tone and blue color scheme."
}'const body = JSON.stringify({
"org_id": "org_2abc123",
"name": "Acme Corp",
"theme_id": "theme_xyz789",
"ai_instruction": "Use formal tone and blue color scheme."
})
fetch("https://api.nextdocs.io/v1/brands", {
headers: {
"Authorization": "Bearer <token>"
},
body
})package main
import (
"fmt"
"net/http"
"io/ioutil"
"strings"
)
func main() {
url := "https://api.nextdocs.io/v1/brands"
body := strings.NewReader(`{
"org_id": "org_2abc123",
"name": "Acme Corp",
"theme_id": "theme_xyz789",
"ai_instruction": "Use formal tone and blue color scheme."
}`)
req, _ := http.NewRequest("POST", url, body)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}import requests
url = "https://api.nextdocs.io/v1/brands"
body = {
"org_id": "org_2abc123",
"name": "Acme Corp",
"theme_id": "theme_xyz789",
"ai_instruction": "Use formal tone and blue color scheme."
}
response = requests.request("POST", url, json = body, headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
})
print(response.text){
"object": "brand",
"id": "brand_abc123",
"name": "Acme Corp",
"ai_instruction": "Use formal tone and blue color scheme.",
"theme_id": "theme_xyz789",
"theme": {
"id": "abc123",
"colors": {
"background": "#FFFFFF",
"foreground": "#1F1F1F",
"muted": "#F5F5F5",
"card": "#FAFAFA",
"text_on_muted": "#6B7280",
"text_on_card": "#374151",
"primary": "#3B82F6",
"secondary": "#8B5CF6",
"tertiary": "#EC4899",
"text_on_primary": "#FFFFFF",
"text_on_secondary": "#FFFFFF",
"text_on_tertiary": "#FFFFFF",
"border": "#E5E7EB"
},
"created_at": "2026-01-15T10:30:00.000Z",
"font_primary": "Playfair Display",
"font_secondary": "Inter",
"is_custom": true,
"name": "Midnight Blue",
"object": "theme",
"updated_at": "2026-04-01T08:00:00.000Z"
},
"assets": [
{
"object": "asset",
"id": "asset_abc123",
"name": "LiveHaus Logo",
"type": "icon",
"url": "https://cdn.nextdocs.com/users/user_123/assets/logo.png",
"slug": "livehaus-logo",
"format": "png",
"usage_mode": "always",
"category": "logo",
"tags": [
"logo",
"brand",
"mark"
],
"brand_id": "brand_abc123",
"size": 2048,
"width": 512,
"height": 512,
"created_at": "2026-04-06T10:30:00.000Z",
"updated_at": "2026-04-06T10:30:00.000Z"
}
],
"created_at": "2026-01-15T10:30:00.000Z",
"updated_at": "2026-04-01T08:00:00.000Z"
}{
"error": {
"code": "NOT_FOUND",
"message": "The requested resource was not found."
}
}{
"error": {
"code": "NOT_FOUND",
"message": "The requested resource was not found."
}
}{
"error": {
"code": "NOT_FOUND",
"message": "The requested resource was not found."
}
}{
"error": {
"code": "NOT_FOUND",
"message": "The requested resource was not found."
}
}Get a brand
Returns a single brand kit by ID, including its theme and linked assets.
Authorization
AuthorizationRequiredBearer <token>NextDocs API key (nxd_xxx format)
In: header
Path Parameters
idRequiredstringBrand ID
Query Parameters
org_idstringOrganization ID returned by organizations.list. Omit for personal scope.
1Response Body
The requested resource.
objectRequiredstring"brand"idRequiredstringnameRequiredstringai_instructionRequiredstring | null | nulltheme_idRequiredstring | null | nullthemeRequiredobject | null | nullassetsRequiredarray<object>@minItems 0
@minItems 0
@minItems 0
created_atRequiredstringupdated_atRequiredstringAuthentication required or API key is invalid.
TypeScript Definitions
Use the response body type in TypeScript.
errorRequiredobjectThe requested resource was not found.
TypeScript Definitions
Use the response body type in TypeScript.
errorRequiredobjectcurl -X GET "https://api.nextdocs.io/v1/brands/brand_abc123?org_id=org_2abc123" \
-H "Authorization: Bearer <token>"fetch("https://api.nextdocs.io/v1/brands/brand_abc123?org_id=org_2abc123", {
headers: {
"Authorization": "Bearer <token>"
}
})package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://api.nextdocs.io/v1/brands/brand_abc123?org_id=org_2abc123"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}import requests
url = "https://api.nextdocs.io/v1/brands/brand_abc123?org_id=org_2abc123"
response = requests.request("GET", url, headers = {
"Authorization": "Bearer <token>"
})
print(response.text){
"object": "brand",
"id": "brand_abc123",
"name": "Acme Corp",
"ai_instruction": "Use formal tone and blue color scheme.",
"theme_id": "theme_xyz789",
"theme": {
"id": "abc123",
"colors": {
"background": "#FFFFFF",
"foreground": "#1F1F1F",
"muted": "#F5F5F5",
"card": "#FAFAFA",
"text_on_muted": "#6B7280",
"text_on_card": "#374151",
"primary": "#3B82F6",
"secondary": "#8B5CF6",
"tertiary": "#EC4899",
"text_on_primary": "#FFFFFF",
"text_on_secondary": "#FFFFFF",
"text_on_tertiary": "#FFFFFF",
"border": "#E5E7EB"
},
"created_at": "2026-01-15T10:30:00.000Z",
"font_primary": "Playfair Display",
"font_secondary": "Inter",
"is_custom": true,
"name": "Midnight Blue",
"object": "theme",
"updated_at": "2026-04-01T08:00:00.000Z"
},
"assets": [
{
"object": "asset",
"id": "asset_abc123",
"name": "LiveHaus Logo",
"type": "icon",
"url": "https://cdn.nextdocs.com/users/user_123/assets/logo.png",
"slug": "livehaus-logo",
"format": "png",
"usage_mode": "always",
"category": "logo",
"tags": [
"logo",
"brand",
"mark"
],
"brand_id": "brand_abc123",
"size": 2048,
"width": 512,
"height": 512,
"created_at": "2026-04-06T10:30:00.000Z",
"updated_at": "2026-04-06T10:30:00.000Z"
}
],
"created_at": "2026-01-15T10:30:00.000Z",
"updated_at": "2026-04-01T08:00:00.000Z"
}{
"error": {
"code": "NOT_FOUND",
"message": "The requested resource was not found."
}
}{
"error": {
"code": "NOT_FOUND",
"message": "The requested resource was not found."
}
}Update a brand
Partially updates a brand kit. Only provided fields are changed.
Authorization
AuthorizationRequiredBearer <token>NextDocs API key (nxd_xxx format)
In: header
Request Body
application/jsonOptionalnamestringUpdated brand kit name.
1Maximum length: 100theme_idstringUpdated theme ID to apply to this brand kit.
1ai_instructionstring | null | nullUpdated AI instruction. Set to null to clear the existing instruction.
2000org_idstringOrganization ID returned by organizations.list. Omit for personal scope.
1Path Parameters
idRequiredstringBrand ID
Response Body
Resource updated successfully.
objectRequiredstring"brand"idRequiredstringnameRequiredstringai_instructionRequiredstring | null | nulltheme_idRequiredstring | null | nullthemeRequiredobject | null | nullassetsRequiredarray<object>@minItems 0
@minItems 0
@minItems 0
created_atRequiredstringupdated_atRequiredstringRequest validation failed.
TypeScript Definitions
Use the response body type in TypeScript.
errorRequiredobjectAuthentication required or API key is invalid.
TypeScript Definitions
Use the response body type in TypeScript.
errorRequiredobjectThe requested resource was not found.
TypeScript Definitions
Use the response body type in TypeScript.
errorRequiredobjectRate limit or usage quota exceeded.
TypeScript Definitions
Use the response body type in TypeScript.
errorRequiredobjectcurl -X PATCH "https://api.nextdocs.io/v1/brands/brand_abc123" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Corp v2",
"theme_id": "theme_new123",
"ai_instruction": null,
"org_id": "org_2abc123"
}'const body = JSON.stringify({
"name": "Acme Corp v2",
"theme_id": "theme_new123",
"ai_instruction": null,
"org_id": "org_2abc123"
})
fetch("https://api.nextdocs.io/v1/brands/brand_abc123", {
headers: {
"Authorization": "Bearer <token>"
},
body
})package main
import (
"fmt"
"net/http"
"io/ioutil"
"strings"
)
func main() {
url := "https://api.nextdocs.io/v1/brands/brand_abc123"
body := strings.NewReader(`{
"name": "Acme Corp v2",
"theme_id": "theme_new123",
"ai_instruction": null,
"org_id": "org_2abc123"
}`)
req, _ := http.NewRequest("PATCH", url, body)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}import requests
url = "https://api.nextdocs.io/v1/brands/brand_abc123"
body = {
"name": "Acme Corp v2",
"theme_id": "theme_new123",
"ai_instruction": null,
"org_id": "org_2abc123"
}
response = requests.request("PATCH", url, json = body, headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
})
print(response.text){
"object": "brand",
"id": "brand_abc123",
"name": "Acme Corp",
"ai_instruction": "Use formal tone and blue color scheme.",
"theme_id": "theme_xyz789",
"theme": {
"id": "abc123",
"colors": {
"background": "#FFFFFF",
"foreground": "#1F1F1F",
"muted": "#F5F5F5",
"card": "#FAFAFA",
"text_on_muted": "#6B7280",
"text_on_card": "#374151",
"primary": "#3B82F6",
"secondary": "#8B5CF6",
"tertiary": "#EC4899",
"text_on_primary": "#FFFFFF",
"text_on_secondary": "#FFFFFF",
"text_on_tertiary": "#FFFFFF",
"border": "#E5E7EB"
},
"created_at": "2026-01-15T10:30:00.000Z",
"font_primary": "Playfair Display",
"font_secondary": "Inter",
"is_custom": true,
"name": "Midnight Blue",
"object": "theme",
"updated_at": "2026-04-01T08:00:00.000Z"
},
"assets": [
{
"object": "asset",
"id": "asset_abc123",
"name": "LiveHaus Logo",
"type": "icon",
"url": "https://cdn.nextdocs.com/users/user_123/assets/logo.png",
"slug": "livehaus-logo",
"format": "png",
"usage_mode": "always",
"category": "logo",
"tags": [
"logo",
"brand",
"mark"
],
"brand_id": "brand_abc123",
"size": 2048,
"width": 512,
"height": 512,
"created_at": "2026-04-06T10:30:00.000Z",
"updated_at": "2026-04-06T10:30:00.000Z"
}
],
"created_at": "2026-01-15T10:30:00.000Z",
"updated_at": "2026-04-01T08:00:00.000Z"
}{
"error": {
"code": "NOT_FOUND",
"message": "The requested resource was not found."
}
}{
"error": {
"code": "NOT_FOUND",
"message": "The requested resource was not found."
}
}{
"error": {
"code": "NOT_FOUND",
"message": "The requested resource was not found."
}
}{
"error": {
"code": "NOT_FOUND",
"message": "The requested resource was not found."
}
}Delete a brand
Deletes a brand kit and unlinks all associated assets. The linked theme is not deleted.
Authorization
AuthorizationRequiredBearer <token>NextDocs API key (nxd_xxx format)
In: header
Request Body
application/jsonOptionalorg_idstringOrganization ID returned by organizations.list. Omit for personal scope.
1Path Parameters
idRequiredstringBrand ID
Response Body
Resource deleted.
Authentication required or API key is invalid.
TypeScript Definitions
Use the response body type in TypeScript.
errorRequiredobjectThe requested resource was not found.
TypeScript Definitions
Use the response body type in TypeScript.
errorRequiredobjectRequest conflicts with the current state of the resource.
TypeScript Definitions
Use the response body type in TypeScript.
errorRequiredobjectcurl -X DELETE "https://api.nextdocs.io/v1/brands/brand_abc123" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"org_id": "org_2abc123"
}'const body = JSON.stringify({
"org_id": "org_2abc123"
})
fetch("https://api.nextdocs.io/v1/brands/brand_abc123", {
headers: {
"Authorization": "Bearer <token>"
},
body
})package main
import (
"fmt"
"net/http"
"io/ioutil"
"strings"
)
func main() {
url := "https://api.nextdocs.io/v1/brands/brand_abc123"
body := strings.NewReader(`{
"org_id": "org_2abc123"
}`)
req, _ := http.NewRequest("DELETE", url, body)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}import requests
url = "https://api.nextdocs.io/v1/brands/brand_abc123"
body = {
"org_id": "org_2abc123"
}
response = requests.request("DELETE", url, json = body, headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
})
print(response.text){
"error": {
"code": "NOT_FOUND",
"message": "The requested resource was not found."
}
}{
"error": {
"code": "NOT_FOUND",
"message": "The requested resource was not found."
}
}{
"error": {
"code": "NOT_FOUND",
"message": "The requested resource was not found."
}
}