Skip to content

Onboard a new merchant under this workspace and return a Stripe Connect URL.

POST
/agencies/{workspaceId}/merchants
curl --request POST \
--url https://api.swft.co.uk/agencies/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/merchants \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'idempotency-key: example' \
--data '{ "name": "example", "store_url": "https://example.com", "email": "[email protected]", "partner_key": "example", "return_url": "https://example.com", "refresh_url": "https://example.com" }'

In one round trip: provisions a Swft merchant, opens (or reuses) a Stripe Connect Standard account on its behalf, and returns an AccountLink URL the partner can redirect their customer to. The partner controls the entire setup wizard — the merchant never has to visit a Swft dashboard. Idempotency-Key is required. Same key + same body → identical response on replay; same key + different body → 409.

workspaceId
required
string format: uuid
idempotency-key
required
string
>= 1 characters
Media type application/json
object
name
required
string
>= 1 characters <= 120 characters
store_url
required
string format: uri
email
string format: email
partner_key

Optional Partnero attribution key.

string
return_url

Where Stripe should redirect after onboarding. Defaults to Swft’s hosted page.

string format: uri
refresh_url

Where Stripe should redirect if the AccountLink expires.

string format: uri
Example generated
{
"name": "example",
"store_url": "https://example.com",
"email": "[email protected]",
"partner_key": "example",
"return_url": "https://example.com",
"refresh_url": "https://example.com"
}

Merchant created.

Media type application/json
object
merchant
required
object
id
required
string format: uuid
name
required
string
store_url
required
string format: uri
api_key
required
string
api_secret
required
string | null
livemode
required
boolean
created_via
required
string
created_at
required
string
stripe
required
object
account_id
required
string
onboarding_url
required
string format: uri
expires_at
required
integer
Example generated
{
"merchant": {
"id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"name": "example",
"store_url": "https://example.com",
"api_key": "example",
"api_secret": "example",
"livemode": true,
"created_via": "example",
"created_at": "example"
},
"stripe": {
"account_id": "example",
"onboarding_url": "https://example.com",
"expires_at": 1
}
}

Bad request — malformed input or missing/invalid parameters.

Media type application/json
object
error
required
object
type
required
string format: uri
code
required
string
message
required
string
doc_url
required
string format: uri
request_id
required
string
param
string
meta
object
key
additional properties
Example generated
{
"error": {
"type": "https://example.com",
"code": "example",
"message": "example",
"doc_url": "https://example.com",
"request_id": "example",
"param": "example",
"meta": {
"additionalProperty": "example"
}
}
}

Missing or invalid authentication.

Media type application/json
object
error
required
object
type
required
string format: uri
code
required
string
message
required
string
doc_url
required
string format: uri
request_id
required
string
param
string
meta
object
key
additional properties
Example generated
{
"error": {
"type": "https://example.com",
"code": "example",
"message": "example",
"doc_url": "https://example.com",
"request_id": "example",
"param": "example",
"meta": {
"additionalProperty": "example"
}
}
}

Authenticated but not authorised (e.g. wrong workspace).

Media type application/json
object
error
required
object
type
required
string format: uri
code
required
string
message
required
string
doc_url
required
string format: uri
request_id
required
string
param
string
meta
object
key
additional properties
Example generated
{
"error": {
"type": "https://example.com",
"code": "example",
"message": "example",
"doc_url": "https://example.com",
"request_id": "example",
"param": "example",
"meta": {
"additionalProperty": "example"
}
}
}

Resource not found.

Media type application/json
object
error
required
object
type
required
string format: uri
code
required
string
message
required
string
doc_url
required
string format: uri
request_id
required
string
param
string
meta
object
key
additional properties
Example generated
{
"error": {
"type": "https://example.com",
"code": "example",
"message": "example",
"doc_url": "https://example.com",
"request_id": "example",
"param": "example",
"meta": {
"additionalProperty": "example"
}
}
}

Conflict — idempotency-key reuse, duplicate resource, etc.

Media type application/json
object
error
required
object
type
required
string format: uri
code
required
string
message
required
string
doc_url
required
string format: uri
request_id
required
string
param
string
meta
object
key
additional properties
Example generated
{
"error": {
"type": "https://example.com",
"code": "example",
"message": "example",
"doc_url": "https://example.com",
"request_id": "example",
"param": "example",
"meta": {
"additionalProperty": "example"
}
}
}

Rate-limited.

Media type application/json
object
error
required
object
type
required
string format: uri
code
required
string
message
required
string
doc_url
required
string format: uri
request_id
required
string
param
string
meta
object
key
additional properties
Example generated
{
"error": {
"type": "https://example.com",
"code": "example",
"message": "example",
"doc_url": "https://example.com",
"request_id": "example",
"param": "example",
"meta": {
"additionalProperty": "example"
}
}
}

Internal server error.

Media type application/json
object
error
required
object
type
required
string format: uri
code
required
string
message
required
string
doc_url
required
string format: uri
request_id
required
string
param
string
meta
object
key
additional properties
Example generated
{
"error": {
"type": "https://example.com",
"code": "example",
"message": "example",
"doc_url": "https://example.com",
"request_id": "example",
"param": "example",
"meta": {
"additionalProperty": "example"
}
}
}