API reference

Every read an API key can make. Each needs the scope shown, and the key's maker must still hold that permission in your organization. Send Authorization: Bearer <key> to your region's server; {orgId} is your organization's id.

GET/v1/orgs/{orgId}

An organization.

Scope: org.read

Response fields

FieldType
idid (uuid)
namestring
slugstring
kind"direct" | "law_firm" | "mediation" | "legal_aid" | "court" | "nonprofit" | "other"
statusstring
createdAtdate-time
Example response
{
  "id": "5f0c2a1e-8d4b-4c7a-9e21-3b6f0d9a7c14",
  "name": "…",
  "slug": "…",
  "kind": "direct",
  "status": "…",
  "createdAt": "2026-10-09T18:30:00.000Z"
}

GET/v1/orgs/{orgId}/clients

Which families gave the firm's professionals access, and since when (names and dates only).

Scope: org.clients.read

Response fields

FieldType
clientsobject[]
clients[].grantIdid (uuid)
clients[].kind"attorney" | "neutral"
clients[].professionalstring
clients[].familystring
clients[].sincedate-time
clients[].endsAtdate-time | null
clients[].status"active" | "ended"
seatsobject
seats.membersinteger
seats.professionalsWithClientsinteger
seats.activeFamiliesinteger
Example response
{
  "clients": [
    {
      "grantId": "5f0c2a1e-8d4b-4c7a-9e21-3b6f0d9a7c14",
      "kind": "attorney",
      "professional": "…",
      "family": "…",
      "since": "2026-10-09T18:30:00.000Z",
      "endsAt": "2026-10-09T18:30:00.000Z",
      "status": "active"
    }
  ],
  "seats": {
    "members": 0,
    "professionalsWithClients": 0,
    "activeFamilies": 0
  }
}

GET/v1/orgs/{orgId}/members

Members and their roles.

Scope: org.members.read

Response fields

FieldType
[].userIdstring
[].namestring
[].emailstring
[].titlestring | null
[].statusstring
[].rolesobject[]
[].roles[].idid (uuid)
[].roles[].keystring
[].roles[].namestring
Example response
[
  {
    "userId": "…",
    "name": "…",
    "email": "…",
    "title": "…",
    "status": "…",
    "roles": [
      {
        "id": "5f0c2a1e-8d4b-4c7a-9e21-3b6f0d9a7c14",
        "key": "…",
        "name": "…"
      }
    ]
  }
]

GET/v1/orgs/{orgId}/outcomes

De-identified outcomes across the firm's client families over 90 days (never below 5 families).

Scope: org.analytics.read

Response fields

FieldType
windowDaysinteger
familiesinteger
minimumFamiliesinteger
shownboolean
calmMessagesobject | null
calmMessages.countinteger
calmMessages.ofinteger
calmMessages.percentnumber | null
exchangesOnTimeobject | null
exchangesOnTime.countinteger
exchangesOnTime.ofinteger
exchangesOnTime.percentnumber | null
expensesAnsweredIn14Daysobject | null
expensesAnsweredIn14Days.countinteger
expensesAnsweredIn14Days.ofinteger
expensesAnsweredIn14Days.percentnumber | null
Example response
{
  "windowDays": 0,
  "families": 0,
  "minimumFamilies": 0,
  "shown": true,
  "calmMessages": {
    "count": 0,
    "of": 0,
    "percent": 0
  },
  "exchangesOnTime": {
    "count": 0,
    "of": 0,
    "percent": 0
  },
  "expensesAnsweredIn14Days": {
    "count": 0,
    "of": 0,
    "percent": 0
  }
}

GET/v1/orgs/{orgId}/referral-codes

The organization's referral codes and their counts.

Scope: org.referrals.manage

Response fields

FieldType
[].idid (uuid)
[].codestring
[].linkstring
[].labelstring | null
[].activeboolean
[].countsobject
[].counts.signedUpinteger
[].counts.qualifiedinteger
[].counts.notCountedinteger
Example response
[
  {
    "id": "5f0c2a1e-8d4b-4c7a-9e21-3b6f0d9a7c14",
    "code": "…",
    "link": "…",
    "label": "…",
    "active": true,
    "counts": {
      "signedUp": 0,
      "qualified": 0,
      "notCounted": 0
    }
  }
]

GET/v1/orgs/{orgId}/referral-earnings

The organization's share of what families it referred have paid, by month (sums only).

Scope: org.referrals.manage

Response fields

FieldType
monthsobject[]
months[].monthstring
months[].currencystring
months[].invoicesinteger
months[].shareCentsinteger
Example response
{
  "months": [
    {
      "month": "…",
      "currency": "…",
      "invoices": 0,
      "shareCents": 0
    }
  ]
}

GET/v1/orgs/{orgId}/roles

System org roles and this organization's own.

Scope: org.roles.read

Response fields

FieldType
[].idid (uuid)
[].keystring
[].namestring
[].descriptionstring
[].isSystemboolean
[].permissionsstring[]
Example response
[
  {
    "id": "5f0c2a1e-8d4b-4c7a-9e21-3b6f0d9a7c14",
    "key": "…",
    "name": "…",
    "description": "…",
    "isSystem": true,
    "permissions": [
      "…"
    ]
  }
]

GET/v1/orgs/{orgId}/seats

The organization's seats for client families: how many, how many in use, and what pays for them.

Scope: org.billing.manage

Response fields

FieldType
totalinteger
usedinteger
paidinteger
invoicedinteger
pricePerSeatobject | null
pricePerSeat.currencystring
pricePerSeat.centsinteger
subscriptionsobject[]
subscriptions[].statusstring
subscriptions[].quantityinteger
subscriptions[].renewsAtdate-time | null
subscriptions[].cancelAtPeriodEndboolean
Example response
{
  "total": 0,
  "used": 0,
  "paid": 0,
  "invoiced": 0,
  "pricePerSeat": {
    "currency": "…",
    "cents": 0
  },
  "subscriptions": [
    {
      "status": "…",
      "quantity": 0,
      "renewsAt": "2026-10-09T18:30:00.000Z",
      "cancelAtPeriodEnd": true
    }
  ]
}

GET/v1/orgs/{orgId}/seats/families

Which client families have a seat, and which could have one (names only).

Scope: org.clients.read

Response fields

FieldType
seatsobject[]
seats[].idid (uuid)
seats[].grantIdid (uuid)
seats[].familystring
seats[].professionalstring
seats[].kindstring
seats[].givenAtdate-time
eligibleobject[]
eligible[].grantIdid (uuid)
eligible[].familystring
eligible[].professionalstring
eligible[].kindstring
endedobject[]
ended[].idid (uuid)
ended[].familystring
ended[].endedAtdate-time
ended[].reasonstring
Example response
{
  "seats": [
    {
      "id": "5f0c2a1e-8d4b-4c7a-9e21-3b6f0d9a7c14",
      "grantId": "b81e7f02-3c95-4d1a-8f6e-2a7d9c04e5b3",
      "family": "…",
      "professional": "…",
      "kind": "…",
      "givenAt": "2026-10-09T18:30:00.000Z"
    }
  ],
  "eligible": [
    {
      "grantId": "0d4a96c3-71e8-4b25-a3f9-6c1e8b72d940",
      "family": "…",
      "professional": "…",
      "kind": "…"
    }
  ],
  "ended": [
    {
      "id": "e7329b15-ca06-4f87-9d2b-58f1a3c6e0d7",
      "family": "…",
      "endedAt": "2026-10-09T18:30:00.000Z",
      "reason": "…"
    }
  ]
}