# Getting Started Source: https://docs.manifestfinancial.com/guides/getting-started Get your API key + connect to Manifest. * Create an enterprise in Manifest's sandbox [Enterprise Dashboard](https://dashboard.sandbox.manifestfinancial.com/auth/register) * Create an API key by clicking *API* in the [Enterprise Dashboard](https://dashboard.sandbox.manifestfinancial.com/connect/api) menu, then click *Generate Key*. **Don't Forget —**

Your API keys are extremely sensitive. Anyone who gains access to your keys will be able to impersonate your organization and could take money out of your account. Never expose your API keys in any publicly accessible areas, including GitHub, client-side code, or even a plain HTTP request. If you are ever in doubt that your API keys may have been exposed, contact us immediately!
**Use Postman** Use our Postman collection to get up and running in sandbox.
Now that you have an API key, you can authorize requests in the Manifest Enterprise API on behalf of your organization. Authentication is performed via HTTP Basic Auth; provide your API key as the basic auth username value. You do not need to provide a password. For example: ```javascript theme={null} const buff = Buffer.from('YOUR_API_KEY:'); //don't forget trailing colon! const encoded = buff.toString('base64'); const headers = { 'Content-Type': 'application/json', 'Authorization': 'Basic ' + encoded, }; ``` **Environments**
There is both a production environment, and a sandbox environment. Requests made to the sandbox environment will never hit banking networks, meaning they can't affect your account balances and will never incur costs. Your developer account will have different API keys for each environment. Each environment has its own URL endpoint to avoid any confusion. ``` Sandbox: https://api.sandbox.manifestfinancial.com/enterprise/v1 Production: https://api.manifestfinancial.com/enterprise/v1 ```
You can use the [get enterprise](/platform/enterprise) endpoint to easily test your integration. This endpoint will return details of the enterprise you created in the sandbox dashboard.
*** # Send Payouts Source: https://docs.manifestfinancial.com/guides/send-payouts Let's pretend we code for a music distributor, and we want to add Manifest as a payout option. We'll post a display name of the creator we'd like to pay to [create an account connection](/platform/account-connections#methods). Account Connections represent the relationship between your enterprise and a specific creator. It includes such details as the creator's name, how they've connected (Manifest or ACH), and what permissions they have granted you. ```json theme={null} // Create Account Connection { "first_name": "Paul", "last_name": "Smith", "email": "paul@paulandtheothers.com", "requested_permissions": ["payment.credit"], "verification_prompt": "What are the last 4 digits of your tax ID?", "verification_answer": "1234" } ``` We get a new account connection object in response. ```json theme={null} // Account Connection { "id": "acon_XXXXX", "status": "created", "first_name": "Paul", "last_name": "Smith", "email": "paul@paulandtheothers.com", "requested_permissions": ["payment.credit"], "verification_prompt": "Please enter the last 4 digits of your tax ID." } ``` Note that Paul hasn't given us any permissions yet.
Paul just clicked the "Set Up Payments" button in our web app. We're going to send him through a short, Manifest-powered onboarding flow call [Connect](/platform/connect) to activate his account connection. We'll create a "Connect Link" to securely launch a personalized flow from within Paul's authenticated session. Manifest handles the onboarding, then redirects Paul back to us once complete. We'll post the following to [create a Connect Link](/platform/connect/links#methods) for Paul: ```json theme={null} // Create Connect Link { "account_connection": "acon_XXXXX", "return_url": "https://app.yoursite.com" } ``` We get a new Connect Link back: ```json theme={null} // Connect Link { "url": "http://connect.manifestfinancial.com/ZtT57HxTAaJwvgqjCadbSgoQPIBjJ3r7p0W8", "created_at": "2024-02-02T20:39:01.015Z", "expires_at": "2024-02-02T20:49:01.014Z" } ``` The Connect Link expires 10 minutes after it's created. We immediately redirect Paul to that URL to complete the process.
Once Paul gets redirected back to us, we can [get his account connection](/platform/account-connections#methods) to see what changes he made. (We can also be notified via [webhook](/platform/webhooks).) ```json theme={null} // Get Account Connection { "id": "acon_XXXXX", "status": "active", "type": "direct", "first_name": "Paul", "last_name": "Smith", "email": "paul@paulandtheothers.com", "requested_permissions": ["payment.credit"], "permissions": [ {"name": "payment.credit"} ], "destination": "Manifest Account - Paul Smith" } ``` **Great! Paul decided to open a Manifest account, or get paid to his existing Manifest account.**
His account connection is now `active`, and enabled for realtime payouts. We reflect that back to him, and use the `destination` label to make it crystal clear to him where his money will be going.
```json theme={null} // Get Account Connection { "id": "acon_XXXXX", "status": "active", "type": "ach", "first_name": "Paul", "last_name": "Smith", "email": "paul@paulandtheothers.com", "requested_permissions": ["payment.credit"], "permissions": [ {"name": "payment.credit"} ], "destination": "BANK OF AMERICA checking (*1234)" } ``` **Great! Paul decided to get paid to a different bank account, and has entered his ACH information.**
His account connection is now `active`, and enabled for `ach` payouts. We reflect that back to him, and use the `destination` label to make it crystal clear to him where his money will be going.

[Payouts](/platform/payouts) are simple, no matter how Paul has chosen to get paid: ```json theme={null} // Create Payout { "account_connection": "acon_XXXXX", "amount_in_cents": 1000, "description": "January Payout" } ``` The payout status will return with a `pending` status immediately after creation: ```json theme={null} // New Payout { "id": "pay_XXXXX", "type": "direct", "status": "pending", "account_connection": "acon_XXXXX", "destination": "Manifest Account - Paul Smith", "description": "January Payout", "amount_in_cents": 1000, "fee_in_cents": 10, "created_at": "2024-02-02T22:45:00.668Z", "updated_at": "2024-02-02T22:45:00.668Z" } ``` **Manifest payouts** will change to a `sent` status a few seconds after creation, and the money will be immediately available for Paul to spend. **ACH payouts** are `sent` in a batch several times a day Monday through Friday (excluding bank holidays). ACH payments will be available for Paul in the next few business days (the receiving bank's policies are responsible for a majority of the variation with ACH timing). Learn more about ACH payments. You can check the status of a payout [manually](/platform/payouts/introduction#methods), or be notified of changes with a [webhook](/platform/webhooks).
Nice work! Now that Paul is connected via Manifest, he can be paid again by simply creating new payouts.
*** ## Get an API key and get started! # Account Connections Source: https://docs.manifestfinancial.com/platform/account-connections # Overview The Account Connection object represents the relationship between your enterprise and a creator. It includes such details as the creator's name, how they've connected (Manifest or ACH), and what permissions they have granted you. For a typical integration, you'll create one Account Connection for each creator in your system, and store the ID with your creator data. You can do this ahead of time, say during creator enrollment in your system, or right after a creator requests to be paid by Manifest. Either way, an Account Connection must be created before a [Connect Link](/platform/connect/links) can be generated or a [Connect Invite](/platform/connect/invites) can be sent. *** # Methods **`POST`  /account-connection**
Create a new account connection under your enterprise.
## Body Parameters Legal first name from your records. Legal last name from your records. Optional user identifier from your system. If set, Manifest will enforce uniqueness, e.g. attempts to create a second account connection for the same user will fail. This should be a stable value like a User ID, not something that might change like an email address or phone number. This value should not contain any sensitive information. Email address from your records. See sandbox testing for more information about using emails in sandbox. Legal business name of the creator from your records, if applicable. Display name, visible to the creator. Examples: a band name, online persona, or shortened version of the business name. Array of permissions to request from the user during the *Connect* flow. See below for details. Text to prompt your users for their verification answer. Examples below. Required answer to the verification prompt. Manifest will correct for case sensitivity and trim excess white space before comparing the user's entered value. Any special formatting requirements should either be avoided or included in the verification prompt itself. You can set a legacy payment method on new account connections. See below for available options and required fields. User defined data that can be attached to the object. See the [User Data](/reference/user-data) page for details. ## Example ```json Request theme={null} // POST /account-connection { "first_name": "Paul", "last_name": "Smith", "email": "paul@paulandtheothers.com", "display_name": "Paul And The Others", "requested_permissions": ["payment.credit"], "verification_prompt": "Please enter the last 4 digits of your tax ID.", "verification_answer": "1234" } ``` ```json Response theme={null} { "id": "acon_XXXXX", "status": "created", "first_name": "Paul", "last_name": "Smith", "email": "paul@paulandtheothers.com", "display_name": "Paul And The Others", "requested_permissions": ["payment.credit"], "verification_prompt": "Please enter the last 4 digits of your tax ID.", "user_data": {}, "created_at": "2024-01-26T21:18:16.704Z", "updated_at": "2024-01-26T21:18:16.704Z" } ```
**`GET`  /account-connection/:id**
Retrieve an account connection by its ID.
## Path Parameters The ID of the account connection to retrieve. ## Example ```json Response theme={null} { "id": "acon_XXXXX", "status": "created", "type": "direct", "first_name": "Paul", "last_name": "Smith", "email": "paul@paulandtheothers.com", "display_name": "Paul And The Others", "permissions": [{"name": "payment.credit"}], "requested_permissions": ["payment.credit"], "verification_prompt": "Please enter the last 4 digits of your tax ID.", "user_data": {}, "created_at": "2024-01-26T21:18:16.704Z", "updated_at": "2024-01-26T21:18:16.704Z", "destination": "Manifest Account - Paul Smith" } ```
**`GET`  /account-connection/external/:external\_id**
Get details of one of your enterprise's account connections by your own user identifier. (Must set `external_id` during account connection creation to use this method.)
## Path Parameters User identifier from your system. ## Example ```json Response theme={null} { "id": "acon_XXXXX", "external_id": "AB789", "status": "created", "type": "direct", "first_name": "Paul", "last_name": "Smith", "email": "paul@paulandtheothers.com", "display_name": "Paul And The Others", "permissions": [{"name": "payment.credit"}], "requested_permissions": ["payment.credit"], "verification_prompt": "Please enter the last 4 digits of your tax ID.", "user_data": {}, "created_at": "2024-01-26T21:18:16.704Z", "updated_at": "2024-01-26T21:18:16.704Z", "destination": "Manifest Account - Paul Smith", } ```
**`PUT`  /account-connection/:id**
Update data associated with one of your enterprise's connections.
## Path Parameters The ID of the account connection to update. ## Body Parameters Update to `deleted` to deactivate this account connection. Legal first name as represented in your system. Legal last name as represented in your system. Email address from your records. Display name, visible to the creator. Examples are a band name, an online persona, or shortened version of the business name. Legal business name from your records. Array of permissions to request from the user during the *Connect* flow. See below for details. Text to prompt your users for their verification answer. Examples below. Required answer to the verification prompt. Manifest will correct for case sensitivity and trim excess white space before comparing the user's entered value. Any special formatting requirements should either be avoided or included in the verification prompt itself. You can set a legacy payment method on new account connections. See below for available options and required fields. User defined data that can be attached to the object. See the [User Data](/reference/user-data) page for details. ## Example ```json Request theme={null} // PUT /account-connection/acon_XXXXX { "first_name": "Linda", "email": "linda@gmail.com" } ``` ```json Response theme={null} { "id": "acon_XXXXX", "status": "active", "type": "direct", "first_name": "Linda", "last_name": "Smith", "email": "linda@gmail.com", "display_name": "Paul And The Others", "permissions": [{"name": "payment.credit"}], "requested_permissions": ["payment.credit"], "verification_prompt": "Please enter the last 4 digits of your tax ID.", "user_data": {}, "created_at": "2024-11-12T20:22:49.075Z", "updated_at": "2024-11-12T20:22:49.075Z", "destination": "Paul Smith - Manifest Debit (*1234)" } ```
**`GET`  /account-connection**
List all connections associated with your enterprise.
## Query Parameters The page number to return. Default is 1. The number of items to return per page. Default is 10. ## Example ```json Response theme={null} { "data": [ { "id": "acon_XXXXX", "status": "active", "type": "direct", "first_name": "Paul", "last_name": "Smith", "email": "paul@paulandtheothers.com", "display_name": "Paul And The Others", "permissions": [{"name": "payment.credit"}], "requested_permissions": ["payment.credit"], "verification_prompt": "Please enter the last 4 digits of your tax ID.", "user_data": {}, "created_at": "2024-11-12T20:22:49.075Z", "updated_at": "2024-11-12T20:22:49.075Z" }, { "id": "acon_YYYYY", "status": "created", "first_name": "John", "last_name": "Jones", "email": "john@paulandtheothers.com", "display_name": "Paul And The Others", "requested_permissions": ["payment.credit"], "verification_prompt": "Please enter the last 4 digits of your tax ID.", "user_data": {}, "created_at": "2024-11-12T20:22:49.075Z", "updated_at": "2024-11-12T20:22:49.075Z" }, { "id": "acon_ZZZZZ", "status": "created", "first_name": "George", "last_name": "Glass", "email": "george@paulandtheothers.com", "display_name": "Paul And The Others", "requested_permissions": ["payment.credit"], "verification_prompt": "Please enter the last 4 digits of your tax ID.", "user_data": {}, "created_at": "2024-11-12T20:22:49.075Z", "updated_at": "2024-11-12T20:22:49.075Z" }, { "id": "acon_00000", "status": "active", "type": "direct", "first_name": "Patrick", "last_name": "Starr", "email": "patrick@paulandtheothers.com", "display_name": "Paul And The Others", "permissions": [{"name": "payment.credit"}], "requested_permissions": ["payment.credit"], "verification_prompt": "Please enter the last 4 digits of your tax ID.", "user_data": {}, "created_at": "2024-11-12T20:22:49.075Z", "updated_at": "2024-11-12T20:22:49.075Z" } ], "pagination": { "page": 1, "page_size": 10, "total": 4 } } ```
*** # Properties Identifier for this account connection. Type of account connection. One of `direct`, `ach`, or `wallet`. This field will be populated once the creator has connected to your enterprise and selected a payout method. Status of account connection. One of `created`, `pending`, `active`, or `deleted`. Only users can activate their connection (through the Connect flow). Array of permissions to request from the user during the Connect flow. Possible values: | Permission | Description | | ---------------- | -------------------------------------------------------- | | `payment.credit` | Deposit to creator accounts. | | `payment.debit` | Debit creator accounts. (type `direct` connections only) | Only ask for permissions you need to use; asking for more than you need might cause users to opt-out of connecting to you. List of permissions granted by the creator during the Connect flow. Each permission object includes a `name` and an optional `expires_at`. Legal first name from your records. Legal last name from your records. Optional user identifier from your system. If set, Manifest will enforce uniqueness, e.g. attempts to create a second account connection for the same user will fail. This should be a stable value like a User ID, not something that might change like an email address or phone number. This value should not contain any sensitive information. Email address from your records. Note, this does not need to match the user's Manifest account email address, this is just an email address you use to communicate with this user. See sandbox testing for more information about using emails in sandbox. Display name, visible to the creator. Examples are a band name, an online persona, or shortened version of the business name. Legal business name from your records. Text to prompt your users for their verification answer. Examples: * Please enter the last 4 digits of your tax ID. * Please enter your Triangle Artist ID. * Please enter the last 4 digits of the bank account number where you currently receive your Triangle payments. Required answer to the verification prompt. Manifest will correct for case sensitivity and trim excess white space before comparing the user's entered value. Any special formatting requirements should either be avoided or included in the verification prompt itself. An optional object describing legacy payout method details that can be set on new account connections. Used to migrate a creator’s existing payout method to Manifest. Details: ```json theme={null} // Example ACH Object { "type": "ach", "name_on_account": "Paul Smith", "account_number": "12341234", "routing_number": "111000025", "account_type": "checking", "first_name": "Paul", "last_name": "Smith", "street_line_1": "123 Main St.", "city": "Austin", "state_abbreviation": "TX", "postal_code": "78704", "ssn": "111-99-1234" } ``` **ACH Details** * All fields in the example object are required. (There's also an optional `street_line_2`.) * In addition to the bank account information, the collected personal info is used by Manifest for tax purposes. * `account_number` has a maximum length of 17 characters. * `routing_number` must be a valid 9-digit routing number. * `account_type` must be checking or savings. * `postal_code` must be 5 digits. * `ssn` must have 9 digits, and include dash formatting. A plaintext label of the current destination account, suitable for display. (Not included in list endpoints.) User defined data that can be attached to the object. See the [User Data](/reference/user-data) page for details. # Buyers Source: https://docs.manifestfinancial.com/platform/buyers # Overview The Buyer object represents a customer that pays money to your organization. *** # Methods **`POST`  /buyer**
Create a new buyer under your enterprise.
## Body Parameters Legal first name from your records. Legal last name from your records. Optional user identifier from your system. If set, Manifest will enforce uniqueness, e.g. attempts to create a second buyer for the same user will fail. This should be a stable value like a User ID, not something that might change like an email address or phone number. This value should not contain any sensitive information. Email address from your records. ID of the payment instrument to associate with the buyer, if you have one. Primary usage is migrating existing customers to Manifest. User defined data that can be attached to the object. See the [User Data](/reference/user-data) page for details. ## Example ```json Request theme={null} // POST /buyer { "first_name": "Paul", "last_name": "Smith", "email": "paul@paulandtheothers.com", } ``` ```json Response theme={null} { "id": "buy_XXXXX", "first_name": "Paul", "last_name": "Smith", "email": "paul@paulandtheothers.com", "user_data": {}, "created_at": "2024-01-26T21:18:16.704Z", "updated_at": "2024-01-26T21:18:16.704Z" } ```
**`GET`  /buyer/:id**
Retrieve a buyer by its ID.
## Path Parameters The ID of the buyer to retrieve. ## Example ```json Response theme={null} { "id": "buy_XXXXX", "external_id": "AB789", "first_name": "Paul", "last_name": "Smith", "email": "paul@paulandtheothers.com", "user_data": {}, "created_at": "2024-01-26T21:18:16.704Z", "updated_at": "2024-01-26T21:18:16.704Z" } ```
**`GET`  /buyer/external/:external\_id**
Get details of one of your enterprise's buyers by your own user identifier. (Must set `external_id` during buyer creation to use this method.)
## Path Parameters User identifier from your system. ## Example ```json Response theme={null} { "id": "buy_XXXXX", "external_id": "AB789", "first_name": "Paul", "last_name": "Smith", "email": "paul@paulandtheothers.com", "user_data": {}, "created_at": "2024-01-26T21:18:16.704Z", "updated_at": "2024-01-26T21:18:16.704Z" } ```
**`PUT`  /account-connection/:id**
Update data associated with one of your enterprise's connections.
## Path Parameters The ID of the buyer to update. ## Body Parameters Legal first name from your records. Legal last name from your records. Email address from your records. User defined data that can be attached to the object. See the [User Data](/reference/user-data) page for details. ## Example ```json Request theme={null} // PUT /account-connection/acon_XXXXX { "first_name": "Linda", "email": "linda@gmail.com" } ``` ```json Response theme={null} { "id": "buy_XXXXX", "external_id": "AB789", "first_name": "Linda", "last_name": "Smith", "email": "linda@gmail.com", "user_data": {}, "created_at": "2024-01-26T21:18:16.704Z", "updated_at": "2024-01-26T21:18:16.704Z" } ```
**`GET`  /buyer**
List all buyers associated with your enterprise.
## Query Parameters The page number to return. Default is 1. The number of items to return per page. Default is 10. ## Example ```json Response theme={null} { "data": [ { "id": "buy_XXXXX", "first_name": "Paul", "last_name": "Smith", "email": "paul@paulandtheothers.com", "user_data": {}, "created_at": "2024-01-26T21:18:16.704Z", "updated_at": "2024-01-26T21:18:16.704Z" }, { "id": "buy_YYYYY", "first_name": "John", "last_name": "Jones", "email": "john@paulandtheothers.com", "user_data": {}, "created_at": "2024-01-26T21:18:16.704Z", "updated_at": "2024-01-26T21:18:16.704Z" }, { "id": "buy_ZZZZZ", "first_name": "George", "last_name": "Glass", "email": "george@paulandtheothers.com", "user_data": {}, "created_at": "2024-01-26T21:18:16.704Z", "updated_at": "2024-01-26T21:18:16.704Z" }, ], "pagination": { "page": 1, "page_size": 10, "total": 3 } } ```
*** # Properties Identifier for this buyer. Legal first name from your records. Legal last name from your records. Optional user identifier from your system. If set, Manifest will enforce uniqueness, e.g. attempts to create a second buyer for the same user will fail. This should be a stable value like a User ID, not something that might change like an email address or phone number. This value should not contain any sensitive information. Email address from your records. User defined data that can be attached to the object. See the [User Data](/reference/user-data) page for details. Embeddable form that allows your buyers to securely manage their payment method. You should not store this URL, as it may change over time. See [Payment Methods](/platform/payment-methods) for details. The buyer's stored payment card details. If null, the buyer has no stored card. Last 4 digits of the card Card brand key (e.g. `VISA`, `MASTERCARD`, `AMERICAN_EXPRESS`, `DISCOVER`) Card expiration month (1-12) Card expiration year # Embed in Mobile App Source: https://docs.manifestfinancial.com/platform/connect/app-embed Embed Connect in your mobile app using web views. Connect will broadcast an event with the message `connect_exit` when you should dismiss the webview. See below for specific implementation details. ## iOS ```swift WKWebView theme={null} self.webView.configuration.preferences.javaScriptEnabled = true self.webView.configuration .userContentController.add(self, name: "connectMessageHandler") self.webView.load( /*connect link request*/ ) ``` Using your app's Custom URL Scheme, generate a callback URL that your app will use to dismiss the *Connect* `SFSafariViewController`. ## Android ```java WebView theme={null} class JsObject { @JavascriptInterface public boolean postMessage(String message, String transferList) { if (message.equals("connect_exit")) { //dismiss the webview here } return true; } } // And when initializing the webview webView.addJavascriptInterface(new JsObject(), "connectMessageHandler"); ``` Connect will post an event using the `connectMessageHandler` object you created, with a message of `connect_exit`. When your application receives that message, you should dismiss the *Connect* webview. ## React Native ```jsx theme={null} const onMessage = (event) => { if (event?.nativeEvent?.data === 'connect_exit') { //dismiss web view here } } ``` Connect will post an event using the `onMessage` handler you created, with a message of `connect_exit`. When your application receives that message, you should dismiss the *Connect* webview. ## Need Addional Support? If your application needs a different callback scheme, just [let us know](mailto:developer@manifestfinancial.com). # Connect Source: https://docs.manifestfinancial.com/platform/connect/introduction *** ## Easy onboarding for your creators. Connect is a simple onboarding flow your creators use to activate their connection to you. Your platform will use [Connect Links](/platform/connect/links) to securely launch this personalized flow from inside an authenticated session. Manifest handles the onboarding, then we redirect back to you once complete. Connect is responsive, so you can * Link to it * Embed it in your [desktop or mobile web](/platform/connect/web-embed) * Launch it inside your [mobile app](/platform/connect/app-embed) *** ## What if my creators don't have Manifest accounts? No problem! We'll help your US-based creators open a business account inside Connect in under a minute — no paperwork required. Manifeset takes care of things so you don't have to: * **Know your customer.** We verify the identity of each new accountholder. * **Debit cards.** We print and mail debit cards to account holders. * **Statements.** We generate monthly statements for all accounts. * **Tax reporting.** We generate 1099K forms for accountholders. * **Customer support.** We handle banking customer support for accountholders. * **Other features.** The Manifest app offer accountholders linked Set Aside accounts with automatic savings, external transfers, card controls, transaction and security alerts, and more. *** ## Permissions Connect asks your creators for the `requested_permissions` you set on their account connection. Only ask for permissions you need to use; asking for more than you need might cause creators to opt-out of connecting to you. See [Account Connections](/platform/account-connections) for how to set requested permissions. Supported permissions: | Permission | Description | | ---------------- | -------------------------------------------------------- | | `payment.credit` | Deposit to creator accounts. | | `payment.debit` | Debit creator accounts. (type `direct` connections only) | *** ## Starting the *Connect* Flow You'll [create a Connect Link](/platform/connect/links#methods) for your creator using the above information, and a `return_url`. The Connect Link object includes a unique `url` to initiate the *Connect* flow that you should redirect your user to. Only open this URL during an authenticated session in your platform's application. Connect links can be used only once, and expire 10 minutes after creation. Don't email, text, or otherwise send account link URLs directly to your user. Doing so could allow unauthorized people to connect to your platform. Instead, redirect the authenticated user to the account link URL from within your platform’s application. *** ## Closing the Loop Once the *Connect* flow is complete, Manifest will redirect your creator back to your `return_url`, or if embedded will post messages to your app (see the embed guides in the left navigation). You should then check the details of the account connection you've stored in your system to see the results. You can use HTTP for your `return_url` while in test mode (for example, to test with localhost), but you can only use HTTPS in live mode. Be sure to swap testing URLs for HTTPS URLs before going live. You'll also be sent a `account_connection.update` [webhook](/platform/webhooks) notification. # Connect Invites Source: https://docs.manifestfinancial.com/platform/connect/invites # Overview Connect Invites function like [Connect Links](/platform/connect/links), but they add an additional layer of verification, allowing them to be used in stand alone scenarios like personalized emails. Connect Invites differ from Connect Links in a 2 important ways: * Connect Invites allow you to prompt the user for verification information only they should know. This verification info is set when you create the account connection. Some examples include: * Last 4 of SSN * Account Number or User ID with your organization * The current bank account number they have on file with your organization * Connect Invites expire 72 hours after creation (vs 10 minutes for Connect Links) or after 3 failed verification attempts. **Different in Sandbox**

Remember that sandbox follows special rules about [sending emails](/reference/testing-in-sandbox#emails).
*** # Methods **`POST`  /connect-invite**
Link your creators to Connect to activate their connection to you.
## Body Parameters ID of the account connection to be onboarded. If true, Manifest will send your account connection an invite email. Send `false` to turn off the Manifest-powered email invite, and use the returned `url` to send your own invite. (Default: `true`) ## Example ```json Request theme={null} // POST /connect-invite { "account_connection": "acon_XXXXX", } ``` ```json Response theme={null} { "url": "https://connect.manifestfinancial.com/invite/cYnAmfVT6zk7kFXjxkYzHVyMMneZn0VpRek0", "created_at": "2024-01-23T22:39:30.779Z", "expires_at": "2024-01-23T22:49:30.778Z" } ```
*** # Properties URL that directs your user to their personalized invite. This URL is safe to email to your user. Date this Connect invite will automatically expire. (Set to 72 hours after object is created.) Formatted as [ISO 8601 date/time string](https://www.w3.org/TR/NOTE-datetime). # Connect Links Source: https://docs.manifestfinancial.com/platform/connect/links # Overview [Connect](/platform/connect) Links allow your creators to activate the connection you've created for them, edit already activated connections, or accept new permissions for already activated connections. Connect Links expire 10 minutes after creation, so you'd typically you'd create one in response to an authenticated user clicking to initiate Manifeste's *Connect* flow. *** # Methods **`POST`  /connect-link**
Link your creators to Connect to activate their connection to you.
## Body Parameters ID of the account connection to be onboarded. URL that will be redirected to after the flow finishes. See [Closing the Loop](/platform/connect/introduction#closing-the-loop) for more. If Connect detects that it is embedded into your application, this URL will be ignored. See [web](/platform/connect/web-embed) or [mobile](/platform/connect/app-embed) embedding for more. ## Example ```json Request theme={null} // POST /connect-link { "account_connection": "acon_XXXXX", "return_url": "https://yourapp.com/onboarding/complete" } ``` ```json Response theme={null} { "url": "https://connect.manifestfinancial.com/cYnAmfVT6zk7kFXjxkYzHVyMMneZn0VpRek0", "created_at": "2024-01-23T22:39:30.779Z", "expires_at": "2024-01-23T22:49:30.778Z" } ```
*** # Properties URL that you should redirect your user to. You should open this URL during an authenticated session in your platform's application. Date this Connect link will automatically expire. (Set to 10 minutes after object is created.) Formatted as [ISO 8601 date/time string](https://www.w3.org/TR/NOTE-datetime). # Embed in Web App Source: https://docs.manifestfinancial.com/platform/connect/web-embed Connect can be easily embedded in your web application. Connect should be embedded in a scrollable `iframe`. We recommend a minimum size of 600px wide and 800px tall. *** Connect will broadcast an event using `postMessage` with a body of `connect_exit` when you should close the modal. Here's an example listener: ```javascript theme={null} function handleMessage(event) { if (event.data === "connect_exit") { // close modal here } } window.addEventListener("message", handleMessage); ``` # Smart Contracts Source: https://docs.manifestfinancial.com/platform/contracts # Overview The Contract object represents an automation that your enterprise requests from a creator. For a typical integration, you'll create an Account Connection for a creator in your system, then create a Contract referencing that account connection, before directing them opt in via a [Connect Link](/platform/connect/links). *** # Methods **`POST`  /contract**
Create a new contract for an account connection under your enterprise.
## Body Parameters ID of Account Connection to request contract from. Type of contract to create. See below for a list of available contract types. Source of funds deposited into the creator's account that will trigger this contract. Required if type is `deposit_split`. See below for list of available deposit sources. Minimum deposit amount that will trigger this contract. Must be a non-negative integer. Maximum deposit amount that will trigger this contract. Must be a non-negative integer. Percentage of eligible deposit to transfer to your enterprise's operating account. Either this or `split_fixed_amount_in_cents` is required if type is `deposit_split`. Must be a number between `0` and `100`. Fixed amount of eligible deposit to transfer to your enterprise's operating account. Either this or `split_percent_amount` is required if type is `deposit_split`. Must be a non-negative integer. Maximum amount of transfer to your enterprise's operating account per eligible deposit. Must be a non-negative integer. If not provided, there is no maximum. User defined data that can be attached to the object. See the [User Data](/reference/user-data) page for details. ## Example ```json Request theme={null} // POST /contract { "account_connection": "acon_XXXXX", "type": "deposit_split", "deposit_source": "snap", "split_percent_amount": 10 } ``` ```json Response theme={null} { "id": "con_XXXXX", "created_at": "2026-01-15T19:27:58.246Z", "updated_at": "2026-01-15T19:27:58.246Z", "type": "deposit_split", "account_connection": "acon_XXXXX", "status": "created", "activity": [ { "entry": "Automation created", "date": "2026-01-15T19:27:58.245Z", "hidden": false } ], "deposit_source": "snap", "deposit_minimum_in_cents": 0, "split_fixed_amount_in_cents": 0, "split_percent_amount": 10, "fee_fixed_amount_in_cents": 0, "fee_percent_amount": 0, "fee_amount_max_in_cents": null } ```
**`GET`  /contract/:id**
Retrieve a contract by its ID.
## Path Parameters The ID of the contract to retrieve. ## Example ```json Response theme={null} { "id": "con_XXXXX", "created_at": "2026-01-15T19:27:58.246Z", "updated_at": "2026-01-15T19:27:58.246Z", "type": "deposit_split", "account_connection": "acon_XXXXX", "status": "created", "activity": [ { "entry": "Automation created", "date": "2026-01-15T19:27:58.245Z", "hidden": false } ], "deposit_source": "snap", "deposit_minimum_in_cents": 0, "split_fixed_amount_in_cents": 0, "split_percent_amount": 10, "fee_fixed_amount_in_cents": 0, "fee_percent_amount": 0, "fee_amount_max_in_cents": null } ```
**`GET`  /contract**
List all contracts associated with your enterprise.
## Query Parameters The page number to return. Default is 1. The number of items to return per page. Default is 10. ## Example ```json Response theme={null} { "data": [ { "id": "con_XXXXX", "created_at": "2026-01-15T19:27:58.246Z", "updated_at": "2026-01-15T19:27:58.246Z", "type": "deposit_split", "account_connection": "acon_XXXXX", "status": "created", "activity": [ { "entry": "Automation created", "date": "2026-01-15T19:27:58.245Z", "hidden": false } ], "deposit_source": "snap", "deposit_minimum_in_cents": 0, "split_fixed_amount_in_cents": 0, "split_percent_amount": 10, "fee_fixed_amount_in_cents": 0, "fee_percent_amount": 0, "fee_amount_max_in_cents": null }, { "id": "con_YYYYY", "created_at": "2026-01-15T19:27:58.246Z", "updated_at": "2026-01-15T19:27:58.246Z", "type": "deposit_split", "account_connection": "acon_YYYYY", "status": "created", "activity": [ { "entry": "Automation created", "date": "2026-01-15T19:27:58.245Z", "hidden": false } ], "deposit_source": "google", "deposit_minimum_in_cents": 0, "split_fixed_amount_in_cents": 0, "split_percent_amount": 10, "fee_fixed_amount_in_cents": 0, "fee_percent_amount": 0, "fee_amount_max_in_cents": null } ], "pagination": { "page": 1, "page_size": 10, "total": 2 } } ```
**`GET`  /account-connection/:id/contract**
List all contracts from your enterprise to a specific account connection.
## Path Parameters The ID of the account connection to list contracts for. ## Query Parameters The page number to return. Default is 1. The number of items to return per page. Default is 10. ## Example ```json Response theme={null} { "data": [ { "id": "con_XXXXX", "created_at": "2026-01-15T19:27:58.246Z", "updated_at": "2026-01-15T19:27:58.246Z", "type": "deposit_split", "account_connection": "acon_XXXXX", "status": "created", "activity": [ { "entry": "Automation created", "date": "2026-01-15T19:27:58.245Z", "hidden": false } ], "deposit_source": "snap", "deposit_minimum_in_cents": 0, "split_fixed_amount_in_cents": 0, "split_percent_amount": 10, "fee_fixed_amount_in_cents": 0, "fee_percent_amount": 0, "fee_amount_max_in_cents": null }, { "id": "con_YYYYY", "created_at": "2026-01-15T19:27:58.246Z", "updated_at": "2026-01-15T19:27:58.246Z", "type": "deposit_split", "account_connection": "acon_XXXXX", "status": "created", "activity": [ { "entry": "Automation created", "date": "2026-01-15T19:27:58.245Z", "hidden": false } ], "deposit_source": "google", "deposit_minimum_in_cents": 0, "split_fixed_amount_in_cents": 0, "split_percent_amount": 10, "fee_fixed_amount_in_cents": 0, "fee_percent_amount": 0, "fee_amount_max_in_cents": null } ], "pagination": { "page": 1, "page_size": 10, "total": 2 } } ```
**`DELETE`  /contract/:id**
Terminate contract. This will stop any future automations from occurring under this contract.
## Path Parameters The ID of the contract to terminate. ## Example ```json Response theme={null} { "id": "con_XXXXX", "created_at": "2026-01-15T19:29:26.000Z", "updated_at": "2026-01-15T19:35:30.000Z", "type": "deposit_split", "account_connection": "acon_XXXXX", "status": "terminated", "expires_at": null, "agreement_at": null, "agreement_ip": null, "deleted_at": "2026-01-15T19:35:30.000Z", "activity": [ { "date": "2026-01-15T19:29:26.948Z", "entry": "Automation created", "hidden": false }, { "date": "2026-01-15T19:35:30.847Z", "entry": "Automation terminated by enterprise", "hidden": false } ], "deposit_source": "snap", "deposit_minimum_in_cents": 0, "deposit_maximum_in_cents": null, "split_fixed_amount_in_cents": 0, "split_percent_amount": 10, "split_amount_max_in_cents": null, "fee_fixed_amount_in_cents": 0, "fee_percent_amount": 0, "fee_amount_max_in_cents": null } ```
*** # Properties Identifier for this contract. Type of smart contract. Must be `deposit_split`. Status of account connection. One of `created`, `active`, `declined`, `terminated`, or `expired`. Only users can activate a contract (through the Connect flow). Source of funds for deposit split contracts. One of `google`, `snap`, or `only_fans`. Minimum deposit amount that will trigger this contract. Maximum deposit amount that will trigger this contract. Percentage of eligible deposit to transfer to your enterprise's operating account. Fixed amount of eligible deposit to transfer to your enterprise's operating account. Maximum amount of transfer to your enterprise's operating account per eligible deposit. An activity log that tracks the status changes, internal transfers, and any errors associated with a given contract. User defined data that can be attached to the object. See the [User Data](/reference/user-data) page for details. # Enterprise Source: https://docs.manifestfinancial.com/platform/enterprise # Overview The Enterprise object represents your organization and its account at Manifest. *** # Methods **`GET`  /enterprise**
Test your integration + get info for your enterprise.
## Example ```json Response theme={null} { "name": "Triangle", "operating_balance_in_cents": 10000, "pending_payouts_balance_in_cents": 0, "created_at": "2024-11-12T20:22:49.075Z", "updated_at": "2024-11-12T20:22:49.075Z" } ```
*** # Properties Enterprise name Available balance in cents, e.g. \`\$1.00 would be the number 100. Available balance in cents, e.g. \`\$1.00 would be the number 100. # Embed in Mobile App Source: https://docs.manifestfinancial.com/platform/payment-methods/app-embed Embed payment management in your mobile app using web views. **Note that events are stringified JSON for mobile integrations.** See below for specific implementation examples. ## Events Manifest will broadcast events to your application to keep your app informed of changes. Here are the events you can expect: * `payment_method_updated`: The buyer has successfully updated their payment method. * `resize`: The height of the content has changed. Depending on your design, you may need to resize the embedded view to match the new height. *** ## Customization Since you are not using our SDK, you will need to set the buyer's payment method form [customization options](/platform/payment-methods/customization) manually. For example: ```js theme={null} // construct your options const options = { font: "Poppins", buttonColor: '#007733' }; // encode the options const stringified = JSON.stringify(options); const encoded = Buffer.from(stringified).toString('base64'); // append them to the payment method embed URL const url = `${buyer.payment_method_embed_url}?options=${encoded}`; ``` *** ## Embedding ### iOS ```swift WKWebView theme={null} self.webView.configuration.preferences.javaScriptEnabled = true self.webView.configuration .userContentController .add(self, name: "checkoutMessageHandler") self.webView.load( /* payment_method_embed_url */ ) // And when handling the event func userContentController( _ userContentController: WKUserContentController, didReceive message: WKScriptMessage ) { guard let message = message.body as? String else { return } guard let data = message.data(using: .utf8) else { return } do { let json = try JSONSerialization.jsonObject( with: data, options: [] ) as? [String: Any] let type = json["type"] as? String if type == "payment_method_updated" { // dismiss the WebView here } if type == "resize" { let height = json["payload"]["height"] as? Int // resize the WebView if needed } } catch { print(error) } } ``` Manifest will post an event using the `userContentController` object you created, with a message containing a stringified JSON event. ### Android ```java WebView theme={null} import org.json.JSONObject; class CheckoutInterface { @JavascriptInterface public boolean postMessage(String message, String transferList) { try { JSONObject json = new JSONObject(message); String type = json.getString("type"); if ("payment_method_updated".equals(type)) { //dismiss the webview here } if ("resize".equals(type)) { int height = json.getJSONObject("payload").getInt("height"); //resize the webview if needed } } catch (Exception e) { e.printStackTrace(); return false; } return true; } } // Initializing the webview webView.addJavascriptInterface(new CheckoutInterface(), "checkoutMessageHandler"); ``` Manifest will post an event using the `checkoutMessageHandler` object you created, with a message containing a stringified JSON event. ### React Native ```jsx WebView theme={null} const onMessage = (event) => { try { const { type, payload } = JSON.parse(event?.nativeEvent?.data); if (type === 'payment_method_updated') { //dismiss web view here } if (type === 'resize') { const { height } = payload; //resize the webview if needed } } catch (error) { console.error(error); } } ``` Manifest will post an event using the `onMessage` handler you created, with a message containing a stringified JSON event. *** ## Need Addional Support? If your application needs a different callback scheme, just [let us know](mailto:developer@manifestfinancial.com). # Customization Source: https://docs.manifestfinancial.com/platform/payment-methods/customization The Manifest payment method form comes with a default style and verbiage. See below to customize the form to match your platform's use case and brand. Keep in mind that there's limited space for custom text and that Manifest enforces some basic text color contrast thresholds to ensure readability and accessibility. ## Options Font family that overrides the default for the headline, labels, and button. Options are `Poppins`, `sans-serif`, `serif`, `monospace`. Need a different font? [Let us know](mailto:developer@manifestfinancial.com). Text for the headline of the form. This will override the default conditional display of either `Set your payment method.` or `Update your payment method.` Text for the submit button. This will override the default conditional display of either `Save` or `Update` Background color for the form. Color for the headline. Color for the labels. Color for error messages. Background color for the submit button. Color for the submit button text. Border radius for the submit button. Background color for the input fields. Bottom border color for the input fields. Border radius for the input fields. Horizontal padding for the page. Color for the input field text. Color for the loader. Text that will be displayed in the digital wallet purchase prompt. Amount that will be displayed in the digital wallet purchase prompt. If `true`, hides the manual payment method form and only shows digital wallets (Apple Pay and Google Pay). # Payment Methods Source: https://docs.manifestfinancial.com/platform/payment-methods/introduction *** ## Introduction Each buyer on your platform has a stored payment card to pay for goods or services. Manifest provides a simple, secure form that allows your buyers to add and manage that payment method. This page is meant to be embedded in your [web](#web) or [mobile](#mobile-app) application. Since your application never has access to your buyers' payment details, you avoid the burden of PCI compliance. Each [buyer](/platform/buyers) object contains a `payment_method_embed_url` that you can use to embed the payment method management form in your platform. You should not store this URL, as it expires after a few minutes. *** ## Staying Updated Once the buyer's payment info has been successfully updated, Manifest will post messages to your app (see the embedding guides). You can then check the details of the buyer you've stored in your system to see the results. You'll also be sent a `buyer.update` [webhook](/platform/webhooks) notification. *** ## Testing To test the payment method management form, use the following test card details: | Card Number | Expiry Date | CVC | ZIP Code | | ----------------------------- | --------------- | ------------ | ------------ | | `4111 1111 1111 1111`         | Any future date | Any 3 digits | Any 5 digits | To test card declines, use the following card numbers: | Card Number | Decline Type | | ----------------------------- | ------------------ | | `4000 0000 0000 9979`         | Generic Decline | | `4000 0000 0000 0069`         | Insufficient Funds | # Embed in Web App Source: https://docs.manifestfinancial.com/platform/payment-methods/web-embed Use our web SDK to embed the buyer's payment method form into your web application. First, add our web SDK to your document's `` tag: ```html Sandbox theme={null} ``` ```html Production theme={null} ``` ## Embed Now you can initialize the SDK and embed the buyer's payment method form into an `iframe` on your page: ```javascript theme={null} const checkout = new MCheckout(); const config = { iframeId, embedUrl, parentDomain, onResize, onPaymentMethodUpdated, options }; checkout.embed(config); ``` The ID of the `iframe` element to embed the buyer's payment method form into. The `payment_method_embed_url` to embed. The domain of the parent page. This page must be served over HTTPS. Please note that for Apple Pay to work, the parent domain must be added to your merchant account by Manifest. Please contact [developer@manifestfinancial.com](mailto:developer@manifestfinancial.com) to begin verifying your domain. The height of the content has changed. The new values are passed in as an object with `width` and `height` properties. Depending on your design, you may need to resize the embedded view to match the new height. The buyer has successfully updated their payment method; you can navigate to the next step of your process. An object of [customization options](/platform/payment-methods/customization) to customize the buyer's payment method form. ### Example ```javascript theme={null} const config = { iframeId: "checkout-iframe", embedUrl: payment_method_embed_url, parentDomain: "my-app.com", onResize: ({ width, height }) => { // resize your iframe, etc here }, onPaymentMethodUpdated: () => { // update your UI here }, options: { font: "Poppins", buttonBorderRadius: "22px", // other customization options } } checkout.embed(config); ``` *** ## Check Digital Wallet Support (optional) There is an optional function that allows you to check if the buyer's device supports digital wallets — useful if you'd like to show a different UI based on support. ```javascript theme={null} checkout.checkDigitalWalletSupport().then((results) => { const { applePay, googlePay, enabled } = results; // Update your UI here } ``` It returns a promise that resolves to an object with the following properties: Whether the buyer's device supports *Apple Pay*. Whether the buyer's device supports *Google Pay*. Whether the buyer's device supports any digital wallets. # Payouts Source: https://docs.manifestfinancial.com/platform/payouts # Overview The Payout object represents a payment from you to one of your activated connections. **Permission Required**

Creating payouts requires the `payment.credit` permission from the selected account connection. This permission will be granted automatically if a legacy payout method is specified when creating the account connection.
*** # Payout Lifecycle Each payout follows a lifecycle with events and timing depend on the `type` of the account connection receiving the payout. Payouts to inactive account connections are considered `unclaimed` and allow the recipient 30 days to activate their account connection and receive their payout. This diagram shows lifecycle events for the different types of payouts: Payout Lifecycle *** # Methods **`POST`  /payout**
Make payouts to your account connections. Include an [**idempotency key**](/reference/idempotency) header to make the request idempotent.
## Body Parameters ID of Account Connection to pay Amount in cents, e.g. \$1.00 would be the number 100. Description of payout. (Visible to creators.) Default value: `Payment from {enterprise_name}` Schedule a future payout by setting its date with an [ISO 8601 date/time string](https://www.w3.org/TR/NOTE-datetime). If omitted, payout will be queued for processing immediately. User defined data that can be attached to the object. See the [User Data](/reference/user-data) page for details. ## Example ```json Request theme={null} // POST /payout { "account_connection": "acon_XXXXX", "amount_in_cents": 10000, "description": "January Payout" } ``` ```json Response theme={null} { "id": "pay_AAAAA", "type": "direct", "status": "pending", "account_connection": "acon_XXXXX", "amount_in_cents": 10000, "description": "January Payout", "date": "2024-11-12T20:22:49.075Z", "destination": "Manifest Account - Paul Smith", "fee_in_cents": 10, "userdata": {}, "created_at": "2024-11-12T20:22:49.075Z", "updated_at": "2024-11-12T20:22:49.075Z" } ```
**`POST`  /payout/batch**
Create many payouts at once. This method is more performant than individually creating payouts, and should be used in high-volume situations.

**This method is strict.** If any payout object fails validation, no payouts will be created. If addition to the top-level error `message` in the error response, the `details` key will contain an array of any problematic request objects and their individual errors. See example `Bad Request` error response below.

Include an [**idempotency key**](/reference/idempotency) header to make the request idempotent.
## Body Parameters Array of payout objects. See Payout object specification from Create Payout method. ## Example ```json Request theme={null} // POST /payout/batch { "payouts": [ { "account_connection": "acon_XXXXX", "amount_in_cents": 10000, "description": "January Payout" }, { "account_connection": "acon_YYYYY", "amount_in_cents": 10000, "description": "January Payout" } ] } ``` ```json Response theme={null} { "payouts": [ { "id": "pay_AAAAA", "type": "direct", "status": "pending", "account_connection": "acon_XXXXX", "amount_in_cents": 10000, "description": "January Payout", "date": "2024-01-15T20:22:49.075Z", "destination": "Manifest Account - Paul Smith", "fee_in_cents": 10, "userdata": {}, "created_at": "2024-01-15T20:22:49.075Z", "updated_at": "2024-01-15T20:22:49.075Z" }, { "id": "pay_BBBBB", "type": "direct", "status": "pending", "account_connection": "acon_YYYYY", "amount_in_cents": 10000, "description": "January Payout", "date": "2024-01-15T20:22:49.075Z", "destination": "Manifest Account - Patrick Starr", "fee_in_cents": 10, "userdata": {}, "created_at": "2024-01-15T20:22:49.075Z", "updated_at": "2024-01-15T20:22:49.075Z" } ] } ``` ```json Bad Request theme={null} { "message": "Errors occurred while creating payouts. No payouts were created. See details.", "details": [ { "message": "You have not requested the 'payment.credit' permission from this account connection.", "request": { "account_connection": "acon_XXXXX", "amount_in_cents": 10000, "description": "January Payout", } }, { "message": "Deleted account connections cannot receive payouts.", "request": { "account_connection": "acon_YYYYY", "amount_in_cents": 10000, "description": "January Payout", } } ] } ```
**`GET`  /payout/:id**
Get details of one of your payments.
## Path Parameters The ID of the payout to retrieve. ## Example ```json Response theme={null} { "id": "pay_AAAAA", "type": "direct", "status": "pending", "account_connection": "acon_XXXXX", "amount_in_cents": 10000, "description": "January Payout", "date": "2024-11-12T20:22:49.075Z", "destination": "Manifest Account - Paul Smith", "fee_in_cents": 10, "userdata": {}, "created_at": "2024-11-12T20:22:49.075Z", "updated_at": "2024-11-12T20:22:49.075Z" } ```
**`PUT`  /payout/:id**
Update data associated with one of your enterprise's payouts. Only certain fields can be updated. See below.
## Path Parameters The ID of the payout to update. ## Body Parameters Pass the string `canceled` to cancel the payout. This is only effective if the payout is in ready status. Description of payout. (Visible to creators.) Default value: `Payment from {enterprise_name}` Reschedule a future payout by setting its date with an [ISO 8601 date/time string](https://www.w3.org/TR/NOTE-datetime). User defined data that can be attached to the object. See the [User Data](/reference/user-data) page for details. ## Example ```json Request theme={null} // PUT /payout/pay_AAAAA { "description": "Royalties for Hey Jude" } ``` ```json Response theme={null} { "id": "pay_AAAAA", "type": "direct", "status": "pending", "account_connection": "acon_XXXXX", "amount_in_cents": 10000, "description": "Royalties for Hey Jude", "date": "2024-11-12T20:22:49.075Z", "destination": "Manifest Account - Paul Smith", "fee_in_cents": 10, "userdata": {}, "created_at": "2024-11-12T20:22:49.075Z", "updated_at": "2024-11-12T20:22:49.075Z" } ```
**`GET`  /payout**
List all payouts from your enterprise.
## Query Parameters The page number to return. Default is 1. The number of items to return per page. Default is 10. ## Example ```json Response theme={null} { "data": [ { "id": "pay_CCCCC", "type": "direct", "status": "sent", "account_connection": "acon_XXXXX", "amount_in_cents": 10000, "description": "January Payout", "date": "2024-01-15T20:22:49.075Z", "destination": "Manifest Account - Paul Smith", "fee_in_cents": 5, "userdata": {}, "created_at": "2024-01-15T20:22:49.075Z", "updated_at": "2024-01-15T20:22:49.075Z" }, { "id": "pay_BBBBB", "type": "direct", "status": "sent", "account_connection": "acon_YYYYY", "amount_in_cents": 10000, "description": "January Payout", "date": "2024-14-12T20:22:49.075Z", "destination": "Manifest Account - Patrick Starr", "fee_in_cents": 10, "userdata": {}, "created_at": "2024-14-12T20:22:49.075Z", "updated_at": "2024-14-12T20:22:49.075Z" }, { "id": "pay_AAAAA", "type": "direct", "status": "sent", "account_connection": "acon_XXXXX", "amount_in_cents": 10000, "description": "December Payout", "date": "2024-11-12T20:22:49.075Z", "destination": "Manifest Account - Paul Smith", "fee_in_cents": 10, "userdata": {}, "created_at": "2024-11-12T20:22:49.075Z", "updated_at": "2024-11-12T20:22:49.075Z" }, ], "pagination": { "page": 1, "page_size": 10, "total": 3 } } ```
**`GET`  /account-connection/:id/payout**
List all payouts from your enterprise to a specific account connection.
## Path Parameters The ID of the account connection to list payouts for. ## Query Parameters The page number to return. Default is 1. The number of items to return per page. Default is 10. ## Example ```json Response theme={null} { "data": [ { "id": "pay_CCCCC", "type": "direct", "status": "sent", "account_connection": "acon_XXXXX", "amount_in_cents": 10000, "description": "January Payout", "date": "2024-01-15T20:22:49.075Z", "destination": "Manifest Account - Paul Smith", "fee_in_cents": 5, "userdata": {}, "created_at": "2024-01-15T20:22:49.075Z", "updated_at": "2024-01-15T20:22:49.075Z" }, { "id": "pay_BBBBB", "type": "direct", "status": "sent", "account_connection": "acon_XXXXX", "amount_in_cents": 10000, "description": "December Payout", "date": "2024-14-12T20:22:49.075Z", "destination": "Manifest Account - Paul Smith", "fee_in_cents": 10, "userdata": {}, "created_at": "2024-14-12T20:22:49.075Z", "updated_at": "2024-14-12T20:22:49.075Z" }, { "id": "pay_AAAAA", "type": "direct", "status": "sent", "account_connection": "acon_XXXXX", "description": "November Payout", "date": "2024-11-12T20:22:49.075Z", "destination": "Manifest Account - Paul Smith", "amount_in_cents": 10000, "fee_in_cents": 10, "userdata": {}, "created_at": "2024-11-12T20:22:49.075Z", "updated_at": "2024-11-12T20:22:49.075Z" }, ], "pagination": { "page": 1, "page_size": 10, "total": 3 } } ```
*** # Properties Identifier for this payout. ID of Account Connection to pay Description of payout. (Visible to creators.) Schedule a future payout by setting its date with an [ISO 8601 date/time string](https://www.w3.org/TR/NOTE-datetime). If omitted, payout will be queued for processing immediately. A plaintext label of the payout's destination account, suitable for display. Amount in cents, e.g. \$1.00 would be the number 100. Fee paid to Manifest for this payout, in cents, e.g. \$1.00 would be the number 100. Type of payment. One of `direct`, `ach`, `wallet`, or `unclaimed`. This field will be populated based on the Account Connection type at the time of payment. Note: Payouts to inactive account connections are considered `unclaimed` and allow the recipient 30 days to activate their account connnection and receive their payout. An activity log that tracks the status changes, internal transfers, and any errors associated with a given payout. Status of payout. One of: | Status | Description | | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `created` | Initial status after object creation. Payouts should only remain in this status a few seconds. | | `ready` | Once a payout's funds have been moved to your enterprise's pending payouts account, the payout will be changed to `ready` status. | | `pending` | The payment to the creator has been initiated, based on the `type` of the account connection. Final fees are calculated, and any over-estimated fees are put back in your operating account.

ACH: Payment is queued for processing, which happens periodically throughout the banking day. | | `sent` | Manifest: The payment was completed and the amount is now available in the creator's account.

ACH: The payment was processed and sent out to the ACH network for clearing and settlement. | | `error` | The transfer encountered an error during processing. The reasons a transfer might be set to error include insufficient funds, suspected fraud, or failed validation.

Check your payout's `activity` log for details. | | `returned` (ACH only) | The transfer was processed and sent, but the network or receiving bank could not complete the transfer successfully. The payout amount has been returned to your operating account. | | `canceled` | The payout was canceled by you before its `date`. The pending funds have been returned to your operating account. |
User defined data that can be attached to the object. See the [User Data](/reference/user-data) page for details. # Purchases Source: https://docs.manifestfinancial.com/platform/purchases # Overview The Purchase object represents a one-time payment of money from a Buyer to your organization. *** # Methods **`POST`  /purchase**
Create a new purchase.
## Body Parameters ID of buyer making the purchase. Array of items in the purchase, each containing a `name`, `description`, `amount_in_cents`, and `quantity` info. Item name Additional details Item price (negative values treated as discounts) Number of items purchased If `true`, the purchase is eligible to be automatically refunded if a later fraud alert is detected on the payment card, minimizing the risk of chargebacks. A common use case is to set this to `true` if you are selling digital goods. Contact Manifest to configure your fraud refund window (default is 72 hours). The Purchase status will be updated to `refunded` and you will receive a `purchase.update` webhook after the refund is processed. User defined data that can be attached to the object. See the [User Data](/reference/user-data) page for details. ## Example ```json Request theme={null} // POST /purchase { "buyer": "buy_XXXXX", "items": [{ "name": "Triangle Logo Tee", "description": "XL", "amount_in_cents": 3000, "quantity": 2 }] } ``` ```json Response theme={null} { "id": "pch_YYYYY", "buyer": "buy_XXXXX", "status": "created", "items": [{ "name": "Triangle Logo Tee", "description": "XL", "amount_in_cents": 3000, "quantity": 2 }], "total_in_cents": 6000, "auto_refund_on_fraud": false, "user_data": {}, "created_at": "2025-01-02T21:18:16.704Z", "updated_at": "2025-01-02T21:18:16.704Z" } ```
**`POST`  /purchase/:id/commit**
Execute purchase. Throws an error if the purchase is not in the `created` state. Include an [**idempotency key**](/reference/idempotency) header to make the request idempotent.
## Path Parameters The ID of the purchase to execute. ## Example ```json Response theme={null} // POST /purchase/pch_YYYYY/commit { "id": "pch_YYYYY", "buyer": "buy_XXXXX", "status": "pending", "items": [{ "name": "Triangle Logo Tee", "description": "XL", "amount_in_cents": 3000, "quantity": 2 }], "total_in_cents": 6000, "auto_refund_on_fraud": false, "user_data": {}, "created_at": "2025-01-02T21:18:16.704Z", "updated_at": "2025-01-02T21:18:16.704Z" } ```
**`GET`  /purchase/:id**
Get details of one of your purchases.
## Path Parameters The ID of the purchase to retrieve. ## Example ```json Response theme={null} { "id": "pch_YYYYY", "buyer": "buy_XXXXX", "status": "created", "items": [{ "name": "Triangle Logo Tee", "description": "XL", "amount_in_cents": 3000, "quantity": 2 }], "total_in_cents": 6000, "auto_refund_on_fraud": false, "user_data": {}, "created_at": "2025-01-02T21:18:16.704Z", "updated_at": "2025-01-02T21:18:16.704Z" } ```
**`PUT`  /purchase/:id**
Update data associated with one of your enterprise's purchases. Since a checkout page may be rendered anytime after purchase creation, we do not let you update purchase fields that might materially change the nature of transaction.
## Path Parameters The ID of the purchase to update. ## Body Parameters The status of the purchase. Status can only be updated to `canceled`, `completed`, or `refunded`. If `true`, the purchase is eligible to be automatically refunded if a later fraud alert is detected on the payment card, minimizing the risk of chargebacks. A common use case is to set this to `true` if you are selling digital goods. Contact Manifest to configure your fraud refund window (default is 72 hours). The Purchase status will be updated to `refunded` and you will receive a `purchase.update` webhook after the refund is processed. User defined data that can be attached to the object. See the [User Data](/reference/user-data) page for details. ## Example ```json Request theme={null} // PUT /purchase/pch_XXXXX { "userdata": { "key": "value" } } ``` ```json Response theme={null} { "id": "pch_YYYYY", "buyer": "buy_XXXXX", "status": "created", "items": [{ "name": "Triangle Logo Tee", "description": "XL", "amount_in_cents": 3000, "quantity": 2 }], "total_in_cents": 6000, "auto_refund_on_fraud": false, "userdata": { "key": "value" }, "created_at": "2025-01-02T21:18:16.704Z", "updated_at": "2025-01-02T21:18:16.704Z" } ```
**`GET`  /purchase**
List all purchases from your enterprise.
## Query Parameters The page number to return. Default is 1. The number of items to return per page. Default is 10. ## Example ```json Response theme={null} { "data": [ { "id": "pch_XXXXX", "buyer": "buy_XXXXX", "status": "pending", "items": [{ "name": "Triangle Logo Tee", "description": "XL", "amount_in_cents": 3000, "quantity": 2 }], "total_in_cents": 6000, "auto_refund_on_fraud": false, "user_data": {}, "created_at": "2025-01-02T21:18:16.704Z", "updated_at": "2025-01-02T21:18:16.704Z" }, { "id": "pch_YYYYY", "buyer": "buy_XXXXX", "status": "pending", "items": [{ "name": "Triangle Logo Tee", "description": "XL", "amount_in_cents": 3000, "quantity": 2 }], "total_in_cents": 6000, "auto_refund_on_fraud": false, "user_data": {}, "created_at": "2025-01-02T21:18:16.704Z", "updated_at": "2025-01-02T21:18:16.704Z" }, { "id": "pch_ZZZZZ", "buyer": "buy_XXXXX", "status": "pending", "items": [{ "name": "Triangle Logo Tee", "description": "XL", "amount_in_cents": 3000, "quantity": 2 }], "total_in_cents": 6000, "auto_refund_on_fraud": false, "user_data": {}, "created_at": "2025-01-02T21:18:16.704Z", "updated_at": "2025-01-02T21:18:16.704Z" }, ], "pagination": { "page": 1, "page_size": 10, "total": 3 } } ```
**`GET`  /buyer/:id/purchase**
List all purchases from your enterprise for a specific buyer.
## Path Parameters The ID of the buyer to list purchases for. ## Query Parameters The page number to return. Default is 1. The number of items to return per page. Default is 10. ## Example ```json Response theme={null} { "data": [ { "id": "pch_XXXXX", "buyer": "buy_XXXXX", "status": "pending", "items": [{ "name": "Triangle Logo Tee", "description": "XL", "amount_in_cents": 3000, "quantity": 2 }], "total_in_cents": 6000, "auto_refund_on_fraud": false, "user_data": {}, "created_at": "2025-01-02T21:18:16.704Z", "updated_at": "2025-01-02T21:18:16.704Z" }, { "id": "pch_YYYYY", "buyer": "buy_XXXXX", "status": "pending", "items": [{ "name": "Triangle Logo Tee", "description": "XL", "amount_in_cents": 3000, "quantity": 2 }], "total_in_cents": 6000, "auto_refund_on_fraud": false, "user_data": {}, "created_at": "2025-01-02T21:18:16.704Z", "updated_at": "2025-01-02T21:18:16.704Z" }, { "id": "pch_ZZZZZ", "buyer": "buy_XXXXX", "status": "pending", "items": [{ "name": "Triangle Logo Tee", "description": "XL", "amount_in_cents": 3000, "quantity": 2 }], "total_in_cents": 6000, "auto_refund_on_fraud": false, "user_data": {}, "created_at": "2025-01-02T21:18:16.704Z", "updated_at": "2025-01-02T21:18:16.704Z" }, ], "pagination": { "page": 1, "page_size": 10, "total": 3 } } ```
*** # Properties Identifier for this purchase. ID of buyer making the purchase. Status of purchase. One of: | Status | Description | | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `created` | Purchase has been created. | | `pending` | Payment was successful, and money is being collected from the buyer. | | `settling` | Payment is being settled to your operating account. | | `completed` | Purchase has finished processing, and payment has been received in your operating account. | | `error` | Purchase has encountered an error. | | `canceled` | Purchase has been canceled. | | `refunded` | Purchase has been refunded, and will be updated to `reversed` once the refund has been processed. If your attempt to refund a purchase fails, the payment will not be able to be reversed without a chargeback being processed. | | `reversed` | Purchase has been reversed. This can happen if a refund is issued, or a chargeback is processed. | Array of items in the purchase, each containing a `description`, `amount_in_cents`, and `meta` data. You are responsible for adding `items` for tax and shipping, if applicable. Item name Additional details Item price (negative values treated as discounts) Number of items purchased Total amount of the purchase in cents. Fee amount of the purchase in cents. Net total amount of the purchase in cents. This amount will be deposited into your operating account. URL to the receipt PDF for the purchase, once paid. Brand of the payment card used for the purchase, if available. Last 4 digits of the payment card used for the purchase, if available. Array of activity log entries for the purchase, each containing an entry and date. If `true`, the purchase is eligible to be automatically refunded if a later fraud alert is detected on the payment card, minimizing the risk of chargebacks. A common use case is to set this to `true` if you are selling digital goods. Contact Manifest to configure your fraud refund window (default is 72 hours). The Purchase status will be updated to `refunded` and you will receive a `purchase.update` webhook after the refund is processed. User defined data associated with the purchase. Date and time when the purchase was created. Date and time when the purchase was last updated. # Webhooks Source: https://docs.manifestfinancial.com/platform/webhooks # Overview Use Webhooks to be notified of events in the Manifest platform. Note: Currently, Manifest supports one webhook per event, per environment. ## Structure When receiving a webhook notification, there will be an `event` and `id` fields: ```json theme={null} { "event": "account_connection.update", "id": "acon_XXXXX", "timestamp": 1644893096, "user_data": {} } ``` ## Validation (Optional) Validating that webhooks originate from Manifest ensures that a webhook notification is authentic. If a webhook object has been created with the `basic_user` or `basic_secret` fields, notifications from Manifest will include an additional `Authorization` header that is the base64-encoded value of `{basic_user}:{basic_secret}`. When the base64 header matches the value your application expects, the request is authentic. ```http Example Header theme={null} Authorization: Basic YmVzdXJldG86ZHJpbmt5b3Vyb3ZhbHRpbmU= ``` *** # Methods **`POST`  /webhook**
Subscribe to a type of event.
## Body Parameters The HTTPS URL where the event notification will be sent. Event to subscribe to. See below for a list of available events. First value in base64(`basic_user:basic_secret`), sent as `Authorization` for request validation. This field will not appear in responses. Second value in base64(`basic_user:basic_secret`), sent as `Authorization` for request validation. This field will not appear in responses. User defined data that can be attached to the object. See the [User Data](/reference/user-data) page for details. ## Example ```json Request theme={null} // POST /webhook { "url": "https://app.yoursite.com/webhook", "event": "payout.update" } ``` ```json Response theme={null} { "id": "wh_XXXXX", "url": "https://app.yoursite.com/webhook", "event": "payout.update" } ```
**`GET`  /webhook/:id**
Get details of one of your webhooks.
## Path Parameters The ID of the webhook to retrieve. ## Example ```json Response theme={null} { "id": "wh_XXXXX", "url": "https://app.yoursite.com/webhook", "event": "payout.update" } ```
**`GET`  /webhook**
List all webhooks associated with your enterprise.
## Query Parameters The page number to return. Default is 1. The number of items to return per page. Default is 10. ## Example ```json Response theme={null} { "data": [ { "id": "wh_XXXXX", "url": "https://app.yoursite.com/webhook", "event": "payout.update" }, { "id": "wh_YYYYY", "url": "https://app.yoursite.com/webhook", "event": "account_connection.update" }, ], "pagination": { "page": 1, "page_size": 10, "total": 2 } } ```
**`DELETE`  /webhook/:id**
Remove one of your webhooks.
## Path Parameters The ID of the webhook to delete.
*** # Properties Identifier for this webhook. The HTTPS URL where the event notification will be sent. Event to subscribe to. Possible values are: * `account_connection.update` * `payout.update` * `buyer.update` * `purchase.update` * `contract.update` First value in base64(`basic_user:basic_secret`), sent as `Authorization` for request validation. This field will not appear in responses. Second value in base64(`basic_user:basic_secret`), sent as `Authorization` for request validation. This field will not appear in responses. User defined data that can be attached to the object. See the [User Data](/reference/user-data) section for details. # Errors Source: https://docs.manifestfinancial.com/reference/errors Errors are standardized in our API responses. In addition to an HTTP status code, you'll get a human-readable message, e.g. ```json theme={null} { "message": "Invalid email address." } ``` # Idempotency Source: https://docs.manifestfinancial.com/reference/idempotency Idempotency keys help prevent duplicate transactions by ensuring that identical requests are processed only once. When you include an idempotency key in your request headers: * If you make a request with the same idempotency key and identical request body as a previous request, you'll receive the same response as the original request, but the request will be processed only once. * If you make a request with the same idempotency key but a different request body, you'll receive a `409 Conflict` error. This is particularly useful for retry scenarios where you want to ensure that a transaction isn't processed multiple times due to network issues or other temporary failures. Requests that move money have idempotency keys as optional request headers. Here's how they work: ```json RequestHeaders theme={null} { ... "Idempotency-Key": "8c9accbb-b9e9-49af-91f4-ef2ba3a9cf04" } ``` Best practices for idempotency keys: * Use a unique value for each unique transaction * Generate keys that are long enough to avoid collisions * Consider using UUIDs or other unique identifiers # Moving to Production Source: https://docs.manifestfinancial.com/reference/moving-to-production Certain configurability for your enterprise is available/required before moving to production: ## Creator Verification If your use case includes onboarding unverified users, Manifest will enable a required "creator verification" step in the *Connect* flow. *** ## Offering ACH While ACH payouts are seamless to your organization, some integrations might not benefit from offering an ACH option. Manifest can disable the ACH option for your organization. Note: When requesting any Manifest-only permissions from a creator (i.e. `payment.debit`), ACH will not be presented as an option. *** ## Use Case Manifest provide a few use cases with localized (currently English and Spanish) language that briefly describes how your organization uses Manifest during the Connect flow. The default use case is "Payout". Contact Manifest if another use case better matches your offering. | Use Case | Message | | -------- | ----------------------------------------------- | | Payout | "`enterprise_name` uses Manifest to pay you." | | Generic | "`enterprise_name` is partnered with Manifest." | # Pagination Source: https://docs.manifestfinancial.com/reference/pagination Pagination is standardized in our "list" API responses, e.g: ```json theme={null} { "data": [ /* objects */ ], "pagination": { "page": 1, "page_size": 10, "total": 44 } } ``` To request additional pages or change the page size, you can add the following query parameters to any "list" API request: ``` {{URL}}?page=2&page_size=10 ``` # Testing in Sandbox Source: https://docs.manifestfinancial.com/reference/testing-in-sandbox ## Accounts In Sandbox, accounts are funded with fake funds for testing. Customer accounts start with \$5,000.00 and enterprise operating accounts have a \$100,000.00 balance of test funds. *** ## ACH Payouts ACH payments in sandbox work differently than in production. * Every hour, on the hour, `pending` ACH payouts will be moved to the sent status. * To simulate a returned ACH, change the **account number** to begin with a `9`. Your payout will change from `pending` to `sent` on the hour as usual, but will update to `returned` after 30 minutes. *** ## Connect Connect works differently in sandbox to help speed up testing: *** ### 2FA * You don't have to enter the correct 2FA code to login. Just use the prefilled `000000`. *** ### Application * Use the prefilled "Alice Alison" information to simulate a successful identity verification and account open. * Change the name on the prefilled "Alice Alison" info in the Manifest application to simulate a failed identity verification flow. *** ## Manifest App Any Manifest accounts you create in sandbox Connect are accessible in the Manifest app — you just have to switch it to sandbox mode. After being enabled, this mode will persist between app sessions and restarts until disabled. To enable sandbox mode: * On the opening screen (with the "Get Started" button), swipe the carousel to the last screen, labeled "More". * There are 3 images shown on the More screen. The leftmost image shows two faces. Tap it 4 times in a row to toggle sandbox mode. * After toggling sandbox mode, you'll see a notification banner at the top of the screen confirming the switch. * Once enabled, the only visible indication that you're in sandbox mode is on the "Sign In" and "Get Started" screens, where the headline at the top of the screen is followed by "(Sandbox)". *** ## Emails Manifest sends emails to users in the following situations related to the enterprise platform: * Manifest login created * Manifest bank account opened * Connect invite created with `send_email: true` * Payout issued * For `direct` and `wallet` account connections, this email will go to the owner(s) of the Manifest account. * For `ach` account connections, this email will go to the email address you've set on the account connection. The sandbox environment has a safeguard to prevent spam and user confusion. Normal email addresses like `ben@manifestfinancial.com` will not receive an email. If you want to receive emails for a sandbox account connection, include a `+sandbox` suffix, like `ben+sandbox@manifestfinancial.com` or `ben+sandbox2@manifestfinancial.com`. To help avoid confusion, Manifest does not send "Manifest Daily Summary" emails in sandbox. # User Data Source: https://docs.manifestfinancial.com/reference/user-data Most API resources have a field where you can attach arbitrary data. We refer to this arbitrary data as "user data," and you can access it via the `user_data` parameter. User data is useful for storing additional, structured data along side an API object. For example, you may wish to store an ID or key that correlates an API object with a unique ID in your own application or database. User data is not used by Manifest and won't be visible to your users (unless you expose it to them in your own application). You may pass any arbitrary JSON object for userdata. The total size of the object, serialized, must be less than 1KB in size. # Welcome to Manifest Source: https://docs.manifestfinancial.com/welcome Welcome to the documentation for the Manifest Platform. Our platform is designed to help you enhance your creator-focused business with easy-to-use bank accounts, payments, and more. Hero ### Guides Get your API key + connect to Manifest. Send your first payout in our sandbox.