Skip to main content

Quickstart Guide

Prerequisites

export APITOKEN="your-token-here"

Verify Your Connection

Test that your token works:

curl -X POST https://graphql.pointonenav.com/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $APITOKEN" \
-d '{
"query": "query { myDevices(limit: 1) { totalElements } }"
}'

Expected response:

{
"data": {
"myDevices": {
"totalElements": 1
}
}
}

List Your Devices

Your first device was automatically created during signup. List all devices:

curl -X POST https://graphql.pointonenav.com/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $APITOKEN" \
-d '{
"query": "query { myDevices(limit: 50) { content { id label enabled createdAt } totalElements } }"
}'

Response:

{
"data": {
"myDevices": {
"content": [
{
"id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
"label": "Trial Device",
"enabled": true,
"createdAt": "2025-03-04T17:58:26.000Z"
}
],
"totalElements": 1
}
}
}

Copy your device ID for the next steps.

Query Device Details

Get device information including NTRIP credentials:

curl -X POST https://graphql.pointonenav.com/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $APITOKEN" \
-d '{
"query": "query GetDevice($id: ID!) { device(id: $id) { id label services { rtk { enabled connectionStatus ntrip { login password casterUrl mountPoint } } } } }",
"variables": {
"id": "YOUR ID HERE"
}
}'

Response:

{
"data": {
"device": {
"id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
"label": "Trial Device",
"services": {
"rtk": {
"enabled": true,
"connectionStatus": "NO_CONNECTION",
"ntrip": {
"login": "**********",
"password": "**********",
"casterUrl": null,
"mountPoint": null
}
}
}
}
}
}

Update Device Label

Rename your device:

curl -X POST https://graphql.pointonenav.com/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $APITOKEN" \
-d '{
"query": "mutation UpdateDevice($device: DeviceInput!) { updateDevice(device: $device) { id label updatedAt } }",
"variables": {
"device": {
"id": "YOUR ID HERE",
"label": "Production Rover 1"
}
}
}'

Response:

{
"data": {
"updateDevice": {
"id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
"label": "Production Rover 1",
"updatedAt": "2025-11-22T03:20:35.000Z"
}
}
}

Add Tags to Devices

Tags are arbitrary key-value pairs, that allow you to organize and query devices by your own criteria. For example, if you operate robotic lawn mowers, you could tag devices with customer IDs and serial numbers.

Add a customer ID tag:

curl -X POST https://graphql.pointonenav.com/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $APITOKEN" \
-d '{
"query": "mutation SetTag($input: TagInput!) { setDeviceTag(input: $input) { key value createdAt } }",
"variables": {
"input": {
"key": "customer_id",
"value": "CUST-12345",
"ids": ["XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"]
}
}
}'

Response:

{
"data": {
"setDeviceTag": {
"key": "customer_id",
"value": "CUST-12345",
"createdAt": "2025-11-22T03:21:07.000Z"
}
}
}

Add a serial number tag:

curl -X POST https://graphql.pointonenav.com/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $APITOKEN" \
-d '{
"query": "mutation SetTag($input: TagInput!) { setDeviceTag(input: $input) { key value } }",
"variables": {
"input": {
"key": "serial_number",
"value": "SN-78910",
"ids": ["XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"]
}
}
}'

Response:

{
"data": {
"setDeviceTag": {
"key": "serial_number",
"value": "SN-78910"
}
}
}

Query Devices by Tags

Find all devices for a specific customer:

curl -X POST https://graphql.pointonenav.com/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $APITOKEN" \
-d '{
"query": "query DevicesByCustomer($customerId: String!) { myDevices(filter: { tag: { key: \"customer_id\", value: { eq: $customerId } } }) { content { id label tags { key value } } totalElements } }",
"variables": {
"customerId": "CUST-12345"
}
}'

Query by serial number:

curl -X POST https://graphql.pointonenav.com/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $APITOKEN" \
-d '{
"query": "query DeviceBySerial($serialNumber: String!) { myDevices(filter: { tag: { key: \"serial_number\", value: { eq: $serialNumber } } }) { content { id label services { rtk { connectionStatus } } } } }",
"variables": {
"serialNumber": "SN-78910"
}
}'

Response:

{
"data": {
"myDevices": {
"content": [
{
"id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
"label": "Production Rover 1",
"services": {
"rtk": {
"connectionStatus": "NO_CONNECTION"
}
}
}
]
}
}
}

Troubleshooting

401 Unauthorized

  • Verify your token is correct and not expired
  • Check the Authorization: Bearer header format
  • Tokens expire after the configured period (default 365 days)

GraphQL errors

  • Check that field names match the schema exactly (case-sensitive)
  • Ensure required variables are provided

Device not found

  • Confirm the device ID exists using the myDevices query
  • Verify the device belongs to your account

Next Steps