NDA status
Check whether a Hack Club member has signed the current NDA. No authentication is required.
/api/v1/nda_status/:info
Replace :info with a Slack ID or URL-encoded email address.
Examples
Slack ID
GET /api/v1/nda_status/U0123ABCDEF
GET /api/v1/nda_status/orpheus%40example.com
Slack IDs begin with U or W. Emails are case-insensitive; encode @ as %40.
Email lookup checks signing and verified account emails. Email responses omit slack_id and are not cached.
Responses
Signed
200 OK
An approved current signature or legacy import returns signed.
{
"slack_id": "U0123ABCDEF",
"status": "signed",
"nda_version": "2026-09-17",
"signed_at": "2025-04-02T15:04:05Z",
"signature_type": "native"
}
Not signed
200 OK
Unknown or unsigned members return not_signed, without signing details.
{
"slack_id": "U0123ABCDEF",
"status": "not_signed",
"nda_version": "2026-09-17"
}
Invalid input
400 Bad Request
Malformed Slack IDs return invalid_slack_id; malformed emails containing @ return invalid_email.
{
"error": "invalid_slack_id"
}
Rate limit
429 Too Many Requests
Each client IP may make up to 10 requests per second across the site. Additional requests receive 429 Too Many Requests with a Retry-After header.
Every API response, including errors, reports the budget after the request:
RateLimit-Limit: requests allowed per window.RateLimit-Remaining: requests left the current window.RateLimit-Reset: seconds until the window resetsRateLimit-PolicyandRateLimit: the same quota and budget in the IETF draft format
The budget is shared across the site by client IP, including failed requests. When remaining reaches zero, wait for reset. On a 429, wait at least Retry-After seconds before retrying. Concurrent requests may consume the remaining budget.
HTTP/1.1 200 OK
RateLimit-Limit: 10
RateLimit-Remaining: 9
RateLimit-Reset: 1
RateLimit-Policy: "requests-per-ip";q=10;w=1
RateLimit: "requests-per-ip";r=9;t=1
HTTP/1.1 429 Too Many Requests
Content-Type: text/plain
RateLimit-Limit: 10
RateLimit-Remaining: 0
RateLimit-Reset: 1
RateLimit-Policy: "requests-per-ip";q=10;w=1
RateLimit: "requests-per-ip";r=0;t=1
Retry-After: 1
Retry later