Skip to content
Docs

API reference

Users

Invite users into your organization or your customers', change their roles, and deactivate or remove them.

Every organization has users with one of three roles. Owners and Admins manage everything; Staff can read devices, usage and messages but never see billing and can't change anything. Each organization has exactly one Owner.

The user object

A user and the organization they belong to.

Attributes

  • iduuidRequired

    Unique identifier.

  • customer_iduuid· nullable

    Customer scope, copied from the organization at creation.

  • emailstringRequired
  • inserted_attimestampRequired
  • invite_statusenumRequired

    One ofinvitedactivedisabled

  • namestring· nullable
  • organization_iduuidRequired
  • organization_levelenumRequired

    Copied from the organization at creation.

    One ofplatformresellercustomer

  • reseller_iduuid· nullable

    Reseller scope, copied from the organization at creation.

  • roleenumRequired

    One ofowneradminstaff

  • updated_attimestampRequired
The user object
{
  "type": "user",
  "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
  "attributes": {
    "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
    "email": "ops@northwind.example",
    "inserted_at": "2026-10-12T14:03:21Z",
    "invite_status": "active",
    "name": "Northwind Freight",
    "organization_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
    "organization_level": "platform",
    "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
    "role": "owner",
    "updated_at": "2026-10-12T14:03:21Z"
  }
}

Endpoints

List users

get/api/json/users

Users of your organization and of the organizations below it. Paginated, 50 per page by default.

Who
Resellers and Customers
Roles
Owner, Admin, Staff

Query parameters

  • filter[<field>]object

    Narrows the list: filter[status]=active, or with an operator: filter[inserted_at][greater_than_or_equal]=2026-10-01T00:00:00Z. Operators: in, is_nil, greater_than, greater_than_or_equal, less_than, less_than_or_equal.

    One ofcustomer_idemailidinserted_atinvite_statusnameorganization_idorganization_levelreseller_idroleupdated_at

  • sortstring

    A field to sort by; prefix it with - for descending, e.g. sort=-inserted_at. Separate several with commas.

  • page[limit]integer

    Page size: 50 by default, at most 200.

  • page[after]string

    The cursor from links.next of the previous page. page[offset] works too.

  • page[count]boolean

    true adds the total number of matches in meta.page.total.

Request
curl https://api.houndsat.com/api/json/users \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN"
Response200 OK
{
  "data": [
    {
      "type": "user",
      "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
      "attributes": {
        "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
        "email": "ops@northwind.example",
        "inserted_at": "2026-10-12T14:03:21Z",
        "invite_status": "active",
        "name": "Northwind Freight",
        "organization_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
        "organization_level": "platform",
        "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
        "role": "owner",
        "updated_at": "2026-10-12T14:03:21Z"
      }
    }
  ],
  "links": {
    "next": "/api/json/users?page[after]=g2wAAAABbQAAACQ1ZjBj…"
  }
}

Get a user

get/api/json/users/{id}

One user in your scope.

Who
Resellers and Customers
Roles
Owner, Admin, Staff

Path parameters

  • iduuidRequired

    The record's id.

Request
curl https://api.houndsat.com/api/json/users/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8 \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN"
Response200 OK
{
  "data": {
    "type": "user",
    "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
    "attributes": {
      "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
      "email": "ops@northwind.example",
      "inserted_at": "2026-10-12T14:03:21Z",
      "invite_status": "active",
      "name": "Northwind Freight",
      "organization_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "organization_level": "platform",
      "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "role": "owner",
      "updated_at": "2026-10-12T14:03:21Z"
    }
  }
}

Invite a user

post/api/json/users

Invites a user into your organization or one of your customers, and emails them a link to set their password. The link is valid for 7 days. The first user of a new organization must be its Owner; later users are Admin or Staff.

Who
Resellers and Customers
Roles
Owner, Admin
  • Invite emails to your customers carry your branding and never mention HoundSat.
  • An email address that is already in use answers 422 email_unavailable.

Attributes

Sent as data.attributes.

  • emailstringRequired
  • organization_iduuidRequired
  • roleenumRequired

    One ofowneradminstaff

  • namestring· nullable
Request
curl -X POST https://api.houndsat.com/api/json/users \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{"data":{"type":"user","attributes":{"email":"ops@northwind.example","organization_id":"a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67","role":"owner","name":"Northwind Freight"}}}'
Response201 Created
{
  "data": {
    "type": "user",
    "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
    "attributes": {
      "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
      "email": "ops@northwind.example",
      "inserted_at": "2026-10-12T14:03:21Z",
      "invite_status": "active",
      "name": "Northwind Freight",
      "organization_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "organization_level": "platform",
      "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "role": "owner",
      "updated_at": "2026-10-12T14:03:21Z"
    }
  }
}

Change a user's role

patch/api/json/users/{id}/role

Switches a user between Admin and Staff. The Owner role can't be granted or removed, and you can't change your own role.

Who
Resellers and Customers
Roles
Owner, Admin

Path parameters

  • iduuidRequired

    The record's id.

Attributes

Sent as data.attributes.

  • roleenumRequired

    One ofadminstaff

Request
curl -X PATCH https://api.houndsat.com/api/json/users/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8/role \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{"data":{"type":"user","id":"5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8","attributes":{"role":"admin"}}}'
Response200 OK
{
  "data": {
    "type": "user",
    "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
    "attributes": {
      "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
      "email": "ops@northwind.example",
      "inserted_at": "2026-10-12T14:03:21Z",
      "invite_status": "active",
      "name": "Northwind Freight",
      "organization_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "organization_level": "platform",
      "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "role": "owner",
      "updated_at": "2026-10-12T14:03:21Z"
    }
  }
}

Resend an invite

patch/api/json/users/{id}/resend_invite

Sends a fresh invite email to a user who hasn't accepted yet. Earlier invite links stop working.

Who
Resellers and Customers
Roles
Owner, Admin

Path parameters

  • iduuidRequired

    The record's id.

Request
curl -X PATCH https://api.houndsat.com/api/json/users/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8/resend_invite \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{"data":{"type":"user","id":"5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8","attributes":{}}}'
Response200 OK
{
  "data": {
    "type": "user",
    "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
    "attributes": {
      "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
      "email": "ops@northwind.example",
      "inserted_at": "2026-10-12T14:03:21Z",
      "invite_status": "active",
      "name": "Northwind Freight",
      "organization_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "organization_level": "platform",
      "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "role": "owner",
      "updated_at": "2026-10-12T14:03:21Z"
    }
  }
}

Deactivate a user

patch/api/json/users/{id}/deactivate

Stops a user from signing in and revokes their tokens at once.

Who
Resellers and Customers
Roles
Owner, Admin

Path parameters

  • iduuidRequired

    The record's id.

Request
curl -X PATCH https://api.houndsat.com/api/json/users/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8/deactivate \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{"data":{"type":"user","id":"5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8","attributes":{}}}'
Response200 OK
{
  "data": {
    "type": "user",
    "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
    "attributes": {
      "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
      "email": "ops@northwind.example",
      "inserted_at": "2026-10-12T14:03:21Z",
      "invite_status": "active",
      "name": "Northwind Freight",
      "organization_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "organization_level": "platform",
      "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "role": "owner",
      "updated_at": "2026-10-12T14:03:21Z"
    }
  }
}

Delete a user

delete/api/json/users/{id}

Deletes a user. You can't delete yourself or an active Owner; you can delete a customer's Owner who hasn't accepted their invite yet, to fix a mistyped email.

Who
Resellers and Customers
Roles
Owner, Admin

Path parameters

  • iduuidRequired

    The record's id.

Request
curl -X DELETE https://api.houndsat.com/api/json/users/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8 \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN"
Response200 OK
(empty body)