API Version 1.0

Risenexa
API Documentation

Build powerful integrations with our RESTful API. Track revenue, manage expenses, and access metrics data programmatically.

Quick Start

1

Create an Account

Sign up for Risenexa and access your dashboard to generate API tokens.

2

Generate API Token

Navigate to Settings > API Tokens to create a new token with specific scopes.

3

Make API Calls

Use your token to authenticate requests and start integrating with our endpoints.

Authentication

All API requests must be authenticated using a Bearer token in the Authorization header. Tokens are scoped to specific permissions.

Available Scopes

write_revenue

Create revenue streams

write_expense

Create expenses

read_metrics

Read metric snapshots

Example Request

curl https://api.risenexa.com/api/v1/snapshots \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json"

Base URL

https://api.risenexa.com/api/v1

All API endpoints are relative to this base URL.

API Endpoints

Create Revenue Stream

POST /revenue_streams

Required Scope

write_revenue

Request Body

{
  "revenue": {
    "startup_id": 123,           // or use "startup_slug": "my-startup"
    "name": "Monthly Subscription",
    "source": "stripe",          // stripe, manual, api
    "amount": "99.99",           // or "amount_cents": 9999
    "currency": "USD",
    "interval": "monthly",       // monthly, yearly, one_time
    "occurred_on": "2025-10-24",
    "notes": "October revenue"
  }
}

Response (201 Created)

{
  "id": 456,
  "status": "ok"
}

Example cURL

curl -X POST https://api.risenexa.com/api/v1/revenue_streams \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "revenue": {
      "startup_slug": "my-startup",
      "name": "Monthly Subscription",
      "amount": "99.99",
      "currency": "USD",
      "interval": "monthly",
      "occurred_on": "2025-10-24"
    }
  }'

Create Expense

POST /expenses

Required Scope

write_expense

Request Body

{
  "expense": {
    "startup_id": 123,           // or use "startup_slug": "my-startup"
    "name": "AWS Hosting",
    "amount": "500.00",          // or "amount_cents": 50000
    "currency": "USD",
    "category": "hosting",       // hosting, marketing, payroll, etc.
    "recurrence": "monthly",     // monthly, yearly, one_time
    "incurred_on": "2025-10-24",
    "vendor": "Amazon Web Services",
    "notes": "October hosting costs"
  }
}

Response (201 Created)

{
  "id": 789,
  "status": "ok"
}

Example cURL

curl -X POST https://api.risenexa.com/api/v1/expenses \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "expense": {
      "startup_slug": "my-startup",
      "name": "AWS Hosting",
      "amount": "500.00",
      "currency": "USD",
      "category": "hosting",
      "recurrence": "monthly",
      "incurred_on": "2025-10-24"
    }
  }'

Get Metric Snapshots

GET /snapshots

Required Scope

read_metrics

Query Parameters

startup_id (optional)

Filter by startup ID

startup_slug (optional)

Filter by startup slug

limit (optional, default: 50, max: 200)

Number of snapshots to return

Response (200 OK)

[
  {
    "id": 1,
    "startup": {
      "id": 123,
      "name": "My Startup",
      "slug": "my-startup"
    },
    "recorded_on": "2025-10-24",
    "mrr_cents": 999900,
    "arr_cents": 11998800,
    "monthly_expense_cents": 50000,
    "net_income_cents": 949900,
    "data": {
      "custom_field": "value"
    }
  }
]

Example cURL

curl https://api.risenexa.com/api/v1/snapshots?startup_slug=my-startup&limit=10 \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json"

Error Handling

The API uses standard HTTP response codes to indicate success or failure of requests.

Success Codes

  • 200 OK - Request succeeded
  • 201 Created - Resource created

Error Codes

  • 401 Unauthorized - Invalid/missing token
  • 403 Forbidden - Insufficient scope
  • 422 Unprocessable - Validation error

Error Response Format

{
  "error": "Missing token"
}

// or for validation errors

{
  "errors": [
    "Name can't be blank",
    "Amount must be greater than 0"
  ]
}

Rate Limits

API requests are currently unlimited during beta. Rate limits will be implemented based on your subscription tier once we launch.

Pro Tip: We recommend implementing exponential backoff and retry logic for production applications to handle potential rate limits gracefully.

Need Help?

Our developer support team is here to help you integrate quickly and efficiently.