Account endpoints
Check which member and key a request runs as, see today's quota usage, and fetch the OpenAPI document.
All paths are relative to https://urnextdoor.com/api/v1. See API reference for the envelope and headers every endpoint shares.
| Endpoint | What it does | Scope | Daily quota |
|---|---|---|---|
GET /me | Who am I | any key | not counted |
GET /usage | Today's quota usage | any key | not counted |
GET /openapi.json | OpenAPI document | public, no key | not counted |
Who am I
GET https://urnextdoor.com/api/v1/me
Returns the member this key acts as and details of the key itself (name, prefix, scopes, expiry). Works with any valid key. Use it to test a key.
- Auth: your API key (Bearer or X-API-Key)
- Scope: any valid key
- Daily quota: not counted
- operationId:
getMe
Example
curl "https://urnextdoor.com/api/v1/me" \
-H "Authorization: Bearer $UND_API_KEY"const res = await fetch("https://urnextdoor.com/api/v1/me", {
headers: {
Authorization: `Bearer ${process.env.UND_API_KEY}`,
},
});
console.log(res.status, await res.json());import os
import requests
api_key = os.environ["UND_API_KEY"]
response = requests.get(
"https://urnextdoor.com/api/v1/me",
headers={
"Authorization": f"Bearer {api_key}",
},
timeout=30,
)
print(response.status_code, response.json())<?php
$apiKey = getenv('UND_API_KEY');
$ch = curl_init('https://urnextdoor.com/api/v1/me');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
],
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
echo $status, PHP_EOL, $body, PHP_EOL;Sample response: 200 OK
{
"ok": true,
"user": {
"id": 7,
"username": "aarav",
"display_name": "Aarav",
"plan": "free",
"profile_url": "https://urnextdoor.com/users/aarav"
},
"key": {
"id": 3,
"name": "Claude Code",
"prefix": "und_sk_7Hq2x",
"scopes": [
"content",
"media",
"schedule",
"read"
],
"created_at": "2026-10-15T09:00:00Z",
"expires_at": "2027-01-13T09:00:00Z"
},
"request_id": "9f8e7d6c5b4a3921"
}Responses
| Status | Meaning | Codes |
|---|---|---|
200 OK | The member and the key. | |
401 Unauthorized | No key, or the key is unknown, malformed, revoked or expired, or the member is not active. | missing_api_key, invalid_api_key |
421 Misdirected Request | Called on a community subdomain. Use https://urnextdoor.com. | wrong_host |
429 Too Many Requests | Over 60 requests a minute from this member (or too many failed key checks from one address), or today's quota for this action is used up. | rate_limited, quota_exceeded |
500 Internal Server Error | Our fault. Safe to retry with the same Idempotency-Key. | server_error |
503 Service Unavailable | The API is switched off. | api_disabled |
Today's quota usage
GET https://urnextdoor.com/api/v1/usage
Returns your plan, the current UTC day, when counters reset, and used and remaining counts for each action. Works with any valid key and is not quota-counted.
- Auth: your API key (Bearer or X-API-Key)
- Scope: any valid key
- Daily quota: not counted
- operationId:
getUsage
Example
curl "https://urnextdoor.com/api/v1/usage" \
-H "Authorization: Bearer $UND_API_KEY"const res = await fetch("https://urnextdoor.com/api/v1/usage", {
headers: {
Authorization: `Bearer ${process.env.UND_API_KEY}`,
},
});
console.log(res.status, await res.json());import os
import requests
api_key = os.environ["UND_API_KEY"]
response = requests.get(
"https://urnextdoor.com/api/v1/usage",
headers={
"Authorization": f"Bearer {api_key}",
},
timeout=30,
)
print(response.status_code, response.json())<?php
$apiKey = getenv('UND_API_KEY');
$ch = curl_init('https://urnextdoor.com/api/v1/usage');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
],
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
echo $status, PHP_EOL, $body, PHP_EOL;Sample response: 200 OK
{
"ok": true,
"plan": "free",
"day": "2026-10-15",
"resets_at": "2026-10-16T00:00:00Z",
"quotas": [
{
"action": "post",
"limit": 20,
"used": 3,
"remaining": 17
},
{
"action": "question",
"limit": 20,
"used": 0,
"remaining": 20
},
{
"action": "media",
"limit": 50,
"used": 2,
"remaining": 48
}
],
"request_id": "9f8e7d6c5b4a3921"
}Responses
| Status | Meaning | Codes |
|---|---|---|
200 OK | Usage for the current UTC day. | |
401 Unauthorized | No key, or the key is unknown, malformed, revoked or expired, or the member is not active. | missing_api_key, invalid_api_key |
421 Misdirected Request | Called on a community subdomain. Use https://urnextdoor.com. | wrong_host |
429 Too Many Requests | Over 60 requests a minute from this member (or too many failed key checks from one address), or today's quota for this action is used up. | rate_limited, quota_exceeded |
500 Internal Server Error | Our fault. Safe to retry with the same Idempotency-Key. | server_error |
503 Service Unavailable | The API is switched off. | api_disabled |
OpenAPI document
GET https://urnextdoor.com/api/v1/openapi.json
Returns this OpenAPI 3.1 document. Public: no key needed. Import it into ChatGPT Actions, Postman or a code generator.
- Auth: public, no key needed
- Scope: none
- Daily quota: not counted
- operationId:
getOpenapi
Example
curl "https://urnextdoor.com/api/v1/openapi.json"const res = await fetch("https://urnextdoor.com/api/v1/openapi.json");
console.log(res.status, await res.json());import requests
response = requests.get(
"https://urnextdoor.com/api/v1/openapi.json",
timeout=30,
)
print(response.status_code, response.json())<?php
$ch = curl_init('https://urnextdoor.com/api/v1/openapi.json');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
echo $status, PHP_EOL, $body, PHP_EOL;Sample response: 200 OK
{
"openapi": "3.1.0",
"info": {
"title": "Ur Next Door API",
"version": "1.0.0"
}
}Responses
| Status | Meaning | Codes |
|---|---|---|
200 OK | The OpenAPI document. | |
404 Not Found | The document is not available on this server. |
Last updated