{"metadata":{"image":[],"title":"","description":""},"api":{"url":"","auth":"required","results":{"codes":[]},"settings":"","params":[],"apiSetting":null},"next":{"description":"","pages":[]},"title":"Building a Venmo Style Application","type":"basic","slug":"building-a-venmo-style-application","excerpt":"You customers depositing & withdrawing from your platform using Wyre","body":"**For Non-Custodial Wallets / Decentralized-Exchanges / Fintechs**\n\nIf you are a non-custodial crypto app, decentralized exchange or traditional fintech, your users can on-ramp and off-ramp any supported combination of fiat and crypto using Wyre. \n\nBy \"non-custodial\" we mean you don't touch users private keys. Examples such as [MEW](https://www.myetherwallet.com/), [MetaMask](https://metamask.io/), [BRD](https://www.brd.com), or a non-custodial exchange.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"1. Onboard your company in the Wyre [test dashboard](https://dash.testwyre.com).\\n2. Get your Account ID and API Keys from the dash.\\n3. [Create Accounts](doc:create-account) for your users to hold fiat and crypto.\\n4. [Connect a Bank](doc:create-ach-payment-method) to receive fiat payouts.\\n5. [Use Transfers](doc:create-transfer) to send fiat and crypto between users and process payouts to a connected bank.  \\n6. (Optional) Integrate [Checkout - Hosted Dialog](doc:wyre-checkout-hosted-dialog) in order to fund a crypto wallet on the account.\\n7. (Optional)[ACH Funds In](doc:create-transfer) to transfer fiat into the account via the connected bank.\",\n  \"title\": \"The Flow at a High-Level:\"\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"Steps 1-2 - Business Account Setup\"\n}\n[/block]\nYou will need to register your business with Wyre to access our API using your API Keys. \n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Business Account Setup Notes:\",\n  \"body\": \"* Test [dashboard](http://dash.testwyre.com/) access.\\n* Production [dashboard](http://dash.sendwyre.com/) access.\\n* Select the proper [environment](docs:productiontest-environments).\\n* [Authenticate and sign requests](doc:authentication).\\n* Contact sales:::at:::sendwyre.com for production access.\"\n}\n[/block]\n\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/56802d0-dashboard.png\",\n        \"dashboard.png\",\n        800,\n        424,\n        \"#333\"\n      ]\n    }\n  ]\n}\n[/block]\n**Account Actions**\n[block:api-header]\n{\n  \"title\": \"Step 3 - Creating Accounts\"\n}\n[/block]\nOnce a new user registers on your platform, create an [account](doc:create-account) for that user. This user is under your control, and stored on Wyre. *To the end user, they only ever see your brands look/feel. Not Wyre.*\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Creating Accounts:\",\n  \"body\": \"* Create users as [subaccounts](doc:create-account) by setting the subaccount parameter to true.\\n* Use [masquerading](https://docs.sendwyre.com/docs/authentication#masquerading) to move funds on behalf of your subaccounts.\\n* Each account will automatically be assigned a unique BTC & ETH address. The ETH address also supports Wyre's integrated ERC20 tokens: [Supported Currencies](doc:supported-currencies-1).\\n* Each account will also support holding a balance in multiple fiat currencies: [Supported Currencies](doc:supported-currencies-1).\\n* It may be necessary to upload additional documents to create an account, such as a driver's license or passport photo. Use the [Upload Document](doc:upload-document) endpoint to handle these scenarios.\\n* Save the returned \\\"id\\\" that gets generated in the response as this will be used later to create money transfers.\"\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"Step 4 - Connecting a Bank\"\n}\n[/block]\nOnce a new user has a new account, attach a [bank account](doc:create-ach-payment-method) to send fiat payouts and load currency via ACH.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Connecting a Bank:\",\n  \"body\": \"* Connect a user's bank account using our [Plaid module](doc:create-ach-payment-method) and pass the returned public key to the [ACH - Create Payment Method](doc:local_transfer-ach-create-payment-method) endpoint.\\n* In some cases a user may be asked to [upload](doc:upload-document) additional information such as an ACH Authorization form or further identification. Review the [Payment Method Edge Cases](doc:payment-method-edge-cases) to learn more.\\n* Save the returned \\\"id\\\" that gets generated in the response as this will be used later to create money transfers.\"\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"Step 5 - Creating Transfers\"\n}\n[/block]\nOnce a new user has an account and an attached bank (payment method), they can start transferring funds if the account has a balance.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Creating Transfers:\",\n  \"body\": \"* Transfers use the [Create Transfer](doc:create-transfer) endpoint. Transfers can happen between accounts, wallets, payment methods and crypto addresses. \\n* Transfers utilize our [SRNs](doc:srns). This is important because the SRNs are concatenated to the referenced IDs in the transfer. For example transfers between accounts have SRNs that look like this:\\n\\n **\\\"source\\\":\\\"account:AC_XXXXXXXX2\\\",**\\n **\\\"dest\\\":\\\"account:AC_XXXXXXXX3\\\",** \\n\\n* Accounts can transfer from their balance or from an [ACH](docs:local_transfer-ach-create-payment-method#using-the-local_transfer-payment-method-as-a-trans) pull to another account. Transfers via ACH require the :ach SRN postfix, like this:\\n\\n**\\\"source\\\":\\\"paymentmethod:PA-W7YN28ABCHT:ach\\\",**\\n\\n* Save the returned \\\"id\\\" that gets generated in the response as this will be used later to track transfers.\"\n}\n[/block]\n**On-Ramp Solutions**\n[block:api-header]\n{\n  \"title\": \"Step 6 - (Optional) Integrate Checkout - Hosted Dialog\"\n}\n[/block]\nOnce a new user has an account and an attached bank (payment method), they can fund their account with crypto using the [Checkout - Hosted Dialog](doc:wyre-checkout-hosted-dialog) or the [Card Processing API](doc:white-label-card-processing-api). \n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Integrate Checkout - Hosted Dialog:\",\n  \"body\": \"* Both the Checkout Widget and Card Processing require the creation of [Wallet Order Reservations](doc:wallet-order-reservations). Your account must be approved in order to activate Wallet Order Reservations.\"\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"Step 7 - (Optional) ACH Funds In and ACH Transfer\"\n}\n[/block]\nOnce a new user has an account and an attached bank (payment method), they can fund their account with USD via ACH transfer. \n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"ACH Funds In and ACH Transfer:\",\n  \"body\": \"* The user can create a [Transfer](doc:create-transfer) to pull funds into their Wyre account from a connected payment method.\\n* An ACH funding transfer requires the :ach SRN postfix, like this:\\n\\n**\\\"source\\\":\\\"paymentmethod:PA-W7YN28ABCHT:ach\\\",**\"\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"Off-Ramp Solutions\"\n}\n[/block]\nStep 5 above describes the [Create Transfer](doc:create-transfer) endpoint. This can be used to transfer funds out of an account. Both crypto and fiat can be off-ramped as determined by the \"dest\", \"sourceCurrency\", and \"destCurrency\" parameters .\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Off-Ramp Notes\",\n  \"body\": \"* The user can create a [Transfer](doc:create-transfer) to push funds from their account to their connected payment method. This transfer could be fiat -> fiat or crypto -> fiat.\\n\\n **\\\"source\\\":\\\"account:AC_XXXXXXXX2\\\",**\\n **\\\"dest\\\":\\\"paymentmethod:PA-W7YN28ABCHT\\\",**\"\n}\n[/block]","updates":[],"order":0,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"_id":"5be5d1a7d33a4602152fbbd0","project":"550f74bb6fc8130d0038aad3","version":{"version":"3","version_clean":"3.0.0","codename":"","is_stable":true,"is_beta":true,"is_hidden":false,"is_deprecated":false,"categories":["550f75de61d9d30d00af9e02","551027e38579861900a86698","551029e08579861900a8669a","551029e7498062190006328a","5bc633a722d682005c9ad9e4","5bc633b08c4b0b000d6a7eaa","5bc633b48f3ff600626e3e18","5bc63538e5a6ba000d22ee6d","5bc63587a18a6b000decd295","5bc635c0937fcb0056223d9c","5bc6360f42f41800319aeaa6","5be5d13ff1d319002baca9ce","5be5d2287cd14d00291fbfdb","5be8b3b09f7cb70023c56a39","5be8b3cbb910100044e20206","5c1d769a4f6aed001fe527f0","5c402942010f0d001496dded","5e8127d61c906800374eeb1c","5f2768c98622b8005106544a","5f2768d05702ca0011f7655e","5f276e5348d2b600321aef9b","5f276fd300e519001139200a","5f9a2cb79dafe500259281a7"],"_id":"550f75de61d9d30d00af9e01","__v":23,"releaseDate":"2015-03-23T02:09:34.221Z","project":"550f74bb6fc8130d0038aad3","createdAt":"2015-03-23T02:09:34.221Z","forked_from":"550f74bb6fc8130d0038aad6"},"category":{"sync":{"isSync":false,"url":""},"pages":[],"title":"Cookbooks","slug":"testing","order":1,"from_sync":false,"reference":false,"_id":"5be8b3cbb910100044e20206","project":"550f74bb6fc8130d0038aad3","version":"550f75de61d9d30d00af9e01","createdAt":"2018-11-11T22:57:15.159Z","__v":0},"user":"54eb883f4f94620d00789aaa","createdAt":"2018-11-09T18:27:51.827Z","__v":0,"parentDoc":null}

Building a Venmo Style Application

You customers depositing & withdrawing from your platform using Wyre

**For Non-Custodial Wallets / Decentralized-Exchanges / Fintechs** If you are a non-custodial crypto app, decentralized exchange or traditional fintech, your users can on-ramp and off-ramp any supported combination of fiat and crypto using Wyre. By "non-custodial" we mean you don't touch users private keys. Examples such as [MEW](https://www.myetherwallet.com/), [MetaMask](https://metamask.io/), [BRD](https://www.brd.com), or a non-custodial exchange. [block:callout] { "type": "info", "body": "1. Onboard your company in the Wyre [test dashboard](https://dash.testwyre.com).\n2. Get your Account ID and API Keys from the dash.\n3. [Create Accounts](doc:create-account) for your users to hold fiat and crypto.\n4. [Connect a Bank](doc:create-ach-payment-method) to receive fiat payouts.\n5. [Use Transfers](doc:create-transfer) to send fiat and crypto between users and process payouts to a connected bank. \n6. (Optional) Integrate [Checkout - Hosted Dialog](doc:wyre-checkout-hosted-dialog) in order to fund a crypto wallet on the account.\n7. (Optional)[ACH Funds In](doc:create-transfer) to transfer fiat into the account via the connected bank.", "title": "The Flow at a High-Level:" } [/block] [block:api-header] { "title": "Steps 1-2 - Business Account Setup" } [/block] You will need to register your business with Wyre to access our API using your API Keys. [block:callout] { "type": "info", "title": "Business Account Setup Notes:", "body": "* Test [dashboard](http://dash.testwyre.com/) access.\n* Production [dashboard](http://dash.sendwyre.com/) access.\n* Select the proper [environment](docs:productiontest-environments).\n* [Authenticate and sign requests](doc:authentication).\n* Contact [email protected] for production access." } [/block] [block:image] { "images": [ { "image": [ "https://files.readme.io/56802d0-dashboard.png", "dashboard.png", 800, 424, "#333" ] } ] } [/block] **Account Actions** [block:api-header] { "title": "Step 3 - Creating Accounts" } [/block] Once a new user registers on your platform, create an [account](doc:create-account) for that user. This user is under your control, and stored on Wyre. *To the end user, they only ever see your brands look/feel. Not Wyre.* [block:callout] { "type": "info", "title": "Creating Accounts:", "body": "* Create users as [subaccounts](doc:create-account) by setting the subaccount parameter to true.\n* Use [masquerading](https://docs.sendwyre.com/docs/authentication#masquerading) to move funds on behalf of your subaccounts.\n* Each account will automatically be assigned a unique BTC & ETH address. The ETH address also supports Wyre's integrated ERC20 tokens: [Supported Currencies](doc:supported-currencies-1).\n* Each account will also support holding a balance in multiple fiat currencies: [Supported Currencies](doc:supported-currencies-1).\n* It may be necessary to upload additional documents to create an account, such as a driver's license or passport photo. Use the [Upload Document](doc:upload-document) endpoint to handle these scenarios.\n* Save the returned \"id\" that gets generated in the response as this will be used later to create money transfers." } [/block] [block:api-header] { "title": "Step 4 - Connecting a Bank" } [/block] Once a new user has a new account, attach a [bank account](doc:create-ach-payment-method) to send fiat payouts and load currency via ACH. [block:callout] { "type": "info", "title": "Connecting a Bank:", "body": "* Connect a user's bank account using our [Plaid module](doc:create-ach-payment-method) and pass the returned public key to the [ACH - Create Payment Method](doc:local_transfer-ach-create-payment-method) endpoint.\n* In some cases a user may be asked to [upload](doc:upload-document) additional information such as an ACH Authorization form or further identification. Review the [Payment Method Edge Cases](doc:payment-method-edge-cases) to learn more.\n* Save the returned \"id\" that gets generated in the response as this will be used later to create money transfers." } [/block] [block:api-header] { "title": "Step 5 - Creating Transfers" } [/block] Once a new user has an account and an attached bank (payment method), they can start transferring funds if the account has a balance. [block:callout] { "type": "info", "title": "Creating Transfers:", "body": "* Transfers use the [Create Transfer](doc:create-transfer) endpoint. Transfers can happen between accounts, wallets, payment methods and crypto addresses. \n* Transfers utilize our [SRNs](doc:srns). This is important because the SRNs are concatenated to the referenced IDs in the transfer. For example transfers between accounts have SRNs that look like this:\n\n **\"source\":\"account:AC_XXXXXXXX2\",**\n **\"dest\":\"account:AC_XXXXXXXX3\",** \n\n* Accounts can transfer from their balance or from an [ACH](docs:local_transfer-ach-create-payment-method#using-the-local_transfer-payment-method-as-a-trans) pull to another account. Transfers via ACH require the :ach SRN postfix, like this:\n\n**\"source\":\"paymentmethod:PA-W7YN28ABCHT:ach\",**\n\n* Save the returned \"id\" that gets generated in the response as this will be used later to track transfers." } [/block] **On-Ramp Solutions** [block:api-header] { "title": "Step 6 - (Optional) Integrate Checkout - Hosted Dialog" } [/block] Once a new user has an account and an attached bank (payment method), they can fund their account with crypto using the [Checkout - Hosted Dialog](doc:wyre-checkout-hosted-dialog) or the [Card Processing API](doc:white-label-card-processing-api). [block:callout] { "type": "info", "title": "Integrate Checkout - Hosted Dialog:", "body": "* Both the Checkout Widget and Card Processing require the creation of [Wallet Order Reservations](doc:wallet-order-reservations). Your account must be approved in order to activate Wallet Order Reservations." } [/block] [block:api-header] { "title": "Step 7 - (Optional) ACH Funds In and ACH Transfer" } [/block] Once a new user has an account and an attached bank (payment method), they can fund their account with USD via ACH transfer. [block:callout] { "type": "info", "title": "ACH Funds In and ACH Transfer:", "body": "* The user can create a [Transfer](doc:create-transfer) to pull funds into their Wyre account from a connected payment method.\n* An ACH funding transfer requires the :ach SRN postfix, like this:\n\n**\"source\":\"paymentmethod:PA-W7YN28ABCHT:ach\",**" } [/block] [block:api-header] { "title": "Off-Ramp Solutions" } [/block] Step 5 above describes the [Create Transfer](doc:create-transfer) endpoint. This can be used to transfer funds out of an account. Both crypto and fiat can be off-ramped as determined by the "dest", "sourceCurrency", and "destCurrency" parameters . [block:callout] { "type": "info", "title": "Off-Ramp Notes", "body": "* The user can create a [Transfer](doc:create-transfer) to push funds from their account to their connected payment method. This transfer could be fiat -> fiat or crypto -> fiat.\n\n **\"source\":\"account:AC_XXXXXXXX2\",**\n **\"dest\":\"paymentmethod:PA-W7YN28ABCHT\",**" } [/block]