Back to blog
integrationsapisetuphow-todevelopers

Getting Started with the Feedbaxster API

Create API keys, authenticate requests, and start pulling feedback data programmatically. Includes examples in curl, JavaScript, and Python.

2026-04-046 min read

Webhooks push data out of Feedbaxster when events happen. The API lets you pull data in whenever you need it. If you're building a custom dashboard, syncing feedback to an internal tool, or automating workflows that need to read or write data on demand, the API is what you want.

This guide covers creating an API key, making your first request, and the most common endpoints you'll use.

Note: API access requires a Business plan or higher. You can upgrade from your billing settings.

Creating an API key

In your Feedbaxster dashboard, go to Settings > Integrations and scroll to the API Keys section. Click Create API Key.

Give the key a descriptive name. This helps you remember what each key is for, especially if you create several. Examples: Mobile App, Internal Dashboard, Zapier Sync.

After you click Create Key, the full API key is shown once. Copy it immediately and store it somewhere secure (a password manager, environment variable, or secrets vault). You will not be able to see the full key again. The dashboard only shows a prefix after creation.

If you lose a key, revoke it and create a new one.

Authentication

Every API request must include your API key in the Authorization header as a Bearer token:

Authorization: Bearer fbx_your_api_key_here

Requests without a valid key return a 401 Unauthorized response.

Base URL

All API endpoints are served from:

https://api.feedbaxster.com

For local development, the API runs at http://localhost:7101.

Your First Request: List Suggestions

Let's start with something simple. To fetch all suggestions for a business:

curl:

curl -s https://api.feedbaxster.com/businesses/YOUR_BUSINESS_ID/suggestions \
  -H "Authorization: Bearer fbx_your_api_key_here" | jq .

JavaScript (fetch):

const response = await fetch(
  'https://api.feedbaxster.com/businesses/YOUR_BUSINESS_ID/suggestions',
  {
    headers: {
      'Authorization': 'Bearer fbx_your_api_key_here',
    },
  }
);

const { data, total } = await response.json();
console.log(`${total} suggestions found`);

Python (requests):

import requests

response = requests.get(
    f'https://api.feedbaxster.com/businesses/{BUSINESS_ID}/suggestions',
    headers={'Authorization': f'Bearer {API_KEY}'}
)

result = response.json()
print(f"{result['total']} suggestions found")

The response includes a data array of suggestion objects and a total count for pagination.

Common Endpoints

Here are the endpoints you'll use most often. All paths are relative to /businesses/{businessId}.

Suggestions

MethodPathDescription
GET/suggestionsList all suggestions (paginated)
GET/suggestions/:idGet a single suggestion
POST/suggestionsCreate a new suggestion
PATCH/suggestions/:idUpdate status, priority, etc.

Query parameters for listing: status, priority, sentiment, limit, offset, sort.

Issues

MethodPathDescription
GET/issuesList all issues
GET/issues/:idGet a single issue
POST/issuesCreate a new issue
PATCH/issues/:idUpdate status, assignee, etc.

QR Codes

MethodPathDescription
GET/qr-codesList all QR codes
POST/qr-codesCreate a new QR code
PATCH/qr-codes/:idUpdate label or active status
DELETE/qr-codes/:idDelete a QR code

Team

MethodPathDescription
GET/teamList team members and pending invites
POST/team/inviteInvite a new team member

Analytics

MethodPathDescription
GET/analytics/overviewDashboard summary (counts, sentiment breakdown, recent activity)

Pagination

List endpoints return paginated results. Use limit and offset query parameters:

# Get suggestions 21-40
curl "https://api.feedbaxster.com/businesses/{id}/suggestions?limit=20&offset=20" \
  -H "Authorization: Bearer fbx_..."

The response includes total so you can calculate the number of pages.

Error Handling

The API returns standard HTTP status codes:

CodeMeaning
200Success
201Created
400Bad request (missing or invalid fields)
401Unauthorized (missing or invalid API key)
403Forbidden (key doesn't have access to this business)
404Resource not found
429Rate limited (too many requests)
500Server error

Error responses include a message field explaining what went wrong:

{
  "statusCode": 400,
  "message": "Validation failed: content must not be empty"
}

Rate Limits

API keys are rate-limited to prevent abuse. The current limits are generous for normal use, but if you're polling aggressively or running batch imports, you may hit them.

When rate-limited, the API returns a 429 status with a Retry-After header indicating how many seconds to wait before trying again.

For real-time updates, use webhooks instead of polling. Webhooks push data to you as events happen, which is both faster and lighter on both sides.

Example: Export All Feedback to CSV

Here's a practical script that pulls all suggestions and writes them to a CSV file:

import requests
import csv

API_KEY = 'fbx_your_key_here'
BUSINESS_ID = 'your-business-id'
BASE_URL = 'https://api.feedbaxster.com'

def fetch_all_suggestions():
    suggestions = []
    offset = 0
    limit = 50

    while True:
        response = requests.get(
            f'{BASE_URL}/businesses/{BUSINESS_ID}/suggestions',
            headers={'Authorization': f'Bearer {API_KEY}'},
            params={'limit': limit, 'offset': offset}
        )
        result = response.json()
        suggestions.extend(result['data'])

        if offset + limit >= result['total']:
            break
        offset += limit

    return suggestions

suggestions = fetch_all_suggestions()

with open('feedback_export.csv', 'w', newline='') as f:
    writer = csv.DictWriter(f, fieldnames=[
        'id', 'content', 'status', 'priority',
        'sentiment', 'sentiment_score', 'created_at'
    ])
    writer.writeheader()
    for s in suggestions:
        writer.writerow({
            'id': s['id'],
            'content': s['content'],
            'status': s['status'],
            'priority': s['priority'],
            'sentiment': s.get('sentiment', ''),
            'sentiment_score': s.get('sentiment_score', ''),
            'created_at': s['created_at'],
        })

print(f"Exported {len(suggestions)} suggestions to feedback_export.csv")

Revoking and Rotating Keys

If a key is compromised or no longer needed, revoke it immediately from Settings > Integrations. Revoking is instant and permanent. Any request using that key will start returning 401 right away.

To rotate a key (replace it without downtime), create the new key first, update your application to use it, verify it works, then revoke the old one.

What's Next

The API is the foundation for building custom integrations that go beyond what Slack and webhooks offer. Combined with webhooks for real-time events and the API for on-demand reads and writes, you can connect Feedbaxster to practically any system in your stack.

If you haven't set up Slack or webhook integrations yet, check out our guides on connecting Feedbaxster to Slack and sending feedback events with webhooks.