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.
Endpoints
The user object
A user and the organization they belong to.
Attributes
iduuidRequiredUnique identifier.
customer_iduuid· nullableCustomer scope, copied from the organization at creation.
emailstringRequiredinserted_attimestampRequiredinvite_statusenumRequiredOne of
invitedactivedisablednamestring· nullableorganization_iduuidRequiredorganization_levelenumRequiredCopied from the organization at creation.
One of
platformresellercustomerreseller_iduuid· nullableReseller scope, copied from the organization at creation.
roleenumRequiredOne of
owneradminstaffupdated_attimestampRequired
{
"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
/api/json/usersUsers 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>]objectNarrows 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 of
customer_idemailidinserted_atinvite_statusnameorganization_idorganization_levelreseller_idroleupdated_atsortstringA field to sort by; prefix it with
-for descending, e.g.sort=-inserted_at. Separate several with commas.page[limit]integerPage size: 50 by default, at most 200.
page[after]stringThe cursor from
links.nextof the previous page.page[offset]works too.page[count]booleantrueadds the total number of matches inmeta.page.total.
curl https://api.houndsat.com/api/json/users \
-H "Authorization: Bearer $HOUNDSAT_TOKEN"{
"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
/api/json/users/{id}One user in your scope.
- Who
- Resellers and Customers
- Roles
- Owner, Admin, Staff
Path parameters
iduuidRequiredThe record's id.
curl https://api.houndsat.com/api/json/users/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8 \
-H "Authorization: Bearer $HOUNDSAT_TOKEN"{
"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
/api/json/usersInvites 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.
emailstringRequiredorganization_iduuidRequiredroleenumRequiredOne of
owneradminstaffnamestring· nullable
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"}}}'{
"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
/api/json/users/{id}/roleSwitches 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
iduuidRequiredThe record's id.
Attributes
Sent as data.attributes.
roleenumRequiredOne of
adminstaff
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"}}}'{
"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
/api/json/users/{id}/resend_inviteSends 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
iduuidRequiredThe record's id.
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":{}}}'{
"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
/api/json/users/{id}/deactivateStops a user from signing in and revokes their tokens at once.
- Who
- Resellers and Customers
- Roles
- Owner, Admin
Path parameters
iduuidRequiredThe record's id.
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":{}}}'{
"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
/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
iduuidRequiredThe record's id.
curl -X DELETE https://api.houndsat.com/api/json/users/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8 \
-H "Authorization: Bearer $HOUNDSAT_TOKEN"(empty body)