GET
/organizations/{organization}/invitations
Read invitation status for the organization. Results are identity-free and cursor-paginated.
SteepStep API · v1
Create and cancel invitations, follow progress, and read only the report sections a person has chosen to share.
A clear permission boundary
Your system can create an invitation and deliver the returned link. The person verifies the invited email, then completes the assessment or chooses an eligible existing report when that option is offered. They decide separately whether to share selected report sections with the named company. Invitation detail links to its bound report only while that report has an active grant for the same company and purpose. Cancelling an invitation returns its reserved credit only while it remains unstarted.
The workflow
An owner creates a 30-day token for one company and selects only the permissions the connection needs.
Use a unique idempotency key. Let SteepStep email the invite, or deliver the returned personal link through your own approved channel.
Check invitation status without exposing the participant’s private account details.
After the person grants access, fetch only the sections allowed for your company.
Access and credentials
Only an owner can create or revoke company tokens. Creation requires password confirmation and authenticator verification. Recruiters can view the token list; billing members cannot open it. A token is shown once, is bound to the selected company, and expires after 30 days. The API checks the member’s current company role on each request.
Sign in to your company workspace →organization:invitations:readorganization:invitations:createorganization:invitations:cancelorganization:reports:readQuickstart
Keep the token in a secret store or environment variable. Never put it in browser code, source control, analytics, or request logs. Replace the placeholders with values from your company account.
curl --request POST "$STEEPSTEP_API_BASE/organizations/$STEEPSTEP_ORGANIZATION_ID/invitations" \
--header "Authorization: Bearer $STEEPSTEP_API_TOKEN" \
--header "Content-Type: application/json" \
--header "Idempotency-Key: $INVITATION_REQUEST_UUID" \
--data '{
"email": "person@example.invalid",
"name": "Example person",
"purpose": "personal-feedback",
"expires_in_days": 14,
"send_email": true
}'
Omit send_email or set it to false when your system will deliver the returned link. The default remains caller-managed. When set to true, SteepStep emails the invited address through its configured mail provider. The private bearer URL remains in the response, so do not print or log it. accepted_by_provider confirms provider acceptance only, not delivery to an inbox. An outcome_unknown status needs operator review before any retry.
The URL is a bearer credential in the request path. Use HTTPS and redact this path from application, proxy, analytics, and support logs.
Production availability: invitation creation is currently disabled in production. An eligible assessment version and the separate production and purpose checks must all pass; publishing a version alone does not enable the endpoint. Until then, production requests are rejected and no credit is reserved.
Keep the invitation ID from the create response. Poll its detail to see the original invited email, reference, and whether the assessment is in progress or complete. Once the person grants your company access to the report bound to that invitation, the same detail response includes the report ID, the sections shared for that invitation’s purpose, and direct JSON/PDF links. Use those URLs as returned. Before an active matching grant, the report fields are empty. After that grant ends, they become empty again. No matching by name, email, or external reference is needed.
# Invitation detail includes the original invite. A report link appears only
# while this invitation has an active report grant for this organization.
curl --silent --show-error "$STEEPSTEP_API_BASE/organizations/$STEEPSTEP_ORGANIZATION_ID/invitations/$INVITATION_ID" \
--header "Authorization: Bearer $STEEPSTEP_API_TOKEN"
# Reports currently shared with this company
curl --silent --show-error "$STEEPSTEP_API_BASE/organizations/$STEEPSTEP_ORGANIZATION_ID/reports?limit=50" \
--header "Authorization: Bearer $STEEPSTEP_API_TOKEN"
# Copy report_url from invitation detail when it is non-null. Keep its purpose query.
curl --silent --show-error "$STEEPSTEP_REPORT_URL" \
--header "Authorization: Bearer $STEEPSTEP_API_TOKEN"
# If the role closes before the person starts, release the reserved credit
curl --request DELETE "$STEEPSTEP_API_BASE/organizations/$STEEPSTEP_ORGANIZATION_ID/invitations/$INVITATION_ID" \
--header "Authorization: Bearer $STEEPSTEP_API_TOKEN"
Invitation detail includes the original invited email and must stay in a restricted service. Its report fields identify only a report bound to that invitation with an active grant for this organization and the same recorded purpose. Keep the purpose query on its returned URLs: report and PDF endpoints return only that purpose’s sections, or 404 when that grant ends. A report shared for another purpose is not a fallback. The invitation detail no longer includes report links after access ends.
Reference
GET
/organizations/{organization}/invitationsRead invitation status for the organization. Results are identity-free and cursor-paginated.
POST
/organizations/{organization}/invitationsCreate an invitation with an idempotency key. Email delivery is caller-managed by default, with an opt-in platform email mode.
DELETE
/organizations/{organization}/invitations/{invitation}Cancel an unstarted invitation, for example when a role is closed. Repeating a successful cancellation is safe; an invitation that has started returns a conflict.
GET
/organizations/{organization}/invitations/{invitation}Owners and recruiters can read the invited email, name, application reference, and safe status for their organization.
GET
/organizations/{organization}/reportsList reports currently shared with the organization. Each result includes only the granted sections.
GET
/organizations/{organization}/reports/{report}Read the permitted report projection. Inaccessible, expired, or revoked reports are not returned.
GET
/organizations/{organization}/reports/{report}/download.pdfDownload a PDF using the same active organization grant and section filter as the JSON report.
There are no answer endpoints, outgoing webhooks, or API report-sharing endpoints. Participants grant or revoke access in their own profile. A company order or invitation never grants report access.
Reliability and safety
Use the same idempotency key and the same request body when retrying invitation creation. Reusing a key with changed invitation details or a different delivery mode returns 409; create a new key for a new request. Access can end when the participant revokes it or its expiry passes, so treat a 404 as no current report access and stop using any cached copy.
Validation failures use the API’s JSON error response. Authentication, organization membership, token scope, invitation status, and report permission are checked on each request. See the OpenAPI file for the exact status codes, cursor fields, and response schemas.
| Operation | Per token | Per company | Per source IP |
|---|---|---|---|
| Read invitation and report data | 120 | 600 | 1,200 |
| Create invitation | 20 | 80 | 30 |
| Cancel invitation | 60 | 240 | 480 |
| Download report PDF | 20 | 80 | 160 |
Per-minute limits apply as shown, and invitation creation is also limited to 5 requests per hour for each invited email. A 429 response includes a Retry-After header. Invitation create also has a 30-per-minute source-IP cap.
Start with your company workflow