API reference
Plans
Create the retail plans you bill your customers on, priced on top of your wholesale plans.
HoundSat bills you on wholesale plans; you bill your customers on retail plans you create, each based on one of your wholesale plans. Plans are priced per device, per MB, in tiers, or as a pooled allowance shared by a customer's devices. Prices are US cents. Staff never see pricing fields.
Endpoints
The plan object
A wholesale or retail plan and its pricing.
Attributes
iduuidRequiredUnique identifier.
allowance_mbinteger· nullablepooled: MB per active device that join the customer's pool (at most 1,000,000,000).
base_plan_iduuid· nullablecurrencystringRequiredAlways USD (no tax).
data_allowance_mbinteger· nullableInformational data allowance in MB shown with the plan (never billed; at most 1,000,000,000).
inserted_attimestampRequiredkindenumRequiredwholesale (platform -> reseller) | retail (reseller -> customer).
One of
wholesaleretailmonthly_fee_centsinteger· nullablePer-device monthly fee in US cents, for each device active on at least one day of the month (no proration). per_device (required), pooled (optional). At most 99,999,999. Owner/Admin only.
namestringRequiredorganization_iduuidRequiredoverage_per_mbstring· nullablepooled: US cents per MB above the pool, up to 4 decimals, at most 1,000,000. Owner/Admin only.
price_per_mbstring· nullableper_mb: US cents per MB (1,000,000 bytes), up to 4 decimals, at most 1,000,000. Owner/Admin only.
pricing_modelenumRequiredper_device | per_mb | tiered | pooled.
One of
per_deviceper_mbtieredpooledreseller_iduuid· nullablestatusenumRequiredactive | archived (archived plans can't be newly assigned).
One of
activearchivedtiersarray of object· nullabletiered: graduated per device, ascending;
up_to_mbis the tier's upper bound in MB (null on the last tier only, which is unbounded) andprice_per_mbthe price in US cents per MB inside the tier. Owner/Admin only.price_per_mbstringRequiredup_to_mbinteger· nullable
updated_attimestampRequired
{
"type": "plan",
"id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
"attributes": {
"allowance_mb": 1,
"base_plan_id": "1e8a6c4d-0f2b-4a37-9d51-c6e3b7a0f489",
"currency": "usd",
"data_allowance_mb": 1,
"inserted_at": "2026-10-12T14:03:21Z",
"kind": "wholesale",
"monthly_fee_cents": 1250,
"name": "Northwind Freight",
"organization_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
"overage_per_mb": "…",
"price_per_mb": "…",
"pricing_model": "per_device",
"reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
"status": "active",
"tiers": [
{
"price_per_mb": "…",
"up_to_mb": 1
}
],
"updated_at": "2026-10-12T14:03:21Z"
}
}Endpoints
List plans
/api/json/plansThe wholesale plans offered to you and your retail plans, by name. Customers see the retail plans billed to them.
- 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
allowance_mbbase_plan_idcurrencydata_allowance_mbidinserted_atkindnameorganization_idpricing_modelreseller_idstatusupdated_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/plans \
-H "Authorization: Bearer $HOUNDSAT_TOKEN"{
"data": [
{
"type": "plan",
"id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
"attributes": {
"allowance_mb": 1,
"base_plan_id": "1e8a6c4d-0f2b-4a37-9d51-c6e3b7a0f489",
"currency": "usd",
"data_allowance_mb": 1,
"inserted_at": "2026-10-12T14:03:21Z",
"kind": "wholesale",
"monthly_fee_cents": 1250,
"name": "Northwind Freight",
"organization_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
"overage_per_mb": "…",
"price_per_mb": "…",
"pricing_model": "per_device",
"reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
"status": "active",
"tiers": [
{
"price_per_mb": "…",
"up_to_mb": 1
}
],
"updated_at": "2026-10-12T14:03:21Z"
}
}
],
"links": {
"next": "/api/json/plans?page[after]=g2wAAAABbQAAACQ1ZjBj…"
}
}Get a plan
/api/json/plans/{id}One plan you can read.
- Who
- Resellers and Customers
- Roles
- Owner, Admin, Staff
Path parameters
iduuidRequiredThe record's id.
curl https://api.houndsat.com/api/json/plans/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8 \
-H "Authorization: Bearer $HOUNDSAT_TOKEN"{
"data": {
"type": "plan",
"id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
"attributes": {
"allowance_mb": 1,
"base_plan_id": "1e8a6c4d-0f2b-4a37-9d51-c6e3b7a0f489",
"currency": "usd",
"data_allowance_mb": 1,
"inserted_at": "2026-10-12T14:03:21Z",
"kind": "wholesale",
"monthly_fee_cents": 1250,
"name": "Northwind Freight",
"organization_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
"overage_per_mb": "…",
"price_per_mb": "…",
"pricing_model": "per_device",
"reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
"status": "active",
"tiers": [
{
"price_per_mb": "…",
"up_to_mb": 1
}
],
"updated_at": "2026-10-12T14:03:21Z"
}
}
}Create a retail plan
/api/json/plans/retailCreates a retail plan for your customers, based on one of your active wholesale plans (base_plan_id). Assign it with Set a customer's default plan or per device.
- Who
- Resellers
- Roles
- Owner, Admin
Attributes
Sent as data.attributes.
namestringRequiredpricing_modelenumRequiredper_device | per_mb | tiered | pooled.
One of
per_deviceper_mbtieredpooledallowance_mbinteger· nullablepooled: MB per active device that join the customer's pool (at most 1,000,000,000).
base_plan_iduuid· nullabledata_allowance_mbinteger· nullableInformational data allowance in MB shown with the plan (never billed; at most 1,000,000,000).
monthly_fee_centsinteger· nullablePer-device monthly fee in US cents, for each device active on at least one day of the month (no proration). per_device (required), pooled (optional). At most 99,999,999. Owner/Admin only.
overage_per_mbstring· nullablepooled: US cents per MB above the pool, up to 4 decimals, at most 1,000,000. Owner/Admin only.
price_per_mbstring· nullableper_mb: US cents per MB (1,000,000 bytes), up to 4 decimals, at most 1,000,000. Owner/Admin only.
tiersarray of object· nullabletiered: graduated per device, ascending;
up_to_mbis the tier's upper bound in MB (null on the last tier only, which is unbounded) andprice_per_mbthe price in US cents per MB inside the tier. Owner/Admin only.price_per_mbstringRequiredUS cents per MB inside the tier (at most 1,000,000).
up_to_mbinteger· nullableUpper bound in MB (at most 1,000,000,000); null on the last tier (unbounded).
curl -X POST https://api.houndsat.com/api/json/plans/retail \
-H "Authorization: Bearer $HOUNDSAT_TOKEN" \
-H "Content-Type: application/vnd.api+json" \
-d '{"data":{"type":"plan","attributes":{"name":"Northwind Freight","pricing_model":"per_device","allowance_mb":1,"base_plan_id":"1e8a6c4d-0f2b-4a37-9d51-c6e3b7a0f489","data_allowance_mb":1,"monthly_fee_cents":1250,"overage_per_mb":"…","price_per_mb":"…","tiers":[{"price_per_mb":"…","up_to_mb":1}]}}}'{
"data": {
"type": "plan",
"id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
"attributes": {
"allowance_mb": 1,
"base_plan_id": "1e8a6c4d-0f2b-4a37-9d51-c6e3b7a0f489",
"currency": "usd",
"data_allowance_mb": 1,
"inserted_at": "2026-10-12T14:03:21Z",
"kind": "wholesale",
"monthly_fee_cents": 1250,
"name": "Northwind Freight",
"organization_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
"overage_per_mb": "…",
"price_per_mb": "…",
"pricing_model": "per_device",
"reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
"status": "active",
"tiers": [
{
"price_per_mb": "…",
"up_to_mb": 1
}
],
"updated_at": "2026-10-12T14:03:21Z"
}
}
}Update a plan
/api/json/plans/{id}Renames a retail plan or changes its pricing. Changes apply to every month billed afterwards.
- Who
- Resellers
- Roles
- Owner, Admin
Path parameters
iduuidRequiredThe record's id.
Attributes
Sent as data.attributes.
allowance_mbinteger· nullablepooled: MB per active device that join the customer's pool (at most 1,000,000,000).
data_allowance_mbinteger· nullableInformational data allowance in MB shown with the plan (never billed; at most 1,000,000,000).
monthly_fee_centsinteger· nullablePer-device monthly fee in US cents, for each device active on at least one day of the month (no proration). per_device (required), pooled (optional). At most 99,999,999. Owner/Admin only.
namestring· nullableoverage_per_mbstring· nullablepooled: US cents per MB above the pool, up to 4 decimals, at most 1,000,000. Owner/Admin only.
price_per_mbstring· nullableper_mb: US cents per MB (1,000,000 bytes), up to 4 decimals, at most 1,000,000. Owner/Admin only.
pricing_modelenum· nullableper_device | per_mb | tiered | pooled.
One of
per_deviceper_mbtieredpooledtiersarray of object· nullabletiered: graduated per device, ascending;
up_to_mbis the tier's upper bound in MB (null on the last tier only, which is unbounded) andprice_per_mbthe price in US cents per MB inside the tier. Owner/Admin only.price_per_mbstringRequiredUS cents per MB inside the tier (at most 1,000,000).
up_to_mbinteger· nullableUpper bound in MB (at most 1,000,000,000); null on the last tier (unbounded).
curl -X PATCH https://api.houndsat.com/api/json/plans/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8 \
-H "Authorization: Bearer $HOUNDSAT_TOKEN" \
-H "Content-Type: application/vnd.api+json" \
-d '{"data":{"type":"plan","id":"5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8","attributes":{"allowance_mb":1,"data_allowance_mb":1,"monthly_fee_cents":1250,"name":"Northwind Freight","overage_per_mb":"…","price_per_mb":"…","pricing_model":"per_device","tiers":[{"price_per_mb":"…","up_to_mb":1}]}}}'{
"data": {
"type": "plan",
"id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
"attributes": {
"allowance_mb": 1,
"base_plan_id": "1e8a6c4d-0f2b-4a37-9d51-c6e3b7a0f489",
"currency": "usd",
"data_allowance_mb": 1,
"inserted_at": "2026-10-12T14:03:21Z",
"kind": "wholesale",
"monthly_fee_cents": 1250,
"name": "Northwind Freight",
"organization_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
"overage_per_mb": "…",
"price_per_mb": "…",
"pricing_model": "per_device",
"reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
"status": "active",
"tiers": [
{
"price_per_mb": "…",
"up_to_mb": 1
}
],
"updated_at": "2026-10-12T14:03:21Z"
}
}
}Archive a plan
/api/json/plans/{id}/archiveKeeps a plan's current assignments but stops it from being assigned again.
- Who
- Resellers
- Roles
- Owner, Admin
Path parameters
iduuidRequiredThe record's id.
curl -X PATCH https://api.houndsat.com/api/json/plans/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8/archive \
-H "Authorization: Bearer $HOUNDSAT_TOKEN" \
-H "Content-Type: application/vnd.api+json" \
-d '{"data":{"type":"plan","id":"5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8","attributes":{}}}'{
"data": {
"type": "plan",
"id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
"attributes": {
"allowance_mb": 1,
"base_plan_id": "1e8a6c4d-0f2b-4a37-9d51-c6e3b7a0f489",
"currency": "usd",
"data_allowance_mb": 1,
"inserted_at": "2026-10-12T14:03:21Z",
"kind": "wholesale",
"monthly_fee_cents": 1250,
"name": "Northwind Freight",
"organization_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
"overage_per_mb": "…",
"price_per_mb": "…",
"pricing_model": "per_device",
"reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
"status": "active",
"tiers": [
{
"price_per_mb": "…",
"up_to_mb": 1
}
],
"updated_at": "2026-10-12T14:03:21Z"
}
}
}Unarchive a plan
/api/json/plans/{id}/unarchiveMakes an archived plan assignable again.
- Who
- Resellers
- Roles
- Owner, Admin
Path parameters
iduuidRequiredThe record's id.
curl -X PATCH https://api.houndsat.com/api/json/plans/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8/unarchive \
-H "Authorization: Bearer $HOUNDSAT_TOKEN" \
-H "Content-Type: application/vnd.api+json" \
-d '{"data":{"type":"plan","id":"5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8","attributes":{}}}'{
"data": {
"type": "plan",
"id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
"attributes": {
"allowance_mb": 1,
"base_plan_id": "1e8a6c4d-0f2b-4a37-9d51-c6e3b7a0f489",
"currency": "usd",
"data_allowance_mb": 1,
"inserted_at": "2026-10-12T14:03:21Z",
"kind": "wholesale",
"monthly_fee_cents": 1250,
"name": "Northwind Freight",
"organization_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
"overage_per_mb": "…",
"price_per_mb": "…",
"pricing_model": "per_device",
"reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
"status": "active",
"tiers": [
{
"price_per_mb": "…",
"up_to_mb": 1
}
],
"updated_at": "2026-10-12T14:03:21Z"
}
}
}Delete a plan
/api/json/plans/{id}Deletes a plan nothing uses. Archive a plan that is in use instead.
- Who
- Resellers
- Roles
- Owner, Admin
Path parameters
iduuidRequiredThe record's id.
curl -X DELETE https://api.houndsat.com/api/json/plans/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8 \
-H "Authorization: Bearer $HOUNDSAT_TOKEN"(empty body)