Skip to content

Developers

Connectors

Revenue-connector payouts (Paddle, gross MoR).

GET /connectors/paddle/payouts

List Paddle payouts

Revenue-connector payouts with their component breakdown (gross Merchant-of-Record). Use `aggregate=month` for monthly totals.

Required permission: connectors:payouts.read (Connectors › Payment provider payouts › Read)

Pagination: Not paginated: returns the full set.

Parameters

NameInTypeDescription
fromquerystring (date)
toquerystring (date)
aggregatequerystringReturn monthly totals instead of individual payouts.
Values: month

Responses

200 List of payouts · application/json

NameTypeDescription
payoutsobject[]
payouts[].idstring
payouts[].companyIdstring
payouts[].payoutDatestring (date)
payouts[].currencystring
payouts[].grossstringDecimal string
payouts[].feesstringDecimal string
payouts[].netstringDecimal string
payouts[].componentsobject[]
payouts[].components[].typestring
payouts[].components[].amountstringDecimal string

401 Missing or invalid Bearer token. · application/json

NameTypeDescription
errorstringHuman-readable error message
required_permissionstringPresent on 403 - the missing permission (area:resource.action)

403 Token lacks the required permission, or the resource is outside the token's tenant. · application/json

NameTypeDescription
errorstringHuman-readable error message
required_permissionstringPresent on 403 - the missing permission (area:resource.action)

429 Rate limit exceeded. · application/json

NameTypeDescription
errorstringHuman-readable error message
required_permissionstringPresent on 403 - the missing permission (area:resource.action)

Examples

curl
curl -X GET "https://app.bm.consulting/api/v1/connectors/paddle/payouts" \
  -H "Authorization: Bearer $BMC_TOKEN"
TypeScript (fetch)
const res = await fetch("https://app.bm.consulting/api/v1/connectors/paddle/payouts", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.BMC_TOKEN}`,
  },
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json();
Python (requests)
import os
import requests

res = requests.get(
    "https://app.bm.consulting/api/v1/connectors/paddle/payouts",
    headers={"Authorization": f"Bearer {os.environ['BMC_TOKEN']}"},
    timeout=30,
)
res.raise_for_status()
data = res.json()

POST /connectors/paddle/payouts

Ingest a Paddle payout

Idempotent by `paddlePayoutId`: re-sending the same payout returns the existing one. `companyId` is forced from the token.

Required permission: connectors:payouts.create (Connectors › Payment provider payouts › Create)

Pagination: Not paginated: returns the full set.

Request body application/json

NameTypeDescription
paddlePayoutIdrequiredstring
payoutDaterequiredstring (date)
currencyrequiredstring
componentsrequiredobject[]
components[].typestring
components[].amountstringDecimal string

Responses

200 Idempotent replay of an already-ingested payout

201 Payout ingested · application/json

NameTypeDescription
idstring
companyIdstring
payoutDatestring (date)
currencystring
grossstringDecimal string
feesstringDecimal string
netstringDecimal string
componentsobject[]
components[].typestring
components[].amountstringDecimal string

401 Missing or invalid Bearer token. · application/json

NameTypeDescription
errorstringHuman-readable error message
required_permissionstringPresent on 403 - the missing permission (area:resource.action)

403 Token lacks the required permission, or the resource is outside the token's tenant. · application/json

NameTypeDescription
errorstringHuman-readable error message
required_permissionstringPresent on 403 - the missing permission (area:resource.action)

429 Rate limit exceeded. · application/json

NameTypeDescription
errorstringHuman-readable error message
required_permissionstringPresent on 403 - the missing permission (area:resource.action)

Examples

curl
curl -X POST "https://app.bm.consulting/api/v1/connectors/paddle/payouts" \
  -H "Authorization: Bearer $BMC_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"paddlePayoutId":"string","payoutDate":"2026-01-31","currency":"EUR","components":[{"type":"sale","amount":"string"}]}'
TypeScript (fetch)
const res = await fetch("https://app.bm.consulting/api/v1/connectors/paddle/payouts", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.BMC_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "paddlePayoutId": "string",
    "payoutDate": "2026-01-31",
    "currency": "EUR",
    "components": [
      {
        "type": "sale",
        "amount": "string"
      }
    ]
  }),
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json();
Python (requests)
import os
import requests

res = requests.post(
    "https://app.bm.consulting/api/v1/connectors/paddle/payouts",
    headers={"Authorization": f"Bearer {os.environ['BMC_TOKEN']}"},
    json={
        "paddlePayoutId": "string",
        "payoutDate": "2026-01-31",
        "currency": "EUR",
        "components": [{
            "type": "sale",
            "amount": "string",
        }],
    },
    timeout=30,
)
res.raise_for_status()
data = res.json()

POST /connectors/paddle/payouts/{id}/post

Post a payout to the books

Books the ingested payout as a journal entry (gross Merchant-of-Record treatment). Idempotent.

Required permission: connectors:payouts.post (Connectors › Payment provider payouts › Post to ledger)

Pagination: Not paginated: returns the full set.

Parameters

NameInTypeDescription
idrequiredpathstring

Responses

200 Payout posted (journal entry created)

401 Missing or invalid Bearer token. · application/json

NameTypeDescription
errorstringHuman-readable error message
required_permissionstringPresent on 403 - the missing permission (area:resource.action)

403 Token lacks the required permission, or the resource is outside the token's tenant. · application/json

NameTypeDescription
errorstringHuman-readable error message
required_permissionstringPresent on 403 - the missing permission (area:resource.action)

404 Resource not found (or belongs to a different tenant). · application/json

NameTypeDescription
errorstringHuman-readable error message
required_permissionstringPresent on 403 - the missing permission (area:resource.action)

429 Rate limit exceeded. · application/json

NameTypeDescription
errorstringHuman-readable error message
required_permissionstringPresent on 403 - the missing permission (area:resource.action)

Examples

curl
curl -X POST "https://app.bm.consulting/api/v1/connectors/paddle/payouts/<id>/post" \
  -H "Authorization: Bearer $BMC_TOKEN"
TypeScript (fetch)
const res = await fetch("https://app.bm.consulting/api/v1/connectors/paddle/payouts/<id>/post", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.BMC_TOKEN}`,
  },
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json();
Python (requests)
import os
import requests

res = requests.post(
    "https://app.bm.consulting/api/v1/connectors/paddle/payouts/<id>/post",
    headers={"Authorization": f"Bearer {os.environ['BMC_TOKEN']}"},
    timeout=30,
)
res.raise_for_status()
data = res.json()
Email
Contact