Skip to content
Docs

API reference

Devices

Import SIMs, activate, suspend and deactivate them one at a time or 500 per request, and assign them to customers.

A device is one SIM, identified by its ICCID and IMSI. It starts in inventory, becomes active once the provider confirms an activation, can be suspended and reactivated, and ends terminated after a deactivation. Provider changes are asynchronous: the device is pending until the provider confirms.

The device object

A SIM in your fleet, its lifecycle status and its last provider error, if any.

Attributes

  • iduuidRequired

    Unique identifier.

  • activated_attimestamp· nullable
  • customer_iduuid· nullable
  • effective_plan_iduuid· nullable

    The plan billed: plan_id, else the customer's default plan; null: unbilled.

  • external_idstring· nullable

    Optional customer reference.

  • iccidstringRequired

    SIM ICCID, 19-20 digits.

  • imeistring· nullable

    Optional IMEI, 15 digits.

  • imsistringRequired

    IMSI, 15 digits.

  • inserted_attimestampRequired
  • last_error_attimestamp· nullable
  • last_error_codestring· nullable

    Why the last operation failed: provider_rejected, provider_not_configured, provider_timeout, provider_rate_limited, provider_account_disabled, provider_error. Only failed operations set it (drift sync uses provider_status_mismatch).

  • last_error_messagestring· nullable

    What happened and what to do, ready to show.

  • last_failed_operationenum· nullable

    The operation the last error is about (activate | deactivate | suspend); null when there is no error. Cleared when the next operation starts.

    One ofactivatedeactivatesuspend

  • last_seen_attimestamp· nullable

    Last message received from the device.

  • pending_operationenum· nullable

    One ofactivatedeactivatesuspend

  • pending_sincetimestamp· nullable
  • plan_iduuid· nullable
  • provider_statusstring· nullable

    The status as the provider last reported it, in its own words.

  • provider_status_mismatchbooleanRequired

    true while the provider reports a different state than status (see provider_status); cleared once both agree. Independent of last_error_*, which only failed operations set.

  • provider_synced_attimestamp· nullable
  • reseller_iduuid· nullable
  • statusenumRequired

    inventory | pending | active | suspended | terminated.

    One ofinventorypendingactivesuspendedterminated

  • status_before_pendingenum· nullable

    The status to return to if the pending operation fails.

    One ofinventorypendingactivesuspendedterminated

  • suspended_attimestamp· nullable
  • terminated_attimestamp· nullable
  • updated_attimestampRequired
  • usage_this_month_bytesinteger· nullable

    Bytes used so far this UTC month (provider API pulls).

The device object
{
  "type": "device",
  "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
  "attributes": {
    "activated_at": "2026-10-12T14:03:21Z",
    "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
    "effective_plan_id": "9b2e4f61-7c3a-4d05-a8e9-3f1c6b0d5a72",
    "external_id": "trailer-207",
    "iccid": "8999001234000020718",
    "imei": "356938035643809",
    "imsi": "901880000010001",
    "inserted_at": "2026-10-12T14:03:21Z",
    "last_error_at": null,
    "last_error_code": null,
    "last_error_message": null,
    "last_failed_operation": null,
    "last_seen_at": "2026-10-12T14:03:21Z",
    "pending_operation": null,
    "pending_since": null,
    "plan_id": "9b2e4f61-7c3a-4d05-a8e9-3f1c6b0d5a72",
    "provider_status": "ACTIVATED",
    "provider_status_mismatch": false,
    "provider_synced_at": "2026-10-12T14:03:21Z",
    "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
    "status": "active",
    "status_before_pending": null,
    "suspended_at": null,
    "terminated_at": null,
    "updated_at": "2026-10-12T14:03:21Z",
    "usage_this_month_bytes": 48213
  }
}

Endpoints

List devices

get/api/json/devices

Devices in your scope, newest first. Filter by status, customer_id, last_seen_at and more, or search ICCIDs, IMSIs and external IDs with search.

Who
Resellers and Customers
Roles
Owner, Admin, Staff
  • filter[customer_id][is_nil]=true lists your inventory: devices not assigned to a customer.
  • search=8999 matches ICCIDs, IMSIs and external IDs starting with the text.

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 ofreseller_idpending_operationinserted_atprovider_synced_atlast_failed_operationplan_idlast_error_codecustomer_idprovider_statusimsiprovider_status_mismatcheffective_plan_idactivated_atpending_sincestatusupdated_atlast_seen_atusage_this_month_bytesidiccidexternal_idstatus_before_pendinglast_error_messagesuspended_atimeiterminated_atlast_error_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.

  • searchstring

    Prefix of an ICCID, IMSI or external ID (case-insensitive for external IDs).

Request
curl https://api.houndsat.com/api/json/devices \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN"
Response200 OK
{
  "data": [
    {
      "type": "device",
      "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
      "attributes": {
        "activated_at": "2026-10-12T14:03:21Z",
        "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
        "effective_plan_id": "9b2e4f61-7c3a-4d05-a8e9-3f1c6b0d5a72",
        "external_id": "trailer-207",
        "iccid": "8999001234000020718",
        "imei": "356938035643809",
        "imsi": "901880000010001",
        "inserted_at": "2026-10-12T14:03:21Z",
        "last_error_at": null,
        "last_error_code": null,
        "last_error_message": null,
        "last_failed_operation": null,
        "last_seen_at": "2026-10-12T14:03:21Z",
        "pending_operation": null,
        "pending_since": null,
        "plan_id": "9b2e4f61-7c3a-4d05-a8e9-3f1c6b0d5a72",
        "provider_status": "ACTIVATED",
        "provider_status_mismatch": false,
        "provider_synced_at": "2026-10-12T14:03:21Z",
        "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
        "status": "active",
        "status_before_pending": null,
        "suspended_at": null,
        "terminated_at": null,
        "updated_at": "2026-10-12T14:03:21Z",
        "usage_this_month_bytes": 48213
      }
    }
  ],
  "links": {
    "next": "/api/json/devices?page[after]=g2wAAAABbQAAACQ1ZjBj…"
  }
}

Get a device

get/api/json/devices/{id}

One device in your scope. Poll it after an activation to see the provider's answer.

Who
Resellers and Customers
Roles
Owner, Admin, Staff

Path parameters

  • iduuidRequired

    The record's id.

Request
curl https://api.houndsat.com/api/json/devices/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8 \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN"
Response200 OK
{
  "data": {
    "type": "device",
    "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
    "attributes": {
      "activated_at": "2026-10-12T14:03:21Z",
      "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
      "effective_plan_id": "9b2e4f61-7c3a-4d05-a8e9-3f1c6b0d5a72",
      "external_id": "trailer-207",
      "iccid": "8999001234000020718",
      "imei": "356938035643809",
      "imsi": "901880000010001",
      "inserted_at": "2026-10-12T14:03:21Z",
      "last_error_at": null,
      "last_error_code": null,
      "last_error_message": null,
      "last_failed_operation": null,
      "last_seen_at": "2026-10-12T14:03:21Z",
      "pending_operation": null,
      "pending_since": null,
      "plan_id": "9b2e4f61-7c3a-4d05-a8e9-3f1c6b0d5a72",
      "provider_status": "ACTIVATED",
      "provider_status_mismatch": false,
      "provider_synced_at": "2026-10-12T14:03:21Z",
      "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "status": "active",
      "status_before_pending": null,
      "suspended_at": null,
      "terminated_at": null,
      "updated_at": "2026-10-12T14:03:21Z",
      "usage_this_month_bytes": 48213
    }
  }
}

Add a device

post/api/json/devices

Adds one SIM to your inventory, or straight to one of your customers with customer_id. A customer adds devices to its own fleet.

Who
Resellers and Customers
Roles
Owner, Admin

Attributes

Sent as data.attributes.

  • iccidstringRequired

    SIM ICCID, 19-20 digits.

  • imsistringRequired

    IMSI, 15 digits.

  • customer_iduuid· nullable

    Customer the device is assigned to (resellers and platform users).

  • external_idstring· nullable

    Optional customer reference.

  • imeistring· nullable

    Optional IMEI, 15 digits.

Request
curl -X POST https://api.houndsat.com/api/json/devices \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{"data":{"type":"device","attributes":{"iccid":"8999001234000020718","imsi":"901880000010001","external_id":"trailer-207","customer_id":"c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14"}}}'
Response201 Created
{
  "data": {
    "type": "device",
    "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
    "attributes": {
      "activated_at": "2026-10-12T14:03:21Z",
      "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
      "effective_plan_id": "9b2e4f61-7c3a-4d05-a8e9-3f1c6b0d5a72",
      "external_id": "trailer-207",
      "iccid": "8999001234000020718",
      "imei": "356938035643809",
      "imsi": "901880000010001",
      "inserted_at": "2026-10-12T14:03:21Z",
      "last_error_at": null,
      "last_error_code": null,
      "last_error_message": null,
      "last_failed_operation": null,
      "last_seen_at": "2026-10-12T14:03:21Z",
      "pending_operation": null,
      "pending_since": null,
      "plan_id": "9b2e4f61-7c3a-4d05-a8e9-3f1c6b0d5a72",
      "provider_status": "ACTIVATED",
      "provider_status_mismatch": false,
      "provider_synced_at": "2026-10-12T14:03:21Z",
      "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "status": "active",
      "status_before_pending": null,
      "suspended_at": null,
      "terminated_at": null,
      "updated_at": "2026-10-12T14:03:21Z",
      "usage_this_month_bytes": 48213
    }
  }
}

Import devices from CSV

post/api/json/devices/import

Adds up to 5,000 SIMs from CSV text with the header iccid,imsi,imei,external_id (imei and external_id optional). Valid rows are imported, rows whose ICCID or IMSI already exists are skipped, and invalid rows are reported with their row number. The header is row 1.

Who
Resellers and Customers
Roles
Owner, Admin
  • At most 5,000 rows and 1 MB. A bigger file, or a missing or wrong header, answers 422 and imports nothing.

Body

Sent directly under data.

  • csvstringRequired

    The CSV text.

  • customer_iduuid· nullable

    Customer the devices are assigned to (resellers and platform users).

Request
curl -X POST https://api.houndsat.com/api/json/devices/import \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{"data":{"csv":"iccid,imsi,imei,external_id\n8999001234000020718,901880000010001,,trailer-207\n","customer_id":"c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14"}}'
Response200 OK
{
  "created": [
    {
      "row": 2,
      "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
      "iccid": "8999001234000020718"
    }
  ],
  "skipped": [
    {
      "row": 3,
      "iccid": "8999001234000011428",
      "reason": "already imported"
    }
  ],
  "errors": [
    {
      "row": 4,
      "iccid": "12345",
      "message": "ICCID must be 19 or 20 digits."
    }
  ]
}

Activate a device

patch/api/json/devices/{id}/activate

Asks the provider to activate an inventory or suspended device. Answers at once with status: "pending"; the device becomes active when the provider confirms, or returns to its previous status with last_error_code and last_error_message set.

Who
Resellers and Customers
Roles
Owner, Admin

Path parameters

  • iduuidRequired

    The record's id.

Request
curl -X PATCH https://api.houndsat.com/api/json/devices/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8/activate \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{"data":{"type":"device","id":"5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8","attributes":{}}}'
Response200 OK
{
  "data": {
    "type": "device",
    "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
    "attributes": {
      "activated_at": "2026-10-12T14:03:21Z",
      "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
      "effective_plan_id": "9b2e4f61-7c3a-4d05-a8e9-3f1c6b0d5a72",
      "external_id": "trailer-207",
      "iccid": "8999001234000020718",
      "imei": "356938035643809",
      "imsi": "901880000010001",
      "inserted_at": "2026-10-12T14:03:21Z",
      "last_error_at": null,
      "last_error_code": null,
      "last_error_message": null,
      "last_failed_operation": null,
      "last_seen_at": "2026-10-12T14:03:21Z",
      "pending_operation": null,
      "pending_since": null,
      "plan_id": "9b2e4f61-7c3a-4d05-a8e9-3f1c6b0d5a72",
      "provider_status": "ACTIVATED",
      "provider_status_mismatch": false,
      "provider_synced_at": "2026-10-12T14:03:21Z",
      "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "status": "active",
      "status_before_pending": null,
      "suspended_at": null,
      "terminated_at": null,
      "updated_at": "2026-10-12T14:03:21Z",
      "usage_this_month_bytes": 48213
    }
  }
}

Suspend a device

patch/api/json/devices/{id}/suspend

Suspends an active device at the provider. Reversible: activate it again later.

Who
Resellers and Customers
Roles
Owner, Admin

Path parameters

  • iduuidRequired

    The record's id.

Request
curl -X PATCH https://api.houndsat.com/api/json/devices/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8/suspend \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{"data":{"type":"device","id":"5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8","attributes":{}}}'
Response200 OK
{
  "data": {
    "type": "device",
    "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
    "attributes": {
      "activated_at": "2026-10-12T14:03:21Z",
      "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
      "effective_plan_id": "9b2e4f61-7c3a-4d05-a8e9-3f1c6b0d5a72",
      "external_id": "trailer-207",
      "iccid": "8999001234000020718",
      "imei": "356938035643809",
      "imsi": "901880000010001",
      "inserted_at": "2026-10-12T14:03:21Z",
      "last_error_at": null,
      "last_error_code": null,
      "last_error_message": null,
      "last_failed_operation": null,
      "last_seen_at": "2026-10-12T14:03:21Z",
      "pending_operation": null,
      "pending_since": null,
      "plan_id": "9b2e4f61-7c3a-4d05-a8e9-3f1c6b0d5a72",
      "provider_status": "ACTIVATED",
      "provider_status_mismatch": false,
      "provider_synced_at": "2026-10-12T14:03:21Z",
      "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "status": "active",
      "status_before_pending": null,
      "suspended_at": null,
      "terminated_at": null,
      "updated_at": "2026-10-12T14:03:21Z",
      "usage_this_month_bytes": 48213
    }
  }
}

Deactivate a device

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

Deactivates an active or suspended device at the provider. The device ends terminated, which is final.

Who
Resellers and Customers
Roles
Owner, Admin

Path parameters

  • iduuidRequired

    The record's id.

Request
curl -X PATCH https://api.houndsat.com/api/json/devices/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8/deactivate \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{"data":{"type":"device","id":"5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8","attributes":{}}}'
Response200 OK
{
  "data": {
    "type": "device",
    "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
    "attributes": {
      "activated_at": "2026-10-12T14:03:21Z",
      "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
      "effective_plan_id": "9b2e4f61-7c3a-4d05-a8e9-3f1c6b0d5a72",
      "external_id": "trailer-207",
      "iccid": "8999001234000020718",
      "imei": "356938035643809",
      "imsi": "901880000010001",
      "inserted_at": "2026-10-12T14:03:21Z",
      "last_error_at": null,
      "last_error_code": null,
      "last_error_message": null,
      "last_failed_operation": null,
      "last_seen_at": "2026-10-12T14:03:21Z",
      "pending_operation": null,
      "pending_since": null,
      "plan_id": "9b2e4f61-7c3a-4d05-a8e9-3f1c6b0d5a72",
      "provider_status": "ACTIVATED",
      "provider_status_mismatch": false,
      "provider_synced_at": "2026-10-12T14:03:21Z",
      "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "status": "active",
      "status_before_pending": null,
      "suspended_at": null,
      "terminated_at": null,
      "updated_at": "2026-10-12T14:03:21Z",
      "usage_this_month_bytes": 48213
    }
  }
}

Assign a device to a customer

patch/api/json/devices/{id}/assign

Assigns a device to one of your customers, moves it to another, or returns it to your inventory with customer_id: null. Earlier usage stays with the customer it was recorded under.

Who
Resellers
Roles
Owner, Admin
  • Refused while the device is pending, once it is terminated, and for a suspended customer.

Path parameters

  • iduuidRequired

    The record's id.

Attributes

Sent as data.attributes.

  • customer_iduuid· nullable

    The customer to assign the device to; null returns it to inventory.

Request
curl -X PATCH https://api.houndsat.com/api/json/devices/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8/assign \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{"data":{"type":"device","id":"5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8","attributes":{"customer_id":"c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14"}}}'
Response200 OK
{
  "data": {
    "type": "device",
    "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
    "attributes": {
      "activated_at": "2026-10-12T14:03:21Z",
      "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
      "effective_plan_id": "9b2e4f61-7c3a-4d05-a8e9-3f1c6b0d5a72",
      "external_id": "trailer-207",
      "iccid": "8999001234000020718",
      "imei": "356938035643809",
      "imsi": "901880000010001",
      "inserted_at": "2026-10-12T14:03:21Z",
      "last_error_at": null,
      "last_error_code": null,
      "last_error_message": null,
      "last_failed_operation": null,
      "last_seen_at": "2026-10-12T14:03:21Z",
      "pending_operation": null,
      "pending_since": null,
      "plan_id": "9b2e4f61-7c3a-4d05-a8e9-3f1c6b0d5a72",
      "provider_status": "ACTIVATED",
      "provider_status_mismatch": false,
      "provider_synced_at": "2026-10-12T14:03:21Z",
      "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "status": "active",
      "status_before_pending": null,
      "suspended_at": null,
      "terminated_at": null,
      "updated_at": "2026-10-12T14:03:21Z",
      "usage_this_month_bytes": 48213
    }
  }
}

Set a device's plan

patch/api/json/devices/{id}/plan

Bills a device on one of your retail plans instead of its customer's default plan, or clears the override with plan_id: null.

Who
Resellers
Roles
Owner, Admin

Path parameters

  • iduuidRequired

    The record's id.

Attributes

Sent as data.attributes.

  • plan_iduuid· nullable

    The retail plan; null removes the override.

Request
curl -X PATCH https://api.houndsat.com/api/json/devices/5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8/plan \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{"data":{"type":"device","id":"5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8","attributes":{"plan_id":"9b2e4f61-7c3a-4d05-a8e9-3f1c6b0d5a72"}}}'
Response200 OK
{
  "data": {
    "type": "device",
    "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
    "attributes": {
      "activated_at": "2026-10-12T14:03:21Z",
      "customer_id": "c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14",
      "effective_plan_id": "9b2e4f61-7c3a-4d05-a8e9-3f1c6b0d5a72",
      "external_id": "trailer-207",
      "iccid": "8999001234000020718",
      "imei": "356938035643809",
      "imsi": "901880000010001",
      "inserted_at": "2026-10-12T14:03:21Z",
      "last_error_at": null,
      "last_error_code": null,
      "last_error_message": null,
      "last_failed_operation": null,
      "last_seen_at": "2026-10-12T14:03:21Z",
      "pending_operation": null,
      "pending_since": null,
      "plan_id": "9b2e4f61-7c3a-4d05-a8e9-3f1c6b0d5a72",
      "provider_status": "ACTIVATED",
      "provider_status_mismatch": false,
      "provider_synced_at": "2026-10-12T14:03:21Z",
      "reseller_id": "a7d35c90-2e14-4f6b-8c03-5b9e1d4a2f67",
      "status": "active",
      "status_before_pending": null,
      "suspended_at": null,
      "terminated_at": null,
      "updated_at": "2026-10-12T14:03:21Z",
      "usage_this_month_bytes": 48213
    }
  }
}

Delete a device

delete/api/json/devices/{id}

Deletes a device that is still in inventory (never activated).

Who
Resellers and Customers
Roles
Owner, Admin

Path parameters

  • iduuidRequired

    The record's id.

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

Activate devices in bulk

post/api/json/devices/bulk/activate

Activates up to 500 devices, each exactly like Activate a device. Always answers 200 with one result per id, so one failure never stops the others.

Who
Resellers and Customers
Roles
Owner, Admin

Body

Sent directly under data.

  • idsarray of uuidRequired
Request
curl -X POST https://api.houndsat.com/api/json/devices/bulk/activate \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{"data":{"ids":["5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8"]}}'
Response200 OK
{
  "results": [
    {
      "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
      "status": "ok",
      "code": null,
      "message": null
    },
    {
      "id": "0b6d4e2a-1c9f-4a3b-8e5d-7f2c0a9b6d13",
      "status": "error",
      "code": "invalid",
      "message": "Device 8999001234000011428 is already active."
    }
  ]
}

Suspend devices in bulk

post/api/json/devices/bulk/suspend

Suspends up to 500 devices, with one result per id.

Who
Resellers and Customers
Roles
Owner, Admin

Body

Sent directly under data.

  • idsarray of uuidRequired
Request
curl -X POST https://api.houndsat.com/api/json/devices/bulk/suspend \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{"data":{"ids":["5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8"]}}'
Response200 OK
{
  "results": [
    {
      "code": null,
      "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
      "message": null,
      "status": "ok"
    }
  ]
}

Deactivate devices in bulk

post/api/json/devices/bulk/deactivate

Deactivates up to 500 devices, with one result per id. Deactivation is final.

Who
Resellers and Customers
Roles
Owner, Admin

Body

Sent directly under data.

  • idsarray of uuidRequired
Request
curl -X POST https://api.houndsat.com/api/json/devices/bulk/deactivate \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{"data":{"ids":["5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8"]}}'
Response200 OK
{
  "results": [
    {
      "code": null,
      "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
      "message": null,
      "status": "ok"
    }
  ]
}

Reassign devices in bulk

post/api/json/devices/bulk/reassign

Assigns up to 500 devices to customer_id, or returns them to your inventory with customer_id: null.

Who
Resellers
Roles
Owner, Admin

Body

Sent directly under data.

  • idsarray of uuidRequired
  • customer_iduuid· nullable

    The customer to assign the devices to; null returns them to inventory.

Request
curl -X POST https://api.houndsat.com/api/json/devices/bulk/reassign \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{"data":{"ids":["5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8"],"customer_id":"c41e9a03-6b2f-4d8e-a571-0f3b9c2d7e14"}}'
Response200 OK
{
  "results": [
    {
      "code": null,
      "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
      "message": null,
      "status": "ok"
    }
  ]
}

Change device plans in bulk

post/api/json/devices/bulk/change_plan

Sets the plan override of up to 500 devices to plan_id, or clears it with plan_id: null.

Who
Resellers
Roles
Owner, Admin

Body

Sent directly under data.

  • idsarray of uuidRequired
  • plan_iduuid· nullable

    The retail plan; null removes the override.

Request
curl -X POST https://api.houndsat.com/api/json/devices/bulk/change_plan \
  -H "Authorization: Bearer $HOUNDSAT_TOKEN" \
  -H "Content-Type: application/vnd.api+json" \
  -d '{"data":{"ids":["5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8"],"plan_id":"9b2e4f61-7c3a-4d05-a8e9-3f1c6b0d5a72"}}'
Response200 OK
{
  "results": [
    {
      "code": null,
      "id": "5f0c2b7e-8d41-4a96-b3e2-91c7d0a4e6f8",
      "message": null,
      "status": "ok"
    }
  ]
}