Installation
Quick Start
Generate a secure token for Vortex componentsIntegration Flow
Vortex uses a split architecture: your backend signs tokens with the SDK, and your frontend renders components that use those tokens to securely interact with Vortex.Generate a token for the current user
When a user loads a page with a Vortex component, generate a signed token on your server
Methods
Core Methods
generate_token()
Generate a signed token for use with Vortex widgets. This method generates a signed JWT token containing your payload data. The token can be passed to widgets via the token prop to authenticate and authorize the request.
| Name | Type | Required | Description |
|---|---|---|---|
payload | Hash | ✓ | Data to sign (user, component, scope, vars, etc.) |
options | Hash | ✓ | Optional configuration |
String — Signed JWT token
Example
Example
get_invitation()
Get a specific invitation by ID
| Name | Type | Required | Description |
|---|---|---|---|
invitation_id | String | ✓ | The invitation ID |
String — The invitation data
accept_invitation()
Accept a single invitation (recommended method) This is the recommended method for accepting invitations.
| Name | Type | Required | Description |
|---|---|---|---|
invitation_id | String | ✓ | Single invitation ID to accept |
user | Hash | ✓ | User hash with :email and/or :phone |
String — The accepted invitation result
Example
Example
Additional Methods
Additional Methods
get_invitations_by_target()
Get invitations by target| Name | Type | Required | Description |
|---|---|---|---|
target_type | String | ✓ | Type of target (email, sms) |
target_value | String | ✓ | Value of target (email address, phone number) |
String — List of invitationsrevoke_invitation()
Revoke (delete) an invitation| Name | Type | Required | Description |
|---|---|---|---|
invitation_id | String | ✓ | The invitation ID to revoke |
String — Success responseaccept_invitations()
Accept invitations using the new User format (preferred) Supports three formats: 1. User hash (preferred): { email: ’…’, phone: ’…’, name: ’…’ } 2. Target hash (deprecated): { type: ‘email’, value: ’…’ } 3. Array of targets (deprecated): [{ type: ‘email’, value: ’…’ }, …]| Name | Type | Required | Description |
|---|---|---|---|
invitation_ids | Array<String> | ✓ | List of invitation IDs to accept |
user_or_target | Hash, Array | ✓ | User hash with :email/:phone/:name keys, OR legacy target(s) |
String — The accepted invitation resultExample
Example
get_invitations_by_scope()
Get invitations by group| Name | Type | Required | Description |
|---|---|---|---|
scope_type | String | ✓ | The group type |
scope | String | ✓ | The group ID |
String — List of invitations for the groupdelete_invitations_by_scope()
Delete invitations by group| Name | Type | Required | Description |
|---|---|---|---|
scope_type | String | ✓ | The group type |
scope | String | ✓ | The group ID |
String — Success responsereinvite()
Reinvite a user| Name | Type | Required | Description |
|---|---|---|---|
invitation_id | String | ✓ | The invitation ID to reinvite |
String — The reinvited invitation resultget_autojoin_domains()
Get autojoin domains configured for a specific scope| Name | Type | Required | Description |
|---|---|---|---|
scope_type | String | ✓ | The type of scope (e.g., “organization”, “team”, “project”) |
scope | String | ✓ | The scope identifier (customer’s group ID) |
String — Response with :autojoin_domains array and :invitationExample
Example
configure_autojoin()
Configure autojoin domains for a specific scope This endpoint syncs autojoin domains - it will add new domains, remove domains not in the provided list, and deactivate the autojoin invitation if all domains are removed (empty array).| Name | Type | Required | Description |
|---|---|---|---|
scope | String | ✓ | The scope identifier (customer’s group ID) |
scope_type | String | ✓ | The type of scope (e.g., “organization”, “team”) |
domains | Array<String> | ✓ | Array of domains to configure for autojoin |
component_id | String | ✓ | The component ID |
scope_name | String, nil | ✓ | Optional display name for the scope |
metadata | Hash, nil | ✓ | Optional metadata to attach to the invitation |
String — Response with :autojoin_domains array and :invitationExample
Example
Types
Type Definitions
Type Definitions
GenerateTokenPayload
Payload for generate_token() - used to generate secure tokens for Vortex components| Field | Type | Required | Description |
|---|---|---|---|
user | Hash (TokenUser) | The authenticated user who will be using the Vortex component | |
component | String | Component ID to generate token for (from your Vortex dashboard) | |
scope | String | Scope identifier to restrict invitations (format: “scopeType:scopeId”) | |
vars | Hash | Custom variables to pass to the component for template rendering |
TokenUser
User data for token generation - represents the authenticated user sending invitations| Field | Type | Required | Description |
|---|---|---|---|
id | String | ✓ | Unique identifier for the user in your system. Used to attribute invitations. |
email | String | User’s email address. Used for reply-to in invitation emails. | |
name | String | Display name shown to invitation recipients (e.g., “John invited you”) | |
avatar_url | String | URL to user’s avatar image. Displayed in invitation emails and widgets. | |
admin_scopes | Array<String> | List of scope IDs where this user has admin privileges | |
allowed_email_domains | Array<String> | Restrict invitations to specific email domains (e.g., [“acme.com”]) |
AcceptUser
User data for accepting invitations - identifies who accepted the invitation| Field | Type | Required | Description |
|---|---|---|---|
email | String | Email address of the accepting user. At least one of email or phone is required. | |
phone | String | Phone number with country code. At least one of email or phone is required. | |
name | String | Display name of the accepting user (shown in notifications to inviter) | |
is_existing | Boolean | Whether user was already registered. true=existing, false=new signup, nil=unknown. |
CreateInvitationTarget
Target specification when creating an invitation - where to send the invite| Field | Type | Required | Description |
|---|---|---|---|
type | String | ✓ | Delivery channel: “email”, “phone”, “share”, or “internal” |
value | String | ✓ | Target address: email address, phone number with country code, or internal user ID |
name | String | Display name of the recipient (used in email greetings) |
CreateInvitationScope
Scope specification when creating an invitation - what group/team to invite into| Field | Type | Required | Description |
|---|---|---|---|
type | String | ✓ | Scope type (e.g., “team”, “organization”, “workspace”) |
group_id | String | ✓ | Your internal identifier for this scope/group |
name | String | ✓ | Display name for the scope (shown in invitation emails) |
Identifier
Email or phone identifier for looking up users| Field | Type | Required | Description |
|---|---|---|---|
type | String | ✓ | Identifier type: “email” or “phone” |
value | String | ✓ | The email address or phone number (with country code for phone) |
ConfigureAutojoinRequest
Request to configure autojoin domains for a scope| Field | Type | Required | Description |
|---|---|---|---|
scope_type | String | ✓ | Type of scope (e.g., “team”, “workspace”) |
scope_id | String | ✓ | Your internal identifier for the scope |
domains | Array<String> | ✓ | List of email domains to enable autojoin for (e.g., [“acme.com”]) |
SyncInternalInvitationRequest
Request to sync an internal invitation (for tracking invitations made outside Vortex)| Field | Type | Required | Description |
|---|---|---|---|
inviter_id | String | ✓ | Your internal user ID for the person who sent the invitation |
target | Hash (CreateInvitationTarget) | ✓ | The invitation recipient |
scopes | Array<Hash> | Scopes/groups the invitation grants access to |
InvitationResult
Complete invitation details as returned by the Vortex API| Field | Type | Required | Description |
|---|---|---|---|
id | String | ✓ | Unique identifier for this invitation |
account_id | String | ✓ | Your Vortex account ID |
click_throughs | Integer | ✓ | Number of times the invitation link was clicked |
created_at | String | ✓ | ISO 8601 timestamp when the invitation was created |
deactivated | Boolean | ✓ | Whether this invitation has been revoked or expired |
delivery_count | Integer | ✓ | Number of times the invitation was sent (including reminders) |
delivery_types | Array<String> | ✓ | Channels used to deliver: “email”, “phone”, “share”, “internal” |
foreign_creator_id | String | ✓ | Your internal user ID for the person who created this invitation |
invitation_type | String | ✓ | Type: “single_use”, “multi_use”, or “autojoin” |
status | String | ✓ | Current status: queued, sending, sent, delivered, accepted, shared |
target | Array<Hash> | ✓ | List of invitation recipients with their contact info and status |
views | Integer | ✓ | Number of times the invitation page was viewed |
groups | Array<Hash> | ✓ | Scopes (teams/orgs) this invitation grants access to |
expired | Boolean | ✓ | Whether this invitation has passed its expiration date |
expires | String | ISO 8601 timestamp when this invitation expires | |
inviter | Hash (Inviter) | Information about who sent the invitation |
InvitationTarget
Target recipient of an invitation (from API response)| Field | Type | Required | Description |
|---|---|---|---|
type | String | ✓ | Delivery channel: “email”, “phone”, “share”, or “internal” |
value | String | ✓ | Target address: email, phone number with country code, or share link ID |
name | String | Display name of the recipient | |
avatar_url | String | Avatar URL for the recipient | |
status | String | Delivery status for this specific target |
InvitationScope
Scope/group that the invitation grants access to (from API response)| Field | Type | Required | Description |
|---|---|---|---|
id | String | ✓ | Vortex internal UUID for this scope record |
account_id | String | ✓ | Your Vortex account ID |
group_id | String | ✓ | Your internal scope/group identifier |
type | String | ✓ | Scope type (e.g., “team”, “organization”, “workspace”) |
name | String | ✓ | Display name for the scope |
created_at | String | ✓ | ISO 8601 timestamp when the scope was created |
InvitationAcceptance
Details about an invitation acceptance event| Field | Type | Required | Description |
|---|---|---|---|
id | String | ✓ | Unique identifier for this acceptance record |
invitation_id | String | ✓ | ID of the invitation that was accepted |
email | String | Email of the user who accepted | |
phone | String | Phone of the user who accepted | |
name | String | Name of the user who accepted | |
is_existing | Boolean | Whether the user already had an account | |
created_at | String | ✓ | ISO 8601 timestamp when the acceptance occurred |
Inviter
Information about the user who sent an invitation| Field | Type | Required | Description |
|---|---|---|---|
id | String | ✓ | Your internal user ID for the inviter |
email | String | Email address of the inviter | |
name | String | Display name of the inviter | |
avatar_url | String | Avatar URL of the inviter |
AutojoinDomain
Autojoin domain configuration - users with matching email domains automatically join| Field | Type | Required | Description |
|---|---|---|---|
id | String | ✓ | Unique identifier for this autojoin configuration |
domain | String | ✓ | Email domain that triggers autojoin (e.g., “acme.com”) |
AutojoinDomainsResponse
Response from get_autojoin_domains()| Field | Type | Required | Description |
|---|---|---|---|
domains | Array<AutojoinDomain> | ✓ | List of configured autojoin domains |
SyncInternalInvitationResponse
Response from sync_internal_invitation()| Field | Type | Required | Description |
|---|---|---|---|
invitation | Hash (InvitationResult) | ✓ | The created or updated invitation |
created | Boolean | ✓ | true if a new invitation was created, false if existing was updated |
VortexWebhookEvent
Webhook event payload delivered to your endpoint| Field | Type | Required | Description |
|---|---|---|---|
id | String | ✓ | Unique identifier for this webhook delivery |
type | String | ✓ | Event type (e.g., “invitation.accepted”, “member.created”) |
timestamp | String | ✓ | ISO 8601 timestamp when the event occurred |
data | Hash | ✓ | Event-specific payload data |
Webhooks
Webhooks let your server receive real-time notifications when events happen in Vortex. Use them to sync invitation state with your database, trigger onboarding flows, update your CRM, or send internal notifications.Setup
- Go to your Vortex dashboard → Integrations → Webhooks tab
- Click “Add Webhook”
- Enter your endpoint URL (must be HTTPS in production)
- Copy the signing secret — you’ll use this to verify webhook signatures
- Select which events you want to receive
Example
Rails webhook handlerEvents
| Event | Description |
|---|---|
invitation.created | A new invitation was created |
invitation.accepted | An invitation was accepted by the recipient |
invitation.deactivated | An invitation was deactivated (revoked or expired) |
invitation.email.delivered | Invitation email was successfully delivered |
invitation.email.bounced | Invitation email bounced (invalid address) |
invitation.email.opened | Recipient opened the invitation email |
invitation.link.clicked | Recipient clicked the invitation link |
invitation.reminder.sent | A reminder email was sent for a pending invitation |
member.created | A new member was created from an accepted invitation |
group.member.added | A member was added to a scope/group |
deployment.created | A new deployment configuration was created |
deployment.deactivated | A deployment was deactivated |
abtest.started | An A/B test was started |
abtest.winner_declared | An A/B test winner was declared |
email.complained | Recipient marked the email as spam |
Use Cases
- Activate users on acceptance — When invitation.accepted fires, mark the user as active in your database and trigger your onboarding flow.
- Track invitation performance — Monitor email.delivered, email.opened, and link.clicked events to measure invitation funnel metrics.
- Sync team membership — Use member.created and group.member.added to keep your internal membership records in sync.
- Alert on delivery issues — Watch for email.bounced events to proactively reach out via alternative channels.
Error Handling
| Error | Description |
|---|---|
VortexError | Raised for validation errors (e.g., missing API key, invalid parameters) or API failures |