💻
IncomeOS Developer
Freelance & Contract Income Tracker
← Hub
Monthly Earnings
KPI Summary
Recent Time EntriesView all →
DateClientProjectHoursDescriptionAmount
No time entries yet.
Add / Edit Project
No projects yet. Add one above.
Log Time Entry
Monthly Summary by Client
ClientHoursBillable $
No entries yet.
Time Log $0 total billable
DateClientProjectHoursDescriptionBillableAmount
No time entries yet.
Available Endpoints
GET
/api/incomeOS/state
Returns full dashboard state: projects, time entries, invoices, and aggregated totals.
POST
/api/incomeOS/transaction
Create a new time entry or invoice. Body: { client, project, hours, rate, date, description }
POST
/api/incomeOS/webhook
Register or update a webhook URL. Body: { url, events[] }
GET
/api/incomeOS/summary
Returns monthly & yearly earnings summaries grouped by client and project.
Webhook Configuration
Code Snippets
Fetch API (Browser/Node)
JavaScript
// GET current dashboard state
const res = await fetch('https://barbrickdesign.github.io/api/incomeOS/state', {
  headers: { 'Authorization': `Bearer ${apiKey}` }
});
const state = await res.json();
console.log(state.totals.monthlyEarnings);

// POST a new time entry
await fetch('https://barbrickdesign.github.io/api/incomeOS/transaction', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${apiKey}` },
  body: JSON.stringify({
    client: 'Acme Corp',
    project: 'API Rebuild',
    hours: 3.5,
    rate: 150,
    date: '2026-03-18',
    description: 'Implemented OAuth2 flow'
  })
});
Node.js (axios)
Node.js
const axios = require('axios');

const client = axios.create({
  baseURL: 'https://barbrickdesign.github.io/api/incomeOS',
  headers: { 'Authorization': `Bearer ${process.env.INCOMEOS_KEY}` }
});

// Fetch summary
const { data } = await client.get('/summary');
console.log(`MRR: $${data.mrr}`);

// Register webhook
await client.post('/webhook', {
  url: 'https://yourapp.com/webhook',
  events: ['new_transaction', 'invoice_paid']
});
Python (requests)
Python
import requests, os

BASE = "https://barbrickdesign.github.io/api/incomeOS"
HEADERS = {"Authorization": f"Bearer {os.environ['INCOMEOS_KEY']}"}

# Get state
state = requests.get(f"{BASE}/state", headers=HEADERS).json()
print(f"Billable this month: ${state['totals']['monthlyBillable']}")

# Log a time entry
payload = {
    "client": "Startup XYZ",
    "project": "Dashboard MVP",
    "hours": 4.0,
    "rate": 125,
    "date": "2026-03-18",
    "description": "Built chart components"
}
requests.post(f"{BASE}/transaction", json=payload, headers=HEADERS)
Webhook Payload (Sample)
JSON
{
  "event": "new_transaction",
  "timestamp": "2026-03-18T14:38:00Z",
  "version": "1.0",
  "data": {
    "client": "Acme Corp",
    "project": "API Rebuild",
    "hours": 3.5,
    "rate": 150,
    "amount": 525.00,
    "billable": true,
    "description": "Implemented OAuth2 flow",
    "date": "2026-03-18"
  },
  "meta": {
    "monthlyTotal": 8400.00,
    "openInvoices": 2,
    "activeClients": 3
  }
}
Customize Embed
Integration Tips

The iFrame embed is the simplest way to add the dashboard to any page. No build step required.

The JS snippet supports white-label integration — your domain, your branding.

Pass ?theme=light to the URL to switch themes without re-generating.

Use the Webhook tab to receive real-time events in your own backend whenever income changes.

iFrame Embed
HTML

      
📐 Preview renders in your browser after embedding.
JavaScript / White-Label Snippet
JavaScript

    
New Invoice
Invoice Tracker
#ClientDescriptionAmountInvoice DateDue DateStatusActions
No invoices yet.
🧾 Tax Estimator
⚙️ Contract Rate Calculator
💰 Savings Rate Tracker
📈 MRR Goal Tracker