Skip to main content

Stripe

Stripe Connect account management and payouts.

Authentication:

  • GET /stripe/pk is public.
  • All other Stripe endpoints require Authorization: Bearer <token>.

POST /stripe/accounts

Create a connected account for the authenticated user.

curl -X POST https://api.paylinks.ro/api/v1/stripe/accounts \
-H "Authorization: Bearer YOUR_TOKEN"

Response (200):

{
"id": "acct_1234567890",
"account": {
"id": "acct_1234567890"
}
}

GET /stripe/accounts/me

Ensure the current user has a connected account and return it.

curl https://api.paylinks.ro/api/v1/stripe/accounts/me \
-H "Authorization: Bearer YOUR_TOKEN"

Response (200):

{
"id": "acct_1234567890",
"account": {
"id": "acct_1234567890"
}
}

GET /stripe/accounts/:id

Get details for your connected account.

curl https://api.paylinks.ro/api/v1/stripe/accounts/acct_1234567890 \
-H "Authorization: Bearer YOUR_TOKEN"

Response (200):

{
"account": {
"id": "acct_1234567890"
}
}

PUT /stripe/accounts/:id

Update connected account details (identity, business profile, payout bank account, ToS acceptance).

curl -X PUT https://api.paylinks.ro/api/v1/stripe/accounts/acct_1234567890 \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"individual": {
"first_name": "Andrei",
"last_name": "Bucur",
"email": "[email protected]",
"address": {
"line1": "Str. Lalelelor 10",
"city": "Bucuresti",
"postal_code": "010101",
"country": "RO"
}
},
"business_type": "individual"
}'

Response (200):

{
"account": {
"id": "acct_1234567890"
},
"isOnboarded": false,
"charges_enabled": false,
"payouts_enabled": false,
"details_submitted": true,
"requirements": {
"currently_due": ["individual.id_number"],
"eventually_due": [],
"past_due": [],
"pending_verification": [],
"disabled_reason": null,
"current_deadline": null,
"errors": []
}
}

GET /stripe/accounts/me/requirements

Get current onboarding/verification state.

curl https://api.paylinks.ro/api/v1/stripe/accounts/me/requirements \
-H "Authorization: Bearer YOUR_TOKEN"

Response (200):

{
"hasAccount": true,
"isOnboarded": false,
"charges_enabled": false,
"payouts_enabled": false,
"details_submitted": true,
"requirements": {
"currently_due": ["individual.id_number"],
"eventually_due": [],
"past_due": [],
"pending_verification": [],
"disabled_reason": null,
"current_deadline": null,
"errors": []
}
}

When no connected account exists:

{
"hasAccount": false,
"isOnboarded": false,
"requirements": null
}

POST /stripe/account-link

Create a Stripe account onboarding link.

curl -X POST https://api.paylinks.ro/api/v1/stripe/account-link \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"refreshUrl": "https://paylinks.ro/dashboard/settings",
"returnUrl": "https://paylinks.ro/dashboard/settings"
}'

Response (200):

{ "url": "https://connect.stripe.com/setup/..." }

POST /stripe/accounts/:id/account-session

Create an embedded account session.

curl -X POST https://api.paylinks.ro/api/v1/stripe/accounts/acct_1234567890/account-session \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"component":"management"}'

Request Body:

FieldTypeRequiredDescription
componentstringNoonboarding (default) or management

Response (200):

{ "client_secret": "seti_..._secret_..." }

GET /stripe/pk

Get the Stripe publishable key (public endpoint).

curl https://api.paylinks.ro/api/v1/stripe/pk

Response (200):

{ "publishableKey": "pk_live_..." }

GET /stripe/balance

Get connected account balance summary in the selected currency.

curl https://api.paylinks.ro/api/v1/stripe/balance \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "X-Currency: RON"

Response (200):

{
"currency": "RON",
"available": 4999,
"pending": 499,
"totalTransferred": 30000,
"processing": 250,
"minimumPayoutMajor": 200,
"reservedForFees": 10
}

If no account exists:

{
"currency": "RON",
"available": 0,
"pending": 0,
"totalTransferred": 0,
"minimumPayoutMajor": 200
}

GET /stripe/payouts

List payouts for the connected account.

curl "https://api.paylinks.ro/api/v1/stripe/payouts?limit=10" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "X-Currency: RON"

Query Parameters:

ParameterTypeDefaultDescription
limitinteger50Number of items (max 100)
startingAfterstringStripe payout ID for pagination

Response (200):

{
"items": [
{
"id": "po_1234567890",
"amountMinor": 100000,
"currency": "RON",
"status": "paid",
"created": "2026-02-17T10:00:00.000Z",
"arrivalDate": "2026-02-18T00:00:00.000Z",
"method": "standard",
"statementDescriptor": null
}
]
}

POST /stripe/payouts

Create a manual payout from available balance.

curl -X POST https://api.paylinks.ro/api/v1/stripe/payouts \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"currency":"RON","statementDescriptor":"PAYLINKS"}'

Request Body:

FieldTypeRequiredDescription
currencystringNoRON, EUR, or GBP
statementDescriptorstringNoMax 22 chars

Response (200):

{
"payout": {
"id": "po_1234567890",
"amount": 499900,
"currency": "ron",
"status": "pending"
}
}