From 6a5f6bc7069dcb5b883ba58b53f4f9a3762614ac Mon Sep 17 00:00:00 2001 From: Maxence Busson Date: Mon, 12 Jan 2026 18:10:18 +0100 Subject: [PATCH 01/10] Create 2026-01-15.mdx --- changelog/2026/2026-01-15.mdx | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 changelog/2026/2026-01-15.mdx diff --git a/changelog/2026/2026-01-15.mdx b/changelog/2026/2026-01-15.mdx new file mode 100644 index 0000000000..b74d5e21ec --- /dev/null +++ b/changelog/2026/2026-01-15.mdx @@ -0,0 +1,28 @@ +--- +title: 15 January 2026 +type: release +--- + +## New features + +📅 Set card spending limits based on calendar periods (resetting monthly on the 1st, weekly on Monday, or daily at midnight) instead of rolling periods. Calendar-based limits make it easier for finance teams to control budgets by calendar month, week, or day. Configure calendar limits using the new `mode` field in [`SpendingLimitInput`](https://api-reference.swan.io/inputs/spending-limit-input/) with options for `daily`, `weekly`, or `monthly` calendar recurrence. + +## Improvements + +📄 The [`generateTransactionStatement` mutation](https://api-reference.swan.io/mutations/generate-transaction-statement/) now works for incoming and outgoing `Booked` [International Credit Transfers](/topics/payments/credit-transfers/international/). Use it to prove a transaction was executed by Swan. + +## API updates + +### Upcoming breaking changes + +🌍 Starting this month, a new `accountId` field is available as an optional parameter in [`internationalBeneficiaryDynamicForms`](https://api-reference.swan.io/queries/international-beneficiary-dynamic-forms/). It becomes mandatory on **March 31, 2026**. Update your integration during this period to ensure continued support for international credit transfer queries. + +### Reminders + +📆 On **April 1, 2026**, the following fields will be removed from the [`accountStatement`](https://api-reference.swan.io/queries/account-statement/) and [`accountStatements`](https://api-reference.swan.io/queries/account-statements/) queries and from the [`generateAccountStatement`](https://api-reference.swan.io/mutations/generate-account-statement/) mutation response: + +- `fees` will be replaced by `feeCredits` and `feeDebits`. +- `status` will be replaced by the `statusInfo` object. +- The statement download `url`, previously in the `type` object, will only be available in `statusInfo`. + +👉 Check all reminders of already-announced upcoming breaking changes on [docs.swan.io/changelog](https://docs.swan.io/changelog). \ No newline at end of file From 0c2d144e1710e63757c8d900edaed3f5fd6a96d2 Mon Sep 17 00:00:00 2001 From: Maxence Busson Date: Mon, 12 Jan 2026 18:13:48 +0100 Subject: [PATCH 02/10] Update 2026-01-15.mdx --- changelog/2026/2026-01-15.mdx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/changelog/2026/2026-01-15.mdx b/changelog/2026/2026-01-15.mdx index b74d5e21ec..acc1a23c1d 100644 --- a/changelog/2026/2026-01-15.mdx +++ b/changelog/2026/2026-01-15.mdx @@ -5,6 +5,8 @@ type: release ## New features +📖 Subscribe to email notifications directly from the [Changelog](/changelog) to stay informed about API updates and breaking changes. + 📅 Set card spending limits based on calendar periods (resetting monthly on the 1st, weekly on Monday, or daily at midnight) instead of rolling periods. Calendar-based limits make it easier for finance teams to control budgets by calendar month, week, or day. Configure calendar limits using the new `mode` field in [`SpendingLimitInput`](https://api-reference.swan.io/inputs/spending-limit-input/) with options for `daily`, `weekly`, or `monthly` calendar recurrence. ## Improvements From 33964e3fa690ef8e925f211b68e8d968a1deb287 Mon Sep 17 00:00:00 2001 From: Maxence Busson Date: Mon, 12 Jan 2026 18:22:28 +0100 Subject: [PATCH 03/10] Update 2026-01-15.mdx --- changelog/2026/2026-01-15.mdx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/changelog/2026/2026-01-15.mdx b/changelog/2026/2026-01-15.mdx index acc1a23c1d..45d8bdad1f 100644 --- a/changelog/2026/2026-01-15.mdx +++ b/changelog/2026/2026-01-15.mdx @@ -25,6 +25,4 @@ type: release - `fees` will be replaced by `feeCredits` and `feeDebits`. - `status` will be replaced by the `statusInfo` object. -- The statement download `url`, previously in the `type` object, will only be available in `statusInfo`. - -👉 Check all reminders of already-announced upcoming breaking changes on [docs.swan.io/changelog](https://docs.swan.io/changelog). \ No newline at end of file +- The statement download `url`, previously in the `type` object, will only be available in `statusInfo`. \ No newline at end of file From aa53cfd5dca4bd1a0e7d12015e10ef8f46a0da8c Mon Sep 17 00:00:00 2001 From: Maxence Busson Date: Tue, 13 Jan 2026 15:29:26 +0100 Subject: [PATCH 04/10] Update 2026-01-15.mdx --- changelog/2026/2026-01-15.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/changelog/2026/2026-01-15.mdx b/changelog/2026/2026-01-15.mdx index 45d8bdad1f..9ebb8fd862 100644 --- a/changelog/2026/2026-01-15.mdx +++ b/changelog/2026/2026-01-15.mdx @@ -17,11 +17,11 @@ type: release ### Upcoming breaking changes -🌍 Starting this month, a new `accountId` field is available as an optional parameter in [`internationalBeneficiaryDynamicForms`](https://api-reference.swan.io/queries/international-beneficiary-dynamic-forms/). It becomes mandatory on **March 31, 2026**. Update your integration during this period to ensure continued support for international credit transfer queries. +🌍 Starting January 19, a new `accountId` field is available as an optional parameter in [`internationalBeneficiaryDynamicForms`](https://api-reference.swan.io/queries/international-beneficiary-dynamic-forms/). It becomes mandatory on **March 31, 2026**. Update your integration during this period to ensure continued support for international credit transfer queries. ### Reminders -📆 On **April 1, 2026**, the following fields will be removed from the [`accountStatement`](https://api-reference.swan.io/queries/account-statement/) and [`accountStatements`](https://api-reference.swan.io/queries/account-statements/) queries and from the [`generateAccountStatement`](https://api-reference.swan.io/mutations/generate-account-statement/) mutation response: +📆 On **April 1, 2026**, the following fields will be removed from the [`accountStatement`](https://api-reference.swan.io/queries/account-statement/) and [`Account.statements`](https://api-reference.swan.io/objects/account/) queries and from the [`generateAccountStatement`](https://api-reference.swan.io/mutations/generate-account-statement/) mutation response: - `fees` will be replaced by `feeCredits` and `feeDebits`. - `status` will be replaced by the `statusInfo` object. From 9ab9549017b55e62a58c75b6ef13faa183e309f7 Mon Sep 17 00:00:00 2001 From: Maxence Busson Date: Wed, 14 Jan 2026 12:13:50 +0100 Subject: [PATCH 05/10] Update 2026-01-15.mdx --- changelog/2026/2026-01-15.mdx | 2 -- 1 file changed, 2 deletions(-) diff --git a/changelog/2026/2026-01-15.mdx b/changelog/2026/2026-01-15.mdx index 9ebb8fd862..d04282839e 100644 --- a/changelog/2026/2026-01-15.mdx +++ b/changelog/2026/2026-01-15.mdx @@ -7,8 +7,6 @@ type: release 📖 Subscribe to email notifications directly from the [Changelog](/changelog) to stay informed about API updates and breaking changes. -📅 Set card spending limits based on calendar periods (resetting monthly on the 1st, weekly on Monday, or daily at midnight) instead of rolling periods. Calendar-based limits make it easier for finance teams to control budgets by calendar month, week, or day. Configure calendar limits using the new `mode` field in [`SpendingLimitInput`](https://api-reference.swan.io/inputs/spending-limit-input/) with options for `daily`, `weekly`, or `monthly` calendar recurrence. - ## Improvements 📄 The [`generateTransactionStatement` mutation](https://api-reference.swan.io/mutations/generate-transaction-statement/) now works for incoming and outgoing `Booked` [International Credit Transfers](/topics/payments/credit-transfers/international/). Use it to prove a transaction was executed by Swan. From 239550d722b3fc5c0dd754e6a0cca3ed1cef4e35 Mon Sep 17 00:00:00 2001 From: "Max B." <17831738+max-koro@users.noreply.github.com> Date: Tue, 13 Jan 2026 17:09:18 +0100 Subject: [PATCH 06/10] Updated ID levels (#514) * Updated ID levels * Update _self-employed-id-recs.mdx * Update docs/topics/partials/_self-employed-id-recs.mdx Co-authored-by: racene-swan --------- Co-authored-by: racene-swan --- docs/topics/onboarding/company/index.mdx | 2 +- docs/topics/onboarding/individual/index.mdx | 2 +- docs/topics/partials/_self-employed-id-recs.mdx | 2 +- docs/topics/users/identifications/index.mdx | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/topics/onboarding/company/index.mdx b/docs/topics/onboarding/company/index.mdx index 9f44cada6a..e2076f1b99 100644 --- a/docs/topics/onboarding/company/index.mdx +++ b/docs/topics/onboarding/company/index.mdx @@ -135,7 +135,7 @@ For company onboarding, the following levels are recommended based on the accoun | Account country | Recommended level
for account admin | Other supported levels | |---|---|---| | 🇫🇷 France | ** Expert** | QES
PVID | -| 🇧🇪 Belgium | ** Expert** | *none* | +| 🇧🇪 Belgium | ** Expert** | QES
PVID | | 🇩🇪 Germany | ** QES** | *none* | | 🇮🇹 Italy | ** Expert** | QES
PVID | | 🇳🇱 Netherlands | ** Expert** | QES
PVID | diff --git a/docs/topics/onboarding/individual/index.mdx b/docs/topics/onboarding/individual/index.mdx index 1a4750e7ea..c9f37579e8 100644 --- a/docs/topics/onboarding/individual/index.mdx +++ b/docs/topics/onboarding/individual/index.mdx @@ -34,7 +34,7 @@ For individual onboarding, the following levels are recommended based on the acc | Account country | Recommended level
for individuals | Other supported levels | |---|---|---| | 🇫🇷 France | ** PVID** | *Expert + first transfer
QES* | -| 🇧🇪 Belgium | ** Expert + first transfer** | *none* | +| 🇧🇪 Belgium | ** QES** | *Expert + first transfer* | | 🇩🇪 Germany | ** QES + first transfer** | *none* | | 🇮🇹 Italy | ** QES** | *Expert + first transfer* | | 🇳🇱 Netherlands | ** Expert** | *QES
PVID* | diff --git a/docs/topics/partials/_self-employed-id-recs.mdx b/docs/topics/partials/_self-employed-id-recs.mdx index 4569efbd4e..0f5e0823dd 100644 --- a/docs/topics/partials/_self-employed-id-recs.mdx +++ b/docs/topics/partials/_self-employed-id-recs.mdx @@ -1,5 +1,5 @@ | Account country | Recommended level
for self-employed | Other supported levels | |---|---|---| | 🇫🇷 France | ** PVID** | *none* | -| 🇧🇪 Belgium | ** Expert + first transfer** | *none* | +| 🇧🇪 Belgium | ** QES** | *Expert + first transfer* | | 🇩🇪 Germany | ** QES + first transfer** | *none* | \ No newline at end of file diff --git a/docs/topics/users/identifications/index.mdx b/docs/topics/users/identifications/index.mdx index 9c1ec34c66..71374a736f 100644 --- a/docs/topics/users/identifications/index.mdx +++ b/docs/topics/users/identifications/index.mdx @@ -87,7 +87,7 @@ Sometimes, a [first transfer](../../onboarding/account-holders/index.mdx#first-t | Account country | Individual accounts | Company accounts | | --- | --- | --- | | 🇫🇷 France | ** PVID**
Expert + first transfer
QES | ** Expert**
QES
PVID | -| 🇧🇪 Belgium | ** Expert + first transfer** ∗
PVID | ** Expert** ∗
PVID | +| 🇧🇪 Belgium | ** QES**
Expert + first transfer | ** Expert**
QES
PVID | | 🇩🇪 Germany | ** QES + first transfer** | ** QES** | | 🇮🇹 Italy | ** QES**
Expert + first transfer | ** Expert**
QES
PVID | | 🇳🇱 Netherlands | ** Expert**
QES
PVID | ** Expert**
QES
PVID | From ffaf438e7350e8e01c1c1630bf498bd4aa14808b Mon Sep 17 00:00:00 2001 From: "Max B." <17831738+max-koro@users.noreply.github.com> Date: Tue, 13 Jan 2026 17:22:26 +0100 Subject: [PATCH 07/10] DOC-735/add-hint-that-in-the-supporting-docs-section-the-file-should-be-put-in (#529) --- docs/topics/accounts/documents/guide-upload-onboarding.mdx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/topics/accounts/documents/guide-upload-onboarding.mdx b/docs/topics/accounts/documents/guide-upload-onboarding.mdx index 24867d5d95..3eab00959d 100644 --- a/docs/topics/accounts/documents/guide-upload-onboarding.mdx +++ b/docs/topics/accounts/documents/guide-upload-onboarding.mdx @@ -126,6 +126,10 @@ curl --location --request POST '$UPLOAD_URL' \ When you upload a document with the HTTP POST cURL command, Amazon sends a *204: No content error*, **but the document was successfully uploaded**. ::: +:::info Programmatic uploads +When uploading via code (not cURL), send the file as a readable stream and ensure your HTTP client sets the `Content-Length` header correctly. Some libraries require this explicitly for multipart form uploads. +::: + ## Dashboard: Onboarding {#dashboard-onboarding} Use the Dashboard to upload required documents. From 0d210691458d1eb31be1b44aa4c25471ab8a737a Mon Sep 17 00:00:00 2001 From: "Max B." <17831738+max-koro@users.noreply.github.com> Date: Tue, 13 Jan 2026 17:27:27 +0100 Subject: [PATCH 08/10] DOC-1476/redirecturl-mention-after-breaking-change#comment-42f48f17 (#526) --- docs/topics/onboarding/company/guide-create.mdx | 2 +- docs/topics/onboarding/company/index.mdx | 2 +- docs/topics/onboarding/individual/guide-create.mdx | 2 +- docs/topics/onboarding/individual/index.mdx | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/topics/onboarding/company/guide-create.mdx b/docs/topics/onboarding/company/guide-create.mdx index 8cda1b74e3..34b9a5056b 100644 --- a/docs/topics/onboarding/company/guide-create.mdx +++ b/docs/topics/onboarding/company/guide-create.mdx @@ -21,7 +21,7 @@ Create a unique company onboarding link for each user with the API. 1. Start with general company information (lines 4-21). 1. Next, add details about your ultimate beneficial owner (UBO). 1. Finally, add details about your legal representative (if needed; not shown). -1. Include optional fields as needed for your use case (such as `accountName` or `redirectUrl`). +1. Include optional fields as needed for your use case (such as `accountName` or `oAuthRedirectParameters`). 1. Add optional messages to the success payload, either for validation or in case of rejection. ### Mutation {#mutation} diff --git a/docs/topics/onboarding/company/index.mdx b/docs/topics/onboarding/company/index.mdx index e2076f1b99..c4af968bc6 100644 --- a/docs/topics/onboarding/company/index.mdx +++ b/docs/topics/onboarding/company/index.mdx @@ -177,7 +177,7 @@ This section covers four types of information: |`language`| | | | | | | |`monthlyPaymentVolume`| | | | | | | |`name` *(company name)* | | | | | | | -|`redirectUrl`| | | | | | | +|`oAuthRedirectParameters`| | | | | | | |`registrationNumber` | | | | | | | |`residencyAddress.addressLine1`| | | | | | | |`residencyAddress.addressLine2`| | | | | | | diff --git a/docs/topics/onboarding/individual/guide-create.mdx b/docs/topics/onboarding/individual/guide-create.mdx index 6e25e1456c..5e53d18ba8 100644 --- a/docs/topics/onboarding/individual/guide-create.mdx +++ b/docs/topics/onboarding/individual/guide-create.mdx @@ -18,7 +18,7 @@ Create a unique individual onboarding link for each user with the API. 1. Call the `onboardIndividualAccountHolder` mutation. 1. Enter information for all required API fields for the account country, as noted in [country requirements for individual accounts](./index.mdx#country-reqs). -1. Include optional fields as needed for your use case (such as `accountName` or `redirectUrl`). +1. Include optional fields as needed for your use case (such as `accountName` or `oAuthRedirectParameters`). 1. Add optional messages to the success payload, either for validation or in case of rejection. ### Mutation {#mutation} diff --git a/docs/topics/onboarding/individual/index.mdx b/docs/topics/onboarding/individual/index.mdx index c9f37579e8..94d8046aca 100644 --- a/docs/topics/onboarding/individual/index.mdx +++ b/docs/topics/onboarding/individual/index.mdx @@ -58,7 +58,7 @@ For individual accounts, use the `onboardIndividualAccountHolder` mutation to co |`employmentStatus`| | | | | | | |`language`| | | | | | | |`monthlyIncome`| | | | | | | -|`redirectUrl`||||||| +|`oAuthRedirectParameters`||||||| |`residencyAddress.addressLine1`| | | | | | | |`residencyAddress.addressLine2`||||||| |`residencyAddress.city`| | | | | | | From cf83640ce38b375601bd7dcbe6322abe49995d39 Mon Sep 17 00:00:00 2001 From: "Max B." <17831738+max-koro@users.noreply.github.com> Date: Wed, 14 Jan 2026 11:21:21 +0100 Subject: [PATCH 09/10] DOC-1484/remove-deleted-onboarding-fields-from-the-documentation (#523) --- docs/topics/onboarding/company/guide-create.mdx | 4 +--- docs/topics/onboarding/individual/guide-create.mdx | 3 +-- docs/topics/onboarding/individual/guide-update.mdx | 7 ++----- docs/topics/onboarding/overview/guide-get-info.mdx | 6 +----- 4 files changed, 5 insertions(+), 15 deletions(-) diff --git a/docs/topics/onboarding/company/guide-create.mdx b/docs/topics/onboarding/company/guide-create.mdx index 34b9a5056b..545840834c 100644 --- a/docs/topics/onboarding/company/guide-create.mdx +++ b/docs/topics/onboarding/company/guide-create.mdx @@ -74,7 +74,6 @@ mutation CreateCompanyOnboarding { __typename onboarding { id - onboardingState statusInfo { status } @@ -103,14 +102,13 @@ mutation CreateCompanyOnboarding { If you added validation or rejection messages, you'll see information such as the `onboardingId` as well as the current status `Valid` in the success payload. -```json {6,8} showLineNumbers +```json {6,7} showLineNumbers { "data": { "onboardCompanyAccountHolder": { "__typename": "OnboardCompanyAccountHolderSuccessPayload", "onboarding": { "id": "eda0ceec-0e20-4d1b-bbee-b3e3a4227c99", - "onboardingState": "Ongoing", "statusInfo": { "status": "Valid" } diff --git a/docs/topics/onboarding/individual/guide-create.mdx b/docs/topics/onboarding/individual/guide-create.mdx index 5e53d18ba8..176833f2f9 100644 --- a/docs/topics/onboarding/individual/guide-create.mdx +++ b/docs/topics/onboarding/individual/guide-create.mdx @@ -67,14 +67,13 @@ mutation CreateIndividualOnboarding { If you added validation or rejection messages, you'll see information such as the `onboardingId` as well as the current status `Ongoing (Valid)` in the success payload. -```json {6-7,9} showLineNumbers +```json {6,8} showLineNumbers { "data": { "onboardIndividualAccountHolder": { "__typename": "OnboardIndividualAccountHolderSuccessPayload", "onboarding": { "id": "ae06faf6-13b2-4e9e-891b-e78ecd5ca0e4", - "onboardingState": "Ongoing", "statusInfo": { "status": "Valid" } diff --git a/docs/topics/onboarding/individual/guide-update.mdx b/docs/topics/onboarding/individual/guide-update.mdx index d8d50064c7..ab97db9121 100644 --- a/docs/topics/onboarding/individual/guide-update.mdx +++ b/docs/topics/onboarding/individual/guide-update.mdx @@ -19,13 +19,12 @@ To test updating an individual onboarding, **add an account name**. 1. Enter the onboarding ID retrieved in step 1. 1. Check the box for `accountName`, then add an account name (example: MyBrand). 1. Add desired messages to the success payload, either for validation or in case of rejection. - * **Recommendation**: Inside the `UpdateIndividualOnboardingSuccessPayload` option, add `onboardingState` and `statusInfo` > `status` to confirm the onboarding is still ongoing and valid after making the update. ## Mutation {#mutation} Open in API Explorer -```graphql {4-5,19-22} showLineNumbers +```graphql {4-5,18-21} showLineNumbers mutation UpdateIndividualOnboarding { updateIndividualOnboarding( input: { @@ -45,7 +44,6 @@ mutation UpdateIndividualOnboarding { __typename onboarding { accountName - onboardingState statusInfo { status } @@ -65,14 +63,13 @@ mutation UpdateIndividualOnboarding { ## Payload {#payload} -```json {6-9} showLineNumbers +```json {6-8} showLineNumbers { "data": { "updateIndividualOnboarding": { "__typename": "UpdateIndividualOnboardingSuccessPayload", "onboarding": { "accountName": "MyBrand", - "onboardingState": "Ongoing", "statusInfo": { "status": "Valid" } diff --git a/docs/topics/onboarding/overview/guide-get-info.mdx b/docs/topics/onboarding/overview/guide-get-info.mdx index 2819f1f63f..314dbe94f9 100644 --- a/docs/topics/onboarding/overview/guide-get-info.mdx +++ b/docs/topics/onboarding/overview/guide-get-info.mdx @@ -21,7 +21,7 @@ The onboarding can have [any status](../index.mdx#statuses). 1. Call the `onboardings` query. 1. Add all the query options you'd like to monitor. - * For this exercise, add: `createdAt`, `email`, `info` > `type`, `onboardingUrl`, `onboardingState`, `statusInfo` > `status`, `id`, and `totalCount`. + * For this exercise, add: `createdAt`, `email`, `info` > `type`, `onboardingUrl`, `statusInfo` > `status`, `id`, and `totalCount`. * To `statusInfo` > `status`, add a **rejection** as well: `OnboardingInvalidStatusInfo` with `errors`, `field`, and `status`. 1. You can only get information for up to **100 onboardings** at a time. Add [pagination](../../../developers/using-api/pagination.mdx) to tailor your response to the information you need. @@ -40,7 +40,6 @@ query MonitorOnboarding { type } onboardingUrl - onboardingState statusInfo { status ... on OnboardingInvalidStatusInfo { @@ -77,7 +76,6 @@ Review the sample payload with two `Ongoing` onboardings, one `Invalid` and one "type": "Company" }, "onboardingUrl": "https://api.banking.swan.io/projects/$PROJECT_ID/onboardings/$ONBOARDING_ID?lang=es", - "onboardingState": "Ongoing", "statusInfo": { "status": "Invalid", "__typename": "OnboardingInvalidStatusInfo", @@ -101,7 +99,6 @@ Review the sample payload with two `Ongoing` onboardings, one `Invalid` and one "type": "Individual" }, "onboardingUrl": "https://api.banking.swan.io/projects/$PROJECT_ID/onboardings/$ONBOARDING_ID?lang=en", - "onboardingState": "Ongoing", "statusInfo": { "status": "Valid" }, @@ -116,7 +113,6 @@ Review the sample payload with two `Ongoing` onboardings, one `Invalid` and one "type": "Individual" }, "onboardingUrl": "https://api.banking.swan.io/projects/$PROJECT_ID/onboardings/$ONBOARDING_ID?lang=fr", - "onboardingState": "Completed", "statusInfo": { "status": "Finalized" }, From d4a320955d860d973585cbdfd0c653320becce00 Mon Sep 17 00:00:00 2001 From: Maxence Busson Date: Wed, 14 Jan 2026 12:15:00 +0100 Subject: [PATCH 10/10] Create 2026-01-29.mdx --- changelog/2026/2026-01-29.mdx | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 changelog/2026/2026-01-29.mdx diff --git a/changelog/2026/2026-01-29.mdx b/changelog/2026/2026-01-29.mdx new file mode 100644 index 0000000000..81d12e4eb3 --- /dev/null +++ b/changelog/2026/2026-01-29.mdx @@ -0,0 +1,3 @@ + + +📅 Set card spending limits based on calendar periods (resetting monthly on the 1st, weekly on Monday, or daily at midnight) instead of rolling periods. Calendar-based limits make it easier for finance teams to control budgets by calendar month, week, or day. Configure calendar limits using the new `mode` field in [`SpendingLimitInput`](https://api-reference.swan.io/inputs/spending-limit-input/) with options for `daily`, `weekly`, or `monthly` calendar recurrence. \ No newline at end of file