REST API · v1

API Reference

The Udala REST API lets you build integrations, automate workflows and sync data between Udala and your other systems.

⚠️ The Udala API is available on Growth and Enterprise plans. The API is launching with Udala v1.0 in January 2027. This reference covers the planned v1 endpoints.

Authentication

Udala uses Bearer token authentication. Generate an API key from Settings → API Keys in your workspace.

All API requests must include the Authorization header and the X-Workspace header identifying which company workspace you're querying:

Authorization: Bearer YOUR_API_KEY
X-Workspace: nexus-group
Content-Type: application/json

🔒 API keys are workspace-scoped. A key for nexus-group cannot access data from nexus-finance. This enforces tenant isolation at the API layer.

Rate Limits

API rate limits by plan:

Rate limit headers are returned on every response:

X-RateLimit-Limit: 10000
X-RateLimit-Remaining: 9847
X-RateLimit-Reset: 1704067200

Error Handling

All errors return a consistent JSON body:

{
  "success": false,
  "statusCode": 422,
  "message": "The email field is required.",
  "timestamp": "2027-01-01T08:00:00.000Z",
  "path": "/api/v1/contacts"
}

Standard HTTP status codes are used:

Invoices

GET /api/v1/finance/invoices List all invoices

Query Parameters:

  • status - draft | sent | paid | overdue
  • customer_id - Filter by customer
  • from_date - ISO 8601 date (e.g. 2027-01-01)
  • to_date - ISO 8601 date
  • page - Page number (default: 1)
  • per_page - Items per page (default: 25, max: 100)
curl -X GET "https://api.udala.africa/api/v1/finance/invoices?status=paid" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "X-Workspace: nexus-group"

Response:

{
  "success": true,
  "data": {
    "items": [
      {
        "id": "inv_01hx7k...",
        "number": "INV-2027-0001",
        "customer": { "id": "cust_...", "name": "Dangote Flour Mills" },
        "status": "paid",
        "currency": "NGN",
        "subtotal": 500000,
        "tax": 37500,
        "total": 537500,
        "due_date": "2027-01-31",
        "paid_at": "2027-01-28T14:22:00Z"
      }
    ],
    "pagination": { "page": 1, "per_page": 25, "total": 142, "last_page": 6 }
  },
  "timestamp": "2027-02-01T08:00:00Z"
}
POST /api/v1/finance/invoices Create an invoice
{
  "customer_id": "cust_01hx...",
  "currency": "NGN",
  "due_date": "2027-02-28",
  "payment_terms": "NET_30",
  "line_items": [
    {
      "description": "ERP Implementation - Phase 1",
      "quantity": 1,
      "unit_price": 500000,
      "tax_rate": 7.5
    }
  ],
  "notes": "Payment via bank transfer to GTB account."
}

Employees

GET /api/v1/hr/employees List employees

Returns a paginated list of employees in the current workspace.

curl -X GET "https://api.udala.africa/api/v1/hr/employees" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "X-Workspace: nexus-group"
POST /api/v1/hr/employees Create an employee
{
  "first_name": "Adaeze",
  "last_name": "Okafor",
  "email": "ada.okafor@company.com",
  "phone": "+234 801 234 5678",
  "department_id": "dept_...",
  "job_title": "Senior Finance Analyst",
  "employment_type": "FULL_TIME",
  "start_date": "2027-01-15",
  "gross_salary": 450000,
  "salary_currency": "NGN"
}

Contacts (CRM)

GET /api/v1/crm/contacts List contacts

Returns contacts with optional search and filter.

POST /api/v1/crm/contacts Create a contact
{
  "name": "Bayo Adewale",
  "email": "bayo@company.ng",
  "phone": "+234 802 000 1111",
  "company": "Adewale & Co",
  "type": "LEAD",
  "source": "REFERRAL"
}

Webhooks

Udala sends webhook events to your configured endpoint whenever key events happen. Register webhooks from Settings → Webhooks.

POST https://your-server.com/udala-webhook
Content-Type: application/json
X-Udala-Signature: sha256=abc123...

{
  "event": "invoice.paid",
  "workspace": "nexus-group",
  "timestamp": "2027-01-28T14:22:00Z",
  "data": {
    "invoice_id": "inv_01hx7k...",
    "amount": 537500,
    "currency": "NGN",
    "customer_id": "cust_..."
  }
}

Webhook Event Types

Ready to build?

Join the waitlist to get API access when we launch in January 2027.

Join Waitlist Talk to Enterprise Sales