API reference
7 endpoints, served at https://orbitwrite.com/api/v1. Each one lists the credentials it accepts, its parameters and every response it can give.
Requires hashtagSet:read. Every saved set, sorted by name — the list the composer's Hashtags panel inserts from.
An API key or OAuth access token as a bearer token, or a signed-in session.
organizationIdstringSession callers only — an API key already determines the workspace.
At least 1 character.
200HashtagSetListThe workspace's hashtag sets
hashtagSetsHashtagSet[]Requiredcurl -X GET "https://orbitwrite.com/api/v1/hashtag-sets" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY"{
"hashtagSets": [
{
"id": "string",
"name": "string",
"hashtags": [
"string"
],
"createdAt": "string",
"updatedAt": "string"
}
]
}Requires hashtagSet:create. Tags may be sent with or without the leading # and are stored without it. A tag with characters no platform links as part of a hashtag (a hyphen, an emoji), an all-digit tag, or a repeat is a 400 naming it — never silently dropped. Set names are unique per workspace, case-insensitively (409).
An API key or OAuth access token as a bearer token, or a signed-in session.
organizationIdstringSession callers only — an API key already determines the workspace.
At least 1 character.
namestringRequiredBetween 1 and 60 characters.
201HashtagSetResultThe set as stored
hashtagSetHashtagSetRequiredcurl -X POST "https://orbitwrite.com/api/v1/hashtag-sets" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"hashtags": [
"string"
]
}'{
"hashtagSet": {
"id": "string",
"name": "string",
"hashtags": [
"string"
],
"createdAt": "string",
"updatedAt": "string"
}
}Requires hashtagSet:read.
An API key or OAuth access token as a bearer token, or a signed-in session.
idstringRequiredAt least 1 character.
organizationIdstringSession callers only — an API key already determines the workspace.
At least 1 character.
200HashtagSetResultThe set as stored
hashtagSetHashtagSetRequiredcurl -X GET "https://orbitwrite.com/api/v1/hashtag-sets/{id}" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY"{
"hashtagSet": {
"id": "string",
"name": "string",
"hashtags": [
"string"
],
"createdAt": "string",
"updatedAt": "string"
}
}Requires hashtagSet:update. An omitted field is left alone; hashtags, when sent, replaces the whole list (same rules as create). Posts the set was already inserted into keep their text.
An API key or OAuth access token as a bearer token, or a signed-in session.
200HashtagSetResultThe set as stored
400ErrorInvalid request
401ErrorNot signed in
403ErrorNot a member of the organization
404ErrorThe resource does not exist
409ErrorConflicts with an existing resource
curl -X PATCH "https://orbitwrite.com/api/v1/hashtag-sets/{id}" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"hashtags": [
"string"
]
}'{
"hashtagSet": {
"id": "string",
"name": "string",
"hashtags": [
"string"
],
"createdAt": "string",
"updatedAt": "string"
}
}Requires hashtagSet:delete. Posts the set was inserted into keep their text.
An API key or OAuth access token as a bearer token, or a signed-in session.
idstringRequiredAt least 1 character.
organizationIdstringSession callers only — an API key already determines the workspace.
At least 1 character.
204The set was deleted
curl -X DELETE "https://orbitwrite.com/api/v1/hashtag-sets/{id}" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY"{
"error": "string",
"issues": []
}Requires hashtagSet:read. Returns text with the set added the way the composer's Insert does it: tags the text already has are skipped, and with a platform the platform's ceiling is respected (Instagram's 5, Threads' one topic tag, YouTube's 60). Saves nothing — write the returned text into the post with POST /posts or /posts/draft, where the post's own rules still apply. An unknown platform is a 400 rather than a silent "no ceiling".
An API key or OAuth access token as a bearer token, or a signed-in session.
idstringRequiredAt least 1 character.
organizationIdstringSession callers only — an API key already determines the workspace.
At least 1 character.
textstringRequiredThe post text to add the set to. Empty is fine — the result is just the tags.
At most 100000 characters.
platformstringThe platform the text is for (a channel's platform, e.g. instagram). Sets the hashtag ceiling; omit for no ceiling.
At least 1 character.
200HashtagSetApplyResultThe text with the set applied, and what was skipped
textstringRequiredThe text with the inserted tags appended as a closing paragraph. Unchanged when none fit.
insertstring[]RequiredTags that were added, without the #.
alreadyPresentstring[]RequiredTags the text already carried (case-insensitively), so skipped.
overLimitstring[]RequiredTags left out because the platform's hashtag ceiling was reached.
curl -X POST "https://orbitwrite.com/api/v1/hashtag-sets/{id}/apply" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "string"
}'{
"text": "string",
"insert": [
"string"
],
"alreadyPresent": [
"string"
],
"overLimit": [
"string"
]
}Every platform's hashtag ceiling and conventions, the platforms where hashtags matter first. With platform (any channel platform value, e.g. linkedin_page), just that one — an empty list when there is nothing to say. Needs any credential and no workspace.
An API key or OAuth access token as a bearer token, or a signed-in session.
platformstringAt least 1 character.
200HashtagGuidanceListThe guidance
platformsHashtagGuidance[]RequiredplatformstringRequiredCanonical key — linkedin covers LinkedIn profiles and pages.
displayNamestringRequiredlimitHashtagLimit | any | nullRequiredtipsstring[]Requiredcurl -X GET "https://orbitwrite.com/api/v1/hashtags/guidance" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY"{
"platforms": [
{
"platform": "string",
"displayName": "string",
"linksHashtags": true,
"limit": {
"max": 0,
"beyond": "rejected"
},
"tips": [
"string"
]
}
]
}