UPIP Business API

Build integrations with the UPIP Business platform. Manage invoices, team members, analytics, and AI features programmatically.

Base URL: https://api.upip.company/v1

Your API Key

Use this key in the Authorization header for all requests.

Authentication

All API requests require a Bearer token in the Authorization header.

curl -X GET https://api.upip.company/v1/invoices \
  -H "Authorization: Bearer upip_biz_YOUR_KEY" \
  -H "Content-Type: application/json"
API Key Security Never expose your API key in client-side code. Always make API calls from your backend server.

Rate Limits

Rate limits vary by plan tier. Exceeding limits returns a 429 Too Many Requests response.

Tier Requests/min Requests/day Price
Free 30 1,000 $0/mo
Starter 120 10,000 $29/mo
Business 600 100,000 $99/mo
Enterprise Unlimited Unlimited Custom

Error Handling

The API uses standard HTTP status codes. All error responses include a JSON body with an error field.

{
  "error": {
    "code": "invoice_not_found",
    "message": "Invoice INV-9999 does not exist",
    "status": 404
  }
}

Invoices

GET /invoices List all invoices

Query Parameters

NameTypeRequiredDescription
statusstringoptionalFilter: paid, pending, overdue, draft, sent
pageintegeroptionalPage number (default: 1)
limitintegeroptionalResults per page (default: 20, max: 100)
customerstringoptionalFilter by customer name or ID

Response

{
  "invoices": [
    {
      "id": "INV-2401",
      "customer": "Acme Corp",
      "amount": 1250.00,
      "status": "paid",
      "created_at": "2026-02-05T10:30:00Z",
      "due_date": "2026-03-05T00:00:00Z"
    }
  ],
  "total": 47,
  "page": 1,
  "pages": 3
}
POST /invoices Create a new invoice

Request Body

NameTypeRequiredDescription
customer_namestringrequiredCustomer or company name
customer_emailstringrequiredEmail for delivery
line_itemsarrayrequiredArray of {description, quantity, unit_price}
due_datestringoptionalISO 8601 date (default: +30 days)
tax_ratenumberoptionalTax percentage (default: 0)
notesstringoptionalNotes shown on invoice
curl -X POST https://api.upip.company/v1/invoices \
  -H "Authorization: Bearer upip_biz_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_name": "Acme Corp",
    "customer_email": "[email protected]",
    "line_items": [
      {"description": "Consulting (10 hrs)", "quantity": 10, "unit_price": 150.00},
      {"description": "Software License", "quantity": 1, "unit_price": 500.00}
    ],
    "tax_rate": 8.5,
    "notes": "Net 30"
  }'
GET /invoices/:id Get invoice details

Returns full invoice details including line items, payment history, and PDF download URL.

{
  "id": "INV-2401",
  "customer": { "name": "Acme Corp", "email": "[email protected]" },
  "line_items": [...],
  "subtotal": 2000.00,
  "tax": 170.00,
  "total": 2170.00,
  "status": "paid",
  "pdf_url": "https://api.upip.company/v1/invoices/INV-2401/pdf",
  "payment_link": "https://pay.upip.company/INV-2401"
}
PUT /invoices/:id Update invoice (draft only)

Update an invoice that is still in draft status. Sent or paid invoices cannot be modified.

Draft only This endpoint returns 400 if the invoice has already been sent or paid.
POST /invoices/:id/send Send invoice to customer

Sends the invoice via email with a payment link. Changes status from draft to sent.

{
  "success": true,
  "message": "Invoice INV-2401 sent to [email protected]",
  "payment_link": "https://pay.upip.company/INV-2401"
}

Team

GET /team/members List all team members

Query Parameters

NameTypeRequiredDescription
departmentstringoptionalFilter by department
statusstringoptionalonline, offline, busy
{
  "members": [
    {
      "id": "usr_abc123",
      "name": "Alex Morgan",
      "role": "Team Lead",
      "department": "Operations",
      "status": "online",
      "performance_score": 94
    }
  ],
  "total": 23
}
POST /team/members Add a team member
NameTypeRequiredDescription
namestringrequiredFull name
emailstringrequiredEmail address
rolestringrequiredTeam Member, Team Lead, Manager, Admin
departmentstringoptionalOperations, Sales, Support, Engineering, Marketing
hourly_ratenumberoptionalHourly pay rate in USD
POST /team/shifts Create or update a shift
NameTypeRequiredDescription
member_idstringrequiredTeam member ID
startstringrequiredShift start (ISO 8601)
endstringrequiredShift end (ISO 8601)
notesstringoptionalShift notes

Analytics

GET /analytics/revenue Revenue data by period
NameTypeRequiredDescription
periodstringoptional7d, 30d, 90d, 1y (default: 30d)
granularitystringoptionaldaily, weekly, monthly
{
  "total": 47250.00,
  "change_pct": 12.5,
  "data": [
    { "date": "2026-02-01", "amount": 1580.00 },
    { "date": "2026-02-02", "amount": 2100.00 }
  ]
}
GET /analytics/customers Customer acquisition and retention metrics
{
  "total_active": 1284,
  "new_this_period": 87,
  "retention_rate": 87.5,
  "churn_rate": 2.1,
  "avg_lifetime_value": 4200.00
}
POST /analytics/reports Generate a business report
NameTypeRequiredDescription
typestringrequiredrevenue, customers, team, full
periodstringoptionalDate range (default: last 30 days)
formatstringoptionaljson, pdf, csv (default: json)

AI Features

Integrate BUBO (business optimization AI) and Berkeley (analytical AI) into your workflows.

POST /ai/chat Chat with BUBO business AI
NameTypeRequiredDescription
messagestringrequiredYour question or request
modestringoptionaldefault (BUBO), objective (Berkeley), strategic (Winston)
contextobjectoptionalBusiness context data for better answers
curl -X POST https://api.upip.company/v1/ai/chat \
  -H "Authorization: Bearer upip_biz_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "message": "What should I focus on to increase revenue?",
    "mode": "objective"
  }'
{
  "response": "Based on your data: your invoice collection rate is 94.2% but 5 invoices are overdue totaling $2,100. Focus on: 1) Send payment reminders for overdue invoices, 2) Your Tuesday revenue is consistently highest - consider running promotions on slower days, 3) Customer retention is strong at 87.5% but new acquisition has slowed.",
  "personality": "berkeley",
  "confidence": 0.92
}
GET /ai/insights AI-generated business insights

Returns automatically generated insights based on your business data. Updated daily.

{
  "insights": [
    {
      "type": "opportunity",
      "title": "Tuesday Revenue Spike Detected",
      "description": "Revenue on Tuesdays is 37% higher than average. Consider allocating more staff and running promotions on this day.",
      "impact": "high"
    }
  ]
}

SDKs & Libraries

Official client libraries are coming soon. In the meantime, use standard HTTP libraries:

JavaScript / Node.js

const response = await fetch('https://api.upip.company/v1/invoices', {
  headers: { 'Authorization': `Bearer ${API_KEY}` }
});
const data = await response.json();
console.log(data.invoices);

Python

import requests

response = requests.get(
    'https://api.upip.company/v1/invoices',
    headers={'Authorization': f'Bearer {API_KEY}'}
)
invoices = response.json()['invoices']

cURL

curl https://api.upip.company/v1/invoices \
  -H "Authorization: Bearer upip_biz_YOUR_KEY"