Docs

OrganizationInvitation

The OrganizationInvitation object is the model around an organization invitation.

Properties

  • Name
    id
    Type
    string
    Description

    A unique identifier for this organization membership.

  • Name
    emailAddress
    Type
    string
    Description

    The email address the invitation has been sent.

  • Name
    organizationId
    Type
    string
    Description

    The organization ID of the organization this invitation is for.

  • Name
    publicMetadata
    Type
    object
    Description

    The public metadata of the organization membership.

  • Name
    role
    Type
    OrganizationCustomRoleKey
    Description

    The role of the current user in the organization.

  • Name
    status
    Type
    'pending' | 'accepted' | 'revoked'
    Description

    The status of the invitation.

  • Name
    createdAt
    Type
    Date
    Description

    Date of the time the membership was created.

  • Name
    updatedAt
    Type
    Date
    Description

    Date of the last time the membership was updated.

OrganizationCustomRoleKey

OrganizationCustomRoleKey is a string that represents the user's role in the organization. Clerk provides the default roles org:admin and org:member. However, you can create custom roles as well.

Methods

revoke()

Revokes the invitation for the email it corresponds to.

function revoke(): Promise<OrganizationInvitation>;

revoke() returns

TypeDescription
Promise<OrganizationInvitation>This method returns a Promise which resolves to the OrganizationInvitation for the revolked invitation.

revoke() example

The following example demonstrates how to revoke an organization invitation. It first gets the list of organization invitations using getInvitations() and then revokes the first invitation in the list.

It assumes:

main.js
import Clerk from '@clerk/clerk-js';

// Initialize Clerk with your Clerk publishable key
const clerk = new Clerk('YOUR_PUBLISHABLE_KEY');
await clerk.load();

if (clerk.user) {
  // Check for an active organization
  if (clerk.organization) {
    // Get list of organization invitations
    const { totalCount, data } = await clerk.organization.getInvitations();

    const invitations = data;
    console.log(`Invitations:`, invitations);

    if (invitations.length === 0) {
      console.log("No invitations to revoke.");
    }

    // Revoke the first invitation in the list
    invitations[0].revoke()
      .then((res) => console.log(res))
      .catch((error) => console.log(error.errors));
  } else {
    // If there is no active organization,
    // mount Clerk's <OrganizationSwitcher />
    // to allow the user to set an organization as active
    document.getElementById("app").innerHTML = `
      <h2>Select an organization to set it as active</h2>
      <div id="org-switcher"></div>
    `;

    const orgSwitcherDiv = document.getElementById("org-switcher");

    clerk.mountOrganizationSwitcher(orgSwitcherDiv);
  }
} else {
  document.getElementById("app").innerHTML = `
    <div id="sign-in"></div>
  `;

  const signInDiv = document.getElementById("sign-in");

  clerk.mountSignIn(signInDiv);
}
index.html
  <div id="app"></div>

  <!-- Initialize Clerk with your
  Clerk Publishable key and Frontend API URL -->
  <script
    async
    crossorigin="anonymous"
    data-clerk-publishable-key="YOUR_PUBLISHABLE_KEY"
    src="https://YOUR_FRONTEND_API_URL/npm/@clerk/clerk-js@latest/dist/clerk.browser.js"
    type="text/javascript"
  ></script>

  <script>
    window.addEventListener("load", async function () {
      await Clerk.load();

      if (Clerk.user) {
        // Check for an active organization
        if (Clerk.organization) {
        // Get list of organization invitations
        const { totalCount, data } = await Clerk.organization.getInvitations();

        const invitations = data;
        console.log(`Invitations:`, invitations);

        if (invitations.length === 0) {
          console.log("No invitations to revoke.");
        }

        // Revoke the first invitation in the list
        invitations[0].revoke()
          .then((res) => console.log(res))
          .catch((error) => console.log(error.errors));
      } else {
        // If there is no active organization,
        // mount Clerk's <OrganizationSwitcher />
        // to allow the user to set an organization as active
        document.getElementById("app").innerHTML = `
          <h2>Select an organization to set it as active</h2>
          <div id="org-switcher"></div>
        `;

        const orgSwitcherDiv = document.getElementById("org-switcher");

        Clerk.mountOrganizationSwitcher(orgSwitcherDiv);
      }
      } else {
        document.getElementById("app").innerHTML = `
          <div id="sign-in"></div>
        `;

        const signInDiv = document.getElementById("sign-in");

        Clerk.mountSignIn(signInDiv);
      }
    });
  </script>

Feedback

What did you think of this content?