Skip to content

Commit 0992abb

Browse files
Doc 1430/partner branded notifications for account opening and invitation (#494)
* Init * Branding partial * Update _notification-branding.mdx * Update sidebars.js * Update guide-resend-invitation.mdx * Stakeholder feedback * Final feedback * Apply suggestions from code review Co-authored-by: racene-swan <racene.ratnaswamy@swan.io> * Apply suggestions from code review Co-authored-by: racene-swan <racene.ratnaswamy@swan.io> * Apply suggestions from code review Co-authored-by: racene-swan <racene.ratnaswamy@swan.io> * Update docs/topics/onboarding/account-holders/index.mdx * Apply suggestions from code review --------- Co-authored-by: racene-swan <racene.ratnaswamy@swan.io>
1 parent 22f3e86 commit 0992abb

File tree

7 files changed

+230
-3
lines changed

7 files changed

+230
-3
lines changed
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
---
2+
title: Resend membership invitation notification
3+
---
4+
5+
# Resend membership invitation notification
6+
7+
If an invited account member doesn't receive their invitation email, you can resend it using the [`sendAccountMembershipInviteNotification` mutation](https://api-reference.swan.io/mutations/send-account-membership-invite-notification/).
8+
9+
This guide explains how to send partner-branded email notifications when inviting account members.
10+
11+
## Guide {#guide}
12+
13+
### Prerequisites {#prerequisites}
14+
15+
- You must authenticate with a **user access token** associated with an existing account member who has the `canManageAccountMembership` permission.
16+
- Only account members with the `canManageAccountMembership` permission can send invitation notifications.
17+
- The account membership status must be `InvitationSent`.
18+
- You can resend invitations up to **five times per day** per membership.
19+
20+
### Step 1: Call the mutation {#call-mutation}
21+
22+
Call the `sendAccountMembershipInviteNotification` mutation with the `accountMembershipId` of the membership for which you want to send the invitation.
23+
24+
<a href="https://explorer.swan.io?query=bXV0YXRpb24gUmVzZW5kSW52aXRhdGlvbiB7CiAgc2VuZEFjY291bnRNZW1iZXJzaGlwSW52aXRlTm90aWZpY2F0aW9uKAogICAgaW5wdXQ6IHsgYWNjb3VudE1lbWJlcnNoaXBJZDogIiRZT1VSX0FDQ09VTlRfTUVNQkVSU0hJUF9JRCIgfQogICkgewogICAgLi4uIG9uIFNlbmRBY2NvdW50TWVtYmVyc2hpcEludml0ZU5vdGlmaWNhdGlvblN1Y2Nlc3NQYXlsb2FkIHsKICAgICAgX190eXBlbmFtZQogICAgICBub3RpZmljYXRpb25SZXF1ZXN0SWQKICAgIH0KICAgIC4uLiBvbiBBY2NvdW50TWVtYmVyc2hpcE5vdEZvdW5kUmVqZWN0aW9uIHsKICAgICAgaWQKICAgICAgbWVzc2FnZQogICAgfQogICAgLi4uIG9uIEFjY291bnRNZW1iZXJzaGlwU3RhdHVzTm90RWxpZ2libGVSZWplY3Rpb24gewogICAgICBtZXNzYWdlCiAgICB9CiAgICAuLi4gb24gTWF4aW11bURhaWx5SW52aXRhdGlvbnNSZWFjaGVkUmVqZWN0aW9uIHsKICAgICAgbWVzc2FnZQogICAgfQogICAgLi4uIG9uIFVzZXJOb3RBbGxvd2VkVG9NYW5hZ2VBY2NvdW50TWVtYmVyc2hpcFJlamVjdGlvbiB7CiAgICAgIG1lc3NhZ2UKICAgIH0KICAgIC4uLiBvbiBVc2VyTm90QWxsb3dlZFRvU2VuZEFjY291bnRNZW1iZXJzaGlwSW52aXRhdGlvblJlamVjdGlvbiB7CiAgICAgIG1lc3NhZ2UKICAgIH0KICAgIC4uLiBvbiBGb3JiaWRkZW5SZWplY3Rpb24gewogICAgICBtZXNzYWdlCiAgICB9CiAgICAuLi4gb24gVmFsaWRhdGlvblJlamVjdGlvbiB7CiAgICAgIGZpZWxkcyB7CiAgICAgICAgY29kZQogICAgICAgIG1lc3NhZ2UKICAgICAgICBwYXRoCiAgICAgIH0KICAgICAgbWVzc2FnZQogICAgfQogIH0KfQo%3D" className="explorer-badge">Open in API Explorer</a>
25+
26+
```graphql {3} showLineNumbers
27+
mutation ResendInvitation {
28+
sendAccountMembershipInviteNotification(
29+
input: { accountMembershipId: "$YOUR_ACCOUNT_MEMBERSHIP_ID" }
30+
) {
31+
... on SendAccountMembershipInviteNotificationSuccessPayload {
32+
__typename
33+
notificationRequestId
34+
}
35+
... on AccountMembershipNotFoundRejection {
36+
id
37+
message
38+
}
39+
... on AccountMembershipStatusNotEligibleRejection {
40+
message
41+
}
42+
... on MaximumDailyInvitationsReachedRejection {
43+
message
44+
}
45+
... on UserNotAllowedToManageAccountMembershipRejection {
46+
message
47+
}
48+
... on UserNotAllowedToSendAccountMembershipInvitationRejection {
49+
message
50+
}
51+
... on ForbiddenRejection {
52+
message
53+
}
54+
... on ValidationRejection {
55+
fields {
56+
code
57+
message
58+
path
59+
}
60+
message
61+
}
62+
}
63+
}
64+
```
65+
66+
### Step 2: Receive the confirmation {#confirmation}
67+
68+
The API returns a `notificationRequestId` that you can use to track the email delivery if needed.
69+
70+
If a user reports problems with email delivery, provide this ID to [Swan Support](https://support.swan.io/hc/en-150) to help investigate the issue.
71+
72+
```json {4} showLineNumbers
73+
{
74+
"data": {
75+
"sendAccountMembershipInviteNotification": {
76+
"__typename": "SendAccountMembershipInviteNotificationSuccessPayload",
77+
"notificationRequestId": "3f5a787a-5709-43a2-90dd-7508b71cdf7b"
78+
}
79+
}
80+
}
81+
```
82+
83+
:::info Delivery status
84+
The API currently does not display the delivery status of notifications. Please contact [Swan Support](https://support.swan.io/hc/en-150) if you encounter any issues with email delivery.
85+
:::
86+
87+
## Rejection reasons {#rejections}
88+
89+
The mutation can return several rejection reasons if the request can't be completed:
90+
91+
| Rejection | Reason |
92+
|---|---|
93+
| `AccountMembershipNotFoundRejection` | The account membership ID doesn't exist. |
94+
| `AccountMembershipStatusNotEligibleRejection` | The account membership status must be `InvitationSent` to send an invitation notification. |
95+
| `MaximumDailyInvitationsReachedRejection` | You've reached the maximum of five invitation emails per day for this membership. |
96+
| `UserNotAllowedToManageAccountMembershipRejection` | The authenticated user doesn't have the `canManageAccountMembership` permission. |
97+
| `UserNotAllowedToSendAccountMembershipInvitationRejection` | The user's account membership status must be `Enabled` to send invitations. |
98+
| `ForbiddenRejection` | The operation is forbidden in the current context. |
99+
| `ValidationRejection` | The request contains validation errors. |
100+
101+
## Notification details {#details}
102+
103+
The invitation notification email:
104+
105+
- Is sent to the email address specified when creating the account membership.
106+
- Uses the account member's preferred language if set, otherwise the account's default language.
107+
- Includes your partner branding (logo and accent colors).
108+
- Contains a link for the invited member to accept the invitation and bind their Swan user account to the membership.
109+
- Can be translated into multiple languages automatically.
110+
111+
If you have feedback about notification translations, contact [Swan Support](https://support.swan.io/hc/en-150) and specify the notification and language.

docs/topics/accounts/memberships/index.mdx

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,20 @@ The grandparent is the legal representative (and an account member), and the gra
2121

2222
### Inviting members {#invite}
2323

24+
The invitation process allows you to grant account access to new users. When you invite someone to become an account member, they receive an email notification asking them to accept the invitation and bind their Swan user to their account membership in order to grant access to the account on which you invited them.
25+
2426
You can invite account members by phone number or by verified email.
2527
Use the API to add one membership or multiple memberships.
2628
If you use Swan's Web Banking interface, your users can [invite members](https://support.swan.io/hc/en-150/articles/17648698750877-Add-a-member-to-your-account) directly from the app.
2729

30+
**Invitation flow**:
31+
32+
1. A user with an account membership (the inviter) with the `canManageAccountMembership` permission creates a new account membership (for the invitee) using the API or our Web Banking interface.
33+
1. The new membership is created with the status `ConsentPending` or `InvitationSent`, depending on whether consent is required.
34+
1. We send an email invitation to the invited member (depending on your [notification configuration](#notifications)).
35+
1. The invited member clicks the link in the email, signs in or signs up to Swan, and accepts the invitation.
36+
1. The user is bound to the account membership and the status changes to `Enabled` or `BindingUserError`.
37+
2838
| Method | Explanation |
2939
| --- | --- |
3040
| Inviter provides phone number and email | <ul><li>Account member's mobile SIM card serves as the [authentication factor](../../../developers/using-api/authentication/guide-get-token-user.mdx#url-parameters-optional).</li><li>Account member can be assigned all [membership permissions](#permissions).</li><li>Swan confirms the member's phone number during the [sign-up process](../../users/index.mdx#signup).</li></ul> |
@@ -377,10 +387,40 @@ participant S as Swan
377387
∗ The **requester** can be the account holder, the account's legal representative, or an account member with the `canManageAccountMembership` permission.
378388
The requester provides consent (diagram line 4).
379389

390+
## Notifications {#notifications}
391+
392+
import NotificationBranding from '../../partials/_notification-branding.mdx';
393+
394+
Swan sends email notifications to users when account memberships are managed.
395+
396+
<NotificationBranding />
397+
398+
### Join your banking space {#notification-invitation}
399+
400+
When you invite someone to become an account member, Swan sends them an email invitation with a link to accept the membership.
401+
402+
**Trigger**: The invitation email is sent when you create a new account membership with the status `InvitationSent`. Depending on your integration approach, this happens automatically through Swan's Web Banking interface or requires an additional API call when using the API.
403+
404+
**Configuration**: The invitation notification is sent based on your integration setup:
405+
406+
- **Swan Web Banking**: Invitations are sent automatically when using Swan's no-code Web Banking interface, unless the `canAddNewMembers` web banking setting is disabled in your **Dashboard**.
407+
- **Swan Web Banking forked**: If you've forked Swan's no-code Web Banking frontend, invitations are sent automatically.
408+
409+
:::caution Forked Web Banking migration
410+
If you forked Swan's Web Banking before the migration to partner-branded notifications on Thursday, December 5, 2025, you must update your forked Web Banking to continue relying on Swan to send the invitation notification by email.
411+
:::
412+
413+
- **API integration**: When using the API directly, call the `sendAccountMembershipInviteNotification` mutation to send invitation notifications. Learn more in the [guide to resend membership invitation notifications](./guide-resend-invitation.mdx).
414+
415+
The email is sent to the account member's email address in their preferred language (or the account's default language if not set).
416+
417+
If an invited member doesn't receive their invitation, you can resend it up to five times per day using the same mutation, as long as the membership status remains `InvitationSent`.
418+
380419
## Guides {#guides}
381420

382421
- [Add a membership](./guide-add-one.mdx)
383422
- [Add multiple memberships](./guide-add-multiple.mdx)
423+
- [Resend membership invitation notification](./guide-resend-invitation.mdx)
384424
- [Fix a user binding error](./guide-fix-binding-error.mdx)
385425
- [Update a membership](./guide-update.mdx)
386426
- [Suspend or resume a membership](./guide-suspend-resume.mdx)

docs/topics/onboarding/account-holders/index.mdx

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,56 @@ participant S as Swan
198198
S ->> S: Swan reviews identity<br/>verification and documents
199199
```
200200

201+
## Notifications {#notifications}
202+
203+
import NotificationBranding from '../../partials/_notification-branding.mdx';
204+
205+
Swan sends email notifications to users during the account holder verification process.
206+
207+
<NotificationBranding />
208+
209+
### First transfer notification {#notification-first-transfer}
210+
211+
When a Swan KYC analyst determines that a first transfer is needed for verification, they can manually request it from the user. This notification isn't sent to every user; it's sent only when Swan identifies it as a necessary verification step.
212+
213+
**Trigger**: Manual request by a Swan KYC analyst after the user completes identification but before the account holder verification status changes to `Verified`.
214+
215+
**Configuration**: Swan can configure this notification on your behalf based on your preferred communication flow. Contact us to discuss your preference. The available options include sending notifications directly to the end customer, to you as the partner, copying both parties, or using the API to manage communications yourself.
216+
217+
The email includes the account's IBAN and BIC to help users complete the transfer.
218+
219+
### Supporting documents notifications {#notification-documents}
220+
221+
When Swan's KYC team needs additional supporting documents to complete the verification process, they can request them from the user through email notifications.
222+
223+
#### Request supporting documents {#notification-documents-request}
224+
225+
This notification informs the user that supporting documents are required and provides a link to upload them.
226+
227+
**Trigger**: Manual request by a Swan KYC analyst when additional supporting documents are needed for an onboarding-related document collection.
228+
229+
**Configuration**: Swan can configure this notification on your behalf. Contact your Account Manager to discuss your preferences. The available communication options are the same as for the first transfer notification.
230+
231+
The email includes a call-to-action button that redirects users to an onboarding page where they can upload the requested documents. Even if documents have already been requested for a given collection, triggering this action sends a new email.
232+
233+
#### Request supporting documents reminders {#notification-documents-reminders}
234+
235+
To help ensure users provide the necessary documents, Swan automatically sends reminder emails at regular intervals.
236+
237+
**Trigger**: Automatic reminders are sent when a Swan KYC analyst has requested additional supporting documents and your notification settings allow end customer communication.
238+
239+
Reminders are sent after 2, 4, 7, 14, and 21 days as long as the supporting document collection status remains `WaitingForDocument`.
240+
241+
**Configuration**: Reminders are only sent when your document collection settings are configured to communicate with the end customer (either directly or copied to you as the Partner). No reminders are sent when communications are Partner-only or managed via API.
242+
243+
### Account opened notification {#notification-account-opened}
244+
245+
When the verification process is complete and the account is ready for full use, Swan automatically notifies the user.
246+
247+
**Trigger**: Automatic when the account holder verification status changes to `Verified` and the account payment status changes to `Unlimited`, meaning the user can use all available funds.
248+
249+
**Configuration**: Swan can configure this notification on your behalf. Contact us to discuss your preferences. The available communication options include sending to the end customer, to you as the partner, or managing via API.
250+
201251
## Guides {#guides}
202252

203253
* [Monitor onboarding to track the verification process](../overview/guide-get-info.mdx)

docs/topics/onboarding/index.mdx

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,11 +180,27 @@ participant U as User
180180
S -->> P: Confirms account holder and account creation
181181
```
182182

183+
## Notifications {#notifications}
184+
185+
import NotificationBranding from '../partials/_notification-branding.mdx';
186+
187+
Swan sends email notifications to users during the onboarding process.
188+
189+
<NotificationBranding />
190+
191+
### Your account terms and conditions {#notification-terms}
192+
193+
When a user finalizes their onboarding, Swan automatically sends an email containing Swan's terms and conditions along with your Partnership Conditions.
194+
195+
**Trigger**: Automatic when the onboarding status switches to `Finalized`.
196+
197+
**Configuration**: This notification is always sent by Swan and can't be configured. The recipient is the email address provided during the onboarding flow by the account's legal representative, and the language used is the one selected during the onboarding flow.
198+
183199
## Guides {#guides}
184200

185201
The following guides are common to the individual and company onboarding processes.
186202

187203
* [Get information about an onboarding](./overview/guide-get-info.mdx)
188204
* [Get a list of required onboarding documents](./overview/guide-get-list.mdx)
189205
* [Export onboarding data](./overview/guide-export.mdx)
190-
* [Finalize an onboarding](./overview/guide-finalize.mdx)
206+
* [Finalize an onboarding](./overview/guide-finalize.mdx)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Notifications are branded with your logo and accent colors configured in your **Dashboard** under **Settings** > **Branding**.

docs/topics/projects/index.mdx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,15 +85,23 @@ Account members won't receive the notification if they don't have the required p
8585
| Card payment rejected due to **insufficient funds** | Your card payment was rejected due to insufficient funds. Please add money to your account before trying again. | `CanViewAccount` |
8686
| Card payment rejected because the cardholder has already **reached their [spending limit](../cards/index.mdx#limits)** | Your card payment was rejected because you reached the card's spending limit. Try again when your spending limit resets, or ask to increase it. | *None* |
8787
| Card payment rejected because the card is **permanently blocked [(canceled)](../cards/physical/index.mdx#statuses)** | Your card payment was rejected because the card is permanently blocked. Please order a new card. | *None* |
88-
| Card payment rejected because the cardholder entered the **[incorrect PIN](../cards/physical/index.mdx#pin-incorrect-attempts)** | Your card payment was rejected because the PIN wasnt correct. Please check your PIN before trying again. | *None* |
89-
| Card payment rejected because the cardholder entered an **invalid expiration date** | Your card payment was rejected because the expiration date is invalid. Please confirm your card isnt expired before trying again. | *None* |
88+
| Card payment rejected because the cardholder entered the **[incorrect PIN](../cards/physical/index.mdx#pin-incorrect-attempts)** | Your card payment was rejected because the PIN wasn't correct. Please check your PIN before trying again. | *None* |
89+
| Card payment rejected because the cardholder entered an **invalid expiration date** | Your card payment was rejected because the expiration date is invalid. Please confirm your card isn't expired before trying again. | *None* |
9090

9191
### Email notifications {#notifications-email}
9292

9393
| Event | Notification | Permission required |
9494
| --- | --- | --- |
9595
| Physical card is about to expire and goes into `ToRenew` **[status](../cards/physical/index.mdx#renew-statuses)** 10 weeks before the expiration date | White-label email sent 10 weeks before card expiry. The email reminds the user about the upcoming expiration date. It includes the current delivery address and asks them to update it in their banking app within two weeks if it's incorrect. | *None* |
9696

97+
### Other email notifications {#notifications-other}
98+
99+
Swan also sends email notifications during other workflows:
100+
101+
- [Account onboarding](../onboarding/index.mdx#notifications): Terms and conditions email sent when onboarding is finalized.
102+
- [Account holder verification](../onboarding/account-holders/index.mdx#notifications): First transfer requests, supporting document requests and reminders, and account opened notifications.
103+
- [Account membership invitations](../accounts/memberships/index.mdx#notifications): Invitation emails sent to new account members.
104+
97105
## Guides {#guides}
98106

99107
* [Activate your project](./guide-activate.mdx)

sidebars.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ module.exports = {
107107
items: [
108108
"topics/accounts/memberships/guide-add-one",
109109
"topics/accounts/memberships/guide-add-multiple",
110+
"topics/accounts/memberships/guide-resend-invitation",
110111
"topics/accounts/memberships/guide-fix-binding-error",
111112
"topics/accounts/memberships/guide-update",
112113
"topics/accounts/memberships/guide-suspend-resume",

0 commit comments

Comments
 (0)