Cloud API v1

Complete reference for the HiTekNova Cloud API — authentication, device record queries, single and bulk IMEI lookup, SKU mapping.

Overview

The Cloud API exposes HiTekNova's device processing data over HTTPS as JSON. Every endpoint takes a POST request with a JSON body and returns a JSON response. All data-querying endpoints require a Bearer JWT obtained from RegisteredToken.

Base URL & Authentication

All endpoints share the same base URL. Pass your JWT in the Authorization header.

Production POST  https://cloudapi.hiteknova.com/ClientDataAPI/<method>
Test POST  https://testcloudapi.hiteknova.com/ClientDataAPI/<method>

Authorization header

Authorization: Bearer <JWT>
Content-Type: application/json

Authentication — RegisteredToken

Exchange your dashboard username and password for a JWT. The token embeds your customer_id, so every subsequent call is automatically scoped to your account. Tokens are long-lived — cache them.

POST  /ClientDataAPI/RegisteredToken

Required parameters

ParameterTypeDescription
username requiredstringDashboard username
password requiredstringDashboard password

Example — Request

curl -X POST https://cloudapi.hiteknova.com/ClientDataAPI/RegisteredToken \
  -H "Content-Type: application/json" \
  -d '{"username":"yourlogin","password":"yourpassword"}'

Response

On success the raw JWT string is returned in the body (no JSON wrapper). Use it as Authorization: Bearer <token> on every other call.

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6...

Single Lookup — getByImei

Look up history for a single IMEI or serial number. Matches either imei_esn or serial_number. Returns up to 100 records per call, paginated via fromid.

POST  /ClientDataAPI/getByImei

Required parameters

ParameterTypeDescription
imei requiredstring (min 4)Matches imei_esn OR serial_number

Optional parameters

ParameterTypeDescription
fromdatestring (YYYY-MM-DD)Default: 1 year ago
todatestring (YYYY-MM-DD)Default: today (UTC)
fromidintegerCursor — records with id > fromid
limitintegerDefault and max: 100
latestbooleanDefault false. When true, returns only the newest record (LIMIT 1, ORDER BY id DESC).
test_resultstringpassed, failed
erase_resultstringpassed, failed
report_typestringall, erase, triage
os_typestringiOS, Android
model_namestringPartial match (LIKE)

Example

curl -X POST https://cloudapi.hiteknova.com/ClientDataAPI/getByImei \
  -H "Authorization: Bearer <JWT>" \
  -H "Content-Type: application/json" \
  -d '{"imei":"356360390499091"}'

Response

{
  "status": 1,
  "msg": "",
  "total": 2,
  "has_more": false,
  "last_id": 60185,
  "data": [ { /* device record */ }, ... ]
}

All query endpoints (getByImei, getByImeiBulk, getAllDevices, getByUser, getByMachine) return records with the same shape. See Device Record Fields for the complete field reference.

Bulk Lookup — getByImeiBulk NEW

Look up history for up to 100 IMEIs or serial numbers in one call. The latest flag (default true) returns one newest record per matched input in request order — the fastest path for "do I have these devices?" checks. Set latest: false for full history with id ASC paging via from_id / last_id.

POST  /ClientDataAPI/getByImeiBulk

Required parameters

ParameterTypeDescription
imeis requiredstring[] (max 100)Array of IMEIs or serial numbers (length 4–50)

Optional parameters

ParameterTypeDescription
latestbooleanDefault true. One newest record per matched IMEI, in request order.
fromdatestring (YYYY-MM-DD)Default: 30 days ago
todatestring (YYYY-MM-DD)Default: today (UTC)
from_idintegerCursor for pagination (use with latest: false)
limitintegerDefault and max: 100
test_resultstringpassed, failed
erase_resultstringpassed, failed
report_typestringall, erase, triage
os_typestringiOS, Android
model_namestringPartial match (LIKE)
Maximum 100 IMEIs per request. Duplicates are removed automatically. IMEIs must be between 4 and 50 characters. When latest is true (the default), records are returned in the order of the input array. When latest is false, records are returned by id ASC and pagination via from_id/last_id is active.
The RAM field is populated from process.specs.ram when available (typically for Android devices with specs collected during testing).

Example — latest (default)

curl -X POST https://cloudapi.hiteknova.com/ClientDataAPI/getByImeiBulk \
  -H "Authorization: Bearer <JWT>" \
  -H "Content-Type: application/json" \
  -d '{
    "imeis": ["356360390499091","356360393577562","358991131387944"]
  }'

Example — full history, paged

{
  "imeis": ["356360390499091"],
  "latest": false,
  "fromdate": "2026-01-01",
  "limit": 100
}

// next page
{
  "imeis": ["356360390499091"],
  "latest": false,
  "from_id": 60190,
  "limit": 100
}

Example — filters

{
  "imeis": ["356360390499091","356360393577562"],
  "latest": false,
  "erase_result": "passed",
  "os_type": "Android",
  "model_name": "Galaxy S24",
  "fromdate": "2026-01-01",
  "todate": "2026-04-15"
}

Response

{
  "status": 1,
  "msg": "",
  "total": 3,
  "has_more": false,
  "last_id": 60185,
  "data": [
    {
      "id": 60184,
      "IMEI": "356360393577562",
      "IMEI2": "357332263577567",
      "SerialNumber": "R5CXB08H4PJ",
      "ModelName": "Galaxy S24 FE",
      "Capacity": "256GB",
      "RAM": "8GB",
      "BatteryMaxCapacity": "98%",
      "ErasureStatus": "Passed",
      // ... see Device Record Fields below
    }
  ]
}

List Devices — getAllDevices

List device records for the authenticated customer, filtered by date and report type. Returns up to 100 records, paginated via fromid.

POST  /ClientDataAPI/getAllDevices

Optional parameters

ParameterTypeDescription
fromdatestringDefault: 1 year ago
todatestringDefault: today (UTC)
fromidintegerCursor — records with id >= fromid
limitintegerDefault and max: 100
report_typestringall, erase, triage
latestbooleanDefault false. When true, returns only the newest record (LIMIT 1, ORDER BY id DESC).
test_resultstringpassed, failed
erase_resultstringpassed, failed
os_typestringiOS, Android
model_namestringPartial match (LIKE)

Example

curl -X POST https://cloudapi.hiteknova.com/ClientDataAPI/getAllDevices \
  -H "Authorization: Bearer <JWT>" \
  -H "Content-Type: application/json" \
  -d '{"fromdate":"2026-03-01","todate":"2026-04-15","report_type":"erase"}'

Response

{
  "status": 1,
  "msg": "",
  "total": 100,
  "has_more": true,
  "last_id": 60110,
  "data": [ { /* device record */ }, ... ]
}

All query endpoints (getByImei, getByImeiBulk, getAllDevices, getByUser, getByMachine) return records with the same shape. See Device Record Fields for the complete field reference.

Query by User — getByUser

List records created by a specific operator (username). Use for per-technician reports.

POST  /ClientDataAPI/getByUser

Required parameters

ParameterTypeDescription
username requiredstringOperator username
fromdate requiredstringYYYY-MM-DD
todate requiredstringYYYY-MM-DD
fromid requiredintegerCursor (use 0 to start)
report_type requiredstringall, erase, triage

Optional parameters

ParameterTypeDescription
data_formatinteger1 = run records through formatData() (same shape as other endpoints). Otherwise raw DB columns are returned.
limitintegerInner per-table limit (default 10000).
test_resultstringpassed, failed
erase_resultstringpassed, failed
os_typestringiOS, Android
model_namestringPartial match (LIKE)
This endpoint queries monthly-partitioned tables via UNION, so has_more in the response is always false and latest is not supported. Use fromid for cursor paging.

Example

curl -X POST https://cloudapi.hiteknova.com/ClientDataAPI/getByUser \
  -H "Authorization: Bearer <JWT>" \
  -H "Content-Type: application/json" \
  -d '{
    "username":"operator01",
    "fromdate":"2026-03-01",
    "todate":"2026-04-15",
    "fromid":0,
    "report_type":"all",
    "data_format":1
  }'

Query by Machine — getByMachine

List records processed on a specific TestPod machine (machine_sn).

POST  /ClientDataAPI/getByMachine

Required parameters

ParameterTypeDescription
machine_sn requiredstringTestPod machine serial
fromdate requiredstringYYYY-MM-DD
todate requiredstringYYYY-MM-DD
fromid requiredintegerCursor
report_type requiredstringall, erase, triage

Optional parameters

ParameterTypeDescription
limitintegerInner per-table limit (default 10000).
test_resultstringpassed, failed
erase_resultstringpassed, failed
os_typestringiOS, Android
model_namestringPartial match (LIKE)
This endpoint queries monthly-partitioned tables via UNION, so has_more in the response is always false and latest is not supported. Use fromid for cursor paging.

Example

curl -X POST https://cloudapi.hiteknova.com/ClientDataAPI/getByMachine \
  -H "Authorization: Bearer <JWT>" \
  -H "Content-Type: application/json" \
  -d '{
    "machine_sn":"TP-001234",
    "fromdate":"2026-03-01",
    "todate":"2026-04-15",
    "fromid":0,
    "report_type":"all"
  }'

SKU Mapping — getSku

Fetch the SKU mapping table for your account. Returns sku, sku_1, sku_2 rows used to enrich getBy* responses.

POST  /ClientDataAPI/getSku

Example

curl -X POST https://cloudapi.hiteknova.com/ClientDataAPI/getSku \
  -H "Authorization: Bearer <JWT>" \
  -H "Content-Type: application/json" \
  -d '{}'

Response

{
  "status": 1,
  "data": [
    { "sku": "SKU001", "sku_1": "Alias A", "sku_2": "Alias B" }
  ]
}

Device Record Fields

Every record returned by the query endpoints has the following shape. Fields may be empty strings when a value is not available.

FieldTypeDescription
idintegerRecord id (use for cursor pagination)
IMEIstringPrimary IMEI
IMEI2stringSecondary IMEI (dual-SIM)
MEIDstringCDMA MEID
SerialNumberstringDevice serial
ECIDstringApple ECID
ManufacturerstringManufacturer name
ModelNumberstringModel number (SKU code)
ModelNamestringHuman-readable model name
RegulatoryModelstringFCC / regulatory model
RegionstringRegional code
ProductTypestringProduct type
CapacitystringStorage capacity
RAMstringDevice RAM (from process.specs.ram)
ColorstringDevice color
BatteryMaxCapacitystringBattery max capacity (percent)
CycleCountstringBattery cycle count
OSTypestringiOS or Android
OSVersionstringOperating system version
BluetoothAddressstringBluetooth MAC
WifiAddressstringWi-Fi MAC
FMIStatusstringFind My iPhone / activation lock status
FRPStatusstringFactory Reset Protection status
MDMStatusstringMDM status
JailbreakstringJailbreak / root status
GSMABlacklistedstringGSMA blacklist status
SimLockstringSIM lock state
CarrierstringCarrier name
SKUstringCustomer SKU
MachineSNstringTestPod machine serial that processed the device
PortIndexstringTestPod port index
UsernamestringOperator username
LocalTimeCreatedstringLocal time the record was created
UTCTimeCreatedstringUTC creation timestamp
DiagnosticsResultstringDiagnostics app result
ManualGradingstringManual grading result
ErasureStatusstringPassed / Failed
ErasureIDstringErasure certificate ID (sha3-224 hash)
ErasureCertificateURLstringFull URL to the erasure certificate PDF
CommentsstringFree-text comments
CustomFieldstringCustom field
CustomerstringCustomer label
PurchaseOrderstringPO number
BoxNumberstringBox number

Error Handling

On failure, endpoints return status: 0 and a human-readable msg. On success, status: 1.

{
  "status": 0,
  "msg": "Data format incorrect"
}
msgDescription
Data format incorrectRequest body is not valid JSON or a required parameter is missing.
Username or password incorrectRegisteredToken — invalid credentials
Authorization failedJWT is missing, invalid, or expired — call RegisteredToken again.
Missing or invalid 'imeis'No valid IMEIs provided to getByImeiBulk after filtering (min length 4).
Too many imeis: max 100 per requestMore than 100 IMEIs sent to getByImeiBulk in a single call.
No valid imeis provided (min length 4)No valid IMEIs provided to getByImeiBulk after filtering (min length 4).

Support

Need an account, a new token, or help integrating? Contact us.

Email: support@hiteknova.com

Facebook Whats app Cookie settings