Payout Methods
curl --request GET \
--url https://api.launchmystore.io/apps/developer/payout-method \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "<string>",
"accountHolderName": "<string>",
"bankName": "<string>",
"swiftCode": "<string>",
"country": "<string>",
"accountNumber": "<string>",
"iban": "<string>",
"bankAddress": "<string>",
"paypalEmail": "<string>"
}
'import requests
url = "https://api.launchmystore.io/apps/developer/payout-method"
payload = {
"type": "<string>",
"accountHolderName": "<string>",
"bankName": "<string>",
"swiftCode": "<string>",
"country": "<string>",
"accountNumber": "<string>",
"iban": "<string>",
"bankAddress": "<string>",
"paypalEmail": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.get(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
type: '<string>',
accountHolderName: '<string>',
bankName: '<string>',
swiftCode: '<string>',
country: '<string>',
accountNumber: '<string>',
iban: '<string>',
bankAddress: '<string>',
paypalEmail: '<string>'
})
};
fetch('https://api.launchmystore.io/apps/developer/payout-method', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.launchmystore.io/apps/developer/payout-method",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_POSTFIELDS => json_encode([
'type' => '<string>',
'accountHolderName' => '<string>',
'bankName' => '<string>',
'swiftCode' => '<string>',
'country' => '<string>',
'accountNumber' => '<string>',
'iban' => '<string>',
'bankAddress' => '<string>',
'paypalEmail' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.launchmystore.io/apps/developer/payout-method"
payload := strings.NewReader("{\n \"type\": \"<string>\",\n \"accountHolderName\": \"<string>\",\n \"bankName\": \"<string>\",\n \"swiftCode\": \"<string>\",\n \"country\": \"<string>\",\n \"accountNumber\": \"<string>\",\n \"iban\": \"<string>\",\n \"bankAddress\": \"<string>\",\n \"paypalEmail\": \"<string>\"\n}")
req, _ := http.NewRequest("GET", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.launchmystore.io/apps/developer/payout-method")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"<string>\",\n \"accountHolderName\": \"<string>\",\n \"bankName\": \"<string>\",\n \"swiftCode\": \"<string>\",\n \"country\": \"<string>\",\n \"accountNumber\": \"<string>\",\n \"iban\": \"<string>\",\n \"bankAddress\": \"<string>\",\n \"paypalEmail\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.launchmystore.io/apps/developer/payout-method")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"<string>\",\n \"accountHolderName\": \"<string>\",\n \"bankName\": \"<string>\",\n \"swiftCode\": \"<string>\",\n \"country\": \"<string>\",\n \"accountNumber\": \"<string>\",\n \"iban\": \"<string>\",\n \"bankAddress\": \"<string>\",\n \"paypalEmail\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data.payoutMethodId": "<string>",
"data.type": "<string>",
"data.status": "<string>",
"data.verifiedAt": "<string>",
"data.accountHolderName": "<string>",
"data.bankName": "<string>",
"data.swiftCode": "<string>",
"data.country": "<string>",
"data.bankAddress": "<string>",
"data.last4": "<string>",
"data.paypalEmail": "<string>"
}Developer
Payout Methods
Add, view, and remove the destination where developer earnings are paid out.
GET
/
apps
/
developer
/
payout-method
Payout Methods
curl --request GET \
--url https://api.launchmystore.io/apps/developer/payout-method \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "<string>",
"accountHolderName": "<string>",
"bankName": "<string>",
"swiftCode": "<string>",
"country": "<string>",
"accountNumber": "<string>",
"iban": "<string>",
"bankAddress": "<string>",
"paypalEmail": "<string>"
}
'import requests
url = "https://api.launchmystore.io/apps/developer/payout-method"
payload = {
"type": "<string>",
"accountHolderName": "<string>",
"bankName": "<string>",
"swiftCode": "<string>",
"country": "<string>",
"accountNumber": "<string>",
"iban": "<string>",
"bankAddress": "<string>",
"paypalEmail": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.get(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
type: '<string>',
accountHolderName: '<string>',
bankName: '<string>',
swiftCode: '<string>',
country: '<string>',
accountNumber: '<string>',
iban: '<string>',
bankAddress: '<string>',
paypalEmail: '<string>'
})
};
fetch('https://api.launchmystore.io/apps/developer/payout-method', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.launchmystore.io/apps/developer/payout-method",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_POSTFIELDS => json_encode([
'type' => '<string>',
'accountHolderName' => '<string>',
'bankName' => '<string>',
'swiftCode' => '<string>',
'country' => '<string>',
'accountNumber' => '<string>',
'iban' => '<string>',
'bankAddress' => '<string>',
'paypalEmail' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.launchmystore.io/apps/developer/payout-method"
payload := strings.NewReader("{\n \"type\": \"<string>\",\n \"accountHolderName\": \"<string>\",\n \"bankName\": \"<string>\",\n \"swiftCode\": \"<string>\",\n \"country\": \"<string>\",\n \"accountNumber\": \"<string>\",\n \"iban\": \"<string>\",\n \"bankAddress\": \"<string>\",\n \"paypalEmail\": \"<string>\"\n}")
req, _ := http.NewRequest("GET", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.launchmystore.io/apps/developer/payout-method")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"<string>\",\n \"accountHolderName\": \"<string>\",\n \"bankName\": \"<string>\",\n \"swiftCode\": \"<string>\",\n \"country\": \"<string>\",\n \"accountNumber\": \"<string>\",\n \"iban\": \"<string>\",\n \"bankAddress\": \"<string>\",\n \"paypalEmail\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.launchmystore.io/apps/developer/payout-method")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"<string>\",\n \"accountHolderName\": \"<string>\",\n \"bankName\": \"<string>\",\n \"swiftCode\": \"<string>\",\n \"country\": \"<string>\",\n \"accountNumber\": \"<string>\",\n \"iban\": \"<string>\",\n \"bankAddress\": \"<string>\",\n \"paypalEmail\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data.payoutMethodId": "<string>",
"data.type": "<string>",
"data.status": "<string>",
"data.verifiedAt": "<string>",
"data.accountHolderName": "<string>",
"data.bankName": "<string>",
"data.swiftCode": "<string>",
"data.country": "<string>",
"data.bankAddress": "<string>",
"data.last4": "<string>",
"data.paypalEmail": "<string>"
}A payout method is the destination where a developer’s accrued earnings
are wired by the platform. LaunchMyStore is the merchant of record for all
app charges, so the payout method is just a payment destination — the
developer does not need their own Stripe Connect account or a payment
processor of their own.
Two destination types are supported:
Bank-only fields (
PayPal-only fields (
bank(SWIFT international wire) — account holder name, bank name, SWIFT/BIC, country, account number or IBAN. Account number + IBAN are encrypted at the application layer before storage; only the last 4 digits are kept in cleartext for display.paypal— PayPal email address.
POST again with
the new payload.
Auth: developer JWT. The developerId is read from the token.
Stripe Connect (Express / Standard) onboarding — which would let
developers receive payouts directly to a connected Stripe account on a
faster cadence — is on the roadmap. The current API uses the SWIFT /
PayPal destination model below.
Get current payout method (masked)
GET /apps/developer/payout-method
Returns the saved destination with sensitive fields masked. Returns
{ data: null } when no method is configured.
curl -X GET "https://api.launchmystore.io/apps/developer/payout-method" \
-H "Authorization: Bearer <DEVELOPER_JWT>"
string
UUID of the row.
string
bank or paypal.string
pending, active, restricted, or disabled.string
ISO timestamp when ops verified the destination, or
null.type: bank):
string
string
string
string
ISO 3166-1 alpha-2.
string
string
Last 4 of account number or IBAN. Full number is never returned.
type: paypal):
string
Example response (bank)
{
"status": 200,
"data": {
"payoutMethodId": "8d4f1c10-3b6e-4e76-9b6a-1a17a5be58a0",
"type": "bank",
"status": "active",
"accountHolderName": "Jane Doe",
"bankName": "HDFC Bank",
"swiftCode": "HDFCINBB",
"country": "IN",
"bankAddress": "Sector 16, Gurugram, 122001",
"last4": "4729",
"paypalEmail": null,
"verifiedAt": "2026-04-15T03:12:47.881Z"
}
}
Example response (paypal)
{
"status": 200,
"data": {
"payoutMethodId": "0c8d2a1d-…",
"type": "paypal",
"status": "active",
"paypalEmail": "jane@example.com",
"verifiedAt": "2026-03-02T14:21:09.012Z"
}
}
No method configured
{ "status": 200, "data": null }
Save a payout method
POST /apps/developer/payout-method
Saves or overwrites the destination. The request fields depend on type:
Bank (SWIFT)
string
required
Must be
bank.string
required
Name on the account.
string
required
Receiving bank.
string
required
8 or 11 character SWIFT/BIC.
string
required
ISO 3166-1 alpha-2 country code.
string
Account number. Required when
iban is not supplied. Encrypted before storage; only last4 is recoverable.string
IBAN. Required when
accountNumber is not supplied. Encrypted before storage.string
Free-form bank address (recommended for international wires).
curl -X POST "https://api.launchmystore.io/apps/developer/payout-method" \
-H "Authorization: Bearer <DEVELOPER_JWT>" \
-H "Content-Type: application/json" \
-d '{
"type": "bank",
"accountHolderName": "Jane Doe",
"bankName": "HDFC Bank",
"swiftCode": "HDFCINBB",
"country": "IN",
"accountNumber": "50100123454729",
"bankAddress": "Sector 16, Gurugram, 122001"
}'
PayPal
string
required
Must be
paypal.string
required
The PayPal account email.
curl -X POST "https://api.launchmystore.io/apps/developer/payout-method" \
-H "Authorization: Bearer <DEVELOPER_JWT>" \
-H "Content-Type: application/json" \
-d '{ "type": "paypal", "paypalEmail": "jane@example.com" }'
Response
Returns the saved row in the same masked shape asGET. The row starts in
status: pending and transitions to active after platform ops verifies
the destination (typically within one business day).
{
"status": 201,
"data": {
"payoutMethodId": "8d4f1c10-…",
"type": "bank",
"status": "pending",
"accountHolderName": "Jane Doe",
"bankName": "HDFC Bank",
"swiftCode": "HDFCINBB",
"country": "IN",
"last4": "4729",
"verifiedAt": null
}
}
Remove the current method
DELETE /apps/developer/payout-method
Removes the saved destination. The developer’s balance is not affected
— it just sits on the ledger until a new method is added. Scheduled
payouts pause while no method is configured.
curl -X DELETE "https://api.launchmystore.io/apps/developer/payout-method" \
-H "Authorization: Bearer <DEVELOPER_JWT>"
{ "status": 200, "state": "success", "message": "Payout method removed" }
Default / multiple methods
The current implementation enforces one payout method per developer. There is nosetDefault operation because there is no “list” — saving a
new method overwrites the existing one.
Multi-destination support (split payouts between bank + PayPal, or one
destination per app) is on the roadmap.
Encryption
accountNumber and iban are encrypted (AES-256-GCM) before being
stored and are never returned in API responses. Only last4 is
exposed for display.
Error codes
| Code | Description |
|---|---|
400 | type not bank or paypal. |
400 | type: bank with neither accountNumber nor iban. |
400 | swiftCode not 8 or 11 chars / country not ISO alpha-2 / paypalEmail not a valid email. |
401 | Missing or invalid developer JWT. |
404 | DELETE called with no method on file. |