| Method | Path | Summary |
|---|---|---|
| GET | …/draft-payments | List draft payments in the workspace |
| POST | …/draft-payments | Create a single draft payment |
| GET | …/draft-payments/{draftPaymentId}/draft-transfers | List transfers belonging to a draft payment |
| GET | …/draft-payments/search | Search draft payments by attributes |
Paths start with /workspaces/{workspaceId}. GET endpoints need draft-payments:read, the others draft-payments:write.
The DraftPayment object
firestoreIdstringrequiredID of the draft payment.
messageIdstringrequiredendToEndIdsstring[]requiredtransferIdsstring[]requiredworkspaceIdstringrequiredID of the workspace.
bankAccountIdstringrequiredID of the bank account.
counterpartyIdsstring[]requiredShow all 14 fieldsHide the field list
transferCounterpartyIdsRecord<string, string>requiredcreationobjectrequiredWhen and by whom the resource was created.
Show 2 child fields
creationDateTimestringdate-timerequiredDate and time when the resource was created.
createdBystringID of the user who created the resource, when recorded.
invoiceIdsstring[]instructionobjectrequiredShow 7 child fields
executionDatestringpaymentMethodstringpaymentInformationIdstringdebtorNamestringdebtorIbanstringdebtorCurrencystringdebtorBicstringsubmissionStatusobjectShow 2 child fields
statusstringcreationDateTimestringinstructionStatusobjectShow 1 child field
statusstringrelationshipsobjectrequiredShow 1 child field
firstTransfersDraftPaymentTransfer[]requiredShow 8 child fields
firestoreIdstringrequiredID of the draft payment transfer.
workspaceIdstringrequiredID of the workspace.
draftPaymentIdstringrequiredID of the draft payment.
bankAccountIdstringrequiredID of the bank account.
counterpartyIdstringrequiredID of the counterparty.
transferCreditTransferrequiredShow 8 child fields
instructionIdstringendToEndIdstringrequiredamountnumbercurrencystringcreditorNamestringcreditorIbanstringcommunicationstringstructuredReferencestringtransferStatusobjectShow 2 child fields
statusstringacceptanceDateTimestringrelationshipsobjectrequiredShow 1 child field
{
"firestoreId": "dpay_RFAtMjAyNjAzMDI",
"messageId": "string",
"endToEndIds": [
"string"
],
"transferIds": [
"string"
],
"workspaceId": "Wk7fQ2xR9bLm4tZp8sNv",
"bankAccountId": "bacc_Q0gzMTA4NzY1NDM",
"counterpartyIds": [
"string"
],
"transferCounterpartyIds": {
"key": "string"
},
"creation": {
"creationDateTime": "2026-03-02T09:15:00.000Z",
"createdBy": "Xq3vT9mB2kLpR7sN4wYc8dZf1aHj"
},
"invoiceIds": [
"string"
],
"instruction": {
"executionDate": "string",
"paymentMethod": "string",
"paymentInformationId": "string",
"debtorName": "string",
"debtorIban": "string",
"debtorCurrency": "string",
"debtorBic": "string"
},
"submissionStatus": {
"status": "string",
"creationDateTime": "string"
},
"instructionStatus": {
"status": "string"
},
"relationships": {
"firstTransfers": [
{
"firestoreId": "dtrans_RFQtMjAyNjAzMDI",
"workspaceId": "Wk7fQ2xR9bLm4tZp8sNv",
"draftPaymentId": "dpay_RFAtMjAyNjAzMDI",
"bankAccountId": "bacc_Q0gzMTA4NzY1NDM",
"counterpartyId": "Cp2nG7vB4xLq9wRt5hMz",
"transfer": {
"instructionId": "string",
"endToEndId": "string",
"amount": 0,
"currency": "string",
"creditorName": "string",
"creditorIban": "string",
"communication": "string",
"structuredReference": "string"
},
"transferStatus": {
"status": "string",
"acceptanceDateTime": "string"
},
"relationships": {
"counterparty": {
"firestoreId": "Cp2nG7vB4xLq9wRt5hMz",
"workspaceId": "Wk7fQ2xR9bLm4tZp8sNv",
"creation": {
"creationDateTime": "2026-03-02T09:15:00.000Z",
"createdBy": "Xq3vT9mB2kLpR7sN4wYc8dZf1aHj"
},
"activation": {
"enabled": true,
"updateDateTime": "2026-03-02T09:15:00.000Z",
"updatedBy": "Xq3vT9mB2kLpR7sN4wYc8dZf1aHj"
},
"entityType": "individual",
"name": "string",
"phones": [
"string"
],
"emails": [
"string"
],
"address": {
"country": "CH",
"postCode": "8001",
"townName": "Zürich",
"streetName": "Bahnhofstrasse",
"buildingNumber": "10",
"name": "Haus zur Linde",
"sortingCode": "string",
"postBox": "Postfach 1234",
"administrativeArea": "Zürich",
"recipients": [
"Anna Meier"
],
"organization": "Muster AG",
"source": [
"Muster AG",
"Bahnhofstrasse 10",
"8001 Zürich"
]
},
"contactPersons": [
{
"name": "string",
"phone": "string",
"email": "string"
}
],
"taxIdentification": "string",
"notes": "string",
"cashAccounts": [
{
"identifications": [
{
"type": "bic",
"value": "string"
}
],
"currency": "CHF",
"bankAddress": {
"country": "CH",
"postCode": "8001",
"townName": "Zürich",
"streetName": "Bahnhofstrasse",
"buildingNumber": "10",
"name": "Haus zur Linde",
"sortingCode": "string",
"postBox": "Postfach 1234",
"administrativeArea": "Zürich",
"recipients": [
"Anna Meier"
],
"organization": "Muster AG",
"source": [
"Muster AG",
"Bahnhofstrasse 10",
"8001 Zürich"
]
},
"internalId": "string",
"nickname": "string",
"verification": {
"id": "3f2c8a1e-6b4d-4e7a-9c15-8d2b7f0e4a61",
"status": "verified",
"holderName": "string",
"dateTime": "2026-03-02T09:30:00.000Z"
}
}
],
"cashAccountIdentifications": [
"string"
],
"approvedCashAccountIds": [
"string"
],
"bankAccountId": "string"
}
}
}
]
}
}/workspaces/{workspaceId}/draft-paymentsList draft payments in the workspace
Scopedraft-payments:read
Path parameters
workspaceIdstringrequiredID of the workspace.
Query parameters
limitintegerMaximum number of items to return, from 1 to 100. A missing, invalid or non-positive value falls back to 20, and a larger value to 100.
Default20
startAfterstringCursor of the page to return: the nextCursor of the previous page.
fieldsstringComma-separated property paths to include in the response, or in each item of a list. Use dots for nested paths.
idsstring[]Comma-separated IDs of the items to return, up to 30. When set, limit, startAfter and the filters are ignored.
Returns
List of items
Items of the page, in list order.
limitintegerrequiredPage size of the request, or the number of requested ids.
nextCursorstringCursor of the next page, to pass as startAfter. Absent when the page holds fewer items than limit; a full last page still has one, and the page it points to is empty.
curl 'https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/draft-payments' \
-H "Authorization: Bearer $SWAY_API_KEY"const response = await fetch('https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/draft-payments', {
headers: {
Authorization: `Bearer ${process.env.SWAY_API_KEY}`,
},
});
console.log(await response.json());import os
import requests
response = requests.get(
"https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/draft-payments",
headers={"Authorization": f"Bearer {os.environ['SWAY_API_KEY']}"},
)
print(response.json()){
"data": [
{
"firestoreId": "dpay_RFAtMjAyNjAzMDI",
"messageId": "string",
"endToEndIds": [
"string"
],
"transferIds": [
"string"
],
"workspaceId": "Wk7fQ2xR9bLm4tZp8sNv",
"bankAccountId": "bacc_Q0gzMTA4NzY1NDM",
"counterpartyIds": [
"string"
],
"transferCounterpartyIds": {
"key": "string"
},
"creation": {
"creationDateTime": "2026-03-02T09:15:00.000Z",
"createdBy": "Xq3vT9mB2kLpR7sN4wYc8dZf1aHj"
},
"invoiceIds": [
"string"
],
"instruction": {
"executionDate": "string",
"paymentMethod": "string",
"paymentInformationId": "string",
"debtorName": "string",
"debtorIban": "string",
"debtorCurrency": "string",
"debtorBic": "string"
},
"submissionStatus": {
"status": "string",
"creationDateTime": "string"
},
"instructionStatus": {
"status": "string"
},
"relationships": {…}
}
],
"limit": 0,
"nextCursor": "string"
}{
"error": {
"code": "invalid-argument",
"message": "Invalid request"
}
}{
"error": {
"code": "unauthenticated",
"message": "Invalid or expired credentials"
}
}{
"error": {
"code": "permission-denied",
"message": "Missing required scope: invoices:read"
}
}{
"error": {
"code": "not-found",
"message": "Resource not found"
}
}{
"error": {
"code": "internal",
"message": "An internal error occurred"
}
}/workspaces/{workspaceId}/draft-paymentsCreate a single draft payment
Scopedraft-payments:write
Path parameters
workspaceIdstringrequiredID of the workspace.
Query parameters
fieldsstringComma-separated property paths to include in the response, or in each item of a list. Use dots for nested paths.
Request body
bankAccountIdstringrequiredID of the bank account.
executionDatestringrequiredamountnumberrequiredcurrencystringISO 4217 currency code
counterpartyIdstringrequiredID of the counterparty.
counterpartyCashAccountIdstringrequiredreferencestringcommunicationstringrequiredinvoiceIdstringID of the invoice.
Returns
Successful response
curl -X POST 'https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/draft-payments' \
-H "Authorization: Bearer $SWAY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"bankAccountId": "bacc_Q0gzMTA4NzY1NDM",
"executionDate": "2026-03-02",
"amount": 0,
"currency": "CHF",
"counterpartyId": "Cp2nG7vB4xLq9wRt5hMz",
"counterpartyCashAccountId": "string",
"reference": "string",
"communication": "string",
"invoiceId": "Iv5zP2nK7wRt3xMq9bLd"
}'const response = await fetch('https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/draft-payments', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SWAY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"bankAccountId": "bacc_Q0gzMTA4NzY1NDM",
"executionDate": "2026-03-02",
"amount": 0,
"currency": "CHF",
"counterpartyId": "Cp2nG7vB4xLq9wRt5hMz",
"counterpartyCashAccountId": "string",
"reference": "string",
"communication": "string",
"invoiceId": "Iv5zP2nK7wRt3xMq9bLd"
}),
});
console.log(await response.json());import os
import requests
response = requests.post(
"https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/draft-payments",
headers={"Authorization": f"Bearer {os.environ['SWAY_API_KEY']}"},
json={
"bankAccountId": "bacc_Q0gzMTA4NzY1NDM",
"executionDate": "2026-03-02",
"amount": 0,
"currency": "CHF",
"counterpartyId": "Cp2nG7vB4xLq9wRt5hMz",
"counterpartyCashAccountId": "string",
"reference": "string",
"communication": "string",
"invoiceId": "Iv5zP2nK7wRt3xMq9bLd",
},
)
print(response.json()){
"data": {
"firestoreId": "dpay_RFAtMjAyNjAzMDI",
"messageId": "string",
"endToEndIds": [
"string"
],
"transferIds": [
"string"
],
"workspaceId": "Wk7fQ2xR9bLm4tZp8sNv",
"bankAccountId": "bacc_Q0gzMTA4NzY1NDM",
"counterpartyIds": [
"string"
],
"transferCounterpartyIds": {
"key": "string"
},
"creation": {
"creationDateTime": "2026-03-02T09:15:00.000Z",
"createdBy": "Xq3vT9mB2kLpR7sN4wYc8dZf1aHj"
},
"invoiceIds": [
"string"
],
"instruction": {
"executionDate": "string",
"paymentMethod": "string",
"paymentInformationId": "string",
"debtorName": "string",
"debtorIban": "string",
"debtorCurrency": "string",
"debtorBic": "string"
},
"submissionStatus": {
"status": "string",
"creationDateTime": "string"
},
"instructionStatus": {
"status": "string"
},
"relationships": {…}
}
}{
"error": {
"code": "invalid-argument",
"message": "Invalid request"
}
}{
"error": {
"code": "unauthenticated",
"message": "Invalid or expired credentials"
}
}{
"error": {
"code": "permission-denied",
"message": "Missing required scope: invoices:read"
}
}{
"error": {
"code": "not-found",
"message": "Resource not found"
}
}{
"error": {
"code": "internal",
"message": "An internal error occurred"
}
}/workspaces/{workspaceId}/draft-payments/{draftPaymentId}/draft-transfersList transfers belonging to a draft payment
Scopedraft-payments:read
Path parameters
workspaceIdstringrequiredID of the workspace.
draftPaymentIdstringrequiredID of the draft payment.
Query parameters
limitintegerMaximum number of items to return, from 1 to 100. A missing, invalid or non-positive value falls back to 20, and a larger value to 100.
Default20
startAfterstringCursor of the page to return: the nextCursor of the previous page.
fieldsstringComma-separated property paths to include in the response, or in each item of a list. Use dots for nested paths.
idsstring[]Comma-separated IDs of the items to return, up to 30. When set, limit, startAfter and the filters are ignored.
Returns
List of items
dataDraftPaymentTransfer[]requiredItems of the page, in list order.
Show 8 child fields
firestoreIdstringrequiredID of the draft payment transfer.
workspaceIdstringrequiredID of the workspace.
draftPaymentIdstringrequiredID of the draft payment.
bankAccountIdstringrequiredID of the bank account.
counterpartyIdstringrequiredID of the counterparty.
transferCreditTransferrequiredShow 8 child fields
instructionIdstringendToEndIdstringrequiredamountnumbercurrencystringcreditorNamestringcreditorIbanstringcommunicationstringstructuredReferencestringtransferStatusobjectShow 2 child fields
statusstringacceptanceDateTimestringrelationshipsobjectrequiredShow 1 child field
limitintegerrequiredPage size of the request, or the number of requested ids.
nextCursorstringCursor of the next page, to pass as startAfter. Absent when the page holds fewer items than limit; a full last page still has one, and the page it points to is empty.
curl 'https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/draft-payments/dpay_RFAtMjAyNjAzMDI/draft-transfers' \
-H "Authorization: Bearer $SWAY_API_KEY"const response = await fetch('https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/draft-payments/dpay_RFAtMjAyNjAzMDI/draft-transfers', {
headers: {
Authorization: `Bearer ${process.env.SWAY_API_KEY}`,
},
});
console.log(await response.json());import os
import requests
response = requests.get(
"https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/draft-payments/dpay_RFAtMjAyNjAzMDI/draft-transfers",
headers={"Authorization": f"Bearer {os.environ['SWAY_API_KEY']}"},
)
print(response.json()){
"data": [
{
"firestoreId": "dtrans_RFQtMjAyNjAzMDI",
"workspaceId": "Wk7fQ2xR9bLm4tZp8sNv",
"draftPaymentId": "dpay_RFAtMjAyNjAzMDI",
"bankAccountId": "bacc_Q0gzMTA4NzY1NDM",
"counterpartyId": "Cp2nG7vB4xLq9wRt5hMz",
"transfer": {
"instructionId": "string",
"endToEndId": "string",
"amount": 0,
"currency": "string",
"creditorName": "string",
"creditorIban": "string",
"communication": "string",
"structuredReference": "string"
},
"transferStatus": {
"status": "string",
"acceptanceDateTime": "string"
},
"relationships": {
"counterparty": {
"firestoreId": "Cp2nG7vB4xLq9wRt5hMz",
"workspaceId": "Wk7fQ2xR9bLm4tZp8sNv",
"creation": {
"creationDateTime": "2026-03-02T09:15:00.000Z",
"createdBy": "Xq3vT9mB2kLpR7sN4wYc8dZf1aHj"
},
"activation": {
"enabled": true,
"updateDateTime": "2026-03-02T09:15:00.000Z",
"updatedBy": "Xq3vT9mB2kLpR7sN4wYc8dZf1aHj"
},
"entityType": "individual",
"name": "string",
"phones": [
"string"
],
"emails": [
"string"
],
"address": {
"country": "CH",
"postCode": "8001",
"townName": "Zürich",
"streetName": "Bahnhofstrasse",
"buildingNumber": "10",
"name": "Haus zur Linde",
"sortingCode": "string",
"postBox": "Postfach 1234",
"administrativeArea": "Zürich",
"recipients": [
"Anna Meier"
],
"organization": "Muster AG",
"source": [
"Muster AG",
"Bahnhofstrasse 10",
"8001 Zürich"
]
},
"contactPersons": [
{
"name": "string",
"phone": "string",
"email": "string"
}
],
"taxIdentification": "string",
"notes": "string",
"cashAccounts": [
{
"identifications": [
{
"type": "bic",
"value": "string"
}
],
"currency": "CHF",
"bankAddress": {
"country": "CH",
"postCode": "8001",
"townName": "Zürich",
"streetName": "Bahnhofstrasse",
"buildingNumber": "10",
"name": "Haus zur Linde",
"sortingCode": "string",
"postBox": "Postfach 1234",
"administrativeArea": "Zürich",
"recipients": [
"Anna Meier"
],
"organization": "Muster AG",
"source": [
"Muster AG",
"Bahnhofstrasse 10",
"8001 Zürich"
]
},
"internalId": "string",
"nickname": "string",
"verification": {
"id": "3f2c8a1e-6b4d-4e7a-9c15-8d2b7f0e4a61",
"status": "verified",
"holderName": "string",
"dateTime": "2026-03-02T09:30:00.000Z"
}
}
],
"cashAccountIdentifications": [
"string"
],
"approvedCashAccountIds": [
"string"
],
"bankAccountId": "string"
}
}
}
],
"limit": 0,
"nextCursor": "string"
}{
"error": {
"code": "invalid-argument",
"message": "Invalid request"
}
}{
"error": {
"code": "unauthenticated",
"message": "Invalid or expired credentials"
}
}{
"error": {
"code": "permission-denied",
"message": "Missing required scope: invoices:read"
}
}{
"error": {
"code": "not-found",
"message": "Resource not found"
}
}{
"error": {
"code": "internal",
"message": "An internal error occurred"
}
}/workspaces/{workspaceId}/draft-payments/searchSearch draft payments by attributes
Scopedraft-payments:read
Path parameters
workspaceIdstringrequiredID of the workspace.
Query parameters
fieldsstringComma-separated property paths to include in the response, or in each item of a list. Use dots for nested paths.
querystringrequiredpageintegerDefault0
sizeintegerDefault20
Returns
Successful response
curl 'https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/draft-payments/search?query=string' \
-H "Authorization: Bearer $SWAY_API_KEY"const response = await fetch('https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/draft-payments/search?query=string', {
headers: {
Authorization: `Bearer ${process.env.SWAY_API_KEY}`,
},
});
console.log(await response.json());import os
import requests
response = requests.get(
"https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/draft-payments/search?query=string",
headers={"Authorization": f"Bearer {os.environ['SWAY_API_KEY']}"},
)
print(response.json()){
"data": [
{
"firestoreId": "dpay_RFAtMjAyNjAzMDI",
"messageId": "string",
"endToEndIds": [
"string"
],
"transferIds": [
"string"
],
"workspaceId": "Wk7fQ2xR9bLm4tZp8sNv",
"bankAccountId": "bacc_Q0gzMTA4NzY1NDM",
"counterpartyIds": [
"string"
],
"transferCounterpartyIds": {
"key": "string"
},
"creation": {
"creationDateTime": "2026-03-02T09:15:00.000Z",
"createdBy": "Xq3vT9mB2kLpR7sN4wYc8dZf1aHj"
},
"invoiceIds": [
"string"
],
"instruction": {
"executionDate": "string",
"paymentMethod": "string",
"paymentInformationId": "string",
"debtorName": "string",
"debtorIban": "string",
"debtorCurrency": "string",
"debtorBic": "string"
},
"submissionStatus": {
"status": "string",
"creationDateTime": "string"
},
"instructionStatus": {
"status": "string"
},
"relationships": {…}
}
]
}{
"error": {
"code": "invalid-argument",
"message": "Invalid request"
}
}{
"error": {
"code": "unauthenticated",
"message": "Invalid or expired credentials"
}
}{
"error": {
"code": "permission-denied",
"message": "Missing required scope: invoices:read"
}
}{
"error": {
"code": "not-found",
"message": "Resource not found"
}
}{
"error": {
"code": "internal",
"message": "An internal error occurred"
}
}