Savings Wallets

API partners

For Wyre’s existing API partners, savings wallets offer an additional revenue stream and an alternative onboarding tool.

Onboarding:​ As savings wallets are custodial, we are able to offer fee-less onboarding for small ticket transactions (no gas fees, no transaction fees)

Yield:​ Partners can choose how to divide yield between themselves and their users which makes this service a potentially powerful tool for monetization. Aside from customer funds, we can also ingest and pay yield on corporate funds.

OTC partners

Funds, foundations, and family offices can treat Wyre’s Savings as a high-yield money market account. Eligible OTC partners can bank transfer to Wyre and have their USD balances earn an 8% APY on USD holdings, paid out monthly or compounded during term.

OTC services for trading USD to BTC are also available, where cryptocurrency earns a yield asdenominated in the originating currency type (BTC-denominated interest).

General Fintech Partners

The rate of yield creates an exciting new avenue for emerging fintech players to monetize their existing product lines. Using Wyre Savings on the backend, fintechs can explore novel business models & monetize user relationships.

Interest Payouts

Calculation and Payout Schedule

  • Interest calculations: Every day at 11 p.m. UTC
  • Interest payouts: Once a month on the 1st day of the month at 12 a.m. UTC

Payout Notifications

We provide a series of HTTP callbacks that allow you to notify users when funds have been deposited and when they become available. When creating a wallet, you can set a callbackUrl. The following information describes the structure of the callbacks received.

When callbacks are sent

Callbacks are sent whenever a transactional event occurs that will affect the wallet's balance. Examples include:

  • Incoming pending transaction
  • Pending transaction confirmed

Callback Acceptance and Retries

Your system should respond to the callback request with a 200 response. We only attempt to send the request once, but we may introduce automatic retries in the future. We can manually resend callbacks upon request.

Payload

The callback payload will be a JSON representation of the transaction that has caused the callback to trigger. An example of such a transaction can be found below:

// Interest payouts require resolving the transfer id.
// GET https://api.testwyre.com/v3/transfers/TF_HTQEQ327NYE
{
  "createdAt": 1617235219704,
  "id": "TR_AE79Q7L6QAT",
  "source": "transfer:TF_HTQEQ327NYE",
  "dest": "wallet:WA_8TJFJ3EQEN9",
  "currency": "BTC",
  "amount": 0.0000106,
  "status": "CONFIRMED",
  "confirmedAt": 1617235219704,
  "cancelledAt": null,
  "reversedAt": null,
  "message": "Deposit for transfer TF_HTQEQ327NYE",
  "allowOverdraft": true,
  "authorizer": "service:Nobody",
  "senderProvidedId": null,
  "reversedBy": null,
  "fees": 0,
  "feesDest": null,
  "metadata": {
    "transferId": "TF_HTQEQ327NYE"
  },
  "tags": [],
  "sourceFees": null,
  "destFees": null
}

Security Signature

In order to prevent callback spoofing, we provide a signature with the callback passed back through the HTTP header X-API-Signature.

i.e. x-api-signature:
56a00765528a6a6fab70c9272485131f157a423f78a5ab06d2c8627f867f6aea

This signature is a SHA256 HMAC signature of the JSON body signed with the merchant's secret key. To the right you can find example implementations of the signature.

Note: It's important to verify the signature in the callback, otherwise it is possible for the request to be spoofed by an external attacker.

Interest Payout Transfer Details

Certain types of transfers will display the "source" as a transfer SRN. This requires that you query the transfer id to get the details of the transfer. This is the case for savings wallets and subsequent interest payouts.

You can determine if a callback is the result of an interest payout by querying the transfer id in the "source," for example:

If a callback presents with a source like this: "source": "transfer:TF_HTQEQ327NYE," you can query the transfer id with GET https://api.testwyre.com/v3/transfers/TF_HTQEQ327NYE. The result will look like the sample below. Notice the source of the transfer, "source": "service:Interest Payments."

{
    "owner": "service:Nobody",
    "status": "COMPLETED",
    "source": "service:Interest Payments",
    "createdAt": 1617235217000,
    "sourceAmount": 0.0000106,
    "destCurrency": "BTC",
    "sourceCurrency": "BTC",
    "totalFees": 0,
    "customId": null,
    "completedAt": 1617235220000,
    "cancelledAt": null,
    "failureReason": null,
    "expiresAt": 1617494417000,
    "updatedAt": 1617235220000,
    "fees": {
        "BTC": 0E-8
    },
    "destAmount": 0.0000106,
    "exchangeRate": null,
    "statusHistories": [
        {
            "id": "BBGZBGDVWUR",
            "transferId": "TF_HTQEQ327NYE",
            "createdAt": 1617235220000,
            "type": "ADMIN_CREDIT",
            "statusOrder": 0,
            "statusDetail": "Initiating Transfer",
            "state": "INITIATED",
            "failedState": null
        },
        {
            "id": "GUMTCX4QUEH",
            "transferId": "TF_HTQEQ327NYE",
            "createdAt": 1617235220000,
            "type": "ADMIN_CREDIT",
            "statusOrder": 5100,
            "statusDetail": "Transfer Completed",
            "state": "COMPLETED",
            "failedState": null
        }
    ],
    "estimatedArrival": 1617847722127,
    "dest": "wallet:WA_8TJFJ3EQEN9",
    "pendingSubStatus": null,
    "blockchainTx": null,
    "reversalReason": null,
    "reversingSubStatus": null,
    "message": null,
    "id": "TF_HTQEQ327NYE"
}

Interacting with Savings Wallets

Below is a quick high-level overview of how platforms are able to interact with savings accounts.

1. Create Wyre Account

Create an account on Wyre and message [email protected] that you'd like the savings feature activated for your account. You will need to sign a short agreement prior to starting.

2. Creating Crypto Savings Account

Create a sub-wallet within your account and give it the "savings" label. This will be your dedicated savings account. Within this wallet, you'll have dedicated USDC, BTC, DAI, and ETH addresses.

📘

Note

You're able to send any supported ERC-20 currency to your wallet ( USDC, DAI, ETH, etc.) and all of their associated rates are listed within the savingRatePercentages.

3. Transferring Balances in and out of Account

Throughout the month, you will send money in and out of your dedicated savings sub-wallet. Funds need to be in the wallet for over 24 hours to start accruing interest. You'll need to use the Transfer API to accomplish this (for balances located within your Wyre Account) OR simply send money to the deposit addresses located within your savings account.

📘

How do I move money around?

Visit Transfers to learn about how you can move money around with Wyre.

4. Receiving Interest and Reviewing Account Balance

You're able to review your "pendingInterestBalances" (the interest balance that has accumulated since the last interest payment). Interest payments will be paid out monthly in the deposited source cryptocurrency.

To review balances, you'll need to use 1 field:

  • walletId - The identifier for the wallet