Resend a scoped invitation
/portal/v1/accounts/{accountSlug}/applications/{appSlug}/environments/{envSlug}/workspace/invitations/{invitationId}/resendRe-sends a pending or expired invitation's email. It mints a new token, resets the expiry (7 days from now, or 24 hours for a password reset) and records an invite.resent audit event. Requires invitations.manage covering the invitation's node, and an invitation with no node needs Environment-wide authority. Returns 404 when the invitation is not in this Environment, and 400 when it was already accepted or revoked, or was last updated less than 5 minutes ago. Returns the updated invitation row.
Authentication
AuthorizationJWT access token. Never send alongside X-API-Key: a request carrying both is refused.
Path Parameters
accountSlugstring Required The Account's slug. An unknown one answers 404.
appSlugstring Required The Application's slug within the Account.
envSlugstring Required The Environment's slug within the Application.
invitationIdstring Required Responses
application/json
data *WorkspaceInvitationResponseDto
application/json
error *ApiErrorBodyDto
application/json
error *ApiErrorBodyDto
application/json
error *ApiErrorBodyDto
application/json
error *ApiErrorBodyDto
Returned object
curl -X POST "https://auth.canopy-io.com/portal/v1/accounts/value/applications/value/environments/value/workspace/invitations/value/resend" \ -H "Authorization: Bearer $CANOPY_TOKEN"
{ "data": { "id": "string", "email": "string", "first_name": "string", "last_name": "string", "name": "string", "role_id": "string", "role_name": "string", "node_id": "string", "node_name": "string", "has_initial_assignment": false, "status": "pending", "expires_at": "2026-04-20T12:00:00.000Z", "invited_by": "string", "created_at": "2026-04-20T12:00:00.000Z" } }
Tell us how we can improve this guide.