curl -X POST https://api.v2.dealmachine.com/v1/auth/device/code \
-H "Content-Type: application/json" \
-d '{
"client_id": "dealmachine-next-cli",
"device_name": "MacBook Pro"
}'
const response = await fetch('https://api.v2.dealmachine.com/v1/auth/device/code', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
client_id: 'dealmachine-next-cli',
device_name: 'MacBook Pro',
}),
});
const data = await response.json();
console.log(`Enter code: ${data.user_code}`);
console.log(`Visit: ${data.verification_uri}`);
import requests
response = requests.post(
'https://api.v2.dealmachine.com/v1/auth/device/code',
json={
'client_id': 'dealmachine-next-cli',
'device_name': 'MacBook Pro'
}
)
data = response.json()
print(f"Enter code: {data['user_code']}")
print(f"Visit: {data['verification_uri']}")
{
"device_code": "a1b2c3d4e5f6...",
"user_code": "BCDF-GHJK",
"verification_uri": "https://dm-next.dealmachine.com/device/authorize",
"verification_uri_complete": "https://dm-next.dealmachine.com/device/authorize?code=BCDF-GHJK",
"expires_in": 2592000,
"interval": 5
}
{
"error": {
"code": "invalid_request",
"message": "Invalid client_id. Must be one of: dealmachine-next-cli, dealmachine-next-mcp",
"request_id": "req_abc123"
}
}
Request Device Code
POST
/
v1
/
auth
/
device
/
code
curl -X POST https://api.v2.dealmachine.com/v1/auth/device/code \
-H "Content-Type: application/json" \
-d '{
"client_id": "dealmachine-next-cli",
"device_name": "MacBook Pro"
}'
const response = await fetch('https://api.v2.dealmachine.com/v1/auth/device/code', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
client_id: 'dealmachine-next-cli',
device_name: 'MacBook Pro',
}),
});
const data = await response.json();
console.log(`Enter code: ${data.user_code}`);
console.log(`Visit: ${data.verification_uri}`);
import requests
response = requests.post(
'https://api.v2.dealmachine.com/v1/auth/device/code',
json={
'client_id': 'dealmachine-next-cli',
'device_name': 'MacBook Pro'
}
)
data = response.json()
print(f"Enter code: {data['user_code']}")
print(f"Visit: {data['verification_uri']}")
{
"device_code": "a1b2c3d4e5f6...",
"user_code": "BCDF-GHJK",
"verification_uri": "https://dm-next.dealmachine.com/device/authorize",
"verification_uri_complete": "https://dm-next.dealmachine.com/device/authorize?code=BCDF-GHJK",
"expires_in": 2592000,
"interval": 5
}
{
"error": {
"code": "invalid_request",
"message": "Invalid client_id. Must be one of: dealmachine-next-cli, dealmachine-next-mcp",
"request_id": "req_abc123"
}
}
Start the device authorization flow. The CLI or MCP server calls this endpoint to get a device code and user code.
No authentication required. This is a public endpoint.
Flow
- Client calls this endpoint to get codes
- User visits the
verification_uriand enters theuser_code - Client polls
/v1/auth/device/tokenuntil user approves
XXXX-XXXX with an unambiguous alphabet (no 0/O, 1/I/l confusion).
curl -X POST https://api.v2.dealmachine.com/v1/auth/device/code \
-H "Content-Type: application/json" \
-d '{
"client_id": "dealmachine-next-cli",
"device_name": "MacBook Pro"
}'
const response = await fetch('https://api.v2.dealmachine.com/v1/auth/device/code', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
client_id: 'dealmachine-next-cli',
device_name: 'MacBook Pro',
}),
});
const data = await response.json();
console.log(`Enter code: ${data.user_code}`);
console.log(`Visit: ${data.verification_uri}`);
import requests
response = requests.post(
'https://api.v2.dealmachine.com/v1/auth/device/code',
json={
'client_id': 'dealmachine-next-cli',
'device_name': 'MacBook Pro'
}
)
data = response.json()
print(f"Enter code: {data['user_code']}")
print(f"Visit: {data['verification_uri']}")
{
"device_code": "a1b2c3d4e5f6...",
"user_code": "BCDF-GHJK",
"verification_uri": "https://dm-next.dealmachine.com/device/authorize",
"verification_uri_complete": "https://dm-next.dealmachine.com/device/authorize?code=BCDF-GHJK",
"expires_in": 2592000,
"interval": 5
}
{
"error": {
"code": "invalid_request",
"message": "Invalid client_id. Must be one of: dealmachine-next-cli, dealmachine-next-mcp",
"request_id": "req_abc123"
}
}
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
client_id | string | Yes | Client identifier: dealmachine-next-cli or dealmachine-next-mcp |
device_name | string | No | Friendly name for the device (e.g., “MacBook Pro”) |
Response Fields
| Field | Type | Description |
|---|---|---|
device_code | string | Secret code for polling (don’t show to user) |
user_code | string | Code for user to enter (XXXX-XXXX format) |
verification_uri | string | URL for user to visit |
verification_uri_complete | string | URL with code pre-filled |
expires_in | number | Seconds until codes expire (30 days) |
interval | number | Minimum seconds between poll requests |
⌘I