Read a changelog release

Embed
Preview of the card
<a href="https://forumulate.com/reference/forumulate-api-publicchangelog-release"><img src="https://forumulate.com/reference/_api/public/orgs/046a9bc0-d530-43ae-9bae-af7945008cda/spaces/8042f004-e3d9-445f-b7a4-b6c1f86836e6/pages/aafce897-d490-44fb-a733-dd769b79fc81/social-card.svg?v=3e7ae33eec8b" alt="Read a changelog release" width="600" height="315"></a>
GEThttps://forumulate.com/api/public/orgs/{orgId}/spaces/{spaceId}/changelog/t/{slug}
Parameters
orgIdstringpathrequired
spaceIdstringpathrequired
slugstringpathrequired
morenumberquery
localestringquery
forumulate-versionstringheader
API version negotiation. Send forumulate-version: 2026-12-01 on every request from a new integration; it is optional only so that integrations written before versioning keep working. Each version includes everything before it:
Code samples
cURL
curl -X GET "https://forumulate.com/api/public/orgs/{orgId}/spaces/{spaceId}/changelog/t/{slug}?more=&locale=" \
  -H "forumulate-version: <value>"
TypeScript
const res = await fetch('https://forumulate.com/api/public/orgs/{orgId}/spaces/{spaceId}/changelog/t/{slug}?more=&locale=', {
  method: 'GET',
  headers: {
    'forumulate-version': '<value>',
  },
});
const data = await res.json();
Python
import requests

res = requests.request(
    "GET",
    "https://forumulate.com/api/public/orgs/{orgId}/spaces/{spaceId}/changelog/t/{slug}?more=&locale=",
    headers={
    "forumulate-version": "<value>",
    },
)
data = res.json()
Go
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://forumulate.com/api/public/orgs/{orgId}/spaces/{spaceId}/changelog/t/{slug}?more=&locale=", nil)
	req.Header.Set("forumulate-version", "<value>")
	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)
	fmt.Println(string(body))
}
PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://forumulate.com/api/public/orgs/{orgId}/spaces/{spaceId}/changelog/t/{slug}?more=&locale=');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['forumulate-version: <value>']);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
Ruby
require 'net/http'
require 'uri'

uri = URI('https://forumulate.com/api/public/orgs/{orgId}/spaces/{spaceId}/changelog/t/{slug}?more=&locale=')
req = Net::HTTP::Get.new(uri)
req['forumulate-version'] = '<value>'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
  http.request(req)
end
puts res.body
Java
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpRequest.BodyPublishers;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://forumulate.com/api/public/orgs/{orgId}/spaces/{spaceId}/changelog/t/{slug}?more=&locale="))
    .header("forumulate-version", "<value>")
    .GET()
    .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Responses
200 Success.
Example
{
  "closes": [
    {
      "title": "string",
      "url": "string",
      "voteCount": 0
    }
  ],
  "locale": "string",
  "locales": [
    {
      "available": true,
      "code": "string",
      "isDefault": true,
      "label": "string"
    }
  ],
  "neighbours": {
    "more": [
      {
        "publishedAt": null,
        "releaseVersion": null,
        "slug": "string",
        "title": "string"
      }
    ],
    "next": {
      "publishedAt": null,
      "releaseVersion": null,
      "slug": "string",
      "title": "string"
    },
    "previous": {
      "publishedAt": null,
      "releaseVersion": null,
      "slug": "string",
      "title": "string"
    }
  },
  "release": {
    "answerCount": 0,
    "answerPostId": "string",
    "assignedGroupId": "string",
    "assigneeId": "string",
    "authorAvatarSeed": "string",
    "authorAvatarUrl": "string",
    "authorId": "string",
    "authorKind": "anonymous",
    "authorName": "string",
    "authorPoints": 0,
    "authors": [
      {
        "name": "string",
        "userId": "string"
      }
    ],
    "authorTitle": "string",
    "authorUsername": "string",
    "bookmarked": true,
    "byline": {
      "avatarUrl": "string",
      "name": "string",
      "url": "string"
    },
    "bylines": [
      {
        "author": null,
        "avatarUrl": null,
        "bio": null,
        "handle": "string",
        "name": "string",
        "role": null,
        "url": null,
        "userId": null
      }
    ],
    "categoryId": "string",
    "commentsEnabled": true,
    "contentChangedAt": "2024-01-01T00:00:00Z",
    "coverUrl": "string",
    "customization": {
      "customCss": "string",
      "jsonLd": "string",
      "ogDescription": "string",
      "ogTitle": "string",
      "shareImageUrl": "string",
      "theme": {
        "accentColor": null,
        "bodyFontFamily": null,
        "changelog": null,
        "colorScheme": null,
        "components": null,
        "contentWidth": null,
        "customFontFamily": null,
        "font": null,
        "headingFontFamily": null,
        "layout": null,
        "monoFontFamily": null,
        "motion": null,
        "palette": null,
        "paletteDark": null,
        "post": null,
        "primaryColor": null,
        "typography": null
      },
      "twitterCard": "summary"
    },
    "deletedAt": "2024-01-01T00:00:00Z",
    "excerpt": "string",
    "expiresAt": "2024-01-01T00:00:00Z",
    "featured": true,
    "featuredLink": "string",
    "fields": {},
    "firstImageUrl": "string",
    "furtherReading": [
      {
        "href": "string",
        "label": "string"
      }
    ],
    "id": "string",
    "isNew": true,
    "kind": "ARTICLE",
    "lastActivityAt": "2024-01-01T00:00:00Z",
    "lastPostedAt": "string",
    "lastPosterName": "string",
    "likeCount": 0,
    "linkedTopics": [
      {
        "createdAt": "2024-01-01T00:00:00Z",
        "fromPostNumber": 0,
        "id": "string",
        "slug": "string",
        "title": "string"
      }
    ],
    "listed": true,
    "mergedIntoId": "string",
    "number": 0,
    "onThisPage": "always",
    "op": {
      "actionCode": "string",
      "actionData": {},
      "authorAvatarSeed": "string",
      "authorAvatarUrl": "string",
      "authorBadges": [
        {
          "icon": null,
          "name": null,
          "slug": null
        }
      ],
      "authorBadgeTiers": {
        "bronze": 0,
        "gold": 0,
        "silver": 0
      },
      "authorFlair": {
        "bgColor": null,
        "color": null,
        "icon": null,
        "label": "string"
      },
      "authorId": "string",
      "authorKind": "anonymous",
      "authorName": "string",
      "authorPoints": 0,
      "authorRole": "moderator",
      "authorStatus": {
        "emoji": null,
        "message": null
      },
      "authorTitle": "string",
      "authorTrust": 0,
      "authorUsername": "string",
      "content": {
        "type": "doc",
        "content": [
          {
            "type": "heading",
            "attrs": {
              "level": 1
            },
            "content": [
              {
                "type": "text",
                "text": "Getting started"
              }
            ]
          },
          {
            "type": "paragraph",
            "content": [
              {
                "type": "text",
                "text": "Install the SDK, then create your first page."
              }
            ]
          },
          {
            "type": "codeBlock",
            "attrs": {
              "language": "bash"
            },
            "content": [
              {
                "type": "text",
                "text": "npm i @forumulate/sdk"
              }
            ]
          }
        ]
      },
      "createdAt": "2024-01-01T00:00:00Z",
      "editedAt": "2024-01-01T00:00:00Z",
      "flagCount": 0,
      "id": "string",
      "isOp": true,
      "likeCount": 0,
      "parentAuthorName": "string",
      "parentPostId": "string",
      "parentPostNumber": 0,
      "postNumber": 0,
      "reactions": {},
      "status": "hidden",
      "voteCount": 0,
      "whisper": true,
      "wiki": true
    },
    "pinned": true,
    "pinnedGlobally": true,
    "pinnedUntil": "2024-01-01T00:00:00Z",
    "posters": [
      {
        "avatarSeed": "string",
        "avatarUrl": null,
        "kind": "anonymous",
        "name": "string",
        "role": "frequent",
        "username": null
      }
    ],
    "promotedPage": {
      "id": "string",
      "spaceId": "string",
      "title": "string"
    },
    "promotedPageId": "string",
    "publishedAt": "2024-01-01T00:00:00Z",
    "readingMinutes": 0,
    "releaseVersion": "string",
    "replies": [
      {
        "actionCode": null,
        "actionData": null,
        "authorAvatarSeed": "string",
        "authorAvatarUrl": "string",
        "authorBadges": [
          null
        ],
        "authorBadgeTiers": {
          "bronze": null,
          "gold": null,
          "silver": null
        },
        "authorFlair": {
          "bgColor": null,
          "color": null,
          "icon": null,
          "label": null
        },
        "authorId": null,
        "authorKind": "anonymous",
        "authorName": "string",
        "authorPoints": 0,
        "authorRole": "moderator",
        "authorStatus": {
          "emoji": null,
          "message": null
        },
        "authorTitle": "string",
        "authorTrust": 0,
        "authorUsername": "string",
        "content": {
          "type": "doc",
          "content": [
            {
              "type": "heading",
              "attrs": {
                "level": 1
              },
              "content": [
                {
                  "type": "text",
                  "text": "Getting started"
                }
              ]
            },
            {
              "type": "paragraph",
              "content": [
                {
                  "type": "text",
                  "text": "Install the SDK, then create your first page."
                }
              ]
            },
            {
              "type": "codeBlock",
              "attrs": {
                "language": "bash"
              },
              "content": [
                {
                  "type": "text",
                  "text": "npm i @forumulate/sdk"
                }
              ]
            }
          ]
        },
        "createdAt": "2024-01-01T00:00:00Z",
        "editedAt": null,
        "flagCount": 0,
        "id": "string",
        "isOp": true,
        "likeCount": 0,
        "parentAuthorName": "string",
        "parentPostId": null,
        "parentPostNumber": 0,
        "postNumber": 0,
        "reactions": {},
        "status": "hidden",
        "voteCount": 0,
        "whisper": true,
        "wiki": true
      }
    ],
    "replyCount": 0,
    "replyPreviews": [
      {
        "author": "string",
        "authorAvatar": null,
        "authorSeed": "string",
        "text": "string"
      }
    ],
    "review": {
      "note": "string",
      "requestedAt": "2024-01-01T00:00:00Z",
      "requestedBy": "string",
      "reviewedAt": "2024-01-01T00:00:00Z",
      "reviewedBy": "string",
      "state": "approved"
    },
    "roadmapStatus": "string",
    "scheduledFor": "2024-01-01T00:00:00Z",
    "seo": {
      "noindex": true,
      "seoDescription": "string",
      "seoTitle": "string"
    },
    "series": "string",
    "shippedTopicIds": [
      "string"
    ],
    "slowModeSeconds": 0,
    "slug": "string",
    "state": "ARCHIVED",
    "status": "archived",
    "subtitle": "string",
    "tagInfo": [
      {
        "color": null,
        "colorDark": null,
        "coverUrl": null,
        "description": null,
        "gradient": null,
        "icon": "string",
        "label": "string",
        "pagePalette": null,
        "pageScheme": "dark",
        "slug": "string",
        "textColor": null,
        "textColorDark": null
      }
    ],
    "tags": [
      "string"
    ],
    "title": "string",
    "unread": 0,
    "updatedAt": "2024-01-01T00:00:00Z",
    "viewCount": 0,
    "voteCount": 0
  }
}
Schema
closesClosedRequest[]required
Show child parameters
titlestringrequired
urlstringrequired
voteCountnumberrequired
localestring
localesReleaseLocaleLink[]
Show child parameters
availablebooleanrequired
codestringrequired
isDefaultbooleanrequired
labelstringrequired
neighboursobjectrequired
Show child parameters
moreReleaseNeighbour[]required
Show child parameters
publishedAtstringrequired
releaseVersionstringrequired
slugstringrequired
titlestringrequired
nextReleaseNeighbourrequired
Show child parameters
publishedAtstringrequired
releaseVersionstringrequired
slugstringrequired
titlestringrequired
previousReleaseNeighbourrequired
Show child parameters
publishedAtstringrequired
releaseVersionstringrequired
slugstringrequired
titlestringrequired
releaseobjectrequired
Show child parameters
answerCountnumber
answerPostIdstringrequired
assignedGroupIdstringrequired
assigneeIdstringrequired
authorAvatarSeedstring
authorAvatarUrlstring
authorIdstringrequired
authorKindstring
anonymous | guest | member | persona | service | staged
authorNamestringrequired
authorPointsnumber
authorsobject[]required
Show child parameters
namestringrequired
userIdstringrequired
authorTitlestring
authorUsernamestring
bookmarkedboolean
bylineBylinerequired
Show child parameters
avatarUrlstring
namestring
urlstring
bylinesBylineView[]
Show child parameters
authorstringrequired
avatarUrlstringrequired
biostringrequired
handlestring
namestringrequired
rolestringrequired
urlstringrequired
userIdstringrequired
categoryIdstringrequired
commentsEnabledbooleanrequired
contentChangedAtstring
coverUrlstringrequired
customizationPieceCustomizationrequired
Show child parameters
customCssstring
jsonLdstring
ogDescriptionstring
ogTitlestring
shareImageUrlstring
themeobject
twitterCardstring
summary | summary_large_image
deletedAtstring
excerptstringrequired
expiresAtstring
featuredbooleanrequired
featuredLinkstringrequired
fieldsobjectrequired
firstImageUrlstring
furtherReadingobject[]required
Show child parameters
hrefstringrequired
labelstringrequired
idstringrequired
isNewboolean
kindstringrequired
ARTICLE | DISCUSSION | FEATURE | QUESTION | RELEASE
lastActivityAtstringrequired
lastPostedAtstring
lastPosterNamestring
likeCountnumber
linkedTopicsLinkedTopic[]required
Show child parameters
createdAtstringrequired
fromPostNumbernumberrequired
idstringrequired
slugstringrequired
titlestringrequired
listedbooleanrequired
mergedIntoIdstringrequired
numbernumberrequired
onThisPagestringrequired
always | auto | never
opobjectrequired
Show child parameters
actionCodestringrequired
actionDataobjectrequired
authorAvatarSeedstring
authorAvatarUrlstring
authorBadgesobject[]
authorBadgeTiersobject
authorFlairobject
authorIdstringrequired
authorKindstring
anonymous | guest | member | persona | service | staged
authorNamestringrequired
authorPointsnumber
authorRolestring
moderator | staff
authorStatusobject
authorTitlestring
authorTrustnumberrequired
authorUsernamestring
contentobjectrequired
A page as a block document: TipTap/ProseMirror JSON, the canonical content model shared by the editor, the reader and the Markdown converters. Send this as content when creating a page or on PUT /pages/{pageId}/content. It is the shape GET /pages/{pageId}/markdown round-trips from. Author in Markdown instead by sending body (whole page) or sections (Markdown per named slot) — use exactly ONE of the three. Every block has a Markdown spelling: :::name{attrs} directives for callouts, tabs, cards, steppers, columns and buttons, listed at GET /docs/markdown-dialect.
createdAtstringrequired
editedAtstringrequired
flagCountnumberrequired
idstringrequired
isOpbooleanrequired
likeCountnumber
parentAuthorNamestring
parentPostIdstringrequired
parentPostNumbernumber
postNumbernumberrequired
reactionsobjectrequired
statusstringrequired
hidden | pending | visible
voteCountnumberrequired
whisperbooleanrequired
wikibooleanrequired
pinnedbooleanrequired
pinnedGloballybooleanrequired
pinnedUntilstringrequired
postersForumPoster[]
Show child parameters
avatarSeedstringrequired
avatarUrlstringrequired
kindstringrequired
anonymous | guest | member | persona | service | staged
namestringrequired
rolestringrequired
frequent | latest | op
usernamestringrequired
promotedPageobjectrequired
Show child parameters
idstringrequired
spaceIdstringrequired
titlestringrequired
promotedPageIdstringrequired
publishedAtstringrequired
readingMinutesnumberrequired
releaseVersionstringrequired
repliesPostSummary[]required
Show child parameters
actionCodestringrequired
actionDataobjectrequired
authorAvatarSeedstring
authorAvatarUrlstring
authorBadgesobject[]
authorBadgeTiersobject
authorFlairobject
authorIdstringrequired
authorKindstring
anonymous | guest | member | persona | service | staged
authorNamestringrequired
authorPointsnumber
authorRolestring
moderator | staff
authorStatusobject
authorTitlestring
authorTrustnumberrequired
authorUsernamestring
contentobjectrequired
A page as a block document: TipTap/ProseMirror JSON, the canonical content model shared by the editor, the reader and the Markdown converters. Send this as content when creating a page or on PUT /pages/{pageId}/content. It is the shape GET /pages/{pageId}/markdown round-trips from. Author in Markdown instead by sending body (whole page) or sections (Markdown per named slot) — use exactly ONE of the three. Every block has a Markdown spelling: :::name{attrs} directives for callouts, tabs, cards, steppers, columns and buttons, listed at GET /docs/markdown-dialect.
createdAtstringrequired
editedAtstringrequired
flagCountnumberrequired
idstringrequired
isOpbooleanrequired
likeCountnumber
parentAuthorNamestring
parentPostIdstringrequired
parentPostNumbernumber
postNumbernumberrequired
reactionsobjectrequired
statusstringrequired
hidden | pending | visible
voteCountnumberrequired
whisperbooleanrequired
wikibooleanrequired
replyCountnumberrequired
replyPreviewsReplyPreview[]
Show child parameters
authorstringrequired
authorAvatarstringrequired
authorSeedstringrequired
textstringrequired
reviewobject
Show child parameters
notestringrequired
requestedAtstringrequired
requestedBystringrequired
reviewedAtstringrequired
reviewedBystringrequired
statestringrequired
approved | changes_requested | in_review
roadmapStatusstringrequired
scheduledForstringrequired
seoobjectrequired
Show child parameters
noindexboolean
seoDescriptionstring
seoTitlestring
seriesstringrequired
shippedTopicIdsstring[]required
400 The request could not be understood — a malformed header, path or query value (request.malformed). A value that was understood but is not acceptable is a 422 validation.failed.
{
  "error": {
    "code": "string",
    "message": "string",
    "details": {},
    "docs": "string",
    "reason": "string",
    "slugs": [
      "string"
    ],
    "conflict": {
      "etag": "string",
      "ops": [
        null
      ]
    }
  },
  "requestId": "string"
}
404 No such thing — one of the ids in the path does not resolve, or resolves to something this caller may not see (*.not_found).
{
  "error": {
    "code": "string",
    "message": "string",
    "details": {},
    "docs": "string",
    "reason": "string",
    "slugs": [
      "string"
    ],
    "conflict": {
      "etag": "string",
      "ops": [
        null
      ]
    }
  },
  "requestId": "string"
}
429 Rate limited — see the RateLimit-* headers.
{
  "error": {
    "code": "string",
    "message": "string",
    "details": {},
    "docs": "string",
    "reason": "string",
    "slugs": [
      "string"
    ],
    "conflict": {
      "etag": "string",
      "ops": [
        null
      ]
    }
  },
  "requestId": "string"
}
default Error — the stable { error: { code, message } } envelope.
{
  "error": {
    "code": "string",
    "message": "string",
    "details": {},
    "docs": "string",
    "reason": "string",
    "slugs": [
      "string"
    ],
    "conflict": {
      "etag": "string",
      "ops": [
        null
      ]
    }
  },
  "requestId": "string"
}
The Forumulate teamUpdated