|
1 | 1 | --- |
2 | | -title: Requirements overview and integration checklist |
| 2 | +title: Integration checklist |
| 3 | +head: |
| 4 | + - tag: style |
| 5 | + content: table, tr, td {background-color:transparent !important;} table {box-shadow:none !important;} |
3 | 6 | --- |
4 | 7 |
|
5 | | -import { Badge } from '@astrojs/starlight/components' |
| 8 | +import { Badge, Icon } from '@astrojs/starlight/components' |
6 | 9 | import { LinkOut } from '@interledger/docs-design-system' |
7 | 10 |
|
8 | | -You must meet the following requirements before you deploy Rafiki to a production environment. |
9 | | - |
10 | | -## Be an account servicing entity <Badge text="Required" variant="danger" /> |
11 | | - |
12 | | -An account servicing entity (ASE) is an entity that provides and maintains payment accounts for its customers and is regulated in the jurisdictions it operates. Examples of ASEs include banks, digital wallet providers, and mobile money providers. The [account servicing entity](/overview/concepts/account-servicing-entity) page provides examples of an ASE's responsibilities and obligations. |
13 | | - |
14 | | -Rafiki shouldn't be used in production by non-regulated entities. |
15 | | - |
16 | | -## Configure multi-tenancy <Badge text="Required" variant="danger" /> |
17 | | - |
18 | | -You must configure multi‑tenancy by establishing the operator and enabling tenant‑scoped access. Generate a UUID v4 for `OPERATOR_TENANT_ID` and a strong, random `ADMIN_API_SECRET`, and plan a secure out‑of‑band process to deliver each tenant’s `id` and `apiSecret` after creation. |
19 | | - |
20 | | -[Manage tenants](/integration/requirements/tenants) |
21 | | - |
22 | | -## Support at least one asset <Badge text="Required" variant="danger" /> |
23 | | - |
24 | | -You must set up Rafiki to support at least one asset. An asset in Rafiki represents an item of value that can be transferred via the Interledger Protocol. Since the Interledger Protocol aims to create an internet of value, it allows for the transfer of any asset, not just currency. In practice, however, assets are usually denominated in a currency (fiat or branded currencies). |
25 | | - |
26 | | -[Set up your assets](/integration/requirements/assets) |
27 | | - |
28 | | -## Associate each user-facing payment account with a wallet address <Badge text="Required" variant="danger" /> |
29 | | - |
30 | | -A wallet address is a publicly shareable standardized ID for a payment account. Each payment account belonging to your users (for example, your customers) must have at least one associated wallet address for the account to be able to send and/or receive payments via Open Payments and Interledger. |
31 | | - |
32 | | -[Set up your wallet addresses](/integration/requirements/wallet-addresses) |
33 | | - |
34 | | -## Expose a webhook endpoint and react to events accordingly <Badge text="Required" variant="danger" /> |
35 | | - |
36 | | -The main communication channel between you and your Rafiki instance is composed of the Backend Admin API and a set of webhook events. Most of these events require you to interact with Rafiki. You must expose a webhook endpoint that listens for events dispatched by Rafiki, then react accordingly (for example, deposit or withdraw liquidity). |
37 | | - |
38 | | -[Specify your webhook endpoint and learn how to handle each event](/integration/requirements/webhook-events) |
39 | | - |
40 | | -## Expose an exchange rate endpoint <Badge text="Conditionally Optional" variant="caution" /> |
41 | | - |
42 | | -If you plan to support cross-currency transactions, you must specify from where your Rafiki instance will fetch current exchange rates. Exchange rates are calculated as part of a payment's quote, which estimates the full cost of transferring value over the network. |
43 | | - |
44 | | -[Specify your exchange rate endpoint](/integration/requirements/exchange-rates) |
45 | | - |
46 | | -## Define your sending fees <Badge text="Optional" variant="success" /> |
47 | | - |
48 | | -You have the option to charge a sending fee, on top of any estimated network fees, for facilitating transfers. Each asset you support can have a different fee structure. |
49 | | - |
50 | | -[Define your sending fees](/integration/requirements/sending-fees) |
51 | | - |
52 | | -## Add a peer to enable Interledger payments <Badge text="Conditionally Optional" variant="caution" /> |
53 | | - |
54 | | -You must add one or more peers if you intend to enable Interledger payments on your accounts. A peer is another ASE that you connect with via Interledger and is likely running their own Rafiki instance. |
55 | | - |
56 | | -If you are using Rafiki solely for transfers between accounts on your ledger, peers aren't required. |
57 | | - |
58 | | -[Add peers to your Rafiki instance](/integration/requirements/peers) |
59 | | - |
60 | | -## Integrate with an identity provider (IdP) <Badge text="Conditionally Optional" variant="caution" /> |
61 | | - |
62 | | -An identity provider (IdP) is a system or service that stores and manages user identity information, authentication, and consent. Examples of IdPs include OpenID Connect and Okta. |
63 | | - |
64 | | -You must integrate with an IdP if you plan to use the authorization server provided through Rafiki's auth service. The authorization server requires consent be collected via an interactive grant before an outgoing payment request is issued. The purpose of the IdP is to handle the authentication and consent required to authorize the interactive grant request. |
65 | | - |
66 | | -[Integrate Rafiki with your IdP](/integration/requirements/open-payments/idp) |
67 | | - |
68 | | -## Integration checklist |
69 | | - |
70 | | -Ensure you've completed the following tasks before you deploy Rafiki to a production environment and join the Interledger network. |
71 | | - |
72 | | -- [ ] You are a licensed financial account servicing entity in the jurisdictions you operate in |
73 | | -- [ ] You have generated a UUID v4 for `OPERATOR_TENANT_ID` and a strong, random `ADMIN_API_SECRET` |
74 | | -- [ ] You are HMAC-signing Backend Admin API requests (HMAC SHA-256) and include `tenant-id` and `signature` headers |
75 | | -- [ ] You have established a secure, out-of-band process to deliver tenant credentials (`id` and `apiSecret`) to each tenant after creation |
76 | | -- [ ] You have added at least one asset, either through the Backend Admin API or the Rafiki Admin app |
77 | | -- [ ] You have implemented a strategy for creating wallet addresses for your account holders |
78 | | -- [ ] You have set up your webhook endpoint and understand how to handle each webhook event |
79 | | -- [ ] You have set up your exchange rates endpoint |
80 | | -- [ ] You have defined the sending fee you will charge, if any, for each asset, either through the Backend Admin API or the Rafiki Admin app |
81 | | -- [ ] If supporting Open Payments outgoing payments, you have integrated with an IdP and configured the user consent screen and interaction flow |
82 | | -- [ ] Your admin services are secured from external access |
| 11 | +## Required |
| 12 | + |
| 13 | +Before deploying Rafiki to a production environment and joining the Interledger network, ensure you: |
| 14 | + |
| 15 | +<table> |
| 16 | + <tr> |
| 17 | + <td>✅</td> |
| 18 | + <td> |
| 19 | + Are a licensed financial account servicing entity (ASE) in the |
| 20 | + jurisdictions you operate in |
| 21 | + </td> |
| 22 | + </tr> |
| 23 | + <tr> |
| 24 | + <td>✅</td> |
| 25 | + <td> |
| 26 | + Generate a UUID v4 for your operator tenant ID and a strong, random admin |
| 27 | + API secret |
| 28 | + </td> |
| 29 | + </tr> |
| 30 | + <tr> |
| 31 | + <td>✅</td> |
| 32 | + <td> |
| 33 | + You are HMAC-signing Backend Admin API requests (HMAC SHA-256) and include |
| 34 | + tenant ID and signature headers |
| 35 | + </td> |
| 36 | + </tr> |
| 37 | + <tr> |
| 38 | + <td>✅</td> |
| 39 | + <td> |
| 40 | + Establish a secure, out-of-band process to deliver tenant IDs and API |
| 41 | + secrets to each tenant after creation |
| 42 | + </td> |
| 43 | + </tr> |
| 44 | + <tr> |
| 45 | + <td>✅</td> |
| 46 | + <td> |
| 47 | + Add at least one asset, either through the Backend Admin API or the Rafiki |
| 48 | + Admin app |
| 49 | + </td> |
| 50 | + </tr> |
| 51 | + <tr> |
| 52 | + <td>✅</td> |
| 53 | + <td> |
| 54 | + Implement a strategy for creating wallet addresses for your account |
| 55 | + holders |
| 56 | + </td> |
| 57 | + </tr> |
| 58 | + <tr> |
| 59 | + <td>✅</td> |
| 60 | + <td> |
| 61 | + Set up your webhook endpoint and understand how to handle each webhook |
| 62 | + event |
| 63 | + </td> |
| 64 | + </tr> |
| 65 | + <tr> |
| 66 | + <td>✅</td> |
| 67 | + <td>Secure your admin services from external access</td> |
| 68 | + </tr> |
| 69 | +</table> |
| 70 | + |
| 71 | +## Optional |
| 72 | + |
| 73 | +<table> |
| 74 | + <tr> |
| 75 | + <td>✅</td> |
| 76 | + <td> |
| 77 | + **Integrate with an identity provider (IdP)** |
| 78 | + <p> |
| 79 | + If you plan to use the authorization server provided through Rafiki's |
| 80 | + Auth service, and/or support Open Payments outgoing payments, you |
| 81 | + **must** [integrate with an |
| 82 | + IdP](/integration/requirements/open-payments/idp). An IdP is a system or |
| 83 | + service that stores and manages user identity information, |
| 84 | + authentication, and consent for an ASE's users. |
| 85 | + </p> |
| 86 | + </td> |
| 87 | + </tr> |
| 88 | + <tr> |
| 89 | + <td>✅</td> |
| 90 | + <td> |
| 91 | + **Add a peer** |
| 92 | + <p> |
| 93 | + A peer is another ASE that you connect with via Interledger who is |
| 94 | + likely running their own Rafiki instance. If you are using Rafiki solely |
| 95 | + for transfers between accounts on your own ledger, peers aren't |
| 96 | + required. Otherwise, you must [add at least one |
| 97 | + peer](/integration/requirements/peers) to enable Interledger payments on |
| 98 | + your accounts. |
| 99 | + </p> |
| 100 | + </td> |
| 101 | + </tr> |
| 102 | + <tr> |
| 103 | + <td>✅</td> |
| 104 | + <td> |
| 105 | + **Set up your exchange rates endpoint** |
| 106 | + <p> |
| 107 | + If you plan to support cross-currency transactions, you must [specify |
| 108 | + the endpoint](/integration/requirements/exchange-rates) from where your |
| 109 | + Rafiki instance will fetch current exchange rates. Exchange rates are |
| 110 | + calculated as part of a payment's quote, which estimates the full cost |
| 111 | + of transferring value over the network. |
| 112 | + </p> |
| 113 | + </td> |
| 114 | + </tr> |
| 115 | + <tr> |
| 116 | + <td>✅</td> |
| 117 | + <td> |
| 118 | + **Define your sending fee** |
| 119 | + <p> |
| 120 | + You can [charge a sending fee](/integration/requirements/sending-fees), |
| 121 | + on top of any estimated network fees, for facilitating transfers. Each |
| 122 | + asset you support can have a different fee structure. |
| 123 | + </p> |
| 124 | + </td> |
| 125 | + </tr> |
| 126 | +</table> |
0 commit comments