API reference v1.0

Connect your applications to Bifrost's KPI data platform.

Quick start

1. Get your API token

Contact your system administrator to obtain an API token for authentication.

2. Base URL
https://www.matsobi.nl/api/
3. Authentication

Include your token in the Authorization header:

Authorization: Token your_token_here
4. Test connection
curl https://www.matsobi.nl/api/tables/ \
  -H "Authorization: Token your_token_here"

Main endpoints

KPI tables

List all tables
GET /api/tables/

Get a list of KPI tables you can access.

Table details
GET /api/tables/{id}/

Get detailed information about a specific table.

Table data (recommended)
GET /api/tables/{id}/data/

Get flattened data from a table for Power BI, Excel, and reporting tools.

Pending approvals
GET /api/tables/{id}/pending/

Get data pending approval for a table.

Available filters
  • search - Search by name or description
  • ordering - Sort results (e.g., -created_at)
  • page - Pagination
Example
/api/tables/?search=sales&ordering=-created_at

Data rows

List all rows
GET /api/rows/

Get all data rows with nested cell structure.

Row details
GET /api/rows/{id}/

Get detailed information about a specific row.

Available filters
  • table - Filter by table ID
  • status - Filter by approval status
  • created_by - Filter by creator
  • created_at - Date range filtering
Example
/api/rows/?table=1&status=approved

Approving & rejecting data

Move a pending row through the approval workflow. These actions require approver rights on the table, and you cannot approve a row you submitted yourself.

Approve a row
POST /api/rows/{id}/approve/
curl -X POST \
  https://www.matsobi.nl/api/rows/1/approve/ \
  -H "Authorization: Token your_token_here"
Reject a row
POST /api/rows/{id}/reject/
curl -X POST \
  https://www.matsobi.nl/api/rows/1/reject/ \
  -H "Authorization: Token your_token_here" \
  -H "Content-Type: application/json" \
  -d '{"reason": "Numbers do not match source"}'

A reason is required when rejecting.

Response examples

Table Data Response
GET /api/tables/1/data/
[
  {
    "id": 1,
    "table_name": "Sales Data",
    "status": "approved",
    "created_at": "2025-01-28T10:30:00Z",
    "created_by_email": "user@company.com",
    "Employee Name": "John Doe",
    "Monthly Sales": "50000",
    "Target Met": "true",
    "Region": "North"
  },
  {
    "id": 2,
    "table_name": "Sales Data", 
    "status": "approved",
    "created_at": "2025-01-28T11:15:00Z",
    "created_by_email": "manager@company.com",
    "Employee Name": "Jane Smith",
    "Monthly Sales": "75000",
    "Target Met": "true",
    "Region": "South"
  }
]
Tables List Response
GET /api/tables/
{
  "count": 2,
  "next": null,
  "previous": null,
  "results": [
    {
      "id": 1,
      "name": "Sales Data",
      "description": "Monthly sales figures",
      "version_name": "Q1 2025",
      "version_number": 1,
      "created_at": "2025-01-01T00:00:00Z",
      "company_name": "Your Company",
      "columns": [
        {
          "id": 1,
          "name": "Employee Name",
          "data_type": "text",
          "required": true
        },
        {
          "id": 2,
          "name": "Monthly Sales",
          "data_type": "number",
          "required": true
        }
      ]
    }
  ]
}

Integration Examples

Power BI
  1. Get Data → Web
  2. URL: /api/tables/1/data/
  3. Add Authorization header
  4. Connect and transform
Detailed Guide
Excel
  1. Data → Get Data → From Web
  2. Enter API URL
  3. Configure authentication
  4. Load and refresh
Use the /data/ endpoint for best results
Python
import requests

headers = {
    'Authorization': 'Token your_token'
}

response = requests.get(
    'https://www.matsobi.nl/api/tables/1/data/',
    headers=headers
)

data = response.json()
cURL
# List the tables you can access
curl https://www.matsobi.nl/api/tables/ \
  -H "Authorization: Token your_token"

# Pull flattened data from one table
curl https://www.matsobi.nl/api/tables/1/data/ \
  -H "Authorization: Token your_token"
JavaScript
const res = await fetch(
  "https://www.matsobi.nl/api/tables/1/data/",
  { headers: { Authorization: "Token your_token" } }
);

const data = await res.json();
console.log(data);

Authentication Methods

Token Authentication (Recommended)

Most secure method for API integrations.

Authorization: Token abc123def456
Basic Authentication

Use your username and password (base64 encoded).

Authorization: Basic dXNlcjpwYXNz
Session Authentication

For web-based applications using cookies.

Cookie: sessionid=abc123

Error Handling

Status Code Meaning
200 Success - Request completed
400 Bad Request - Check parameters
401 Unauthorized - Check authentication
403 Forbidden - No permission
404 Not Found - Resource doesn't exist
Common Issues
  • 401 Unauthorized: Check your token format and validity
  • 403 Forbidden: You don't have access to this table
  • 404 Not Found: Check the table/row ID exists
  • Rate Limiting: Reduce request frequency
Need Help?

Contact your system administrator or IT support team for:

  • API token generation
  • Permission issues
  • Integration support
Rate Limits & Best Practices

  • Use the /data/ endpoint for reporting tools
  • Cache responses when possible
  • Filter data at the API level (not client-side)
  • Use pagination for large datasets
  • Implement exponential backoff for retries
  • Monitor your API usage
  • Keep tokens secure and rotate regularly
  • Test with small datasets first

Need Support?

Our team is here to help you integrate with the Bifrost API successfully.