Boards (post categories) organize feedback into distinct containers with their own settings.
- Delete contact by external user ID
Featurebase API (2026-01-01.nova)
Welcome to the Featurebase API. This API allows you to programmatically interact with your Featurebase organization.
This documentation reflects API version 2026-01-01.nova.
This API uses date-based versioning. Each version is identified by a release date and slug, e.g., 2026-01-01.nova.
Specifying a Version
Include the version in the request header:
Featurebase-Version: 2026-01-01.novaOr set a default version for your organization in the dashboard settings.
Version Compatibility
- Newer versions may add new fields to responses (always backwards-compatible)
- Breaking changes (removed/renamed fields, changed behavior) only occur in new versions
- Your integration will continue to work as long as you pin to a specific version
All API requests require authentication via API key.
Include in headers:
Authorization: Bearer <api-key>Create and manage your API keys in the Featurebase dashboard.
The API uses conventional HTTP response codes to indicate success or failure:
2xx- Success4xx- Client errors (bad request, unauthorized, not found, etc.)5xx- Server errors (internal error)
Error Response Format
All errors follow a consistent format:
{
"error": {
"type": "invalid_request_error",
"code": "resource_not_found",
"message": "Post not found",
"param": "id",
"status": 404
}
}Error Types
| Type | Description |
|---|---|
authentication_error | Authentication failed (401) |
authorization_error | Permission denied (403) |
invalid_request_error | Invalid request parameters or resource not found (400, 404, 410) |
api_error | Server-side error (500) |
rate_limit_error | Too many requests (429) |
Request
Retrieves a single contact by their external user ID (from your system via SSO).
Important: This endpoint only returns customers (type: "customer"). Leads are not returned.
userId- The external user ID from your system (matched via SSO integration)
Returns a single contact object with:
object- Always "contact"id- Unique contact identifieruserId- External user ID from SSOemail- Contact email addressname- Contact display nameprofilePicture- Profile picture URLtype- Always "customer" for this endpointcompanies- Array of companies the contact belongs tocustomFields- Custom field valuespostsCreated- Number of posts createdcommentsCreated- Number of comments createdlastActivity- Last activity timestamp
{
"object": "contact",
"id": "676f0f6765bdaa7d7d760f88",
"userId": "usr_12345",
"email": "john@example.com",
"name": "John Doe",
"type": "customer",
...
}This endpoint is useful when you need to look up a contact using your own system's user identifier, such as when displaying Featurebase data alongside your user's information in your own application.
This endpoint is only available in API version 2026-01-01.nova and newer.
- Mock serverhttps://docs.featurebase.app/_mock/rest-api/v2/contacts/by-user-id/{userId}
- Productionhttps://do.featurebase.app/v2/contacts/by-user-id/{userId}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
https://docs.featurebase.app/_mock/rest-api/v2/contacts/by-user-id/usr_12345 \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Featurebase-Version: 2026-01-01.nova'{ "object": "contact", "id": "676f0f6765bdaa7d7d760f88", "userId": "676f0f673dbb299c8a4f3057", "organizationId": "5febde12dc56d60012d47db6", "companies": [], "email": "john@example.com", "name": "John Steezy", "profilePicture": "https://fb-usercontent.fra1.cdn.digitaloceanspaces.com/anon_23.png", "commentsCreated": 0, "postsCreated": 0, "lastActivity": "2025-01-03T21:42:30.181Z", "subscribedToChangelog": true, "manuallyOptedOutFromChangelog": false, "roles": [], "locale": "en", "verified": true, "type": "customer", "description": "", "customFields": { "property1": null, "property2": null } }
Request
Permanently deletes a contact by their external user ID.
Important: This endpoint only deletes customers (type: "customer"). Leads cannot be deleted using this endpoint.
userId- The external user ID from your system
When a contact is deleted:
- The contact record is permanently removed
- Associated data cleanup is triggered asynchronously
- Comments and posts created by the contact are handled according to retention policies
Returns a deletion confirmation object:
id- The ID of the deleted contactobject- Always "contact"deleted- Alwaystrue
{
"id": "676f0f6765bdaa7d7d760f88",
"object": "contact",
"deleted": true
}Use this endpoint when you need to delete a contact using your own system's user identifier, such as when a user deletes their account in your application.
This endpoint is only available in API version 2026-01-01.nova and newer.
- Mock serverhttps://docs.featurebase.app/_mock/rest-api/v2/contacts/by-user-id/{userId}
- Productionhttps://do.featurebase.app/v2/contacts/by-user-id/{userId}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X DELETE \
https://docs.featurebase.app/_mock/rest-api/v2/contacts/by-user-id/usr_12345 \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Featurebase-Version: 2026-01-01.nova'{ "id": "507f1f77bcf86cd799439011", "object": "contact", "deleted": true }
Request
Retrieves the email preference state for a customer contact by their Featurebase ID.
Important: This endpoint only supports customer contacts. Leads do not have a customer email preference surface in the public API.
id- The Featurebase contact ID (24-character ObjectId)
Returns a contact email preferences object with:
object- Always "contact_email_preferences"contactId- Featurebase contact IDuserId- External user ID, if availableemail- Contact email address, if availablepreferences- Current email preference state
Each preference includes:
status- The stored preference state for that categoryeffectiveStatus- The final state after applying the globalallpreference override
{
"object": "contact_email_preferences",
"contactId": "676f0f6765bdaa7d7d760f88",
"userId": "usr_12345",
"email": "john@example.com",
"preferences": {
"all": {
"status": "unsubscribed",
"effectiveStatus": "unsubscribed"
},
"postUpdates": {
"status": "subscribed",
"effectiveStatus": "unsubscribed"
},
"postComments": {
"status": "subscribed",
"effectiveStatus": "unsubscribed"
},
"commentReplies": {
"status": "subscribed",
"effectiveStatus": "unsubscribed"
},
"changelog": {
"status": "subscribed",
"effectiveStatus": "unsubscribed"
}
}
}- Mock serverhttps://docs.featurebase.app/_mock/rest-api/v2/contacts/{id}/email-preferences
- Productionhttps://do.featurebase.app/v2/contacts/{id}/email-preferences
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
https://docs.featurebase.app/_mock/rest-api/v2/contacts/507f1f77bcf86cd799439011/email-preferences \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Featurebase-Version: 2026-01-01.nova'Success
Object type identifier
Email preference state for this contact, including both stored status and final effective status.
Global email preference state for all email notifications.
Stored preference status for this category
Global email preference state for all email notifications.
Stored preference status for this category
Global email preference state for all email notifications.
Stored preference status for this category
Preference state for replies to the contact’s comments.
Stored preference status for this category
Global email preference state for all email notifications.
Stored preference status for this category
{ "object": "contact_email_preferences", "contactId": "676f0f6765bdaa7d7d760f88", "userId": "usr_12345", "email": "john@example.com", "preferences": { "all": { … }, "postUpdates": { … }, "postComments": { … }, "commentReplies": { … }, "changelog": { … } } }
Comments
Threaded discussions on posts and changelogs. Comments support voting, moderation, and privacy controls.