Making payouts
Overview
The Strike API can be used to receive bitcoin payments as US dollars and have those dollars paid-out directly to US bank accounts. This walkthrough shows you how to set up and execute dollar payouts from your Strike account to any US bank account belonging to a person or organization. Currently, payout endpoints are only accessible for select Strike business accounts. Please reach out to partners@strike.me for more information.
How making a payout works
Making a payout to a US bank account involves specifying the beneficiary’s information, the sender’s information, and the amount to be sent. To begin the process, a bank payment-method must be created, which contains the beneficiary’s necessary account information.
Second, a sender must be determined for the payout. For payouts in which the funds are originating from a third-party, a payout-originator object must be created, detailing that third-party’s information. If the origin of the funds is the owner of the Strike account that's initiating the payout, then the payout-originator object may be omitted, and the Strike account owner's information will be used as the origin of the payout.
Third, a payout object must be created, specifying the desired beneficiary’s payment method, the payout-originator (if applicable), and the dollar amount to be sent. Once the payout object has been successfully created, it can be initiated, causing the payout from your available Strike balance to be sent.
Integration walkthrough
1. Create a bank payment-method
A bank payment-method stores the beneficiary’s banking and personal information necessary for making the payout. A bank payment-method can be created using the create bank payment-method endpoint.
The banking information includes the account number, routing number, account type, transfer type, bank name, and bank address. The beneficiary’s personal information includes their name, address, and type, which can be set either to INDIVIDUAL
or COMPANY
, depending if the account holder is a person or organization. You may also include more than one beneficiary, if the bank account is held by joint bank account holders.
Below is an example request to create a new bank payment-method for an INDIVIDUAL
beneficiary:
curl -L -X POST
'https://<ENVIRONMENT>/v1/payment-methods/bank' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <API_KEY> \
--data-raw '{
"transferType": "ACH",
"accountNumber": "1234567890",
"routingNumber": "123456789",
"accountType": "CHECKING",
"bankName": "Chase Bank",
"bankAddress": {
"country": "US",
"state": "TX",
"city": "Austin",
"postCode": "73301",
"line1": "123 Main St"
},
"beneficiaries": [
{
"dateOfBirth": "1980-03-02",
"type": "INDIVIDUAL",
"name": "John Smith",
"address": {
"country": "US",
"state": "TX",
"city": "Austin",
"postCode": "73301",
"line1": "123 Main St"
}
},
{
"email": "AliceSmith@example.com",
"phoneNumber": "+15551234567",
"url": "https://example.com",
"type": "INDIVIDUAL",
"name": "Alice Smith",
"address": {
"country": "US",
"state": "TX",
"city": "Austin",
"postCode": "73301",
"line1": "123 Main St"
}
}
]
}'
In the above example, two joint beneficiaries are specified for an ACH transfer to a Texas-based checking account. The optional details of their date of birth, email, phone number, and URL are also included, which can help expedite the set-up process. To use this example yourself, simply replace the placeholder values with your own values. The <ENVIRONMENT>
should be replaced with api.strike.me
, and the <API_KEY>
should be replaced with your actual API key.
Below is an example request to create a new bank payment-method a beneficiary that is an organization:
curl -L -X POST 'https://<ENVIRONMENT>/v1/payment-methods/bank' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <API_KEY> \
--data-raw '{
"transferType": "US_DOMESTIC_WIRE",
"accountNumber": "1234567890",
"routingNumber": "123456789",
"accountType": "CHECKING",
"bankName": "Chase Bank",
"bankAddress": {
"country": "US",
"state": "TX",
"city": "Austin",
"postCode": "73301",
"line1": "123 Main St"
},
"beneficiaries": [
{
"type": "COMPANY",
"name": "Payments X",
"address": {
"country": "US",
"state": "TX",
"city": "Austin",
"postCode": "73301",
"line1": "123 Main St"
}
},
"email": "finance@pyamentsx.com",
"phoneNumber": "+15551234567",
"url": "https://paymentsXexample.com"
}
]
}'
In the above example, the bank account beneficiary is a Texas-based company called “Payments X”, and the transferType
is set to US_DOMESTIC_WIRE
to a CHECKING
account.
Please note that each payment-method can have only one transferType
. If you wish to make a payout to the same payment-method using a different transferType
, you will need to set up a second payment-method with the different transferType
.
Below is an example response to the bank payment-method creation request for an individual:
{
"id": "c8c48059-7263-44d6-836e-16ef9a90f629",
"state": "READY",
"created": "2023-04-07T00:26:44.2895946+00:00",
"transferType": "ACH",
"accountNumber": "1234567890",
"routingNumber": "123456789",
"accountType": "CHECKING",
"bankName": "Chase Bank",
"bankAddress": {
"country": "US",
"state": "TX",
"city": "Austin",
"postCode": "73301",
"line1": "123 Main St"
},
"currency": "USD",
"beneficiaries": [
{
"dateOfBirth": "1988-03-02T00:00:00+00:00",
"type": "INDIVIDUAL",
"name": "John Smith",
"address": {
"country": "US",
"state": "TX",
"city": "Austin",
"postCode": "73301",
"line1": "123 Main St"
}
},
{
"type": "INDIVIDUAL",
"name": "Alice Smith",
"address": {
"country": "US",
"state": "TX",
"city": "Austin",
"postCode": "73301",
"line1": "123 Main St"
}
}
]
}
In this response, the id
is the bank payment-method’s ID, which will be needed later on to initiate the payout. Bank payment-methods that have been successfully created will have their state
set to READY
. A PENDING
state may require some additional time to finish processing.
If your payment-method is stuck in a non-READY state, or if you experience any issues, please contact api@strike.me.
To retrieve a list of all the bank payment-methods that are linked to your Strike account, use the get bank payment-methods endpoint. You can also retrieve specific payment-methods by inputting the ID parameter when using the get bank payment-methods by id endpoint.
You can also be notified of a payment-method state change by subscribing to the payment-method.bank.updated
webhook event. When one of your subscribed events occurs, a POST
request will be automatically made to the webhook URI of the subscription. For details on how to subscribe to events visit the webhooks section.
2. Create a payout-originator
A payout-originator is an object that contains the necessary information on the sender of the payout (the origin of the funds). If the funds originated from a third-party, then a payout-originator object must be created, detailing the necessary information of that third-party. If the origin of the funds is yourself (the owner of the Strike account that's initiating the payout), then the payout-originator object may be omitted, causing your Strike account's information to be used as the origin of the payout.
To create a payment-originator, use the create payout-originator endpoint, and specify the sender’s name and address. The sender’s type can be set either to INDIVIDUAL
or COMPANY
, depending if the sender is a person or organization.
Below is an example request to create a new bank payout-originator, where the sender is an individual:
curl -L -X POST 'https://<ENVIRONMENT>/v1/payout-originators' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <API_KEY> \
--data-raw '{
"type": "INDIVIDUAL",
"name": "John Doe",
"address": {
"country": "US",
"state": "TX",
"city": "Austin",
"postCode": "73301",
"line1": "123 Main St"
},
"dateOfBirth": "1980-04-07"
}'
Below is an example request to create a new payout-originator where the sender is a organization:
curl -L -X POST 'https://<ENVIRONMENT>/v1/payout-originators' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <API_KEY> \
--data-raw '{
"type": "COMPANY",
"name": "Payment X company",
"address": {
"country": "US",
"state": "TX",
"city": "Austin",
"postCode": "73301",
"line1": "123 Main St"
},
"email": "finance@pyamentsx.com",
"phoneNumber": "+15551234567",
"url": "https://example.com"
}'
Below is the response to the payout-originator creation request where the sender is an individual:
{
"id": "e9e2b5b1-7f2a-4dfb-846d-c2f40c98d381",
"state": "APPROVED",
"created": "2023-04-07T00:44:56.0414967+00:00",
"details": {
"dateOfBirth": "1980-04-07T00:00:00+00:00",
"type": "INDIVIDUAL",
"name": "John Doe",
"address": {
"country": "US",
"state": "TX",
"city": "Austin",
"postCode": "73301",
"line1": "123 Main St"
}
}
}
In this response, the id
is the payout-originator ID, which will be needed later on to initiate the payout.
To retrieve a list of all the payout-originators that are linked to your Strike account, simply use the get payout-originators endpoint. You can also retrieve specific payout-originators by inputting the ID parameter when using the get payout-originator by id endpoint.
A payout-originator can only be used if it is in the APPROVED
state. A PENDING_REVIEW
state may require some additional time to finish processing. If you are unsure why a payout-originator is in one of the other states, please contact api@strike.me.
You can be notified of a state change by subscribing to the payout-originator.updated
webhook event. When one of your subscribed events occurs, a POST
request will be automatically made to the webhook URI of the subscription. For details on how to subscribe to events visit the webhooks section.
3. Create a payout object
To initiate the payout, you must create a payout object using the create a payout endpoint. The payout object contains the payment-method ID and payout-originator ID that were set in steps 1 and 2, as well as the dollar amount to be sent. If the payout is originating from yourself, then the payout-originator ID can be omitted, as described in step 2.
When setting the amount for the payout object, ensure that the available balance in your Strike account is greater than the amount of the payout. If you are unsure of your current available balance, use the get account balance endpoint to check.
Below is an example request to create a new payout object:
curl -L -X POST 'https://<ENVIRONMENT>/v1/payouts' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <API_KEY> \
--data-raw '{
"paymentMethodId": "c8c48059-7263-44d6-836e-16ef9a90f629",
"originatorId": "e9e2b5b1-7f2a-4dfb-846d-c2f40c98d381",
"amount": "100.00"
}'
Below is the response to the payout creation request:
{
"id": "252652f5-7f3b-4fac-8149-b3c539e608b9",
"state": "NEW",
"paymentMethodId": "c8c48059-7263-44d6-836e-16ef9a90f629",
"originatorId": "e9e2b5b1-7f2a-4dfb-846d-c2f40c98d381",
"amount": {
"amount": "100.00",
"currency": "USD"
}
}
In this response, the id
is the payout object ID, and the amount has been set to $100.00 USD. The state of this object is set to NEW
, indicating that the payout is ready to be initiated. If the payout state is not set to NEW
, there may be something wrong with the payment-method or payout-originator objects.
To retrieve a list of all the payout objects that are linked to your Strike account, use the get payouts endpoint. You can also retrieve specific payout objects by inputting the ID parameter when using the get payouts by id endpoint.
4. Initiate the payout
The final step is to initiate the payout by using the initiate a payout endpoint. This endpoint takes the payout object ID that was created in the previous step and requests that it be initiated.
Below is an example request to initiate a payout:
curl -L -X PATCH 'https://<ENVIRONMENT>/v1/payouts/<PayoutId>/initiate' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <API_KEY>
Below is the response to the payout initiation request:
{
"id": "252652f5-7f3b-4fac-8149-b3c539e608b9",
"state": "INITIATED",
"paymentMethodId": "c8c48059-7263-44d6-836e-16ef9a90f629",
"originatorId": "e9e2b5b1-7f2a-4dfb-846d-c2f40c98d381",
"amount": {
"amount": "100.00",
"currency": "USD"
}
}
In this response, the state of the payout object has transitioned to INITIATED
, indicating a successful payout initiation from your available balance.
Once the payout has been successfully delivered, the payout object’s state will transition to COMPLETED
. Note that there may be a delay between when the payout’s state transitions to COMPLETED
and when the beneficiary’s bank shows the funds as received.
Please note, final settlement of funds may take 1-5 business days, depending on the transfer type and receiving bank. If after two business days for a wire transfer and five business days for an ACH transfer, the payout’s state has not yet transitioned to COMPLETED
, please reach out to api@strike.me.
You can be notified of the payout object’s state changes by subscribing to the payout.updated
webhook event. When a state change occurs, a POST request will be automatically made to the webhook URI of the subscription. For details on how to subscribe to events visit the webhooks section.