Overview
Manually register a device for a specific entity. This endpoint allows you to add device information when itβs not automatically captured through events, useful for data migrations, testing, or manual registration workflows.
Automatic Registration: In most cases, devices are automatically registered when you create user events with device information. Manual registration is typically only needed for:
- Migrating existing device data
- Testing and development
- Backfilling historical device records
Endpoint
POST https://api.gu1.ai/devices/entity/{entityId}
Authentication
Requires a valid API key in the Authorization header:
Authorization: Bearer YOUR_API_KEY
Path Parameters
UUID of the entity to associate this device with
Request Body
Unique identifier for this device. This should be a stable identifier that persists across sessions (e.g., device fingerprint, IMEI, advertising ID)
Device platform. Options:
android - Android device
ios - iOS device
web - Web browser
Example: "android"
Device manufacturer name (e.g., βsamsungβ, βAppleβ, βGoogleβ)
Device model identifier (e.g., βSM-A156Mβ, βiPhone 15 Proβ, βPixel 8β)
Device brand name (e.g., βsamsungβ, βAppleβ)
User-defined device name or hardware name
Operating system version (e.g., βAndroid 16β, βiOS 17.2β, βWindows 11β)
System name for iOS devices (e.g., βiOSβ)
System version for iOS devices (e.g., β17.2β)
Browser name for web platform (e.g., βChromeβ, βSafariβ, βFirefoxβ)
Browser version for web platform (e.g., β120.0.6099.129β)
Geographic latitude coordinate (-90 to 90)Example: -34.6037
Geographic longitude coordinate (-180 to 180)Example: -58.3816
City name (e.g., βBuenos Airesβ, βNew Yorkβ, βLondonβ)
State or province (e.g., βBuenos Airesβ, βCaliforniaβ, βOntarioβ)
Country name (e.g., βArgentinaβ, βUnited Statesβ, βCanadaβ)
ISO 3166-1 alpha-2 country code (e.g., βARβ, βUSβ, βCAβ)
IP address (IPv4 or IPv6) from which the device is accessingExample: "10.40.64.231"
Whether this device is detected as an emulator or simulator
Whether this device is rooted (Android) or jailbroken (iOS)
Response
Indicates if the request was successful
The created device objectgu1βs internal device UUID
Your provided device identifier
External device identifier (same as deviceId)
UUID of the associated entity
Device platform (android, ios, web)
Browser version (web only)
Root/jailbreak detection flag
Whether device is blocked
Whether device is marked as trusted
First time device was seen (ISO 8601 timestamp)
Last time device was seen (ISO 8601 timestamp)
Device record creation timestamp
Device record last update timestamp
Examples
curl -X POST https://api.gu1.ai/devices/entity/550e8400-e29b-41d4-a716-446655440000 \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"deviceId": "840e89e4d46efd67",
"platform": "android",
"manufacturer": "samsung",
"model": "SM-A156M",
"brand": "samsung",
"osVersion": "Android 16",
"city": "Buenos Aires",
"region": "Buenos Aires",
"country": "Argentina",
"countryCode": "AR",
"latitude": -34.6037,
"longitude": -58.3816,
"ipAddress": "10.40.64.231"
}'
Response Example
{
"success": true,
"device": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"deviceId": "840e89e4d46efd67",
"externalId": "840e89e4d46efd67",
"entityId": "550e8400-e29b-41d4-a716-446655440000",
"platform": "android",
"manufacturer": "samsung",
"model": "SM-A156M",
"brand": "samsung",
"osName": "Android",
"osVersion": "Android 16",
"browser": null,
"browserVersion": null,
"latitude": -34.6037,
"longitude": -58.3816,
"city": "Buenos Aires",
"region": "Buenos Aires",
"country": "Argentina",
"countryCode": "AR",
"ipAddress": "10.40.64.231",
"isEmulator": false,
"isRooted": false,
"isBlocked": false,
"isTrusted": false,
"firstSeenAt": "2026-01-30T10:00:00Z",
"lastSeenAt": "2026-01-30T10:00:00Z",
"createdAt": "2026-01-30T10:00:00Z",
"updatedAt": "2026-01-30T10:00:00Z"
}
}
Error Responses
400 Bad Request
{
"success": false,
"error": {
"code": "MISSING_DEVICE_ID",
"message": "Device ID is required"
}
}
401 Unauthorized
{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid or missing API key"
}
}
403 Forbidden
{
"success": false,
"error": {
"code": "FORBIDDEN",
"message": "Insufficient permissions to create devices"
}
}
404 Not Found
{
"success": false,
"error": {
"code": "ENTITY_NOT_FOUND",
"message": "Entity with ID 550e8400-e29b-41d4-a716-446655440000 not found"
}
}
500 Internal Server Error
{
"success": false,
"error": {
"code": "DEVICE_CREATE_FAILED",
"message": "Failed to create device"
}
}
Use Cases
Testing Fraud Rules
Create test devices with specific characteristics to verify your fraud detection rules work correctly:
// Create a suspicious device for testing
await createDevice({
deviceId: 'test_emulator_001',
platform: 'android',
isEmulator: true,
isRooted: true
});
Data Migration
Migrate historical device data from your existing system:
// Bulk import devices from legacy system
for (const legacyDevice of legacyDevices) {
await createDevice({
deviceId: legacyDevice.id,
platform: legacyDevice.platform,
manufacturer: legacyDevice.manufacturer,
model: legacyDevice.model,
city: legacyDevice.location.city,
country: legacyDevice.location.country
});
}
Manual Device Enrollment
Allow customers to manually register their devices:
// Customer manually adds a new trusted device
await createDevice({
deviceId: deviceFingerprint,
platform: 'web',
browser: 'Chrome',
browserVersion: '120.0',
city: userLocation.city,
country: userLocation.country
});
Next Steps