Profile endpoints
Read and update your profile, CV and notification preferences, and read your own activity.
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/profile | Read your profile | profile | not counted |
PUT /me/profile | Update your profile | profile | edit |
GET /me/cv | Read your CV | profile | not counted |
PUT /me/cv | Update your CV | profile | edit |
GET /me/preferences | Read your preferences | profile | not counted |
PUT /me/preferences | Update your preferences | profile | edit |
GET /me/activity | Read your activity | profile | not counted |
Read your profile
GET https://urnextdoor.com/api/v1/me/profile
Your profile, plus editable: the fields PUT /me/profile takes, as stored.
- Auth: your API key (Bearer or X-API-Key)
- Scope:
profile - Daily quota: not counted
- operationId:
getMyProfile
Example
curl "https://urnextdoor.com/api/v1/me/profile" \
-H "Authorization: Bearer $UND_API_KEY"const res = await fetch("https://urnextdoor.com/api/v1/me/profile", {
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/profile",
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/profile');
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;Responses
| Status | Meaning | Codes |
|---|---|---|
200 OK | {user, avatars, banner_presets, editable}. | |
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 |
403 Forbidden | The key lacks the scope, or the member may not do this. | insufficient_scope, forbidden |
404 Not Found | Unknown route or item, or the item is not yours. | not_found |
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 |
Update your profile
PUT https://urnextdoor.com/api/v1/me/profile
Change only what you send. avatar_url and banner_url may be a built-in, one of your images, or a link (imported).
- Auth: your API key (Bearer or X-API-Key)
- Scope:
profile - Daily quota: counts as
edit(see limits) - operationId:
updateMyProfile
Request body
Send Content-Type: application/json.
Example
curl -X PUT "https://urnextdoor.com/api/v1/me/profile" \
-H "Authorization: Bearer $UND_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"tagline": "Gardener and weekend baker"
}'const res = await fetch("https://urnextdoor.com/api/v1/me/profile", {
method: "PUT",
headers: {
Authorization: `Bearer ${process.env.UND_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
tagline: "Gardener and weekend baker",
}),
});
console.log(res.status, await res.json());import os
import requests
api_key = os.environ["UND_API_KEY"]
response = requests.put(
"https://urnextdoor.com/api/v1/me/profile",
headers={
"Authorization": f"Bearer {api_key}",
},
json={
"tagline": "Gardener and weekend baker",
},
timeout=30,
)
print(response.status_code, response.json())<?php
$apiKey = getenv('UND_API_KEY');
$payload = [
'tagline' => 'Gardener and weekend baker',
];
$ch = curl_init('https://urnextdoor.com/api/v1/me/profile');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode($payload),
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
echo $status, PHP_EOL, $body, PHP_EOL;Responses
| Status | Meaning | Codes |
|---|---|---|
200 OK | {user}. | |
400 Bad Request | The body is not a JSON object, or the Idempotency-Key header is malformed. | invalid_json, invalid_idempotency_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 |
403 Forbidden | The key lacks the scope, or the member may not do this. | insufficient_scope, forbidden |
404 Not Found | Unknown route or item, or the item is not yours. | not_found |
409 Conflict | Conflicts with the current state, or the same Idempotency-Key is still being processed. | conflict, idempotency_in_progress |
413 Payload Too Large | The body is over the limit, or the image is over 8 MB. | payload_too_large |
415 Unsupported Media Type | Wrong Content-Type, or a file type that is not allowed. | unsupported_media_type |
421 Misdirected Request | Called on a community subdomain. Use https://urnextdoor.com. | wrong_host |
422 Unprocessable Content | Field errors, or an Idempotency-Key reused with a different body. | validation_failed, idempotency_key_reused |
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 |
Read your CV
GET https://urnextdoor.com/api/v1/me/cv
Your CV as the builder shows it.
- Auth: your API key (Bearer or X-API-Key)
- Scope:
profile - Daily quota: not counted
- operationId:
getMyCv
Example
curl "https://urnextdoor.com/api/v1/me/cv" \
-H "Authorization: Bearer $UND_API_KEY"const res = await fetch("https://urnextdoor.com/api/v1/me/cv", {
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/cv",
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/cv');
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;Responses
| Status | Meaning | Codes |
|---|---|---|
200 OK | {cv, username}. | |
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 |
403 Forbidden | The key lacks the scope, or the member may not do this. | insufficient_scope, forbidden |
404 Not Found | Unknown route or item, or the item is not yours. | not_found |
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 |
Update your CV
PUT https://urnextdoor.com/api/v1/me/cv
Change only what you send; a section you send (experience, education, skills, ...) replaces that section. is_public is true or false.
- Auth: your API key (Bearer or X-API-Key)
- Scope:
profile - Daily quota: counts as
edit(see limits) - operationId:
updateMyCv
Request body
Send Content-Type: application/json.
Example
curl -X PUT "https://urnextdoor.com/api/v1/me/cv" \
-H "Authorization: Bearer $UND_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"headline": "Landscape designer"
}'const res = await fetch("https://urnextdoor.com/api/v1/me/cv", {
method: "PUT",
headers: {
Authorization: `Bearer ${process.env.UND_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
headline: "Landscape designer",
}),
});
console.log(res.status, await res.json());import os
import requests
api_key = os.environ["UND_API_KEY"]
response = requests.put(
"https://urnextdoor.com/api/v1/me/cv",
headers={
"Authorization": f"Bearer {api_key}",
},
json={
"headline": "Landscape designer",
},
timeout=30,
)
print(response.status_code, response.json())<?php
$apiKey = getenv('UND_API_KEY');
$payload = [
'headline' => 'Landscape designer',
];
$ch = curl_init('https://urnextdoor.com/api/v1/me/cv');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode($payload),
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
echo $status, PHP_EOL, $body, PHP_EOL;Responses
| Status | Meaning | Codes |
|---|---|---|
200 OK | {cv}. | |
400 Bad Request | The body is not a JSON object, or the Idempotency-Key header is malformed. | invalid_json, invalid_idempotency_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 |
403 Forbidden | The key lacks the scope, or the member may not do this. | insufficient_scope, forbidden |
404 Not Found | Unknown route or item, or the item is not yours. | not_found |
409 Conflict | Conflicts with the current state, or the same Idempotency-Key is still being processed. | conflict, idempotency_in_progress |
413 Payload Too Large | The body is over the limit, or the image is over 8 MB. | payload_too_large |
415 Unsupported Media Type | Wrong Content-Type, or a file type that is not allowed. | unsupported_media_type |
421 Misdirected Request | Called on a community subdomain. Use https://urnextdoor.com. | wrong_host |
422 Unprocessable Content | Field errors, or an Idempotency-Key reused with a different body. | validation_failed, idempotency_key_reused |
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 |
Read your preferences
GET https://urnextdoor.com/api/v1/me/preferences
Your privacy settings and notification switches.
- Auth: your API key (Bearer or X-API-Key)
- Scope:
profile - Daily quota: not counted
- operationId:
getMyPreferences
Example
curl "https://urnextdoor.com/api/v1/me/preferences" \
-H "Authorization: Bearer $UND_API_KEY"const res = await fetch("https://urnextdoor.com/api/v1/me/preferences", {
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/preferences",
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/preferences');
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;Responses
| Status | Meaning | Codes |
|---|---|---|
200 OK | {privacy, options, channels, notifications}. | |
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 |
403 Forbidden | The key lacks the scope, or the member may not do this. | insufficient_scope, forbidden |
404 Not Found | Unknown route or item, or the item is not yours. | not_found |
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 |
Update your preferences
PUT https://urnextdoor.com/api/v1/me/preferences
Change privacy settings, or notification switches as {category: {in_app, email, push}}. Switches you do not send are kept.
- Auth: your API key (Bearer or X-API-Key)
- Scope:
profile - Daily quota: counts as
edit(see limits) - operationId:
updateMyPreferences
Request body
Send Content-Type: application/json.
Example
curl -X PUT "https://urnextdoor.com/api/v1/me/preferences" \
-H "Authorization: Bearer $UND_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"notifications": {
"comment": {
"email": false
}
}
}'const res = await fetch("https://urnextdoor.com/api/v1/me/preferences", {
method: "PUT",
headers: {
Authorization: `Bearer ${process.env.UND_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
notifications: {
comment: {
email: false,
},
},
}),
});
console.log(res.status, await res.json());import os
import requests
api_key = os.environ["UND_API_KEY"]
response = requests.put(
"https://urnextdoor.com/api/v1/me/preferences",
headers={
"Authorization": f"Bearer {api_key}",
},
json={
"notifications": {
"comment": {
"email": False,
},
},
},
timeout=30,
)
print(response.status_code, response.json())<?php
$apiKey = getenv('UND_API_KEY');
$payload = [
'notifications' => [
'comment' => [
'email' => false,
],
],
];
$ch = curl_init('https://urnextdoor.com/api/v1/me/preferences');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode($payload),
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
echo $status, PHP_EOL, $body, PHP_EOL;Responses
| Status | Meaning | Codes |
|---|---|---|
200 OK | {preferences}. | |
400 Bad Request | The body is not a JSON object, or the Idempotency-Key header is malformed. | invalid_json, invalid_idempotency_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 |
403 Forbidden | The key lacks the scope, or the member may not do this. | insufficient_scope, forbidden |
404 Not Found | Unknown route or item, or the item is not yours. | not_found |
409 Conflict | Conflicts with the current state, or the same Idempotency-Key is still being processed. | conflict, idempotency_in_progress |
413 Payload Too Large | The body is over the limit, or the image is over 8 MB. | payload_too_large |
415 Unsupported Media Type | Wrong Content-Type, or a file type that is not allowed. | unsupported_media_type |
421 Misdirected Request | Called on a community subdomain. Use https://urnextdoor.com. | wrong_host |
422 Unprocessable Content | Field errors, or an Idempotency-Key reused with a different body. | validation_failed, idempotency_key_reused |
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 |
Read your activity
GET https://urnextdoor.com/api/v1/me/activity
Your actions by source (website, app, API key) and by key, as Settings > Analytics shows them.
- Auth: your API key (Bearer or X-API-Key)
- Scope:
profile - Daily quota: not counted
- operationId:
getMyActivity
Parameters
| Name | In | Required | Description |
|---|---|---|---|
period | query | No | 7d, 30d, 90d or 12m. |
source | query | No | all, manual, web, app or api. |
key | query | No | An API key id. |
event | query | No | One event name. |
offset | query | No | Start of the log page. |
Example
curl "https://urnextdoor.com/api/v1/me/activity" \
-H "Authorization: Bearer $UND_API_KEY"const res = await fetch("https://urnextdoor.com/api/v1/me/activity", {
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/activity",
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/activity');
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;Responses
| Status | Meaning | Codes |
|---|---|---|
200 OK | {kpis, series, by_event, by_key, items}. | |
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 |
403 Forbidden | The key lacks the scope, or the member may not do this. | insufficient_scope, forbidden |
404 Not Found | Unknown route or item, or the item is not yours. | not_found |
421 Misdirected Request | Called on a community subdomain. Use https://urnextdoor.com. | wrong_host |
422 Unprocessable Content | Field errors, or an Idempotency-Key reused with a different body. | validation_failed, idempotency_key_reused |
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 |
Last updated