> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sublay.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Resend Invite

> Refresh a lapsed pending invitation and resend the email

Refreshes a pending invitation — sets `expiresAt = now + 14 days` and resends the email. **Valid on any `pending` invite, including one past `expiresAt`** (resend = refresh a lapsed invite). A **terminal** invite (`accepted`/`declined`/`revoked`) → `409`. Requires the `invite` capability (or owner).

<Note>
  Resend **emits no webhook** — the status stays `pending`, so there is no lifecycle transition.
</Note>

<Warning>
  **Requires `workspaces.inviteAcceptUrl` on the project**, exactly as [Create Invite](/api-reference/workspaces/invitations/create-invite) does — resending an email that has nowhere to deep-link is equally pointless. Without it this endpoint returns `409 workspace/missing-invite-accept-url` and the invitation's `expiresAt` is left untouched. See [Project settings](/sdk/workspaces/overview#project-settings).
</Warning>

## Path Parameters

<ParamField path="id" type="string" required>
  The workspace UUID.
</ParamField>

<ParamField path="inviteId" type="string" required>
  The invitation UUID.
</ParamField>

## Response

Returns the refreshed [WorkspaceInvitation](/data-models/workspace-invitation) object.

## Error Responses

<AccordionGroup>
  <Accordion title="Invite Not Found — 404">
    ```json theme={null}
    { "error": "Invitation not found.", "code": "workspace/invite-not-found" }
    ```

    Returned when no invitation with that id exists on this workspace — including when the id belongs to a *different* workspace's invitation.
  </Accordion>

  <Accordion title="Missing Invite Accept URL — 409">
    ```json theme={null}
    { "error": "This project has no workspaces.inviteAcceptUrl configured...", "code": "workspace/missing-invite-accept-url" }
    ```

    A **project misconfiguration**, not a bad request. The row is not touched — `expiresAt` is unchanged and no email is sent. Set [`workspaces.inviteAcceptUrl`](/sdk/workspaces/overview#project-settings) and retry.
  </Accordion>

  <Accordion title="Terminal Invite — 409">
    ```json theme={null}
    { "error": "This invitation is no longer pending.", "code": "workspace/invite-terminal" }
    ```

    The invitation is `accepted`, `declined`, or `revoked`. Note an invitation merely past its `expiresAt` is **not** terminal — resending one is the documented purpose of this endpoint.
  </Accordion>
</AccordionGroup>

See also: [useResendWorkspaceInvite](/hooks/workspaces/use-resend-workspace-invite) · [Project settings](/sdk/workspaces/overview#project-settings)
