DEVELOPERS
Team
The Membership object
Members, roles and invitations.
ATTRIBUTES
- object enum
- membership
- id string
- role enum
- owner
- admin
- member
- user object
Show child attributesHide child attributes
- id string
- email string
- name string | null
- two_factor_enabled boolean
-
Schema: Membership
THE MEMBERSHIP OBJECT
{
"object": "membership",
"id": "mbr_cUfc8mTHAU7Eg2co",
"role": "member",
"user": {
"id": "usr_Vv4SRgjqTic423gn",
"email": "user1@example.test",
"name": "User",
"two_factor_enabled": false,
"last_login_at": null
},
"created_at": "2026-11-04T10:00:00.000Z"
} Change a member's role
- Secret key (
nc_test_…ornc_live_…). Restricted keys need write access. - AI apps (OAuth): not available.
PATH PARAMETERS
HEADER PARAMETERS
- X-Requested-With enum
- nochurn-dashboard
BODY PARAMETERS
-
- owner
- admin
- member
RETURNS
-
200role changed — the Membership object
ERRORS
-
409conflict the last owner cannot step down
PATCH/v1/memberships/{id}
curl https://api.nochurn.sh/v1/memberships/mbr_3Sff9nvg44dKN6ME \
-X PATCH \
-H "Authorization: Bearer nc_test_…" \
-H "Content-Type: application/json" \
-d '{
"role": "admin"
}'const res = await fetch("https://api.nochurn.sh/v1/memberships/mbr_3Sff9nvg44dKN6ME", {
method: "PATCH",
headers: {
Authorization: "Bearer nc_test_…",
"Content-Type": "application/json",
},
body: JSON.stringify({
"role": "admin"
}),
});
const membership = await res.json();import requests
res = requests.patch(
"https://api.nochurn.sh/v1/memberships/mbr_3Sff9nvg44dKN6ME",
headers={
"Authorization": "Bearer nc_test_…",
},
json={
"role": "admin"
},
)
membership = res.json()require "net/http"
require "json"
uri = URI("https://api.nochurn.sh/v1/memberships/mbr_3Sff9nvg44dKN6ME")
req = Net::HTTP::Patch.new(uri)
req["Authorization"] = "Bearer nc_test_…"
req["Content-Type"] = "application/json"
req.body = {
"role" => "admin"
}.to_json
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
membership = JSON.parse(res.body) RESPONSE 200
{
"object": "membership",
"id": "mbr_3Sff9nvg44dKN6ME",
"role": "admin",
"user": {
"id": "usr_9WtFa8kpPXoZueb9",
"email": "user1@example.test",
"name": "User",
"two_factor_enabled": false,
"last_login_at": null
},
"created_at": "2026-11-04T10:00:00.000Z"
} Remove a member (or leave the account)
- Secret key (
nc_test_…ornc_live_…). Restricted keys need write access. - AI apps (OAuth): not available.
PATH PARAMETERS
HEADER PARAMETERS
- X-Requested-With enum
- nochurn-dashboard
RETURNS
-
200removed — the Membership object
DELETE/v1/memberships/{id}
curl https://api.nochurn.sh/v1/memberships/mbr_P3Pc9sSuX3tF4giw \
-X DELETE \
-H "Authorization: Bearer nc_test_…"const res = await fetch("https://api.nochurn.sh/v1/memberships/mbr_P3Pc9sSuX3tF4giw", {
method: "DELETE",
headers: {
Authorization: "Bearer nc_test_…",
},
});
const membership = await res.json();import requests
res = requests.delete(
"https://api.nochurn.sh/v1/memberships/mbr_P3Pc9sSuX3tF4giw",
headers={
"Authorization": "Bearer nc_test_…",
},
)
membership = res.json()require "net/http"
require "json"
uri = URI("https://api.nochurn.sh/v1/memberships/mbr_P3Pc9sSuX3tF4giw")
req = Net::HTTP::Delete.new(uri)
req["Authorization"] = "Bearer nc_test_…"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
membership = JSON.parse(res.body) RESPONSE 200
{
"object": "membership",
"id": "mbr_P3Pc9sSuX3tF4giw",
"role": "admin",
"user": {
"id": "usr_VHAaeTFR9fDTrsq3",
"email": "user1@example.test",
"name": "User",
"two_factor_enabled": false,
"last_login_at": null
},
"created_at": "2026-11-04T10:00:00.000Z"
} Team members of the account
- Secret key (
nc_test_…ornc_live_…). Restricted keys need read access. - AI apps (OAuth): not available.
RETURNS
-
200members with their role and 2FA status — a list of Membership object (MembershipList)
GET/v1/memberships
curl https://api.nochurn.sh/v1/memberships \
-H "Authorization: Bearer nc_test_…"const res = await fetch("https://api.nochurn.sh/v1/memberships", {
headers: {
Authorization: "Bearer nc_test_…",
},
});
const page = await res.json();import requests
res = requests.get(
"https://api.nochurn.sh/v1/memberships",
headers={
"Authorization": "Bearer nc_test_…",
},
)
page = res.json()require "net/http"
require "json"
uri = URI("https://api.nochurn.sh/v1/memberships")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer nc_test_…"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
page = JSON.parse(res.body) RESPONSE 200
{
"object": "list",
"data": [
{
"object": "membership",
"id": "mbr_cUfc8mTHAU7Eg2co",
"role": "member",
"user": {
"id": "usr_Vv4SRgjqTic423gn",
"email": "user1@example.test",
"name": "User",
"two_factor_enabled": false,
"last_login_at": null
},
"created_at": "2026-11-04T10:00:00.000Z"
},
{
"object": "membership",
"id": "mbr_6TshrrzHbJhPfMdK",
"role": "owner",
"user": {
"id": "usr_zt28zC2o6Zn1qFiY",
"email": "owner@acme.test",
"name": "User",
"two_factor_enabled": false,
"last_login_at": "2026-11-04T10:00:00.000Z"
},
"created_at": "2026-11-04T10:00:00.000Z"
}
],
"has_more": false,
"next_cursor": null
} Pending invitations
- Secret key (
nc_test_…ornc_live_…). Restricted keys need read access. - AI apps (OAuth): not available.
HEADER PARAMETERS
- X-Requested-With enum
- nochurn-dashboard
RETURNS
-
200pending invitations (links are never shown again) — a list of Invitation (InvitationList)
GET/v1/invitations
curl https://api.nochurn.sh/v1/invitations \
-H "Authorization: Bearer nc_test_…"const res = await fetch("https://api.nochurn.sh/v1/invitations", {
headers: {
Authorization: "Bearer nc_test_…",
},
});
const page = await res.json();import requests
res = requests.get(
"https://api.nochurn.sh/v1/invitations",
headers={
"Authorization": "Bearer nc_test_…",
},
)
page = res.json()require "net/http"
require "json"
uri = URI("https://api.nochurn.sh/v1/invitations")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer nc_test_…"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
page = JSON.parse(res.body) RESPONSE 200
{
"object": "list",
"data": [
{
"object": "invitation",
"id": "inv_2ZfRhgxHtsGee7h6",
"email": "a@acme.test",
"role": "member",
"status": "pending",
"url": null,
"invited_by": "owner@acme.test",
"expires_at": "2026-11-11T10:00:00.000Z",
"created_at": "2026-11-04T10:00:00.000Z"
}
],
"has_more": false,
"next_cursor": null
} Invite someone (returns the link to send, once)
- Secret key (
nc_test_…ornc_live_…). Restricted keys need write access. - AI apps (OAuth): not available.
HEADER PARAMETERS
- X-Requested-With enum
- nochurn-dashboard
BODY PARAMETERS
- role enum
- owner
- admin
- member
RETURNS
-
201invitation with its link — a Invitation
ERRORS
-
409conflict already a member
POST/v1/invitations
curl https://api.nochurn.sh/v1/invitations \
-H "Authorization: Bearer nc_test_…" \
-H "Content-Type: application/json" \
-d '{
"email": "New@Acme.test",
"role": "admin"
}'const res = await fetch("https://api.nochurn.sh/v1/invitations", {
method: "POST",
headers: {
Authorization: "Bearer nc_test_…",
"Content-Type": "application/json",
},
body: JSON.stringify({
"email": "New@Acme.test",
"role": "admin"
}),
});
const invitation = await res.json();import requests
res = requests.post(
"https://api.nochurn.sh/v1/invitations",
headers={
"Authorization": "Bearer nc_test_…",
},
json={
"email": "New@Acme.test",
"role": "admin"
},
)
invitation = res.json()require "net/http"
require "json"
uri = URI("https://api.nochurn.sh/v1/invitations")
req = Net::HTTP::Post.new(uri)
req["Authorization"] = "Bearer nc_test_…"
req["Content-Type"] = "application/json"
req.body = {
"email" => "New@Acme.test",
"role" => "admin"
}.to_json
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
invitation = JSON.parse(res.body) RESPONSE 201
{
"object": "invitation",
"id": "inv_myc1pyd2keYC2jWD",
"email": "new@acme.test",
"role": "admin",
"status": "pending",
"url": "http://localhost:5173/invite/Au8qSVmR1hhU9hjFeJsbn4JVkfrKT4Dj",
"invited_by": "owner@acme.test",
"expires_at": "2026-11-11T10:00:00.000Z",
"created_at": "2026-11-04T10:00:00.000Z"
} Cancel a pending invitation
- Secret key (
nc_test_…ornc_live_…). Restricted keys need write access. - AI apps (OAuth): not available.
PATH PARAMETERS
HEADER PARAMETERS
- X-Requested-With enum
- nochurn-dashboard
RETURNS
-
200cancelled — a Invitation
ERRORS
-
409conflict already used or cancelled
DELETE/v1/invitations/{id}
curl https://api.nochurn.sh/v1/invitations/inv_EBdyWjdifwMigLWC \
-X DELETE \
-H "Authorization: Bearer nc_test_…"const res = await fetch("https://api.nochurn.sh/v1/invitations/inv_EBdyWjdifwMigLWC", {
method: "DELETE",
headers: {
Authorization: "Bearer nc_test_…",
},
});
const invitation = await res.json();import requests
res = requests.delete(
"https://api.nochurn.sh/v1/invitations/inv_EBdyWjdifwMigLWC",
headers={
"Authorization": "Bearer nc_test_…",
},
)
invitation = res.json()require "net/http"
require "json"
uri = URI("https://api.nochurn.sh/v1/invitations/inv_EBdyWjdifwMigLWC")
req = Net::HTTP::Delete.new(uri)
req["Authorization"] = "Bearer nc_test_…"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
invitation = JSON.parse(res.body) RESPONSE 200
{
"object": "invitation",
"id": "inv_EBdyWjdifwMigLWC",
"email": "bye@acme.test",
"role": "member",
"status": "revoked",
"url": null,
"invited_by": "owner@acme.test",
"expires_at": "2026-11-11T10:00:00.000Z",
"created_at": "2026-11-04T10:00:00.000Z"
}