BlissNeat
AI-Powered
Sign In Start Free Trial
Menu
Language
Still managing receipts manually?
AI-powered automation • Start saving time today
Start Free Trial

BlissNeat API

The BlissNeat API lets you integrate expense management into your existing IT infrastructure. Use it to sync employees from your HR system, export approved expenses to your accounting software, or build custom approval workflows.

All API endpoints return JSON and require authentication. The base URL for all requests is https://blissneat.com/api/.

💡 New to APIs? Start with the Authentication section, then try the Sync from HRIS use case guide.

Authentication

BlissNeat uses JWT (JSON Web Token) authentication. Every API request must include an Authorization header with a valid access token.

Step 1 — Get your tokens

POST your manager email and password to get an access token (valid 60 minutes) and a refresh token (valid 7 days).

curl -X POST https://blissneat.com/api/token/ \
  -H "Content-Type: application/json" \
  -d '{
    "email": "you@yourcompany.com",
    "password": "yourpassword"
  }'

Step 2 — Use the token

Include the access token in the Authorization header of every request:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Step 3 — Refresh when expired

curl -X POST https://blissneat.com/api/token/refresh/ \
  -H "Content-Type: application/json" \
  -d '{"refresh": "your_refresh_token"}'

Base URL & Errors

All endpoints are relative to: https://blissneat.com/api/

Status CodeMeaning
200Success
201Created
400Bad request — check your request body
401Unauthorized — token missing or expired
403Forbidden — your account doesn't have permission
404Not found
429Rate limited — slow down requests

Employees

Manage the employees in your company. Use this to sync your HR system with BlissNeat — add new hires, deactivate leavers, update departments.

GET /api/employees/ List all employees

Returns all employees in your company.

curl https://blissneat.com/api/employees/ \
  -H "Authorization: Bearer {token}"

Response

[
  {
    "id": 42,
    "email": "sarah@acme.com",
    "first_name": "Sarah",
    "last_name": "Chen",
    "role": "employee",
    "department": "Marketing",
    "is_active": true
  }
]
POST /api/employees/ Add a new employee

Creates a new employee account. BlissNeat will send them a welcome email with login credentials automatically.

FieldTypeRequiredDescription
emailstringrequiredEmployee's work email
first_namestringrequiredFirst name
last_namestringLast name
departmentstringDepartment name
rolestringemployee, manager, or bookkeeper
curl -X POST https://blissneat.com/api/employees/ \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "newstaff@acme.com",
    "first_name": "James",
    "last_name": "Park",
    "department": "Sales",
    "role": "employee"
  }'
POST /api/employees/bulk-import/ Import multiple employees at once

Upload a CSV or JSON array to add multiple employees in one request. Useful when onboarding a new company or syncing from an HRIS.

curl -X POST https://blissneat.com/api/employees/bulk-import/ \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '[
    {"email": "alice@acme.com", "first_name": "Alice", "department": "Finance"},
    {"email": "bob@acme.com", "first_name": "Bob", "department": "Engineering"}
  ]'

Receipts

Query and manage expense receipts submitted by employees.

GET /api/receipts/ List receipts

Returns all receipts for your company. Filter by status to get only pending approvals.

Query paramValuesDescription
statuspending, approved, rejected, flaggedFilter by approval status
employeeemployee IDFilter by employee
curl "https://blissneat.com/api/receipts/?status=approved" \
  -H "Authorization: Bearer {token}"
[
  {
    "id": 101,
    "merchant_name": "Delta Airlines",
    "total_price": "342.00",
    "currency": "USD",
    "status": "approved",
    "employee_name": "Sarah Chen",
    "submitted_at": "2026-02-15T09:23:00Z",
    "approved_at": "2026-02-15T11:00:00Z"
  }
]
GET /api/receipts/export/csv/ Export receipts to CSV

Download all approved receipts as a CSV file. Use this to import into QuickBooks, Xero, or any spreadsheet.

curl "https://blissneat.com/api/receipts/export/csv/?status=approved" \
  -H "Authorization: Bearer {token}" \
  -o expenses_export.csv

Approvals

Approve or reject receipts programmatically. Useful for building auto-approval rules in your own systems.

POST /api/receipts/{id}/approve/ Approve a receipt

Approves a pending receipt. The employee will be notified by email automatically.

curl -X POST https://blissneat.com/api/receipts/101/approve/ \
  -H "Authorization: Bearer {token}"
POST /api/receipts/{id}/reject/ Reject a receipt
FieldTypeDescription
reasonstringReason shown to the employee
curl -X POST https://blissneat.com/api/receipts/101/reject/ \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"reason": "Missing business justification"}'

Expense Policies

Read and update your company's expense policies. Use this to sync policy changes from your HR system.

GET /api/workflow-policies/ List expense policies
curl https://blissneat.com/api/workflow-policies/ \
  -H "Authorization: Bearer {token}"

Departments

Manage company departments. Keep these in sync with your HR system so expense reporting stays organized.

GET /api/departments/ List departments
curl https://blissneat.com/api/departments/ \
  -H "Authorization: Bearer {token}"
POST /api/departments/ Create a department
curl -X POST https://blissneat.com/api/departments/ \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"name": "Customer Success", "budget": 5000}'

Exports

Export data in bulk for your accounting or ERP system.

GET /api/receipts/export/pdf/ Export receipts as PDF report
curl "https://blissneat.com/api/receipts/export/pdf/" \
  -H "Authorization: Bearer {token}" \
  -o expense_report.pdf

Use Case: Sync Employees from your HRIS

When you onboard a new employee in your HR system (BambooHR, Workday, etc.), you can automatically add them to BlissNeat so they can start submitting expenses immediately.

Python example — nightly sync script

import requests

BLISSNEAT_API = "https://blissneat.com/api"

def get_token():
    r = requests.post(f"{BLISSNEAT_API}/token/", json={
        "email": "admin@yourcompany.com",
        "password": "yourpassword"
    })
    return r.json()["access"]

def sync_employee(token, employee):
    headers = {"Authorization": f"Bearer {token}"}
    # Check if employee already exists
    existing = requests.get(
        f"{BLISSNEAT_API}/employees/",
        headers=headers,
        params={"email": employee["email"]}
    ).json()

    if not existing:
        # Create new employee
        requests.post(f"{BLISSNEAT_API}/employees/", headers=headers, json={
            "email": employee["email"],
            "first_name": employee["first_name"],
            "last_name": employee["last_name"],
            "department": employee["department"],
            "role": "employee"
        })
        print(f"Added {employee['email']}")
    else:
        print(f"Already exists: {employee['email']}")

# Run nightly
token = get_token()
new_hires = [  # Pull this from your HRIS API
    {"email": "newperson@acme.com", "first_name": "New", "last_name": "Person", "department": "Sales"}
]
for emp in new_hires:
    sync_employee(token, emp)

Use Case: Export Approved Expenses to Accounting

At the end of each month, pull all approved expenses and import them into QuickBooks, Xero, or your ERP system.

import requests, csv, io
from datetime import datetime, timedelta

BLISSNEAT_API = "https://blissneat.com/api"

def export_monthly_expenses(token, month_start):
    headers = {"Authorization": f"Bearer {token}"}
    
    # Get CSV export
    r = requests.get(
        f"{BLISSNEAT_API}/receipts/export/csv/",
        headers=headers,
        params={"status": "approved"}
    )
    
    # Save to file
    filename = f"expenses_{month_start.strftime('%Y_%m')}.csv"
    with open(filename, 'wb') as f:
        f.write(r.content)
    
    print(f"Exported to {filename}")
    return filename

token = get_token()
month_start = datetime.now().replace(day=1)
export_monthly_expenses(token, month_start)

Use Case: Automate Approvals by Amount

Automatically approve receipts under a threshold amount to reduce manager workload.

import requests

BLISSNEAT_API = "https://blissneat.com/api"
AUTO_APPROVE_UNDER = 50  # Auto-approve anything under $50

def auto_approve_small_receipts(token):
    headers = {"Authorization": f"Bearer {token}"}
    
    # Get all pending receipts
    receipts = requests.get(
        f"{BLISSNEAT_API}/receipts/",
        headers=headers,
        params={"status": "pending"}
    ).json()
    
    approved = 0
    for receipt in receipts:
        amount = float(receipt.get("total_price") or 0)
        if amount < AUTO_APPROVE_UNDER:
            requests.post(
                f"{BLISSNEAT_API}/receipts/{receipt['id']}/approve/",
                headers=headers
            )
            approved += 1
            print(f"Auto-approved: {receipt['merchant_name']} ${amount}")
    
    print(f"Done. Auto-approved {approved} receipts.")

token = get_token()
auto_approve_small_receipts(token)

Interactive API Explorer

Try every endpoint directly in your browser with our interactive Swagger UI. You can authenticate and make real API calls without writing any code.

Open Swagger UI → Open ReDoc →