Get the member

Embed
Preview of the card
<a href="https://forumulate.com/reference/forumulate-api-publicforumpeople-profile"><img src="https://forumulate.com/reference/_api/public/orgs/046a9bc0-d530-43ae-9bae-af7945008cda/spaces/8042f004-e3d9-445f-b7a4-b6c1f86836e6/pages/ecf2a07f-909a-4e01-9072-49831cd6ea96/social-card.svg?v=3e7ae33eec8b" alt="Get the member" width="600" height="315"></a>
GEThttps://forumulate.com/api/public/orgs/{orgId}/spaces/{spaceId}/forum/u/{userId}
Parameters
orgIdstringpathrequired
spaceIdstringpathrequired
userIdstringpathrequired
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}/forum/u/{userId}" \
  -H "forumulate-version: <value>"
TypeScript
const res = await fetch('https://forumulate.com/api/public/orgs/{orgId}/spaces/{spaceId}/forum/u/{userId}', {
  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}/forum/u/{userId}",
    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}/forum/u/{userId}", 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}/forum/u/{userId}');
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}/forum/u/{userId}')
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}/forum/u/{userId}"))
    .header("forumulate-version", "<value>")
    .GET()
    .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Responses
200 Success.
Example
{
  "badges": [
    {
      "description": "string",
      "grantedAt": "2024-01-01T00:00:00Z",
      "icon": "string",
      "name": "string",
      "slug": "string"
    }
  ],
  "customFields": [
    {
      "key": "string",
      "label": "string",
      "type": "string",
      "value": "string"
    }
  ],
  "featuredBadges": [
    {
      "description": "string",
      "grantedAt": "2024-01-01T00:00:00Z",
      "icon": "string",
      "name": "string",
      "slug": "string"
    }
  ],
  "profile": {
    "avatarUrl": "string",
    "bio": "string",
    "coverUrl": "string",
    "flair": {
      "bgColor": null,
      "color": null,
      "icon": null,
      "label": "string"
    },
    "followers": 0,
    "following": 0,
    "label": "string",
    "lastSeen": "string",
    "level": 0,
    "likesReceived": 0,
    "location": "string",
    "memberSince": "2024-01-01T00:00:00Z",
    "name": "string",
    "online": true,
    "postsCreated": 0,
    "solutions": 0,
    "status": {
      "emoji": null,
      "message": null,
      "until": null
    },
    "title": "string",
    "userId": "string",
    "username": "string",
    "viewerFollows": true,
    "viewerRelation": "ignore",
    "websiteUrl": "string"
  },
  "recentReplies": [
    {
      "createdAt": "2024-01-01T00:00:00Z",
      "snippet": "string",
      "topicSlug": "string",
      "topicTitle": "string"
    }
  ],
  "topics": [
    {
      "answerCount": 0,
      "answerPostId": "string",
      "authorAvatarSeed": "string",
      "authorAvatarUrl": "string",
      "authorId": "string",
      "authorKind": "anonymous",
      "authorName": "string",
      "authorPoints": 0,
      "authorTitle": "string",
      "authorUsername": "string",
      "bookmarked": true,
      "byline": {
        "avatarUrl": null,
        "name": null,
        "url": null
      },
      "bylines": [
        {
          "author": null,
          "avatarUrl": null,
          "bio": null,
          "handle": null,
          "name": null,
          "role": null,
          "url": null,
          "userId": null
        }
      ],
      "categoryId": "string",
      "commentsEnabled": true,
      "coverUrl": "string",
      "customization": {
        "customCss": null,
        "jsonLd": null,
        "ogDescription": null,
        "ogTitle": null,
        "shareImageUrl": null,
        "theme": null,
        "twitterCard": null
      },
      "deletedAt": "2024-01-01T00:00:00Z",
      "excerpt": "string",
      "expiresAt": "2024-01-01T00:00:00Z",
      "featured": true,
      "featuredLink": "string",
      "firstImageUrl": "string",
      "furtherReading": [
        {
          "href": null,
          "label": null
        }
      ],
      "id": "string",
      "isNew": true,
      "kind": "ARTICLE",
      "lastActivityAt": "2024-01-01T00:00:00Z",
      "lastPostedAt": "string",
      "lastPosterName": "string",
      "likeCount": 0,
      "listed": true,
      "mergedIntoId": "string",
      "number": 0,
      "onThisPage": "always",
      "pinned": true,
      "pinnedGlobally": true,
      "pinnedUntil": "2024-01-01T00:00:00Z",
      "posters": [
        {
          "avatarSeed": null,
          "avatarUrl": null,
          "kind": null,
          "name": null,
          "role": null,
          "username": null
        }
      ],
      "promotedPageId": "string",
      "publishedAt": "2024-01-01T00:00:00Z",
      "readingMinutes": 0,
      "releaseVersion": "string",
      "replyCount": 0,
      "replyPreviews": [
        {
          "author": null,
          "authorAvatar": null,
          "authorSeed": null,
          "text": null
        }
      ],
      "review": {
        "note": null,
        "requestedAt": null,
        "requestedBy": null,
        "reviewedAt": null,
        "reviewedBy": null,
        "state": "approved"
      },
      "roadmapStatus": "string",
      "scheduledFor": "2024-01-01T00:00:00Z",
      "series": "string",
      "shippedTopicIds": [
        "string"
      ],
      "slug": "string",
      "state": "ARCHIVED",
      "status": "archived",
      "subtitle": "string",
      "tagInfo": [
        {
          "color": null,
          "colorDark": null,
          "coverUrl": null,
          "description": null,
          "gradient": null,
          "icon": null,
          "label": null,
          "pagePalette": null,
          "pageScheme": null,
          "slug": null,
          "textColor": null,
          "textColorDark": null
        }
      ],
      "tags": [
        "string"
      ],
      "title": "string",
      "unread": 0,
      "updatedAt": "2024-01-01T00:00:00Z",
      "viewCount": 0,
      "voteCount": 0
    }
  ],
  "viewerIsOwner": true
}
Schema
badgesobject[]required
Show child parameters
descriptionstringrequired
grantedAtstringrequired
iconstringrequired
namestringrequired
slugstringrequired
customFieldsobject[]required
Show child parameters
keystringrequired
labelstringrequired
typestringrequired
valuestringrequired
featuredBadgesobject[]required
Show child parameters
descriptionstringrequired
grantedAtstringrequired
iconstringrequired
namestringrequired
slugstringrequired
profileobjectrequired
Show child parameters
avatarUrlstringrequired
biostringrequired
coverUrlstringrequired
flairobjectrequired
Show child parameters
bgColorstringrequired
colorstringrequired
iconstringrequired
labelstringrequired
followersnumberrequired
followingnumberrequired
labelstringrequired
lastSeenstringrequired
levelnumberrequired
likesReceivednumberrequired
locationstringrequired
memberSincestringrequired
namestringrequired
onlinebooleanrequired
postsCreatednumberrequired
solutionsnumberrequired
statusUserStatusrequired
Show child parameters
emojistringrequired
messagestringrequired
untilstringrequired
titlestringrequired
userIdstringrequired
usernamestringrequired
viewerFollowsbooleanrequired
viewerRelationstringrequired
ignore | mute
websiteUrlstringrequired
recentRepliesobject[]required
Show child parameters
createdAtstringrequired
snippetstringrequired
topicSlugstringrequired
topicTitlestringrequired
topicsArticleSummary[]required
Show child parameters
answerCountnumber
answerPostIdstringrequired
authorAvatarSeedstring
authorAvatarUrlstring
authorIdstringrequired
authorKindstring
anonymous | guest | member | persona | service | staged
authorNamestringrequired
authorPointsnumber
authorTitlestring
authorUsernamestring
bookmarkedboolean
bylineBylinerequired
Show child parameters
avatarUrlstring
namestring
urlstring
bylinesBylineView[]
Show child parameters
authorstringrequired
avatarUrlstringrequired
biostringrequired
handlestring
namestringrequired
rolestringrequired
urlstringrequired
userIdstringrequired
categoryIdstringrequired
commentsEnabledbooleanrequired
coverUrlstringrequired
customizationPieceCustomizationrequired
Show child parameters
customCssstring
jsonLdstring
ogDescriptionstring
ogTitlestring
shareImageUrlstring
themeobject
twitterCardstring
summary | summary_large_image
deletedAtstring
excerptstringrequired
expiresAtstring
featuredbooleanrequired
featuredLinkstringrequired
firstImageUrlstring
furtherReadingobject[]required
Show child parameters
hrefstringrequired
labelstringrequired
idstringrequired
isNewboolean
kindstringrequired
ARTICLE | DISCUSSION | FEATURE | QUESTION | RELEASE
lastActivityAtstringrequired
lastPostedAtstring
lastPosterNamestring
likeCountnumber
listedbooleanrequired
mergedIntoIdstringrequired
numbernumberrequired
onThisPagestringrequired
always | auto | never
pinnedbooleanrequired
pinnedGloballybooleanrequired
pinnedUntilstringrequired
postersForumPoster[]
Show child parameters
avatarSeedstringrequired
avatarUrlstringrequired
kindstringrequired
anonymous | guest | member | persona | service | staged
namestringrequired
rolestringrequired
frequent | latest | op
usernamestringrequired
promotedPageIdstringrequired
publishedAtstringrequired
readingMinutesnumberrequired
releaseVersionstringrequired
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
seriesstringrequired
shippedTopicIdsstring[]required
slugstringrequired
statestringrequired
ARCHIVED | CLOSED | DRAFT | PUBLISHED
statusstringrequired
archived | closed | draft | published
subtitlestring
tagInfoTagDisplay[]
Show child parameters
colorstringrequired
colorDarkstringrequired
coverUrlstringrequired
descriptionstringrequired
gradientarrayrequired
iconstring
labelstringrequired
pagePaletteobjectrequired
pageSchemestringrequired
dark | light
slugstringrequired
textColorstringrequired
textColorDarkstringrequired
tagsstring[]required
titlestringrequired
unreadnumber
updatedAtstringrequired
viewCountnumberrequired
voteCountnumberrequired
viewerIsOwnerbooleanrequired
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.
Example
{
  "error": {
    "code": "string",
    "message": "string",
    "details": {},
    "docs": "string",
    "reason": "string",
    "slugs": [
      "string"
    ],
    "conflict": {
      "etag": "string",
      "ops": [
        null
      ]
    }
  },
  "requestId": "string"
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable error code, e.g. rbac.forbidden.
messagestringrequired
Human-readable explanation.
detailsobject
Field-level validation problems, keyed by field path (422 only).
docsstring
Where the vocabulary or format this error is about is published — an absolute URL, or an API route such as GET /space-types/{type}/presets. Present on errors over a controlled list, so the answer to "what am I allowed to send?" is in the error itself.
reasonstring
Why a credential was refused, as one stable word, where one status has several causes — e.g. an external_jwt redeem answers iat_too_old, iat_in_future, bad_signature, bad_issuer, bad_audience, expired and more. Branch on this, not on message.
slugsstring[]
The exact slugs that collided, on a slug-conflict 409 — space.slug_taken, page.slug_taken, collection.slug_taken, site.slug_taken or badge.slug_taken.
conflictobject
On a 409 from a content entry field write (PATCH …/entries/{entryId}/fields) whose If-Match was stale.
Show child parameters
etagstringrequired
The entry's current fields etag.
opsarrayrequired
The field operations since your If-Match that touch a path your own operations touch. Empty: none did — retry the batch unchanged under etag. null: the history no longer reaches your tag — re-read the entry first.
requestIdstring
The id of this request — the same value as the x-request-id and x-forumulate-request-id response headers. Quote it in a bug report: it is the only thing that finds your exact request in our logs. It is in the body because that is the part that survives — an SDK that throws the parsed body, a serverless log that keeps the body and drops the headers, a ticket with the JSON pasted in.
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).
Example
{
  "error": {
    "code": "string",
    "message": "string",
    "details": {},
    "docs": "string",
    "reason": "string",
    "slugs": [
      "string"
    ],
    "conflict": {
      "etag": "string",
      "ops": [
        null
      ]
    }
  },
  "requestId": "string"
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable error code, e.g. rbac.forbidden.
messagestringrequired
Human-readable explanation.
detailsobject
Field-level validation problems, keyed by field path (422 only).
docsstring
Where the vocabulary or format this error is about is published — an absolute URL, or an API route such as GET /space-types/{type}/presets. Present on errors over a controlled list, so the answer to "what am I allowed to send?" is in the error itself.
reasonstring
Why a credential was refused, as one stable word, where one status has several causes — e.g. an external_jwt redeem answers iat_too_old, iat_in_future, bad_signature, bad_issuer, bad_audience, expired and more. Branch on this, not on message.
slugsstring[]
The exact slugs that collided, on a slug-conflict 409 — space.slug_taken, page.slug_taken, collection.slug_taken, site.slug_taken or badge.slug_taken.
conflictobject
On a 409 from a content entry field write (PATCH …/entries/{entryId}/fields) whose If-Match was stale.
Show child parameters
etagstringrequired
The entry's current fields etag.
opsarrayrequired
The field operations since your If-Match that touch a path your own operations touch. Empty: none did — retry the batch unchanged under etag. null: the history no longer reaches your tag — re-read the entry first.
requestIdstring
The id of this request — the same value as the x-request-id and x-forumulate-request-id response headers. Quote it in a bug report: it is the only thing that finds your exact request in our logs. It is in the body because that is the part that survives — an SDK that throws the parsed body, a serverless log that keeps the body and drops the headers, a ticket with the JSON pasted in.
429 Rate limited — see the RateLimit-* headers.
Example
{
  "error": {
    "code": "string",
    "message": "string",
    "details": {},
    "docs": "string",
    "reason": "string",
    "slugs": [
      "string"
    ],
    "conflict": {
      "etag": "string",
      "ops": [
        null
      ]
    }
  },
  "requestId": "string"
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable error code, e.g. rbac.forbidden.
messagestringrequired
Human-readable explanation.
detailsobject
Field-level validation problems, keyed by field path (422 only).
docsstring
Where the vocabulary or format this error is about is published — an absolute URL, or an API route such as GET /space-types/{type}/presets. Present on errors over a controlled list, so the answer to "what am I allowed to send?" is in the error itself.
reasonstring
Why a credential was refused, as one stable word, where one status has several causes — e.g. an external_jwt redeem answers iat_too_old, iat_in_future, bad_signature, bad_issuer, bad_audience, expired and more. Branch on this, not on message.
slugsstring[]
The exact slugs that collided, on a slug-conflict 409 — space.slug_taken, page.slug_taken, collection.slug_taken, site.slug_taken or badge.slug_taken.
conflictobject
On a 409 from a content entry field write (PATCH …/entries/{entryId}/fields) whose If-Match was stale.
Show child parameters
etagstringrequired
The entry's current fields etag.
opsarrayrequired
The field operations since your If-Match that touch a path your own operations touch. Empty: none did — retry the batch unchanged under etag. null: the history no longer reaches your tag — re-read the entry first.
requestIdstring
The id of this request — the same value as the x-request-id and x-forumulate-request-id response headers. Quote it in a bug report: it is the only thing that finds your exact request in our logs. It is in the body because that is the part that survives — an SDK that throws the parsed body, a serverless log that keeps the body and drops the headers, a ticket with the JSON pasted in.
default Error — the stable { error: { code, message } } envelope.
Example
{
  "error": {
    "code": "string",
    "message": "string",
    "details": {},
    "docs": "string",
    "reason": "string",
    "slugs": [
      "string"
    ],
    "conflict": {
      "etag": "string",
      "ops": [
        null
      ]
    }
  },
  "requestId": "string"
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable error code, e.g. rbac.forbidden.
messagestringrequired
Human-readable explanation.
The Forumulate teamUpdated