Brands
Brand kit management — themes, assets, and AI instructions.
List brands
Returns a paginated list of brand kits in the authenticated user's personal scope.
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.
Response Body
A paginated list of brands.
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..." \
-H "Authorization: Bearer <token>"fetch("https://api.nextdocs.io/v1/brands?limit=20&after=clxyz123...", {
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..."
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..."
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": {
"object": "theme",
"id": "abc123",
"name": "Midnight Blue",
"is_custom": true,
"font_primary": "Playfair Display",
"font_secondary": "Inter",
"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",
"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 a theme and optional AI instruction. Add assets by creating or updating assets with brand_id set to this brand. If a logo or other brand file is only available locally, create the brand first, then open /brands/{brand_id} in NextDocs to upload the asset there.
Authorization
AuthorizationRequiredBearer <token>NextDocs API key (nxd_xxx format)
In: header
Request Body
application/jsonOptionalnameRequiredstringBrand 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
The created brand.
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.
errorRequiredobjectcurl -X POST "https://api.nextdocs.io/v1/brands" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Corp",
"theme_id": "theme_xyz789",
"ai_instruction": "Use formal tone and blue color scheme."
}'const body = JSON.stringify({
"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(`{
"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 = {
"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": {
"object": "theme",
"id": "abc123",
"name": "Midnight Blue",
"is_custom": true,
"font_primary": "Playfair Display",
"font_secondary": "Inter",
"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",
"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."
}
}Get a brand
Returns a single brand kit by ID, including its theme and linked assets. Use /brands/{id} in NextDocs when the user needs to manage brand assets interactively.
Authorization
AuthorizationRequiredBearer <token>NextDocs API key (nxd_xxx format)
In: header
Path Parameters
idRequiredstringBrand ID
Response Body
The requested brand.
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.
errorRequiredobjectAccess denied.
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" \
-H "Authorization: Bearer <token>"fetch("https://api.nextdocs.io/v1/brands/brand_abc123", {
headers: {
"Authorization": "Bearer <token>"
}
})package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://api.nextdocs.io/v1/brands/brand_abc123"
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"
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": {
"object": "theme",
"id": "abc123",
"name": "Midnight Blue",
"is_custom": true,
"font_primary": "Playfair Display",
"font_secondary": "Inter",
"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",
"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."
}
}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/jsonOptionalnamestring1Maximum length: 100theme_idstring1ai_instructionstring | null | nullSet to null to clear.
2000Path Parameters
idRequiredstringBrand ID
Response Body
The updated brand.
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.
errorRequiredobjectAccess denied.
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 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
}'const body = JSON.stringify({
"name": "Acme Corp v2",
"theme_id": "theme_new123",
"ai_instruction": null
})
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
}`)
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
}
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": {
"object": "theme",
"id": "abc123",
"name": "Midnight Blue",
"is_custom": true,
"font_primary": "Playfair Display",
"font_secondary": "Inter",
"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",
"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
Path Parameters
idRequiredstringBrand ID
Response Body
Brand deleted successfully.
Authentication required or API key is invalid.
TypeScript Definitions
Use the response body type in TypeScript.
errorRequiredobjectAccess denied.
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 DELETE "https://api.nextdocs.io/v1/brands/brand_abc123" \
-H "Authorization: Bearer <token>"fetch("https://api.nextdocs.io/v1/brands/brand_abc123", {
headers: {
"Authorization": "Bearer <token>"
}
})package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://api.nextdocs.io/v1/brands/brand_abc123"
req, _ := http.NewRequest("DELETE", 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"
response = requests.request("DELETE", url, headers = {
"Authorization": "Bearer <token>"
})
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."
}
}