diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000000..7d208ef0b0a --- /dev/null +++ b/.editorconfig @@ -0,0 +1,11 @@ +root = true + +[*] +charset = utf-8 +indent_size = 2 +insert_final_newline = true +indent_style = space +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.vscode/settings.json b/.vscode/settings.json index 5373d6298e1..0284f93821a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,3 @@ { - "mdx.server.enable": false -} \ No newline at end of file + "mdx.server.enable": false +} diff --git a/changelog/2024/2024-03-15.mdx b/changelog/2024/2024-03-15.mdx index b6516460159..fa41e776d82 100644 --- a/changelog/2024/2024-03-15.mdx +++ b/changelog/2024/2024-03-15.mdx @@ -11,4 +11,4 @@ This will remove current friction when receiving SEPA Credit Transfers from the ### Upcoming breaking changes 💥 In **4 weeks**, the Ultimate Beneficial Owner's residency country becomes mandatory in our no-code onboarding form. -In **4 months**, our API will enforce this change as well. \ No newline at end of file +In **4 months**, our API will enforce this change as well. diff --git a/changelog/2024/2024-03-28.mdx b/changelog/2024/2024-03-28.mdx index b33080a6b84..c12e2b3e208 100644 --- a/changelog/2024/2024-03-28.mdx +++ b/changelog/2024/2024-03-28.mdx @@ -13,8 +13,9 @@ Learn more about the [supporting document collection](/topics/onboarding/documen ⏸️ Suspending an account now triggers an `Account.Updated` webhook. ### Upcoming breaking changes -⚠️ In **2 weeks**, we'll reject any input of the "_" character in the `reference` field, and sanitize it in the `label` field within the `initiateCreditTransfers` mutation, as it's not authorized in SEPA messages. -For the `reference` field, ensure that the content: + +⚠️ In **2 weeks**, we'll reject any input of the "\_" character in the `reference` field, and sanitize it in the `label` field within the `initiateCreditTransfers` mutation, as it's not authorized in SEPA messages. +For the `reference` field, ensure that the content: - Doesn't start or end with a "/" - Doesn't have "//" @@ -23,4 +24,4 @@ For the `reference` field, ensure that the content: 💸 The `beneficiaryId` input field for the mutation `initiateCreditTransfers` has been deprecated, and will be removed in 4 weeks. ℹ️ In the upcoming months, we'll remove the requirement of one unique phone number per user. -While each phone number will remain linked to only one user at a time, it can **later** be reused by different users, like employees, at **separate** times. \ No newline at end of file +While each phone number will remain linked to only one user at a time, it can **later** be reused by different users, like employees, at **separate** times. diff --git a/changelog/2024/2024-04-04.mdx b/changelog/2024/2024-04-04.mdx index 0c8ca53fee4..663b5a67cc7 100644 --- a/changelog/2024/2024-04-04.mdx +++ b/changelog/2024/2024-04-04.mdx @@ -5,7 +5,7 @@ type: release ### New features -🌎 Account holders can now send [International Credit Transfers](/topics/payments/credit-transfers/international) to: +🌎 Account holders can now send [International Credit Transfers](/topics/payments/credit-transfers/international) to: - Exchange euros for another currency and transfer it. - Transfer euros outside of SEPA. @@ -15,4 +15,4 @@ Please contact your Account Manager if you're interested. ### Improvements -✅ [Beneficiary verification](/topics/payments/credit-transfers/sepa/#beneficiary-verification) between two Dutch accounts is now available on Swan's Web Banking. \ No newline at end of file +✅ [Beneficiary verification](/topics/payments/credit-transfers/sepa/#beneficiary-verification) between two Dutch accounts is now available on Swan's Web Banking. diff --git a/changelog/2024/2024-04-11.mdx b/changelog/2024/2024-04-11.mdx index 7e842c8718f..a6d467b118a 100644 --- a/changelog/2024/2024-04-11.mdx +++ b/changelog/2024/2024-04-11.mdx @@ -15,4 +15,4 @@ In **4 weeks**, we will use the new value `CapitalDepositReason`. ### Breaking changes -⚠️ The Ultimate Beneficial Owner's (UBO) residency country is now mandatory in our **no-code onboarding form**. \ No newline at end of file +⚠️ The Ultimate Beneficial Owner's (UBO) residency country is now mandatory in our **no-code onboarding form**. diff --git a/changelog/2024/2024-04-18.mdx b/changelog/2024/2024-04-18.mdx index 3cc61db494b..02d78791272 100644 --- a/changelog/2024/2024-04-18.mdx +++ b/changelog/2024/2024-04-18.mdx @@ -3,7 +3,6 @@ title: 18 April 2024 type: release --- - ### New features 💸 Offer bulk credit transfer capabilities to your end users. @@ -17,4 +16,4 @@ Contact your Account Manager if you're interested in this feature. ### Upcoming breaking changes 🙅🏾 In 4 weeks, the status `Canceled` will be added to `CapitalDepositCase`, and the status `CapitalDepositCanceled` to `Shareholder`. -Learn more about statuses for your [capital deposit cases](/topics/capital-deposits/#case-statuses) and [shareholders](/topics/capital-deposits/#shareholders-statuses). \ No newline at end of file +Learn more about statuses for your [capital deposit cases](/topics/capital-deposits/#case-statuses) and [shareholders](/topics/capital-deposits/#shareholders-statuses). diff --git a/changelog/2024/2024-04-26.mdx b/changelog/2024/2024-04-26.mdx index 256b23661ca..b6ae8f49500 100644 --- a/changelog/2024/2024-04-26.mdx +++ b/changelog/2024/2024-04-26.mdx @@ -3,7 +3,6 @@ title: 26 April 2024 type: release --- - ### Improvements 💰 We're supporting additional fees to provide a more flexible billing solution for our partners. diff --git a/changelog/2024/2024-05-24.mdx b/changelog/2024/2024-05-24.mdx index 1c91b681b78..645e1fd9740 100644 --- a/changelog/2024/2024-05-24.mdx +++ b/changelog/2024/2024-05-24.mdx @@ -19,4 +19,4 @@ Use the API to create webhooks dynamically, retry failed events automatically, a 🪪 In **4 weeks**, we will deprecate the `notStarted` [identification status](/topics/users/identifications/#statuses) and replace it with `Started` to streamline identification flows and reduce confusion. 💳 In **4 weeks**, we will start using the new following issued card [rejection reason codes](https://api-reference.swan.io/enums/rejected-reason-code/): `ThreeDsError`, `PeriodTransactionNumberLimitExceeded`, `MissingExpirationDate`, `MissingPin`, `DigitalWalletDeactivated`, `DigitalWalletEnrolmentInvalid`, `DigitalWalletTokenInvalid`, `DigitalWalletRefusal`, `DigitalWalletSuspended`, `InvalidAmount`, and `CardholderCancellation`. -The new rejection reasons are available in Sandbox using the [Event Simulator](/developers/tools/event-simulator). \ No newline at end of file +The new rejection reasons are available in Sandbox using the [Event Simulator](/developers/tools/event-simulator). diff --git a/changelog/2024/2024-05-31.mdx b/changelog/2024/2024-05-31.mdx index 02459544888..72de21b8132 100644 --- a/changelog/2024/2024-05-31.mdx +++ b/changelog/2024/2024-05-31.mdx @@ -13,4 +13,4 @@ type: release - The available languages are: Dutch `nl`, English `en`, French `fr`, German `de`, Italian `it`, Portuguese `pt`, and Spanish `es`. - Finnish `fi` won't be supported for the account membership language yet. - If you're subscribed to the `AccountMembership.Updated` webhook, you'll receive a webhook notification when `AccountMembership.language` is live. -- If you've already used the `updateAccountMembership` mutation to choose the language for an account membership, it won't change with this update. \ No newline at end of file +- If you've already used the `updateAccountMembership` mutation to choose the language for an account membership, it won't change with this update. diff --git a/changelog/coming-up.mdx b/changelog/coming-up.mdx index 5465553fcb2..1bdeb0e1d13 100644 --- a/changelog/coming-up.mdx +++ b/changelog/coming-up.mdx @@ -1,4 +1,4 @@ :::tip Coming up Beneficiary management for credit transfers, accepting online card payments, and more!
Check out [**Swan's public roadmap**](https://swanio.notion.site/Swan-Public-Roadmap-385e4b2e91b3409786a6c8e885654a22) to see what's in the works. :rocket: -::: \ No newline at end of file +::: diff --git a/docs/_contact.mdx b/docs/_contact.mdx index 5d6cc0c955f..ca737368e0d 100644 --- a/docs/_contact.mdx +++ b/docs/_contact.mdx @@ -1,3 +1,3 @@ -* For sales or services related questions: [Contact form](https://www.swan.io/talk-to-expert) -* For technical or product related questions: integration@swan.io -* For daily operations: support@swan.io \ No newline at end of file +- For sales or services related questions: [Contact form](https://www.swan.io/talk-to-expert) +- For technical or product related questions: integration@swan.io +- For daily operations: support@swan.io diff --git a/docs/developers/contact.mdx b/docs/developers/contact.mdx index 1b103f4ba95..17c056aa8d1 100644 --- a/docs/developers/contact.mdx +++ b/docs/developers/contact.mdx @@ -1,8 +1,9 @@ --- title: Contact Swan --- -import PartialExample from '../_contact.mdx'; + +import PartialExample from "../_contact.mdx"; # Contact Swan - \ No newline at end of file + diff --git a/docs/developers/graphql.mdx b/docs/developers/graphql.mdx index 06666e3d098..cfbae951591 100644 --- a/docs/developers/graphql.mdx +++ b/docs/developers/graphql.mdx @@ -56,8 +56,9 @@ Consider this [query example from onboarding](../topics/onboarding/overview/guid You can also explore all of Swan's queries in [API Explorer](https://explorer.swan.io/). ```graphql title="Query" showLineNumbers -query { - user(id: "$SWAN_USER_ID") { #query name +query { + #query name + user(id: "$SWAN_USER_ID") { mobilePhoneNumber #field } } @@ -78,16 +79,16 @@ Swan often has two query options per object, such as `user` and `users`. - `user` requires an `id` and returns data about a single user. - `users` doesn't require an `id` and returns data about all of your users. -::: + ::: ### Mutations {#graphql-mutations} There are entry points to a GraphQL API to make requests, which both take inputs. -| Request type | Purpose | `REST` comparison | -|---|---|---| -| Mutations | Make a change | `PUT` or `POST` | -| Queries | Fetch data from the remote API | `GET` | +| Request type | Purpose | `REST` comparison | +| ------------ | ------------------------------ | ----------------- | +| Mutations | Make a change | `PUT` or `POST` | +| Queries | Fetch data from the remote API | `GET` | Each request starts with the keyword `query` or `mutation`, then specifies the field or fields you want to get back in the response. @@ -106,7 +107,8 @@ mutation ChangeLanguage { updateAccount( #mutation name input: { accountId: "$YOUR_ACCOUNT_ID", language: en } #input information ) { - ... on UpdateAccountSuccessPayload { #validation + #validation + ... on UpdateAccountSuccessPayload { __typename account { language #returns account language in payload @@ -114,7 +116,6 @@ mutation ChangeLanguage { } } } - ``` ```json title="Payload" {4,6} showLineNumbers @@ -187,4 +188,4 @@ query { } } } -``` \ No newline at end of file +``` diff --git a/docs/developers/index.mdx b/docs/developers/index.mdx index 8af5fe6f8e6..59c8f0b95be 100644 --- a/docs/developers/index.mdx +++ b/docs/developers/index.mdx @@ -38,12 +38,12 @@ In short, **test in Sandbox, build in Live**—and remember, you can't move anyt ### Endpoints {#endpoints} -| Name | Endpoint | -| --- | --- | -| Server OAuth 2.0 | https://oauth.swan.io/oauth2 | -| Sandbox | https://api.swan.io/sandbox-partner/graphql | +| Name | Endpoint | +| --------------------- | ------------------------------------------------- | +| Server OAuth 2.0 | https://oauth.swan.io/oauth2 | +| Sandbox | https://api.swan.io/sandbox-partner/graphql | | Sandbox (Testing API) | https://api.swan.io/sandbox-partner-admin/graphql | -| Live | https://api.swan.io/live-partner/graphql | +| Live | https://api.swan.io/live-partner/graphql | ### Rate limiting {#rate-limits} @@ -53,7 +53,7 @@ The default limit for each IP is **2,000 requests every 5 minutes**. If you send over 2,000 requests for a single endpoint, you'll receive an HTTP 429 Too Many Requests response. This limit applies to all endpoints. -If you need to increase the rate limits for your use case, request it through email: integration@swan.io. +If you need to increase the rate limits for your use case, request it through email: integration@swan.io. ### Backend communication {#backend} @@ -78,18 +78,18 @@ curl -X POST https://api.swan.io/sandbox-partner/graphql \ ```json title="Response" {4} showLineNumbers { - "data": { - "accounts": { - "edges": [ - { - "node": { - "id": "$YOUR_ID", - "IBAN": "$YOUR_IBAN" - } - } - ] + "data": { + "accounts": { + "edges": [ + { + "node": { + "id": "$YOUR_ID", + "IBAN": "$YOUR_IBAN" + } } + ] } + } } ``` @@ -106,4 +106,4 @@ If you experience an issue or a bug working with Swan's API, complete the follow 1. **Check the [status page](https://status.swan.io/)** to see if there's planned maintenance or an outage that could impact services. 1. **Search the documentation** with keywords about your specific problem. It could be an expected behavior or something else explained in the docs. -1. Otherwise, **submit a ticket** through your Dashboard, or **send an email** to integration@swan.io. \ No newline at end of file +1. Otherwise, **submit a ticket** through your Dashboard, or **send an email** to integration@swan.io. diff --git a/docs/developers/tools/_testing-simulator.mdx b/docs/developers/tools/_testing-simulator.mdx index 40282bddced..6f86e6149af 100644 --- a/docs/developers/tools/_testing-simulator.mdx +++ b/docs/developers/tools/_testing-simulator.mdx @@ -2,4 +2,4 @@ The **Testing API** and the **Event Simulator** are essentially the same tool with two access points. Though you'll test some actions from the API and others with the simulator, both share the goal of **triggering events that happen outside of Swan**. -::: \ No newline at end of file +::: diff --git a/docs/developers/tools/api-explorer.mdx b/docs/developers/tools/api-explorer.mdx index 884cf06e7be..f686a98dbde 100644 --- a/docs/developers/tools/api-explorer.mdx +++ b/docs/developers/tools/api-explorer.mdx @@ -20,14 +20,14 @@ The API Explorer can be broken up into **three main blocks**: ## Block 1: Top navigation {#top-nav} 1. Swan exposes two APIs: - - Use the **Live API** to perform all of your real work with Swan. - - Use the [**Testing API**](./testing-api.mdx) in partnership with the [**Event Simulator**](./event-simulator.mdx) to simulate events that must include other people, such as consent and authentications. + - Use the **Live API** to perform all of your real work with Swan. + - Use the [**Testing API**](./testing-api.mdx) in partnership with the [**Event Simulator**](./event-simulator.mdx) to simulate events that must include other people, such as consent and authentications. **Open the menu to switch** between tokens and projects by clicking around your logo or user type: 2. Switch between [**access tokens**](../using-api/authentication/index.mdx#tokens): - - **Project** uses a project access token. - - **Sandbox user** selected in your dashboard uses the user access token associated with the chosen user. Change this user on **Dashboard** > **Developers** > **Sandbox users**. + - **Project** uses a project access token. + - **Sandbox user** selected in your dashboard uses the user access token associated with the chosen user. Change this user on **Dashboard** > **Developers** > **Sandbox users**. 1. Toggle between projects you have access to. If you think a project is missing from this list, talk to the project's admin. ![Focused screenshot of top navigation with project and token menu open](../../images/developers/tools/explorer-top-nav.png) @@ -37,21 +37,21 @@ The API Explorer can be broken up into **three main blocks**: 1. **Builder**: Add mutations and queries, as well as all fields, objects, responses, and more. 1. **Documentation**: Refer to the [API Reference](https://api-reference.swan.io/) without leaving the Explorer. 1. **History**: Review your exploration history. You can: - - Edit the names of your mutations and queries for easy reference. - - Star mutations and queries you use frequently. - - Delete items from the history if they're not helpful anymore. You can also clear all of your local data by clicking the settings icon (not pictured). + - Edit the names of your mutations and queries for easy reference. + - Star mutations and queries you use frequently. + - Delete items from the history if they're not helpful anymore. You can also clear all of your local data by clicking the settings icon (not pictured). ![Focused screenshot of three side modules](../../images/developers/tools/explorer-module-options.png) ## Block 3: Body {#body} 1. Edit your query or mutation in the **primary terminal**. - - All of the fields, objects, rejections, and more that you select in the **builder** will appear in this terminal. - - You'll need to **input all information in the terminal**, such as IDs, addresses, IBANs, and all other required and optional content. + - All of the fields, objects, rejections, and more that you select in the **builder** will appear in this terminal. + - You'll need to **input all information in the terminal**, such as IDs, addresses, IBANs, and all other required and optional content. 1. Inside of the primary terminal, you have buttons to: - - **Run** your query or mutation. - - **Prettify** (or clean up) the formatting of your content. - - **Share** the exact query or mutation. + - **Run** your query or mutation. + - **Prettify** (or clean up) the formatting of your content. + - **Share** the exact query or mutation. 1. Payloads and responses are displayed in a non-editable **secondary terminal**. 1. Your **recently-used queries and mutations** appear at the top of the body block of the API Explorer. Click one to autofill the primary terminal. @@ -63,4 +63,4 @@ To maximize performance and keep the Explorer secure, please work within the fol - Maximum of 10 nested fields per object - Maximum of 1000 fields per query -- Maximum of 3 root fields per Explorer operation (you can call up to 3 mutations or queries at the same time) \ No newline at end of file +- Maximum of 3 root fields per Explorer operation (you can call up to 3 mutations or queries at the same time) diff --git a/docs/developers/tools/event-simulator.mdx b/docs/developers/tools/event-simulator.mdx index 0cef89fca98..ff0272755bb 100644 --- a/docs/developers/tools/event-simulator.mdx +++ b/docs/developers/tools/event-simulator.mdx @@ -16,7 +16,7 @@ Go to **Dashboard** > **Developers** > **Event Simulator** to open the simulator ![Image of Dashboard Event Simulator page](../../images/developers/tools/event-simulator.png) -import TestingApiEventSimulator from './_testing-simulator.mdx'; +import TestingApiEventSimulator from "./_testing-simulator.mdx"; diff --git a/docs/developers/tools/guide-test-tools.mdx b/docs/developers/tools/guide-test-tools.mdx index 3d1af598395..1ac93a623e2 100644 --- a/docs/developers/tools/guide-test-tools.mdx +++ b/docs/developers/tools/guide-test-tools.mdx @@ -43,7 +43,6 @@ You can now perform operations with this Sandbox user. ![Image of Event Simulator SEPA Credit Transfers section](../../images/developers/tools/test-validate-3.png) - ## Step 3: Testing API → Simulate receiving a transfer {#receive-transfer} 1. Call the `simulateIncomingSepaCreditTransferReception` mutation to [simulate receiving an incoming SEPA Credit Transfer](https://explorer.swan.io?query=bXV0YXRpb24gU2ltdWxhdGVSZWNlaXZpbmdUcmFuc2ZlciB7CiAgc2ltdWxhdGVJbmNvbWluZ1NlcGFDcmVkaXRUcmFuc2ZlclJlY2VwdGlvbigKICAgIGlucHV0OiB7CiAgICAgIGFtb3VudDogeyB2YWx1ZTogIjEwMCIsIGN1cnJlbmN5OiAiRVVSIiB9CiAgICAgIGNyZWRpdG9ySWJhbjogIiRTV0FOX0FDQ09VTlRfSUJBTiIKICAgICAgY3JlZGl0b3JOYW1lOiAiTWFsaWthIE5nb21hIgogICAgICBkZWJ0b3JJYmFuOiAiRlIyNzMwMDAzMDAwNzA2MzE1NzM0MTc0QjkzIgogICAgICBkZWJ0b3JOYW1lOiAiSnVsZXMgRmxldXJ5IgogICAgICBjcmVkaXRvckFkZHJlc3M6IHsKICAgICAgICBhZGRyZXNzTGluZTE6ICIxMjMgYXZlbnVlIGRlIFBhcmlzIgogICAgICAgIGNpdHk6ICJQYXJpcyIKICAgICAgICBwb3N0YWxDb2RlOiAiNzUwMDAiCiAgICAgICAgY291bnRyeTogIkZSQSIKICAgICAgfQogICAgICBkZWJ0b3JBZGRyZXNzOiB7CiAgICAgICAgYWRkcmVzc0xpbmUxOiAiODc2IGF2ZW51ZSBkZSBUb3Vsb3VzZSIKICAgICAgICBjaXR5OiAiUGFyaXMiCiAgICAgICAgY291bnRyeTogIkZSQSIKICAgICAgICBwb3N0YWxDb2RlOiAiNzUwMDAiCiAgICAgIH0KICAgICAgZW5kVG9FbmRJZDogIkV0b0UgUmVmIgogICAgICBsYWJlbDogIkxhYmVsIHRvIGRpc3BsYXkiCiAgICB9CiAgKSB7CiAgICAuLi4gb24gU2ltdWxhdGVJbmNvbWluZ1NlcGFDcmVkaXRUcmFuc2ZlclJlY2VwdGlvblN1Y2Nlc3NQYXlsb2FkIHsKICAgICAgdHJhbnNhY3Rpb25JZAogICAgfQogICAgLi4uIG9uIEZvcmJpZGRlblJlamVjdGlvbiB7CiAgICAgIG1lc3NhZ2UKICAgICAgX190eXBlbmFtZQogICAgfQogIH0KfQo%3D&tab=test-api). @@ -84,7 +83,6 @@ mutation SimulateReceivingTransfer { } } } - ``` ```json title="Payload" {4} showLineNumbers @@ -108,4 +106,4 @@ mutation SimulateReceivingTransfer { 1. Click **Simulate**. 1. The status changes to `Success` and a new transaction ID appears for the return transaction. -![Image of Event Simulator SEPA Credit Transfers section](../../images/developers/tools/test-simulator-return-2.png) \ No newline at end of file +![Image of Event Simulator SEPA Credit Transfers section](../../images/developers/tools/test-simulator-return-2.png) diff --git a/docs/developers/tools/index.mdx b/docs/developers/tools/index.mdx index 22079583983..e48b845e57a 100644 --- a/docs/developers/tools/index.mdx +++ b/docs/developers/tools/index.mdx @@ -12,11 +12,11 @@ In addition to your **Dashboard**, several key tools work together in harmony to - [Testing API](./testing-api.mdx) - [Event Simulator](./event-simulator.mdx) - [Sandbox users](./sandbox-users.mdx) -- [Postman collection](./postman-collection.mdx) *(optional)* +- [Postman collection](./postman-collection.mdx) _(optional)_ Use these tools to test scenarios manually, test behavior before implementation, simulate operations with the API, and more. You can also call the Testing API programmatically and perform end-to-end tests without connecting to the Dashboard. :::tip tutorial See how all of these tools work together in the [**Work with Swan tools**](./guide-test-tools.mdx) tutorial. -::: \ No newline at end of file +::: diff --git a/docs/developers/tools/postman-collection.mdx b/docs/developers/tools/postman-collection.mdx index 287f7bbfa61..423c17b7fed 100644 --- a/docs/developers/tools/postman-collection.mdx +++ b/docs/developers/tools/postman-collection.mdx @@ -72,7 +72,6 @@ You can cancel authentication if needed. ![Image of Postman guiding user to use the new project access token](../../images/developers/tools/implementation-token-project-use.png) - ### 5.2 User access token Getting a new user access token requires consent from the user associated with the token. @@ -94,4 +93,4 @@ The user needs to use their phone to consent to your user access token before yo 6. After the user consents, a modal with all information about your user access token appears on the screen. Click **Use Token**. -![Image of Postman guiding user to use the new user access token](../../images/developers/tools/implementation-token-user-use.png) \ No newline at end of file +![Image of Postman guiding user to use the new user access token](../../images/developers/tools/implementation-token-user-use.png) diff --git a/docs/developers/tools/sandbox-users.mdx b/docs/developers/tools/sandbox-users.mdx index 6cd5f6cfa3c..bda63b1ec78 100644 --- a/docs/developers/tools/sandbox-users.mdx +++ b/docs/developers/tools/sandbox-users.mdx @@ -17,7 +17,7 @@ Go to **Dashboard** > **Developers** > **Sandbox users** to open your list of Sa :::caution Deleting Sandbox users Note that you can **only delete Sandbox users** if you **haven't used them to simulate any operations**. -Since you can't delete a user from your Live environment, deleting from the Sandbox environment *after* the Sandbox user has simulated something would be inconsistent. +Since you can't delete a user from your Live environment, deleting from the Sandbox environment _after_ the Sandbox user has simulated something would be inconsistent. ::: ## Settings {#settings} @@ -29,19 +29,19 @@ The following settings are required and modifiable for each Sandbox user: 1. Birthdate 1. Nationality 1. Auto consent - - Automatically consents for that Sandbox user, removing the need to repeatedly get the user's consent. - - If toggled to on, auto consent can save you considerable time during the development phase, by automatically allowing consent, removing the need to repeatedly get consent. + - Automatically consents for that Sandbox user, removing the need to repeatedly get the user's consent. + - If toggled to on, auto consent can save you considerable time during the development phase, by automatically allowing consent, removing the need to repeatedly get consent. ![Image of an open Sandbox user with list of settings](../../images/developers/tools/sandbox-user-settings.png) ## Access to Sandbox users {#access} -Team members with access to the Sandbox users section* can create an unlimited number of Sandbox users using either the Dashboard or the Testing API +Team members with access to the Sandbox users section\* can create an unlimited number of Sandbox users using either the Dashboard or the Testing API User access tokens link team members with all Sandbox users they create. If team members have access to **Developers** > **Sandbox users**, they can only see and use Sandbox users associated with their own user access token. -:::caution Dashboard roles* +:::caution Dashboard roles\* The team member's Dashboard role determines whether or not they have access to the Sandbox users section. ::: @@ -52,4 +52,4 @@ Call these mutations with a user access token. 1. [Create a Sandbox user](https://explorer.swan.io?query=bXV0YXRpb24gQ3JlYXRlIHsKICBjcmVhdGVTYW5kYm94VXNlcigKICAgIGlucHV0OiB7CiAgICAgIGZpcnN0TmFtZTogIkRpbGxvbiIKICAgICAgbGFzdE5hbWU6ICJCeXJuZSIKICAgICAgYmlydGhEYXRlOiAiMTk5MC0wOS0yNCIKICAgICAgbmF0aW9uYWxpdHlDQ0EzOiAiSVJMIgogICAgICBhdXRvQ29uc2VudDogdHJ1ZQogICAgfQogICkgewogICAgLi4uIG9uIENyZWF0ZVNhbmRib3hVc2VyU3VjY2Vzc1BheWxvYWQgewogICAgICBfX3R5cGVuYW1lCiAgICAgIHNhbmRib3hVc2VyIHsKICAgICAgICBpZAogICAgICAgIGlkZW50aWZpY2F0aW9uTGV2ZWxzIHsKICAgICAgICAgIFBWSUQKICAgICAgICAgIFFFUwogICAgICAgICAgZXhwZXJ0CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAuLi4gb24gTmF0aW9uYWxpdHlOb3RGb3VuZFJlamVjdGlvbiB7CiAgICAgIF9fdHlwZW5hbWUKICAgICAgaWRlbnRpZmllcgogICAgICBtZXNzYWdlCiAgICB9CiAgICAuLi4gb24gRm9yYmlkZGVuUmVqZWN0aW9uIHsKICAgICAgX190eXBlbmFtZQogICAgICBtZXNzYWdlCiAgICB9CiAgfQp9Cg%3D%3D&tab=test-api) 1. [Update a Sandbox user](https://explorer.swan.io?query=bXV0YXRpb24gTXlNdXRhdGlvbiB7CiAgdXBkYXRlU2FuZGJveFVzZXIoCiAgICBpbnB1dDogewogICAgICBpZDogIiRZT1VSX1NBTkRCT1hfVVNFUl9JRCIKICAgICAgZmlyc3ROYW1lOiAiRGlsbG9uIgogICAgICBsYXN0TmFtZTogIkJ5cm5lLU%2FigJlDb25ub3IiCiAgICAgIGJpcnRoRGF0ZTogIjE5OTAtMDktMjQiCiAgICAgIG5hdGlvbmFsaXR5Q0NBMzogIklSTCIKICAgICAgYXV0b0NvbnNlbnQ6IGZhbHNlCiAgICB9CiAgKSB7CiAgICAuLi4gb24gVXBkYXRlU2FuZGJveFVzZXJTdWNjZXNzUGF5bG9hZCB7CiAgICAgIF9fdHlwZW5hbWUKICAgICAgc2FuZGJveFVzZXIgewogICAgICAgIGlkCiAgICAgICAgbGFzdE5hbWUKICAgICAgfQogICAgfQogICAgLi4uIG9uIEZvcmJpZGRlblJlamVjdGlvbiB7CiAgICAgIF9fdHlwZW5hbWUKICAgICAgbWVzc2FnZQogICAgfQogICAgLi4uIG9uIE5hdGlvbmFsaXR5Tm90Rm91bmRSZWplY3Rpb24gewogICAgICBfX3R5cGVuYW1lCiAgICAgIGlkZW50aWZpZXIKICAgICAgbWVzc2FnZQogICAgfQogICAgLi4uIG9uIFNhbmRib3hVc2VyTm90Rm91bmRSZWplY3Rpb24gewogICAgICBfX3R5cGVuYW1lCiAgICAgIG1lc3NhZ2UKICAgICAgdXNlcklkCiAgICB9CiAgfQp9Cg%3D%3D&tab=test-api) 1. [Endorse a Sandbox user](https://explorer.swan.io?query=bXV0YXRpb24gTXlNdXRhdGlvbiB7CiAgZW5kb3JzZVNhbmRib3hVc2VyKGlucHV0OiB7IGlkOiAiJFlPVVJfU0FOREJPWF9VU0VSX0lEIiB9KSB7CiAgICAuLi4gb24gRW5kb3JzZVNhbmRib3hVc2VyU3VjY2Vzc1BheWxvYWQgewogICAgICBfX3R5cGVuYW1lCiAgICAgIHNhbmRib3hVc2VyIHsKICAgICAgICBpZAogICAgICAgIGlzQWN0aXZlCiAgICAgIH0KICAgIH0KICAgIC4uLiBvbiBGb3JiaWRkZW5SZWplY3Rpb24gewogICAgICBfX3R5cGVuYW1lCiAgICAgIG1lc3NhZ2UKICAgIH0KICAgIC4uLiBvbiBTYW5kYm94VXNlck5vdEZvdW5kUmVqZWN0aW9uIHsKICAgICAgX190eXBlbmFtZQogICAgICBtZXNzYWdlCiAgICAgIHVzZXJJZAogICAgfQogIH0KfQo%3D&tab=test-api) -1. [Delete a Sandbox user](https://explorer.swan.io?query=bXV0YXRpb24gTXlNdXRhdGlvbiB7CiAgZGVsZXRlU2FuZGJveFVzZXIoaW5wdXQ6IHsgaWQ6ICIkWU9VUl9TQU5EQk9YX1VTRVJfSUQiIH0pIHsKICAgIC4uLiBvbiBEZWxldGVTYW5kYm94VXNlclN1Y2Nlc3NQYXlsb2FkIHsKICAgICAgX190eXBlbmFtZQogICAgICBzdWNjZXNzCiAgICB9CiAgICAuLi4gb24gRm9yYmlkZGVuUmVqZWN0aW9uIHsKICAgICAgX190eXBlbmFtZQogICAgICBtZXNzYWdlCiAgICB9CiAgICAuLi4gb24gTGFzdFNhbmRib3hVc2VyQ2Fubm90QmVEZWxldGVkUmVqZWN0aW9uIHsKICAgICAgX190eXBlbmFtZQogICAgICBtZXNzYWdlCiAgICAgIHVzZXJJZAogICAgfQogICAgLi4uIG9uIFNhbmRib3hVc2VyTm90Rm91bmRSZWplY3Rpb24gewogICAgICBfX3R5cGVuYW1lCiAgICAgIG1lc3NhZ2UKICAgICAgdXNlcklkCiAgICB9CiAgfQp9Cg%3D%3D&tab=test-api) \ No newline at end of file +1. [Delete a Sandbox user](https://explorer.swan.io?query=bXV0YXRpb24gTXlNdXRhdGlvbiB7CiAgZGVsZXRlU2FuZGJveFVzZXIoaW5wdXQ6IHsgaWQ6ICIkWU9VUl9TQU5EQk9YX1VTRVJfSUQiIH0pIHsKICAgIC4uLiBvbiBEZWxldGVTYW5kYm94VXNlclN1Y2Nlc3NQYXlsb2FkIHsKICAgICAgX190eXBlbmFtZQogICAgICBzdWNjZXNzCiAgICB9CiAgICAuLi4gb24gRm9yYmlkZGVuUmVqZWN0aW9uIHsKICAgICAgX190eXBlbmFtZQogICAgICBtZXNzYWdlCiAgICB9CiAgICAuLi4gb24gTGFzdFNhbmRib3hVc2VyQ2Fubm90QmVEZWxldGVkUmVqZWN0aW9uIHsKICAgICAgX190eXBlbmFtZQogICAgICBtZXNzYWdlCiAgICAgIHVzZXJJZAogICAgfQogICAgLi4uIG9uIFNhbmRib3hVc2VyTm90Rm91bmRSZWplY3Rpb24gewogICAgICBfX3R5cGVuYW1lCiAgICAgIG1lc3NhZ2UKICAgICAgdXNlcklkCiAgICB9CiAgfQp9Cg%3D%3D&tab=test-api) diff --git a/docs/developers/tools/testing-api.mdx b/docs/developers/tools/testing-api.mdx index 0dbcfd4417f..2cb9b63f168 100644 --- a/docs/developers/tools/testing-api.mdx +++ b/docs/developers/tools/testing-api.mdx @@ -18,7 +18,7 @@ Go to **API Explorer** > [**Testing API**](https://explorer.swan.io/?tab=test-ap ![Image of Testing API](../../images/developers/tools/testing-api.png) -import TestingApiEventSimulator from './_testing-simulator.mdx'; +import TestingApiEventSimulator from "./_testing-simulator.mdx"; @@ -28,17 +28,17 @@ The following links lead to examples to personalize and test with the Testing AP As a reminder, this list isn't exhaustive. 1. **SEPA Credit Transfers** - 1. [Simulate receiving an incoming SEPA Credit Transfer](https://explorer.swan.io?query=bXV0YXRpb24gTXV0YXRpb24gewogIHNpbXVsYXRlSW5jb21pbmdTZXBhQ3JlZGl0VHJhbnNmZXJSZWNlcHRpb24oCiAgICBpbnB1dDogewogICAgICBhbW91bnQ6IHsgdmFsdWU6ICIxMDAiLCBjdXJyZW5jeTogIkVVUiIgfQogICAgICBjcmVkaXRvckliYW46ICIkU1dBTl9BQ0NPVU5UX0lCQU4iCiAgICAgIGNyZWRpdG9yTmFtZTogIk1hbGlrYSBOZ29tYSIKICAgICAgZGVidG9ySWJhbjogIkZSMjczMDAwMzAwMDcwNjMxNTczNDE3NEI5MyIKICAgICAgZGVidG9yTmFtZTogIkp1bGVzIEZsZXVyeSIKICAgICAgY3JlZGl0b3JBZGRyZXNzOiB7CiAgICAgICAgYWRkcmVzc0xpbmUxOiAiMTIzIGF2ZW51ZSBkZSBQYXJpcyIKICAgICAgICBjaXR5OiAiUGFyaXMiCiAgICAgICAgcG9zdGFsQ29kZTogIjc1MDAwIgogICAgICAgIGNvdW50cnk6ICJGUkEiCiAgICAgIH0KICAgICAgZGVidG9yQWRkcmVzczogewogICAgICAgIGFkZHJlc3NMaW5lMTogIjg3NiBhdmVudWUgZGUgVG91bG91c2UiCiAgICAgICAgY2l0eTogIlBhcmlzIgogICAgICAgIGNvdW50cnk6ICJGUkEiCiAgICAgICAgcG9zdGFsQ29kZTogIjc1MDAwIgogICAgICB9CiAgICAgIGVuZFRvRW5kSWQ6ICJFdG9FIFJlZiIKICAgICAgbGFiZWw6ICJMYWJlbCB0byBkaXNwbGF5IgogICAgfQogICkgewogICAgLi4uIG9uIFNpbXVsYXRlSW5jb21pbmdTZXBhQ3JlZGl0VHJhbnNmZXJSZWNlcHRpb25TdWNjZXNzUGF5bG9hZCB7CiAgICAgIHRyYW5zYWN0aW9uSWQKICAgIH0KICAgIC4uLiBvbiBGb3JiaWRkZW5SZWplY3Rpb24gewogICAgICBtZXNzYWdlCiAgICAgIF9fdHlwZW5hbWUKICAgIH0KICB9Cn0K&tab=test-api) - 1. [Simulate an accepted recall of an Incoming SEPA Credit Transfer](https://explorer.swan.io?query=bXV0YXRpb24gTXV0YXRpb24gewogIHNpbXVsYXRlSW5jb21pbmdTZXBhQ3JlZGl0VHJhbnNmZXJBY2NlcHRlZFJlY2FsbCgKICAgIGlucHV0OiB7CiAgICAgIHJlYXNvbkNvZGU6IEJlbmVmaWNpYXJ5QWNjb3VudEluY29ycmVjdAogICAgICB0cmFuc2FjdGlvbklkOiAiJFlPVVJfVFJBTlNBQ1RJT05fSUQiCiAgICB9CiAgKSB7CiAgICAuLi4gb24gU2ltdWxhdGVJbmNvbWluZ1NlcGFDcmVkaXRUcmFuc2ZlckFjY2VwdGVkUmVjYWxsU3VjY2Vzc1BheWxvYWQgewogICAgICBfX3R5cGVuYW1lCiAgICAgIHRyYW5zYWN0aW9uSWQKICAgIH0KICAgIC4uLiBvbiBGb3JiaWRkZW5SZWplY3Rpb24gewogICAgICBfX3R5cGVuYW1lCiAgICAgIG1lc3NhZ2UKICAgIH0KICAgIC4uLiBvbiBUcmFuc2FjdGlvbk5vdEZvdW5kUmVqZWN0aW9uIHsKICAgICAgX190eXBlbmFtZQogICAgICBtZXNzYWdlCiAgICAgIHRyYW5zYWN0aW9uSWQKICAgIH0KICB9Cn0K&tab=test-api) - 1. [Simulate booking an outgoing SEPA Credit Transfer](https://explorer.swan.io?query=bXV0YXRpb24gTXV0YXRpb24gewogIHNpbXVsYXRlT3V0Z29pbmdTZXBhQ3JlZGl0VHJhbnNmZXJCb29raW5nKAogICAgaW5wdXQ6IHsgdHJhbnNhY3Rpb25JZDogIiRZT1VSX1RSQU5TQUNUSU9OX0lEIiB9CiAgKSB7CiAgICAuLi4gb24gU2ltdWxhdGVPdXRnb2luZ1NlcGFDcmVkaXRUcmFuc2ZlckJvb2tpbmdTdWNjZXNzUGF5bG9hZCB7CiAgICAgIHRyYW5zYWN0aW9uSWQKICAgIH0KICAgIC4uLiBvbiBGb3JiaWRkZW5SZWplY3Rpb24gewogICAgICBtZXNzYWdlCiAgICB9CiAgICAuLi4gb24gVHJhbnNhY3Rpb25Ob3RGb3VuZFJlamVjdGlvbiB7CiAgICAgIHRyYW5zYWN0aW9uSWQKICAgICAgbWVzc2FnZQogICAgfQogIH0KfQo%3D&tab=test-api) + 1. [Simulate receiving an incoming SEPA Credit Transfer](https://explorer.swan.io?query=bXV0YXRpb24gTXV0YXRpb24gewogIHNpbXVsYXRlSW5jb21pbmdTZXBhQ3JlZGl0VHJhbnNmZXJSZWNlcHRpb24oCiAgICBpbnB1dDogewogICAgICBhbW91bnQ6IHsgdmFsdWU6ICIxMDAiLCBjdXJyZW5jeTogIkVVUiIgfQogICAgICBjcmVkaXRvckliYW46ICIkU1dBTl9BQ0NPVU5UX0lCQU4iCiAgICAgIGNyZWRpdG9yTmFtZTogIk1hbGlrYSBOZ29tYSIKICAgICAgZGVidG9ySWJhbjogIkZSMjczMDAwMzAwMDcwNjMxNTczNDE3NEI5MyIKICAgICAgZGVidG9yTmFtZTogIkp1bGVzIEZsZXVyeSIKICAgICAgY3JlZGl0b3JBZGRyZXNzOiB7CiAgICAgICAgYWRkcmVzc0xpbmUxOiAiMTIzIGF2ZW51ZSBkZSBQYXJpcyIKICAgICAgICBjaXR5OiAiUGFyaXMiCiAgICAgICAgcG9zdGFsQ29kZTogIjc1MDAwIgogICAgICAgIGNvdW50cnk6ICJGUkEiCiAgICAgIH0KICAgICAgZGVidG9yQWRkcmVzczogewogICAgICAgIGFkZHJlc3NMaW5lMTogIjg3NiBhdmVudWUgZGUgVG91bG91c2UiCiAgICAgICAgY2l0eTogIlBhcmlzIgogICAgICAgIGNvdW50cnk6ICJGUkEiCiAgICAgICAgcG9zdGFsQ29kZTogIjc1MDAwIgogICAgICB9CiAgICAgIGVuZFRvRW5kSWQ6ICJFdG9FIFJlZiIKICAgICAgbGFiZWw6ICJMYWJlbCB0byBkaXNwbGF5IgogICAgfQogICkgewogICAgLi4uIG9uIFNpbXVsYXRlSW5jb21pbmdTZXBhQ3JlZGl0VHJhbnNmZXJSZWNlcHRpb25TdWNjZXNzUGF5bG9hZCB7CiAgICAgIHRyYW5zYWN0aW9uSWQKICAgIH0KICAgIC4uLiBvbiBGb3JiaWRkZW5SZWplY3Rpb24gewogICAgICBtZXNzYWdlCiAgICAgIF9fdHlwZW5hbWUKICAgIH0KICB9Cn0K&tab=test-api) + 1. [Simulate an accepted recall of an Incoming SEPA Credit Transfer](https://explorer.swan.io?query=bXV0YXRpb24gTXV0YXRpb24gewogIHNpbXVsYXRlSW5jb21pbmdTZXBhQ3JlZGl0VHJhbnNmZXJBY2NlcHRlZFJlY2FsbCgKICAgIGlucHV0OiB7CiAgICAgIHJlYXNvbkNvZGU6IEJlbmVmaWNpYXJ5QWNjb3VudEluY29ycmVjdAogICAgICB0cmFuc2FjdGlvbklkOiAiJFlPVVJfVFJBTlNBQ1RJT05fSUQiCiAgICB9CiAgKSB7CiAgICAuLi4gb24gU2ltdWxhdGVJbmNvbWluZ1NlcGFDcmVkaXRUcmFuc2ZlckFjY2VwdGVkUmVjYWxsU3VjY2Vzc1BheWxvYWQgewogICAgICBfX3R5cGVuYW1lCiAgICAgIHRyYW5zYWN0aW9uSWQKICAgIH0KICAgIC4uLiBvbiBGb3JiaWRkZW5SZWplY3Rpb24gewogICAgICBfX3R5cGVuYW1lCiAgICAgIG1lc3NhZ2UKICAgIH0KICAgIC4uLiBvbiBUcmFuc2FjdGlvbk5vdEZvdW5kUmVqZWN0aW9uIHsKICAgICAgX190eXBlbmFtZQogICAgICBtZXNzYWdlCiAgICAgIHRyYW5zYWN0aW9uSWQKICAgIH0KICB9Cn0K&tab=test-api) + 1. [Simulate booking an outgoing SEPA Credit Transfer](https://explorer.swan.io?query=bXV0YXRpb24gTXV0YXRpb24gewogIHNpbXVsYXRlT3V0Z29pbmdTZXBhQ3JlZGl0VHJhbnNmZXJCb29raW5nKAogICAgaW5wdXQ6IHsgdHJhbnNhY3Rpb25JZDogIiRZT1VSX1RSQU5TQUNUSU9OX0lEIiB9CiAgKSB7CiAgICAuLi4gb24gU2ltdWxhdGVPdXRnb2luZ1NlcGFDcmVkaXRUcmFuc2ZlckJvb2tpbmdTdWNjZXNzUGF5bG9hZCB7CiAgICAgIHRyYW5zYWN0aW9uSWQKICAgIH0KICAgIC4uLiBvbiBGb3JiaWRkZW5SZWplY3Rpb24gewogICAgICBtZXNzYWdlCiAgICB9CiAgICAuLi4gb24gVHJhbnNhY3Rpb25Ob3RGb3VuZFJlamVjdGlvbiB7CiAgICAgIHRyYW5zYWN0aW9uSWQKICAgICAgbWVzc2FnZQogICAgfQogIH0KfQo%3D&tab=test-api) 1. **SEPA Direct Debit** - 1. [Simulate the reception of an outgoing SEPA Direct Debit](https://explorer.swan.io?query=bXV0YXRpb24gTXV0YXRpb24gewogIHNpbXVsYXRlT3V0Z29pbmdTZXBhRGlyZWN0RGViaXRSZWNlcHRpb24oCiAgICBpbnB1dDogewogICAgICBhbW91bnQ6IHsgdmFsdWU6ICIxMDAiLCBjdXJyZW5jeTogIkVVUiIgfQogICAgICBjcmVkaXRvcjogewogICAgICAgIGliYW46ICJERTg4NTAwMTA1MTcxNTc5ODMzNzMxIgogICAgICAgIG5hbWU6ICJSYWUgU2NobWlkdCIKICAgICAgICBpZGVudGlmaWVyOiAiREUxMUFCQzEyMzQ1NiIKICAgICAgICBhZGRyZXNzOiB7CiAgICAgICAgICBhZGRyZXNzTGluZTE6ICJBbiBkZXIgS2lyY2hlIDYiCiAgICAgICAgICBjaXR5OiAiQmVybGluIgogICAgICAgICAgY291bnRyeTogIkRFVSIKICAgICAgICAgIHBvc3RhbENvZGU6ICI5NTM1NiIKICAgICAgICB9CiAgICAgIH0KICAgICAgZGVidG9ySWJhbjogIiRTV0FOX0FDQ09VTlRfSUJBTiIKICAgICAgZXhlY3V0aW9uRGF0ZTogIjIwMjQtMDItMTBUMTY6MDA6MDAuMDAwWiIKICAgICAgbWFuZGF0ZVJlZmVyZW5jZTogIjhkYjA1OGNjNThlYTRiZTc5MmZlZjQzNzBhYTg2ZTUwIgogICAgICBtYW5kYXRlU2VxdWVuY2U6IE9uZU9mZgogICAgICBtYW5kYXRlVHlwZTogQjJCCiAgICB9CiAgKSB7CiAgICAuLi4gb24gU2ltdWxhdGVPdXRnb2luZ1NlcGFEaXJlY3REZWJpdFJlY2VwdGlvblN1Y2Nlc3NQYXlsb2FkIHsKICAgICAgdHJhbnNhY3Rpb25JZAogICAgfQogICAgLi4uIG9uIEZvcmJpZGRlblJlamVjdGlvbiB7CiAgICAgIG1lc3NhZ2UKICAgIH0KICB9Cn0K&tab=test-api) - 1. [Simulate reversing an outgoing SEPA Direct Debit](https://explorer.swan.io?query=bXV0YXRpb24gTXV0YXRpb24gewogIHNpbXVsYXRlT3V0Z29pbmdTZXBhRGlyZWN0RGViaXRSZXZlcnNlKAogICAgaW5wdXQ6IHsKICAgICAgcmVhc29uQ29kZTogTm90U3BlY2lmaWVkQnlCYW5rCiAgICAgIHRyYW5zYWN0aW9uSWQ6ICIkWU9VUl9UUkFOU0FDVElPTl9JRCIKICAgIH0KICApIHsKICAgIC4uLiBvbiBTaW11bGF0ZU91dGdvaW5nU2VwYURpcmVjdERlYml0UmV2ZXJzZVN1Y2Nlc3NQYXlsb2FkIHsKICAgICAgdHJhbnNhY3Rpb25JZAogICAgfQogICAgLi4uIG9uIEZvcmJpZGRlblJlamVjdGlvbiB7CiAgICAgIG1lc3NhZ2UKICAgIH0KICAgIC4uLiBvbiBUcmFuc2FjdGlvbk5vdEZvdW5kUmVqZWN0aW9uIHsKICAgICAgdHJhbnNhY3Rpb25JZAogICAgICBtZXNzYWdlCiAgICB9CiAgfQp9Cg%3D%3D&tab=test-api) - 1. [Simulate releasing reserved balance from a SEPA Direct Debit](https://explorer.swan.io?query=bXV0YXRpb24gTXV0YXRpb24gewogIHNpbXVsYXRlUmVsZWFzZVJlc2VydmVkQmFsYW5jZSgKICAgIGlucHV0OiB7IHRyYW5zYWN0aW9uSWQ6ICIkWU9VUl9UUkFOU0FDVElPTl9JRCIgfQogICkgewogICAgLi4uIG9uIEZvcmJpZGRlblJlamVjdGlvbiB7CiAgICAgIF9fdHlwZW5hbWUKICAgICAgbWVzc2FnZQogICAgfQogICAgLi4uIG9uIFRyYW5zYWN0aW9uTm90Rm91bmRSZWplY3Rpb24gewogICAgICBfX3R5cGVuYW1lCiAgICAgIG1lc3NhZ2UKICAgICAgdHJhbnNhY3Rpb25JZAogICAgfQogICAgLi4uIG9uIFJlbGVhc2VSZXNlcnZlZEJhbGFuY2VTdWNjZXNzUGF5bG9hZCB7CiAgICAgIF9fdHlwZW5hbWUKICAgICAgdHJhbnNhY3Rpb25JZAogICAgfQogIH0KfQo%3D&tab=test-api) + 1. [Simulate the reception of an outgoing SEPA Direct Debit](https://explorer.swan.io?query=bXV0YXRpb24gTXV0YXRpb24gewogIHNpbXVsYXRlT3V0Z29pbmdTZXBhRGlyZWN0RGViaXRSZWNlcHRpb24oCiAgICBpbnB1dDogewogICAgICBhbW91bnQ6IHsgdmFsdWU6ICIxMDAiLCBjdXJyZW5jeTogIkVVUiIgfQogICAgICBjcmVkaXRvcjogewogICAgICAgIGliYW46ICJERTg4NTAwMTA1MTcxNTc5ODMzNzMxIgogICAgICAgIG5hbWU6ICJSYWUgU2NobWlkdCIKICAgICAgICBpZGVudGlmaWVyOiAiREUxMUFCQzEyMzQ1NiIKICAgICAgICBhZGRyZXNzOiB7CiAgICAgICAgICBhZGRyZXNzTGluZTE6ICJBbiBkZXIgS2lyY2hlIDYiCiAgICAgICAgICBjaXR5OiAiQmVybGluIgogICAgICAgICAgY291bnRyeTogIkRFVSIKICAgICAgICAgIHBvc3RhbENvZGU6ICI5NTM1NiIKICAgICAgICB9CiAgICAgIH0KICAgICAgZGVidG9ySWJhbjogIiRTV0FOX0FDQ09VTlRfSUJBTiIKICAgICAgZXhlY3V0aW9uRGF0ZTogIjIwMjQtMDItMTBUMTY6MDA6MDAuMDAwWiIKICAgICAgbWFuZGF0ZVJlZmVyZW5jZTogIjhkYjA1OGNjNThlYTRiZTc5MmZlZjQzNzBhYTg2ZTUwIgogICAgICBtYW5kYXRlU2VxdWVuY2U6IE9uZU9mZgogICAgICBtYW5kYXRlVHlwZTogQjJCCiAgICB9CiAgKSB7CiAgICAuLi4gb24gU2ltdWxhdGVPdXRnb2luZ1NlcGFEaXJlY3REZWJpdFJlY2VwdGlvblN1Y2Nlc3NQYXlsb2FkIHsKICAgICAgdHJhbnNhY3Rpb25JZAogICAgfQogICAgLi4uIG9uIEZvcmJpZGRlblJlamVjdGlvbiB7CiAgICAgIG1lc3NhZ2UKICAgIH0KICB9Cn0K&tab=test-api) + 1. [Simulate reversing an outgoing SEPA Direct Debit](https://explorer.swan.io?query=bXV0YXRpb24gTXV0YXRpb24gewogIHNpbXVsYXRlT3V0Z29pbmdTZXBhRGlyZWN0RGViaXRSZXZlcnNlKAogICAgaW5wdXQ6IHsKICAgICAgcmVhc29uQ29kZTogTm90U3BlY2lmaWVkQnlCYW5rCiAgICAgIHRyYW5zYWN0aW9uSWQ6ICIkWU9VUl9UUkFOU0FDVElPTl9JRCIKICAgIH0KICApIHsKICAgIC4uLiBvbiBTaW11bGF0ZU91dGdvaW5nU2VwYURpcmVjdERlYml0UmV2ZXJzZVN1Y2Nlc3NQYXlsb2FkIHsKICAgICAgdHJhbnNhY3Rpb25JZAogICAgfQogICAgLi4uIG9uIEZvcmJpZGRlblJlamVjdGlvbiB7CiAgICAgIG1lc3NhZ2UKICAgIH0KICAgIC4uLiBvbiBUcmFuc2FjdGlvbk5vdEZvdW5kUmVqZWN0aW9uIHsKICAgICAgdHJhbnNhY3Rpb25JZAogICAgICBtZXNzYWdlCiAgICB9CiAgfQp9Cg%3D%3D&tab=test-api) + 1. [Simulate releasing reserved balance from a SEPA Direct Debit](https://explorer.swan.io?query=bXV0YXRpb24gTXV0YXRpb24gewogIHNpbXVsYXRlUmVsZWFzZVJlc2VydmVkQmFsYW5jZSgKICAgIGlucHV0OiB7IHRyYW5zYWN0aW9uSWQ6ICIkWU9VUl9UUkFOU0FDVElPTl9JRCIgfQogICkgewogICAgLi4uIG9uIEZvcmJpZGRlblJlamVjdGlvbiB7CiAgICAgIF9fdHlwZW5hbWUKICAgICAgbWVzc2FnZQogICAgfQogICAgLi4uIG9uIFRyYW5zYWN0aW9uTm90Rm91bmRSZWplY3Rpb24gewogICAgICBfX3R5cGVuYW1lCiAgICAgIG1lc3NhZ2UKICAgICAgdHJhbnNhY3Rpb25JZAogICAgfQogICAgLi4uIG9uIFJlbGVhc2VSZXNlcnZlZEJhbGFuY2VTdWNjZXNzUGF5bG9hZCB7CiAgICAgIF9fdHlwZW5hbWUKICAgICAgdHJhbnNhY3Rpb25JZAogICAgfQogIH0KfQo%3D&tab=test-api) 1. **Card payments** - 1. [Simulate creating an authorization request from a merchant](https://explorer.swan.io?query=bXV0YXRpb24gTXV0YXRpb24oJGlucHV0OiBTaW11bGF0ZU91dGdvaW5nQ2FyZEF1dGhvcml6YXRpb25JbnB1dCEpIHsKICBzaW11bGF0ZU91dGdvaW5nQ2FyZEF1dGhvcml6YXRpb24oaW5wdXQ6ICRpbnB1dCkgewogICAgLi4uIG9uIFNpbXVsYXRlT3V0Z29pbmdDYXJkQXV0aG9yaXphdGlvblN1Y2Nlc3NQYXlsb2FkIHsKICAgICAgdHJhbnNhY3Rpb25JZAogICAgfQogICAgLi4uIG9uIFNpbXVsYXRlT3V0Z29pbmdDYXJkQXV0aG9yaXphdGlvblJlamVjdFBheWxvYWQgewogICAgICB0cmFuc2FjdGlvbklkCiAgICAgIHJlYXNvbgogICAgfQogICAgLi4uIG9uIENhcmROb3RGb3VuZFJlamVjdGlvbiB7CiAgICAgIGlkCiAgICAgIG1lc3NhZ2UKICAgIH0KICAgIC4uLiBvbiBGb3JiaWRkZW5SZWplY3Rpb24gewogICAgICBtZXNzYWdlCiAgICB9CiAgfQp9Cg%3D%3D&tab=test-api&variables=ewogICJpbnB1dCI6IHsKICAgICJhbW91bnQiOiB7CiAgICAgICJ2YWx1ZSI6IDEwLAogICAgICAiY3VycmVuY3kiOiAiRVVSIgogICAgfSwKICAgICJhdXRob3JpemF0aW9uVHlwZSI6ICJDbGFzc2ljIiwKICAgICJjYXJkSWQiOiAiJFlPVVJfQ0FSRF9JRCIsCiAgICAiY2FyZFRyYW5zYWN0aW9uQ2F0ZWdvcnkiOiAiSW5TdG9yZSIsCiAgICAiY2FyZFR5cGUiOiAiVmlydHVhbCIsCiAgICAibWVyY2hhbnQiOiB7CiAgICAgICJjaXR5IjogbnVsbCwKICAgICAgImNvZGUiOiBudWxsLAogICAgICAiY291bnRyeSI6IG51bGwsCiAgICAgICJpZCI6IG51bGwsCiAgICAgICJuYW1lIjogbnVsbAogICAgfSwKICAgICJvcmlnaW5hbEFtb3VudCI6IHsKICAgICAgInZhbHVlIjogMTAsCiAgICAgICJjdXJyZW5jeSI6ICJFVVIiCiAgICB9LAogICAgIm91dGNvbWUiOiBudWxsLAogICAgInRlcm1pbmFsSWQiOiBudWxsCiAgfQp9) - 1. [Simulate reversing a card debit](https://explorer.swan.io?query=bXV0YXRpb24gTXV0YXRpb24oJGlucHV0OiBTaW11bGF0ZU91dGdvaW5nQ2FyZENyZWRpdFJldmVyc2VJbnB1dCEpIHsKICBzaW11bGF0ZU91dGdvaW5nQ2FyZENyZWRpdFJldmVyc2UoaW5wdXQ6ICRpbnB1dCkgewogICAgLi4uIG9uIFNpbXVsYXRlT3V0Z29pbmdDYXJkQ3JlZGl0UmV2ZXJzZVN1Y2Nlc3NQYXlsb2FkIHsKICAgICAgdHJhbnNhY3Rpb25JZAogICAgfQogICAgLi4uIG9uIEZvcmJpZGRlblJlamVjdGlvbiB7CiAgICAgIG1lc3NhZ2UKICAgIH0KICAgIC4uLiBvbiBUcmFuc2FjdGlvbk5vdEZvdW5kUmVqZWN0aW9uIHsKICAgICAgdHJhbnNhY3Rpb25JZAogICAgICBtZXNzYWdlCiAgICB9CiAgfQp9Cg%3D%3D&tab=test-api&variables=ewogICJpbnB1dCI6IHsKICAgICJhbW91bnQiOiB7CiAgICAgICJ2YWx1ZSI6IDEwLAogICAgICAiY3VycmVuY3kiOiAiRVVSIgogICAgfSwKICAgICJvcmlnaW5hbEFtb3VudCI6IHsKICAgICAgInZhbHVlIjogMTAsCiAgICAgICJjdXJyZW5jeSI6ICJFVVIiCiAgICB9LAogICAgInRyYW5zYWN0aW9uSWQiOiAiJFlPVVJfVFJBTlNBQ1RJT05fSUQiCiAgfQp9) - 1. [Simulate crediting a card](https://explorer.swan.io?query=bXV0YXRpb24gTXV0YXRpb24oJGlucHV0OiBTaW11bGF0ZU91dGdvaW5nQ2FyZENyZWRpdElucHV0ISkgewogIHNpbXVsYXRlT3V0Z29pbmdDYXJkQ3JlZGl0KGlucHV0OiAkaW5wdXQpIHsKICAgIC4uLiBvbiBTaW11bGF0ZU91dGdvaW5nQ2FyZENyZWRpdFN1Y2Nlc3NQYXlsb2FkIHsKICAgICAgdHJhbnNhY3Rpb25JZAogICAgfQogICAgLi4uIG9uIENhcmROb3RGb3VuZFJlamVjdGlvbiB7CiAgICAgIGlkCiAgICAgIG1lc3NhZ2UKICAgIH0KICAgIC4uLiBvbiBGb3JiaWRkZW5SZWplY3Rpb24gewogICAgICBtZXNzYWdlCiAgICB9CiAgfQp9Cg%3D%3D&tab=test-api&variables=ewogICJpbnB1dCI6IHsKICAgICJhbW91bnQiOiB7CiAgICAgICJ2YWx1ZSI6IDEwLAogICAgICAiY3VycmVuY3kiOiAiRVVSIgogICAgfSwKICAgICJjYXJkSWQiOiAiJFlPVVJfQ0FSRF9JRCIsCiAgICAiY2FyZFR5cGUiOiBudWxsLAogICAgIm9yaWdpbmFsQW1vdW50IjogewogICAgICAidmFsdWUiOiAxMCwKICAgICAgImN1cnJlbmN5IjogIkVVUiIKICAgIH0KICB9Cn0%3D) + 1. [Simulate creating an authorization request from a merchant](https://explorer.swan.io?query=bXV0YXRpb24gTXV0YXRpb24oJGlucHV0OiBTaW11bGF0ZU91dGdvaW5nQ2FyZEF1dGhvcml6YXRpb25JbnB1dCEpIHsKICBzaW11bGF0ZU91dGdvaW5nQ2FyZEF1dGhvcml6YXRpb24oaW5wdXQ6ICRpbnB1dCkgewogICAgLi4uIG9uIFNpbXVsYXRlT3V0Z29pbmdDYXJkQXV0aG9yaXphdGlvblN1Y2Nlc3NQYXlsb2FkIHsKICAgICAgdHJhbnNhY3Rpb25JZAogICAgfQogICAgLi4uIG9uIFNpbXVsYXRlT3V0Z29pbmdDYXJkQXV0aG9yaXphdGlvblJlamVjdFBheWxvYWQgewogICAgICB0cmFuc2FjdGlvbklkCiAgICAgIHJlYXNvbgogICAgfQogICAgLi4uIG9uIENhcmROb3RGb3VuZFJlamVjdGlvbiB7CiAgICAgIGlkCiAgICAgIG1lc3NhZ2UKICAgIH0KICAgIC4uLiBvbiBGb3JiaWRkZW5SZWplY3Rpb24gewogICAgICBtZXNzYWdlCiAgICB9CiAgfQp9Cg%3D%3D&tab=test-api&variables=ewogICJpbnB1dCI6IHsKICAgICJhbW91bnQiOiB7CiAgICAgICJ2YWx1ZSI6IDEwLAogICAgICAiY3VycmVuY3kiOiAiRVVSIgogICAgfSwKICAgICJhdXRob3JpemF0aW9uVHlwZSI6ICJDbGFzc2ljIiwKICAgICJjYXJkSWQiOiAiJFlPVVJfQ0FSRF9JRCIsCiAgICAiY2FyZFRyYW5zYWN0aW9uQ2F0ZWdvcnkiOiAiSW5TdG9yZSIsCiAgICAiY2FyZFR5cGUiOiAiVmlydHVhbCIsCiAgICAibWVyY2hhbnQiOiB7CiAgICAgICJjaXR5IjogbnVsbCwKICAgICAgImNvZGUiOiBudWxsLAogICAgICAiY291bnRyeSI6IG51bGwsCiAgICAgICJpZCI6IG51bGwsCiAgICAgICJuYW1lIjogbnVsbAogICAgfSwKICAgICJvcmlnaW5hbEFtb3VudCI6IHsKICAgICAgInZhbHVlIjogMTAsCiAgICAgICJjdXJyZW5jeSI6ICJFVVIiCiAgICB9LAogICAgIm91dGNvbWUiOiBudWxsLAogICAgInRlcm1pbmFsSWQiOiBudWxsCiAgfQp9) + 1. [Simulate reversing a card debit](https://explorer.swan.io?query=bXV0YXRpb24gTXV0YXRpb24oJGlucHV0OiBTaW11bGF0ZU91dGdvaW5nQ2FyZENyZWRpdFJldmVyc2VJbnB1dCEpIHsKICBzaW11bGF0ZU91dGdvaW5nQ2FyZENyZWRpdFJldmVyc2UoaW5wdXQ6ICRpbnB1dCkgewogICAgLi4uIG9uIFNpbXVsYXRlT3V0Z29pbmdDYXJkQ3JlZGl0UmV2ZXJzZVN1Y2Nlc3NQYXlsb2FkIHsKICAgICAgdHJhbnNhY3Rpb25JZAogICAgfQogICAgLi4uIG9uIEZvcmJpZGRlblJlamVjdGlvbiB7CiAgICAgIG1lc3NhZ2UKICAgIH0KICAgIC4uLiBvbiBUcmFuc2FjdGlvbk5vdEZvdW5kUmVqZWN0aW9uIHsKICAgICAgdHJhbnNhY3Rpb25JZAogICAgICBtZXNzYWdlCiAgICB9CiAgfQp9Cg%3D%3D&tab=test-api&variables=ewogICJpbnB1dCI6IHsKICAgICJhbW91bnQiOiB7CiAgICAgICJ2YWx1ZSI6IDEwLAogICAgICAiY3VycmVuY3kiOiAiRVVSIgogICAgfSwKICAgICJvcmlnaW5hbEFtb3VudCI6IHsKICAgICAgInZhbHVlIjogMTAsCiAgICAgICJjdXJyZW5jeSI6ICJFVVIiCiAgICB9LAogICAgInRyYW5zYWN0aW9uSWQiOiAiJFlPVVJfVFJBTlNBQ1RJT05fSUQiCiAgfQp9) + 1. [Simulate crediting a card](https://explorer.swan.io?query=bXV0YXRpb24gTXV0YXRpb24oJGlucHV0OiBTaW11bGF0ZU91dGdvaW5nQ2FyZENyZWRpdElucHV0ISkgewogIHNpbXVsYXRlT3V0Z29pbmdDYXJkQ3JlZGl0KGlucHV0OiAkaW5wdXQpIHsKICAgIC4uLiBvbiBTaW11bGF0ZU91dGdvaW5nQ2FyZENyZWRpdFN1Y2Nlc3NQYXlsb2FkIHsKICAgICAgdHJhbnNhY3Rpb25JZAogICAgfQogICAgLi4uIG9uIENhcmROb3RGb3VuZFJlamVjdGlvbiB7CiAgICAgIGlkCiAgICAgIG1lc3NhZ2UKICAgIH0KICAgIC4uLiBvbiBGb3JiaWRkZW5SZWplY3Rpb24gewogICAgICBtZXNzYWdlCiAgICB9CiAgfQp9Cg%3D%3D&tab=test-api&variables=ewogICJpbnB1dCI6IHsKICAgICJhbW91bnQiOiB7CiAgICAgICJ2YWx1ZSI6IDEwLAogICAgICAiY3VycmVuY3kiOiAiRVVSIgogICAgfSwKICAgICJjYXJkSWQiOiAiJFlPVVJfQ0FSRF9JRCIsCiAgICAiY2FyZFR5cGUiOiBudWxsLAogICAgIm9yaWdpbmFsQW1vdW50IjogewogICAgICAidmFsdWUiOiAxMCwKICAgICAgImN1cnJlbmN5IjogIkVVUiIKICAgIH0KICB9Cn0%3D) 1. **Billing** - 1. [Simulate generating an invoice](https://explorer.swan.io?query=bXV0YXRpb24gc2ltdWxhdGVJbnZvaWNlR2VuZXJhdGlvbiB7CiAgc2ltdWxhdGVJbnZvaWNlR2VuZXJhdGlvbihpbnB1dDogeyBhY2NvdW50SWQ6ICIkWU9VUl9BQ0NPVU5UX0lEIiB9KSB7CiAgICAuLi4gb24gU2ltdWxhdGVJbnZvaWNlR2VuZXJhdGlvblN1Y2Nlc3NQYXlsb2FkIHsKICAgICAgX190eXBlbmFtZQogICAgICBpbnZvaWNlIHsKICAgICAgICBhY2NvdW50SWQKICAgICAgICBhbW91bnQgewogICAgICAgICAgY3VycmVuY3kKICAgICAgICAgIHZhbHVlCiAgICAgICAgfQogICAgICAgIGNsb3NpbmdEYXRlCiAgICAgICAgZXhwaXJlc0F0CiAgICAgICAgaWQKICAgICAgICBjcmVhdGVkQXQKICAgICAgICBuYW1lCiAgICAgICAgb3BlbmluZ0RhdGUKICAgICAgICBzdGF0dXMKICAgICAgICB0eXBlCiAgICAgICAgdXBkYXRlZEF0CiAgICAgICAgdXJsCiAgICAgIH0KICAgIH0KICAgIC4uLiBvbiBBY2NvdW50Tm90Rm91bmRSZWplY3Rpb24gewogICAgICBpZAogICAgICBtZXNzYWdlCiAgICB9CiAgICAuLi4gb24gQWNjb3VudE5vdEVsaWdpYmxlUmVqZWN0aW9uIHsKICAgICAgX190eXBlbmFtZQogICAgICBtZXNzYWdlCiAgICB9CiAgICAuLi4gb24gRm9yYmlkZGVuUmVqZWN0aW9uIHsKICAgICAgX190eXBlbmFtZQogICAgICBtZXNzYWdlCiAgICB9CiAgfQp9Cg%3D%3D&tab=test-api) - 1. [Simulate creating a `FeesOut` transaction](https://explorer.swan.io?query=bXV0YXRpb24gc2ltdWxhdGVNYW51YWxCYW5raW5nRmVlIHsKICBzaW11bGF0ZU1hbnVhbEJhbmtpbmdGZWUoCiAgICBpbnB1dDogewogICAgICBhY2NvdW50SWQ6ICI5ZDM4ZjdhZC03YWY1LTRhOGEtYjg5NC05NWE5MDY4ZDg5YzEiCiAgICAgIHR5cGU6IENpcmN1bGF0aW9uTGV0dGVyRHJhZnRpbmdGZWUKICAgICAgZWZmZWN0aXZlRGF0ZTogIjIwMjQtMDQtMTJUMTY6Mjg6MjIuODY3WiIKICAgICAgZHVlQW1vdW50OiB7IHZhbHVlOiAiNTAiLCBjdXJyZW5jeTogIkVVUiIgfQogICAgfQogICkgewogICAgLi4uIG9uIFNpbXVsYXRlTWFudWFsQmFua2luZ0ZlZVN1Y2Nlc3NQYXlsb2FkIHsKICAgICAgaWQKICAgICAgZGViaXRlZEFtb3VudCB7CiAgICAgICAgY3VycmVuY3kKICAgICAgICB2YWx1ZQogICAgICB9CiAgICB9CiAgICAuLi4gb24gQWNjb3VudE5vdEZvdW5kUmVqZWN0aW9uIHsKICAgICAgbWVzc2FnZQogICAgICBpZAogICAgfQogICAgLi4uIG9uIEFjY291bnROb3RFbGlnaWJsZVJlamVjdGlvbiB7CiAgICAgIF9fdHlwZW5hbWUKICAgICAgbWVzc2FnZQogICAgfQogICAgLi4uIG9uIEZvcmJpZGRlblJlamVjdGlvbiB7CiAgICAgIF9fdHlwZW5hbWUKICAgICAgbWVzc2FnZQogICAgfQogIH0KfQo%3D&tab=test-api) \ No newline at end of file + 1. [Simulate generating an invoice](https://explorer.swan.io?query=bXV0YXRpb24gc2ltdWxhdGVJbnZvaWNlR2VuZXJhdGlvbiB7CiAgc2ltdWxhdGVJbnZvaWNlR2VuZXJhdGlvbihpbnB1dDogeyBhY2NvdW50SWQ6ICIkWU9VUl9BQ0NPVU5UX0lEIiB9KSB7CiAgICAuLi4gb24gU2ltdWxhdGVJbnZvaWNlR2VuZXJhdGlvblN1Y2Nlc3NQYXlsb2FkIHsKICAgICAgX190eXBlbmFtZQogICAgICBpbnZvaWNlIHsKICAgICAgICBhY2NvdW50SWQKICAgICAgICBhbW91bnQgewogICAgICAgICAgY3VycmVuY3kKICAgICAgICAgIHZhbHVlCiAgICAgICAgfQogICAgICAgIGNsb3NpbmdEYXRlCiAgICAgICAgZXhwaXJlc0F0CiAgICAgICAgaWQKICAgICAgICBjcmVhdGVkQXQKICAgICAgICBuYW1lCiAgICAgICAgb3BlbmluZ0RhdGUKICAgICAgICBzdGF0dXMKICAgICAgICB0eXBlCiAgICAgICAgdXBkYXRlZEF0CiAgICAgICAgdXJsCiAgICAgIH0KICAgIH0KICAgIC4uLiBvbiBBY2NvdW50Tm90Rm91bmRSZWplY3Rpb24gewogICAgICBpZAogICAgICBtZXNzYWdlCiAgICB9CiAgICAuLi4gb24gQWNjb3VudE5vdEVsaWdpYmxlUmVqZWN0aW9uIHsKICAgICAgX190eXBlbmFtZQogICAgICBtZXNzYWdlCiAgICB9CiAgICAuLi4gb24gRm9yYmlkZGVuUmVqZWN0aW9uIHsKICAgICAgX190eXBlbmFtZQogICAgICBtZXNzYWdlCiAgICB9CiAgfQp9Cg%3D%3D&tab=test-api) + 1. [Simulate creating a `FeesOut` transaction](https://explorer.swan.io?query=bXV0YXRpb24gc2ltdWxhdGVNYW51YWxCYW5raW5nRmVlIHsKICBzaW11bGF0ZU1hbnVhbEJhbmtpbmdGZWUoCiAgICBpbnB1dDogewogICAgICBhY2NvdW50SWQ6ICI5ZDM4ZjdhZC03YWY1LTRhOGEtYjg5NC05NWE5MDY4ZDg5YzEiCiAgICAgIHR5cGU6IENpcmN1bGF0aW9uTGV0dGVyRHJhZnRpbmdGZWUKICAgICAgZWZmZWN0aXZlRGF0ZTogIjIwMjQtMDQtMTJUMTY6Mjg6MjIuODY3WiIKICAgICAgZHVlQW1vdW50OiB7IHZhbHVlOiAiNTAiLCBjdXJyZW5jeTogIkVVUiIgfQogICAgfQogICkgewogICAgLi4uIG9uIFNpbXVsYXRlTWFudWFsQmFua2luZ0ZlZVN1Y2Nlc3NQYXlsb2FkIHsKICAgICAgaWQKICAgICAgZGViaXRlZEFtb3VudCB7CiAgICAgICAgY3VycmVuY3kKICAgICAgICB2YWx1ZQogICAgICB9CiAgICB9CiAgICAuLi4gb24gQWNjb3VudE5vdEZvdW5kUmVqZWN0aW9uIHsKICAgICAgbWVzc2FnZQogICAgICBpZAogICAgfQogICAgLi4uIG9uIEFjY291bnROb3RFbGlnaWJsZVJlamVjdGlvbiB7CiAgICAgIF9fdHlwZW5hbWUKICAgICAgbWVzc2FnZQogICAgfQogICAgLi4uIG9uIEZvcmJpZGRlblJlamVjdGlvbiB7CiAgICAgIF9fdHlwZW5hbWUKICAgICAgbWVzc2FnZQogICAgfQogIH0KfQo%3D&tab=test-api) diff --git a/docs/developers/using-api/authentication/_use-uat-immediately.mdx b/docs/developers/using-api/authentication/_use-uat-immediately.mdx index 222b57cd1c7..292fb8edebf 100644 --- a/docs/developers/using-api/authentication/_use-uat-immediately.mdx +++ b/docs/developers/using-api/authentication/_use-uat-immediately.mdx @@ -6,4 +6,4 @@ Sometimes, a phone number might have been used by a [deactivated user](../../../ Additionally, your user might have replaced the number you provided with a different number, or gone through the process to [update their phone number](https://support.swan.io/hc/en-150/articles/16332148291741-Updating-your-phone-number) with Swan. It's impossible to detect these changes when getting a user access token, so it's **crucial to verify** that the user associated with the token is the logged-in user. -::: \ No newline at end of file +::: diff --git a/docs/developers/using-api/authentication/guide-get-token-project.mdx b/docs/developers/using-api/authentication/guide-get-token-project.mdx index f9882e77b7b..955b0291439 100644 --- a/docs/developers/using-api/authentication/guide-get-token-project.mdx +++ b/docs/developers/using-api/authentication/guide-get-token-project.mdx @@ -49,4 +49,4 @@ The example response explains that you're receiving a [bearer token](./index.mdx :::danger Troubleshooting If your request returns an error, your **client secret might be invalid**. Generate a new secret on your Dashboard, then try again. -::: \ No newline at end of file +::: diff --git a/docs/developers/using-api/authentication/guide-get-token-user.mdx b/docs/developers/using-api/authentication/guide-get-token-user.mdx index 3339f96ce86..94dddb99226 100644 --- a/docs/developers/using-api/authentication/guide-get-token-user.mdx +++ b/docs/developers/using-api/authentication/guide-get-token-user.mdx @@ -1,7 +1,8 @@ --- title: Get a user access token --- -import UseImmediately from './_use-uat-immediately.mdx'; + +import UseImmediately from "./_use-uat-immediately.mdx"; # Get a user access token @@ -59,21 +60,21 @@ https://oauth.swan.io/oauth2/auth?response_type=code&client_id=$YOUR_CLIENT_ID&r #### Required parameters {#url-parameters-required} -| Parameter | Description | -| --- | --- | -| `response_type=code`
(line 6) | Initiates the authorization code flow. | -| `client_id`
(line 7) | Public identifier for the Swan app, obtained from your Dashboard in step 1. | -| `redirect_uri`
(line 8) | Specifies where the authorization server should send the user after approval, added to your Dashboard in step 1. | -| `scope=openid%20offline`
(line 9) | Defines the requested scopes for the user authorization.

  • `openid`: User will connect to Swan through the Partner
  • `offline`: Access is continuous
| -| `state`
(line 10) | A value to be retransmitted in the query string when redirecting back to you. | +| Parameter | Description | +| ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `response_type=code`
(line 6) | Initiates the authorization code flow. | +| `client_id`
(line 7) | Public identifier for the Swan app, obtained from your Dashboard in step 1. | +| `redirect_uri`
(line 8) | Specifies where the authorization server should send the user after approval, added to your Dashboard in step 1. | +| `scope=openid%20offline`
(line 9) | Defines the requested scopes for the user authorization.

  • `openid`: User will connect to Swan through the Partner
  • `offline`: Access is continuous
| +| `state`
(line 10) | A value to be retransmitted in the query string when redirecting back to you. | #### Optional parameters {#url-parameters-optional} -| Parameter | Description | -| --- | --- | -| `phoneNumber`
`firstName`
`lastName`
`birthDate`
`birthCity`
`birthCountry`
`nationality`
`language` | Avoids asking the customer to enter this information during user registration.

Required formats:
  • `birthDate`: YYYY-MM-DD *(year-month-day)*
  • `birthCountry` and `nationality`: ISO 3166-1 alpha-3 *(France = `FRA`)*
  • `language`: ISO 639-1 (alpha 2) *(Spanish = `es`)*
| -| `identificationLevel` | Indicate your preferred [identification level](../../../topics/users/identifications/index.mdx#levels-processes).

Swan **recommends choosing `auto`**, which allows Swan to direct your users to the most appropriate identification flow for their situation. | -| `onboardingId` | Avoids asking the customer to enter their own residence address and email if they provide that information during onboarding. | +| Parameter | Description | +| --------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `phoneNumber`
`firstName`
`lastName`
`birthDate`
`birthCity`
`birthCountry`
`nationality`
`language` | Avoids asking the customer to enter this information during user registration.

Required formats:
  • `birthDate`: YYYY-MM-DD _(year-month-day)_
  • `birthCountry` and `nationality`: ISO 3166-1 alpha-3 _(France = `FRA`)_
  • `language`: ISO 639-1 (alpha 2) _(Spanish = `es`)_
| +| `identificationLevel` | Indicate your preferred [identification level](../../../topics/users/identifications/index.mdx#levels-processes).

Swan **recommends choosing `auto`**, which allows Swan to direct your users to the most appropriate identification flow for their situation. | +| `onboardingId` | Avoids asking the customer to enter their own residence address and email if they provide that information during onboarding. | ### 2.2 Receive approval from user {#code-approve} diff --git a/docs/developers/using-api/authentication/guide-impersonate.mdx b/docs/developers/using-api/authentication/guide-impersonate.mdx index 8a87e301f69..1e7bdecbf0b 100644 --- a/docs/developers/using-api/authentication/guide-impersonate.mdx +++ b/docs/developers/using-api/authentication/guide-impersonate.mdx @@ -8,14 +8,12 @@ You can add information in your HTTP header to any GraphQL API request to [imper However, this method doesn't work with the OAuth 2.0 API. :::tip Approved use cases + 1. Act as the legal representative to perform [server-to-server consent](../../../topics/users/consent/index.mdx#s2s) operations. 1. Get updated or refreshed user data with a [webhook notification](../webhooks.mdx) on the `user` object. 1. Illustrate a user's problem to Partners and Swan support teams. -1. Use the Swan API on behalf of a user: - - Without a user access token, - - Without asking the user to reconnect, and - - Without using the refresh token. -::: +1. Use the Swan API on behalf of a user: - Without a user access token, - Without asking the user to reconnect, and - Without using the refresh token. + ::: ## Guide {#guide} @@ -36,4 +34,4 @@ curl --location 'https://api.swan.io/live-partner/graphql' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer $PROJECT_ACCESS_TOKEN' \ --data '{"query":"query accounts {\n user {\n firstName\n lastName\n mobilePhoneNumber\n id\n }\n \n \n}\n","variables":{}}' -``` \ No newline at end of file +``` diff --git a/docs/developers/using-api/authentication/index.mdx b/docs/developers/using-api/authentication/index.mdx index e740fd1468e..b250669d354 100644 --- a/docs/developers/using-api/authentication/index.mdx +++ b/docs/developers/using-api/authentication/index.mdx @@ -26,13 +26,13 @@ The Bearer authentication protocol, integral to OAuth 2.0, is defined in [RFC 67 You can generate two types of access tokens: **user** and **project**. You then provide your token in an HTTP authorization header, such as `Authorization: Bearer {access token}`. -| Can call →
↓ Token type | Queries | Non-sensitive
mutations | Sensitive
mutations | -| --- | --- | --- | --- | -| User access token | ✓ **Yes** ∗ | ✓ **Yes** | ✓ **Yes** | -| Project access token | ✓ **Yes** | ✓ **Yes** | ☒ No | -| Impersonate user with
project access token | ✓ **Yes** ∗ | ✓ **Yes** | ✓ **Yes** | +| Can call →
↓ Token type | Queries | Non-sensitive
mutations | Sensitive
mutations | +| ---------------------------------------------- | ----------- | --------------------------- | ----------------------- | +| User access token | ✓ **Yes** ∗ | ✓ **Yes** | ✓ **Yes** | +| Project access token | ✓ **Yes** | ✓ **Yes** | ☒ No | +| Impersonate user with
project access token | ✓ **Yes** ∗ | ✓ **Yes** | ✓ **Yes** | -∗ *User access tokens, as well as project access tokens used to impersonate a user, **can't be used** to call `transactions` queries.* +∗ _User access tokens, as well as project access tokens used to impersonate a user, **can't be used** to call `transactions` queries._ ## User access tokens {#tokens-user} @@ -100,4 +100,4 @@ If expiring user access tokens interrupt your automations, consider impersonatin - [Get a user access token](./guide-get-token-user.mdx) - [Get a project access token](./guide-get-token-project.mdx) -- [Impersonate a user](./guide-impersonate.mdx) \ No newline at end of file +- [Impersonate a user](./guide-impersonate.mdx) diff --git a/docs/developers/using-api/errors-rejections.mdx b/docs/developers/using-api/errors-rejections.mdx index b714c81c62d..6f1755baa5d 100644 --- a/docs/developers/using-api/errors-rejections.mdx +++ b/docs/developers/using-api/errors-rejections.mdx @@ -62,12 +62,15 @@ type Mutation { cancelConsent(input: CancelConsentInput!): CancelConsentPayload! } -union CancelConsentPayload = CancelConsentSuccessPayload | ConsentNotFoundRejection +union CancelConsentPayload = + | CancelConsentSuccessPayload + | ConsentNotFoundRejection type CancelConsentSuccessPayload { consent: Consent! } ``` + A canceled consent returns the `CancelConsentPayload`. However, if the consent couldn't be found, the API returns the `ConsentNotFoundRejection`. @@ -226,4 +229,4 @@ mutation MyMutation { } } } -``` \ No newline at end of file +``` diff --git a/docs/developers/using-api/pagination.mdx b/docs/developers/using-api/pagination.mdx index d794744ce2d..d7dd9b3287d 100644 --- a/docs/developers/using-api/pagination.mdx +++ b/docs/developers/using-api/pagination.mdx @@ -4,7 +4,7 @@ title: Pagination # Pagination -import PaginationDefinition from '../../topics/definitions/_pagination.mdx'; +import PaginationDefinition from "../../topics/definitions/_pagination.mdx"; @@ -24,7 +24,7 @@ They can also have other optional fields. ### Edges {#connections-edges} -Edges are *edge types*, and are GraphQL objects. +Edges are _edge types_, and are GraphQL objects. The `edges` field returns a list defined by the edge type with the following required fields: @@ -46,8 +46,8 @@ These arguments define the edges required for all connections. Note that `after` requires an **index**, which is a unique reference to a specific element in string form. Specifically, the index is a [cursor type](https://relay.dev/graphql/connections.htm#sec-Cursor). -- `first`: takes a non-negative integer `n` and loads only the *first* `n` elements from your list (maximum: 100) -- `before`: loads all elements occurring *before* the provided index +- `first`: takes a non-negative integer `n` and loads only the _first_ `n` elements from your list (maximum: 100) +- `before`: loads all elements occurring _before_ the provided index ## Examples {#examples} @@ -162,4 +162,4 @@ query PageInfo { } } } -``` \ No newline at end of file +``` diff --git a/docs/developers/using-api/payment-control.mdx b/docs/developers/using-api/payment-control.mdx index ecd4dbab739..201686dedb1 100644 --- a/docs/developers/using-api/payment-control.mdx +++ b/docs/developers/using-api/payment-control.mdx @@ -20,21 +20,21 @@ Refer to the [card payments section](../../topics/payments/cards/index.mdx) for 1. Merchant charges a Swan Mastercard. 1. Mastercard asks Swan to accept or reject the transaction. 1. Swan: - - Lets the you know about the transaction so you can accept or reject it. - - Certain types of transactions aren't sent to you for approval, such as forced debits and delay charges. - - Checks that: - - The **card and associated account exist**, - - The card hasn't reached its **spending limit**, - - There are **sufficient funds** to cover the transaction, and - - There's no **suspicion of fraud**. + - Lets the you know about the transaction so you can accept or reject it. + - Certain types of transactions aren't sent to you for approval, such as forced debits and delay charges. + - Checks that: + - The **card and associated account exist**, + - The card hasn't reached its **spending limit**, + - There are **sufficient funds** to cover the transaction, and + - There's no **suspicion of fraud**. 1. You let Swan know if you accept or reject the transaction. 1. Swan sends the decision to Mastercard. - - Both you and Swan say yes: Transaction accepted - - Both you and Swan say no: Transaction rejected - - Either you *or* Swan says no: Transaction rejected + - Both you and Swan say yes: Transaction accepted + - Both you and Swan say no: Transaction rejected + - Either you _or_ Swan says no: Transaction rejected 1. Based on the response from you and Swan, Mastercard allows the transaction or rejects it at the merchant's point of sale. -:::caution Mastercard rejections +:::caution Mastercard rejections Though rare, it's possible that Mastercard rejects a transaction even if you and Swan both accept it. ::: @@ -73,29 +73,29 @@ Note that times are written in [epoch millis](https://www.unixtimestamp.com/). ```json title="Swan payment control request" showLineNumbers { - "timeoutAt": 1646214666661, //fallback time to default response - "transactionId": "$TRANSACTION_ID", - "paymentId": "$PAYMENT_ID", - "accountId": "$ACCOUNT_ID", - "cardId": "$CARD_ID", - "digitalCardWalletProvider": "ApplePay", //digital token used for transaction; ApplePay, GooglePay, Merchant - "dateTime": 1646214656661, //time payment occured - "expirationDateTime": 1647114656661, //time authorization will be released if preauthorized amount is not used - "originalAmountValue": 10.00, - "originalAmountCurrency": "EUR", - "amountValue": 10.00, - "amountCurrency": "EUR", - "merchantId": "SWAN", - "terminalId": "156428", - "merchantCategoryCode": "0000", - "merchantName": "SWAN", - "merchantCity": "PARIS", - "merchantPostalCode": "75010", //optional information - "merchantCountry": "FRA", - "readMode": "Chip", //Chip, ContactlessChip, ContactlessStripe, Manual, ManualChip, ManualStripe, Other, PreSavedData, Stripe - "transactionCategory": "InStore", //InStore, eCommerce, eCommerceWith3DS, Withdrawal, Other - "authorizationType": "Classic", //Classic, PreAuthorization, DataRequest - "allowsPartialAuthorization": true //if amount can be modified + "timeoutAt": 1646214666661, //fallback time to default response + "transactionId": "$TRANSACTION_ID", + "paymentId": "$PAYMENT_ID", + "accountId": "$ACCOUNT_ID", + "cardId": "$CARD_ID", + "digitalCardWalletProvider": "ApplePay", //digital token used for transaction; ApplePay, GooglePay, Merchant + "dateTime": 1646214656661, //time payment occured + "expirationDateTime": 1647114656661, //time authorization will be released if preauthorized amount is not used + "originalAmountValue": 10.0, + "originalAmountCurrency": "EUR", + "amountValue": 10.0, + "amountCurrency": "EUR", + "merchantId": "SWAN", + "terminalId": "156428", + "merchantCategoryCode": "0000", + "merchantName": "SWAN", + "merchantCity": "PARIS", + "merchantPostalCode": "75010", //optional information + "merchantCountry": "FRA", + "readMode": "Chip", //Chip, ContactlessChip, ContactlessStripe, Manual, ManualChip, ManualStripe, Other, PreSavedData, Stripe + "transactionCategory": "InStore", //InStore, eCommerce, eCommerceWith3DS, Withdrawal, Other + "authorizationType": "Classic", //Classic, PreAuthorization, DataRequest + "allowsPartialAuthorization": true //if amount can be modified } ``` @@ -113,8 +113,8 @@ Provide the authorization amount in your response, which is sent to the merchant In case of timeout, or if your endpoint wasn't reachable, Swan applies your default response, which you chose when configuring payment control. ```json title="Partner response" {7} showLineNumbers -{ - "accepted": true, - "partialAuthorizationAmountValue": 10 +{ + "accepted": true, + "partialAuthorizationAmountValue": 10 } -``` \ No newline at end of file +``` diff --git a/docs/developers/using-api/webhooks.mdx b/docs/developers/using-api/webhooks.mdx index 8458dcbdfcb..9782225db54 100644 --- a/docs/developers/using-api/webhooks.mdx +++ b/docs/developers/using-api/webhooks.mdx @@ -4,7 +4,7 @@ title: Webhooks # Webhooks -import WebhooksDefinition from '../../topics/definitions/_webhooks.mdx'; +import WebhooksDefinition from "../../topics/definitions/_webhooks.mdx"; @@ -25,7 +25,7 @@ participant S as Swan participant E as External event E -->> S: Updates an API resource S ->> P: Sends request to your configured endpoints - par + par P ->> S: Returns 200 OK HTTP P ->> S: Calls query for resource end @@ -36,7 +36,7 @@ participant E as External event Webhooks operate with a near-real-time efficiency, typically delivering responses **within seconds** of the event. -It's worth clarifying that webhooks don't actively *respond* but autonomously send information to your system, potentially introducing delays of up to 10 minutes after the actual action occurs. +It's worth clarifying that webhooks don't actively _respond_ but autonomously send information to your system, potentially introducing delays of up to 10 minutes after the actual action occurs. ### Automatic retry {#overview-retry} @@ -59,7 +59,7 @@ If you have security restrictions in your infrastructure, you might need to add - 52.210.172.90 - 52.51.125.72 - 54.194.47.212 -::: + ::: ## Event handling {#event-handling} @@ -86,7 +86,7 @@ Webhook notifications contain the following information in a `POST` request: } ``` -Note that `eventType` is the action performed on which resource type, `eventId` is a unique ID for this event, and `resourceId` is a unique ID for the resource. +Note that `eventType` is the action performed on which resource type, `eventId` is a unique ID for this event, and `resourceId` is a unique ID for the resource. :::caution Limited information For security reasons, webhook notifications **include limited information**. @@ -109,11 +109,11 @@ You can manage your webhooks with the API. 1. **Remove** a webhook subscription: [`removeWebhookSubscription`](https://api-reference.swan.io/mutations/remove-webhook-subscription/). 1. **Trigger a retry** of a failed webhook: [`replayWebhookEvent`](https://api-reference.swan.io/mutations/replay-webhook-event/). 1. Subscriptions: - 1. Get a **single subscription**: [`webhookSubscription`](https://api-reference.swan.io/queries/webhook-subscription/). - 1. Get a **list of all subscriptions**: [`webhookSubscriptions`](https://api-reference.swan.io/queries/webhook-subscriptions/). + 1. Get a **single subscription**: [`webhookSubscription`](https://api-reference.swan.io/queries/webhook-subscription/). + 1. Get a **list of all subscriptions**: [`webhookSubscriptions`](https://api-reference.swan.io/queries/webhook-subscriptions/). 1. Event logs: - 1. Get **one event log**: [`webhookEventLog`](https://api-reference.swan.io/queries/webhook-event-log/). - 1. Get a **log of all events**: [`webhookEventLogs`](https://api-reference.swan.io/queries/webhook-event-logs/). + 1. Get **one event log**: [`webhookEventLog`](https://api-reference.swan.io/queries/webhook-event-log/). + 1. Get a **log of all events**: [`webhookEventLogs`](https://api-reference.swan.io/queries/webhook-event-logs/). ### Event order {#event-handling-order} @@ -150,113 +150,113 @@ The first part of the `eventType` will tell you what resources to query in an AP ### [Account holders](../../topics/onboarding/account-holders/index.mdx) {#events-account-holders} -| `eventType` | Explanation | -| --- | --- | -| `AccountHolder.Created` | Onboarding was finalized | +| `eventType` | Explanation | +| ----------------------- | ------------------------------------------ | +| `AccountHolder.Created` | Onboarding was finalized | | `AccountHolder.Updated` | Swan updated a banking verification status | ### [Account onboarding](../../topics/onboarding/index.mdx) {#events-onboarding} -| `eventType` | Explanation | -| --- | --- | -| `Onboarding.Created` | New onboarding was created either through the API or the no-code interface | -| `Onboarding.Updated` | Onboarding was either finalized, or changed because new data was added to it | -| `SupportingDocumentCollection.Created` | A new supporting document collection was created either | -| `SupportingDocumentCollection.Updated` | A supporting document collection was either finalized or updated | +| `eventType` | Explanation | +| -------------------------------------- | ---------------------------------------------------------------------------- | +| `Onboarding.Created` | New onboarding was created either through the API or the no-code interface | +| `Onboarding.Updated` | Onboarding was either finalized, or changed because new data was added to it | +| `SupportingDocumentCollection.Created` | A new supporting document collection was created either | +| `SupportingDocumentCollection.Updated` | A supporting document collection was either finalized or updated | ### [Account memberships](../../topics/accounts/memberships/index.mdx) {#events-account-memberships} -| `eventType` | Explanation | -| --- | --- | -| `AccountMembership.Bound` | User was bound with the account membership | -| `AccountMembership.Created` | New account membership was created | -| `AccountMembership.Disabled` | Account membership was disabled | -| `AccountMembership.Resumed` | Suspended account membership was resumed | -| `AccountMembership.Suspended` | Account membership was suspended | -| `AccountMembership.Updated` | Account membership was updated by an action | +| `eventType` | Explanation | +| ----------------------------- | ------------------------------------------- | +| `AccountMembership.Bound` | User was bound with the account membership | +| `AccountMembership.Created` | New account membership was created | +| `AccountMembership.Disabled` | Account membership was disabled | +| `AccountMembership.Resumed` | Suspended account membership was resumed | +| `AccountMembership.Suspended` | Account membership was suspended | +| `AccountMembership.Updated` | Account membership was updated by an action | ### [Accounts](../../topics/accounts/index.mdx) {#events-accounts} -| `eventType` | Explanation | -| --- | --- | -| `Account.Created` | Onboarding was finalized | +| `eventType` | Explanation | +| ----------------- | ----------------------------- | +| `Account.Created` | Onboarding was finalized | | `Account.Updated` | Account attribute was changed | -| `Account.Closing` | Account is closing | -| `Account.Closed` | Account was closed | +| `Account.Closing` | Account is closing | +| `Account.Closed` | Account was closed | ### [Billing](../../topics/accounts/billing/index.mdx) {#events-billing} -| `eventType` | Explanation | -| --- | --- | -| `AccountInvoice.Generated` | New invoice was generated and available for download | -| `AccountInvoice.Updated` | Invoice or refund note was updated | +| `eventType` | Explanation | +| ---------------------------- | ---------------------------------------------------------- | +| `AccountInvoice.Generated` | New invoice was generated and available for download | +| `AccountInvoice.Updated` | Invoice or refund note was updated | | `AccountStatement.Generated` | Account statement was generated and available for download | ### [Capital deposits](../../topics/capital-deposits/index.mdx) {#events-capital-deposits} -| `eventType` | Explanation | -| --- | --- | -| `CapitalDepositCaseEvent.Created` | Capital deposit case was created | -| `CapitalDepositCaseEvent.Updated` | Capital deposit case was updated | -| `CapitalDepositDocument.Created` | Document for a capital deposit case or a shareholder was created | -| `CapitalDepositDocument.Updated` | Document for a capital deposit case or a shareholder was updated | -| `Shareholder.Created` | Shareholder was created | -| `Shareholder.Updated` | Shareholder was updated | +| `eventType` | Explanation | +| --------------------------------- | ---------------------------------------------------------------- | +| `CapitalDepositCaseEvent.Created` | Capital deposit case was created | +| `CapitalDepositCaseEvent.Updated` | Capital deposit case was updated | +| `CapitalDepositDocument.Created` | Document for a capital deposit case or a shareholder was created | +| `CapitalDepositDocument.Updated` | Document for a capital deposit case or a shareholder was updated | +| `Shareholder.Created` | Shareholder was created | +| `Shareholder.Updated` | Shareholder was updated | ### [Cards](../../topics/cards/index.mdx) {#events-cards} -| `eventType` | Explanation | -| --- | --- | -| `Card.Created` | New virtual card was created | +| `eventType` | Explanation | +| -------------- | ------------------------------------------------------------------------------------------------------- | +| `Card.Created` | New virtual card was created | | `Card.Updated` | Physical card was printed, spending limit was updated, and more (doesn't not include PIN notifications) | ### [Consent](../../topics/users/consent/index.mdx) {#events-consent} -| `eventType` | Explanation | -| --- | --- | -| `Consent.Canceled` | Consent was canceled by the Partner | -| `Consent.Created` | Consent was created for a sensitive operation | -| `Consent.Expired` | Consent expired without being refused or granted | -| `Consent.Granted` | User accepted a sensitive operation | -| `Consent.Refused` | User refused a sensitive operation | -| `Consent.Started` | ConsentURL was opened | +| `eventType` | Explanation | +| ------------------ | ------------------------------------------------ | +| `Consent.Canceled` | Consent was canceled by the Partner | +| `Consent.Created` | Consent was created for a sensitive operation | +| `Consent.Expired` | Consent expired without being refused or granted | +| `Consent.Granted` | User accepted a sensitive operation | +| `Consent.Refused` | User refused a sensitive operation | +| `Consent.Started` | ConsentURL was opened | ### [Funding](../../topics/accounts/funding/index.mdx) {#events-funding} -| `eventType` | Explanation | -| --- | --- | +| `eventType` | Explanation | +| ------------------------------------------- | ------------------------------------------------- | | `FundingLimitSettingsChangeRequest.Created` | Funding limit settings change request was created | | `FundingLimitSettingsChangeRequest.Updated` | Funding limit settings change request was updated | -| `FundingSource.Created` | Funding source was created | -| `FundingSource.Updated` | Funding source was updated | +| `FundingSource.Created` | Funding source was created | +| `FundingSource.Updated` | Funding source was updated | ### [Merchants](../../topics/merchants/index.mdx) {#events-merchants} -| `eventType` | Explanation | -| --- | --- | +| `eventType` | Explanation | +| ------------------------- | ---------------------------- | | `MerchantProfile.Created` | Merchant profile was created | | `MerchantProfile.Updated` | Merchant profile was updated | ### [Payments and transactions](../../topics/payments/index.mdx) {#events-payments-transactions} -| `eventType` | Explanation | -| --- | --- | -| `ReceivedDirectDebitMandate.Created` | Received direct debit mandate was created either through the API or automatically by Swan | -| `ReceivedDirectDebitMandate.Updated` | Received direct debit mandate was updated | -| `StandingOrder.Canceled` | Standing order was canceled | -| `StandingOrder.Scheduled` | Standing order was scheduled | -| `Transaction.Booked` | Transaction was completed and will appear on the account statement | -| `Transaction.Canceled` | Upcoming direct debit was canceled | -| `Transaction.Deleted` | Scheduled direct debit was deleted | -| `Transaction.Pending` | Outgoing SEPA Credit Transfer was processed and is waiting for the next SEPA batch, a card authorization was accepted, and more | -| `Transaction.Rejected` | Transaction was rejected for compliance reasons | -| `Transaction.Released` | Transaction was released | -| `Transaction.Upcoming` | Transaction was booked for a future date | +| `eventType` | Explanation | +| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------- | +| `ReceivedDirectDebitMandate.Created` | Received direct debit mandate was created either through the API or automatically by Swan | +| `ReceivedDirectDebitMandate.Updated` | Received direct debit mandate was updated | +| `StandingOrder.Canceled` | Standing order was canceled | +| `StandingOrder.Scheduled` | Standing order was scheduled | +| `Transaction.Booked` | Transaction was completed and will appear on the account statement | +| `Transaction.Canceled` | Upcoming direct debit was canceled | +| `Transaction.Deleted` | Scheduled direct debit was deleted | +| `Transaction.Pending` | Outgoing SEPA Credit Transfer was processed and is waiting for the next SEPA batch, a card authorization was accepted, and more | +| `Transaction.Rejected` | Transaction was rejected for compliance reasons | +| `Transaction.Released` | Transaction was released | +| `Transaction.Upcoming` | Transaction was booked for a future date | ### [Users](../../topics/users/index.mdx) {#events-users} -| `eventType` | Explanation | -| --- | --- | -| `User.Joined` | User joins your project | -| `User.Updated` | User's information was updated, such as their phone number | -| `User.Deactivated` | User was deactivated

*The phone number associated with the deactivated user's Swan account can now be used to sign up a different user.* | \ No newline at end of file +| `eventType` | Explanation | +| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| `User.Joined` | User joins your project | +| `User.Updated` | User's information was updated, such as their phone number | +| `User.Deactivated` | User was deactivated

_The phone number associated with the deactivated user's Swan account can now be used to sign up a different user._ | diff --git a/docs/glossary.mdx b/docs/glossary.mdx index 94dcf3fd68d..cb88c21da07 100644 --- a/docs/glossary.mdx +++ b/docs/glossary.mdx @@ -17,30 +17,63 @@ The Swan data model depicts the relationship between key elements that make up S
Text description of data model
-
    -
  1. To open a Swan Account, your end user completes one Account Onboarding form.
  2. -
  3. Before finalizing their Account Onboarding, your end user needs to sign up as a Swan User.
  4. -
  5. After the Account Onboarding is finalized, an Account Holder is created.
  6. -
  7. A first Account is created for your user (who is now an Account Holder).
  8. -
  9. The first Account Membership to that account is created for the Account Holder, which represents their membership permissions for that Account.
  10. -
  11. One Account Holder owns one or more Accounts.
  12. -
  13. One Account invites one or more Account Memberships.
  14. -
  15. One User is invited to accept one or more Account Memberships to different Accounts.
  16. -
  17. One Account Membership issues as many Cards as required.
  18. -
  19. One Account owns one or more IBANs. The first is the main IBAN, and all others are virtual.
  20. -
  21. One Account can execute unlimited Transactions with Cards or IBANs.
  22. -
  23. One Payment contains one or more Transactions.
  24. -
+
    +
  1. + To open a Swan Account, your end user completes one{" "} + Account Onboarding form. +
  2. +
  3. + Before finalizing their Account Onboarding, your end user needs + to sign up as a Swan User. +
  4. +
  5. + After the Account Onboarding is finalized, an{" "} + Account Holder is created. +
  6. +
  7. + A first Account is created for your user (who is now an{" "} + Account Holder). +
  8. +
  9. + The first Account Membership to that account is created for the{" "} + Account Holder, which represents their membership permissions for + that Account. +
  10. +
  11. + One Account Holder owns one or more Accounts. +
  12. +
  13. + One Account invites one or more Account Memberships. +
  14. +
  15. + One User is invited to accept one or more{" "} + Account Memberships to different Accounts. +
  16. +
  17. + One Account Membership issues as many Cards as required. +
  18. +
  19. + One Account owns one or more IBANs. The first is the main{" "} + IBAN, and all others are virtual. +
  20. +
  21. + One Account can execute unlimited Transactions with{" "} + Cards or IBANs. +
  22. +
  23. + One Payment contains one or more Transactions. +
  24. +
-*** +--- ## [Account onboarding](topics/onboarding/index.mdx) {#account-onboarding} -import CompanyOnboardingDefinition from './topics/definitions/_onboarding-company.mdx'; +import CompanyOnboardingDefinition from "./topics/definitions/_onboarding-company.mdx"; -import IndividualOnboardingDefinition from './topics/definitions/_onboarding-individual.mdx'; +import IndividualOnboardingDefinition from "./topics/definitions/_onboarding-individual.mdx"; ### [Company account onboarding](topics/onboarding/company/index.mdx) {#account-onboarding-company} @@ -50,123 +83,122 @@ import IndividualOnboardingDefinition from './topics/definitions/_onboarding-ind -*** +--- ## Accounts {#accounts} -import AccountHolderDefinition from './topics/definitions/_account-holder.mdx'; +import AccountHolderDefinition from "./topics/definitions/_account-holder.mdx"; ### [Account holder](topics/onboarding/account-holders/index.mdx) {#account-holder} - +{" "} -import AccountMembershipDefinition from './topics/definitions/_account-membership.mdx'; +import AccountMembershipDefinition from "./topics/definitions/_account-membership.mdx"; ### [Account membership](topics/accounts/memberships/index.mdx) {#account-membership} - +{" "} -import AccountFundingDefinition from './topics/definitions/_account-funding.mdx'; +import AccountFundingDefinition from "./topics/definitions/_account-funding.mdx"; ### [Account funding](topics/accounts/funding/index.mdx) {#account-funding} - +{" "} -*** +--- ## API {#api} Swan's Application Programming Interface. Read more about the Swan API in the [Developers](./developers/index.mdx) section. -import PaginationDefinition from './topics/definitions/_pagination.mdx'; +import PaginationDefinition from "./topics/definitions/_pagination.mdx"; ### [Pagination](developers/using-api/pagination.mdx) {#pagination} -import RejectionsDefinition from './topics/definitions/_rejections.mdx'; +import RejectionsDefinition from "./topics/definitions/_rejections.mdx"; ### [Rejections](developers/using-api/errors-rejections.mdx) {#rejections} - -import WebhooksDefinition from './topics/definitions/_webhooks.mdx'; +import WebhooksDefinition from "./topics/definitions/_webhooks.mdx"; ### [Webhooks](developers/using-api/webhooks.mdx) {#webhooks} -*** +--- -import CapitalDepositDefinition from './topics/definitions/_capital-deposit.mdx'; +import CapitalDepositDefinition from "./topics/definitions/_capital-deposit.mdx"; ## [Capital deposit](topics/capital-deposits/index.mdx) {#capital-deposit} - +{" "} -*** +--- ## [Card](topics/cards/index.mdx) {#cards} -import VirtualCardDefinition from './topics/definitions/_cards-virtual.mdx'; +import VirtualCardDefinition from "./topics/definitions/_cards-virtual.mdx"; -import PhysicalCardDefinition from './topics/definitions/_cards-physical.mdx'; +import PhysicalCardDefinition from "./topics/definitions/_cards-physical.mdx"; -import DigitalCardDefinition from './topics/definitions/_cards-digital.mdx'; +import DigitalCardDefinition from "./topics/definitions/_cards-digital.mdx"; ### [Virtual cards](topics/cards/virtual/index.mdx) {#cards-virtual} - +{" "} ### [Physical cards](topics/cards/physical/index.mdx) {#cards-physical} - +{" "} ### [Digital cards](topics/cards/digital/index.mdx) {#cards-digital} - +{" "} -*** +--- -import IbanDefinition from './topics/definitions/_iban.mdx'; +import IbanDefinition from "./topics/definitions/_iban.mdx"; ## [IBAN](topics/accounts/ibans/index.mdx) {#ibans} -*** +--- -import LegalRepDefinition from './topics/definitions/_legal-rep.mdx'; +import LegalRepDefinition from "./topics/definitions/_legal-rep.mdx"; ## Legal representative {#legal-representative} -*** +--- -import MerchantsDefinition from './topics/definitions/_merchants.mdx'; +import MerchantsDefinition from "./topics/definitions/_merchants.mdx"; ## [Merchant](topics/merchants/index.mdx) {#merchants} -*** +--- -import PaymentDefinition from './topics/definitions/_payments.mdx'; +import PaymentDefinition from "./topics/definitions/_payments.mdx"; ## [Payment](topics/payments/index.mdx) {#payments} -import PaymentControlDefinition from './topics/definitions/_payment-control.mdx'; +import PaymentControlDefinition from "./topics/definitions/_payment-control.mdx"; ### [Payment control](developers/using-api/payment-control.mdx) {#payment-control} -import PaymentMandateDefinition from './topics/definitions/_payment-mandate.mdx'; +import PaymentMandateDefinition from "./topics/definitions/_payment-mandate.mdx"; ### Payment mandates {#payment-mandates} @@ -174,35 +206,34 @@ import PaymentMandateDefinition from './topics/definitions/_payment-mandate.mdx' Several Swan features can require payment mandates, including [account funding](./topics/accounts/funding/index.mdx#mandates), [accepting payments](./topics/merchants/sdd/index.mdx#mandates), and [received payment mandates for SEPA Direct Debit](./topics/payments/direct-debit/index.mdx#mandates). +--- -*** - -import RollingReserveDefinition from './topics/definitions/_rolling-reserve.mdx'; +import RollingReserveDefinition from "./topics/definitions/_rolling-reserve.mdx"; ### Rolling reserve {#rolling-reserve} -*** +--- -import ProjectDefinition from './topics/definitions/_projects.mdx'; +import ProjectDefinition from "./topics/definitions/_projects.mdx"; ## [Project](topics/projects/index.mdx) {#projects} -*** +--- -import SupportingDocumentCollectionDefinition from './topics/definitions/_onboarding-supporting-documents.mdx'; +import SupportingDocumentCollectionDefinition from "./topics/definitions/_onboarding-supporting-documents.mdx"; ## [Supporting document collection](topics/onboarding/documents/index.mdx) {#supporting-documents} -*** +--- -import TransactionsDefinition from './topics/definitions/_transactions.mdx'; +import TransactionsDefinition from "./topics/definitions/_transactions.mdx"; ## [Transaction](topics/payments/index.mdx#transactions) {#transactions} - \ No newline at end of file + diff --git a/docs/partnership/contact.mdx b/docs/partnership/contact.mdx index 1b103f4ba95..17c056aa8d1 100644 --- a/docs/partnership/contact.mdx +++ b/docs/partnership/contact.mdx @@ -1,8 +1,9 @@ --- title: Contact Swan --- -import PartialExample from '../_contact.mdx'; + +import PartialExample from "../_contact.mdx"; # Contact Swan - \ No newline at end of file + diff --git a/docs/partnership/document-center/company-registration/_registration-intro.mdx b/docs/partnership/document-center/company-registration/_registration-intro.mdx index 4bb191a75e1..5aa763c404b 100644 --- a/docs/partnership/document-center/company-registration/_registration-intro.mdx +++ b/docs/partnership/document-center/company-registration/_registration-intro.mdx @@ -1,5 +1,14 @@ -

When required documents are available, Swan retrieves them independently.

-

If it's not possible for Swan to retrieve a document, the following list of documents can be requested to open an account for your company registered in {props.country}.

-

Documents must have been issued within the last **three months** and be written in the **Latin alphabet**.

-
\ No newline at end of file +

+ When required documents are available, Swan retrieves them independently. +

+

+ If it's not possible for Swan to retrieve a document, the following list of + documents can be requested to open an account for your company registered in{" "} + {props.country}. +

+

+ Documents must have been issued within the last **three months** and be + written in the **Latin alphabet**. +

+ diff --git a/docs/partnership/document-center/company-registration/france.mdx b/docs/partnership/document-center/company-registration/france.mdx index dc8918de43d..bc68d70f0ca 100644 --- a/docs/partnership/document-center/company-registration/france.mdx +++ b/docs/partnership/document-center/company-registration/france.mdx @@ -4,28 +4,29 @@ title: 🇫🇷 France # Proof of registration for French companies -import DocumentsIntro from './_registration-intro.mdx'; +import DocumentsIntro from "./_registration-intro.mdx"; -| Legal entity | Proof of registration | Articles of association | Other documents | -| --- | --- | --- | --- | -| Société anonyme

Société à responsabilité limitée

Société civile professionnelle

Entreprise unipersonnelle à responsabilité limitée

Société par actions simplifiée

Société par actions simplifiée unipersonnelle

Société en nom collectif

Société en commandite par actions

Société en commandite simple | Kbis∗ certificate of incorporation | ✓ **Required**
if requested by Swan | Declaration of UBOs∗ (collected by Swan) | -| Entrepreneur individuel | One of the following documents will provide proof of registration:

  • INSEE∗ registration document
  • A document certifying registration with the Chamber of Commerce (for sole-employed carrying out a commercial activity)
  • A document certifying registration with the Trade Register (for self-employed carrying out a craft activity)
| ☒ Not required | First transfer from a bank account in Europe or the EEA∗ in the name of the client | -| Professions libérales | INSEE registration document | ☒ Not required | URSSAF∗ registration | -| Associations | JOAFE∗ journal issue | ✓ **Required**
if requested by Swan | *None* | -| Syndic de copropriété | Kbis certificate of incorporation | ✓ **Required** |
  • UBO∗ declaration (collected by Swan)
  • UBO's identity document
  • Legal representative's identity document
  • Professional card
  • Financial guarantee
  • Professional liability insurance
| -| Syndicat de copropriété | Proof of registration in the ANAH∗ register | ☒ Not required | Copy of the minutes from a general meeting during which the syndicat was designated | +| Legal entity | Proof of registration | Articles of association | Other documents | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Société anonyme

Société à responsabilité limitée

Société civile professionnelle

Entreprise unipersonnelle à responsabilité limitée

Société par actions simplifiée

Société par actions simplifiée unipersonnelle

Société en nom collectif

Société en commandite par actions

Société en commandite simple | Kbis∗ certificate of incorporation | ✓ **Required**
if requested by Swan | Declaration of UBOs∗ (collected by Swan) | +| Entrepreneur individuel | One of the following documents will provide proof of registration:

  • INSEE∗ registration document
  • A document certifying registration with the Chamber of Commerce (for sole-employed carrying out a commercial activity)
  • A document certifying registration with the Trade Register (for self-employed carrying out a craft activity)
| ☒ Not required | First transfer from a bank account in Europe or the EEA∗ in the name of the client | +| Professions libérales | INSEE registration document | ☒ Not required | URSSAF∗ registration | +| Associations | JOAFE∗ journal issue | ✓ **Required**
if requested by Swan | _None_ | +| Syndic de copropriété | Kbis certificate of incorporation | ✓ **Required** |
  • UBO∗ declaration (collected by Swan)
  • UBO's identity document
  • Legal representative's identity document
  • Professional card
  • Financial guarantee
  • Professional liability insurance
| +| Syndicat de copropriété | Proof of registration in the ANAH∗ register | ☒ Not required | Copy of the minutes from a general meeting during which the syndicat was designated | ∗ Acronyms: + - **Kbis**: K extract for a business that serves as your company's ID card - **UBO**: Ultimate Beneficial Owner - **INSEE**: Institut national de la statistique et des études économiques - - *(English: French National Institute of Statistics and Economic Studies)* + - _(English: French National Institute of Statistics and Economic Studies)_ - **URSSAF**: Unions de recouvrement des cotisations de sécurité sociale et d'allocations familiales - - *(English: Organizations for the Collection of Social Security and Family Benefit Contributions)* + - _(English: Organizations for the Collection of Social Security and Family Benefit Contributions)_ - **EEA**: European Economic Area - **JOAFE**: Journal officiel des associations et fondations d'entreprises - - *(English: Official Journal of Associations & Corporate Foundations)* + - _(English: Official Journal of Associations & Corporate Foundations)_ - **ANAH**: Agence Nationale de l'Habitat - - *(English: National Housing Agency)* \ No newline at end of file + - _(English: National Housing Agency)_ diff --git a/docs/partnership/document-center/company-registration/germany.mdx b/docs/partnership/document-center/company-registration/germany.mdx index f86117ed52c..b29924b23d3 100644 --- a/docs/partnership/document-center/company-registration/germany.mdx +++ b/docs/partnership/document-center/company-registration/germany.mdx @@ -4,17 +4,17 @@ title: 🇩🇪 Germany # Proof of registration for German companies -import DocumentsIntro from './_registration-intro.mdx'; +import DocumentsIntro from "./_registration-intro.mdx"; -| Legal entity | Proof of registration | Articles of association | Other documents | -| --- | --- | --- | --- | -| Gesellschaft bürgerlichen Rechts - GbR | *None* | ✓ **Required** | Proof that the members are either self-employed or do liberal professions | -| Offene Handelsgesselschaft - oHG

Kommanditgesellschaft - KG

Gesellschaft mit beschränkter Haftung - GmbH

GmbH & Co. KG

GmbH & Co. oHG

Unternehmergesellschaft (haftungsbeschränkt) - UG

Aktiengesellschaft - AG

Societas Europaea - kurz SE | Handelsregister- / Unternehmensregisterauszug | ✓ **Required** | Declaration of UBOs (Ultimate Beneficial Owners; collected by Swan) | -| Europäische wirtschaftliche Interessenvereinigung - EWIV | Handelsregister / Unternehmensregister | ✓ **Required** | *None* | -| Partnerschaft | Partnerschaftsregister- / Unternehmensregisterauszug | ✓ **Required** | *None* | -| Genossenschaft

Societas Cooperativa Europaea - SCE | Genossenschaftsregister- / Unternehmensregisterauszug | ✓ **Required** | Declaration of UBOs (collected by Swan) | -| Associations | Local court registration - Vereinsregisterauszug | ✓ **Required** | Declaration of UBOs (collected by Swan) | -| Freiberufler - Liberal professionals | *None* | ☒ Not required | Proof of exercise of the activity (chamber membership, proof of qualification, tax registration, a bill, an invoice…) | -| Selbständig / Gewerblich tätig - Self employed | Proof of registration at the local administrative office - Gewerbeschein | ☒ Not required | Proof of exercise of the activity (a bill, an invoice…) | \ No newline at end of file +| Legal entity | Proof of registration | Articles of association | Other documents | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | ----------------------- | --------------------------------------------------------------------------------------------------------------------- | +| Gesellschaft bürgerlichen Rechts - GbR | _None_ | ✓ **Required** | Proof that the members are either self-employed or do liberal professions | +| Offene Handelsgesselschaft - oHG

Kommanditgesellschaft - KG

Gesellschaft mit beschränkter Haftung - GmbH

GmbH & Co. KG

GmbH & Co. oHG

Unternehmergesellschaft (haftungsbeschränkt) - UG

Aktiengesellschaft - AG

Societas Europaea - kurz SE | Handelsregister- / Unternehmensregisterauszug | ✓ **Required** | Declaration of UBOs (Ultimate Beneficial Owners; collected by Swan) | +| Europäische wirtschaftliche Interessenvereinigung - EWIV | Handelsregister / Unternehmensregister | ✓ **Required** | _None_ | +| Partnerschaft | Partnerschaftsregister- / Unternehmensregisterauszug | ✓ **Required** | _None_ | +| Genossenschaft

Societas Cooperativa Europaea - SCE | Genossenschaftsregister- / Unternehmensregisterauszug | ✓ **Required** | Declaration of UBOs (collected by Swan) | +| Associations | Local court registration - Vereinsregisterauszug | ✓ **Required** | Declaration of UBOs (collected by Swan) | +| Freiberufler - Liberal professionals | _None_ | ☒ Not required | Proof of exercise of the activity (chamber membership, proof of qualification, tax registration, a bill, an invoice…) | +| Selbständig / Gewerblich tätig - Self employed | Proof of registration at the local administrative office - Gewerbeschein | ☒ Not required | Proof of exercise of the activity (a bill, an invoice…) | diff --git a/docs/partnership/document-center/company-registration/spain.mdx b/docs/partnership/document-center/company-registration/spain.mdx index 6359ed1a55e..0d1bc445e58 100644 --- a/docs/partnership/document-center/company-registration/spain.mdx +++ b/docs/partnership/document-center/company-registration/spain.mdx @@ -4,16 +4,16 @@ title: 🇪🇸 Spain # Proof of registration for Spanish companies -import DocumentsIntro from './_registration-intro.mdx'; +import DocumentsIntro from "./_registration-intro.mdx"; -| Legal entity | Proof of registration | Articles of association | Other documents | -| --- | --- | --- | --- | -| Sociedad Anónima

Sociedad de Responsabilidad Limitada

Sociedad Colectiva

Sociedad Comanditaria Simple

Sociedad Comanditaria por Acciones | Certificación de inscripción en el Registro Mercantil Provincial | ✓ **Required**
if requested by Swan | Legal representative's identity document (or document of the person opening the account for the entity) | -| Sociedad Cooperativa | Certificación de inscripción en el Registro de Sociedades Cooperativas del Ministerio de Trabajo y Economía Social (o de la comunidad autónoma) | ✓ **Required**
if requested by Swan | Legal representative's identity document (or document of the person opening the account for the entity) | -| Sociedad Civil

Comunidad de Propietarios | Modelo 036 or Tarjeta Acreditativa de NIF | ✓ **Required**
if requested by Swan | Legal representative's identity document (or document of the person opening the account for the entity) | -| Empresario Individual (Autónomo)

Profesionales liberales| Modelo 036 or Tarjeta Acreditativa de NIF | ☒ Not required |
  • Identity document, *and*
  • First transfer from a bank account in Europe or the European Economic Area (EEA) in the name of the client
| -| Emprendedor de Responsabilidad Limitada | Certificación de inscripción en el Registro Mercantil Provincial | ☒ Not required | Legal representative's identity document (or document of the person opening the account for the entity) | -| Sociedades Profesionales | Certificación de inscripción en el Registro Mercantil Provincial | ✓ **Required**
if requested by Swan |
  • Certificación de inscripción en el Registro de Sociedades Profesionales del Colegio Profesional, *and*
  • Legal representative's identity document (or document of the person opening the account for the entity)
| -| Asociaciones | Certificación de inscripción en el Registro de Asociaciones Autonómico o en el Registro Nacional de Asociaciones | ✓ **Required**
if requested by Swan |
  • Acta Fundacional, *and*
  • Identity documents for all members, *and*
  • Identity document for the person opening the account for the entity
| \ No newline at end of file +| Legal entity | Proof of registration | Articles of association | Other documents | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Sociedad Anónima

Sociedad de Responsabilidad Limitada

Sociedad Colectiva

Sociedad Comanditaria Simple

Sociedad Comanditaria por Acciones | Certificación de inscripción en el Registro Mercantil Provincial | ✓ **Required**
if requested by Swan | Legal representative's identity document (or document of the person opening the account for the entity) | +| Sociedad Cooperativa | Certificación de inscripción en el Registro de Sociedades Cooperativas del Ministerio de Trabajo y Economía Social (o de la comunidad autónoma) | ✓ **Required**
if requested by Swan | Legal representative's identity document (or document of the person opening the account for the entity) | +| Sociedad Civil

Comunidad de Propietarios | Modelo 036 or Tarjeta Acreditativa de NIF | ✓ **Required**
if requested by Swan | Legal representative's identity document (or document of the person opening the account for the entity) | +| Empresario Individual (Autónomo)

Profesionales liberales | Modelo 036 or Tarjeta Acreditativa de NIF | ☒ Not required |
  • Identity document, _and_
  • First transfer from a bank account in Europe or the European Economic Area (EEA) in the name of the client
| +| Emprendedor de Responsabilidad Limitada | Certificación de inscripción en el Registro Mercantil Provincial | ☒ Not required | Legal representative's identity document (or document of the person opening the account for the entity) | +| Sociedades Profesionales | Certificación de inscripción en el Registro Mercantil Provincial | ✓ **Required**
if requested by Swan |
  • Certificación de inscripción en el Registro de Sociedades Profesionales del Colegio Profesional, _and_
  • Legal representative's identity document (or document of the person opening the account for the entity)
| +| Asociaciones | Certificación de inscripción en el Registro de Asociaciones Autonómico o en el Registro Nacional de Asociaciones | ✓ **Required**
if requested by Swan |
  • Acta Fundacional, _and_
  • Identity documents for all members, _and_
  • Identity document for the person opening the account for the entity
| diff --git a/docs/partnership/document-center/index.mdx b/docs/partnership/document-center/index.mdx index 8e14df0224b..35c88970bbc 100644 --- a/docs/partnership/document-center/index.mdx +++ b/docs/partnership/document-center/index.mdx @@ -17,4 +17,4 @@ Please send an email to docs@swan.io if you have feedback about how to make the - 🇫🇷 [France](./company-registration/france.mdx) - 🇩🇪 [Germany](./company-registration/germany.mdx) -- 🇪🇸 [Spain](./company-registration/spain.mdx) \ No newline at end of file +- 🇪🇸 [Spain](./company-registration/spain.mdx) diff --git a/docs/partnership/index.mdx b/docs/partnership/index.mdx index 398f302b0c3..19917cf31fe 100644 --- a/docs/partnership/index.mdx +++ b/docs/partnership/index.mdx @@ -12,19 +12,19 @@ Obtaining a license to offer banking services, however, is tedious, time-consumi ## Swan's license {#license} Swan holds an [e-money license](https://www.regafi.fr/spip.php?page=results&type=advanced&id_secteur=3&lang=en&denomination=Swan&siren=853827103&cib=17328&bic=&nom=&siren_agent=&num=&cat=0&retrait=0) valid across the [European Economic Area](./overview/country-coverage.mdx) (EEA) overseen by France's [Autorité de Contrôle Prudentiel et Résolution](https://acpr.banque-france.fr/en) (ACPR). -In English, ACPR translates to *Prudential Supervision and Resolution Authority*. +In English, ACPR translates to _Prudential Supervision and Resolution Authority_. Because Swan holds the license, **Swan assumes responsibility for all sensitive and risky banking operations**. While many operations can be delegated to you, some are always performed by Swan for regulatory purposes. -For example, consent is *always* required for [sensitive operations](../topics/users/consent/index.mdx#sensitive), and consent *always* involves Swan in a Live environment. +For example, consent is _always_ required for [sensitive operations](../topics/users/consent/index.mdx#sensitive), and consent _always_ involves Swan in a Live environment. ## Your legal status {#legal-status} Your legal status while partnering with Swan depends on the country in which your company is based: in France, or anywhere else in the European Economic Area (EEA). -| Location | Status | -| --- | --- | -| 🇫🇷 France | You'll operate as a **Registered Swan Intermediary**.

Learn more in the [dedicated guide for France](./overview/guide-orias.mdx). | +| Location | Status | +| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 🇫🇷 France | You'll operate as a **Registered Swan Intermediary**.

Learn more in the [dedicated guide for France](./overview/guide-orias.mdx). | | All other EEA countries | You'll operate as a **Commercial Agent of Swan**.

You don't have to complete a regulatory process to become a Commercial Agent. Swan handles it once you go Live. | ## Three-party partnership model {#model} @@ -95,4 +95,4 @@ To learn more about how Swan handles fees and your options to charge your users, If you are preparing another project or license application and wish to **cite Swan in communications** to partners, regulators, investors, and more, you must first submit materials that mention Swan to receive Swan's validation. -**Send an email** to compliance@swan.io with all **extracts of your presentation** that mention Swan (and only these extracts). \ No newline at end of file +**Send an email** to compliance@swan.io with all **extracts of your presentation** that mention Swan (and only these extracts). diff --git a/docs/partnership/overview/country-coverage.mdx b/docs/partnership/overview/country-coverage.mdx index 6a8d358f22c..d594f9ddf3a 100644 --- a/docs/partnership/overview/country-coverage.mdx +++ b/docs/partnership/overview/country-coverage.mdx @@ -1,8 +1,9 @@ --- title: Country coverage --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; # Country coverage @@ -14,27 +15,61 @@ The availability of Swan's features depends on local regulations and the presenc
-

Includes both company and individual accounts.

- Map of Swan coverage for individual and company accounts +

+ Includes both company and individual accounts. +

+ Map of Swan coverage for individual and company accounts
-

Includes virtual and physical cards.

- Map of Swan coverage for cards -
+

+ Includes virtual and physical cards. +

+ Map of Swan coverage for cards +
-

Swan offers IBANs beginning with FR, DE, NL, and ES.

- Map of Swan coverage for IBANs -
+

+ Swan offers IBANs beginning with FR, DE,{" "} + NL, and ES. +

+ Map of Swan coverage for IBANs +
-

Digitized versions of virtual and physical cards used with Apple Pay and GooglePay.

- Map of Swan coverage for digital Wallets (Apple Pay and Google Pay) -
+

+ Digitized versions of virtual and physical cards used with{" "} + Apple Pay and GooglePay. +

+ Map of Swan coverage for digital Wallets (Apple Pay and Google Pay) +
@@ -48,217 +83,289 @@ Overview of key feature availability in countries Swan serves. Key features - 🇦🇹 Austria + + 🇦🇹 Austria + 🔐 Accounts 💳 Cards 🍏🤖 Digital Wallets - 🇧🇪 Belgium + + 🇧🇪 Belgium + 🔐 Accounts 💳 Cards 🍏🤖 Digital Wallets - 🇧🇬 Bulgaria + + 🇧🇬 Bulgaria + 🔐 Accounts - 🇭🇷 Croatia + + 🇭🇷 Croatia + 🔐 Accounts - 🇨🇾 Cyprus + + 🇨🇾 Cyprus + 🔐 Accounts 💳 Cards 🍏 Digital Wallets (Apple Pay only) - 🇨🇿 Czechia + + 🇨🇿 Czechia + 🔐 Accounts - 🇩🇰 Denmark + + 🇩🇰 Denmark + 🔐 Accounts - 🇪🇪 Estonia + + 🇪🇪 Estonia + 🔐 Accounts 💳 Cards 🍏🤖 Digital Wallets - 🇫🇮 Finland + + 🇫🇮 Finland + 🔐 Accounts 💳 Cards 🍏🤖 Digital Wallets - 🇫🇷 France + + 🇫🇷 France + 🔐 Accounts 💳 Cards - 🌐 Local FR IBANs + + 🌐 Local FR IBANs + 🍏🤖 Digital Wallets - 🇩🇪 Germany + + 🇩🇪 Germany + 🔐 Accounts 💳 Cards - 🌐 Local DE IBANs + + 🌐 Local DE IBANs + 🍏🤖 Digital Wallets - 🇬🇷 Greece + + 🇬🇷 Greece + 🔐 Accounts 💳 Cards 🍏🤖 Digital Wallets - 🇭🇺 Hungary + + 🇭🇺 Hungary + 🔐 Accounts - 🇮🇸 Iceland + + 🇮🇸 Iceland + 🔐 Accounts - 🇮🇪 Ireland + + 🇮🇪 Ireland + 🔐 Accounts 💳 Cards 🍏🤖 Digital Wallets - 🇮🇹 Italy + + 🇮🇹 Italy + 🔐 Accounts 💳 Cards 🍏🤖 Digital Wallets - 🇱🇻 Latvia + + 🇱🇻 Latvia + 🔐 Accounts 💳 Cards 🍏🤖 Digital Wallets - 🇱🇮 Liechtenstein + + 🇱🇮 Liechtenstein + 🔐 Accounts - 🇱🇹 Lithuania + + 🇱🇹 Lithuania + 🔐 Accounts 💳 Cards 🍏🤖 Digital Wallets - 🇱🇺 Luxembourg + + 🇱🇺 Luxembourg + 🔐 Accounts 💳 Cards 🍏 Digital Wallets (Apple Pay only) - 🇲🇹 Malta + + 🇲🇹 Malta + 🔐 Accounts 💳 Cards 🍏 Digital Wallets (Apple Pay only) - 🇲🇨 Monaco + + 🇲🇨 Monaco + 🔐 Accounts 💳 Cards - 🌐 Local FR IBANs + + 🌐 Local FR IBANs + 🍏🤖 Digital Wallets - 🇳🇱 Netherlands + + 🇳🇱 Netherlands + 🔐 Accounts 💳 Cards - 🌐 Local NL IBANs + + 🌐 Local NL IBANs + 🍏🤖 Digital Wallets - 🇳🇴 Norway + + 🇳🇴 Norway + 🔐 Accounts - 🇵🇱 Poland + + 🇵🇱 Poland + 🔐 Accounts - 🇵🇹 Portugal + + 🇵🇹 Portugal + 🔐 Accounts 💳 Cards 🍏🤖 Digital Wallets - 🇷🇴 Romania + + 🇷🇴 Romania + 🔐 Accounts - 🇸🇰 Slovakia + + 🇸🇰 Slovakia + 🔐 Accounts 💳 Cards 🍏🤖 Digital Wallets - 🇸🇮 Slovenia + + 🇸🇮 Slovenia + 🔐 Accounts 💳 Cards 🍏 Digital Wallets (Apple Pay only) - 🇪🇸 Spain + + 🇪🇸 Spain + 🔐 Accounts 💳 Cards - 🌐 Local ES IBANs + + 🌐 Local ES IBANs + 🍏🤖 Digital Wallets - 🇸🇪 Sweden + + 🇸🇪 Sweden + 🔐 Accounts @@ -272,4 +379,4 @@ Overview of key feature availability in countries Swan serves. **Dutch**, **English**, **French**, **Finnish**, **German**, **Italian**, **Portuguese**, and **Spanish**. The end-user [**Support Center**](https://support.swan.io/hc/en-150) features these languages as well. -This **documentation**, the **API**, and the **Dashboard** are only available in **English**. \ No newline at end of file +This **documentation**, the **API**, and the **Dashboard** are only available in **English**. diff --git a/docs/partnership/overview/guide-orias.mdx b/docs/partnership/overview/guide-orias.mdx index c175b379099..97f4dfd3b08 100644 --- a/docs/partnership/overview/guide-orias.mdx +++ b/docs/partnership/overview/guide-orias.mdx @@ -1,8 +1,9 @@ --- title: 🇫🇷 Register with Orias --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; # 🇫🇷 Register with Orias @@ -14,8 +15,8 @@ Only companies legally **based in France** need to register with Orias. Companies based in France operate with the [legal status](../index.mdx#legal-status) **Registered Swan Intermediary**. -This means you'll become an **MOBSP**, or *Mandataire en Opération de Banque et en Service de Paiement*. -In English, this translates roughly to *Authorized Bank and Payment Services Intermediaries*. +This means you'll become an **MOBSP**, or _Mandataire en Opération de Banque et en Service de Paiement_. +In English, this translates roughly to _Authorized Bank and Payment Services Intermediaries_. As an MOBSP, you'll be regulated by **Orias**, an association that approves and monitors insurance, banking, and investment intermediaries in France. In order to partner with Swan, **you must apply to Orias**. @@ -30,10 +31,10 @@ Send an email to support@swan.io if you have questions about the process. ### 1.1 Get information from Swan {#info-1} -After signing your partnership contract with Swan, complete the following steps to obtain your *attestation de mandat*, or a mandate certificate. +After signing your partnership contract with Swan, complete the following steps to obtain your _attestation de mandat_, or a mandate certificate. 1. Send an email to compliance@swan.io that includes your **legal name** and **SIREN** number. -1. Swan will reply with your *attestation de mandat* (mandate certificate). You'll need your certificate for step 3.3. +1. Swan will reply with your _attestation de mandat_ (mandate certificate). You'll need your certificate for step 3.3. ### 1.2 Get valid supporting documents {#info-2} @@ -67,12 +68,24 @@ You'll be redirected to the registration form.
- Screenshot of Orias website leading to register in French + Screenshot of Orias website leading to register in French
- Screenshot of Orias website leading to register in English + Screenshot of Orias website leading to register in English
@@ -80,8 +93,8 @@ You'll be redirected to the registration form. ### 2.2 Enter required information {#signup-2} 1. Enter your **SIREN number**. - - SIREN stands for Système d'identification du répertoire des entreprises, and roughly translates to *Business Directory Identification System* in English. -1. Enter **information about your company**. Make sure to register as a **personne morale** / **legal entity**. + - SIREN stands for Système d'identification du répertoire des entreprises, and roughly translates to _Business Directory Identification System_ in English. +1. Enter **information about your company**. Make sure to register as a **personne morale** / **legal entity**. 1. Enter information about your [**legal representative**](../../glossary.mdx#legal-representative). 1. Enter your **legal representative's contact details**. 1. Enter your **company's contact details**, including a website if you have one. @@ -91,12 +104,22 @@ You'll be redirected to the registration form.
- Screenshot of Orias registration form in French + Screenshot of Orias registration form in French
- Screenshot of Orias registration form in English + Screenshot of Orias registration form in English
@@ -124,7 +147,7 @@ From this point forward, the Orias website is only available in French. 1. Click **Nouvelle inscription** (New registration) to start your registration. A form appears. 1. Choose **Activité IOB**. 1. Then, choose **Mandataire non-exclusif en opérations de banque et en services de paiement (MOBSP)**. - - The menu with MOBSP changes based on the type of activity selected: IAS, IOB, or Intermédiaries en finance. If you don't see MOBSP, confirm you selected Activité IOB in #2. + - The menu with MOBSP changes based on the type of activity selected: IAS, IOB, or Intermédiaries en finance. If you don't see MOBSP, confirm you selected Activité IOB in #2. 1. Click **Soumettre** (Submit). ![Image of Orias account to click nouvelle inscription](../../images/partnership/orias/orias-new-inscription.png) @@ -132,10 +155,10 @@ From this point forward, the Orias website is only available in French. ### 3.2 Provide additional information {#registration-2} 1. Notice the box specifying that you're completing registration as a **Mandataire non-exclusif en opérations de banque et en services de paiement**. - - If any other type of registration is specified, use your browser's back button to return to the previous page and try again. -1. For the first question, choose the answer **Je déclare que l'on ne me confie pas de fonds**, meaning *I declare that no funds are entrusted to me*. -1. For the second question, choose the answer **Accessoire**, which means it's your *secondary activity*, letting Orias know that financial services aren't your company's primary activity. -1. For the third question, choose the answer **Oui**, which means *Yes*, letting Orias know that your company offers credit (or other banking and payment services) only as a secondary service. + - If any other type of registration is specified, use your browser's back button to return to the previous page and try again. +1. For the first question, choose the answer **Je déclare que l'on ne me confie pas de fonds**, meaning _I declare that no funds are entrusted to me_. +1. For the second question, choose the answer **Accessoire**, which means it's your _secondary activity_, letting Orias know that financial services aren't your company's primary activity. +1. For the third question, choose the answer **Oui**, which means _Yes_, letting Orias know that your company offers credit (or other banking and payment services) only as a secondary service. 1. Click **Aller à l'étape « Pièces justificatives »** (Go to the "Supporting documents" step). ![Image of Orias account additional information step](../../images/partnership/orias/orias-additional-information.png) @@ -143,8 +166,8 @@ From this point forward, the Orias website is only available in French. ### 3.3 Provide supporting documents {#registration-3} 1. Upload your **Kbis**. -1. Upload your **Attestation mandat**, which is the *mandate certificate* from [step 1.1](#info-1). -1. Upload your **Capacité professionnelle pour *vous* (Niveau I IOBSP)**, which is your proof of professional aptitude from [step 1.2](#info-2). Please refer back to step 1.2 if you need help obtaining a compliant professional aptitude document. +1. Upload your **Attestation mandat**, which is the _mandate certificate_ from [step 1.1](#info-1). +1. Upload your **Capacité professionnelle pour _vous_ (Niveau I IOBSP)**, which is your proof of professional aptitude from [step 1.2](#info-2). Please refer back to step 1.2 if you need help obtaining a compliant professional aptitude document. 1. Click **Aller à l'étape suivante** (Go to the next step). ![Image of Orias registration supporting documents step](../../images/partnership/orias/orias-supporting-documents.png) @@ -163,7 +186,7 @@ The final step is to pay for your registration. ## Step 4: Swan registers you as an MOBSP {#swan-mobsp} -After you send Swan your Orias registration number by email, **Swan registers you** as a *Mandataire non-exclusif en opérations de banque et en services de paiement (MOBSP)*. +After you send Swan your Orias registration number by email, **Swan registers you** as a _Mandataire non-exclusif en opérations de banque et en services de paiement (MOBSP)_. Refer to the [introduction](#introduction) to review what MOBSP entails. @@ -183,4 +206,4 @@ Add something similar to the following example to your website footer, legal men The example is in French, and you should include it in French as well. English is optional. -> *MyBrand, société immatriculée au R.C.S de XXXX sous le numéro XXXXX, et inscrit au Registre unique des Intermédiaires en Assurance, Banque et Finance sous le numéro d’immatriculation XXXXX en qualité de Mandataire non exclusif en opérations de banque et en services de paiement.* \ No newline at end of file +> _MyBrand, société immatriculée au R.C.S de XXXX sous le numéro XXXXX, et inscrit au Registre unique des Intermédiaires en Assurance, Banque et Finance sous le numéro d’immatriculation XXXXX en qualité de Mandataire non exclusif en opérations de banque et en services de paiement._ diff --git a/docs/partnership/overview/protections.mdx b/docs/partnership/overview/protections.mdx index d1650b74a38..5eb3bf74013 100644 --- a/docs/partnership/overview/protections.mdx +++ b/docs/partnership/overview/protections.mdx @@ -24,14 +24,14 @@ All funds belonging to Swan account holders are safeguarded in an account at a b ### Layer 2: Crisis operator {#protecting-funds-operator} In the case that Swan's safeguarding bank goes bankrupt, the [Fonds de Garantie des Dépôts et de Résolution (FGDR)](https://www.garantiedesdepots.fr/en) **protects each account holder for up to €100 000** (one hundred thousand euros). -In English, FGDR translates to *Deposit Guarantee and Resolution Fund*, and it's a French fund that extends to all accounts at French e-money institutions. +In English, FGDR translates to _Deposit Guarantee and Resolution Fund_, and it's a French fund that extends to all accounts at French e-money institutions. - The FGDR applies to individuals and companies (natural and legal persons) with a few exceptions (for example, banks as legal persons). - If Swan's safeguarding bank goes bankrupt, Swan's ledger will be the single source of truth and all account holders, regardless of nationality, will be reimbursed by the FGDR. ## Protecting and storing user data {#data} -Because Swan is a financial institution supervised by the *Banque de France*, Swan has a regulatory requirement to [verify the identity of all users](../../topics/users/identifications/index.mdx). +Because Swan is a financial institution supervised by the _Banque de France_, Swan has a regulatory requirement to [verify the identity of all users](../../topics/users/identifications/index.mdx). Your users often verify their identity through a short video of their face, which is a great way for Swan to prevent fraud. Swan processes and stores these videos with great care. @@ -109,15 +109,18 @@ Ag== =LEk2 -----END PGP PUBLIC KEY BLOCK----- + :::tip Please file a report if... + 1. You think you discovered a potential security vulnerability in Swan's APIs or services. 1. You are unsure how a vulnerability affects Swan's APIs or services. 1. You think you discovered a vulnerability in another project that Swan depends on. -::: + ::: :::danger Please don't file a report if... + 1. You need help fine-tuning Swan components for security. 1. Your issue isn't security related. -::: \ No newline at end of file + ::: diff --git a/docs/partnership/overview/rules-regulations.mdx b/docs/partnership/overview/rules-regulations.mdx index 9a035dc2b85..1f620689b70 100644 --- a/docs/partnership/overview/rules-regulations.mdx +++ b/docs/partnership/overview/rules-regulations.mdx @@ -18,10 +18,10 @@ Communicate the following information to your users: 1. Provide a company **privacy policy**. 1. Tell your users that their **data will be shared with Swan**. 1. Share your **company's legal status**. Provide the following information in your footer and legal notices: - - Your company's [legal status](../index.mdx#legal-status) - - If in France, your Orias registration number - - Legal name as provided on your official paperwork - - Postal address + - Your company's [legal status](../index.mdx#legal-status) + - If in France, your Orias registration number + - Legal name as provided on your official paperwork + - Postal address ## Can't → Partner restrictions {#restrictions} @@ -31,9 +31,9 @@ As a Swan Partner, you **can't** do the following: 1. Regulations stipulate that companies with your legal status **can't call yourselves banks or neobanks**. 1. You **can't sell payment services**. Only Swan is allowed to sell payment services. 1. You **can't call your offer a “bank account”**. You may, however, use the wording "payment account". Please make sure not to choose wording that suggests you are the entity providing payment accounts because that's Swan's responsibility. Consider the following naming suggestions: - - `MyBrand Account` - - `MyBrand Premium` - - `MyBrand Wallet` + - `MyBrand Account` + - `MyBrand Premium` + - `MyBrand Wallet` ## Can → Partner capabilities {#capabilities} @@ -49,7 +49,7 @@ As a Swan Partner, you **can**: ![Image of Dashboard consent notification](../../images/partnership/offer-example.png) -1. You can brand banking services entirely as your own, without having to mention Swan as a partner. *(Note that if the product seems unclear about which entity is regulated, you might be asked to mention Swan.)* +1. You can brand banking services entirely as your own, without having to mention Swan as a partner. _(Note that if the product seems unclear about which entity is regulated, you might be asked to mention Swan.)_ 1. You can provide details of banking services on your own website. 1. The example provides a correct mention of data protection policies. 1. You can offer banking services directly on your platform. @@ -70,17 +70,17 @@ This is a risk-based decision: Swan won't work with industries that might pose a Swan restricts activities in the following categories: -| Category | Restricted activities | -| --- | --- | -| Substance-related activities |
  • Tobacco culture and products
  • Manufacture of tobacco products
  • Marijuana culture and illicit marijuana products
| -| Financial and regulatory risk activities |
  • Shell banks
  • Trust & off-shore company service providers
  • Company domiciliation businesses
  • Non-licensed money service businesses and payment services providers
  • Crypto-assets trading, exchange and custody platforms
  • Crypto-currency mixing activity
  • Money remittance
  • Currency dealer & exchangers, FOREX
| -| Industries with a high environmental impact |
  • Extractive industries such as oil, gas, and coal, including the extraction, processing, commerce, and other related activities
  • Nuclear material and power generation
  • Palm oil production
  • Polluting or dangerous industry chemicals
| -| Controversial or sensitive activities |
  • Weapons and defense materials providers
  • Prostitution and escort services
  • Adult entertainment (pornography or similar activities)
| -| Gaming and entertainment |
  • Gambling industry, including video games classified as online gambling
  • Game publisher of online games that permit value transfer between gamers
  • Online bartering services
| -| Other |
  • Religious activities
  • Precious stones, gems, and jewels
| +| Category | Restricted activities | +| ------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Substance-related activities |
  • Tobacco culture and products
  • Manufacture of tobacco products
  • Marijuana culture and illicit marijuana products
| +| Financial and regulatory risk activities |
  • Shell banks
  • Trust & off-shore company service providers
  • Company domiciliation businesses
  • Non-licensed money service businesses and payment services providers
  • Crypto-assets trading, exchange and custody platforms
  • Crypto-currency mixing activity
  • Money remittance
  • Currency dealer & exchangers, FOREX
| +| Industries with a high environmental impact |
  • Extractive industries such as oil, gas, and coal, including the extraction, processing, commerce, and other related activities
  • Nuclear material and power generation
  • Palm oil production
  • Polluting or dangerous industry chemicals
| +| Controversial or sensitive activities |
  • Weapons and defense materials providers
  • Prostitution and escort services
  • Adult entertainment (pornography or similar activities)
| +| Gaming and entertainment |
  • Gambling industry, including video games classified as online gambling
  • Game publisher of online games that permit value transfer between gamers
  • Online bartering services
| +| Other |
  • Religious activities
  • Precious stones, gems, and jewels
| :::info Eligibility Not participating in one of the listed industries doesn't mean your account will be validated. All Swan Partners complete a rigorous review process before going Live. Learn more in the [guide to activate a Swan project](../../topics/projects/guide-activate.mdx). -::: \ No newline at end of file +::: diff --git a/docs/topics/accounts/billing/guide-compliant-billing.mdx b/docs/topics/accounts/billing/guide-compliant-billing.mdx index 2f9c727afc9..7e4dc89569e 100644 --- a/docs/topics/accounts/billing/guide-compliant-billing.mdx +++ b/docs/topics/accounts/billing/guide-compliant-billing.mdx @@ -14,12 +14,12 @@ Learn more about [**customizing your offer**](#customize-offer) at the end of th ## Overview {#overview} All banking fees are legally framed and supervised by a regulator. -In France, the regulator is the *Autorité de Contrôle Prudentiel et de Résolution*. +In France, the regulator is the _Autorité de Contrôle Prudentiel et de Résolution_. Some fees are capped or forbidden because they are considered abusive, depending on the account holder's status. Therefore, only regulated entities can bill banking fees because they're subject to the regulator's supervision. Swan Partners aren't [acting as regulated financial entities](../../../partnership/index.mdx), so you **can't bill directly** for banking fees—even if your product provides support associated with these fees. -In other words, you can't include banking fees in your pricing offer as fees you charge your users. +In other words, you can't include banking fees in your pricing offer as fees you charge your users. If the product you've built brings value (for example, in the preparation of payment orders), you're authorized to bill for this functionality under the appropriate denomination. In order to do so, your product must add value for your client. @@ -32,7 +32,7 @@ Swan must **verify your billing offer**, whether standard or customized, regardi 1. You can charge your customers for all the functionalities not considered banking fees. 1. If your product improves or eases the preparation of payment orders, you can bill that function directly. -1. You can *present* the functionalities considered as banking fees to your customers. +1. You can _present_ the functionalities considered as banking fees to your customers. ### Restrictions {#restrictions} @@ -45,7 +45,7 @@ It fills out the payment order to be sent by your customer. - ✓ You can bill for the functionalities of detecting the data and filling out the payment order. - ☒ You can't bill for the execution of the payment order itself, or for the opening of the account. -::: + ::: ## Fees @@ -64,15 +64,15 @@ As a Swan Partner, you **can bill** for the following fees: Many fees **are classified** as banking fees and are therefore **non-billable**. As a Swan Partner, you **can't bill** for the following fees. -| Category | Fee | -| --- | --- | -| Accounts |
  • Account administration
  • Account funding by credit card
  • Fee per inactive account
  • Fee for closing an account
  • Monthly provision of a statement of transactions carried out on the account, in paper format
  • Document search fee (drafting a circulation letter for a legal entity holder)
| -| Cards |
  • Deferred debit card
  • Immediate debit card
  • Provision of a credit card
  • Provision of a debit card
  • Payment by card
  • Payment card with systematic authorization
| -| Credit transfers |
  • Fees per instant transfer
  • Receipt of a non-SEPA transfer
  • Transfer
| -| Direct debits |
  • Stop fees for direct debit
| -| Subscription |
  • Subscription to remote banking services
  • Subscription to products including account status SMS alerts (per alert)
  • Subscription to products including account status SMS alerts (per month)
| -| Other |
  • Cash withdrawal
  • Payment acquisition services (Swan's merchant offer to accept payments)
| -| Incident fees
*(also classified as banking fees)* |
  • Intervention fee
  • Fee for the notification letter for unauthorized account in debt
  • Fee for non execution of a standing order due to lack of funds
  • Fee for direct debit rejections due to an insufficient balance
  • Stop fees for the card
  • Processing of judicial or administrative seizures, notice to third party holders
  • Charges for seizure of account
  • Fee for information missing or incorrect related to a transfer
  • Charges for notifying the *Banque de France* of a decision to withdraw a credit card
| +| Category | Fee | +| ------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Accounts |
  • Account administration
  • Account funding by credit card
  • Fee per inactive account
  • Fee for closing an account
  • Monthly provision of a statement of transactions carried out on the account, in paper format
  • Document search fee (drafting a circulation letter for a legal entity holder)
| +| Cards |
  • Deferred debit card
  • Immediate debit card
  • Provision of a credit card
  • Provision of a debit card
  • Payment by card
  • Payment card with systematic authorization
| +| Credit transfers |
  • Fees per instant transfer
  • Receipt of a non-SEPA transfer
  • Transfer
| +| Direct debits |
  • Stop fees for direct debit
| +| Subscription |
  • Subscription to remote banking services
  • Subscription to products including account status SMS alerts (per alert)
  • Subscription to products including account status SMS alerts (per month)
| +| Other |
  • Cash withdrawal
  • Payment acquisition services (Swan's merchant offer to accept payments)
| +| Incident fees
_(also classified as banking fees)_ |
  • Intervention fee
  • Fee for the notification letter for unauthorized account in debt
  • Fee for non execution of a standing order due to lack of funds
  • Fee for direct debit rejections due to an insufficient balance
  • Stop fees for the card
  • Processing of judicial or administrative seizures, notice to third party holders
  • Charges for seizure of account
  • Fee for information missing or incorrect related to a transfer
  • Charges for notifying the _Banque de France_ of a decision to withdraw a credit card
| ## Customizing your offer {#customize-offer} @@ -84,9 +84,9 @@ By default, Swan's banking fees are charged according to the following table. All fees **charged to you** could be **charged to your users instead** with a customized billing offer. Please note that **you are ultimately responsible** for any outstanding payments owed by your users. -| Fees charged to | Fee | -| --- | --- | -| Swan Partners (you) |
  • Fee per account
  • Fee per SEPA Credit Transfer
  • Fee per card transaction
  • Card issuing and shipping
| +| Fees charged to | Fee | +| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Swan Partners (you) |
  • Fee per account
  • Fee per SEPA Credit Transfer
  • Fee per card transaction
  • Card issuing and shipping
| | Account holders (your users) |
  • SEPA Direct Debit transactions
  • Checks
  • Accepting online payments with cards
  • Fees for International Credit Transfers
  • Incident fees
| ### Presenting your customized offer {#customize-offer-present} @@ -96,12 +96,12 @@ How you present your customized billing offer must respect certain guidelines. Your pricing offer must be **transparent to your users**, allowing them to **compare pricing** for various payment products on the market. 1. If you decide to cover your users' fees, you can mention it. - - For example, you might say *No fees to open accounts* or *No transaction fees*. + - For example, you might say _No fees to open accounts_ or _No transaction fees_. 1. If your product helps prepare payment orders, you can mention it. - - For example, you might say *Initiate payments with one click*. + - For example, you might say _Initiate payments with one click_. 1. If you choose to mention Swan's banking fees, you must indicated that fees are charged by Swan. - - For example, you could add a symbol (^) referring the user to the following information somewhere on the offer page: *Fees charged by Swan, according to Swan's Terms and Conditions*. -1. If Swan's fees are mentioned, the following information about Swan must be included in the footer of your offer page: *Swan is an Electronic Money institution and Payment institution offering payment services under French law approved by the ACPR under number 17328.* + - For example, you could add a symbol (^) referring the user to the following information somewhere on the offer page: _Fees charged by Swan, according to Swan's Terms and Conditions_. +1. If Swan's fees are mentioned, the following information about Swan must be included in the footer of your offer page: _Swan is an Electronic Money institution and Payment institution offering payment services under French law approved by the ACPR under number 17328._ :::info Fee labels **Fee labels**, meaning how fees are displayed to account holders on Web Banking, transaction histories, and account statements, aren't customizable. @@ -110,4 +110,4 @@ When customizing your offer, **you must keep Swan's standardized wording**; you Please refer to your most recent Swan Terms and Conditions for standardized fee wording. ::: -![Visual depiction of three payments going to three French virtual IBANs attached to a single French main IBAN](../../../images/topics/accounts/billing-present-offer.png) \ No newline at end of file +![Visual depiction of three payments going to three French virtual IBANs attached to a single French main IBAN](../../../images/topics/accounts/billing-present-offer.png) diff --git a/docs/topics/accounts/billing/guide-get-details.mdx b/docs/topics/accounts/billing/guide-get-details.mdx index 3ed5607b037..78d7e488cd6 100644 --- a/docs/topics/accounts/billing/guide-get-details.mdx +++ b/docs/topics/accounts/billing/guide-get-details.mdx @@ -61,9 +61,8 @@ The query returns all of the information about the invoice. "status": "Paid", "updatedAt": "2023-02-17T08:18:09.807Z", "url": "https://invoices.sandbox.swan.io/sample-invoice.pdf?Expires=1682069291310&Key-Pair-Id=K27GLF05V96LSD&Signature=svkxgaVz1L9vtfePPFuBp0b5mEYa0X9Ty~OC3QXEoqONu3d7~aCwNYouyeKtBdt-kyIdfWCeQj1uxwQyUqEfn4KmByrx1JTK3rIs05~bjcE9ADIhPn8tr~0bKFruWMZvXo62p1UyXj4Vcv0falWX-amSIr0UmmUfQrNTV44Ln2lRPj~Co~RCnmcQ-HU3-QRNw5QFDSkPtPCpBvh-BfP-F50Q054UWiuGfZ8sbdKZqIp0L7-EDwhH~SCqpTMH66YpQr5u0Ftcw4rbq09x0I6uphMFA1xoX45E1Pk-UDf~OhSIZ3DiCVH0tUp3PJZzBPUSK9gKayhh97JuyROgL4~hdw__", - "type":"Invoice" + "type": "Invoice" } } } ``` - diff --git a/docs/topics/accounts/billing/guide-get-list.mdx b/docs/topics/accounts/billing/guide-get-list.mdx index 7356c4dc2ef..ba707c359a8 100644 --- a/docs/topics/accounts/billing/guide-get-list.mdx +++ b/docs/topics/accounts/billing/guide-get-list.mdx @@ -29,7 +29,7 @@ query RetrieveInvoices { closingDate createdAt expiresAt - name + name id openingDate status @@ -69,7 +69,7 @@ The query returns all of the information about two invoices. "status": "Paid", "updatedAt": "2023-02-16T16:04:52.582Z", "url": "$INVOICE_URL", - "type":"Invoice" + "type": "Invoice" } }, { @@ -83,7 +83,7 @@ The query returns all of the information about two invoices. "status": "Voided", "updatedAt": "2023-02-16T16:04:50.888Z", "url": null, - "type":"Invoice" + "type": "Invoice" } } ], @@ -96,4 +96,4 @@ The query returns all of the information about two invoices. } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/accounts/billing/index.mdx b/docs/topics/accounts/billing/index.mdx index e87862adc8e..3b067a7e620 100644 --- a/docs/topics/accounts/billing/index.mdx +++ b/docs/topics/accounts/billing/index.mdx @@ -4,7 +4,6 @@ title: Billing # Billing - ## Overview {#overview} Swan **charges banking fees** directly for each account as defined in the Terms and Conditions. @@ -41,22 +40,22 @@ For fee transactions, Swan created a dedicated `Fees` payment product and two tr Fee amounts are not listed because they can vary by contract. Please check your Terms and Conditions for your precise fees. -| Fee | Billed with Value Added Tax (VAT) | Booked | -| --- | :---: | --- | -| Cash withdrawals from cash machines (ATM) in euros | ☒ No | Immediately | -| Cash withdrawals from cash machines (ATM) *not* in euros | ☒ No | Immediately | -| Payment for goods and services in stores or remotely *not* denominated and carried out in euros | ☒ No | Immediately | -| Rejection of an outgoing direct debit due to an insufficient balance | ☒ No | 14 days after disclosure of the charges on the account | -| Improper use of the account

*Attempted or actual actions that are against the law or contrary to this account agreement* | ✓ Yes | Immediately | -| Handling legal or administrative garnishments, third party debt orders | ☒ No | 14 days after disclosure of the charges on the account | -| Preparation of a circularization letter for a legal entity holder | ✓ Yes | Immediately | -| Preparation of a letter certifying the existence of an account with Swan | ✓ Yes | Immediately | -| Handling fees for management of an unauthorised overdraft | ☒ No | 14 days after disclosure of the charges on the account | -| Adding funds to the account by bank card | ✓ Yes | Immediately | -| Call to Customer Service | ☒ No | n/a | -| SEPA Direct Debit merchant fees for transactions up to €200 | ✓ Yes | Immediately | -| SEPA Direct Debit merchant fees for transactions over €200 | ✓ Yes | Immediately | -| Returned merchant SEPA Direct Debit transactions | ✓ Yes | Immediately | +| Fee | Billed with Value Added Tax (VAT) | Booked | +| ----------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------: | ------------------------------------------------------ | +| Cash withdrawals from cash machines (ATM) in euros | ☒ No | Immediately | +| Cash withdrawals from cash machines (ATM) _not_ in euros | ☒ No | Immediately | +| Payment for goods and services in stores or remotely _not_ denominated and carried out in euros | ☒ No | Immediately | +| Rejection of an outgoing direct debit due to an insufficient balance | ☒ No | 14 days after disclosure of the charges on the account | +| Improper use of the account

_Attempted or actual actions that are against the law or contrary to this account agreement_ | ✓ Yes | Immediately | +| Handling legal or administrative garnishments, third party debt orders | ☒ No | 14 days after disclosure of the charges on the account | +| Preparation of a circularization letter for a legal entity holder | ✓ Yes | Immediately | +| Preparation of a letter certifying the existence of an account with Swan | ✓ Yes | Immediately | +| Handling fees for management of an unauthorised overdraft | ☒ No | 14 days after disclosure of the charges on the account | +| Adding funds to the account by bank card | ✓ Yes | Immediately | +| Call to Customer Service | ☒ No | n/a | +| SEPA Direct Debit merchant fees for transactions up to €200 | ✓ Yes | Immediately | +| SEPA Direct Debit merchant fees for transactions over €200 | ✓ Yes | Immediately | +| Returned merchant SEPA Direct Debit transactions | ✓ Yes | Immediately | ## Charging custom fees {#fees-custom} @@ -91,7 +90,7 @@ Subscribe to the `AccountInvoice.Generated` [webhook](../../../developers/using- You can also access company account invoices with the API, from your Dashboard, or on Swan's Web Banking interface. :::info individual accounts -Monthly invoices *aren't* generated for **individual** accounts. +Monthly invoices _aren't_ generated for **individual** accounts. Instead, fees are included on the standard [monthly account statement](../index.mdx#statements). An **annual fee statement** is provided automatically once a year, at the end of January's account statement. @@ -121,4 +120,4 @@ With the reverse charge mechanism, **VAT isn't added** and **must be paid by the - [Build a compliant billing offer](./guide-compliant-billing.mdx) - [Get list of invoices](./guide-get-list.mdx) - [Get invoice details](./guide-get-details.mdx) -- [Sandbox](./sandbox.mdx) \ No newline at end of file +- [Sandbox](./sandbox.mdx) diff --git a/docs/topics/accounts/billing/sandbox.mdx b/docs/topics/accounts/billing/sandbox.mdx index 56812ca8ed1..992fcd662a2 100644 --- a/docs/topics/accounts/billing/sandbox.mdx +++ b/docs/topics/accounts/billing/sandbox.mdx @@ -12,9 +12,7 @@ Get the account ID for which you'd like to generate a test invoice using the [Te ```graphql title="Testing API mutation" {3} showLineNumbers mutation GenerateTestInvoice { - simulateInvoiceGeneration( - input: { accountId: "$YOUR_ACCOUNT_ID" } - ) { + simulateInvoiceGeneration(input: { accountId: "$YOUR_ACCOUNT_ID" }) { ... on SimulateInvoiceGenerationSuccessPayload { __typename invoice { @@ -60,4 +58,4 @@ mutation GenerateTestInvoice { } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/accounts/closure/_partner-close-account.mdx b/docs/topics/accounts/closure/_partner-close-account.mdx index f9885f0ec0a..00ba557406d 100644 --- a/docs/topics/accounts/closure/_partner-close-account.mdx +++ b/docs/topics/accounts/closure/_partner-close-account.mdx @@ -1,3 +1,3 @@ 1. Submit a ticket through your Dashboard, or send an email to support@swan.io. 1. Include the account ID of the account you need to close. You can also send a list of account IDs to close several accounts at once. -1. Explain why you want to close the account. \ No newline at end of file +1. Explain why you want to close the account. diff --git a/docs/topics/accounts/closure/guide-close-api.mdx b/docs/topics/accounts/closure/guide-close-api.mdx index 66ba47121ad..86c51f5ff25 100644 --- a/docs/topics/accounts/closure/guide-close-api.mdx +++ b/docs/topics/accounts/closure/guide-close-api.mdx @@ -38,7 +38,6 @@ mutation closeAccount { } } } - ``` ## Payload {#payload} @@ -54,4 +53,4 @@ mutation closeAccount { } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/accounts/closure/guide-close-limited.mdx b/docs/topics/accounts/closure/guide-close-limited.mdx index 64c7b121af7..38bb1529144 100644 --- a/docs/topics/accounts/closure/guide-close-limited.mdx +++ b/docs/topics/accounts/closure/guide-close-limited.mdx @@ -6,7 +6,7 @@ title: Close a limited account ## Step 1: Submit closure request {#limited-submit} -import SubmitClosureRequestLimited from './_partner-close-account.mdx'; +import SubmitClosureRequestLimited from "./_partner-close-account.mdx"; @@ -25,4 +25,4 @@ Before changing the account status to `Closing`, Swan confirms several details: If the process to close the account doesn't need to change based on details confirmed in step 2, Swan changes the account status to `Closing`. -Since the account was never used, passing from `Closing` to `Closed` happens quickly; there isn't a required notice period. \ No newline at end of file +Since the account was never used, passing from `Closing` to `Closed` happens quickly; there isn't a required notice period. diff --git a/docs/topics/accounts/closure/guide-close-unlimited.mdx b/docs/topics/accounts/closure/guide-close-unlimited.mdx index 7f9501f8bb1..90b164c253a 100644 --- a/docs/topics/accounts/closure/guide-close-unlimited.mdx +++ b/docs/topics/accounts/closure/guide-close-unlimited.mdx @@ -6,21 +6,21 @@ title: Close an unlimited account ## Step 1: Submit closure request {#unlimited-submit} -import SubmitClosureRequestUnlimited from './_partner-close-account.mdx'; +import SubmitClosureRequestUnlimited from "./_partner-close-account.mdx"; 4. Additionally, make sure to tell Swan *when* you'd like the account to close. There are **three options**, explained in the following table. -| Option | Explanation | Requirements | -| :---: | --- | --- | -| 1 | Account closed in 60 days | *None* | -| 2 | Account closed on a specific date more than 60 days in the future | Share the specific date with Swan | -| 3 | Account closed on a specific date within fewer than 60 days | Provide signed document with consent from account holder (contractual evidence) | +| Option | Explanation | Requirements | +| :----: | ----------------------------------------------------------------- | ------------------------------------------------------------------------------- | +| 1 | Account closed in 60 days | _None_ | +| 2 | Account closed on a specific date more than 60 days in the future | Share the specific date with Swan | +| 3 | Account closed on a specific date within fewer than 60 days | Provide signed document with consent from account holder (contractual evidence) | 5. If you choose option 3, **send Swan the contractual evidence**. - - Contractual evidence is a document signed by the account holder stating that they agree to close their Swan account on the specific date. - - The document is required by law to close an account within fewer than 60 days. + - Contractual evidence is a document signed by the account holder stating that they agree to close their Swan account on the specific date. + - The document is required by law to close an account within fewer than 60 days. ## Step 2: Swan reviews request {#unlimited-review} @@ -34,8 +34,8 @@ Before notifying the account holder of their upcoming account closure, Swan conf After reviewing the request, Swan initiates the actual account closure. 1. **Swan emails the account holder** informing them that their account will be closed. - - The email specifies whether the account will close in two months or on a specific date, based on the option you selected in step 1. - - Swan must send the email. It's generic and straightforward for all account holders. + - The email specifies whether the account will close in two months or on a specific date, based on the option you selected in step 1. + - Swan must send the email. It's generic and straightforward for all account holders. 1. Swan **changes the account status** to `Closing` after two months or on the specific date. 1. The account **undergoes the closing process**. Refer to the [account statuses](../index.mdx#statuses) section for an overview of what happens while an account is `Closing`. -1. After the account status changes to `Closed`, Swan **sends a final email** to the account holder informing them that their account is officially closed. \ No newline at end of file +1. After the account status changes to `Closed`, Swan **sends a final email** to the account holder informing them that their account is officially closed. diff --git a/docs/topics/accounts/closure/index.mdx b/docs/topics/accounts/closure/index.mdx index 26041649f5d..ef0c74105a7 100644 --- a/docs/topics/accounts/closure/index.mdx +++ b/docs/topics/accounts/closure/index.mdx @@ -16,12 +16,12 @@ As soon as an account enters the closure process, the status changes to `Closing The account closure process depends on who closes the account. -| Requester | Process | -| :---: | --- | -| Swan | Refer to [Swan closing accounts](#closure-swan) on this page. | -| Third party | Refer to [closure requested by a third party](#closure-third-party) on this page for information about account closures when requested by third parties such as a notary or a liquidator. | -| Account holder
*or*
Legal representative of the account |
  1. The [Swan Support Center](https://support.swan.io/hc/en-150/articles/14642306196765-Account-closure-process) documents the process for account holders and legal representatives of accounts. The account holder or the legal representative must contact Swan Support directly.
  2. You can [close an account by legal representative request](./guide-close-api.mdx) with the API.
| -| You | Your guides are in this section. Follow the guide relevant to your situation.

  1. Use the API to [close an account by legal representative request](./guide-close-api.mdx).
  2. [Request to close a **limited** account](./guide-close-limited.mdx).
  3. [Request to close an **unlimited** account](./guide-close-unlimited.mdx).

*Learn whether an account's payment level `Limited` or `Unlimited` by going to your **Dashboard** > **Data** > **Accounts**, then clicking the account you're trying to close. The payment level is part of the account's general information.* | +| Requester | Process | +| :---------------------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Swan | Refer to [Swan closing accounts](#closure-swan) on this page. | +| Third party | Refer to [closure requested by a third party](#closure-third-party) on this page for information about account closures when requested by third parties such as a notary or a liquidator. | +| Account holder
_or_
Legal representative of the account |
  1. The [Swan Support Center](https://support.swan.io/hc/en-150/articles/14642306196765-Account-closure-process) documents the process for account holders and legal representatives of accounts. The account holder or the legal representative must contact Swan Support directly.
  2. You can [close an account by legal representative request](./guide-close-api.mdx) with the API.
| +| You | Your guides are in this section. Follow the guide relevant to your situation.

  1. Use the API to [close an account by legal representative request](./guide-close-api.mdx).
  2. [Request to close a **limited** account](./guide-close-limited.mdx).
  3. [Request to close an **unlimited** account](./guide-close-unlimited.mdx).

_Learn whether an account's payment level `Limited` or `Unlimited` by going to your **Dashboard** > **Data** > **Accounts**, then clicking the account you're trying to close. The payment level is part of the account's general information._ | ## Swan closing accounts {#closure-swan} @@ -32,7 +32,7 @@ Swan reserves the right to close accounts, and might decide to close an account 1. The onboarding, identification, or Know Your Customer (KYC) process wasn't completed. 1. The Partner (you) is no longer working with Swan. -When closing accounts, Swan is required by law to provide a **two-month notice** period. +When closing accounts, Swan is required by law to provide a **two-month notice** period. More specifically, Swan waits 60 days after notifying the account holder to change the account status to `Closing`. This provides the account holder with enough time to open an account at another financial institution before losing access to their Swan account. @@ -48,9 +48,9 @@ Before accepting requests from third parties, Swan performs the following action 1. Swan confirms the request is **legitimate**. If the request is fraudulent, Swan doesn't comply. 1. Swan **checks the account balance**. - - Zero balance: No action required. - - Positive balance: Swan requests bank details from the third party, then transfers the funds. - - Negative balance: Swan requests the third party transfer funds so the balance reaches zero. + - Zero balance: No action required. + - Positive balance: Swan requests bank details from the third party, then transfers the funds. + - Negative balance: Swan requests the third party transfer funds so the balance reaches zero. When the account balance reaches zero, Swan changes the account status to `Closed` immediately for legitimate third-party requests. @@ -62,4 +62,4 @@ Refer to the [account statuses](../index.mdx#statuses) section for an overview o - [Close an account by legal representative request](./guide-close-api.mdx) - [Close a limited account](./guide-close-limited.mdx) -- [Close a unlimited account](./guide-close-unlimited.mdx) \ No newline at end of file +- [Close a unlimited account](./guide-close-unlimited.mdx) diff --git a/docs/topics/accounts/funding/_account-verification-status.mdx b/docs/topics/accounts/funding/_account-verification-status.mdx index 396bf376a6b..657f7fafbc0 100644 --- a/docs/topics/accounts/funding/_account-verification-status.mdx +++ b/docs/topics/accounts/funding/_account-verification-status.mdx @@ -1,2 +1,2 @@ The **account verification status** doesn't impact SEPA Direct Debit B2B account funding. -The funding source status can be `Enabled` even if the account verification status is `PendingVerification`. \ No newline at end of file +The funding source status can be `Enabled` even if the account verification status is `PendingVerification`. diff --git a/docs/topics/accounts/funding/guide-add-source.mdx b/docs/topics/accounts/funding/guide-add-source.mdx index bf8321b472a..e781207b893 100644 --- a/docs/topics/accounts/funding/guide-add-source.mdx +++ b/docs/topics/accounts/funding/guide-add-source.mdx @@ -63,7 +63,6 @@ mutation AddSddB2b { } } } - ``` ## Payload {#payload} @@ -95,4 +94,4 @@ Note you also receive a funding source ID (line 6) and a payment mandate ID (lin } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/accounts/funding/guide-cancel-request.mdx b/docs/topics/accounts/funding/guide-cancel-request.mdx index 55836e864dc..3a63abd1bad 100644 --- a/docs/topics/accounts/funding/guide-cancel-request.mdx +++ b/docs/topics/accounts/funding/guide-cancel-request.mdx @@ -21,9 +21,7 @@ Instead, use the same `cancelTransaction` mutation used to cancel any other tran ```graphql {3} showLineNumbers mutation CancelFundingRequest { - cancelTransaction( - input: { transactionId: "$FUNDING_TRANSACTION_ID" } - ) { + cancelTransaction(input: { transactionId: "$FUNDING_TRANSACTION_ID" }) { ... on CancelTransactionSuccessPayload { __typename message @@ -34,4 +32,4 @@ mutation CancelFundingRequest { } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/accounts/funding/guide-cancel-source.mdx b/docs/topics/accounts/funding/guide-cancel-source.mdx index 42af0880014..8a55212843a 100644 --- a/docs/topics/accounts/funding/guide-cancel-source.mdx +++ b/docs/topics/accounts/funding/guide-cancel-source.mdx @@ -41,7 +41,6 @@ mutation CancelSource { } } } - ``` ## Payload {#payload} @@ -62,4 +61,4 @@ The direct debit mandate is also `Canceled`. } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/accounts/funding/guide-get-info.mdx b/docs/topics/accounts/funding/guide-get-info.mdx index 3f29f4b969f..0dad6ce8993 100644 --- a/docs/topics/accounts/funding/guide-get-info.mdx +++ b/docs/topics/accounts/funding/guide-get-info.mdx @@ -112,7 +112,6 @@ query GetSourceList { } } } - ``` ### Payload {#payload-list} @@ -150,4 +149,4 @@ The payload provides the list of funding sources for your account. } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/accounts/funding/guide-initiate-request.mdx b/docs/topics/accounts/funding/guide-initiate-request.mdx index 81f99aa61a1..32638bfc946 100644 --- a/docs/topics/accounts/funding/guide-initiate-request.mdx +++ b/docs/topics/accounts/funding/guide-initiate-request.mdx @@ -9,8 +9,7 @@ Initiate a funding request with the API. :::tip Prerequisites An `Enabled` payment mandate from the Swan account holder who is funding their account. - -import AccountVerificationStatus from './_account-verification-status.mdx'; +import AccountVerificationStatus from "./_account-verification-status.mdx"; ::: @@ -78,4 +77,4 @@ On your transaction history, you'll see a SEPA Direct Debit transaction with the } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/accounts/funding/index.mdx b/docs/topics/accounts/funding/index.mdx index c7930dec512..d613b5606ab 100644 --- a/docs/topics/accounts/funding/index.mdx +++ b/docs/topics/accounts/funding/index.mdx @@ -12,10 +12,9 @@ You might use account funding if it's the first time you're sending money to you If you use `requestedExecutionAt` to schedule your funding requests, you can schedule them up to one year in advance. Your scheduled requests must be for at least two business days in the future. - ## Funding sources {#sources} -import AccountFundingDefinition from '../../definitions/_account-funding.mdx'; +import AccountFundingDefinition from "../../definitions/_account-funding.mdx"; @@ -25,7 +24,7 @@ Credit transfers and direct debit are both account funding **sources**. You can fund your account with two types of credit transfers: SEPA Credit Transfer or Internal Credit Transfer. -Credit transfers are classified as **push payments**, meaning you send money *to* your Swan account *from* another source. +Credit transfers are classified as **push payments**, meaning you send money _to_ your Swan account _from_ another source. Push payments come with no risk because they can't be disputed. :::info Use a credit transfer @@ -74,14 +73,14 @@ flowchart LR style U fill:#dfedf2,stroke:#4d8296, stroke-width:3px ``` -| Funding source status | Explanation | -|:---:|---| -| `Pending` | Added a funding source with the `addDirectDebitFundingSource` mutation and are waiting for consent. | -| `Enabled` | Account funding source can be used. | -| `Suspended` | Swan can suspend a funding source if there's suspicion of fraud. While suspended, the funding source can't be used. | -| `Canceled` | Account funding source is canceled and no longer available for use. | +| Funding source status | Explanation | +| :-------------------: | ------------------------------------------------------------------------------------------------------------------- | +| `Pending` | Added a funding source with the `addDirectDebitFundingSource` mutation and are waiting for consent. | +| `Enabled` | Account funding source can be used. | +| `Suspended` | Swan can suspend a funding source if there's suspicion of fraud. While suspended, the funding source can't be used. | +| `Canceled` | Account funding source is canceled and no longer available for use. | -import AccountVerificationStatus from './_account-verification-status.mdx'; +import AccountVerificationStatus from "./_account-verification-status.mdx"; :::info Account verification status @@ -91,7 +90,7 @@ import AccountVerificationStatus from './_account-verification-status.mdx'; ## Payment mandates {#mandates} -import PaymentMandateDefinition from '../../definitions/_payment-mandate.mdx'; +import PaymentMandateDefinition from "../../definitions/_payment-mandate.mdx"; > @@ -122,29 +121,29 @@ flowchart LR style U fill:#dfedf2,stroke:#4d8296, stroke-width:3px ``` -| Payment mandate status | Explanation | -| :---: |---| -| `ConsentPending` | Payment mandate was added while [adding a direct debit funding source](./guide-add-source.mdx) with the `addDirectDebitFundingSource` mutation.

**Next steps**:
  • If the debtor consents to the mandate, the status moves to `Enabled`.
  • If the debtor doesn't consent to the mandate, the status moves to `Canceled`.
| -| `Enabled` | Payment mandate can be used to fund the account. | -| `Rejected` | Payment mandate was rejected, possibly because the external account's IBAN and Swan payment mandate list different account holders. | -| `Canceled` | Payment mandate is canceled and no longer available for use.

Account funding payment mandates expire 36 months after being created, or earlier if there's a suspicion of fraud. | +| Payment mandate status | Explanation | +| :--------------------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `ConsentPending` | Payment mandate was added while [adding a direct debit funding source](./guide-add-source.mdx) with the `addDirectDebitFundingSource` mutation.

**Next steps**:
  • If the debtor consents to the mandate, the status moves to `Enabled`.
  • If the debtor doesn't consent to the mandate, the status moves to `Canceled`.
| +| `Enabled` | Payment mandate can be used to fund the account. | +| `Rejected` | Payment mandate was rejected, possibly because the external account's IBAN and Swan payment mandate list different account holders. | +| `Canceled` | Payment mandate is canceled and no longer available for use.

Account funding payment mandates expire 36 months after being created, or earlier if there's a suspicion of fraud. | ## Rolling reserve {#rolling-reserve} When using SEPA Direct Debit to fund your account, Swan reserves 100% of your transaction for three business days, after which the reserved amount is released to your account. Reserved funds are typically released around 20:00 Central European [Summer] Time (CET/CEST) on the last day of the rolling reserve period. -import RollingReserveDefinition from '../../definitions/_rolling-reserve.mdx'; +import RollingReserveDefinition from "../../definitions/_rolling-reserve.mdx"; ## Settlement date and booked time {#settlement} -import SddBookedTime from '../../partials/_sdd-booked.mdx'; +import SddBookedTime from "../../partials/_sdd-booked.mdx"; -import DayTimeStandard from '../../partials/_day-time.mdx'; +import DayTimeStandard from "../../partials/_day-time.mdx"; @@ -154,4 +153,4 @@ import DayTimeStandard from '../../partials/_day-time.mdx'; - [Cancel a funding source](./guide-cancel-source.mdx) - [Initiate a funding request](./guide-initiate-request.mdx) - [Cancel a funding request](./guide-cancel-request.mdx) -- [Get information about a funding source and request](./guide-get-info.mdx) \ No newline at end of file +- [Get information about a funding source and request](./guide-get-info.mdx) diff --git a/docs/topics/accounts/funding/sandbox.mdx b/docs/topics/accounts/funding/sandbox.mdx index b507770e8cf..290d4fd8b38 100644 --- a/docs/topics/accounts/funding/sandbox.mdx +++ b/docs/topics/accounts/funding/sandbox.mdx @@ -10,4 +10,4 @@ In Sandbox, simulate funding an account using the Event Simulator and a fake deb 1. Go to **Dashboard** > **Developers** > **Event Simulator** > **SEPA Credit Transfers**. 1. Go to the **Receive an incoming transfer** tab. -1. Enter the desired amount and your Swan IBAN, and which is instantly credited to your Sandbox account. \ No newline at end of file +1. Enter the desired amount and your Swan IBAN, and which is instantly credited to your Sandbox account. diff --git a/docs/topics/accounts/ibans/guide-add-virtual.mdx b/docs/topics/accounts/ibans/guide-add-virtual.mdx index 11c3a685365..8fbc22d40ad 100644 --- a/docs/topics/accounts/ibans/guide-add-virtual.mdx +++ b/docs/topics/accounts/ibans/guide-add-virtual.mdx @@ -53,4 +53,4 @@ The payload shows provides the virtual IBAN with the status `Enabled`. } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/accounts/ibans/guide-cancel-virtual.mdx b/docs/topics/accounts/ibans/guide-cancel-virtual.mdx index 578ba03dbd9..0bd821280f4 100644 --- a/docs/topics/accounts/ibans/guide-cancel-virtual.mdx +++ b/docs/topics/accounts/ibans/guide-cancel-virtual.mdx @@ -58,4 +58,4 @@ The payload shows the IBAN status changed to `Canceled`. } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/accounts/ibans/guide-get-info.mdx b/docs/topics/accounts/ibans/guide-get-info.mdx index a0e7da86086..ba3a4c545cb 100644 --- a/docs/topics/accounts/ibans/guide-get-info.mdx +++ b/docs/topics/accounts/ibans/guide-get-info.mdx @@ -88,4 +88,4 @@ There's a lot to learn from this payload response. } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/accounts/ibans/guide-validate.mdx b/docs/topics/accounts/ibans/guide-validate.mdx index bd73e373dd1..952c6cbe0d0 100644 --- a/docs/topics/accounts/ibans/guide-validate.mdx +++ b/docs/topics/accounts/ibans/guide-validate.mdx @@ -15,9 +15,10 @@ The `ibanValidation` query confirms the following formatting: - Checksum or check digits are correct :::tip possible use cases + 1. Check the format of your IBAN before using the [`initiateCreditTransfers` mutation](https://api-reference.swan.io/mutations/initiate-credit-transfers/). 1. Get the bank information with the API if your [bank details PDF](../index.mdx#bank-details) isn't readily available. -::: + ::: ## Guide and query {#guide} @@ -55,12 +56,11 @@ query CheckIbanFormat { } } } - ``` ## Valid IBAN example {#payload-valid} -> *All of this data is from a Swan Sandbox account and can't be used in real life.* +> _All of this data is from a Swan Sandbox account and can't be used in real life._ Payload responses for valid IBANs provide valuable information if included in the query. In fact, it can return everything in a valid IBAN's anatomy; you can review [local IBANs supported by Swan](./index.mdx#local). @@ -100,7 +100,7 @@ There are numerous responses for invalid IBANs. Here are two examples. 1. `IBAN FR76182060016265`: The payload shows that the IBAN is invalid because it's too short. -Review the anatomy of each [local IBAN supported by Swan](./index.mdx#local). + Review the anatomy of each [local IBAN supported by Swan](./index.mdx#local). 1. `IBAN FR7817569000305414384277J07`: The payload shows that the IBAN is invalid because the bank referenced in the IBAN couldn't be found. ```graphql title="Invalid example payload" {6-7,17-18} showLineNumbers @@ -125,4 +125,4 @@ Review the anatomy of each [local IBAN supported by Swan](./index.mdx#local). } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/accounts/ibans/index.mdx b/docs/topics/accounts/ibans/index.mdx index 355c7369364..a514010b482 100644 --- a/docs/topics/accounts/ibans/index.mdx +++ b/docs/topics/accounts/ibans/index.mdx @@ -6,7 +6,7 @@ title: IBANs ## Overview {#overview} -import IbanDefinition from '../../definitions/_iban.mdx'; +import IbanDefinition from "../../definitions/_iban.mdx"; @@ -44,15 +44,16 @@ Refer to [Swan's public roadmap](https://swanio.notion.site/Swan-Public-Roadmap- French IBANs consist of 34 letters and numbers.
Each set of characters represents a different account detail. -| Character set | Explanation | -| ---: | :--- | -| **FR** | France's country code | -| **76** | Check digits | -| **17328** | Swan's French bank code | -| **84400** | Swan's French branch code for main IBANs (virtual IBANs: **89900**) | -| **XXXX XXXX X** | 11-digit account number (not applicable for virtual IBANs) | -| **YY** | Two-digit RIB key
RIB, or *relevé d'identité bancaire*, are [Swan's bank details PDF](../index.mdx#bank-details) | -| **SWNBFR22** | Swan's French Bank Identifier Code (BIC) | +| Character set | Explanation | +| --------------: | :-------------------------------------------------------------------------------------------------------------------- | +| **FR** | France's country code | +| **76** | Check digits | +| **17328** | Swan's French bank code | +| **84400** | Swan's French branch code for main IBANs (virtual IBANs: **89900**) | +| **XXXX XXXX X** | 11-digit account number (not applicable for virtual IBANs) | +| **YY** | Two-digit RIB key
RIB, or _relevé d'identité bancaire_, are [Swan's bank details PDF](../index.mdx#bank-details) | +| **SWNBFR22** | Swan's French Bank Identifier Code (BIC) | + @@ -62,13 +63,14 @@ Each set of characters represents a different account detail. German IBANs consist of 22 letters and numbers.
Each set of characters represents a different account detail. -| Character set | Explanation | -| ---: | :--- | -| **DE** | Germany's country code | -| **YY** | IBAN check digits | -| **1001 4000** | Swan's German bank code for main IBANs (virtual IBANs: **1001 4001**) | -| **XXXX XXXX XX** | 10-digit account number (not applicable for virtual IBANs) | -| **SWNBDEBB** | Swan's German Bank Identifier Code (BIC) | +| Character set | Explanation | +| ---------------: | :-------------------------------------------------------------------- | +| **DE** | Germany's country code | +| **YY** | IBAN check digits | +| **1001 4000** | Swan's German bank code for main IBANs (virtual IBANs: **1001 4001**) | +| **XXXX XXXX XX** | 10-digit account number (not applicable for virtual IBANs) | +| **SWNBDEBB** | Swan's German Bank Identifier Code (BIC) | + @@ -78,14 +80,15 @@ Each set of characters represents a different account detail. Dutch IBANs consist of 18 letters and numbers.
Each set of characters represents a different account detail. -| Character set | Explanation | -| ---: | :--- | -| **NL** | Netherland's country code | -| **YY** | IBAN check digits | -| **SWNB** | Swan's bank code | -| **Z** | IBAN type (1-4: main IBAN; 5-9: virtual IBAN) | +| Character set | Explanation | +| --------------: | :--------------------------------------------------------- | +| **NL** | Netherland's country code | +| **YY** | IBAN check digits | +| **SWNB** | Swan's bank code | +| **Z** | IBAN type (1-4: main IBAN; 5-9: virtual IBAN) | | **XXX XXXX XX** | 10-digit account number (not applicable for virtual IBANs) | -| **SWNBNL22** | Swan's Dutch Bank Identifier Code (BIC) | +| **SWNBNL22** | Swan's Dutch Bank Identifier Code (BIC) | + @@ -95,15 +98,16 @@ Each set of characters represents a different account detail. Dutch IBANs consist of 24 letters and numbers.
Each set of characters represents a different account detail. -| Character set | Explanation | -| ---: | :--- | -| **ES** | Spain's country code | -| **YY** | IBAN check digits | -| **6724** | Swan's Spanish bank code | -| **8440** | Swan's Spanish branch code for main IBANs (virtual IBANs: **8990**) | -| **ZZ** | Bank check digits | -| **XX XXXX XXXX** | 10-digit account number (not applicable for virtual IBANs) | -| **SWNBESB2** | Swan's Spanish Bank Identifier Code (BIC) | +| Character set | Explanation | +| ---------------: | :------------------------------------------------------------------ | +| **ES** | Spain's country code | +| **YY** | IBAN check digits | +| **6724** | Swan's Spanish bank code | +| **8440** | Swan's Spanish branch code for main IBANs (virtual IBANs: **8990**) | +| **ZZ** | Bank check digits | +| **XX XXXX XXXX** | 10-digit account number (not applicable for virtual IBANs) | +| **SWNBESB2** | Swan's Spanish Bank Identifier Code (BIC) | + @@ -130,7 +134,6 @@ Note that virtual IBANs can't be used to make payments. To add virtual IBANs, the `PaymentAccountType` must be `PaymentService` and the `PaymentLevel` must be `Unlimited`. Virtual IBANs can be canceled, but they can't be suspended. - View an account's virtual IBANs on your **Dashboard** > **Data** > **Accounts** > **Virtual IBANs**, or with the API by querying `account` > `virtualIbanEntries`. If you use [Swan's Web Banking frontend](https://swan-io.github.io/swan-partner-frontend/specs/banking/account#virtual-ibans), your users can view their virtual IBANs on **Account** > **Virtual IBANs**. @@ -149,4 +152,4 @@ Use virtual IBANs to make paying invoices with credit transfers smoother by prov - [Validate the format of an IBAN](./guide-validate.mdx) - [Add a virtual IBAN](./guide-add-virtual.mdx) - [Cancel a virtual IBAN](./guide-cancel-virtual.mdx) -- [Get information about an account's IBANs](./guide-get-info.mdx) \ No newline at end of file +- [Get information about an account's IBANs](./guide-get-info.mdx) diff --git a/docs/topics/accounts/index.mdx b/docs/topics/accounts/index.mdx index 5236afb15c5..ddd3a39e1a2 100644 --- a/docs/topics/accounts/index.mdx +++ b/docs/topics/accounts/index.mdx @@ -24,7 +24,7 @@ All IBANs associated with this account have the prefix `FR`. Swan offers the following account countries: -import AccountCountryList from '../partials/_account-countries.mdx'; +import AccountCountryList from "../partials/_account-countries.mdx"; @@ -56,12 +56,12 @@ The only exception is the automatic [billing of banking fees](./billing/index.md There are four different account balances. -| Balance | Includes | Equal to | -| :---: | --- | --- | -| `Booked` | Transactions that are already debited or credited | Sum of all `Booked` transactions | -| `Pending` | Transactions that were authorized but haven't been debited or credited yet | Sum of all `Pending` transactions | -| `Reserved` | Transactions that require [rolling reserve](../../glossary.mdx#rolling-reserve) according to the policy for that payment method

`Reserved` amount is included in the `Booked` balance | Sum of all `Booked` transactions for which the funds are still in rolling reserve | -| `Available` | Balance that is actually available to be used | `Booked` - (`Pending` + `Reserved`) | +| Balance | Includes | Equal to | +| :---------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | +| `Booked` | Transactions that are already debited or credited | Sum of all `Booked` transactions | +| `Pending` | Transactions that were authorized but haven't been debited or credited yet | Sum of all `Pending` transactions | +| `Reserved` | Transactions that require [rolling reserve](../../glossary.mdx#rolling-reserve) according to the policy for that payment method

`Reserved` amount is included in the `Booked` balance | Sum of all `Booked` transactions for which the funds are still in rolling reserve | +| `Available` | Balance that is actually available to be used | `Booked` - (`Pending` + `Reserved`) |

Example: Insufficient funds

@@ -88,7 +88,7 @@ There are six possible statuses for Swan transactions. Each payment method uses a **different combination** of these statuses with specific flows. Refer to the schemas for [credit transfers](../payments/credit-transfers/index.mdx#statuses), [direct debits](../payments/direct-debit/index.mdx#statuses), and [cards](../payments/cards/index.mdx#statuses) for more information about statuses for that payment method. -import TransactionStatuses from '../partials/_transaction-statuses.mdx'; +import TransactionStatuses from "../partials/_transaction-statuses.mdx"; @@ -108,7 +108,7 @@ Account statements are accessible by calling the `account` query and adding the #### Custom statements {#statements-custom} You can also access the raw data and **generate custom statements**. -For example, you might need a format Swan doesn't provide, or you might want customize the style. +For example, you might need a format Swan doesn't provide, or you might want customize the style. As a regulated financial institution, account statements fall under compliance rules, and you might need to **get your custom statements approved**. Please work with your dedicated Technical Account Manager before releasing a custom statements. @@ -118,7 +118,7 @@ If audited, Swan's account statement is the official version. ### Bank details {#bank-details} You can get a PDF containing your bank details using the API. -In French, this document is called a **RIB**, or a *relevé d'identité bancaire*. +In French, this document is called a **RIB**, or a _relevé d'identité bancaire_. For all accounts created after 16 November 2023, the PDF is generated automatically after the account's main IBAN is assigned, meaning the account must have the payment level `Unlimited` and the account type `Payment Services`. Note that the automatic generation might take a few minutes. @@ -133,7 +133,7 @@ Bank detail PDFs include: 1. Bank code. 1. Your company's information. 1. Disclaimer: "In partnership with Swan". - - The disclaimer is required because [Swan assumes responsibility](../../partnership/index.mdx#license) for all sensitive banking operations. It's similar to the [statement printed on physical cards](../cards/design/index.mdx#standard) indicating that cards are issued by Swan. + - The disclaimer is required because [Swan assumes responsibility](../../partnership/index.mdx#license) for all sensitive banking operations. It's similar to the [statement printed on physical cards](../cards/design/index.mdx#standard) indicating that cards are issued by Swan. 1. Title of the document. 1. BIC/SWIFT code. 1. Account holder's information. @@ -165,12 +165,12 @@ flowchart LR style U fill:#dfedf2,stroke:#4d8296,stroke-width:3px ``` -| Status | Explanation | -| --- | --- | -| `Opened` | Account is open and can be used | -| `Suspended` | Swan can suspend an account if there's suspicion of fraud. While suspended, the account can't be used. | -| `Closing` | While an account is closing, the following events occur:

  1. All cards are canceled.
  2. Incoming SEPA Credit Transfers are automatically returned.
  3. All standing orders are canceled.
  4. All SEPA Direct Debit mandates are canceled.
  5. No new members can be added to the account.
The account status remains `Closing` until:

  • The `Booked` balance is zero.∗
  • The last incoming SEPA Credit Transfer happened more than 30 days ago.
  • The last outgoing SEPA Credit Transfer happened more than 5 days ago.
| -| `Closed` | For all `Closed` accounts, access and account statements remain available for one year through the API or with Swan's Web Banking interface. | +| Status | Explanation | +| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Opened` | Account is open and can be used | +| `Suspended` | Swan can suspend an account if there's suspicion of fraud. While suspended, the account can't be used. | +| `Closing` | While an account is closing, the following events occur:

  1. All cards are canceled.
  2. Incoming SEPA Credit Transfers are automatically returned.
  3. All standing orders are canceled.
  4. All SEPA Direct Debit mandates are canceled.
  5. No new members can be added to the account.
The account status remains `Closing` until:

  • The `Booked` balance is zero.∗
  • The last incoming SEPA Credit Transfer happened more than 30 days ago.
  • The last outgoing SEPA Credit Transfer happened more than 5 days ago.
| +| `Closed` | For all `Closed` accounts, access and account statements remain available for one year through the API or with Swan's Web Banking interface. | :::caution Remaining funds in Closing account ∗ As long as the `Booked` balance doesn't equal zero: @@ -179,11 +179,11 @@ As long as the `Booked` balance doesn't equal zero: 1. The account holder can still log into their Swan Web Banking interface. 1. The account holder can send SEPA Credit Transfers. -If funds remain in a `Closing` account **after 10 years**, Swan transfers the funds to France's *Caisse des dépôts et consignations* (Deposits and Consignments Fund). +If funds remain in a `Closing` account **after 10 years**, Swan transfers the funds to France's _Caisse des dépôts et consignations_ (Deposits and Consignments Fund). ::: ## Guides {#guides} - [Generate an account statement](./overview/guide-generate-statement.mdx) - [Get bank details PDF](./overview/guide-get-bank-details.mdx) -- Review the guide in IBANs: [Get information about an account](./ibans/guide-get-info.mdx) \ No newline at end of file +- Review the guide in IBANs: [Get information about an account](./ibans/guide-get-info.mdx) diff --git a/docs/topics/accounts/memberships/guide-add-multiple.mdx b/docs/topics/accounts/memberships/guide-add-multiple.mdx index bf04ea46799..acce60ede98 100644 --- a/docs/topics/accounts/memberships/guide-add-multiple.mdx +++ b/docs/topics/accounts/memberships/guide-add-multiple.mdx @@ -7,7 +7,7 @@ title: Add multiple memberships Add multiple account memberships with the API. You can add up to **200 memberships** in a single API call. -import PrerequisiteAddMembers from './partials/_add-member-prereq.mdx'; +import PrerequisiteAddMembers from "./partials/_add-member-prereq.mdx"; @@ -17,8 +17,8 @@ import PrerequisiteAddMembers from './partials/_add-member-prereq.mdx'; 1. Add the account ID to which you're adding a invited account member (line 4) and your `consentRedirectUrl` (line 5). 1. Add one invited account member block for each invitee (lines 7-20). 1. In each `restrictedTo` object, add information about the invited account members. - - If you're only granting `canViewAccount` permissions, or you're [not granting any permissions](./index.mdx#permissions-none), the invited account member's `birthDate` isn't required. - - Include a `+` in front of the phone number. + - If you're only granting `canViewAccount` permissions, or you're [not granting any permissions](./index.mdx#permissions-none), the invited account member's `birthDate` isn't required. + - Include a `+` in front of the phone number. 1. Choose `true` for the permissions you'd like to grant to the invited account member. 1. Add the success payload, including any information you'd like to review (line 51). 1. Add the consent URL to the success payload (line 59): `statusInfo` > `AccountMembershipConsentPendingStatusInfo` > `consent` > `consentUrl`. @@ -100,7 +100,6 @@ mutation AddMultipleMembers { } } } - ``` ## Step 2: Get consent to add member {#get-consent} @@ -108,8 +107,8 @@ mutation AddMultipleMembers { The account holder, legal representative of the account, or account member with `canManageAccountMembership` permissions consents to adding all of the invited account members with a single consent process. 1. Get the `consentUrl`, included in the payload (lines 11). - - All consent URLs are the same when adding members in bulk. - - Remember, the payload only provides the `consentUrl` if you added it in step 1.7. + - All consent URLs are the same when adding members in bulk. + - Remember, the payload only provides the `consentUrl` if you added it in step 1.7. 1. Send the `consentUrl` to the account holder, the account's legal representative, or the account member with `canManageAccountMembership` permissions. 1. As soon as consent is provided, they're redirected to your `consentRedirectUrl` defined in the initial API call, which fetches an OAuth 2.0 authorization code and a user access token. 1. **Store** the invited account member's new `accountMembershipId`. You'll need it to bind the membership. @@ -158,6 +157,6 @@ The account holder, legal representative of the account, or account member with ## Step 3: Bind the invited account member {#bind-member} -import AddMemberBind from './partials/_add-member-bind.mdx'; +import AddMemberBind from "./partials/_add-member-bind.mdx"; - \ No newline at end of file + diff --git a/docs/topics/accounts/memberships/guide-add-one.mdx b/docs/topics/accounts/memberships/guide-add-one.mdx index fa95b0b00e4..d93b5a3a094 100644 --- a/docs/topics/accounts/memberships/guide-add-one.mdx +++ b/docs/topics/accounts/memberships/guide-add-one.mdx @@ -6,7 +6,7 @@ title: Add a membership Add a single account membership with the API or from Swan's Web Banking interface. -import PrerequisiteAddMembers from './partials/_add-member-prereq.mdx'; +import PrerequisiteAddMembers from "./partials/_add-member-prereq.mdx"; @@ -17,8 +17,8 @@ import PrerequisiteAddMembers from './partials/_add-member-prereq.mdx'; 1. Call the `addAccountMembership` mutation. 1. Add the account ID to which you're adding a invited account member (line 4). 1. In the `restrictedTo` object, add information about the invited account member (lines 6-9). - - If you're only granting `canViewAccount` permissions, or you're [not granting any permissions](./index.mdx#permissions-none), the invited account member's `birthDate` isn't required. - - Include a `+` in front of the phone number. + - If you're only granting `canViewAccount` permissions, or you're [not granting any permissions](./index.mdx#permissions-none), the invited account member's `birthDate` isn't required. + - Include a `+` in front of the phone number. 1. Choose `true` for the permissions you'd like to grant to the invited account member (lines 13-17). 1. Add the success payload, including any information you'd like to review (line 20). 1. Add the consent URL to the success payload (line 29): `statusInfo` > `AccountMembershipConsentPendingStatusInfo` > `consent` > `consentUrl`. @@ -103,7 +103,7 @@ mutation AddMember { ### Step 3: Bind the invited account member {#bind-member} -import AddMemberBind from './partials/_add-member-bind.mdx'; +import AddMemberBind from "./partials/_add-member-bind.mdx"; @@ -117,4 +117,4 @@ import AddMemberBind from './partials/_add-member-bind.mdx'; 1. Choose their membership permissions. 1. Click **Send invitation**. -![Screenshot of Swan's Web Banking interface highlighting add new member modal](../../../images/topics/accounts/membership-add-2.png) \ No newline at end of file +![Screenshot of Swan's Web Banking interface highlighting add new member modal](../../../images/topics/accounts/membership-add-2.png) diff --git a/docs/topics/accounts/memberships/guide-disable.mdx b/docs/topics/accounts/memberships/guide-disable.mdx index 8a448ff0a97..07a985b7c7e 100644 --- a/docs/topics/accounts/memberships/guide-disable.mdx +++ b/docs/topics/accounts/memberships/guide-disable.mdx @@ -66,4 +66,4 @@ The payload shows that the account membership is `Disabled`. } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/accounts/memberships/guide-suspend-resume.mdx b/docs/topics/accounts/memberships/guide-suspend-resume.mdx index 8e7e9590eb2..83dac0d68e4 100644 --- a/docs/topics/accounts/memberships/guide-suspend-resume.mdx +++ b/docs/topics/accounts/memberships/guide-suspend-resume.mdx @@ -13,9 +13,10 @@ If you use Swan's Web Banking interface, your users can also block and resume ac To block account members permanently, follow the guide to [disable an account membership](./guide-disable.mdx). :::tip Prerequisites + - You have the **`canManageAccountMembership`** permission. - You're not suspending yourself or the legal representative's membership. -::: + ::: ## Suspend a membership {#guide-suspend} @@ -136,7 +137,6 @@ mutation ResumeMembership { } } } - ``` The account holder, legal representative of the account, or account member with `canManageAccountMembership` permissions must consents to resuming the membership. @@ -161,4 +161,4 @@ The account holder, legal representative of the account, or account member with } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/accounts/memberships/guide-update.mdx b/docs/topics/accounts/memberships/guide-update.mdx index 9b4da2636be..86d744ae30f 100644 --- a/docs/topics/accounts/memberships/guide-update.mdx +++ b/docs/topics/accounts/memberships/guide-update.mdx @@ -10,11 +10,12 @@ You can also update the membership to **fix user binding errors**. If you use Swan's Web Banking interface, your users can also update account memberships from their Web Banking accounts. :::tip Prerequisites + - You have the **`canManageAccountMembership`** permission. - The [account membership **status**](./index.mdx#statuses) **isn't** `ConsentPending` or `Disabled`. - You're not updating the legal representative's membership (unless you're the legal representative). - If you're granting a permission to another account member, you have that permission already. You can't grant permissions you don't have. -::: + ::: ## Update a membership {#guide-update} @@ -50,7 +51,6 @@ mutation UpdateMembership { } } } - ``` ```json title="Payload" {6} showLineNumbers @@ -59,7 +59,7 @@ mutation UpdateMembership { "updateAccountMembership": { "__typename": "UpdateAccountMembershipSuccessPayload", "consent": { - "consentUrl": "https://identity.swan.io/consent?consentId=$YOUR_CONSENT_ID&env=Sandbox" + "consentUrl": "https://identity.swan.io/consent?consentId=$YOUR_CONSENT_ID&env=Sandbox" } } } @@ -99,4 +99,4 @@ mutation FixBindingError { } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/accounts/memberships/index.mdx b/docs/topics/accounts/memberships/index.mdx index 0ccaca327c6..5c2c4b41360 100644 --- a/docs/topics/accounts/memberships/index.mdx +++ b/docs/topics/accounts/memberships/index.mdx @@ -4,7 +4,7 @@ title: Account memberships # Account memberships -import AccountMembershipDefinition from '../../definitions/_account-membership.mdx'; +import AccountMembershipDefinition from "../../definitions/_account-membership.mdx"; > @@ -41,13 +41,13 @@ These rights are referred to as **permissions** in the Swan API and Web Banking Swan doesn't offer role-base access control (RBAC). Instead, you choose exactly what each account member can see and do on a member-by-member basis. -| Permission | Account member can... | -| --- | --- | -| `canViewAccount` | View the account and information about the account, including main and virtual IBANs, beneficiaries, payment mandates, list of transactions and transaction details, and more | -| `canManageBeneficiaries` | Add or remove beneficiaries | -| `canInitiatePayments` | Initiate (send) transfers to beneficiaries | -| `canManageAccountMembership` | Add, modify, or remove account memberships | -| `canManageCards` | View, add, and update their own cards and cards for account memberships they manage | +| Permission | Account member can... | +| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `canViewAccount` | View the account and information about the account, including main and virtual IBANs, beneficiaries, payment mandates, list of transactions and transaction details, and more | +| `canManageBeneficiaries` | Add or remove beneficiaries | +| `canInitiatePayments` | Initiate (send) transfers to beneficiaries | +| `canManageAccountMembership` | Add, modify, or remove account memberships | +| `canManageCards` | View, add, and update their own cards and cards for account memberships they manage | ### Granting permissions {#permissions-grant} @@ -69,21 +69,40 @@ Whether your **account members can manage cards** and **for whom** depends on bo `Cards` = true - ✓ View, add, and update cards for self
✓ View, add, and update cards for others∗ - ✓ View, add, and update cards for self
☒ Can't view, add, or update cards for others + + ✓ View, add, and update cards for self +
✓ View, add, and update cards for others∗ + + + ✓ View, add, and update cards for self +
☒ Can't view, add, or update cards for others + `Cards` = false - ✓ View their own cards
☒ Can't add virtual cards for self
✓ If they have an existing virtual card, they can print a physical card for self
☒ Can't update any cards for self
☒ Can't view, add, or update cards for others + + ✓ View their own cards +
☒ Can't add virtual cards for self +
✓ If they have an existing virtual card, they can print a physical + card for self +
☒ Can't update any cards for self +
☒ Can't view, add, or update cards for others + `Cards` = not provided - ✓ View, add, and update cards for self
✓ View, add, and update cards for others - ✓ View, add, and update cards for self
☒ Can't view, add, or update cards for others + + ✓ View, add, and update cards for self +
✓ View, add, and update cards for others + + + ✓ View, add, and update cards for self +
☒ Can't view, add, or update cards for others + -∗ *others* → other account members +∗ _others_ → other account members ### No permissions {#permissions-none} @@ -127,14 +146,14 @@ flowchart LR style U fill:#dfedf2,stroke:#4d8296, stroke-width:3px ``` -| Account membership status | Explanation | -|---|---| -| `ConsentPending` | Request to add an account membership was sent with the `addAccountMembership` mutation and is waiting for the account holder's consent.

Memberships with the status `ConsentPending` can't be updated. If there's an error in the invited account member's information, cancel the invitation and add a new membership with the `addAccountMembership` mutation.

**Next steps**:
  • If the invited account member consents, the status moves to `InvitationSent`
  • If the invited account member doesn't consent, the status moves to `Disabled`
| -| `InvitationSent` | An invitation was sent to the invited account member.

**Next steps**:
  • If the invited account member accepts the invitation and provides personal information that **matches** the information Swan already has about them, the status moves to `Enabled`
  • If the invited account member accepts the invitation, but provides personal information that **doesn't match** the information Swan already has about them, the status moves to `BindingUserError`
  • If the invited account member declines the membership, the status moves to `Disabled`
| -| `Enabled` | All user information matches, the account member has been awarded the correct [identification level](../../users/identifications/index.mdx#levels-processes), and the account member can use their account membership and corresponding permissions. | -| `BindingUserError` | The personal information you submitted about the invited account member doesn't match the information they provide during the [signup process](../../users/index.mdx#signup). The mismatch must be solved before continuing.

Refer to the section on binding user errors for more information. | -| `Suspended` | Account membership is suspended and not available for use.

Account memberships can be suspended for various reasons, including a request from you or the account's legal representative, or a Swan action in the case of suspicious activity.

**Next steps**:
  • Restore the account membership's previous status with the API
  • Cancel the account membership with the API
| -| `Disabled` | Account membership is disabled, is no longer available for use, and can't be restored. | +| Account membership status | Explanation | +| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `ConsentPending` | Request to add an account membership was sent with the `addAccountMembership` mutation and is waiting for the account holder's consent.

Memberships with the status `ConsentPending` can't be updated. If there's an error in the invited account member's information, cancel the invitation and add a new membership with the `addAccountMembership` mutation.

**Next steps**:
  • If the invited account member consents, the status moves to `InvitationSent`
  • If the invited account member doesn't consent, the status moves to `Disabled`
| +| `InvitationSent` | An invitation was sent to the invited account member.

**Next steps**:
  • If the invited account member accepts the invitation and provides personal information that **matches** the information Swan already has about them, the status moves to `Enabled`
  • If the invited account member accepts the invitation, but provides personal information that **doesn't match** the information Swan already has about them, the status moves to `BindingUserError`
  • If the invited account member declines the membership, the status moves to `Disabled`
| +| `Enabled` | All user information matches, the account member has been awarded the correct [identification level](../../users/identifications/index.mdx#levels-processes), and the account member can use their account membership and corresponding permissions. | +| `BindingUserError` | The personal information you submitted about the invited account member doesn't match the information they provide during the [signup process](../../users/index.mdx#signup). The mismatch must be solved before continuing.

Refer to the section on binding user errors for more information. | +| `Suspended` | Account membership is suspended and not available for use.

Account memberships can be suspended for various reasons, including a request from you or the account's legal representative, or a Swan action in the case of suspicious activity.

**Next steps**:
  • Restore the account membership's previous status with the API
  • Cancel the account membership with the API
| +| `Disabled` | Account membership is disabled, is no longer available for use, and can't be restored. | ### Binding user errors {#binding-errors} @@ -161,12 +180,12 @@ However, with a **detailed agreement with Swan**, you might be allowed to bypass Even with identification removed, only memberships with certain permissions can bypass identification. -| ✓ Can bypass identification | ☒ Can't bypass identification | -| :---: | :---: | +| ✓ Can bypass identification | ☒ Can't bypass identification | +| :------------------------------------: | :-----------------------------------------------------------------------------------: | | `canViewAccount`
`canManageCards` | `canManageAccountMembership`
`canInitiatePayments`
`canManageBeneficiaries` | Note that memberships created before identification is removed still need to verify their identity. -Adding this configuration **isn't retroactive**. +Adding this configuration **isn't retroactive**. Contact your Technical Account Manager to ask about removing identification. ## Closed accounts and memberships {#closed} @@ -183,7 +202,7 @@ Account memberships have a `version` attribute. When a new membership is added, the `version` is `0`, then increases by a factor of 1 with each change. Changes includes including suspending, resuming, and updating the membership. -## Sequence diagram {#diagrams-add} +## Sequence diagram {#diagrams-add} > **Adding account memberships** @@ -208,6 +227,7 @@ participant S as Swan P ->> S: Calls `bindAccountMembership` mutation with
`accountMembershipId` using invitee's user access token S ->> P: Confirms account membership success,
meaning invitee is bound to account ``` + ∗ The **requester** can be the account holder, the account's legal representative, or an account member with the `canManageAccountMembership` permission. The requester provides consent (diagram line 4). @@ -217,4 +237,4 @@ The requester provides consent (diagram line 4). - [Add multiple memberships](./guide-add-multiple.mdx) - [Update a membership](./guide-update.mdx) (use to fix a user binding error) - [Suspend (temporarily block) or resume a membership](./guide-suspend-resume.mdx) -- [Disable (permanently block) a membership](./guide-disable.mdx) \ No newline at end of file +- [Disable (permanently block) a membership](./guide-disable.mdx) diff --git a/docs/topics/accounts/memberships/partials/_add-member-bind.mdx b/docs/topics/accounts/memberships/partials/_add-member-bind.mdx index c79888a3241..43f4062d079 100644 --- a/docs/topics/accounts/memberships/partials/_add-member-bind.mdx +++ b/docs/topics/accounts/memberships/partials/_add-member-bind.mdx @@ -14,9 +14,7 @@ If the API returns a [user binding error](../index.mdx#binding-errors), please [ ```graphql {3} showLineNumbers mutation BindMember { - bindAccountMembership( - input: { accountMembershipId: "$YOUR_MEMBERSHIP_ID" } - ) { + bindAccountMembership(input: { accountMembershipId: "$YOUR_MEMBERSHIP_ID" }) { ... on BindAccountMembershipSuccessPayload { __typename accountMembership { @@ -56,4 +54,4 @@ mutation BindMember { } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/accounts/memberships/partials/_add-member-prereq.mdx b/docs/topics/accounts/memberships/partials/_add-member-prereq.mdx index e8e7665380b..64e554a15e8 100644 --- a/docs/topics/accounts/memberships/partials/_add-member-prereq.mdx +++ b/docs/topics/accounts/memberships/partials/_add-member-prereq.mdx @@ -2,4 +2,4 @@ To add new members, you must authenticate with a [user access token](../../../../developers/using-api/authentication/index.mdx#tokens-user) associated with an existing account member with the permission `canManageAccountMembership`. Only account members with the permission `canManageAccountMembership` can add account members. -::: \ No newline at end of file +::: diff --git a/docs/topics/accounts/overview/guide-generate-statement.mdx b/docs/topics/accounts/overview/guide-generate-statement.mdx index 9c6f4bf0a31..59f8a727605 100644 --- a/docs/topics/accounts/overview/guide-generate-statement.mdx +++ b/docs/topics/accounts/overview/guide-generate-statement.mdx @@ -68,4 +68,3 @@ The mutation returns all of the requested information as well as the status `Pen } } ``` - diff --git a/docs/topics/accounts/overview/guide-get-bank-details.mdx b/docs/topics/accounts/overview/guide-get-bank-details.mdx index 973b5159e3d..57fed0d37c0 100644 --- a/docs/topics/accounts/overview/guide-get-bank-details.mdx +++ b/docs/topics/accounts/overview/guide-get-bank-details.mdx @@ -9,9 +9,10 @@ Download a PDF of your bank details. ![Image of a sample bank details PDF](../../../images/topics/accounts/bank-details-plain.png) :::tip Prerequisites + 1. The account's `accountId`, found on your **Dashboard** > **Accounts** page. 1. The account must have been created after 16 November 2023. If you'd like to get bank details for an older account, please skip to the [guide for older accounts](#details-old). -::: + ::: ## API guide {#guide} @@ -40,7 +41,7 @@ query getBankDetails { { "data": { "account": { - "bankDetails": "$DOWNLOAD_URL", + "bankDetails": "$DOWNLOAD_URL" } } } @@ -55,7 +56,7 @@ Follow the guide for older accounts instead. If you'd like to get a bank details PDF for an older account, you have two options. -| Actors | Explanation | -| --- | --- | -| You with the API |
  1. Call the `updateAccount` mutation with the `accountId`.
  2. "Change" the account language to the account's current language. This triggers the API to generate the PDF, even though the language doesn't change.
| -| Your end user with Web Banking | If you use **Swan's Web Banking interface**, your users can trigger the generation of their bank details PDF.

  1. Go to **Web Banking** > **Account** > **Settings**.
  2. Click **Save** without changing anything, which triggers the API.
  3. After a few minutes, the bank details PDF is available on **Account** > **Main IBAN**.
| \ No newline at end of file +| Actors | Explanation | +| ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| You with the API |
  1. Call the `updateAccount` mutation with the `accountId`.
  2. "Change" the account language to the account's current language. This triggers the API to generate the PDF, even though the language doesn't change.
| +| Your end user with Web Banking | If you use **Swan's Web Banking interface**, your users can trigger the generation of their bank details PDF.

  1. Go to **Web Banking** > **Account** > **Settings**.
  2. Click **Save** without changing anything, which triggers the API.
  3. After a few minutes, the bank details PDF is available on **Account** > **Main IBAN**.
| diff --git a/docs/topics/capital-deposits/france/guide-upload-documents.mdx b/docs/topics/capital-deposits/france/guide-upload-documents.mdx index 40a94643ff8..eaaf8776fac 100644 --- a/docs/topics/capital-deposits/france/guide-upload-documents.mdx +++ b/docs/topics/capital-deposits/france/guide-upload-documents.mdx @@ -9,7 +9,7 @@ This page explains how to upload documents for steps 4 and 8 of a **multi-step p Refer to the [France guide](./guide.mdx) for the whole process. ::: -## Step 1: Generate upload URL {#generate-url} +## Step 1: Generate upload URL {#generate-url} Use the `generateCapitalDepositDocumentUploadUrl` mutation to generate an upload URL. @@ -67,4 +67,4 @@ curl --upload-file $YOUR_FILE https://$UPLOAD_URL ## Step 4: Repeat {#repeat-steps} Repeat steps 1-3 to upload additional documents, as needed. -You can also change the documents you already uploaded as long as the [document status](../index.mdx#documents-statuses) remains `Uploaded`. \ No newline at end of file +You can also change the documents you already uploaded as long as the [document status](../index.mdx#documents-statuses) remains `Uploaded`. diff --git a/docs/topics/capital-deposits/france/guide.mdx b/docs/topics/capital-deposits/france/guide.mdx index ed62226f467..26fa36ac8ac 100644 --- a/docs/topics/capital-deposits/france/guide.mdx +++ b/docs/topics/capital-deposits/france/guide.mdx @@ -58,7 +58,7 @@ For capital deposits, please meet the following [identification levels](../../us - Shareholder accounts: PVID - Company accounts: Expert -::: + ::: ## Step 5: Transfer capital funds {#transfer-capital-funds} @@ -110,4 +110,4 @@ This process usually takes up to **two business days**. :::success Congratulations As soon as the capital funds arrive in your company's Swan account, the capital deposit process is complete. **Best of luck with your endeavor!** -::: \ No newline at end of file +::: diff --git a/docs/topics/capital-deposits/index.mdx b/docs/topics/capital-deposits/index.mdx index 70d9cbb2e81..801dee357c3 100644 --- a/docs/topics/capital-deposits/index.mdx +++ b/docs/topics/capital-deposits/index.mdx @@ -61,14 +61,14 @@ flowchart LR style V fill:#dfedf2,stroke:#4d8296,stroke-width:3px ``` -| Case status| Explanation | -| --- | --- | -| `WaitingForRequirements` | Default status after the `CapitalDepositCase` is created, providing there were no technical issues.

You complete the company onboarding process and upload required documents to pass to the next status. | -| `WaitingForShareDepositCertificate` | **_Notary reviews_** _the deposited funds and submitted documents, then creates the certificate and uploads it to Swan_. | -| `WaitingForRegisterExtract` | You upload your register extract for notary review. | -| `WaitingForNotaryTransfer` | **_Notary reviews_** _the register extract_. | -| `Canceled` | You can request to cancel a `CapitalDepositCase` any time before completion by sending an email to support@swan.io. When a case is canceled, the shareholder is also canceled. | -| `Completed` | Notary reviewed and approved all elements and transferred the funds to the new company; the process is complete. | +| Case status | Explanation | +| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `WaitingForRequirements` | Default status after the `CapitalDepositCase` is created, providing there were no technical issues.

You complete the company onboarding process and upload required documents to pass to the next status. | +| `WaitingForShareDepositCertificate` | **_Notary reviews_** _the deposited funds and submitted documents, then creates the certificate and uploads it to Swan_. | +| `WaitingForRegisterExtract` | You upload your register extract for notary review. | +| `WaitingForNotaryTransfer` | **_Notary reviews_** _the register extract_. | +| `Canceled` | You can request to cancel a `CapitalDepositCase` any time before completion by sending an email to support@swan.io. When a case is canceled, the shareholder is also canceled. | +| `Completed` | Notary reviewed and approved all elements and transferred the funds to the new company; the process is complete. | ## Required documents {#documents} @@ -99,7 +99,8 @@ All documents are **mandatory** unless marked _if requested_. - Identity document proving the shareholder's identity (collected during identification) + Identity document proving the shareholder's identity (collected during + identification) ProofOfIdentity @@ -178,12 +179,12 @@ flowchart LR style F fill:#fffdf4,stroke:#cca922 ``` -| Document status | Explanation | -| --- | --- | -| `Pending` | Place for the document is created, but the document isn't uploaded yet. | -| `Uploaded` | Document successfully uploaded; you can change and re-upload the document as long it retains the status `Uploaded`

**Next step**: Swan reviews the document and either validates or refuses it. | -| `Validated` | Swan validated the document. | -| `Refused` | Document doesn't meet requirements.

**Next step**: Upload a new document, then the status returns to `Uploaded`. | +| Document status | Explanation | +| --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Pending` | Place for the document is created, but the document isn't uploaded yet. | +| `Uploaded` | Document successfully uploaded; you can change and re-upload the document as long it retains the status `Uploaded`

**Next step**: Swan reviews the document and either validates or refuses it. | +| `Validated` | Swan validated the document. | +| `Refused` | Document doesn't meet requirements.

**Next step**: Upload a new document, then the status returns to `Uploaded`. | ## Shareholders {#shareholders} @@ -240,14 +241,14 @@ flowchart LR style F fill:#fffdf4,stroke:#cca922 ``` -| Shareholder status | Explanation | -| --- | --- | -| `PendingOnboarding` | Default status after the shareholder is created; shareholder must **complete their onboarding** and their **account must be created** to continue. | -| `WaitingForVerification` | Possible status if the account holder verification isn't complete at the moment the shareholder's account is created.

_Status bypassed if the [account holder status](../onboarding/account-holders/index.mdx#verification-process) is already `Verified`_. | -| `WaitingForTransfer` | Waiting for the shareholder to deposit the full share capital in their Swan account created during onboarding, which **must** be transferred from an account belonging to the shareholder. | -| `CapitalTransferred` | Waiting for the rest of the capital deposit case to be ready and the funds to be transferred to the notary. | -| `CapitalFundsWiredToNotary` | Still waiting for the rest of the capital deposit case to be ready, but now the funds are with the notary. | -| `CapitalDepositCanceled` | When a [`CapitalDepositCase` is `Canceled`](#case-statuses), the shareholder status changes to `CapitalDepositCanceled`.

If an account was already created for the shareholder, the account is also closed automatically. | +| Shareholder status | Explanation | +| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `PendingOnboarding` | Default status after the shareholder is created; shareholder must **complete their onboarding** and their **account must be created** to continue. | +| `WaitingForVerification` | Possible status if the account holder verification isn't complete at the moment the shareholder's account is created.

_Status bypassed if the [account holder status](../onboarding/account-holders/index.mdx#verification-process) is already `Verified`_. | +| `WaitingForTransfer` | Waiting for the shareholder to deposit the full share capital in their Swan account created during onboarding, which **must** be transferred from an account belonging to the shareholder. | +| `CapitalTransferred` | Waiting for the rest of the capital deposit case to be ready and the funds to be transferred to the notary. | +| `CapitalFundsWiredToNotary` | Still waiting for the rest of the capital deposit case to be ready, but now the funds are with the notary. | +| `CapitalDepositCanceled` | When a [`CapitalDepositCase` is `Canceled`](#case-statuses), the shareholder status changes to `CapitalDepositCanceled`.

If an account was already created for the shareholder, the account is also closed automatically. | ## Sequence diagram {#diagram} @@ -269,4 +270,4 @@ participant N as Notary P -->> S: Uploads proof of registration S ->> N: Sends proof of registration & bank account details N -->> S: Transfers funds to Swan company account -``` \ No newline at end of file +``` diff --git a/docs/topics/cards/design/guide-custom.mdx b/docs/topics/cards/design/guide-custom.mdx index b7c6508fc88..484742d5228 100644 --- a/docs/topics/cards/design/guide-custom.mdx +++ b/docs/topics/cards/design/guide-custom.mdx @@ -7,7 +7,7 @@ title: Customize your card design You can design a custom card for your Swan card holders. Custom designs, like standard ones, are used for virtual, physical, and digital cards. -import CustomCardDesign from '../partials/_custom-card-timeline.mdx'; +import CustomCardDesign from "../partials/_custom-card-timeline.mdx"; @@ -22,23 +22,24 @@ import CustomCardDesign from '../partials/_custom-card-timeline.mdx'; 1. After your design is validated, samples of your card will be printed and delivered for final approval. 1. As soon as you approve the sample, your cards can be printed and delivered to your card holders. -import CustomCardLockedElements from '../partials/_custom-locked-elements.mdx'; +import CustomCardLockedElements from "../partials/_custom-locked-elements.mdx"; :::caution Locked elements The following elements **can't be changed**: + ::: ## Choose your customizations {#customizations} -| Element | Options | -| --- | --- | -| Chip color |
  • Gold (default)
  • Silver (2,000 cards minimum, additional cost)
| -| Type of plastic
*(no metal available)* |
  • Standard plastic
  • Recycled plastic 85% or 100% (adds up to 12 weeks as recycled plastic is shipped by boat to reduce the carbon footprint)
| -| Finish |
  • Matte
  • Gloss
  • Partially matte or gloss (might be referred to as *selective varnish*; additional cost)
  • Logo printed with brilliant effect (additional cost)
  • Other effects, such as metallic, fluorescent silkscreen, and more, are also available at an additional cost
| -| Color | You can customize your color for the front, back, and edges.

  • **Dyed PVC**
    • Front, back, and edges are dyed the same color
    • Additional cost
  • **Edge color**
    • Choose a different color for the edges
    • Additional cost
  • **Face color only**
    • Might be referred to as *quadri-faced color*
    • Front and back are dyed the same color, while the edges stay white
    • No additional cost
  • **Custom magnetic band color**
    • Default color is black
    • Choose a different color for an additional cost
Several colors are available. Please choose your color from the colors listed in the following section. Note that if the color you choose clashes with the Mastercard logo, the Mastercard logo will be outlined in white. | -| Text style | While the font must be Maison Neue, the styling of the text is up to you. Styling is applied to the card holder name, card number, identifier, expiry date, CVC, and the debit or business label.

  • **Durable graphics** (default, cost included)
    • Durable color foil applied to card
    • Available in white, black, silver, or gold (other colors available but require validation)
  • **Embossed**
    • Text is raised off the card
    • Additional cost
  • **Thermal printing**
    • Long-lasting technique that carves the text out of the card
    • Additional cost
  • **Laser**
    • Long-lasting technique that burns the text into the card with a laser
    • Additional cost
| -| Additional line |
  • Add an additional line to the front of your card (example: add your company name)
  • Line appears under the card holder name
  • Content must be approved
  • Limit: 26 characters
| +| Element | Options | +| ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Chip color |
  • Gold (default)
  • Silver (2,000 cards minimum, additional cost)
| +| Type of plastic
_(no metal available)_ |
  • Standard plastic
  • Recycled plastic 85% or 100% (adds up to 12 weeks as recycled plastic is shipped by boat to reduce the carbon footprint)
| +| Finish |
  • Matte
  • Gloss
  • Partially matte or gloss (might be referred to as _selective varnish_; additional cost)
  • Logo printed with brilliant effect (additional cost)
  • Other effects, such as metallic, fluorescent silkscreen, and more, are also available at an additional cost
| +| Color | You can customize your color for the front, back, and edges.

  • **Dyed PVC**
    • Front, back, and edges are dyed the same color
    • Additional cost
  • **Edge color**
    • Choose a different color for the edges
    • Additional cost
  • **Face color only**
    • Might be referred to as _quadri-faced color_
    • Front and back are dyed the same color, while the edges stay white
    • No additional cost
  • **Custom magnetic band color**
    • Default color is black
    • Choose a different color for an additional cost
Several colors are available. Please choose your color from the colors listed in the following section. Note that if the color you choose clashes with the Mastercard logo, the Mastercard logo will be outlined in white. | +| Text style | While the font must be Maison Neue, the styling of the text is up to you. Styling is applied to the card holder name, card number, identifier, expiry date, CVC, and the debit or business label.

  • **Durable graphics** (default, cost included)
    • Durable color foil applied to card
    • Available in white, black, silver, or gold (other colors available but require validation)
  • **Embossed**
    • Text is raised off the card
    • Additional cost
  • **Thermal printing**
    • Long-lasting technique that carves the text out of the card
    • Additional cost
  • **Laser**
    • Long-lasting technique that burns the text into the card with a laser
    • Additional cost
| +| Additional line |
  • Add an additional line to the front of your card (example: add your company name)
  • Line appears under the card holder name
  • Content must be approved
  • Limit: 26 characters
| ### Colors {#customizations-colors} @@ -89,10 +90,10 @@ style D fill:#4FADE4,stroke:#4FADE4,color:#fff style E fill:#5199F8,stroke:#5199F8,color:#fff ``` -*Colors marked with an asterisk (\*) can't be used to dye the edges.* +_Colors marked with an asterisk (\*) can't be used to dye the edges._ ## Choose your packaging {#packaging} -import Packaging from '../partials/_packaging.mdx'; +import Packaging from "../partials/_packaging.mdx"; - \ No newline at end of file + diff --git a/docs/topics/cards/design/guide-standard.mdx b/docs/topics/cards/design/guide-standard.mdx index a7e91791b56..d87508f191f 100644 --- a/docs/topics/cards/design/guide-standard.mdx +++ b/docs/topics/cards/design/guide-standard.mdx @@ -29,7 +29,7 @@ You can [customize your packaging](./index.mdx#packaging) for standard cards.. ## Configure your standard card {#configure} 1. Open the card product you'd like to configure. -Remember to start on **Dashboard** > **Settings** > **Cards**. + Remember to start on **Dashboard** > **Settings** > **Cards**. ![Screenshot of the Dashboard cards settings page with two card products](../../../images/topics/cards/cards-configure-1.png) @@ -38,7 +38,7 @@ Remember to start on **Dashboard** > **Settings** > **Cards**. 4. Upload your logo, resizing if needed. Don't hesitate to refer to the next section for more information about logos. 5. Click **Save**. -*Note that you can also preview your card in 3D from this page.* +_Note that you can also preview your card in 3D from this page._ After clicking **Save**, your updates are available immediately in Sandbox. However, Swan needs to **review changes to Live cards**. @@ -58,8 +58,8 @@ Please follow these guidelines to when creating your `.svg` file, both so your l 1. The SVG file can be a maximum of **100 kilobytes** (KB). 1. Use **black monochrome**. - - Swan will change it to white for standard black cards. - - If you'd prefer other color options, consider [designing a custom card](./guide-custom.mdx). + - Swan will change it to white for standard black cards. + - If you'd prefer other color options, consider [designing a custom card](./guide-custom.mdx). 1. Don't use any **opacity** settings. Don't apply the fill-opacity attribute. 1. Don't use any **non-vectorial text**, meaning no text tag. 1. Don't use layering, meaning there should be **no overlaid elements**. @@ -67,8 +67,8 @@ Please follow these guidelines to when creating your `.svg` file, both so your l Here are some tips to make sure your **logo meets requirements**. -| Problem | Explanation | -| --- | --- | -| Logo appearing too small | If your logo is appearing **smaller than expected**, check that your logo fits perfectly in the SVG viewbox attribute. Any padding between your logo and the viewbox edges will appear on your card. | +| Problem | Explanation | +| ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Logo appearing too small | If your logo is appearing **smaller than expected**, check that your logo fits perfectly in the SVG viewbox attribute. Any padding between your logo and the viewbox edges will appear on your card. | | Empty rectangle instead of logo | If you see an **empty rectangle** (black or white) instead of your uploaded logo, there might be an issue with your SVG file. Check that there are no overlaid elements in your file. If there are overlaid elements, remove them and upload the new file. | -| Logo isn't the correct color | If your logo is showing up as black on a black card, or white on a silver card, there might be an issue with your SVG file. Make sure you're not using CSS to apply your color, which is only compatible with browser renderers. | \ No newline at end of file +| Logo isn't the correct color | If your logo is showing up as black on a black card, or white on a silver card, there might be an issue with your SVG file. Make sure you're not using CSS to apply your color, which is only compatible with browser renderers. | diff --git a/docs/topics/cards/design/index.mdx b/docs/topics/cards/design/index.mdx index b083b1d6f0a..7df4820a683 100644 --- a/docs/topics/cards/design/index.mdx +++ b/docs/topics/cards/design/index.mdx @@ -13,7 +13,7 @@ Your design is: ## Card product {#card-product} -import CardProductExplanation from '../partials/_card-product.mdx'; +import CardProductExplanation from "../partials/_card-product.mdx"; @@ -41,23 +41,23 @@ Silver cards feature your logo in **black monochrome**. If the standard black or silver designs won't meet your needs, or you want customize more to your brand's style, Swan also offers [custom card designs](./guide-custom.mdx). The process includes both your Technical Account Manager (TAM) and your general Account Manager. -import CustomCardDesign from '../partials/_custom-card-timeline.mdx'; +import CustomCardDesign from "../partials/_custom-card-timeline.mdx"; Note that the following elements **can't be customized**: -import CustomCardLockedElements from '../partials/_custom-locked-elements.mdx'; +import CustomCardLockedElements from "../partials/_custom-locked-elements.mdx"; ## Packaging {#packaging} -import Packaging from '../partials/_packaging.mdx'; +import Packaging from "../partials/_packaging.mdx"; ## Guides {#guides} - [Configure your standard card](./guide-standard.mdx) -- [Customize your card design](./guide-custom.mdx) \ No newline at end of file +- [Customize your card design](./guide-custom.mdx) diff --git a/docs/topics/cards/digital/guide-add.mdx b/docs/topics/cards/digital/guide-add.mdx index c5aeabb409f..d7127b057a8 100644 --- a/docs/topics/cards/digital/guide-add.mdx +++ b/docs/topics/cards/digital/guide-add.mdx @@ -6,7 +6,7 @@ title: Add digital cards Learn how to add digital cards to Wallets. -import CompleteProvisioningGuide from '../partials/_provisioning-guide.mdx'; +import CompleteProvisioningGuide from "../partials/_provisioning-guide.mdx"; @@ -72,4 +72,4 @@ mutation DigitalApplePay { } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/cards/digital/guide-cancel.mdx b/docs/topics/cards/digital/guide-cancel.mdx index 6a7c4dbfcc4..51a7bc4e331 100644 --- a/docs/topics/cards/digital/guide-cancel.mdx +++ b/docs/topics/cards/digital/guide-cancel.mdx @@ -4,4 +4,4 @@ title: Cancel digital cards # Cancel digital cards -When you wish to instantly and permanently delete an Apple Pay or Google Pay digital card, you must use the `cancelDigitalCard` mutation. \ No newline at end of file +When you wish to instantly and permanently delete an Apple Pay or Google Pay digital card, you must use the `cancelDigitalCard` mutation. diff --git a/docs/topics/cards/digital/index.mdx b/docs/topics/cards/digital/index.mdx index c2a35daa7f6..67716b9500d 100644 --- a/docs/topics/cards/digital/index.mdx +++ b/docs/topics/cards/digital/index.mdx @@ -4,7 +4,7 @@ title: Digital cards # Digital cards -import DigitalCardsDefinition from '../../definitions/_cards-digital.mdx'; +import DigitalCardsDefinition from "../../definitions/_cards-digital.mdx"; > @@ -22,7 +22,7 @@ You need to certify your digital card integration before your card holders can u Send an email to integration@swan.io specifying that you'd like to activate in-app provisioning for digital payments. The team will help you get started. -import CompleteProvisioningGuide from '../partials/_provisioning-guide.mdx'; +import CompleteProvisioningGuide from "../partials/_provisioning-guide.mdx"; @@ -71,16 +71,16 @@ flowchart LR style U fill:#dfedf2,stroke:#4d8296, stroke-width:3px ``` -| Digital card status | Explanation | -|---|---| -| `ConsentPending` | Request to add a digital card was sent with the `addDigitalCard` mutation and is waiting for the card holder's consent

**Next steps**:
  • If the card holder consents, the status moves to `Pending`
  • If the card holder doesn't consent, the status moves to `Canceled`
  • If you use the API to cancel the card, the status moves to `Canceled`
| -| `Pending` | Card holder added the card to their digital Wallet manually, or they provided consent after you added the card with the API

**Next steps**:
  • If the card is added to their Wallet successfully, the status moves to `Enabled`
  • If the card is declined during provisioning, the status moves to `Declined`
| -| `Enabled` | Digital card is available for use

**Next steps**:
  • Cards can retain the status `Enabled` indefinitely
  • `Enabled` cards can also be `Suspended` and `Canceled`
| -| `Suspended` | Digital card is suspended and not available for use

*Cards can be suspended for various reasons, including a request from you or the card holder, or a Swan action in the case of suspicious activity.*

**Next steps**:
  • Restore the card's previous status with the API
  • Cancel the card with the API
| -| `Canceled` | Card is canceled, no longer available for use, and can't be reactivated | -| `Declined` | Card was declined during the provisioning process | +| Digital card status | Explanation | +| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `ConsentPending` | Request to add a digital card was sent with the `addDigitalCard` mutation and is waiting for the card holder's consent

**Next steps**:
  • If the card holder consents, the status moves to `Pending`
  • If the card holder doesn't consent, the status moves to `Canceled`
  • If you use the API to cancel the card, the status moves to `Canceled`
| +| `Pending` | Card holder added the card to their digital Wallet manually, or they provided consent after you added the card with the API

**Next steps**:
  • If the card is added to their Wallet successfully, the status moves to `Enabled`
  • If the card is declined during provisioning, the status moves to `Declined`
| +| `Enabled` | Digital card is available for use

**Next steps**:
  • Cards can retain the status `Enabled` indefinitely
  • `Enabled` cards can also be `Suspended` and `Canceled`
| +| `Suspended` | Digital card is suspended and not available for use

_Cards can be suspended for various reasons, including a request from you or the card holder, or a Swan action in the case of suspicious activity._

**Next steps**:
  • Restore the card's previous status with the API
  • Cancel the card with the API
| +| `Canceled` | Card is canceled, no longer available for use, and can't be reactivated | +| `Declined` | Card was declined during the provisioning process | ## Guides {#guides} - [Add digital cards to Apple Pay and Google Pay](./guide-add.mdx) -- [Cancel a digital card](./guide-cancel.mdx) \ No newline at end of file +- [Cancel a digital card](./guide-cancel.mdx) diff --git a/docs/topics/cards/digital/sandbox.mdx b/docs/topics/cards/digital/sandbox.mdx index 3e0231d3b1f..3b5c5821f6e 100644 --- a/docs/topics/cards/digital/sandbox.mdx +++ b/docs/topics/cards/digital/sandbox.mdx @@ -6,4 +6,4 @@ title: Sandbox ## Simulate manually provisioning a digital card -## Simulate finalizing in-app provisioning of a digital card \ No newline at end of file +## Simulate finalizing in-app provisioning of a digital card diff --git a/docs/topics/cards/index.mdx b/docs/topics/cards/index.mdx index 07fa6fde83f..8fc79387c44 100644 --- a/docs/topics/cards/index.mdx +++ b/docs/topics/cards/index.mdx @@ -6,7 +6,7 @@ title: Cards overview ## Overview {#overview} -import CardsOverview from '../partials/_cards-overview.mdx'; +import CardsOverview from "../partials/_cards-overview.mdx"; @@ -21,19 +21,19 @@ Review the list of all [sensitive operations that require consent](../users/cons ## Card formats {#formats} -import VirtualCardsDefinition from '../definitions/_cards-virtual.mdx'; +import VirtualCardsDefinition from "../definitions/_cards-virtual.mdx"; -import PhysicalCardsDefinition from '../definitions/_cards-physical.mdx'; +import PhysicalCardsDefinition from "../definitions/_cards-physical.mdx"; -import DigitalCardsDefinition from '../definitions/_cards-digital.mdx'; +import DigitalCardsDefinition from "../definitions/_cards-digital.mdx"; Swan offers three card formats. -| Card formats | Description | -| --- | --- | -| [Virtual](./virtual/index.mdx) | | +| Card formats | Description | +| -------------------------------- | --------------------------- | +| [Virtual](./virtual/index.mdx) | | | [Physical](./physical/index.mdx) | | -| [Digital](./digital/index.mdx) | | +| [Digital](./digital/index.mdx) | | ### Creation order {#formats-order} @@ -69,7 +69,7 @@ No matter how many members are attached to an account—1, 50, or 500—you can Every member has access to the same pot of money. Any payments made with the card are debited from the account the member belongs to. -Thus, an account membership must be created *before* adding a card for an account member. +Thus, an account membership must be created _before_ adding a card for an account member. Account members can also add cards for themselves or other account members, determined by their [membership permissions](../accounts/memberships/index.mdx#permissions-cards). @@ -80,8 +80,8 @@ Account members can also add cards for themselves or other account members, dete 1. MyBrand is a verified account holder with a company account. 1. As an account holder, MyBrand has one account with money in it. 1. Attached to the account are three account members: Rae, Mika, and Sasha. - 1. Each member is identified by their email address. - 1. They all have different permissions. + 1. Each member is identified by their email address. + 1. They all have different permissions. 1. Only two members, Rae and Mika, have cards associated with their account membership. Any money spent with these cards is taken from the MyBrand company account. ### One membership, one card {#cards-account-memberships-example-one} @@ -105,7 +105,7 @@ This allows the users to choose their card language. ## Card product {#card-product} -import CardProductExplanation from './partials/_card-product.mdx'; +import CardProductExplanation from "./partials/_card-product.mdx"; @@ -120,17 +120,17 @@ You must have one dedicated card product per hub, though the designs can be iden Use **settings to manage your card product** and all virtual, physical, and digital cards associated with it. -| Setting | Explanation | Update with | -| --- | --- | :---: | -| Name | You can name the card product for easy reference from your Dashboard. | Dashboard | -| Allow physical cards | Decide whether physical cards are allowed to be issued for this card product. | Dashboard | -| Suspend | Suspend this card product. Your users won't be able to add new cards with this card product. You'll need to contact Swan Support to reactivate the card product. | Dashboard | -| `cardContractExpiryDate` | Date you'd like the card to expire.

Leave it empty if you don't want to set an expiration date, in which case, cards are renewed automatically every three years. | API | -| `international` | Allow or disable payments outside of the account holder's country. | API | -| `withdrawal` | Allow or disable cash withdrawals, such as at ATMs. | API | -| `nonMainCurrencyTransactions` | Allow or disable transactions outside of the card's currency. | API | -| `eCommerce` | Allow or disable transactions on eCommerce sites or for online transactions. | API | -| `spendingLimit` | Fixed by the account holder or qualifying account member, within the limits set by Swan. | API | +| Setting | Explanation | Update with | +| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------: | +| Name | You can name the card product for easy reference from your Dashboard. | Dashboard | +| Allow physical cards | Decide whether physical cards are allowed to be issued for this card product. | Dashboard | +| Suspend | Suspend this card product. Your users won't be able to add new cards with this card product. You'll need to contact Swan Support to reactivate the card product. | Dashboard | +| `cardContractExpiryDate` | Date you'd like the card to expire.

Leave it empty if you don't want to set an expiration date, in which case, cards are renewed automatically every three years. | API | +| `international` | Allow or disable payments outside of the account holder's country. | API | +| `withdrawal` | Allow or disable cash withdrawals, such as at ATMs. | API | +| `nonMainCurrencyTransactions` | Allow or disable transactions outside of the card's currency. | API | +| `eCommerce` | Allow or disable transactions on eCommerce sites or for online transactions. | API | +| `spendingLimit` | Fixed by the account holder or qualifying account member, within the limits set by Swan. | API | ### International {#international} @@ -154,8 +154,8 @@ Spending limits are imposed for several reasons. 1. Companies impose spending limits to reduce fraud risk. 1. Individual card holders and companies might impose spending limits over a rolling period to protect their funds when issuing cards to other people. - - A company might impose a 100€ spending limits over 7 days rolling for travel expenses. - - A parent might give a card to their child, imposing a 50€ spending limit to protect their own money. + - A company might impose a 100€ spending limits over 7 days rolling for travel expenses. + - A parent might give a card to their child, imposing a 50€ spending limit to protect their own money. 1. Financial institutions (like Swan) impose spending limits to protect themselves from liability. :::info Rolling spending limit @@ -170,24 +170,24 @@ All spending limits are for a period of **30 days rolling**. Note that **partners** (you) can define spending limits for all card types, while **account holders** can lower spending limits when creating cards. -| Transaction type | Impacts | Amount | -| --- | --- | --- | -| Card payment | Company **card holder** | 10,000€ per card | -| Card payment | Individual **card holder** | 5,000€ per card | -| ATM withdrawal | Company **account** holder | 3,000€ total | -| ATM withdrawal | Individual **account** holder | 1,500€ total | +| Transaction type | Impacts | Amount | +| ---------------- | ----------------------------- | ---------------- | +| Card payment | Company **card holder** | 10,000€ per card | +| Card payment | Individual **card holder** | 5,000€ per card | +| ATM withdrawal | Company **account** holder | 3,000€ total | +| ATM withdrawal | Individual **account** holder | 1,500€ total | Consider the following examples: - Company card holder card transaction: - - One of your **company card holders** has five company cards. - - They can spend a maximum of 50,000€ between the 5 cards during a 30-day period. - - Expenses for a single card can't exceed 10,000€. + - One of your **company card holders** has five company cards. + - They can spend a maximum of 50,000€ between the 5 cards during a 30-day period. + - Expenses for a single card can't exceed 10,000€. - Individual account holder ATM withdrawal: - - An **individual account holder** has two individual cards. - - They can withdrawal a maximum of 1,500€ total between the 2 cards during a 30-day period. - - They **can't withdrawal** a total of 3,000€—the maximum is per account holder. - - The 1,500€ also counts toward their **card** transaction maximum of 5,000€ per card. + - An **individual account holder** has two individual cards. + - They can withdrawal a maximum of 1,500€ total between the 2 cards during a 30-day period. + - They **can't withdrawal** a total of 3,000€—the maximum is per account holder. + - The 1,500€ also counts toward their **card** transaction maximum of 5,000€ per card. :::caution Changing spending limits If you feel your use case requires an increased spending limit, create a ticket from your Swan Dashboard. @@ -222,4 +222,4 @@ Refer to the corresponding sections for [virtual](./virtual/index.mdx#statuses), ## Guides {#guides} - [Issue cards](./overview/guide-issue.mdx) -- [Update card settings](./overview/guide-update.mdx) \ No newline at end of file +- [Update card settings](./overview/guide-update.mdx) diff --git a/docs/topics/cards/overview/guide-issue.mdx b/docs/topics/cards/overview/guide-issue.mdx index eb529a58906..565e7c472ea 100644 --- a/docs/topics/cards/overview/guide-issue.mdx +++ b/docs/topics/cards/overview/guide-issue.mdx @@ -1,5 +1,5 @@ --- -title: Issue cards +title: Issue cards --- # Issue cards @@ -63,4 +63,4 @@ You might want to add the virtual card to a digital Wallet or print a physical c You can update the settings for a [card product](../index.mdx#card-product) at any time. Settings apply to all card types: virtual, physical, and digital. -→ [Update card settings](../overview/guide-update.mdx) \ No newline at end of file +→ [Update card settings](../overview/guide-update.mdx) diff --git a/docs/topics/cards/overview/guide-update.mdx b/docs/topics/cards/overview/guide-update.mdx index 0ebfdaade3d..936612d1edf 100644 --- a/docs/topics/cards/overview/guide-update.mdx +++ b/docs/topics/cards/overview/guide-update.mdx @@ -16,14 +16,14 @@ Card product settings are **valid for all payments** linked to the card, includi 1. Update all card settings by calling the `updateCard` mutation. 1. When updating card settings, make sure you are authenticated with a user access token associated with the correct account member. - - Additionally, the account member must have the [membership permission](../../accounts/memberships/index.mdx#permissions) `canManageCards`. - - The permission `canManageAccountMembership` is optional. + - Additionally, the account member must have the [membership permission](../../accounts/memberships/index.mdx#permissions) `canManageCards`. + - The permission `canManageAccountMembership` is optional. 1. The request from this mutation returns a newly created consent resource containing the `consentUrl`. 1. The URL allows you to redirect the user making the modification to Swan's [Strong Customer Authentication](../../users/consent/index.mdx#sca). After the consent process is completed, the card is updated and its attribute version is increased by one. -import SuspicionOfFraud from '../../partials/_card-fraud-suspicion.mdx'; +import SuspicionOfFraud from "../../partials/_card-fraud-suspicion.mdx"; @@ -83,10 +83,10 @@ You can also review and click-to-copy important information about the card produ 2. Open **Options**. (Note the first tab, **Current**, where you can [update design settings](../design/guide-standard.mdx#configure).) 1. Update the following options as needed. Changes are saved automatically. - 1. Card name. - 1. Whether you allow physical cards for this card product. + 1. Card name. + 1. Whether you allow physical cards for this card product. 1. Click-to-copy the **card product ID** when you need it. 1. Review the **spending limits** for individuals and companies. 1. Click **Suspend card product** if you need to block this card product. Suspended card products can be reactivated by contacting Swan Support. -![Screenshot of a dedicated card product page on the Dashboard calling out different settings](../../../images/topics/cards/cards-dashboard-settings-detailed.png) \ No newline at end of file +![Screenshot of a dedicated card product page on the Dashboard calling out different settings](../../../images/topics/cards/cards-dashboard-settings-detailed.png) diff --git a/docs/topics/cards/partials/_after-consent.mdx b/docs/topics/cards/partials/_after-consent.mdx index a9e598e958e..a182ffc6ce0 100644 --- a/docs/topics/cards/partials/_after-consent.mdx +++ b/docs/topics/cards/partials/_after-consent.mdx @@ -2,4 +2,4 @@ After the consent is accepted, the card's sensitive information is **displayed f The link to view the information is also valid for five minutes; the user can close and reopen the link anytime within those five minutes. The user can click to copy any of the sensitive information to their clipboard. -After they're done with the card info, they can click okay to be redirected to the `redirectUrl` set up during the `viewCardNumbers` mutation. \ No newline at end of file +After they're done with the card info, they can click okay to be redirected to the `redirectUrl` set up during the `viewCardNumbers` mutation. diff --git a/docs/topics/cards/partials/_card-numbers.mdx b/docs/topics/cards/partials/_card-numbers.mdx index 28de90df2df..15eb88bbdca 100644 --- a/docs/topics/cards/partials/_card-numbers.mdx +++ b/docs/topics/cards/partials/_card-numbers.mdx @@ -1,6 +1,12 @@ -

Why do virtual and physical cards have different card numbers and CVCs? -The two card types function as independent entities. -Each has its own transaction history, can be added to the same digital wallet, and more.

-

This also means that if a card holder loses their physical card, they can suspend or cancel the physical card without losing access to their virtual card.

-
\ No newline at end of file +

+ Why do virtual and physical cards have different card numbers + and CVCs? The two card types function as independent entities. Each has its + own transaction history, can be added to the same digital wallet, and more. +

+

+ This also means that if a card holder loses their physical card, they can + suspend or cancel the physical card without losing access to their + virtual card. +

+ diff --git a/docs/topics/cards/partials/_card-product.mdx b/docs/topics/cards/partials/_card-product.mdx index ab2e165ac8b..801f27ec35f 100644 --- a/docs/topics/cards/partials/_card-product.mdx +++ b/docs/topics/cards/partials/_card-product.mdx @@ -2,12 +2,23 @@

A card product is a collection of design information and configuration settings for the cards you ultimately offer your users. You can have several card products within the same project, each with a unique cardProduct.id.

-

Each card product can have a different card design and different settings. -Alternatively, card products might have common designs and settings, depending on your needs. -For example, you might choose to offer a single design, but have several card products with different settings based on the intended users.

+

+ Each card product can have a different card design and{" "} + different settings. Alternatively, card products might have{" "} + common designs and settings, depending on your needs. For example, you + might choose to offer a single design, but have several card products with + different settings based on the intended users. +

-

The very first card product created is your default card product. You won't need to include the id for this card product when issuing cards. If you disable the default card product, however, you must include the CardProductId anytime you call a mutation to add cards (addCard, addCards, addCardsWithGroupDelivery, and printPhysicalCard).

+

+ The very first card product created is your default card product. You won't + need to include the id for this card product when issuing cards. + If you disable the default card product, however, you must include the{" "} + CardProductId anytime you call a mutation to add cards ( + addCard, addCards,{" "} + addCardsWithGroupDelivery, and printPhysicalCard). +

All new card products undergo a review before you can add cards with that design. You can also suspend a card product if you don't want it to be available to your users anymore.

- \ No newline at end of file + diff --git a/docs/topics/cards/partials/_custom-card-timeline.mdx b/docs/topics/cards/partials/_custom-card-timeline.mdx index 3318a15926c..ea6a08d12e9 100644 --- a/docs/topics/cards/partials/_custom-card-timeline.mdx +++ b/docs/topics/cards/partials/_custom-card-timeline.mdx @@ -1 +1 @@ -The custom design process, including design, validation, and delivery, can take up to **16 weeks**. \ No newline at end of file +The custom design process, including design, validation, and delivery, can take up to **16 weeks**. diff --git a/docs/topics/cards/partials/_custom-locked-elements.mdx b/docs/topics/cards/partials/_custom-locked-elements.mdx index 5bc78bfa946..5a7e17e5d1d 100644 --- a/docs/topics/cards/partials/_custom-locked-elements.mdx +++ b/docs/topics/cards/partials/_custom-locked-elements.mdx @@ -3,4 +3,4 @@ - Card number, identifier, expiry date, and CVC - Label indicating debit or business - Statement "This card is issued by Swan, pursuant to license by Mastercard international." -- Font *(Maison Neue)* \ No newline at end of file +- Font _(Maison Neue)_ diff --git a/docs/topics/cards/partials/_packaging.mdx b/docs/topics/cards/partials/_packaging.mdx index 783cba953c3..edf43450f7f 100644 --- a/docs/topics/cards/partials/_packaging.mdx +++ b/docs/topics/cards/partials/_packaging.mdx @@ -1,11 +1,11 @@ Physical cards are delivered in a standard letter format. Upgraded packaging options are also available for both standard and custom cards. -| Type | Options | -| --- | --- | -| Standard packaging | Standard envelope with card attached to an inserted letter, *pictured* | -| Customized letter text | Customize the written content of the letter; add additional languages (additional cost) | -| Colorful paper insert | Paper used for the letter can be a color other that the standard white (additional cost) | -| Customized packaging | Use a box or flyer; can add additional time (additional cost) | +| Type | Options | +| ---------------------- | ---------------------------------------------------------------------------------------- | +| Standard packaging | Standard envelope with card attached to an inserted letter, _pictured_ | +| Customized letter text | Customize the written content of the letter; add additional languages (additional cost) | +| Colorful paper insert | Paper used for the letter can be a color other that the standard white (additional cost) | +| Customized packaging | Use a box or flyer; can add additional time (additional cost) | -![Image of standard physical card packaging](../../../images/topics/cards/physical-card-letter.png) \ No newline at end of file +![Image of standard physical card packaging](../../../images/topics/cards/physical-card-letter.png) diff --git a/docs/topics/cards/partials/_provisioning-guide.mdx b/docs/topics/cards/partials/_provisioning-guide.mdx index a8d3c8cc946..9333830f438 100644 --- a/docs/topics/cards/partials/_provisioning-guide.mdx +++ b/docs/topics/cards/partials/_provisioning-guide.mdx @@ -1,4 +1,4 @@ :::info Provisioning guide A complete provisioning guide can't be published on this site due to privacy policies from Google and Apple. Swan will provide one after you've certified your digital card integration. -::: \ No newline at end of file +::: diff --git a/docs/topics/cards/physical/guide-activate.mdx b/docs/topics/cards/physical/guide-activate.mdx index d9aad4ff041..e699776fdb4 100644 --- a/docs/topics/cards/physical/guide-activate.mdx +++ b/docs/topics/cards/physical/guide-activate.mdx @@ -10,4 +10,4 @@ Activate physical cards by either: 1. Calling the `activatePhysicalCard` mutation which returns a consent. You'll need the identifier on the back of the physical card to call this mutation. When you use the API, make sure you are authenticated with a user access token belonging to the card holder. -Then a `consentUrl` is returned which invites the user to start Strong Customer Authentication with Swan. \ No newline at end of file +Then a `consentUrl` is returned which invites the user to start Strong Customer Authentication with Swan. diff --git a/docs/topics/cards/physical/guide-cancel.mdx b/docs/topics/cards/physical/guide-cancel.mdx index be0b68a69dd..ec63287d6bc 100644 --- a/docs/topics/cards/physical/guide-cancel.mdx +++ b/docs/topics/cards/physical/guide-cancel.mdx @@ -16,4 +16,4 @@ If the physical card was lost or stolen, ask the card holder the following quest 1. If so, was the card holder's mobile device lost or stolen? **If both answers are yes, make sure to cancel their digital cards as well.** -::: \ No newline at end of file +::: diff --git a/docs/topics/cards/physical/guide-print.mdx b/docs/topics/cards/physical/guide-print.mdx index 0c82adffc86..7a44e552b4f 100644 --- a/docs/topics/cards/physical/guide-print.mdx +++ b/docs/topics/cards/physical/guide-print.mdx @@ -61,7 +61,6 @@ mutation PrintCard { } } } - ``` ### Payload @@ -95,11 +94,11 @@ Call the `addCards` mutation. Add `physicalCardCustomOptions` > `additionalPrintedLine` to the object that corresponds to your chosen mutation. -| Mutation | Object | -|---|---| -| `addCards` | Add `physicalCardCustomOptions` > `additionalPrintedLine` to the `physicalCard` object | -| `addCardsWithGroupDelivery` | Add `physicalCardCustomOptions` > `additionalPrintedLine` to the `cards` object | -| `printPhysicalCard` | Add `physicalCardCustomOptions` > `additionalPrintedLine` to the `input` | +| Mutation | Object | +| --------------------------- | -------------------------------------------------------------------------------------- | +| `addCards` | Add `physicalCardCustomOptions` > `additionalPrintedLine` to the `physicalCard` object | +| `addCardsWithGroupDelivery` | Add `physicalCardCustomOptions` > `additionalPrintedLine` to the `cards` object | +| `printPhysicalCard` | Add `physicalCardCustomOptions` > `additionalPrintedLine` to the `input` | ## Print multiple physical cards with group delivery {#print-group} @@ -107,4 +106,4 @@ To ship a group of cards together to the same address, call the `addCardsWithGro It works just like `addCards` (explained in the [guide to add virtual cards](../virtual/guide-add.mdx#add-multiple)), except all the cards are sent together in one package. This method is cost-effective and eco-friendly. -You can send up to 250 cards in a group delivery. \ No newline at end of file +You can send up to 250 cards in a group delivery. diff --git a/docs/topics/cards/physical/guide-view-info.mdx b/docs/topics/cards/physical/guide-view-info.mdx index 06bd0c6ca6b..e5d8022f75f 100644 --- a/docs/topics/cards/physical/guide-view-info.mdx +++ b/docs/topics/cards/physical/guide-view-info.mdx @@ -20,7 +20,7 @@ View the physical card numbers, which is different from the virtual card numbers When you do this, make sure you are authenticated with a user access token using the name of the card's account member. Then a `consentUrl` is returned, inviting the user to start the Strong Customer Authentication with Swan. -import AfterConsent from '../partials/_after-consent.mdx'; +import AfterConsent from "../partials/_after-consent.mdx"; @@ -51,10 +51,7 @@ It will be true when the PIN is available. ```graphql {4-5} showLineNumbers mutation viewPin { viewPhysicalCardPin( - input: { - cardId: "$YOUR_CARD_ID" - consentRedirectUrl: "$YOUR_REDIRECT_URL" - } + input: { cardId: "$YOUR_CARD_ID", consentRedirectUrl: "$YOUR_REDIRECT_URL" } ) { ... on ViewPhysicalCardPinSuccessPayload { __typename @@ -69,7 +66,6 @@ mutation viewPin { } } } - ``` ### Payload @@ -87,4 +83,4 @@ Open the `consentUrl` returned by the mutation to provide consent, then view the } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/cards/physical/index.mdx b/docs/topics/cards/physical/index.mdx index f1c11fe8d3d..a14393f5085 100644 --- a/docs/topics/cards/physical/index.mdx +++ b/docs/topics/cards/physical/index.mdx @@ -4,7 +4,7 @@ title: Physical cards # Physical cards -import PhysicalCardsDefinition from '../../definitions/_cards-physical.mdx'; +import PhysicalCardsDefinition from "../../definitions/_cards-physical.mdx"; > @@ -27,9 +27,10 @@ If your card holder's name is longer than 20 characters, the initial of their fi If the first initial + last name combination still exceeds 20 characters, their first name plus last initial is used instead. :::note Abbreviation example + - The name `Emilia Prommenschenkel` would be abbreviated to `E. Prommenschenkel`. - The name `Mikah Ottovordemgentschenfelde` would be abbreviated to `Mikah O.`. -::: + ::: ### Card number {#number} @@ -39,9 +40,10 @@ Swan makes the physical card's number, CVC, expiry date, and the PIN available i The **card number**, **CVC**, and **PIN** are considered sensitive data and must be **masked by default**. The card holder must complete a **consent request** before the numbers can be unmasked. -import VirtualPhysicalCardNumbers from '../partials/_card-numbers.mdx'; +import VirtualPhysicalCardNumbers from "../partials/_card-numbers.mdx"; :::info Virtual and physical card numbers + ::: @@ -100,16 +102,16 @@ The hub has several intended destinations: - France - Northern Europe - French overseas departments and territories (DROM-COM): - - French Southern Territories (ATF), Saint Barthélemy (BLM), Faroe Islands (FRO), Guadeloupe (GLP), French Guiana (GUF), Saint Martin (Dutch part) (MAF), Martinique (MTQ), Mayotte (MYT), New Caledonia (NCL), French Polynesia (PYF), Réunion (REU), Saint Pierre and Miquelon (SPM), and Wallis and Futuna (WLF) + - French Southern Territories (ATF), Saint Barthélemy (BLM), Faroe Islands (FRO), Guadeloupe (GLP), French Guiana (GUF), Saint Martin (Dutch part) (MAF), Martinique (MTQ), Mayotte (MYT), New Caledonia (NCL), French Polynesia (PYF), Réunion (REU), Saint Pierre and Miquelon (SPM), and Wallis and Futuna (WLF) You have the option of **group** or **non-group delivery**. -| Delivery type | Destination | Shipping provider | -| --- | --- | --- | -| Group delivery | All locations | DHL | -| Tracked non-group delivery | France and DROM-COM | La Poste | -| Tracked non-group delivery | Northern Europe and unlisted locations | DHL | -| Untracked non-group delivery | Northern Europe and unlisted locations | La Poste | +| Delivery type | Destination | Shipping provider | +| ---------------------------- | -------------------------------------- | ----------------- | +| Group delivery | All locations | DHL | +| Tracked non-group delivery | France and DROM-COM | La Poste | +| Tracked non-group delivery | Northern Europe and unlisted locations | DHL | +| Untracked non-group delivery | Northern Europe and unlisted locations | La Poste | ### 🇪🇸 Spain hub {#hubs-spain} @@ -121,12 +123,12 @@ The hub has two intended destinations: You have the option of **group** or **non-group delivery**. -| Delivery type | Destination | Shipping provider | -| --- | --- | --- | -| Group delivery | Spain and Portugal | Nacex ∗ | -| Tracked non-group delivery | Spain and Portugal | Correos | +| Delivery type | Destination | Shipping provider | +| -------------------------- | ------------------ | ----------------- | +| Group delivery | Spain and Portugal | Nacex ∗ | +| Tracked non-group delivery | Spain and Portugal | Correos | -∗ *If you choose the Spain hub but ship using group delivery outside of Spain or Portugal, the shipping provider is DHL.* +∗ _If you choose the Spain hub but ship using group delivery outside of Spain or Portugal, the shipping provider is DHL._ ## Physical card statuses {#statuses} @@ -168,18 +170,18 @@ The statuses `ToRenew` and `Renewed` don't appear in the status diagram intentio Please refer to the [section on renewing cards](#renew) for more details about these statuses. ::: -| Physical card status | Explanation | -|---|---| -| `Initiated` | Printing a physical was launched with either the `printPhysicalCard` or `addCards` *with physical card* mutation. | -| `ConsentPending` | Request to print a physical card was received and is waiting for the card holder's consent.

**Next steps**:
  • If you used the `addCards` mutation and the card holder consents, the status moves to `Processing`.
  • If you used the `printPhysicalCard` mutation and the card holder consents, the status moves to `Activated`.
  • If you cancel the card with the API *before* consent, the status moves to `Canceling`.
  • If consent is refused or consent fails, the status moves directly to `Canceled`.
| -| `Processing` | The card is in the process of being created with Swan's card issuing provider.

**Next steps**:
  • After the card is created successfully in the card issuing provider's system, the status moves to `ToActivate`.
  • If you cancel the card with the API *before* the card issuing provider creates the card, the status moves to `Canceling`.
| -| `ToActivate` | The card is being printed by Swan's card issuing provider, then delivered to the card holder.

After the card holder receives the physical card, they need to activate it by performing a first transaction and entering the PIN. You can also activate the card with the `activatePhysicalCard` mutation.

**Next steps**:
  • If the card holder performs the transaction successfully, or you activate the card with the API, the status moves to `ToActivate`.
  • If the card holder makes **three incorrect attempts** to enter their PIN, the status moves to `Suspended`.
| -| `Activated` | Physical card is available for use.

**Next steps**:
  • Cards can retain the status `Activated` until the renewal period.
  • `Activated` cards can also be `Suspended` and `Canceled` (example: if three incorrect attempts are made to enter the PIN, the card is automatically `Suspended`).
| -| `Suspended`

Also referred to as *Blocked* | Physical card is suspended and not available for use. Card holders can still view card information and use digital cards (not virtual cards) when a physical card is `Suspended`.

*Cards can be suspended for various reasons, including a request from you or the card holder, or a Swan action in the case of suspicious activity.*

**Next steps**:
  • Restore the card's previous status with the API.
  • Cancel the card with the API.
| -| `Canceling` | Card is in the process of being canceled.

**Next steps**: Card is `Canceled`. After a card is assigned the `Canceling` status, the process can't be reversed. | -| `Canceled` | Card is canceled, no longer available for use, and can't be reactivated. | -| `ToRenew` | Card needs to be renewed. | -| `Renewed` | Card is renewed. The status returns to `Activated` after the first transaction is made with the new card. | +| Physical card status | Explanation | +| ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `Initiated` | Printing a physical was launched with either the `printPhysicalCard` or `addCards` _with physical card_ mutation. | +| `ConsentPending` | Request to print a physical card was received and is waiting for the card holder's consent.

**Next steps**:
  • If you used the `addCards` mutation and the card holder consents, the status moves to `Processing`.
  • If you used the `printPhysicalCard` mutation and the card holder consents, the status moves to `Activated`.
  • If you cancel the card with the API _before_ consent, the status moves to `Canceling`.
  • If consent is refused or consent fails, the status moves directly to `Canceled`.
| +| `Processing` | The card is in the process of being created with Swan's card issuing provider.

**Next steps**:
  • After the card is created successfully in the card issuing provider's system, the status moves to `ToActivate`.
  • If you cancel the card with the API _before_ the card issuing provider creates the card, the status moves to `Canceling`.
| +| `ToActivate` | The card is being printed by Swan's card issuing provider, then delivered to the card holder.

After the card holder receives the physical card, they need to activate it by performing a first transaction and entering the PIN. You can also activate the card with the `activatePhysicalCard` mutation.

**Next steps**:
  • If the card holder performs the transaction successfully, or you activate the card with the API, the status moves to `ToActivate`.
  • If the card holder makes **three incorrect attempts** to enter their PIN, the status moves to `Suspended`.
| +| `Activated` | Physical card is available for use.

**Next steps**:
  • Cards can retain the status `Activated` until the renewal period.
  • `Activated` cards can also be `Suspended` and `Canceled` (example: if three incorrect attempts are made to enter the PIN, the card is automatically `Suspended`).
| +| `Suspended`

Also referred to as _Blocked_ | Physical card is suspended and not available for use. Card holders can still view card information and use digital cards (not virtual cards) when a physical card is `Suspended`.

_Cards can be suspended for various reasons, including a request from you or the card holder, or a Swan action in the case of suspicious activity._

**Next steps**:
  • Restore the card's previous status with the API.
  • Cancel the card with the API.
| +| `Canceling` | Card is in the process of being canceled.

**Next steps**: Card is `Canceled`. After a card is assigned the `Canceling` status, the process can't be reversed. | +| `Canceled` | Card is canceled, no longer available for use, and can't be reactivated. | +| `ToRenew` | Card needs to be renewed. | +| `Renewed` | Card is renewed. The status returns to `Activated` after the first transaction is made with the new card. | ## Renewing physical cards {#renew} @@ -222,15 +224,15 @@ flowchart LR ## Guides {#guides} - [Print physical cards](./guide-print.mdx) - - Print a physical card - - Print multiple physical cards - - Print a custom physical card - - Print multiple physical cards with group delivery + - Print a physical card + - Print multiple physical cards + - Print a custom physical card + - Print multiple physical cards with group delivery - [Activate physical cards](./guide-activate.mdx) - [View sensitive information](./guide-view-info.mdx) - - View physical card number - - View PIN + - View physical card number + - View PIN - [Block & unblock physical cards](./guide-block-unblock.mdx) - - Temporarily block a physical card - - Unblock a physical card -- [Cancel physical cards](./guide-cancel.mdx) \ No newline at end of file + - Temporarily block a physical card + - Unblock a physical card +- [Cancel physical cards](./guide-cancel.mdx) diff --git a/docs/topics/cards/virtual/guide-add.mdx b/docs/topics/cards/virtual/guide-add.mdx index b16ff32351e..a9bb26f9455 100644 --- a/docs/topics/cards/virtual/guide-add.mdx +++ b/docs/topics/cards/virtual/guide-add.mdx @@ -19,7 +19,7 @@ This mutation can only be called on behalf of an account member with the `canMan When you do this, make sure you are authenticated with a user access token in the name of the account member. The new card is thus created with the `ConsentPending` status. -A `consentUrl` is returned which invites the user to start Strong Customer Authentication with Swan. +A `consentUrl` is returned which invites the user to start Strong Customer Authentication with Swan. After the user completes the Strong Customer Authentication process, the new card changes to `Activated` status. In the mutation, you can use `cardProductId` field (optional) to choose which card design the user will receive. @@ -94,7 +94,7 @@ It works nearly the same way as `addCard` with two additional features: 1. Configure the spending limit when adding the card with the `spendingLimit` field in the `addCards` mutation. The new card is thus created with the `ConsentPending` status. -A `consentUrl` is returned which invites the user to start Strong Customer Authentication with Swan. +A `consentUrl` is returned which invites the user to start Strong Customer Authentication with Swan. After the user completes the Strong Customer Authentication process, the new card changes to `Processing` status. The cards are created asynchronously and then change to the `Enabled` status. @@ -130,4 +130,4 @@ If you want to issue single-use virtual cards without having direct human intera For both the single-use virtual card mutations (`addSingleUseVirtualCard` and `addSingleUseVirtualCards`), the `SuccessForProjectOwnerPayload` will return a card in `ConsentPending` status. The status changes to `Enabled` after the consent is validated. It's recommended to verify the card status before using it. -::: \ No newline at end of file +::: diff --git a/docs/topics/cards/virtual/guide-cancel.mdx b/docs/topics/cards/virtual/guide-cancel.mdx index b9e9b1911de..1f95a0ba6d8 100644 --- a/docs/topics/cards/virtual/guide-cancel.mdx +++ b/docs/topics/cards/virtual/guide-cancel.mdx @@ -12,4 +12,4 @@ The card's status is `Canceling` during the process, which is irreversible, and After the cancellation is complete, you'll no longer be billed for the card. -You can also cancel [only a physical card](../physical/guide-cancel.mdx) or [only a digital card](../digital/guide-cancel.mdx). \ No newline at end of file +You can also cancel [only a physical card](../physical/guide-cancel.mdx) or [only a digital card](../digital/guide-cancel.mdx). diff --git a/docs/topics/cards/virtual/guide-view-info.mdx b/docs/topics/cards/virtual/guide-view-info.mdx index 203f4389452..2f87999d290 100644 --- a/docs/topics/cards/virtual/guide-view-info.mdx +++ b/docs/topics/cards/virtual/guide-view-info.mdx @@ -33,10 +33,7 @@ All of this data is considered sensitive and is not directly available through t ```graphql {4-5,8} showLineNumbers mutation ViewSensitiveInfo { viewCardNumbers( - input: { - cardId: "$YOUR_CARD_ID" - consentRedirectUrl: "$YOUR_REDIRECT_URL" - } + input: { cardId: "$YOUR_CARD_ID", consentRedirectUrl: "$YOUR_REDIRECT_URL" } ) { ... on ViewCardNumbersSuccessPayload { __typename @@ -67,8 +64,8 @@ mutation ViewSensitiveInfo { ### After consent -import AfterConsent from '../partials/_after-consent.mdx'; +import AfterConsent from "../partials/_after-consent.mdx"; -![Swan card with information masked and revealed](../../../images/topics/cards/cards-view-info.png) \ No newline at end of file +![Swan card with information masked and revealed](../../../images/topics/cards/cards-view-info.png) diff --git a/docs/topics/cards/virtual/index.mdx b/docs/topics/cards/virtual/index.mdx index 4b690cebebc..46a039aaf7d 100644 --- a/docs/topics/cards/virtual/index.mdx +++ b/docs/topics/cards/virtual/index.mdx @@ -4,7 +4,7 @@ title: Virtual cards # Virtual cards -import VirtualCardsDefinition from '../../definitions/_cards-virtual.mdx'; +import VirtualCardsDefinition from "../../definitions/_cards-virtual.mdx"; > @@ -24,9 +24,10 @@ Swan makes the virtual card's number, CVC, and expiry date available in Web Bank The **card number** and **CVC** are considered sensitive data and must be **masked by default**. The card holder must complete a **consent request** before the numbers can be unmasked. -import VirtualPhysicalCardNumbers from '../partials/_card-numbers.mdx'; +import VirtualPhysicalCardNumbers from "../partials/_card-numbers.mdx"; :::info Virtual & physical card numbers + ::: @@ -52,7 +53,7 @@ For one-off cards, the `AccountHolderSpendingLimit.period` is `Always`. ### Recurring {#suv-recurring} -You can think of recurring SUV cards as single *merchant* virtual cards. +You can think of recurring SUV cards as single _merchant_ virtual cards. The `AccountHolderSpendingLimit.period` is **not** `Always`. When the card holder uses a recurring SUV card for the first time, Swan restricts the card to the merchant ID that triggered the authorization. @@ -62,7 +63,7 @@ However, if the card holder tries to use the card elsewhere, the transaction wil ## Virtual card statuses {#statuses} -*These statuses also represent the status of the Swan card contract.* +_These statuses also represent the status of the Swan card contract._ ```mermaid %%{ init: { 'flowchart': { 'curve': 'linear' } } }%% @@ -89,20 +90,20 @@ flowchart LR style U fill:#dfedf2,stroke:#4d8296,stroke-width:3px ``` -| Virtual card status | Explanation | -|---|---| -| `ConsentPending` | Virtual card was added and is waiting for the card holder's consent

**Next steps**:
  • If consent is refused or fails, the status moves directly to `Canceled`
  • Otherwise, the status moves to `Processing`
| -| `Processing` | Consent has been received and the card is being prepared

Status used uniquely when adding multiple virtual cards (`addCards` mutation) | -| `Enabled` | Virtual card is available for use | -| `Canceling` | Card is in the process of being canceled

After a card is assigned the `Canceling` status, the process can't be reversed | -| `Canceled` | Card is canceled, no longer available for use, and can't be reactivated | +| Virtual card status | Explanation | +| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `ConsentPending` | Virtual card was added and is waiting for the card holder's consent

**Next steps**:
  • If consent is refused or fails, the status moves directly to `Canceled`
  • Otherwise, the status moves to `Processing`
| +| `Processing` | Consent has been received and the card is being prepared

Status used uniquely when adding multiple virtual cards (`addCards` mutation) | +| `Enabled` | Virtual card is available for use | +| `Canceling` | Card is in the process of being canceled

After a card is assigned the `Canceling` status, the process can't be reversed | +| `Canceled` | Card is canceled, no longer available for use, and can't be reactivated | ## Guides {#guides} - [Add virtual cards](./guide-add.mdx) - - Add a virtual card - - Add multiple virtual cards - - Add a single-use virtual card + - Add a virtual card + - Add multiple virtual cards + - Add a single-use virtual card - [View sensitive information](./guide-view-info.mdx) - - View virtual card numbers -- [Cancel (deactivate) virtual cards](./guide-cancel.mdx) \ No newline at end of file + - View virtual card numbers +- [Cancel (deactivate) virtual cards](./guide-cancel.mdx) diff --git a/docs/topics/contact.mdx b/docs/topics/contact.mdx index 1b103f4ba95..17c056aa8d1 100644 --- a/docs/topics/contact.mdx +++ b/docs/topics/contact.mdx @@ -1,8 +1,9 @@ --- title: Contact Swan --- -import PartialExample from '../_contact.mdx'; + +import PartialExample from "../_contact.mdx"; # Contact Swan - \ No newline at end of file + diff --git a/docs/topics/definitions/_account-funding.mdx b/docs/topics/definitions/_account-funding.mdx index 9a96e6b3c1a..01a64e7bdd6 100644 --- a/docs/topics/definitions/_account-funding.mdx +++ b/docs/topics/definitions/_account-funding.mdx @@ -1 +1 @@ -Supply money to your Swan account from an external account, whether with a push payment (such as a credit transfer) or a pull payment (such as direct debit). \ No newline at end of file +Supply money to your Swan account from an external account, whether with a push payment (such as a credit transfer) or a pull payment (such as direct debit). diff --git a/docs/topics/definitions/_account-holder.mdx b/docs/topics/definitions/_account-holder.mdx index c3905f3fc61..df7861c3c29 100644 --- a/docs/topics/definitions/_account-holder.mdx +++ b/docs/topics/definitions/_account-holder.mdx @@ -1 +1 @@ -Individual (natural person) or legal entity (legal person) who owns and is responsible for the funds in a Swan account. \ No newline at end of file +Individual (natural person) or legal entity (legal person) who owns and is responsible for the funds in a Swan account. diff --git a/docs/topics/definitions/_account-membership.mdx b/docs/topics/definitions/_account-membership.mdx index 22c66e46cb2..a7105124573 100644 --- a/docs/topics/definitions/_account-membership.mdx +++ b/docs/topics/definitions/_account-membership.mdx @@ -1 +1 @@ -Representation of the rights, also referred to as access and permissions, of Swan users to an account. \ No newline at end of file +Representation of the rights, also referred to as access and permissions, of Swan users to an account. diff --git a/docs/topics/definitions/_capital-deposit.mdx b/docs/topics/definitions/_capital-deposit.mdx index 4b9005c9764..5026410c7f2 100644 --- a/docs/topics/definitions/_capital-deposit.mdx +++ b/docs/topics/definitions/_capital-deposit.mdx @@ -1 +1 @@ -Initial funds invested to start operations for a new company, involving required documents, shareholder information, and legal processes. \ No newline at end of file +Initial funds invested to start operations for a new company, involving required documents, shareholder information, and legal processes. diff --git a/docs/topics/definitions/_cards-digital.mdx b/docs/topics/definitions/_cards-digital.mdx index 7406dbc999f..61221bc2208 100644 --- a/docs/topics/definitions/_cards-digital.mdx +++ b/docs/topics/definitions/_cards-digital.mdx @@ -1,2 +1,2 @@ Digital format of a virtual or physical card. -Swan cards can be digitized and added to Apple Pay and Google Pay for Near-Field Communication (NFC) payments. \ No newline at end of file +Swan cards can be digitized and added to Apple Pay and Google Pay for Near-Field Communication (NFC) payments. diff --git a/docs/topics/definitions/_cards-physical.mdx b/docs/topics/definitions/_cards-physical.mdx index 74793fd68e9..919d55ba682 100644 --- a/docs/topics/definitions/_cards-physical.mdx +++ b/docs/topics/definitions/_cards-physical.mdx @@ -1 +1 @@ -Plastic payment card that can be used for point-of-sale transactions using swipe, chip and PIN, and contactless (EMV) methods, as well as for online transactions. \ No newline at end of file +Plastic payment card that can be used for point-of-sale transactions using swipe, chip and PIN, and contactless (EMV) methods, as well as for online transactions. diff --git a/docs/topics/definitions/_cards-virtual.mdx b/docs/topics/definitions/_cards-virtual.mdx index 37ff9fb2ad8..412966e99e4 100644 --- a/docs/topics/definitions/_cards-virtual.mdx +++ b/docs/topics/definitions/_cards-virtual.mdx @@ -1,3 +1,3 @@ Swan's default, dematerialized cards. A virtual card must exist before creating a physical card or adding a card to a digital Wallet. -Virtual cards are also available in a single-use format. \ No newline at end of file +Virtual cards are also available in a single-use format. diff --git a/docs/topics/definitions/_iban.mdx b/docs/topics/definitions/_iban.mdx index 31d573fd7ee..160f49b22de 100644 --- a/docs/topics/definitions/_iban.mdx +++ b/docs/topics/definitions/_iban.mdx @@ -1,2 +1,2 @@ International Bank Account Numbers (IBANs) identify accounts on the Single Euro Payment Area (SEPA) network. -This unique identifier makes it easy for banking services like Swan to make sure payments reach their destination safely across Europe. \ No newline at end of file +This unique identifier makes it easy for banking services like Swan to make sure payments reach their destination safely across Europe. diff --git a/docs/topics/definitions/_idd.mdx b/docs/topics/definitions/_idd.mdx index 4c7f066fc11..634b2bda788 100644 --- a/docs/topics/definitions/_idd.mdx +++ b/docs/topics/definitions/_idd.mdx @@ -1 +1 @@ -Direct debit transactions between two accounts in the same Swan project. \ No newline at end of file +Direct debit transactions between two accounts in the same Swan project. diff --git a/docs/topics/definitions/_legal-rep.mdx b/docs/topics/definitions/_legal-rep.mdx index 52e257caad2..d29b16b965b 100644 --- a/docs/topics/definitions/_legal-rep.mdx +++ b/docs/topics/definitions/_legal-rep.mdx @@ -1 +1 @@ -Individual or entity authorized to act on behalf of another person or entity in legal and financial matters related to the Swan account. \ No newline at end of file +Individual or entity authorized to act on behalf of another person or entity in legal and financial matters related to the Swan account. diff --git a/docs/topics/definitions/_merchants.mdx b/docs/topics/definitions/_merchants.mdx index 076a8867037..72cd7ca4a49 100644 --- a/docs/topics/definitions/_merchants.mdx +++ b/docs/topics/definitions/_merchants.mdx @@ -1 +1 @@ -Swan account holders who have been approved to accept payments from their customers using Swan. \ No newline at end of file +Swan account holders who have been approved to accept payments from their customers using Swan. diff --git a/docs/topics/definitions/_onboarding-company.mdx b/docs/topics/definitions/_onboarding-company.mdx index dc6b8aa919f..a06d9752c93 100644 --- a/docs/topics/definitions/_onboarding-company.mdx +++ b/docs/topics/definitions/_onboarding-company.mdx @@ -1 +1 @@ -Process of creating a new company account holder, and opening a new Swan account for that account holder. \ No newline at end of file +Process of creating a new company account holder, and opening a new Swan account for that account holder. diff --git a/docs/topics/definitions/_onboarding-individual.mdx b/docs/topics/definitions/_onboarding-individual.mdx index 6ae3d99c415..25b79ba493c 100644 --- a/docs/topics/definitions/_onboarding-individual.mdx +++ b/docs/topics/definitions/_onboarding-individual.mdx @@ -1 +1 @@ -Process of creating a new individual account holder, and opening a new Swan account for that account holder. \ No newline at end of file +Process of creating a new individual account holder, and opening a new Swan account for that account holder. diff --git a/docs/topics/definitions/_onboarding-supporting-documents.mdx b/docs/topics/definitions/_onboarding-supporting-documents.mdx index fa446db4bb1..7adcbf17cb9 100644 --- a/docs/topics/definitions/_onboarding-supporting-documents.mdx +++ b/docs/topics/definitions/_onboarding-supporting-documents.mdx @@ -1,2 +1,2 @@ A collection of documents (think of a folder) containing documents gathered for a specific reason, such as during account holder verification. -Swan collects these documents according to local regulations. \ No newline at end of file +Swan collects these documents according to local regulations. diff --git a/docs/topics/definitions/_pagination.mdx b/docs/topics/definitions/_pagination.mdx index 6770b520b2b..f0e31fad53e 100644 --- a/docs/topics/definitions/_pagination.mdx +++ b/docs/topics/definitions/_pagination.mdx @@ -1 +1 @@ -Break down large sets of data retrieved by the API into smaller, more manageable chunks. \ No newline at end of file +Break down large sets of data retrieved by the API into smaller, more manageable chunks. diff --git a/docs/topics/definitions/_payment-control.mdx b/docs/topics/definitions/_payment-control.mdx index b53a8fca88f..6bc40552205 100644 --- a/docs/topics/definitions/_payment-control.mdx +++ b/docs/topics/definitions/_payment-control.mdx @@ -1 +1 @@ -Accept or reject transactions according to your business rules, in compliance with Mastercard's requirements. \ No newline at end of file +Accept or reject transactions according to your business rules, in compliance with Mastercard's requirements. diff --git a/docs/topics/definitions/_payment-mandate.mdx b/docs/topics/definitions/_payment-mandate.mdx index 4ff73548cff..203932c36a6 100644 --- a/docs/topics/definitions/_payment-mandate.mdx +++ b/docs/topics/definitions/_payment-mandate.mdx @@ -1 +1 @@ -Signed approval through which a creditor or beneficiary can pull money from a debtor's account. \ No newline at end of file +Signed approval through which a creditor or beneficiary can pull money from a debtor's account. diff --git a/docs/topics/definitions/_payments.mdx b/docs/topics/definitions/_payments.mdx index ad7d1dc31ad..78b48dd8eb4 100644 --- a/docs/topics/definitions/_payments.mdx +++ b/docs/topics/definitions/_payments.mdx @@ -2,4 +2,4 @@ A grouping of a single transaction or a series of transactions to move funds fro Payments group transactions together for two main reasons: the transactions were initiated at the same time, and they're related to the same operation or there is some other logical link between the transactions. Payments can be initiated by individuals, businesses, or banks. -Swan executes several types of payments denominated and executed in euros. \ No newline at end of file +Swan executes several types of payments denominated and executed in euros. diff --git a/docs/topics/definitions/_projects.mdx b/docs/topics/definitions/_projects.mdx index 9518d046a5a..9bba1967f11 100644 --- a/docs/topics/definitions/_projects.mdx +++ b/docs/topics/definitions/_projects.mdx @@ -1 +1 @@ -Entity that contains all information for your Swan integration and users. \ No newline at end of file +Entity that contains all information for your Swan integration and users. diff --git a/docs/topics/definitions/_rejections.mdx b/docs/topics/definitions/_rejections.mdx index f976eea0632..34438fa51a1 100644 --- a/docs/topics/definitions/_rejections.mdx +++ b/docs/topics/definitions/_rejections.mdx @@ -1,2 +1,2 @@ GraphQL type returned by mutations from the Swan API when a request is rejected due to a business rule. -Rejections provide context as to why a mutation didn't work as expected and are implemented for all errors Swan can anticipate. \ No newline at end of file +Rejections provide context as to why a mutation didn't work as expected and are implemented for all errors Swan can anticipate. diff --git a/docs/topics/definitions/_rolling-reserve.mdx b/docs/topics/definitions/_rolling-reserve.mdx index ee4b245bb87..63224fd2ebf 100644 --- a/docs/topics/definitions/_rolling-reserve.mdx +++ b/docs/topics/definitions/_rolling-reserve.mdx @@ -9,6 +9,6 @@ For example, assume rolling reserve is 20% of the transaction amount held for 30 Consider the following example: > A direct debit transaction for 150€ is made and requires rolling reserve.
-Swan reserves, or holds back, 30€ for 30 business days, and 30€ is added to the `Reserved` account balance.
After 30 business days, the 30€ is added to the `Available` account balance and can be used. +> Swan reserves, or holds back, 30€ for 30 business days, and 30€ is added to the `Reserved` account balance.
After 30 business days, the 30€ is added to the `Available` account balance and can be used. -Rolling reserve timelines follow general [SEPA availability](../payments/index.mdx#sepa-availability). \ No newline at end of file +Rolling reserve timelines follow general [SEPA availability](../payments/index.mdx#sepa-availability). diff --git a/docs/topics/definitions/_sdd.mdx b/docs/topics/definitions/_sdd.mdx index 1fded5490b1..67d4ab15c3f 100644 --- a/docs/topics/definitions/_sdd.mdx +++ b/docs/topics/definitions/_sdd.mdx @@ -1 +1 @@ -Transactions between two accounts in the same Swan project. \ No newline at end of file +Transactions between two accounts in the same Swan project. diff --git a/docs/topics/definitions/_transactions.mdx b/docs/topics/definitions/_transactions.mdx index e066eaac27d..3137aa2924f 100644 --- a/docs/topics/definitions/_transactions.mdx +++ b/docs/topics/definitions/_transactions.mdx @@ -1,2 +1,2 @@ Distinct and identifiable events that aid in moving money from one account to another. -Transactions lay out the path to move money between accounts. \ No newline at end of file +Transactions lay out the path to move money between accounts. diff --git a/docs/topics/definitions/_webhooks.mdx b/docs/topics/definitions/_webhooks.mdx index 6aaec2b73c5..8799e9d10fb 100644 --- a/docs/topics/definitions/_webhooks.mdx +++ b/docs/topics/definitions/_webhooks.mdx @@ -1,2 +1,2 @@ Computers use webhooks to communicate with each other about events. -Like notifications, webhooks let you know when something you're interested in happens with your integration. \ No newline at end of file +Like notifications, webhooks let you know when something you're interested in happens with your integration. diff --git a/docs/topics/get-started/choose-integration.mdx b/docs/topics/get-started/choose-integration.mdx index 25bd29bce79..12040d94ba7 100644 --- a/docs/topics/get-started/choose-integration.mdx +++ b/docs/topics/get-started/choose-integration.mdx @@ -77,9 +77,9 @@ The open source project might be interesting to you if: ## Recommendations {#recommendations} -| Priority | Integration method | -| --- | --- | -| **Quick** integration + **Basic** user interface | No-code user interface | -| **Quick** integration + **Customized** user interface | Now: No-code user interface
Next: Full API + Swan Banking Frontend | -| **Comprehensive** integration + **Customized** user interface | Full API + Swan Banking Frontend | -| **Comprehensive** integration + **No** user interface from Swan | Full API | \ No newline at end of file +| Priority | Integration method | +| --------------------------------------------------------------- | ----------------------------------------------------------------------- | +| **Quick** integration + **Basic** user interface | No-code user interface | +| **Quick** integration + **Customized** user interface | Now: No-code user interface
Next: Full API + Swan Banking Frontend | +| **Comprehensive** integration + **Customized** user interface | Full API + Swan Banking Frontend | +| **Comprehensive** integration + **No** user interface from Swan | Full API | diff --git a/docs/topics/get-started/partials/_connect-mobile.mdx b/docs/topics/get-started/partials/_connect-mobile.mdx index b7cd6a5fc97..2d1b9543986 100644 --- a/docs/topics/get-started/partials/_connect-mobile.mdx +++ b/docs/topics/get-started/partials/_connect-mobile.mdx @@ -1,4 +1,4 @@ Swan authenticates you, a physical person, to the Swan system with your **mobile device** and **phone number**. Developers and end users follow the same process, so everyone logging into Swan must use their mobile device. -Connecting with your device logs you into the Swan Dashboard, the **command center** for your integration. \ No newline at end of file +Connecting with your device logs you into the Swan Dashboard, the **command center** for your integration. diff --git a/docs/topics/get-started/partials/_create-project.mdx b/docs/topics/get-started/partials/_create-project.mdx index de9ddb373f4..205a0efa14e 100644 --- a/docs/topics/get-started/partials/_create-project.mdx +++ b/docs/topics/get-started/partials/_create-project.mdx @@ -1,4 +1,4 @@ Build a test banking experience that **matches your brand**. Open **Dashboard** > **Settings** > **Branding** to name your project, upload your logo, and choose an accent color. -![screenshot of Dashboard branding page](../../../images/topics/welcome/get-started-branding.png) \ No newline at end of file +![screenshot of Dashboard branding page](../../../images/topics/welcome/get-started-branding.png) diff --git a/docs/topics/get-started/partials/_swan-access.mdx b/docs/topics/get-started/partials/_swan-access.mdx index 7e90b2cd557..504cc73318f 100644 --- a/docs/topics/get-started/partials/_swan-access.mdx +++ b/docs/topics/get-started/partials/_swan-access.mdx @@ -1,4 +1,4 @@ Accessing Swan begins on the [**Swan website**](https://www.swan.io/start-now). You'll provide some basic information and then, on a second screen, your **mobile phone number**. -Your mobile phone number is required to gain access to Swan, even if you're just exploring—it's how you'll log in and [consent](../../users/consent/index.mdx) to sensitive operations. \ No newline at end of file +Your mobile phone number is required to gain access to Swan, even if you're just exploring—it's how you'll log in and [consent](../../users/consent/index.mdx) to sensitive operations. diff --git a/docs/topics/get-started/quickstart.mdx b/docs/topics/get-started/quickstart.mdx index 93ed752ebd0..4082359d6ff 100644 --- a/docs/topics/get-started/quickstart.mdx +++ b/docs/topics/get-started/quickstart.mdx @@ -12,7 +12,7 @@ The first three steps might feel familiar; they're the same in the [step-by-step ## Step 1: Get access to Swan {#swan-access} -import GetSwanAccess from './partials/_swan-access.mdx'; +import GetSwanAccess from "./partials/_swan-access.mdx"; @@ -23,13 +23,13 @@ You do have [other options](./choose-integration.mdx) that allow for more custom ## Step 2: Connect with your mobile device {#connect} -import ConnectWithMobile from './partials/_connect-mobile.mdx'; +import ConnectWithMobile from "./partials/_connect-mobile.mdx"; ## Step 3: Create your project {#project} -import CreateProject from './partials/_create-project.mdx'; +import CreateProject from "./partials/_create-project.mdx"; @@ -53,17 +53,17 @@ Go to **Dashboard** > **Developers** > **API** to get your [OAuth 2.0 credential ## Step 7: Execute your first payment {#payment} 1. Credit your account. In the Sandbox, you'll do this with fake money through the [Event Simulator](../../developers/tools/event-simulator.mdx). - - [Follow the example](../../developers/tools/event-simulator.mdx#example) on the simulator page to receive an incoming transfer to add fake money to your new Swan account. + - [Follow the example](../../developers/tools/event-simulator.mdx#example) on the simulator page to receive an incoming transfer to add fake money to your new Swan account. 1. Use your new fake funds to [initiate a SEPA Credit Transfer](../payments/credit-transfers/sepa/guide-initiate-ct.mdx). 1. Use the Event Simulator to book the transfer. Go to **Dashboard** > **Developers** > **Event Simulator**, choose **book an outgoing transfer**, and enter the required information. :::tip Swan is happy to have you here. - The world of Swan is now your oyster. - - Explore the documentation to see all Swan offers. - - Discover more in the Event Simulator and the [API Explorer](../../developers/tools/api-explorer.mdx). + - Explore the documentation to see all Swan offers. + - Discover more in the Event Simulator and the [API Explorer](../../developers/tools/api-explorer.mdx). - If you're not in communication with Swan (yet), feel free to [submit this form](https://www.swan.io/talk-to-expert) for more information. - If you already have dedicated account managers, please contact them with any questions. **Happy building!** -::: \ No newline at end of file +::: diff --git a/docs/topics/get-started/step-by-step.mdx b/docs/topics/get-started/step-by-step.mdx index fbd91bffccf..772c284742e 100644 --- a/docs/topics/get-started/step-by-step.mdx +++ b/docs/topics/get-started/step-by-step.mdx @@ -13,13 +13,13 @@ Your mobile phone number is required to gain access to Swan, even if you're just ## Step 2: Connect with your mobile device {#connect} -import ConnectWithMobile from './partials/_connect-mobile.mdx'; +import ConnectWithMobile from "./partials/_connect-mobile.mdx"; ## Step 3: Create your project {#project} -import CreateProject from './partials/_create-project.mdx'; +import CreateProject from "./partials/_create-project.mdx"; @@ -70,4 +70,4 @@ Swan account managers accompany you as you prepare to launch your integration wi - If you already have dedicated account managers, please contact them with any questions. **Happy building!** -::: \ No newline at end of file +::: diff --git a/docs/topics/merchants/checks/guide-checks.mdx b/docs/topics/merchants/checks/guide-checks.mdx index 3f932fd5bc2..7222c12991f 100644 --- a/docs/topics/merchants/checks/guide-checks.mdx +++ b/docs/topics/merchants/checks/guide-checks.mdx @@ -10,7 +10,7 @@ Before accepting payments with French checks, you need to add a merchant profile → [Add a merchant profile](../profiles/guide-add.mdx) -→ [Update a merchant profile](../profiles/guide-update.mdx) *if needed* +→ [Update a merchant profile](../profiles/guide-update.mdx) _if needed_ ## Step 2: Request the payment method {#step-2} @@ -24,4 +24,4 @@ Call the API to initiate French check transactions so merchants can accept payme ## Bonus: Explore the Sandbox -→ [French checks Sandbox](./sandbox.mdx) \ No newline at end of file +→ [French checks Sandbox](./sandbox.mdx) diff --git a/docs/topics/merchants/checks/guide-initiate.mdx b/docs/topics/merchants/checks/guide-initiate.mdx index 6360cbb0a52..3cec6c8dcbf 100644 --- a/docs/topics/merchants/checks/guide-initiate.mdx +++ b/docs/topics/merchants/checks/guide-initiate.mdx @@ -7,10 +7,11 @@ title: Initiate a transaction Initiate accepting payments with French checks. :::tip Prerequisites + - Debtor's account status: any except `Closing` or `Closed` - Merchant profile status: `Enabled` - Check payment method status: `Enabled` -::: + ::: ## Guide {#guide} @@ -22,7 +23,6 @@ Initiate accepting payments with French checks. 1. Add the rejection `CheckRejection`, then add the `fnciInfo` here as well (lines 21, 24-30). 1. Add other rejections (not shown). - ### Mutation {#mutation} 🔎 [Open the mutation in API Explorer](https://explorer.swan.io?query=bXV0YXRpb24gSW5pdGlhdGVDaGVja1BheW1lbnQgewogIGluaXRpYXRlQ2hlY2tNZXJjaGFudFBheW1lbnQoCiAgICBpbnB1dDogewogICAgICBhbW91bnQ6IHsgdmFsdWU6ICI1MCIsIGN1cnJlbmN5OiAiRVVSIiB9CiAgICAgIG1lcmNoYW50UHJvZmlsZUlkOiAiJFlPVVJfTUVSQ0hBTlRfUFJPRklMRV9JRCIKICAgICAgY21jNzogIiRZT1VSX0NNQzciCiAgICAgIHJsbWNLZXk6ICIkWU9VUl9STE1DX0tFWSIKICAgIH0KICApIHsKICAgIC4uLiBvbiBJbml0aWF0ZUNoZWNrTWVyY2hhbnRQYXltZW50U3VjY2Vzc1BheWxvYWQgewogICAgICBfX3R5cGVuYW1lCiAgICAgIGZuY2lJbmZvIHsKICAgICAgICBjb2xvckNvZGUKICAgICAgICBjcHQxCiAgICAgICAgY3B0MgogICAgICAgIGNwdDMKICAgICAgICBob2xkZXJFc3RhYmxpc2htZW50CiAgICAgICAgcmVzcG9uc2VDb2RlCiAgICAgIH0KICAgIH0KICAgIC4uLiBvbiBDaGVja1JlamVjdGlvbiB7CiAgICAgIF9fdHlwZW5hbWUKICAgICAgbWVzc2FnZQogICAgICBmbmNpSW5mbyB7CiAgICAgICAgY29sb3JDb2RlCiAgICAgICAgY3B0MQogICAgICAgIGNwdDIKICAgICAgICBjcHQzCiAgICAgICAgaG9sZGVyRXN0YWJsaXNobWVudAogICAgICAgIHJlc3BvbnNlQ29kZQogICAgICB9CiAgICB9CiAgfQp9Cg%3D%3D&tab=api) @@ -62,7 +62,6 @@ mutation InitiateCheckPayment { } } } - ``` ### Payload {#payload} @@ -92,22 +91,22 @@ Note the `colorCode` `GREEN`, meaning the merchant can continue processing this At this stage, the transaction has been initiated and the following events occur: 1. **Swan**: - 1. Confirms that the check amount does not exceed 10 000€. - 1. Verifies that the field formats are consistent with the check provider's specifications. - 1. Creates a `checkIn` transaction with the status `Upcoming`. `checkIn` transactions retain the status `Upcoming` until the check amount is credited to the Swan settlement account. + 1. Confirms that the check amount does not exceed 10 000€. + 1. Verifies that the field formats are consistent with the check provider's specifications. + 1. Creates a `checkIn` transaction with the status `Upcoming`. `checkIn` transactions retain the status `Upcoming` until the check amount is credited to the Swan settlement account. 1. **Merchant**: - 1. For **one** check: - 1. Signs the back of the check. - 1. Writes their Swan account number on the back of the check. - 1. For **multiple** checks: - 1. Signs the back of each check. - 1. Places all checks in one envelope. - 1. Includes their Swan account number in the envelope. - 1. Sends the check to Swan's check provider by physical mail within 30 days of the `initiateCheckMerchantPayment` mutation call. + 1. For **one** check: + 1. Signs the back of the check. + 1. Writes their Swan account number on the back of the check. + 1. For **multiple** checks: + 1. Signs the back of each check. + 1. Places all checks in one envelope. + 1. Includes their Swan account number in the envelope. + 1. Sends the check to Swan's check provider by physical mail within 30 days of the `initiateCheckMerchantPayment` mutation call. 1. **Swan's check provider**: - 1. [Processes the check](./index.mdx#rolling-reserve), after which the status changes to `Booked`. This can take a few business days. + 1. [Processes the check](./index.mdx#rolling-reserve), after which the status changes to `Booked`. This can take a few business days. After a check is `Booked`, the [rolling reserve](./index.mdx#settlement) window starts. After the rolling reserve window, the check amount is added to the account's available balance. -If funds are insufficient for the check deposit, a `checkInReturn` will appear on your transaction history. \ No newline at end of file +If funds are insufficient for the check deposit, a `checkInReturn` will appear on your transaction history. diff --git a/docs/topics/merchants/checks/guide-request.mdx b/docs/topics/merchants/checks/guide-request.mdx index fe7e5565656..560d64eac20 100644 --- a/docs/topics/merchants/checks/guide-request.mdx +++ b/docs/topics/merchants/checks/guide-request.mdx @@ -4,13 +4,13 @@ title: Request French checks # Request French checks -import RequestPaymentMethodIntro from '../partials/_guide-request-intro.mdx'; +import RequestPaymentMethodIntro from "../partials/_guide-request-intro.mdx"; ## Guide {#guide} -import RequestPaymentMethodSteps from '../partials/_guide-request-steps.mdx'; +import RequestPaymentMethodSteps from "../partials/_guide-request-steps.mdx"; @@ -84,4 +84,4 @@ The payload confirms that the payment method `Check` was requested successfully } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/merchants/checks/index.mdx b/docs/topics/merchants/checks/index.mdx index 389ba23b247..bdedeba5e02 100644 --- a/docs/topics/merchants/checks/index.mdx +++ b/docs/topics/merchants/checks/index.mdx @@ -25,9 +25,9 @@ When declaring checks with the API, there are five mandatory API fields: 1. `amount`: monetary amount of the check (can't exceed 10 000€). 1. `currency`: `EUR` (only euros are supported). 1. `CMC7` (Caractères Magnétiques Codés à 7 bâtonnets): 31-digit code composed of 3 series of numbers. - - Series 1: check number; 7 digits - - Series 2: interbank codes; 12 digits - - Series 3: account number; 12 digits + - Series 1: check number; 7 digits + - Series 2: interbank codes; 12 digits + - Series 3: account number; 12 digits 1. `rlmcKey` (Recomposition de la Ligne Magnétique du Chèque): 2-digit code surrounded by chevrons `< >` or parentheses `( )` calculated based on the CMC7. 1. `merchantProfileId`: your developers should enter the merchant's profile ID number. @@ -35,13 +35,13 @@ On the **back of the check**, the merchant must write their Swan account number ## Rolling reserve {#rolling-reserve} -import RollingReserve from '../partials/_rolling-reserve.mdx'; +import RollingReserve from "../partials/_rolling-reserve.mdx"; -| Payment method | Rolling reserve | Default amount | -| --- | --- | --- | -| French checks | ✓ **Yes** | 100% over 10 business days | +| Payment method | Rolling reserve | Default amount | +| -------------- | --------------- | -------------------------- | +| French checks | ✓ **Yes** | 100% over 10 business days | ## Settlement date and booked time {#settlement} @@ -49,12 +49,12 @@ Checks are booked 2-3 business days after they arrive at the check processing ce ## FNCI & verifying checks {#fnci} -The FNCI stands for *Le fichier national des chèques irréguliers*, meaning the National Irregular Check Register. -It's a database of stolen and opposed checks made available to remitters by the *Banque de France*, helping you and your users **reduce the risk** of cashing fraudulent checks. +The FNCI stands for _Le fichier national des chèques irréguliers_, meaning the National Irregular Check Register. +It's a database of stolen and opposed checks made available to remitters by the _Banque de France_, helping you and your users **reduce the risk** of cashing fraudulent checks. -When your merchants accept check payments with Swan, Swan **verifies the check's regularity** with the *Banque de France*. +When your merchants accept check payments with Swan, Swan **verifies the check's regularity** with the _Banque de France_. You **receive the result** of a check's verification **with the API**, and your merchants see the result if you're using Swan's Web Banking interface. -If you're not using Web Banking, consider **integrating the FNCI result** in your product. +If you're not using Web Banking, consider **integrating the FNCI result** in your product. ### FNCI results {#fnci-results} @@ -72,21 +72,44 @@ With the results, you receive the **name of the bank that issued the check** alo Positive, meaning the check isn't fraudulent. - **Orange**
**White**
**Red** - Irregular, meaning there's something wrong with the check. For example, the account might be closed, the account holder might not be allowed to write checks, or the check might have been reported as lost or stolen.

⛔ Swan **doesn't accept** checks with the color code orange, white, or red. + + **Orange** +
+ **White** +
+ **Red** + + + Irregular, meaning there's something wrong with the check. For example, + the account might be closed, the account holder might not be allowed to + write checks, or the check might have been reported as lost or stolen. +
+
⛔ Swan **doesn't accept** checks with the color code orange, white, + or red. + Check Payment Control (CPT) **CPT1** - Number of FNCI verifications performed on the current day for checks issued by the account holder. + + Number of FNCI verifications performed on the current day for checks + issued by the account holder. + **CPT2** - Number of FNCI verifications conducted in the past few days for checks issued by the same account holder. + + Number of FNCI verifications conducted in the past few days for checks + issued by the same account holder. + **CPT3** - Number of FNCI verifications in recent days for checks issued by the same account holder, typically over a different or extended time period as compared to CPT2. + + Number of FNCI verifications in recent days for checks issued by the same + account holder, typically over a different or extended time period as + compared to CPT2. + Holder establishment @@ -112,18 +135,18 @@ Additionally, all checks not sent to Swan's check provider within 30 days of bei A check transaction can be rejected for the following reasons: -| Rejection reason | Explanation | -| --- | --- | -| `AmountMismatch` | Amount on the check and amount declared through the API don't match | -| `BeneficiaryMissingOrIncorrect` | Merchant's name is missing or incorrect | -| `CheckReceivedLate` | Check was received by Swan's check provider more than 30 days after the check was declared, or if Swan's check provider received a canceled check | -| `DateMissing` | There's no date on the check | -| `DateInvalid` | Date on the check is in the future or isn't valid | -| `DebtorNameMissing` | Debtor's name (merchant's customer) must appear on the check | -| `EndorsementMissing` | Merchant didn't sign the back of the check or provide their Swan account number | -| `InvalidOrMissingAmount` | No amount is written on the check, the format shows an invalid amount, or the amount is shared in the wrong format (numbers instead of letters) | -| `SignatureMissing` | Signature is missing, or there was a problem with the signature | -| `SuspiciousCheck` | Suspicion of fraud | +| Rejection reason | Explanation | +| ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| `AmountMismatch` | Amount on the check and amount declared through the API don't match | +| `BeneficiaryMissingOrIncorrect` | Merchant's name is missing or incorrect | +| `CheckReceivedLate` | Check was received by Swan's check provider more than 30 days after the check was declared, or if Swan's check provider received a canceled check | +| `DateMissing` | There's no date on the check | +| `DateInvalid` | Date on the check is in the future or isn't valid | +| `DebtorNameMissing` | Debtor's name (merchant's customer) must appear on the check | +| `EndorsementMissing` | Merchant didn't sign the back of the check or provide their Swan account number | +| `InvalidOrMissingAmount` | No amount is written on the check, the format shows an invalid amount, or the amount is shared in the wrong format (numbers instead of letters) | +| `SignatureMissing` | Signature is missing, or there was a problem with the signature | +| `SuspiciousCheck` | Suspicion of fraud | ### Returned {#returned} @@ -140,7 +163,7 @@ Therefore, when Swan is notified that a `Booked` check has gone unpaid, a `check ### Canceled {#canceled} -Creditors can cancel a received check with the `Upcoming` status *unless* the check processing center already received the check. +Creditors can cancel a received check with the `Upcoming` status _unless_ the check processing center already received the check. In this case of a canceled check, the status switches automatically to `Canceled`. This transaction won't impact the account's available balance. @@ -149,4 +172,4 @@ This transaction won't impact the account's available balance. - [**Step-by-step**: Accept payments with French checks](./guide-checks.mdx) - [Request French checks payment method](./guide-request.mdx) - [Initiate a French check transaction](./guide-initiate.mdx) -- [Sandbox](./sandbox.mdx) \ No newline at end of file +- [Sandbox](./sandbox.mdx) diff --git a/docs/topics/merchants/checks/sandbox.mdx b/docs/topics/merchants/checks/sandbox.mdx index 7573e6408d6..110fbcd4f9c 100644 --- a/docs/topics/merchants/checks/sandbox.mdx +++ b/docs/topics/merchants/checks/sandbox.mdx @@ -83,7 +83,6 @@ mutation SimulateIncomingCheckReject { } } } - ``` ## [Simulate a `checkInReturn` transaction](https://explorer.swan.io?query=bXV0YXRpb24gU2ltdWxhdGVDaGVja0luUmV0dXJuIHsKICBzaW11bGF0ZUluY29taW5nQ2hlY2tSZXR1cm4oCiAgICBpbnB1dDogeyB0cmFuc2FjdGlvbklkOiAiJFlPVVJfVFJBTlNBQ1RJT05fSUQiIH0KICApIHsKICAgIC4uLiBvbiBTaW11bGF0ZUluY29taW5nQ2hlY2tSZXR1cm5TdWNjZXNzUGF5bG9hZCB7CiAgICAgIF9fdHlwZW5hbWUKICAgICAgdHJhbnNhY3Rpb25JZAogICAgfQogICAgLi4uIG9uIEZvcmJpZGRlblJlamVjdGlvbiB7CiAgICAgIF9fdHlwZW5hbWUKICAgICAgbWVzc2FnZQogICAgfQogICAgLi4uIG9uIFRyYW5zYWN0aW9uTm90Rm91bmRSZWplY3Rpb24gewogICAgICBfX3R5cGVuYW1lCiAgICAgIG1lc3NhZ2UKICAgICAgdHJhbnNhY3Rpb25JZAogICAgfQogIH0KfQo%3D&tab=test-api) {#simulate-return} @@ -138,4 +137,4 @@ mutation GenerateCheck { } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/merchants/idd/guide-declare.mdx b/docs/topics/merchants/idd/guide-declare.mdx index 5c31b332a44..6c1ed2caf62 100644 --- a/docs/topics/merchants/idd/guide-declare.mdx +++ b/docs/topics/merchants/idd/guide-declare.mdx @@ -10,12 +10,13 @@ Each debtor must have their own payment mandate. [Review the requirements](./index.mdx#mandates) for Internal Direct Debit payment mandates if needed. :::tip Prerequisites + - Debtor's account status: any except `Closing` or `Closed` - Merchant profile status: `Enabled` - Internal Direct Debit B2B payment method status: `Enabled` - Debtor and merchant have accounts in the same Swan projects - [B2B only] Debtor's account type: `Company` -::: + ::: ## Declare a payment mandate {#declare} @@ -24,7 +25,7 @@ Each debtor must have their own payment mandate. 1. Replace `$YOUR_DEBTOR_ACCOUNT_ID` and `$YOUR_PAYMENT_METHOD_ID` with IDs from your project (lines 4, 5). 1. Choose either Standard or B2B in your [mandate name](./index.mdx#mandates-info) (line 6). 1. Choose `Recurrent` or `OneOff`. - - [`OneOff` payment mandates](./index.mdx#mandates-oneoff) can only be used once. + - [`OneOff` payment mandates](./index.mdx#mandates-oneoff) can only be used once. 1. Add validations and rejections that are helpful for you, as well as optional information such as a `reference` for your internal use. 1. The payment mandate is created with the status `Enabled`. @@ -108,9 +109,10 @@ Note the `id` (line 6) for your Internal Direct Debit payment mandate. For Internal Direct Debit B2B only, call the `addReceivedInternalDirectDebitB2bMandate` mutation to declare the received payment mandate. :::tip Prerequisites -- Only account members with the permission `canInitiatePayments` can declare mandates. + +- Only account members with the permission `canInitiatePayments` can declare mandates. - Make sure to execute the mutation on the debtor's account. -::: + ::: ### Mutation {#mutation-add} @@ -167,4 +169,4 @@ Note the `id` for the received mandate (line 6), and its status (line 8.) } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/merchants/idd/guide-idd.mdx b/docs/topics/merchants/idd/guide-idd.mdx index 29ce255e9d6..888cce5f001 100644 --- a/docs/topics/merchants/idd/guide-idd.mdx +++ b/docs/topics/merchants/idd/guide-idd.mdx @@ -41,4 +41,4 @@ When required, issue a refund to the merchant's client. ## Explore the Sandbox -→ [Internal Direct Debit Sandbox](./sandbox.mdx) \ No newline at end of file +→ [Internal Direct Debit Sandbox](./sandbox.mdx) diff --git a/docs/topics/merchants/idd/guide-initiate.mdx b/docs/topics/merchants/idd/guide-initiate.mdx index 6ce955dc826..aaef3e8d409 100644 --- a/docs/topics/merchants/idd/guide-initiate.mdx +++ b/docs/topics/merchants/idd/guide-initiate.mdx @@ -5,13 +5,14 @@ title: Initiate a transaction # Initiate an Internal Direct Debit transaction :::tip Prerequisites + - Debtor's account status: any except `Closing` or `Closed` - Merchant profile status: `Enabled` - Payment method status: `Enabled` - Direct debit payment mandate status: `Enabled` - Debtor and merchant have accounts in the same Swan projects - (B2B only) Debtor's account type: `Company` -::: + ::: ## Guide {#guide} @@ -23,9 +24,10 @@ title: Initiate a transaction ## Mutation {#mutation} -import DateIso8601 from '../../partials/_iso-8601.mdx'; +import DateIso8601 from "../../partials/_iso-8601.mdx"; :::note Dates + If the date is left empty, the transaction will be executed as soon as possible. @@ -39,9 +41,7 @@ mutation InitiateIdd { initiateMerchantPaymentCollection( input: { amount: { value: "50", currency: "EUR" } - internalDirectDebit: { - mandateId: "$YOUR_MANDATE_ID" - } + internalDirectDebit: { mandateId: "$YOUR_MANDATE_ID" } } ) { ... on ValidationRejection { @@ -76,7 +76,6 @@ mutation InitiateIdd { } } } - ``` ## Payload {#payload} @@ -102,15 +101,16 @@ Note the `id` (line 6) for your Internal Direct Debit payment and the status `In ## Next steps {#next} 1. At this point, two transactions are created automatically and sequentially: - 1. First, an incoming Internal Direct Debit (`InternalDirectDebitIn`) is created in the merchant's account with the status `Upcoming`. - 1. Then, an outgoing Internal Direct Debit (`InternalDirectDebitOut`) is created in the debtor's account with the status Upcoming. + 1. First, an incoming Internal Direct Debit (`InternalDirectDebitIn`) is created in the merchant's account with the status `Upcoming`. + 1. Then, an outgoing Internal Direct Debit (`InternalDirectDebitOut`) is created in the debtor's account with the status Upcoming. 1. On the [settlement date](./index.mdx#settlement), Swan confirms the transaction can be completed, meaning the following must be true: - 1. Debtor's Swan account status: `Enabled` *(Different from the prerequisites because the account doesn't need to be enabled to start the transaction.)*. + 1. Debtor's Swan account status: `Enabled` _(Different from the prerequisites because the account doesn't need to be enabled to start the transaction.)_. 1. Direct debit payment mandate status: `Enabled`. 1. Debtor's available balance is enough to cover the transaction. 1. Then, Swan updates the status for both the `InternalDirectDebitIn` and `InternalDirectDebitOut` to `Booked`. :::info Payment received + - **B2B** transactions: the merchant receives the payment as soon as the status passes to `Booked`. - **Standard** transactions: [rolling reserve](./index.mdx#rolling-reserve) begins after the transaction is `Booked`. After the indicated rolling reserve period, the merchant receives the payment. -::: \ No newline at end of file + ::: diff --git a/docs/topics/merchants/idd/guide-refund.mdx b/docs/topics/merchants/idd/guide-refund.mdx index bbb8fc93c95..ec81d941bc8 100644 --- a/docs/topics/merchants/idd/guide-refund.mdx +++ b/docs/topics/merchants/idd/guide-refund.mdx @@ -6,8 +6,8 @@ title: Refund a transaction Refunding an `InternalDirectDebitOut` transaction triggers the creation of two new transactions: -1. First, a new debit transaction (*Return Executed* on the `InternalDirectDebitOut`). -1. Then, a new credit transaction (*Return Received* on the `InternalDirectDebitIn`). +1. First, a new debit transaction (_Return Executed_ on the `InternalDirectDebitOut`). +1. Then, a new credit transaction (_Return Received_ on the `InternalDirectDebitIn`). Refunds must be processed by Swan. -Please send an email to support@swan.io. \ No newline at end of file +Please send an email to support@swan.io. diff --git a/docs/topics/merchants/idd/guide-request.mdx b/docs/topics/merchants/idd/guide-request.mdx index e0bcd2e9b9e..a9da2d89f5d 100644 --- a/docs/topics/merchants/idd/guide-request.mdx +++ b/docs/topics/merchants/idd/guide-request.mdx @@ -4,13 +4,13 @@ title: Request Internal Direct Debit # Request Internal Direct Debit -import RequestPaymentMethodIntro from '../partials/_guide-request-intro.mdx'; +import RequestPaymentMethodIntro from "../partials/_guide-request-intro.mdx"; ## Guide {#guide} -import RequestPaymentMethodSteps from '../partials/_guide-request-steps.mdx'; +import RequestPaymentMethodSteps from "../partials/_guide-request-steps.mdx"; @@ -70,4 +70,4 @@ The payload confirms the payment method status `Enabled`. } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/merchants/idd/index.mdx b/docs/topics/merchants/idd/index.mdx index e148bd10bec..7961575013b 100644 --- a/docs/topics/merchants/idd/index.mdx +++ b/docs/topics/merchants/idd/index.mdx @@ -11,13 +11,13 @@ Swan plays the role of the merchant bank, the clearing and settlement mechanism, If the merchant and debtor aren't using Swan accounts within the same Swan project, use [SEPA Direct Debit for merchants](../sdd/index.mdx) instead. -import DirectDebitCrossLinks from '../partials/_direct-debit-other.mdx'; +import DirectDebitCrossLinks from "../partials/_direct-debit-other.mdx"; ## Advantages of using direct debit {#advantages} -import DirectDebitAdvantages from '../partials/_direct-debit-advantages.mdx'; +import DirectDebitAdvantages from "../partials/_direct-debit-advantages.mdx"; @@ -26,20 +26,25 @@ import DirectDebitAdvantages from '../partials/_direct-debit-advantages.mdx'; Swan offers two Internal Direct Debit schemes: `Standard` and `B2B`. You can choose to use one or both schemes according to your use case. -import DirectDebitTable from '../../partials/_direct-debit-scheme-table.mdx'; +import DirectDebitTable from "../../partials/_direct-debit-scheme-table.mdx"; - + ## Rolling reserve {#rolling-reserve} -import RollingReserve from '../partials/_rolling-reserve.mdx'; +import RollingReserve from "../partials/_rolling-reserve.mdx"; -| Payment method | Rolling reserve | Default amount | -| --- | --- | --- | -| Internal Direct Debit - Standard | ✓ **Yes** | Determined by a merchant profile risk assessment | -| Internal Direct Debit - B2B | ☒ No | n/a | +| Payment method | Rolling reserve | Default amount | +| -------------------------------- | --------------- | ------------------------------------------------ | +| Internal Direct Debit - Standard | ✓ **Yes** | Determined by a merchant profile risk assessment | +| Internal Direct Debit - B2B | ☒ No | n/a | ## Payment mandates {#mandates} @@ -58,13 +63,13 @@ When the mandate is ready, [declare it to Swan](./guide-declare.mdx) through the Internal Direct Debit payment mandates must include the following information. Otherwise, the mandate is considered invalid. -| Information | Description | -| --- | --- | -| Mandate title | Choose one of the following options:
  • Standard Internal Direct Debit Mandate
  • B2B Internal Direct Debit Mandate
| -| Mandate reference | Unique identifier for the mandate, visible on the debtor's bank statement | -| Payment type | Choose one of the following options:
  • Recurrent
  • One-off
| -| Merchant (beneficiary) information |
  • Merchant name
  • Merchant account holder address
| -| Debtor information | Choose one of the following options:
  • Debtor's account number
  • Debtor's IBAN

If the debtor doesn't have a Swan account upon creation of the mandate, include their identification information instead:
  • Individual: given name, family date, and date of birth
  • Legal: name and SIREN
| +| Information | Description | +| ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Mandate title | Choose one of the following options:
  • Standard Internal Direct Debit Mandate
  • B2B Internal Direct Debit Mandate
| +| Mandate reference | Unique identifier for the mandate, visible on the debtor's bank statement | +| Payment type | Choose one of the following options:
  • Recurrent
  • One-off
| +| Merchant (beneficiary) information |
  • Merchant name
  • Merchant account holder address
| +| Debtor information | Choose one of the following options:
  • Debtor's account number
  • Debtor's IBAN

If the debtor doesn't have a Swan account upon creation of the mandate, include their identification information instead:
  • Individual: given name, family date, and date of birth
  • Legal: name and SIREN
| ### Sample content {#mandates-content} @@ -110,8 +115,8 @@ Signing the payment mandate with a **qualified electronic signature** must meet 1. The person who signed the mandate is **clearly identified**, often based on information included in your commercial contract with the debtor. They might also identify themselves by logging in to your platform. 1. **Strong customer authentication** is complete. It must include two factors: - 1. Personal identification number (PIN) or a password, and - 1. One-time password (OTP) sent by a text message to the person's mobile phone. + 1. Personal identification number (PIN) or a password, and + 1. One-time password (OTP) sent by a text message to the person's mobile phone. 1. Complete **authorization** through the electronic signature. #### Terms and conditions checkbox {#mandates-signature-checkbox} @@ -124,10 +129,10 @@ Your client is already clearly identified by being logged in to your platform. A **received direct debit mandate** is created after the debtor's account receives the `InternalDirectDebitOut` transaction. The process is different for B2B and Standard, and one-off mandates are also possible. -| Received mandate type | Description | -| --- | --- | -| B2B |
  1. Mandate created with the status `ConsentInitiationPending`.
  2. Before the debtor can consent, you must [declare the payment mandate](./guide-declare.mdx).
  3. Debtor must consent, but only the first time the mandate is used.
| -| Standard |
  1. Mandate created after a first payment is accepted.
  2. You must enable the mandate by using the debtor's user access token with `CanInitiatePayments` permissions to call the `enableReceivedDirectDebitMandate` mutation.
  3. Exception: if a mandate with the same `merchantIdentifier`, `reference`, and `accountId` already exists, a new mandate is not created.
| +| Received mandate type | Description | +| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| B2B |
  1. Mandate created with the status `ConsentInitiationPending`.
  2. Before the debtor can consent, you must [declare the payment mandate](./guide-declare.mdx).
  3. Debtor must consent, but only the first time the mandate is used.
| +| Standard |
  1. Mandate created after a first payment is accepted.
  2. You must enable the mandate by using the debtor's user access token with `CanInitiatePayments` permissions to call the `enableReceivedDirectDebitMandate` mutation.
  3. Exception: if a mandate with the same `merchantIdentifier`, `reference`, and `accountId` already exists, a new mandate is not created.
| ### One-off mandates {#mandates-oneoff} @@ -141,7 +146,7 @@ Internal Direct Debit transactions are **booked at 18:00 Central European [Summe For both B2B and Standard, the settlement date is one day after (D+1) initiating the debit if transactions are sent before **12 noon**. -import DayTimeStandard from '../../partials/_day-time.mdx'; +import DayTimeStandard from "../../partials/_day-time.mdx"; @@ -183,4 +188,4 @@ They can investigate the reason for return and take whatever action is necessary - [Declare a payment mandate](./guide-declare.mdx) - [Initiate an Internal Direct Debit transaction](./guide-initiate.mdx) - [Refund an Internal Direct Debit transaction](./guide-refund.mdx) -- [Sandbox](./sandbox.mdx) \ No newline at end of file +- [Sandbox](./sandbox.mdx) diff --git a/docs/topics/merchants/idd/sandbox.mdx b/docs/topics/merchants/idd/sandbox.mdx index 8380a22f807..32f62a923d9 100644 --- a/docs/topics/merchants/idd/sandbox.mdx +++ b/docs/topics/merchants/idd/sandbox.mdx @@ -28,4 +28,4 @@ mutation SimulateReleaseRollingReserve { } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/merchants/index.mdx b/docs/topics/merchants/index.mdx index 42c44cc5c44..0e25e6bf2f2 100644 --- a/docs/topics/merchants/index.mdx +++ b/docs/topics/merchants/index.mdx @@ -4,7 +4,7 @@ title: Merchants overview # Merchants -import MerchantsDefinition from '../definitions/_merchants.mdx'; +import MerchantsDefinition from "../definitions/_merchants.mdx"; > @@ -52,13 +52,13 @@ flowchart LR style U fill:#dfedf2,stroke:#4d8296, stroke-width:3px ``` -| Profile status | Explanation | -|---|---| -| `PendingReview` | Profile or payment method request was submitted and is pending a review by Swan.

**Next steps**:
  • If the profile or payment method request doesn't meet requirements or is deemed risky by Swan, the status moves directly to `Rejected`.
  • Otherwise, the status moves to `Enabled`.
| -| `Enabled` | Profile or payment method is active.

  • Use `Enabled` merchant profiles to request payment methods and accept payments with activated payment methods.
  • Use `Enabled` payment methods to accept payments.
  • Updates to profiles and payment methods can only occur when they have the status `Enabled`.
| -| `Suspended` | Status **assigned by Swan** when the merchant's use of their profile or payment method needs to be reviewed. The status can't return to `Enabled` without a review. | -| `Rejected` | Final status **assigned by Swan** when Swan decides the risk of this profile or the risk of this payment method for the associated merchant is too high, or for some other risk-related reason. | -| `Disabled` | Final status **set by you** using the `requestMerchantPaymentMethods` mutation. | +| Profile status | Explanation | +| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `PendingReview` | Profile or payment method request was submitted and is pending a review by Swan.

**Next steps**:
  • If the profile or payment method request doesn't meet requirements or is deemed risky by Swan, the status moves directly to `Rejected`.
  • Otherwise, the status moves to `Enabled`.
| +| `Enabled` | Profile or payment method is active.

  • Use `Enabled` merchant profiles to request payment methods and accept payments with activated payment methods.
  • Use `Enabled` payment methods to accept payments.
  • Updates to profiles and payment methods can only occur when they have the status `Enabled`.
| +| `Suspended` | Status **assigned by Swan** when the merchant's use of their profile or payment method needs to be reviewed. The status can't return to `Enabled` without a review. | +| `Rejected` | Final status **assigned by Swan** when Swan decides the risk of this profile or the risk of this payment method for the associated merchant is too high, or for some other risk-related reason. | +| `Disabled` | Final status **set by you** using the `requestMerchantPaymentMethods` mutation. | ## Merchant profiles {#profiles} @@ -100,17 +100,17 @@ Your merchants can request the following payment methods to accept payments with ### Rolling reserve {#rolling-reserve} -import RollingReserve from './partials/_rolling-reserve.mdx'; +import RollingReserve from "./partials/_rolling-reserve.mdx"; -| Payment method | Rolling reserve | Default amount | -| --- | --- | --- | -| Internal Direct Debit - Standard | ✓ **Yes** | Determined by a merchant profile risk assessment | -| Internal Direct Debit - B2B | ☒ No | n/a | -| SEPA Direct Debit - Core | ✓ **Yes** | 15% over 15 business days | -| SEPA Direct Debit - B2B | ✓ **Yes** | 100% over 3 business days | -| French checks | ✓ **Yes** | 100% over 10 interbank business days | +| Payment method | Rolling reserve | Default amount | +| -------------------------------- | --------------- | ------------------------------------------------ | +| Internal Direct Debit - Standard | ✓ **Yes** | Determined by a merchant profile risk assessment | +| Internal Direct Debit - B2B | ☒ No | n/a | +| SEPA Direct Debit - Core | ✓ **Yes** | 15% over 15 business days | +| SEPA Direct Debit - B2B | ✓ **Yes** | 100% over 3 business days | +| French checks | ✓ **Yes** | 100% over 10 interbank business days | ### Versions and statuses {#methods-versions-statuses} @@ -125,4 +125,4 @@ Therefore, you don't need to change the status before calling the API. - [Add a merchant profile](./profiles/guide-add.mdx) - [Update a merchant profile](./profiles/guide-update.mdx) - [Get information about a merchant profile](./profiles/guide-get-info.mdx) -- [Sandbox](./sandbox.mdx) \ No newline at end of file +- [Sandbox](./sandbox.mdx) diff --git a/docs/topics/merchants/partials/_direct-debit-advantages.mdx b/docs/topics/merchants/partials/_direct-debit-advantages.mdx index 0ea851705f2..568a60d7a87 100644 --- a/docs/topics/merchants/partials/_direct-debit-advantages.mdx +++ b/docs/topics/merchants/partials/_direct-debit-advantages.mdx @@ -1,9 +1,9 @@ Generally, accepting payments with direct debit instead of credit transfers improves convenience, accuracy, and cash flow for merchants. 1. **Convenience** - - After a customer agrees to a recurring direct debit transaction, the payments are automatically debited from their account on the agreed-upon date. - - This reduces manual intervention for each transaction. For certain verticals (rental management, for example), an automated debit is common practice and makes sense for the debtor and the merchant. + - After a customer agrees to a recurring direct debit transaction, the payments are automatically debited from their account on the agreed-upon date. + - This reduces manual intervention for each transaction. For certain verticals (rental management, for example), an automated debit is common practice and makes sense for the debtor and the merchant. 1. **Accuracy** - - With direct debit, there is less chance that a payment is late, for the incorrect amount, or even sent to the wrong merchant. As a result, direct debit also helps make reconciliation use cases easier. + - With direct debit, there is less chance that a payment is late, for the incorrect amount, or even sent to the wrong merchant. As a result, direct debit also helps make reconciliation use cases easier. 1. **Improved cash flow** - - Merchants can plan for payment arrival and amount. This means they can better predict and control their revenue flow, which leads to more accurate financial planning. \ No newline at end of file + - Merchants can plan for payment arrival and amount. This means they can better predict and control their revenue flow, which leads to more accurate financial planning. diff --git a/docs/topics/merchants/partials/_direct-debit-other.mdx b/docs/topics/merchants/partials/_direct-debit-other.mdx index 1d96b423844..c5224c44013 100644 --- a/docs/topics/merchants/partials/_direct-debit-other.mdx +++ b/docs/topics/merchants/partials/_direct-debit-other.mdx @@ -2,4 +2,4 @@ This section **only applies to merchants** initiating incoming direct debits to accept payments. Visit the [direct debit payments section](../../payments/direct-debit/index.mdx) for information about instructions for an outgoing direct debit, or [account funding](../../accounts/funding/index.mdx) to initiate a direct debit to your own Swan account. -::: \ No newline at end of file +::: diff --git a/docs/topics/merchants/partials/_guide-request-intro.mdx b/docs/topics/merchants/partials/_guide-request-intro.mdx index a1f440a9abf..ff424c9947c 100644 --- a/docs/topics/merchants/partials/_guide-request-intro.mdx +++ b/docs/topics/merchants/partials/_guide-request-intro.mdx @@ -1,8 +1,13 @@ -Before you can accept payments with {props.paymentMethod}, you need to request and be approved for the payment method. You can request several payment methods with the same API call. + + Before you can accept payments with {props.paymentMethod}, you need to request + and be approved for the payment method. You can{" "} + request several payment methods with the same API call. + -

+
+
:::caution Payment method review All new merchant payment methods are reviewed by Swan. Swan might contact you for more information before accepting or rejecting the payment method. -::: \ No newline at end of file +::: diff --git a/docs/topics/merchants/partials/_guide-request-steps.mdx b/docs/topics/merchants/partials/_guide-request-steps.mdx index b37250e37e0..b95dd85979b 100644 --- a/docs/topics/merchants/partials/_guide-request-steps.mdx +++ b/docs/topics/merchants/partials/_guide-request-steps.mdx @@ -1,9 +1,23 @@ -
    -
  1. Confirm you have a project access token, or, if you're an account member, a user access token with CanManageAccountMembership user rights.
  2. -
  3. Call the requestMerchantPaymentMethods mutation. You can request a payment method regardless of the status of the merchant profile.
  4. -
  5. Set {props.paymentMethod} activate to true.
  6. -
  7. The new merchant payment method is created with the status PendingReview and the version number 1.
  8. -
  9. Swan reviews the new merchant payment method and updates the status.
  10. -
-
\ No newline at end of file +
    +
  1. + Confirm you have a project access token, or, if you're an account member, + a user access token with CanManageAccountMembership user + rights. +
  2. +
  3. + Call the requestMerchantPaymentMethods mutation. You can + request a payment method regardless of the status of the merchant profile. +
  4. +
  5. + Set {props.paymentMethod} activate to true. +
  6. +
  7. + The new merchant payment method is created with the status{" "} + PendingReview and the version number 1. +
  8. +
  9. + Swan reviews the new merchant payment method and updates the status. +
  10. +
+ diff --git a/docs/topics/merchants/partials/_rolling-reserve.mdx b/docs/topics/merchants/partials/_rolling-reserve.mdx index 44a635659d8..5f73d595e50 100644 --- a/docs/topics/merchants/partials/_rolling-reserve.mdx +++ b/docs/topics/merchants/partials/_rolling-reserve.mdx @@ -5,4 +5,4 @@ Rolling reserve is expressed as a **percentage over a period of time** (example: For the indicated period of time, the amount isn't part of the merchant's [available account balance](../../accounts/index.mdx#balances), after which the funds are released to the merchant and can be used. -Rolling reserve is held in a non-interest bearing reserve for transparency between Swan and merchants, therefore reducing the risk of a conflict of interest between the two parties. \ No newline at end of file +Rolling reserve is held in a non-interest bearing reserve for transparency between Swan and merchants, therefore reducing the risk of a conflict of interest between the two parties. diff --git a/docs/topics/merchants/profiles/guide-add.mdx b/docs/topics/merchants/profiles/guide-add.mdx index c101c4ce9ec..a4bbf7d0dcc 100644 --- a/docs/topics/merchants/profiles/guide-add.mdx +++ b/docs/topics/merchants/profiles/guide-add.mdx @@ -14,8 +14,8 @@ Swan might contact you for more information before accepting or rejecting the me ## Guide {#guide} 1. Confirm your account meets the following prerequisites: - - Account holder type: `Company`. - - You have a project access token, or, if you're an account member, a user access token with `CanManageAccountMembership` permissions. + - Account holder type: `Company`. + - You have a project access token, or, if you're an account member, a user access token with `CanManageAccountMembership` permissions. 1. Call the `addMerchantProfile` mutation. 1. Include all mandatory information: `accountId`, `merchantName`, `productType`, `expectedMonthlyPaymentVolume`, and `expectedAverageBasket`. 1. Add relevant payload and rejection details to your mutation. @@ -34,14 +34,8 @@ mutation MerchantProfile { accountId: "$YOUR_ACCOUNT_ID" merchantName: "MyBrand Paper Goods" productType: Goods - expectedMonthlyPaymentVolume: { - value: "3000" - currency: "EUR" - } - expectedAverageBasket: { - value: "50" - currency: "EUR" - } + expectedMonthlyPaymentVolume: { value: "3000", currency: "EUR" } + expectedAverageBasket: { value: "50", currency: "EUR" } } ) { ... on AddMerchantProfileSuccessPayload { @@ -96,4 +90,4 @@ The payload confirms your new merchant profile with the status `PendingReview`. } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/merchants/profiles/guide-get-info.mdx b/docs/topics/merchants/profiles/guide-get-info.mdx index 0d6faa7efae..82f531c46b1 100644 --- a/docs/topics/merchants/profiles/guide-get-info.mdx +++ b/docs/topics/merchants/profiles/guide-get-info.mdx @@ -48,4 +48,4 @@ query merchantProfileInfo { } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/merchants/profiles/guide-update.mdx b/docs/topics/merchants/profiles/guide-update.mdx index 7e785146744..8ec305563f2 100644 --- a/docs/topics/merchants/profiles/guide-update.mdx +++ b/docs/topics/merchants/profiles/guide-update.mdx @@ -12,16 +12,16 @@ All updates must be reviewed by Swan. Updating a merchant profile produces the following events: - The [merchant profile status](../index.mdx#statuses) doesn't change (remains `Enabled`), and the merchant can continue to use their merchant profile with the existing information. -- The update status is `PendingReview`, and Swan must review the new information to ensure it meets requirements. +- The update status is `PendingReview`, and Swan must review the new information to ensure it meets requirements. - After Swan reviews the request, the update status changes to `Enabled` and the updates are pushed live to the merchant profile. -::: + ::: ## Guide {#guide} 1. To request an update with the API, call the `requestMerchantProfileUpdate` mutation. You don't need consent. 1. Include all the original mandatory information, **changing only the field you wish to update**. - - Required fields: `merchantName`, `productType`, `expectedMonthlyPaymentVolume`, `expectedAverageBasket`. - - `expectedAverageBasket` is the expected average amount per transaction. + - Required fields: `merchantName`, `productType`, `expectedMonthlyPaymentVolume`, `expectedAverageBasket`. + - `expectedAverageBasket` is the expected average amount per transaction. 1. Configure the success payload to display the updated information in case you need to verify it. 1. Add relevant payload and rejection details to your mutation. @@ -71,7 +71,7 @@ mutation ProfileUpdate { ## Payload {#payload} -The payload confirms your update request to an average basket of €75 with the status `PendingReview`. +The payload confirms your update request to an average basket of €75 with the status `PendingReview`. ```json {6,9} showLineNumbers { @@ -88,4 +88,4 @@ The payload confirms your update request to an average basket of €75 with the } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/merchants/sandbox.mdx b/docs/topics/merchants/sandbox.mdx index b9aef13f35c..e60aab9ed79 100644 --- a/docs/topics/merchants/sandbox.mdx +++ b/docs/topics/merchants/sandbox.mdx @@ -59,5 +59,5 @@ mutation EnablePaymentMethod { ``` :::caution SEPA Diret Debit -For SEPA Direct Debit, you can *only* use the Partner Testing API to update the status of your payment methods. -::: \ No newline at end of file +For SEPA Direct Debit, you can _only_ use the Partner Testing API to update the status of your payment methods. +::: diff --git a/docs/topics/merchants/sdd/_guide-refund.mdx b/docs/topics/merchants/sdd/_guide-refund.mdx index f8574754134..66b908b2272 100644 --- a/docs/topics/merchants/sdd/_guide-refund.mdx +++ b/docs/topics/merchants/sdd/_guide-refund.mdx @@ -4,4 +4,4 @@ title: Refund a transaction # Refund an SEPA Direct Debit transactions -coming \ No newline at end of file +coming diff --git a/docs/topics/merchants/sdd/guide-declare.mdx b/docs/topics/merchants/sdd/guide-declare.mdx index 84268cbc207..ec0e439e9f7 100644 --- a/docs/topics/merchants/sdd/guide-declare.mdx +++ b/docs/topics/merchants/sdd/guide-declare.mdx @@ -10,11 +10,12 @@ Each debtor must have their own payment mandate. [Review the requirements](./index.mdx#mandates) for SEPA Direct Debit payment mandates if needed. :::tip Prerequisites + - Debtor's account status: any except `Closing` or `Closed` - Merchant profile status: `Enabled` - SEPA Direct Debit B2B payment method status: `Enabled` - [B2B only] Debtor's account type: `Company` -::: + ::: ## Guide {#guide} @@ -22,7 +23,7 @@ Each debtor must have their own payment mandate. 1. Call the `addSepaDirectDebitPaymentMandate` mutation. You don't need consent from the debtor. 1. Replace `$YOUR_PAYMENT_METHOD_ID` with the ID for your payment method, from your Dashboard (line 4). 1. Choose `Recurrent` or `OneOff` (line 5). - - [`OneOff` payment mandates](./index.mdx#mandates-oneoff) can only be used once. + - [`OneOff` payment mandates](./index.mdx#mandates-oneoff) can only be used once. 1. Choose the language and signature date for the mandate (lines 6-7). 1. Add information about the debtor, including `name`, `IBAN`, and their `country` of residence (lines 9-11). 1. Choose either Core or B2B in your [mandate name](./index.mdx#mandates-info) (line 13). @@ -105,7 +106,6 @@ mutation AddSddMandate { } } } - ``` ## Payload {#payload} @@ -126,4 +126,4 @@ Note the `id` (line 6) for your SEPA Direct Debit payment mandate. } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/merchants/sdd/guide-initiate.mdx b/docs/topics/merchants/sdd/guide-initiate.mdx index 5eac51b7a46..584d22902ce 100644 --- a/docs/topics/merchants/sdd/guide-initiate.mdx +++ b/docs/topics/merchants/sdd/guide-initiate.mdx @@ -5,12 +5,13 @@ title: Initiate a transaction # Initiate a SEPA Direct Debit transaction :::tip Prerequisites + - Debtor's account status: any except `Closing` or `Closed` - Merchant profile status: `Enabled` - Payment method status: `Enabled` - Direct debit payment mandate status: `Enabled` - [B2B only] Debtor's account type: `Company` -::: + ::: ## Guide {#guide} @@ -23,9 +24,10 @@ title: Initiate a transaction ## Mutation {#mutation} -import DateIso8601 from '../../partials/_iso-8601.mdx'; +import DateIso8601 from "../../partials/_iso-8601.mdx"; :::note Dates + If the date is left empty, the transaction will be executed as soon as possible. @@ -90,7 +92,6 @@ mutation InitiateSdd { } } } - ``` ## Payload {#payload} @@ -118,4 +119,4 @@ Note the `id` (line 10) for your Internal Direct Debit payment. 1. An incoming SEPA Direct Debit (`SepaDirectDebitIn`) is created in the merchant's account with the status `Upcoming`. 1. On the [settlement date](./index.mdx#settlement), the transaction status changes automatically to `Booked` and [rolling reserve](./index.mdx#rolling-reserve) begins. -1. After the indicated rolling reserve period, the merchant receives the payment. \ No newline at end of file +1. After the indicated rolling reserve period, the merchant receives the payment. diff --git a/docs/topics/merchants/sdd/guide-request.mdx b/docs/topics/merchants/sdd/guide-request.mdx index 29c80e38e47..f2606bc328e 100644 --- a/docs/topics/merchants/sdd/guide-request.mdx +++ b/docs/topics/merchants/sdd/guide-request.mdx @@ -4,13 +4,13 @@ title: Request SEPA Direct Debit # Request SEPA Direct Debit -import RequestPaymentMethodIntro from '../partials/_guide-request-intro.mdx'; +import RequestPaymentMethodIntro from "../partials/_guide-request-intro.mdx"; ## Guide {#guide} -import RequestPaymentMethodSteps from '../partials/_guide-request-steps.mdx'; +import RequestPaymentMethodSteps from "../partials/_guide-request-steps.mdx"; @@ -108,4 +108,4 @@ The payload confirms that both `SepaDirectDebitCore` and `SepaDirectDebitB2b` we } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/merchants/sdd/guide-sdd.mdx b/docs/topics/merchants/sdd/guide-sdd.mdx index cc32663da46..750f956eeba 100644 --- a/docs/topics/merchants/sdd/guide-sdd.mdx +++ b/docs/topics/merchants/sdd/guide-sdd.mdx @@ -10,7 +10,7 @@ Before accepting payments with SEPA Direct Debit, you need to add a merchant pro → [Add a merchant profile](../profiles/guide-add.mdx) -→ [Update a merchant profile](../profiles/guide-update.mdx) *if needed* +→ [Update a merchant profile](../profiles/guide-update.mdx) _if needed_ ## Step 2: Request the payment method {#step-2} @@ -30,4 +30,4 @@ Call the API to initiate SEPA Direct Debit transactions so merchant can accept p ## Bonus: Explore the Sandbox -→ [SEPA Direct Debit Sandbox](./sandbox.mdx) \ No newline at end of file +→ [SEPA Direct Debit Sandbox](./sandbox.mdx) diff --git a/docs/topics/merchants/sdd/index.mdx b/docs/topics/merchants/sdd/index.mdx index 91c1f4d4967..28b5e4ba0b0 100644 --- a/docs/topics/merchants/sdd/index.mdx +++ b/docs/topics/merchants/sdd/index.mdx @@ -8,13 +8,13 @@ title: SEPA Direct Debit Merchants can accept payments with SEPA Direct Debit. -import DirectDebitCrossLinks from '../partials/_direct-debit-other.mdx'; +import DirectDebitCrossLinks from "../partials/_direct-debit-other.mdx"; ## Direct debit advantages {#advantages} -import DirectDebitAdvantages from '../partials/_direct-debit-advantages.mdx'; +import DirectDebitAdvantages from "../partials/_direct-debit-advantages.mdx"; @@ -27,9 +27,14 @@ Refer to [billing](../../accounts/billing/index.mdx#fees-swan-standard) for info Swan offers two SEPA Direct Debit schemes: `Core` and `B2B`. You can choose to use one or both schemes according to your use case. -import DirectDebitTable from '../../partials/_direct-debit-scheme-table.mdx'; +import DirectDebitTable from "../../partials/_direct-debit-scheme-table.mdx"; - + ## SEPA Creditor Identifier (SCI) {#sci} @@ -65,14 +70,14 @@ Send an email to support@swan.io to start the process. ## Rolling reserve {#rolling-reserve} -import RollingReserve from '../partials/_rolling-reserve.mdx'; +import RollingReserve from "../partials/_rolling-reserve.mdx"; -| Payment method | Rolling reserve | Default amount | -| --- | --- | --- | -| SEPA Direct Debit - Core | ✓ **Yes** | 15% over 15 business days | -| SEPA Direct Debit - B2B | ✓ **Yes** | 100% over 3 business days | +| Payment method | Rolling reserve | Default amount | +| ------------------------ | --------------- | ------------------------- | +| SEPA Direct Debit - Core | ✓ **Yes** | 15% over 15 business days | +| SEPA Direct Debit - B2B | ✓ **Yes** | 100% over 3 business days | ## Payment mandates {#mandates} @@ -103,21 +108,21 @@ When the sequence value is `OneOff` (instead of `Recurrent`), the received SEPA In addition to a clear description of payment rights, SEPA Direct Debit payment mandates must include the following information. Otherwise, the mandate is considered invalid. -| Information | Description | -| --- | --- | -| Mandate title | Choose one of the following options:
  • Core SEPA Direct Debit Mandate
  • B2B SEPA Direct Debit Mandate
| -| Mandate reference |
  • Unique identifier for the mandate
  • Visible on the debtor's bank statement
| -| Payment type | Choose one of the following options:
  • Recurrent
  • One-off
| -| Merchant (beneficiary) information |
  • Merchant name
  • Merchant account holder address
| -| Debtor information |
  • Debtor's IBAN
  • Debtor's address
| +| Information | Description | +| ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | +| Mandate title | Choose one of the following options:
  • Core SEPA Direct Debit Mandate
  • B2B SEPA Direct Debit Mandate
| +| Mandate reference |
  • Unique identifier for the mandate
  • Visible on the debtor's bank statement
| +| Payment type | Choose one of the following options:
  • Recurrent
  • One-off
| +| Merchant (beneficiary) information |
  • Merchant name
  • Merchant account holder address
| +| Debtor information |
  • Debtor's IBAN
  • Debtor's address
| ## Settlement date and booked time {#settlement} -import SddBookedTime from '../../partials/_sdd-booked.mdx'; +import SddBookedTime from "../../partials/_sdd-booked.mdx"; -import DayTimeStandard from '../../partials/_day-time.mdx'; +import DayTimeStandard from "../../partials/_day-time.mdx"; @@ -161,4 +166,4 @@ They can investigate the reason for return and take whatever action is necessary - [Request SEPA Direct Debit payment method](./guide-request.mdx) - [Declare a payment mandate](./guide-declare.mdx) - [Initiate a SEPA Direct Debit transaction](./guide-initiate.mdx) -- [Sandbox](./sandbox.mdx) \ No newline at end of file +- [Sandbox](./sandbox.mdx) diff --git a/docs/topics/merchants/sdd/sandbox.mdx b/docs/topics/merchants/sdd/sandbox.mdx index b2178d3d395..693d9786a90 100644 --- a/docs/topics/merchants/sdd/sandbox.mdx +++ b/docs/topics/merchants/sdd/sandbox.mdx @@ -10,7 +10,9 @@ When testing your integration, you might need to simulate certain events with th ```graphql {2} showLineNumbers mutation SimulateIncomingSepaDirectDebitBooking { - simulateIncomingSepaDirectDebitBooking(input: { transactionId: "$YOUR_TRANSACTION_ID" }) { + simulateIncomingSepaDirectDebitBooking( + input: { transactionId: "$YOUR_TRANSACTION_ID" } + ) { ... on SimulateIncomingSepaDirectDebitBookingSuccessPayload { __typename transactionId @@ -78,4 +80,4 @@ mutation SimulateIncomingSepaDirectDebitReject { } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/onboarding/_public-onboarding-links.mdx b/docs/topics/onboarding/_public-onboarding-links.mdx index e50efa91630..29ddf07cbda 100644 --- a/docs/topics/onboarding/_public-onboarding-links.mdx +++ b/docs/topics/onboarding/_public-onboarding-links.mdx @@ -1,4 +1,4 @@ :::caution Public onboarding links Use public links with caution. Those with fraudulent intent can use these public links to complete multiple onboardings, and if this happens undetected, they'll have multiple accounts in your project. -::: \ No newline at end of file +::: diff --git a/docs/topics/onboarding/account-holders/guide-add-additional-account.mdx b/docs/topics/onboarding/account-holders/guide-add-additional-account.mdx index a55504cfb15..e682ab81bf1 100644 --- a/docs/topics/onboarding/account-holders/guide-add-additional-account.mdx +++ b/docs/topics/onboarding/account-holders/guide-add-additional-account.mdx @@ -14,7 +14,7 @@ The account holder must be `Verified` with an `Open` account. 1. [Call the `OnboardIndividualAccountHolder` mutation](../individual/guide-create.mdx), using the same information as the account holder's existing Swan account. 1. Finalize the onboarding with the new onboarding ID and the user access token. -The account holder doesn't need to do anything. + The account holder doesn't need to do anything. 1. You'll get new `accountId` immediately with the status `Pending`. 1. Swan will verify the account. -Since Swan already knows the account holder, verification is quicker than for a new account holder. \ No newline at end of file + Since Swan already knows the account holder, verification is quicker than for a new account holder. diff --git a/docs/topics/onboarding/account-holders/index.mdx b/docs/topics/onboarding/account-holders/index.mdx index 321f0b28bda..8d4d9550a13 100644 --- a/docs/topics/onboarding/account-holders/index.mdx +++ b/docs/topics/onboarding/account-holders/index.mdx @@ -4,11 +4,11 @@ title: Account holders # Account holders -import AccountHolderDefinition from '../../definitions/_account-holder.mdx'; +import AccountHolderDefinition from "../../definitions/_account-holder.mdx"; > -Account holders can be **individuals** or **companies** (considered *legal entities*), and account holders can have as many Swan accounts as they need. +Account holders can be **individuals** or **companies** (considered _legal entities_), and account holders can have as many Swan accounts as they need. In order for funds to be stored in a Swan account, they must be associated with an account holder. As a result of the onboarding process, **users become account holders**. @@ -73,13 +73,13 @@ flowchart LR style F fill:#fffdf4,stroke:#cca922 ``` -| Verification status | Explanation | -|---|---| -| `NotStarted` | Verification process hasn't started yet. The account holder's legal representative needs to complete [identification](../../users/identifications/index.mdx) before starting account holder verification. | -| `Pending` | Swan is reviewing the account holder's information before activating or refusing the account. | -| `WaitingForInformation` | Swan is waiting for information from the account holder, such as a [supporting document](../documents/index.mdx) or other information. | -| `Verified` | Swan verified the account holder and the process is complete | -| `Refused` | Swan won't onboard this account holder | +| Verification status | Explanation | +| ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `NotStarted` | Verification process hasn't started yet. The account holder's legal representative needs to complete [identification](../../users/identifications/index.mdx) before starting account holder verification. | +| `Pending` | Swan is reviewing the account holder's information before activating or refusing the account. | +| `WaitingForInformation` | Swan is waiting for information from the account holder, such as a [supporting document](../documents/index.mdx) or other information. | +| `Verified` | Swan verified the account holder and the process is complete | +| `Refused` | Swan won't onboard this account holder | ### Sequence diagram {#verification-process-diagram} @@ -112,6 +112,6 @@ participant S as Swan ## Guides {#guides} -* [Monitior onboarding to track the verification process](../overview/guide-get-info.mdx) -* [Add an account for an existing account holder](./guide-add-additional-account.mdx) -* [Sandbox](./sandbox.mdx) \ No newline at end of file +- [Monitior onboarding to track the verification process](../overview/guide-get-info.mdx) +- [Add an account for an existing account holder](./guide-add-additional-account.mdx) +- [Sandbox](./sandbox.mdx) diff --git a/docs/topics/onboarding/account-holders/sandbox.mdx b/docs/topics/onboarding/account-holders/sandbox.mdx index 71c55142532..7d5862c5331 100644 --- a/docs/topics/onboarding/account-holders/sandbox.mdx +++ b/docs/topics/onboarding/account-holders/sandbox.mdx @@ -1,8 +1,9 @@ --- title: Sandbox --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; # Sandbox: Account holders @@ -13,7 +14,7 @@ import TabItem from '@theme/TabItem'; Use the Dashboard to get the account holder ID. You could also use the `accountHolders` query. -However, since you can only simulate updating one account holder status at a time, and *from your Dashboard*, it's simpler to get the ID from the Dashboard. +However, since you can only simulate updating one account holder status at a time, and _from your Dashboard_, it's simpler to get the ID from the Dashboard. 1. On your Dashboard, go to **Data** > **Account holders**. 1. Locate the account holder you need. @@ -31,4 +32,4 @@ With the account holder ID, use the Event Simulator to change the [account holde 1. From the dropdown, choose the status you'd like to simulate. 1. Click **Simulate**. -![Simulate changing an account holder's verification status with the Event Simulator](../../../images/topics/onboarding/sandbox-account-holder-verif-status.png) \ No newline at end of file +![Simulate changing an account holder's verification status with the Event Simulator](../../../images/topics/onboarding/sandbox-account-holder-verif-status.png) diff --git a/docs/topics/onboarding/company/guide-create.mdx b/docs/topics/onboarding/company/guide-create.mdx index bfb5c33d330..0211d68efab 100644 --- a/docs/topics/onboarding/company/guide-create.mdx +++ b/docs/topics/onboarding/company/guide-create.mdx @@ -1,14 +1,14 @@ --- -title: Create a company onboarding link +title: Create a company onboarding link --- # Create a company onboarding link -import CreateOnboardingPrereqs from '../partials/_prereqs-create.mdx'; +import CreateOnboardingPrereqs from "../partials/_prereqs-create.mdx"; -import PublicOnboardingLinks from '../_public-onboarding-links.mdx'; +import PublicOnboardingLinks from "../_public-onboarding-links.mdx"; @@ -18,9 +18,9 @@ Create a unique company onboarding link for each user with the API. 1. Call the `onboardCompanyAccountHolder` mutation. 1. Enter information for all required API fields for the account country, as noted in [country requirements for company accounts](./index.mdx#country-reqs). - 1. Start with general company information (lines 4-21). - 1. Next, add details about your UBO. - 1. Finally, add details about your legal representative (if needed; not shown). + 1. Start with general company information (lines 4-21). + 1. Next, add details about your UBO. + 1. Finally, add details about your legal representative (if needed; not shown). 1. Include optional fields as needed for your use case (such as `accountName` or `redirectUrl`). 1. Add optional messages to the success payload, either for validation or in case of rejection. @@ -121,8 +121,8 @@ If you added validation or rejection messages, you'll see information such as th ## Public link using the Dashboard {#dashboard} -import PublicOnboardingUrl from '../partials/_create-public-url.mdx'; +import PublicOnboardingUrl from "../partials/_create-public-url.mdx"; -![Screenshot of Swan Dashboard onboarding page with a callout of the onboarding ID](../../../images/topics/onboarding/onboarding-dashboard-url-comp.png) \ No newline at end of file +![Screenshot of Swan Dashboard onboarding page with a callout of the onboarding ID](../../../images/topics/onboarding/onboarding-dashboard-url-comp.png) diff --git a/docs/topics/onboarding/company/guide-update.mdx b/docs/topics/onboarding/company/guide-update.mdx index 6367a31b5da..2b7c2b482ac 100644 --- a/docs/topics/onboarding/company/guide-update.mdx +++ b/docs/topics/onboarding/company/guide-update.mdx @@ -11,7 +11,7 @@ Fields about an ultimate beneficial owner (UBO) can't be updated incrementally. If you need to update UBO information, **you must submit all of the fields again**. ::: -import UpdateOnboardingPrereqs from '../partials/_prereqs-update.mdx'; +import UpdateOnboardingPrereqs from "../partials/_prereqs-update.mdx"; @@ -22,9 +22,9 @@ To test updating a company onboarding, **change the language**. 1. First, [retrieve the ID](../overview/guide-get-info) for the onboarding you need to update. 1. Call the `updateCompanyOnboarding` mutation. 1. Enter the onboarding ID retrieved in step 1. -1. Check the box for `language`, then enter the language code of your choosing (example: `fr` or `es`). +1. Check the box for `language`, then enter the language code of your choosing (example: `fr` or `es`). 1. Add desired messages to the success payload, either for validation or in case of rejection. - * **Recommendation**: Inside the `UpdateCompanyOnboardingSuccessPayload` option, add `onboardingState` and `statusInfo` > `status` to confirm the onboarding is still ongoing and valid after making the update. + - **Recommendation**: Inside the `UpdateCompanyOnboardingSuccessPayload` option, add `onboardingState` and `statusInfo` > `status` to confirm the onboarding is still ongoing and valid after making the update. ## Mutation {#mutation} @@ -81,4 +81,4 @@ mutation UpdateCompanyOnboarding { } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/onboarding/company/index.mdx b/docs/topics/onboarding/company/index.mdx index 00c555bb452..ee5e33d89e8 100644 --- a/docs/topics/onboarding/company/index.mdx +++ b/docs/topics/onboarding/company/index.mdx @@ -4,11 +4,12 @@ title: Company account onboarding # Company account onboarding -import CompanyOnboardingDefinition from '../../definitions/_onboarding-company.mdx'; +import CompanyOnboardingDefinition from "../../definitions/_onboarding-company.mdx"; > -> **Self-employed** users hold company accounts. -Refer to the country requirements section for more information about identification for self-employed users. +> **Self-employed** users hold company accounts. Refer to the country +> requirements section for more information about identification for +> self-employed users. ## Process overview {#overview} @@ -18,7 +19,7 @@ Company onboarding supports different types of organizations, including: - Self-employed workers - Associations or not-for-profit organizations -import OnboardingOverview from '../partials/_overview.mdx'; +import OnboardingOverview from "../partials/_overview.mdx"; @@ -30,7 +31,7 @@ Then, Swan collects the following information: 1. User's **email address**. 1. Legal information about the organization, including the **company name**, **registration number** (optional), **VAT number** (optional), and **address**, as well as details about the organization's **activity** and **expected monthly volume**. 1. Information about the company's **ultimate beneficial owners** (UBO). -This step only applies if the user selected **company**, **home owner association**, or **other** when submitting their preliminary details. + This step only applies if the user selected **company**, **home owner association**, or **other** when submitting their preliminary details. 1. **Required documents** to verify your organization. You might not see this step in your onboarding process. 1. User [**signs up**](../../users/index.mdx#signup) for Swan. @@ -46,21 +47,22 @@ Swan supports multiple [identification processes](../../users/identifications/in For company onboarding, the following levels are recommended based on the account country. | Account country | Recommended level for legal rep | Other supported levels | -|---|---|---| -| 🇫🇷 France | ✓ **Expert** | QES
PVID | -| 🇩🇪 Germany | ✓ **Expert** | QES | -| 🇳🇱 Netherlands | ✓ **Expert** | QES
PVID | -| 🇪🇸 Spain | ✓ **Expert** | QES
PVID | +| --------------- | ------------------------------- | ---------------------- | +| 🇫🇷 France | ✓ **Expert** | QES
PVID | +| 🇩🇪 Germany | ✓ **Expert** | QES | +| 🇳🇱 Netherlands | ✓ **Expert** | QES
PVID | +| 🇪🇸 Spain | ✓ **Expert** | QES
PVID | :::info Self-employed account holders + - **France unregistered self-employed**: PVID, or Expert and a first transfer to your Swan account (QES is technically accepted but not preferred) - **France registered self-employed**: Expert - **Germany self-employed**: QES and a first transfer to your Swan account -::: + ::: ## Country requirements for company accounts {#country-reqs} -import CountryReqs from '../partials/_country-reqs.mdx'; +import CountryReqs from "../partials/_country-reqs.mdx"; @@ -73,34 +75,34 @@ If the cell is empty, the field is optional. ### Company and account holder information {#country-reqs-company-account-holder} -| API field | 🇫🇷
France | 🇩🇪
Germany | 🇳🇱
Netherlands | 🇪🇸
Spain | -|---|---|---|---| ---| -|`accountCountry`| ✓ Required (**FRA**) | ✓ Required (**DEU**) | ✓ Required (**NLD**) | ✓ Required (**ESP**) | -|`accountName`| | | | | -|`businessActivity`| ✓ Required | ✓ Required | ✓ Required | ✓ Required | -|`businessActivityDescription`| ✓ Required | ✓ Required | ✓ Required | ✓ Required | -|`companyType`| ✓ Required | ✓ Required | ✓ Required | ✓ Required | -|`email`| ✓ Required | ✓ Required | ✓ Required | ✓ Required | -|`isRegistered`| ✓ Required | ✓ Required | ✓ Required | ✓ Required | -|`language`| ✓ Required | ✓ Required | ✓ Required | ✓ Required | -|`monthlyPaymentVolume`| ✓ Required | ✓ Required | ✓ Required | ✓ Required | -|`name` *(company name)* | ✓ Required | ✓ Required | ✓ Required | ✓ Required | -|`redirectUrl`| | | | | -|`registrationNumber`
*(if registered)* | ✓ Required | ✓ Required | ✓ Required | ✓ Required | -|`residencyAddress.addressLine1`| ✓ Required | ✓ Required | ✓ Required | ✓ Required | -|`residencyAddress.addressLine2`| | | | | -|`residencyAddress.city`| ✓ Required | ✓ Required | ✓ Required | ✓ Required | -|`residencyAddress.country`| ✓ Required | ✓ Required | ✓ Required | ✓ Required | -|`residencyAddress.postalCode`| ✓ Required | ✓ Required | ✓ Required | ✓ Required | -|`residencyAddress.state`| | | | | -|`taxIdentificationNumber`| | ∗ 90 days | | ﹖ Conditional | -|`typeOfRepresentation`| ✓ Required | ✓ Required | ✓ Required | ✓ Required | -|`vatNumber`| | | | | - -﹖ *Required if both the `accountCountry` and `residencyAddress.country` are Spain.* - -∗ *If the `accountCountry` is Germany, the account holder has 90 days to provide their Tax ID Number when opening an account. -Otherwise, the account i suspended.* +| API field | 🇫🇷
France | 🇩🇪
Germany | 🇳🇱
Netherlands | 🇪🇸
Spain | +| ------------------------------------------ | -------------------- | -------------------- | -------------------- | -------------------- | +| `accountCountry` | ✓ Required (**FRA**) | ✓ Required (**DEU**) | ✓ Required (**NLD**) | ✓ Required (**ESP**) | +| `accountName` | | | | | +| `businessActivity` | ✓ Required | ✓ Required | ✓ Required | ✓ Required | +| `businessActivityDescription` | ✓ Required | ✓ Required | ✓ Required | ✓ Required | +| `companyType` | ✓ Required | ✓ Required | ✓ Required | ✓ Required | +| `email` | ✓ Required | ✓ Required | ✓ Required | ✓ Required | +| `isRegistered` | ✓ Required | ✓ Required | ✓ Required | ✓ Required | +| `language` | ✓ Required | ✓ Required | ✓ Required | ✓ Required | +| `monthlyPaymentVolume` | ✓ Required | ✓ Required | ✓ Required | ✓ Required | +| `name` _(company name)_ | ✓ Required | ✓ Required | ✓ Required | ✓ Required | +| `redirectUrl` | | | | | +| `registrationNumber`
_(if registered)_ | ✓ Required | ✓ Required | ✓ Required | ✓ Required | +| `residencyAddress.addressLine1` | ✓ Required | ✓ Required | ✓ Required | ✓ Required | +| `residencyAddress.addressLine2` | | | | | +| `residencyAddress.city` | ✓ Required | ✓ Required | ✓ Required | ✓ Required | +| `residencyAddress.country` | ✓ Required | ✓ Required | ✓ Required | ✓ Required | +| `residencyAddress.postalCode` | ✓ Required | ✓ Required | ✓ Required | ✓ Required | +| `residencyAddress.state` | | | | | +| `taxIdentificationNumber` | | ∗ 90 days | | ﹖ Conditional | +| `typeOfRepresentation` | ✓ Required | ✓ Required | ✓ Required | ✓ Required | +| `vatNumber` | | | | | + +﹖ _Required if both the `accountCountry` and `residencyAddress.country` are Spain._ + +∗ _If the `accountCountry` is Germany, the account holder has 90 days to provide their Tax ID Number when opening an account. +Otherwise, the account i suspended._ ### Ultimate beneficial owner (UBO) information {#country-reqs-ubo} @@ -110,27 +112,27 @@ If your company **doesn't have a UBO**, these fields can be left **empty**. **UBO** stands for a portion of the API field: `individualUltimateBeneficialOwners`. ::: -| API field | 🇫🇷
France | 🇩🇪
Germany | 🇳🇱
Netherlands | 🇪🇸
Spain | -|---|---|---|---|---| -|`UBO.birthCity`| ✓ Required | | ✓ Required | ✓ Required | -|`UBO.birthCityPostalCode`| ✓ Required | | ✓ Required | | -|`UBO.birthCountryCode`| ✓ Required | ✓ Required | ✓ Required | ✓ Required | -|`UBO.birthDate`| ✓ Required | | ✓ Required | ✓ Required | -|`UBO.direct`| ✓ Required | ✓ Required | ✓ Required | ✓ Required | -|`UBO.indirect`| ✓ Required | ✓ Required | ✓ Required | ✓ Required | -|`UBO.firstName`| ✓ Required | ✓ Required | ✓ Required | ✓ Required | -|`UBO.lastName`| ✓ Required | ✓ Required | ✓ Required | ✓ Required | -|`UBO.residencyAddress.addressLine1`| | ✓ Required | | ✓ Required | -|`UBO.residencyAddress.addressLine2`| | | | | -|`UBO.residencyAddress.city`| | ✓ Required | | ✓ Required | -|`UBO.residencyAddress.country`| ✓ Required | ✓ Required | ✓ Required | ✓ Required | -|`UBO.residencyAddress.postalCode`| | ✓ Required | | ✓ Required | -|`UBO.residencyAddress.state`| | | | | -|`UBO.taxIdentificationNumber`| | ﹖ Conditional | | | -|`UBO.totalCapitalPercentage`| ✓ Required | ✓ Required | ✓ Required | ✓ Required | -|`UBO.type`| ✓ Required | ✓ Required | ✓ Required | ✓ Required | - -﹖ *Required if both the `accountCountry` and the UBO's `residencyAddress.country` are Germany.* +| API field | 🇫🇷
France | 🇩🇪
Germany | 🇳🇱
Netherlands | 🇪🇸
Spain | +| ----------------------------------- | ------------- | -------------- | ------------------ | ------------ | +| `UBO.birthCity` | ✓ Required | | ✓ Required | ✓ Required | +| `UBO.birthCityPostalCode` | ✓ Required | | ✓ Required | | +| `UBO.birthCountryCode` | ✓ Required | ✓ Required | ✓ Required | ✓ Required | +| `UBO.birthDate` | ✓ Required | | ✓ Required | ✓ Required | +| `UBO.direct` | ✓ Required | ✓ Required | ✓ Required | ✓ Required | +| `UBO.indirect` | ✓ Required | ✓ Required | ✓ Required | ✓ Required | +| `UBO.firstName` | ✓ Required | ✓ Required | ✓ Required | ✓ Required | +| `UBO.lastName` | ✓ Required | ✓ Required | ✓ Required | ✓ Required | +| `UBO.residencyAddress.addressLine1` | | ✓ Required | | ✓ Required | +| `UBO.residencyAddress.addressLine2` | | | | | +| `UBO.residencyAddress.city` | | ✓ Required | | ✓ Required | +| `UBO.residencyAddress.country` | ✓ Required | ✓ Required | ✓ Required | ✓ Required | +| `UBO.residencyAddress.postalCode` | | ✓ Required | | ✓ Required | +| `UBO.residencyAddress.state` | | | | | +| `UBO.taxIdentificationNumber` | | ﹖ Conditional | | | +| `UBO.totalCapitalPercentage` | ✓ Required | ✓ Required | ✓ Required | ✓ Required | +| `UBO.type` | ✓ Required | ✓ Required | ✓ Required | ✓ Required | + +﹖ _Required if both the `accountCountry` and the UBO's `residencyAddress.country` are Germany._ ### Legal representative information {#country-reqs-legal-rep} @@ -138,14 +140,14 @@ If your company **doesn't have a UBO**, these fields can be left **empty**. **lr** stands for a portion of the API field: `legalRepresentative`. ::: -| API field | 🇫🇷
France | 🇩🇪
Germany | 🇳🇱
Netherlands | 🇪🇸
Spain | -|---|---|---|---|---| -|`lrPersonalAddress.addressLine1`| | ✓ Required | ✓ Required | | -|`lrPersonalAddress.addressLine2`| | | | | -|`lrPersonalAddress.city`| | ✓ Required | ✓ Required | | -|`lrPersonalAddress.country`| | ✓ Required | ✓ Required | | -|`lrPersonalAddress.postalCode`| | ✓ Required | ✓ Required | | -|`lrPersonalAddress.state`| | | | | +| API field | 🇫🇷
France | 🇩🇪
Germany | 🇳🇱
Netherlands | 🇪🇸
Spain | +| -------------------------------- | ------------- | -------------- | ------------------ | ------------ | +| `lrPersonalAddress.addressLine1` | | ✓ Required | ✓ Required | | +| `lrPersonalAddress.addressLine2` | | | | | +| `lrPersonalAddress.city` | | ✓ Required | ✓ Required | | +| `lrPersonalAddress.country` | | ✓ Required | ✓ Required | | +| `lrPersonalAddress.postalCode` | | ✓ Required | ✓ Required | | +| `lrPersonalAddress.state` | | | | | ## User flow diagrams {#diagrams} @@ -161,7 +163,9 @@ If your company **doesn't have a UBO**, these fields can be left **empty**.
- End-user perspective of providing company onboarding documents + + End-user perspective of providing company onboarding documents +
+
## Guides {#guides} + - [Configure notifications and specify preferences](./guide-configure-notifications.mdx) - [Create a multi-consent](./guide-create-multiconsent.mdx) - [Implement server-to-server consent](./guide-implement-s2s.mdx) -- [Integrate Strong Customer Authentication](./guide-integrate-sca.mdx) \ No newline at end of file +- [Integrate Strong Customer Authentication](./guide-integrate-sca.mdx) diff --git a/docs/topics/users/identifications/guide-get-identifications.mdx b/docs/topics/users/identifications/guide-get-identifications.mdx index 085ea8f0e68..b20b88a6c41 100644 --- a/docs/topics/users/identifications/guide-get-identifications.mdx +++ b/docs/topics/users/identifications/guide-get-identifications.mdx @@ -17,8 +17,8 @@ You need a **project access token** to call the query. 1. Call the `user` query. 1. Add the user ID. 1. Add all information you'd like to review. The sample query adds all status information, as well as the `totalCount` of identifications. - - Notice the nodes `process`, `status`, and `updatedAt`, which provide information about which process was used and the identification status with that process. - - Further, notice the `levels`, and the information that will be shared if there is an invalid status connected to that level. + - Notice the nodes `process`, `status`, and `updatedAt`, which provide information about which process was used and the identification status with that process. + - Further, notice the `levels`, and the information that will be shared if there is an invalid status connected to that level. 1. Consider adding [pagination](../../../developers/using-api/pagination.mdx) if you're expecting a long list. ## Query {#query} @@ -71,7 +71,6 @@ query ListOfIdentifications { } } } - ``` ## Payload {#payload} @@ -131,9 +130,7 @@ This is expected behavior. "levels": { "expert": { "__typename": "InvalidIdentificationLevelStatusInfo", - "reasons": [ - "BadDocumentLightning" - ], + "reasons": ["BadDocumentLightning"], "status": "Invalid" }, "qes": { @@ -142,11 +139,11 @@ This is expected behavior. "pvid": {} } } - }, + } ], "totalCount": 3 } } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/users/identifications/guide-get-latest-id.mdx b/docs/topics/users/identifications/guide-get-latest-id.mdx index e83c4fc529d..d0b12359130 100644 --- a/docs/topics/users/identifications/guide-get-latest-id.mdx +++ b/docs/topics/users/identifications/guide-get-latest-id.mdx @@ -17,7 +17,7 @@ You need a **project access token** to call the query. 1. Call the `user` query. 1. Add the user ID. 1. Add all information you'd like to review. - - The sample query retrieves all identification levels awarded to the user, as well as information about their last PVID identification. + - The sample query retrieves all identification levels awarded to the user, as well as information about their last PVID identification. 1. Add [pagination](../../../developers/using-api/pagination.mdx) to get only the most recent PVID result (line 9-11). ## Query {#query} @@ -74,4 +74,4 @@ The payload shows that this user is successfully identified using PVID. } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/users/identifications/index.mdx b/docs/topics/users/identifications/index.mdx index b3854bb9eaf..21de78173db 100644 --- a/docs/topics/users/identifications/index.mdx +++ b/docs/topics/users/identifications/index.mdx @@ -30,7 +30,7 @@ Your users have the option to complete their identification when [signing up](.. Swan sends your users a text message with a link they can use to start their identification. The link can be used one time. -If the user doesn't receive the text message, they can click **Retry*** or **scan a QR code*** on the waiting page to request a new text message with the link. +If the user doesn't receive the text message, they can click **Retry\*** or **scan a QR code\*** on the waiting page to request a new text message with the link. After they close this waiting page, however, they can't request a new text message. @@ -57,23 +57,24 @@ The process your users should complete depends on the type of account and locati Identification levels and processes have the same names in the Swan API. The following table **explains each process** and indicates **which levels a successful completion awards**. -| Process | Explanation | Levels awarded | -| --- | --- | --- | -| Expert | Requires a manual, asynchronous review by an expert in identifications. It can be used to verify an account holder's legal representative as well as account memberships. | Expert level only | -| PVID
*Prestataires de vérification d'identité à distance* | Verifies a user's identity by capturing and verifying identity documents, then performing facial recognition. Any individual opening an account from an eligible account country can use PVID to complete identification, if you configure it that way. Refer to the table in the recommendations section for eligible account countries.

PVID translates to *Remote Identity Verification Service Providers* in English. | PVID and Expert levels | -| QES
*Qualified Electronic Signature* | Confirms who created a document, *and* that the document hasn't been altered since being signed. If both elements are confirmed, QES validates the authenticity and integrity of the document. Then, the user signs Swan's Terms and Conditions.

Qualified electronic signatures are compliant with [EU Regulation No 910/2014](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=uriserv%3AOJ.L_.2014.257.01.0073.01.ENG) ([eIDAS Regulation](https://digital-strategy.ec.europa.eu/en/policies/eidas-regulation)) for electronic transactions within Europe. Qualified electronic signatures are the digital equivalent to handwritten signatures. QES predominantly verifies individual account holders and requires a manual, asynchronous identity review by an expert before starting the signature. | QES and Expert levels | +| Process | Explanation | Levels awarded | +| -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- | +| Expert | Requires a manual, asynchronous review by an expert in identifications. It can be used to verify an account holder's legal representative as well as account memberships. | Expert level only | +| PVID
_Prestataires de vérification d'identité à distance_ | Verifies a user's identity by capturing and verifying identity documents, then performing facial recognition. Any individual opening an account from an eligible account country can use PVID to complete identification, if you configure it that way. Refer to the table in the recommendations section for eligible account countries.

PVID translates to _Remote Identity Verification Service Providers_ in English. | PVID and Expert levels | +| QES
_Qualified Electronic Signature_ | Confirms who created a document, _and_ that the document hasn't been altered since being signed. If both elements are confirmed, QES validates the authenticity and integrity of the document. Then, the user signs Swan's Terms and Conditions.

Qualified electronic signatures are compliant with [EU Regulation No 910/2014](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=uriserv%3AOJ.L_.2014.257.01.0073.01.ENG) ([eIDAS Regulation](https://digital-strategy.ec.europa.eu/en/policies/eidas-regulation)) for electronic transactions within Europe. Qualified electronic signatures are the digital equivalent to handwritten signatures. QES predominantly verifies individual account holders and requires a manual, asynchronous identity review by an expert before starting the signature. | QES and Expert levels | :::note Examples + - Your user successfully completes the **PVID process**. They're awarded both **PVID** and **Expert levels**. - Your user successfully completes the **QES** process. They're awarded both **QES** and **Expert levels**. -::: + ::: Find the [list of identificationLevels](https://explorer.swan.io?query=cXVlcnkgTGlzdE9mTGV2ZWxzIHsKICB1c2VyIHsKICAgIGxhc3ROYW1lCiAgICBpZGVudGlmaWNhdGlvbkxldmVscyB7CiAgICAgIGV4cGVydAogICAgICBRRVMKICAgICAgUFZJRAogICAgfQogICAgaWRlbnRpZmljYXRpb25TdGF0dXMKICAgIGlkVmVyaWZpZWQKICAgIGlkCiAgICBmaXJzdE5hbWUKICAgIGJpcnRoRGF0ZQogICAgYWxsRmlyc3ROYW1lcwogICAgbmF0aW9uYWxpdHlDQ0EzCiAgICBtb2JpbGVQaG9uZU51bWJlcgogIH0KfQo%3D&tab=api) in the `user` query. To start an identification, follow the [guide to get a user access token](../../../developers/using-api/authentication/guide-get-token-user.mdx#auth-code). :::tip Choose auto -Swan **recommends choosing `auto`** *instead of a specific process* when defining the required identification level. +Swan **recommends choosing `auto`** _instead of a specific process_ when defining the required identification level. Doing so allows Swan to direct your users to the most appropriate identification flow for their situation. ::: @@ -85,12 +86,12 @@ For each [account country](../../accounts/index.mdx#account-country) and type of Refer to the following table for accepted and recommended identification levels for individual and company accounts. The first process listed is in bold with a checkmark (✓), indicating it's the process Swan recommends. -| Account country | Individual accounts | Company accounts | -| --- | --- | --- | -| 🇫🇷 France | **✓ PVID**
Expert + first transfer
QES | **✓ Expert**
QES
PVID | -| 🇩🇪 Germany | **✓ QES** + first transfer | **✓ Expert**
QES | -| 🇳🇱 Netherlands | **✓ Expert**
QES
PVID | **✓ Expert**
QES
PVID | -| 🇪🇸 Spain | **✓ Expert** + first transfer
QES
PVID + first transfer | **✓ Expert**
QES
PVID | +| Account country | Individual accounts | Company accounts | +| --------------- | ----------------------------------------------------------------- | ------------------------------- | +| 🇫🇷 France | **✓ PVID**
Expert + first transfer
QES | **✓ Expert**
QES
PVID | +| 🇩🇪 Germany | **✓ QES** + first transfer | **✓ Expert**
QES | +| 🇳🇱 Netherlands | **✓ Expert**
QES
PVID | **✓ Expert**
QES
PVID | +| 🇪🇸 Spain | **✓ Expert** + first transfer
QES
PVID + first transfer | **✓ Expert**
QES
PVID | :::info Self-employed account holders For users who are **self-employed** account holders, recommendations depend on their status. @@ -98,7 +99,7 @@ For users who are **self-employed** account holders, recommendations depend on t - 🇫🇷 **France unregistered self-employed**: PVID, or Expert + a first transfer - 🇫🇷 **France registered self-employed**: Expert - 🇩🇪 **Germany self-employed**: QES + a first transfer -::: + ::: ## Tracking identifications {#tracking} @@ -142,15 +143,15 @@ flowchart LR style SS fill:#f6ddcc,stroke:#c12236 ``` -| Identification status | Explanation | -|---|---| -| `Started` | The identification request was created. The user might have begun the identification process, but they haven't completed it. Their identification is still in progress. | -| `Pending` | The user completed their portion of the identification process, and Swan identification service providers are reviewing it. | -| `Valid` | The user's identification was successful, determined by the service provider. | -| `Invalid` | The user's identification wasn't successful, determined by the service provider. | -| `Canceled` | An identification request is canceled by your user or Swan. Identifications can be canceled from any non-final status. You can't cancel an identification on your user's behalf. | -| `Expired` | After a user starts an identification, they have a limited amount of time to complete it. If time expires, the identification status changes to `Expired`.

  • Expert: 24 hours
  • QES: 24 hours
  • PVID: 15 minutes
| -| `NotSupported` | In the API, all levels (`Expert`, `QES`, and `PVID`) are displayed. For each identification, any level that doesn't meet your requirements is marked `NotSupported`.

*For example, in an `Expert` identification, the `PVID` status is `NotSupported`.* | +| Identification status | Explanation | +| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `Started` | The identification request was created. The user might have begun the identification process, but they haven't completed it. Their identification is still in progress. | +| `Pending` | The user completed their portion of the identification process, and Swan identification service providers are reviewing it. | +| `Valid` | The user's identification was successful, determined by the service provider. | +| `Invalid` | The user's identification wasn't successful, determined by the service provider. | +| `Canceled` | An identification request is canceled by your user or Swan. Identifications can be canceled from any non-final status. You can't cancel an identification on your user's behalf. | +| `Expired` | After a user starts an identification, they have a limited amount of time to complete it. If time expires, the identification status changes to `Expired`.

  • Expert: 24 hours
  • QES: 24 hours
  • PVID: 15 minutes
| +| `NotSupported` | In the API, all levels (`Expert`, `QES`, and `PVID`) are displayed. For each identification, any level that doesn't meet your requirements is marked `NotSupported`.

_For example, in an `Expert` identification, the `PVID` status is `NotSupported`._ | :::danger `NotStarted` deprecation The identification status `NotStarted` is being deprecated. @@ -162,36 +163,36 @@ If you're currently using it, switch to `Started` instead. Learn why your user's **identification** was rejected. You can also refer users to the Swan's end-user [Support Center](https://support.swan.io/hc/en-150/articles/16421416513693-Identity-verification-rejection-reasons-and-solutions). -| Reason code | Explanation | -| ---- | ---- | -| `AbsentOrIncompleteFace` | The user's face must be fully present in the photo. | -| `AlteredDevice` | The device the user used was flagged as being technically modified (such as jailbreaking an iPhone). | -| `BadDocumentLighting` | The lighting on the actual document is insufficient, meaning it's either not bright enough or too bright, making information illegible. | -| `DamagedDocument` | The document is damaged in some way. It could be as minor as a bent corner. | -| `ExpiredDocument` | The expiry date of document has passed. | -| `FraudDetected` | There was an attempt to commit fraud detected. | -| `InadequateVideo` | The video quality isn't sufficient or video is missing required information. | -| `InsufficientApplicantLighting` | The lighting on the user's face is insufficient, meaning it's either not bright enough or too bright. | -| `InsufficientApplicantLiveness` | When completing challenges, the user must meet minimum movement requirements. | -| `InsufficientConnectionQuality` | The user's internet connection isn't strong enough to complete the identification process. | -| `InsufficientDocumentLiveness` | When completing challenges, the user must move their document enough to meet minimum movement requirements. | -| `InsufficientDocumentReadability` | The user's document is blurry or otherwise distorted. | -| `InsufficientFaceReadability` | The user's face is blurry or otherwise distorted. | -| `InsufficientVideoReadability` | The user's video is blurry or otherwise distorted. | -| `InternalError` | There was a technical error. Swan is unable to provide more precise information for this reason code; the user should try again. | -| `InvalidAddress` | The submitted address isn't valid or in an accepted format. | -| `InvalidOrMissingData` | The user's identification data is invalid or missing. | -| `InvoluntaryIdentification` | The user seems to be completing the identification against their will. | -| `MissingGeolocationData` | The user's geolocation data is required for this identification, but it isn't available. Often, they need to consent to share this data. | -| `NonMatchingIdentity` | The user's identity doesn't match the expected identity information based on submitted information. | -| `NonOriginalDocument` | The user submitted a duplicate of the identity document, whether digital or paper, instead of the original. | -| `SanctionsListHit` | The user appears on a sanctions list. | -| `SecondDocumentRequired` | The user must provide a second identity document. | -| `TechnicalSignatureError` | There was a technical error with the electronic signature process. The user should try again. | -| `TimeoutSignatureFlow` | The time to complete the electronic signature expired. The user should try again. | -| `UnacceptableDocument` | The document submitted by the user isn't on list of acceptable document types. | -| `UnderageApplicant` | The user is under the minimum required age. Swan account holders must be at least 18. | -| `NegativeNewsHit` | The user appears on an unacceptable news list. | +| Reason code | Explanation | +| --------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `AbsentOrIncompleteFace` | The user's face must be fully present in the photo. | +| `AlteredDevice` | The device the user used was flagged as being technically modified (such as jailbreaking an iPhone). | +| `BadDocumentLighting` | The lighting on the actual document is insufficient, meaning it's either not bright enough or too bright, making information illegible. | +| `DamagedDocument` | The document is damaged in some way. It could be as minor as a bent corner. | +| `ExpiredDocument` | The expiry date of document has passed. | +| `FraudDetected` | There was an attempt to commit fraud detected. | +| `InadequateVideo` | The video quality isn't sufficient or video is missing required information. | +| `InsufficientApplicantLighting` | The lighting on the user's face is insufficient, meaning it's either not bright enough or too bright. | +| `InsufficientApplicantLiveness` | When completing challenges, the user must meet minimum movement requirements. | +| `InsufficientConnectionQuality` | The user's internet connection isn't strong enough to complete the identification process. | +| `InsufficientDocumentLiveness` | When completing challenges, the user must move their document enough to meet minimum movement requirements. | +| `InsufficientDocumentReadability` | The user's document is blurry or otherwise distorted. | +| `InsufficientFaceReadability` | The user's face is blurry or otherwise distorted. | +| `InsufficientVideoReadability` | The user's video is blurry or otherwise distorted. | +| `InternalError` | There was a technical error. Swan is unable to provide more precise information for this reason code; the user should try again. | +| `InvalidAddress` | The submitted address isn't valid or in an accepted format. | +| `InvalidOrMissingData` | The user's identification data is invalid or missing. | +| `InvoluntaryIdentification` | The user seems to be completing the identification against their will. | +| `MissingGeolocationData` | The user's geolocation data is required for this identification, but it isn't available. Often, they need to consent to share this data. | +| `NonMatchingIdentity` | The user's identity doesn't match the expected identity information based on submitted information. | +| `NonOriginalDocument` | The user submitted a duplicate of the identity document, whether digital or paper, instead of the original. | +| `SanctionsListHit` | The user appears on a sanctions list. | +| `SecondDocumentRequired` | The user must provide a second identity document. | +| `TechnicalSignatureError` | There was a technical error with the electronic signature process. The user should try again. | +| `TimeoutSignatureFlow` | The time to complete the electronic signature expired. The user should try again. | +| `UnacceptableDocument` | The document submitted by the user isn't on list of acceptable document types. | +| `UnderageApplicant` | The user is under the minimum required age. Swan account holders must be at least 18. | +| `NegativeNewsHit` | The user appears on an unacceptable news list. | ## Identity documents {#levels-documents} @@ -203,7 +204,11 @@ Contact your dedicated account manager to learn more.
End-user perspective of an identification process
- +
diff --git a/docs/topics/users/index.mdx b/docs/topics/users/index.mdx index e9fa43c5d1b..1f300722ba0 100644 --- a/docs/topics/users/index.mdx +++ b/docs/topics/users/index.mdx @@ -37,12 +37,12 @@ Your user: 1. Opens their signup link. 1. Enters their **mobile number**. - - If you include their number when creating their signup link, they won't need to enter it again. + - If you include their number when creating their signup link, they won't need to enter it again. 1. Confirms their mobile number, after which they **continue the signup process** on their mobile device. How they confirm this step depends on whether they opened the signup link from a computer or their mobile device: - - **Computer**: Swan sends your user a text message with a link to open on their mobile device. - - **Mobile device**: Swan sends your user a text message with a verification code. + - **Computer**: Swan sends your user a text message with a link to open on their mobile device. + - **Mobile device**: Swan sends your user a text message with a verification code. 1. Enters their **personal information**, including their name and birthdate. This information **must match** the information that appears on their **identity documents**. - - If you include this information when creating their signup link, they won't need to enter it again. + - If you include this information when creating their signup link, they won't need to enter it again. 1. Selects a **6-digit passcode**. They need to remember their passcode; Swan can request it anytime the user needs to consent to a sensitive operation. 1. Completes [**identification**](./identifications/index.mdx), where Swan verifies their identity. This step can be performed later, though it's recommended to complete it as soon as possible. If you're using the API, you're responsible for triggering this step. 1. Sets up **biometrics**, if desired and available on their mobile device. Biometrics typically include face or fingerprint authentication. @@ -77,12 +77,16 @@ After signing up, your user can **start using Swan**. - If you're using Swan's provided **Web Banking** interface, Swan redirects your user to the interface automatically. - If you're using a **custom API integration** or a customization of Swan's **open source frontend**, your user is redirected to the `redirectUrl` you supplied when creating their signup link. -Make sure to declare your `redirectUrl` on your **Dashboard** > **Developers** > **Redirect URIs**; otherwise, the redirection fails. + Make sure to declare your `redirectUrl` on your **Dashboard** > **Developers** > **Redirect URIs**; otherwise, the redirection fails.
End-user perspective of signing up for Swan
- +
@@ -104,14 +108,22 @@ Before trying to reconfigure biometrics, they need to update the software on the
End-user perspective of logging into Swan
- +
End-user perspective of resetting their passcode
- +
@@ -122,7 +134,7 @@ When a user is deactivated successfully, the **[phone number](#phone-numbers) as All of the following conditions must be met: -import DeactivateRequirements from './overview/_deactivate-reqs.mdx'; +import DeactivateRequirements from "./overview/_deactivate-reqs.mdx"; @@ -147,4 +159,4 @@ To get a notification when a user is deactivated, subscribe to the `User.Deactiv - [Get a list of users](./overview/guide-get-list.mdx) - [Get information about multiple users](./overview/guide-get-info-multiple.mdx) - [Get information about a single user](./overview/guide-get-info-one.mdx) -- [Deactivate a user](./overview/guide-deactivate.mdx) \ No newline at end of file +- [Deactivate a user](./overview/guide-deactivate.mdx) diff --git a/docs/topics/users/overview/_deactivate-reqs.mdx b/docs/topics/users/overview/_deactivate-reqs.mdx index 58526274bc1..4daa8a1bb1d 100644 --- a/docs/topics/users/overview/_deactivate-reqs.mdx +++ b/docs/topics/users/overview/_deactivate-reqs.mdx @@ -1,4 +1,4 @@ 1. All account memberships attributed to the user are disabled. 1. The user isn't the legal representative for any account. 1. The user doesn't have a team membership to any of your projects. - - Go to **Dashboard** > **your profile** > **Team management** to confirm the user isn't a team member. \ No newline at end of file + - Go to **Dashboard** > **your profile** > **Team management** to confirm the user isn't a team member. diff --git a/docs/topics/users/overview/guide-deactivate.mdx b/docs/topics/users/overview/guide-deactivate.mdx index 90674151e7b..edc1ad6fdad 100644 --- a/docs/topics/users/overview/guide-deactivate.mdx +++ b/docs/topics/users/overview/guide-deactivate.mdx @@ -7,7 +7,7 @@ title: Deactivate a user You can **call the API** to deactivate a user. :::tip Prerequisites -import DeactivateRequirements from './_deactivate-reqs.mdx'; +import DeactivateRequirements from './\_deactivate-reqs.mdx'; @@ -46,7 +46,6 @@ mutation DeactivateUser { } } } - ``` ## Success payload {#payload-success} @@ -78,4 +77,4 @@ This user couldn't be deactivated because they're a legal representative. } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/users/overview/guide-get-info-multiple.mdx b/docs/topics/users/overview/guide-get-info-multiple.mdx index faa78d86818..e1b50851474 100644 --- a/docs/topics/users/overview/guide-get-info-multiple.mdx +++ b/docs/topics/users/overview/guide-get-info-multiple.mdx @@ -16,7 +16,7 @@ You need a **project access token** to call the query. 1. Call the `users` query. 1. Add all information you'd like to review. - - The sample query retrieves user IDs, when the users joined the project, information about their identifications, and the language they used to authenticate, as well as the total count of users in the project. + - The sample query retrieves user IDs, when the users joined the project, information about their identifications, and the language they used to authenticate, as well as the total count of users in the project. 1. Add [pagination](../../../developers/using-api/pagination.mdx) to tailor your response to the information you need. ## Query {#query} @@ -114,4 +114,4 @@ The payload shows four users, each authenticating with a different language. } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/users/overview/guide-get-info-one.mdx b/docs/topics/users/overview/guide-get-info-one.mdx index 74de7831655..34bcf1b6077 100644 --- a/docs/topics/users/overview/guide-get-info-one.mdx +++ b/docs/topics/users/overview/guide-get-info-one.mdx @@ -79,4 +79,4 @@ They don't have any account memberships or cards. } } } -``` \ No newline at end of file +``` diff --git a/docs/topics/users/overview/guide-get-list.mdx b/docs/topics/users/overview/guide-get-list.mdx index 6f0493af3cc..863a20ef125 100644 --- a/docs/topics/users/overview/guide-get-list.mdx +++ b/docs/topics/users/overview/guide-get-list.mdx @@ -154,10 +154,10 @@ Because it was added in the query, you also know when each user joined your proj } ] } - }, + } ], "totalCount": 3 } } } -``` \ No newline at end of file +``` diff --git a/package.json b/package.json index 85c3645bb73..b6913e83fdd 100644 --- a/package.json +++ b/package.json @@ -13,10 +13,14 @@ "deploy": "docusaurus deploy", "clear": "docusaurus clear", "serve": "docusaurus serve", + "format": "prettier '{changelog,docs}/**/*' --ignore-unknown --write", "write-translations": "docusaurus write-translations", "write-heading-ids": "docusaurus write-heading-ids", "graphql-update-schemas": "mkdir scripts/graphql/dist && node scripts/graphql/downloadSchema.mjs" }, + "prettier": { + "trailingComma": "all" + }, "dependencies": { "@docusaurus/core": "3.1.0", "@docusaurus/plugin-client-redirects": "3.1.0", @@ -44,5 +48,8 @@ "last 1 firefox version", "last 1 safari version" ] + }, + "devDependencies": { + "prettier": "3.3.2" } } diff --git a/yarn.lock b/yarn.lock index 14253bd4f37..30eae16d84a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -263,28 +263,7 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== -"@babel/core@^7.12.3", "@babel/core@^7.19.6": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.5.tgz#6e23f2acbcb77ad283c5ed141f824fd9f70101c7" - integrity sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.5" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.5" - "@babel/parser" "^7.23.5" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.5" - "@babel/types" "^7.23.5" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/core@^7.23.3": +"@babel/core@^7.12.3", "@babel/core@^7.19.6", "@babel/core@^7.23.3": version "7.23.7" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.7.tgz#4d8016e06a14b5f92530a13ed0561730b5c6483f" integrity sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw== @@ -305,7 +284,7 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.3", "@babel/generator@^7.23.6": +"@babel/generator@^7.23.3", "@babel/generator@^7.23.5", "@babel/generator@^7.23.6": version "7.23.6" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== @@ -315,16 +294,6 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/generator@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.5.tgz#17d0a1ea6b62f351d281350a5f80b87a810c4755" - integrity sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA== - dependencies: - "@babel/types" "^7.23.5" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - "@babel/helper-annotate-as-pure@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" @@ -339,18 +308,7 @@ dependencies: "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-compilation-targets@^7.23.6": +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": version "7.23.6" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== @@ -385,18 +343,7 @@ regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz#a71c10f7146d809f4a256c373f462d9bba8cf6ba" - integrity sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - -"@babel/helper-define-polyfill-provider@^0.4.4": +"@babel/helper-define-polyfill-provider@^0.4.3", "@babel/helper-define-polyfill-provider@^0.4.4": version "0.4.4" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz#64df615451cb30e94b59a9696022cffac9a10088" integrity sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA== @@ -527,16 +474,7 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.22.19" -"@babel/helpers@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.5.tgz#52f522840df8f1a848d06ea6a79b79eefa72401e" - integrity sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg== - dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.5" - "@babel/types" "^7.23.5" - -"@babel/helpers@^7.23.7": +"@babel/helpers@^7.23.5", "@babel/helpers@^7.23.7": version "7.23.8" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.8.tgz#fc6b2d65b16847fd50adddbd4232c76378959e34" integrity sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ== @@ -554,12 +492,7 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.22.15", "@babel/parser@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.5.tgz#37dee97c4752af148e1d38c34b856b2507660563" - integrity sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ== - -"@babel/parser@^7.22.7", "@babel/parser@^7.23.6": +"@babel/parser@^7.22.15", "@babel/parser@^7.22.7", "@babel/parser@^7.23.5", "@babel/parser@^7.23.6": version "7.23.6" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== @@ -580,15 +513,7 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-transform-optional-chaining" "^7.23.3" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz#20c60d4639d18f7da8602548512e9d3a4c8d7098" - integrity sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.7": +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.3", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.7": version "7.23.7" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz#516462a95d10a9618f197d39ad291a9b47ae1d7b" integrity sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw== @@ -749,17 +674,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz#93ac8e3531f347fba519b4703f9ff2a75c6ae27a" - integrity sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.20" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-transform-async-generator-functions@^7.23.7": +"@babel/plugin-transform-async-generator-functions@^7.23.4", "@babel/plugin-transform-async-generator-functions@^7.23.7": version "7.23.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.7.tgz#3aa0b4f2fa3788b5226ef9346cf6d16ec61f99cd" integrity sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA== @@ -809,22 +724,7 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz#e7a75f815e0c534cc4c9a39c56636c84fc0d64f2" - integrity sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - "@babel/helper-split-export-declaration" "^7.22.6" - globals "^11.1.0" - -"@babel/plugin-transform-classes@^7.23.8": +"@babel/plugin-transform-classes@^7.23.5", "@babel/plugin-transform-classes@^7.23.8": version "7.23.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz#d08ae096c240347badd68cdf1b6d1624a6435d92" integrity sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg== @@ -892,14 +792,7 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-for-of@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz#afe115ff0fbce735e02868d41489093c63e15559" - integrity sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-for-of@^7.23.6": +"@babel/plugin-transform-for-of@^7.23.3", "@babel/plugin-transform-for-of@^7.23.6": version "7.23.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e" integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== @@ -1224,93 +1117,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/preset-env@^7.12.1", "@babel/preset-env@^7.19.4": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.5.tgz#350a3aedfa9f119ad045b068886457e895ba0ca1" - integrity sha512-0d/uxVD6tFGWXGDSfyMD1p2otoaKmu6+GD+NfAx0tMaH+dxORnp7T9TaVQ6mKyya7iBtCIVxHjWT7MuzzM9z+A== - dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.3" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.23.3" - "@babel/plugin-syntax-import-attributes" "^7.23.3" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.23.3" - "@babel/plugin-transform-async-generator-functions" "^7.23.4" - "@babel/plugin-transform-async-to-generator" "^7.23.3" - "@babel/plugin-transform-block-scoped-functions" "^7.23.3" - "@babel/plugin-transform-block-scoping" "^7.23.4" - "@babel/plugin-transform-class-properties" "^7.23.3" - "@babel/plugin-transform-class-static-block" "^7.23.4" - "@babel/plugin-transform-classes" "^7.23.5" - "@babel/plugin-transform-computed-properties" "^7.23.3" - "@babel/plugin-transform-destructuring" "^7.23.3" - "@babel/plugin-transform-dotall-regex" "^7.23.3" - "@babel/plugin-transform-duplicate-keys" "^7.23.3" - "@babel/plugin-transform-dynamic-import" "^7.23.4" - "@babel/plugin-transform-exponentiation-operator" "^7.23.3" - "@babel/plugin-transform-export-namespace-from" "^7.23.4" - "@babel/plugin-transform-for-of" "^7.23.3" - "@babel/plugin-transform-function-name" "^7.23.3" - "@babel/plugin-transform-json-strings" "^7.23.4" - "@babel/plugin-transform-literals" "^7.23.3" - "@babel/plugin-transform-logical-assignment-operators" "^7.23.4" - "@babel/plugin-transform-member-expression-literals" "^7.23.3" - "@babel/plugin-transform-modules-amd" "^7.23.3" - "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-modules-systemjs" "^7.23.3" - "@babel/plugin-transform-modules-umd" "^7.23.3" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.23.3" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" - "@babel/plugin-transform-numeric-separator" "^7.23.4" - "@babel/plugin-transform-object-rest-spread" "^7.23.4" - "@babel/plugin-transform-object-super" "^7.23.3" - "@babel/plugin-transform-optional-catch-binding" "^7.23.4" - "@babel/plugin-transform-optional-chaining" "^7.23.4" - "@babel/plugin-transform-parameters" "^7.23.3" - "@babel/plugin-transform-private-methods" "^7.23.3" - "@babel/plugin-transform-private-property-in-object" "^7.23.4" - "@babel/plugin-transform-property-literals" "^7.23.3" - "@babel/plugin-transform-regenerator" "^7.23.3" - "@babel/plugin-transform-reserved-words" "^7.23.3" - "@babel/plugin-transform-shorthand-properties" "^7.23.3" - "@babel/plugin-transform-spread" "^7.23.3" - "@babel/plugin-transform-sticky-regex" "^7.23.3" - "@babel/plugin-transform-template-literals" "^7.23.3" - "@babel/plugin-transform-typeof-symbol" "^7.23.3" - "@babel/plugin-transform-unicode-escapes" "^7.23.3" - "@babel/plugin-transform-unicode-property-regex" "^7.23.3" - "@babel/plugin-transform-unicode-regex" "^7.23.3" - "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" - "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.6" - babel-plugin-polyfill-corejs3 "^0.8.5" - babel-plugin-polyfill-regenerator "^0.5.3" - core-js-compat "^3.31.0" - semver "^6.3.1" - -"@babel/preset-env@^7.22.9": +"@babel/preset-env@^7.12.1", "@babel/preset-env@^7.19.4", "@babel/preset-env@^7.22.9": version "7.23.8" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.8.tgz#7d6f8171ea7c221ecd28059e65ad37c20e441e3e" integrity sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA== @@ -1441,14 +1248,7 @@ core-js-pure "^3.30.2" regenerator-runtime "^0.14.0" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.8.4": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.5.tgz#11edb98f8aeec529b82b211028177679144242db" - integrity sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/runtime@^7.22.6": +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.22.6", "@babel/runtime@^7.8.4": version "7.23.8" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.8.tgz#8ee6fe1ac47add7122902f257b8ddf55c898f650" integrity sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw== @@ -1464,7 +1264,7 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.22.8", "@babel/traverse@^7.23.7": +"@babel/traverse@^7.22.8", "@babel/traverse@^7.23.5", "@babel/traverse@^7.23.7": version "7.23.7" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.7.tgz#9a7bf285c928cb99b5ead19c3b1ce5b310c9c305" integrity sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg== @@ -1480,32 +1280,7 @@ debug "^4.3.1" globals "^11.1.0" -"@babel/traverse@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.5.tgz#f546bf9aba9ef2b042c0e00d245990c15508e7ec" - integrity sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.5" - "@babel/types" "^7.23.5" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.12.6", "@babel/types@^7.20.0", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.5", "@babel/types@^7.4.4": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.5.tgz#48d730a00c95109fa4393352705954d74fb5b602" - integrity sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w== - dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@babel/types@^7.23.6": +"@babel/types@^7.12.6", "@babel/types@^7.20.0", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.5", "@babel/types@^7.23.6", "@babel/types@^7.4.4": version "7.23.6" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== @@ -1833,7 +1608,7 @@ "@docusaurus/theme-search-algolia" "3.1.0" "@docusaurus/types" "3.1.0" -"@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2": +"@docusaurus/react-loadable@5.5.2": version "5.5.2" resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz#81aae0db81ecafbdaee3651f12804580868fa6ce" integrity sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ== @@ -2055,15 +1830,7 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.20" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" - integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@jridgewell/trace-mapping@^0.3.20": +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.9": version "0.3.21" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz#5dc1df7b3dc4a6209e503a924e1ca56097a2bb15" integrity sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g== @@ -2956,16 +2723,11 @@ acorn-walk@^8.0.0: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.1.tgz#2f10f5b69329d90ae18c58bf1fa8fccd8b959a43" integrity sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw== -acorn@^8.0.0: +acorn@^8.0.0, acorn@^8.0.4, acorn@^8.7.1, acorn@^8.8.2: version "8.11.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== -acorn@^8.0.4, acorn@^8.7.1, acorn@^8.8.2: - version "8.11.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" - integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== - address@^1.0.1, address@^1.1.2: version "1.2.2" resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" @@ -3025,7 +2787,7 @@ algoliasearch-helper@^3.13.3: dependencies: "@algolia/events" "^4.0.1" -algoliasearch@^4.18.0: +algoliasearch@^4.18.0, algoliasearch@^4.19.1: version "4.22.1" resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.22.1.tgz#f10fbecdc7654639ec20d62f109c1b3a46bc6afc" integrity sha512-jwydKFQJKIx9kIZ8Jm44SdpigFwRGPESaxZBaHSV0XWN2yBJAOT4mT7ppvlrpA4UGzz92pqFnVKr/kaZXrcreg== @@ -3045,26 +2807,6 @@ algoliasearch@^4.18.0: "@algolia/requester-node-http" "4.22.1" "@algolia/transporter" "4.22.1" -algoliasearch@^4.19.1: - version "4.20.0" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.20.0.tgz#700c2cb66e14f8a288460036c7b2a554d0d93cf4" - integrity sha512-y+UHEjnOItoNy0bYO+WWmLWBlPwDjKHW6mNHrPi0NkuhpQOOEbrkwQH/wgKFDLh7qlKjzoKeiRtlpewDPDG23g== - dependencies: - "@algolia/cache-browser-local-storage" "4.20.0" - "@algolia/cache-common" "4.20.0" - "@algolia/cache-in-memory" "4.20.0" - "@algolia/client-account" "4.20.0" - "@algolia/client-analytics" "4.20.0" - "@algolia/client-common" "4.20.0" - "@algolia/client-personalization" "4.20.0" - "@algolia/client-search" "4.20.0" - "@algolia/logger-common" "4.20.0" - "@algolia/logger-console" "4.20.0" - "@algolia/requester-browser-xhr" "4.20.0" - "@algolia/requester-common" "4.20.0" - "@algolia/requester-node-http" "4.20.0" - "@algolia/transporter" "4.20.0" - ansi-align@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" @@ -3220,16 +2962,7 @@ babel-plugin-dynamic-import-node@^2.3.3: dependencies: object.assign "^4.1.0" -babel-plugin-polyfill-corejs2@^0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz#b2df0251d8e99f229a8e60fc4efa9a68b41c8313" - integrity sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.3" - semver "^6.3.1" - -babel-plugin-polyfill-corejs2@^0.4.7: +babel-plugin-polyfill-corejs2@^0.4.6, babel-plugin-polyfill-corejs2@^0.4.7: version "0.4.7" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz#679d1b94bf3360f7682e11f2cb2708828a24fe8c" integrity sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ== @@ -3238,15 +2971,7 @@ babel-plugin-polyfill-corejs2@^0.4.7: "@babel/helper-define-polyfill-provider" "^0.4.4" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.8.5: - version "0.8.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz#25c2d20002da91fe328ff89095c85a391d6856cf" - integrity sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.3" - core-js-compat "^3.33.1" - -babel-plugin-polyfill-corejs3@^0.8.7: +babel-plugin-polyfill-corejs3@^0.8.5, babel-plugin-polyfill-corejs3@^0.8.7: version "0.8.7" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz#941855aa7fdaac06ed24c730a93450d2b2b76d04" integrity sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA== @@ -3254,14 +2979,7 @@ babel-plugin-polyfill-corejs3@^0.8.7: "@babel/helper-define-polyfill-provider" "^0.4.4" core-js-compat "^3.33.1" -babel-plugin-polyfill-regenerator@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz#d4c49e4b44614607c13fb769bcd85c72bb26a4a5" - integrity sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.3" - -babel-plugin-polyfill-regenerator@^0.5.4: +babel-plugin-polyfill-regenerator@^0.5.3, babel-plugin-polyfill-regenerator@^0.5.4: version "0.5.4" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz#c6fc8eab610d3a11eb475391e52584bacfc020f4" integrity sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg== @@ -8210,16 +7928,7 @@ postcss-zindex@^5.1.0: resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-5.1.0.tgz#4a5c7e5ff1050bd4c01d95b1847dfdcc58a496ff" integrity sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A== -postcss@^8.4.17, postcss@^8.4.21: - version "8.4.32" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.32.tgz#1dac6ac51ab19adb21b8b34fd2d93a86440ef6c9" - integrity sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw== - dependencies: - nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -postcss@^8.4.26, postcss@^8.4.31: +postcss@^8.4.17, postcss@^8.4.21, postcss@^8.4.26, postcss@^8.4.31: version "8.4.33" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.33.tgz#1378e859c9f69bf6f638b990a0212f43e2aaa742" integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg== @@ -8228,6 +7937,11 @@ postcss@^8.4.26, postcss@^8.4.31: picocolors "^1.0.0" source-map-js "^1.0.2" +prettier@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.2.tgz#03ff86dc7c835f2d2559ee76876a3914cec4a90a" + integrity sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA== + pretty-error@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" @@ -8462,6 +8176,14 @@ react-loadable-ssr-addon-v5-slorber@^1.0.1: dependencies: "@babel/runtime" "^7.10.3" +"react-loadable@npm:@docusaurus/react-loadable@5.5.2": + version "5.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz#81aae0db81ecafbdaee3651f12804580868fa6ce" + integrity sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ== + dependencies: + "@types/react" "*" + prop-types "^15.6.2" + react-router-config@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/react-router-config/-/react-router-config-5.1.1.tgz#0f4263d1a80c6b2dc7b9c1902c9526478194a988" @@ -9435,18 +9157,7 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -terser-webpack-plugin@^5.3.7: - version "5.3.9" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" - integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.17" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.16.8" - -terser-webpack-plugin@^5.3.9: +terser-webpack-plugin@^5.3.7, terser-webpack-plugin@^5.3.9: version "5.3.10" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== @@ -9457,17 +9168,7 @@ terser-webpack-plugin@^5.3.9: serialize-javascript "^6.0.1" terser "^5.26.0" -terser@^5.10.0, terser@^5.16.8: - version "5.25.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.25.0.tgz#6579b4cca45b08bf0fdaa1a04605fd5860dfb2ac" - integrity sha512-we0I9SIsfvNUMP77zC9HG+MylwYYsGFSBG8qm+13oud2Yh+O104y614FRbyjpxys16jZwot72Fpi827YvGzuqg== - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" - -terser@^5.15.1, terser@^5.26.0: +terser@^5.10.0, terser@^5.15.1, terser@^5.16.8, terser@^5.26.0: version "5.26.0" resolved "https://registry.yarnpkg.com/terser/-/terser-5.26.0.tgz#ee9f05d929f4189a9c28a0feb889d96d50126fe1" integrity sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==