An organization is your team account in Orbimon: members, roles, and Starlink monitors all belong to it.
Use a user (omb_user_…) or service (omb_svc_…) API token. What you can do depends on your role and the token scopes (read / write).
What’s in an organization
Organization
├── Users (members + roles)
│ owner — full control including deleting the organization
│ admin — members, roles, monitor administration
│ member — access to the organization’s monitors
└── Monitors
└── Starlink telemetry → Monitors API
| Role | Read org / members / monitors | Create / update org | Add / remove members, change roles | Delete org |
|---|---|---|---|---|
owner | Yes | Yes (write) | Yes (write) | Yes (write) |
admin | Yes | Yes (write) | Yes (write) | No |
member | Yes | No | No | No |
Single-organization policy: each user belongs to at most one organization.
Billing / invoices are not in the public API yet. Time series: Monitors API.
Endpoint map
| Method | Path | Scope | Who |
|---|---|---|---|
GET | /v1/organizations | read | Any member — your organization |
POST | /v1/organizations | write | User with no org — becomes owner |
GET | /v1/organizations/:org_id | read | Member |
PATCH | /v1/organizations/:org_id | write | owner / admin |
DELETE | /v1/organizations/:org_id | write | owner |
GET | /v1/organizations/:org_id/users | read | Member |
GET | /v1/organizations/:org_id/monitors | read | Member |
POST | /v1/organizations/:org_id/members | write | owner / admin — add existing user |
PATCH | /v1/organizations/:org_id/members/:user_id | write | owner / admin — change role |
DELETE | /v1/organizations/:org_id/members/:user_id | write | owner / admin — remove member |
Email invitations for users who have not signed up yet are managed in the Orbimon dashboard (not this public surface).
Get my organization
GET /v1/organizations
Authorization: Bearer <user_or_service_token>
Response 200
{
"data": {
"id": "org_…",
"name": "Acme Field Ops",
"slug": "acme-field-ops",
"image_url": null,
"role": "owner",
"created_at": "2026-01-08T14:00:00.000Z"
}
}
Errors
| Status | error |
|---|---|
401 | unauthorized |
403 | no_organization |
Create organization
POST /v1/organizations
Authorization: Bearer <user_token>
Content-Type: application/json
{
"name": "Acme Field Ops",
"slug": "acme-field-ops"
}
slug is optional (derived from name when omitted). The caller becomes owner. Fails if the user already belongs to an organization. Service tokens cannot create organizations.
Response 201
Same shape as Get my organization.
Errors
| Status | error |
|---|---|
400 | invalid_body |
401 | unauthorized |
403 | forbidden |
409 | already_in_org |
Get organization
GET /v1/organizations/:org_id
Authorization: Bearer <user_or_service_token>
Returns organization details including members and monitors (dashboard-oriented payload). For the compact public lists, prefer /users and /monitors below.
Errors
| Status | error |
|---|---|
401 | unauthorized |
403 | forbidden |
404 | not_found |
Update organization
PATCH /v1/organizations/:org_id
Authorization: Bearer <user_or_service_token>
Content-Type: application/json
{
"name": "Acme Field Ops",
"slug": "acme-field-ops"
}
Requires owner or admin and write scope. At least one of name or slug must be sent.
Errors
| Status | error |
|---|---|
403 | forbidden |
404 | not_found |
409 | slug_taken |
Delete organization
DELETE /v1/organizations/:org_id
Authorization: Bearer <user_token>
Owner only. Deletes the organization, its memberships, and all monitors (API keys revoked).
Errors
| Status | error |
|---|---|
403 | forbidden |
404 | not_found |
List users
GET /v1/organizations/:org_id/users
Authorization: Bearer <user_or_service_token>
Response 200
{
"data": [
{
"id": "user_2abc...",
"email": "alex@example.com",
"first_name": "Alex",
"last_name": "Rivera",
"role": "owner",
"image_url": "https://...",
"joined_at": "2026-01-08T14:00:00.000Z"
},
{
"id": "user_2def...",
"email": "sam@example.com",
"first_name": "Sam",
"last_name": "Lee",
"role": "member",
"image_url": null,
"joined_at": "2026-03-01T09:12:00.000Z"
}
]
}
| Field | Type | Description |
|---|---|---|
id | string | User id |
email | string | Primary email |
first_name | string | null | |
last_name | string | null | |
role | string | owner, admin, or member |
image_url | string | null | Avatar URL if set |
joined_at | string | When they joined (ISO 8601) |
List monitors
GET /v1/organizations/:org_id/monitors
Authorization: Bearer <user_or_service_token>
Returns monitors in the organization (metadata only — not time series). API secrets are not included.
Response 200
{
"data": [
{
"id": "mon_1736...",
"name": "Warehouse roof",
"starlink_id": "ut01000000-00000000-00000001",
"status": "online",
"created_at": "2026-01-08T14:00:00.000Z",
"first_data_at": "2026-01-08T15:22:11.000Z"
}
]
}
| Field | Type | Description |
|---|---|---|
id | string | Monitor id — use with the Monitors API |
name | string | Display name |
starlink_id | string | null | Dish id once connected |
status | string | online, degraded, or offline |
created_at | string | ISO 8601 |
first_data_at | string | null | First successful data upload |
Add member
POST /v1/organizations/:org_id/members
Authorization: Bearer <user_or_service_token>
Content-Type: application/json
{
"email": "sam@example.com",
"role": "member"
}
Or { "userId": "user_…", "role": "admin" }. The target user must already have an Orbimon account and must not belong to another organization. Role must be member or admin (not owner).
Adding a member fails when the organization is at its seat limit. Pending invitations count toward that limit.
Errors
| Status | error | When |
|---|---|---|
404 | user_not_found | No Orbimon account for that email |
409 | user_already_in_org | User already belongs to another organization |
409 | limit_reached | Organization is at its member limit |
Change member role
PATCH /v1/organizations/:org_id/members/:user_id
Authorization: Bearer <user_or_service_token>
Content-Type: application/json
{
"role": "admin"
}
Role must be member or admin. Cannot change your own role or demote/remove the last owner via this endpoint.
Remove member
DELETE /v1/organizations/:org_id/members/:user_id
Authorization: Bearer <user_or_service_token>
Cannot remove yourself. Cannot remove the last owner.
Coming later
- Billing endpoints
- Organization-wide metrics rollup (use per-monitor metrics today)
- Public invite-by-email for users who have not signed up yet