Confirm a (userId, fingerprint) pair as a legitimate device
https://api.isnotai.comAuthenticate with Authorization: Bearer aik_v1_... (preferred) or the x-api-key header. Keys are region-bound. Authentication
Confirming is an idempotent upsert keyed on (userId, fingerprint): repeat calls refresh confirmedAt and are safe to retry, and a pair the platform has not seen yet is registered ahead of time (this route does not 404 on unknown ids). The request body is optional - send {} or omit it. Where fingerprints come from: the platform computes an opaque device fingerprint per session; full values are shown in the Not AI dashboard on the user profile Devices panel. The SessionAnomaly webhook payload metadata may reference a fingerprint but truncates it to 8 characters for SharedDevice anomalies, so take the full value from the dashboard. Treat fingerprints as opaque strings and URL-encode the path segment.
Path Parameters
User id.
Device fingerprint.
Body
1000.Responses
Any authenticated route can also return 401 (missing or invalid key), 429 RATE_LIMITED (edge rate limit; Retry-After is an integer number of seconds), and 5xx errors, even where not listed below. See Error Handling and Rate Limits.
Payload of DeviceConfirmResponse
Payload of ErrorEnvelope
Payload of ErrorEnvelope
curl --request POST \
--url https://api.isnotai.com/v1/users/your-userId/devices/your-fingerprint/confirm \
--header 'Authorization: Bearer aik_v1_YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{}'
import requests
url = "https://api.isnotai.com/v1/users/your-userId/devices/your-fingerprint/confirm"
payload = {}
headers = {
"Authorization": "Bearer aik_v1_YOUR_API_KEY",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const fetch = require('node-fetch');
const url = 'https://api.isnotai.com/v1/users/your-userId/devices/your-fingerprint/confirm';
const options = {
method: 'POST',
headers: {
Authorization: 'Bearer aik_v1_YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: '{}'
};
try {
const response = await fetch(url, options);
const data = await response.json();
console.log(data);
} catch (error) {
console.error(error);
}
using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://api.isnotai.com/v1/users/your-userId/devices/your-fingerprint/confirm"),
Headers =
{
{ "Authorization", "Bearer aik_v1_YOUR_API_KEY" },
},
Content = new StringContent("{}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
Sent to the API as Authorization: Bearer aik_v1_.... Held only in this tab's input element; re-enter on each browser tab. The docs site never receives or stores it.
{}
{
"data": {
"userId": "string",
"deviceFingerprint": "string",
"confirmedAt": "2024-01-01T00:00:00Z",
"notes": "string"
}
}
{
"error": {
"code": "string",
"message": "string",
"details": {}
}
}
{
"error": {
"code": "string",
"message": "string",
"details": {}
}
}