Skip to main content
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>"
}
'
{
  "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>"
}

Documentation Index

Fetch the complete documentation index at: https://docs.launchmystore.io/llms.txt

Use this file to discover all available pages before exploring further.

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 (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.
Each developer can have one active payout method at a time. Adding a second overwrites the first; to switch types, just call POST again with the new payload. Auth: developer JWT (@Auth(MERCHANT)). 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>"
data.payoutMethodId
string
UUID of the row.
data.type
string
bank or paypal.
data.status
string
pending, active, restricted, or disabled.
data.verifiedAt
string
ISO timestamp when ops verified the destination, or null.
Bank-only fields (type: bank):
data.accountHolderName
string
data.bankName
string
data.swiftCode
string
data.country
string
ISO 3166-1 alpha-2.
data.bankAddress
string
data.last4
string
Last 4 of account number or IBAN. Full number is never returned.
PayPal-only fields (type: paypal):
data.paypalEmail
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)

type
string
required
Must be bank.
accountHolderName
string
required
Name on the account.
bankName
string
required
Receiving bank.
swiftCode
string
required
8 or 11 character SWIFT/BIC.
country
string
required
ISO 3166-1 alpha-2 country code.
accountNumber
string
Account number. Required when iban is not supplied. Encrypted before storage; only last4 is recoverable.
iban
string
IBAN. Required when accountNumber is not supplied. Encrypted before storage.
bankAddress
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

type
string
required
Must be paypal.
paypalEmail
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 as GET. 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, "type": "success", "message": "Payout method removed" }

Default / multiple methods

The current implementation enforces one payout method per developer (unique developerId constraint on the DeveloperPayoutMethods table). There is no setDefault 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 at the application layer with the platform’s PAYOUT_METHOD_ENCRYPTION_KEY (AES-256-GCM) before being written. The encrypted blob is stored in accountNumberEncrypted / ibanEncrypted columns and is never returned in API responses. Only last4 (stored in cleartext) is exposed for display.

Error codes

CodeDescription
400type not bank or paypal.
400type: bank with neither accountNumber nor iban.
400swiftCode not 8 or 11 chars / country not ISO alpha-2 / paypalEmail not a valid email.
401Missing or invalid developer JWT.
404DELETE called with no method on file.