Skip to main content

Documentation Index

Fetch the complete documentation index at: https://apidocs.synchpay.dev/llms.txt

Use this file to discover all available pages before exploring further.

Overview

Payment plans let you charge users on a recurring schedule without creating each payment request manually. You define the amount, frequency, and start date, then add one or more payers who consent to the plan. Once a plan is active, SynchPay automatically generates payment requests at each interval and processes them through autopay.

How it works

1

Create a payment plan

Define the recurring amount, frequency (for example, every 1 month or every 2 weeks), start date, and the bank account that will receive funds.
2

Add payer consent

For each user you want to charge, create a consent record on the plan. The user must accept the consent before payments begin.
3

Activate the plan

Once at least one payer has accepted, activate the plan. SynchPay begins generating payment requests automatically at each interval.
4

Automatic payment processing

When a payment request is due, SynchPay checks the payer’s debit authorization and processes the payment automatically. You receive a webhook for each completed payment.

Payment plan lifecycle

A payment plan moves through these statuses:
StatusDescription
DraftInitial state after creation. The plan is not yet generating payments.
ActiveThe plan is live and generating payment requests on schedule.
PausedTemporarily stopped. No new payment requests are created until reactivated.
FailedThe plan encountered an error. You can reactivate or cancel it.
CanceledPermanently stopped. This is a final state.
CompletedAll payments have been fulfilled. This is a final state.

Status transitions

FromCan move to
DraftActive, Canceled
ActiveDraft, Paused, Failed, Canceled, Completed
PausedActive, Canceled
FailedActive, Canceled
Canceled
Completed

Frequency options

You configure how often payments recur using two fields:
  • IntervalValue — a number representing how many units between each payment (for example, 1, 2, 3)
  • IntervalUnit — the time unit: Day, Week, Month, Quarter, or Year
Examples:
IntervalValueIntervalUnitSchedule
1MonthEvery month
2WeekEvery 2 weeks
1QuarterEvery quarter
7DayEvery 7 days
Before a user can be charged through a payment plan, they must provide consent. Each consent record links a payer to the plan and tracks their agreement status.
StatusDescription
PendingConsent requested but the user has not yet responded.
AcceptedThe user agreed to the recurring payments.
DeclinedThe user rejected the request. This is a final state.
CanceledThe company canceled the consent. This is a final state.
RevokedThe user withdrew a previously accepted consent. This is a final state.
FromCan move to
PendingAccepted, Declined, Canceled
AcceptedRevoked, Canceled
Declined
Canceled
Revoked
Only payers with Accepted consent generate payment requests. If a payer declines or revokes consent, no further payments are created for them.
When you create a consent record, SynchPay sends the payer a notification prompting them to accept or decline. You can identify a payer by either their SynchPay profile ID (for registered users) or their phone number (for users not yet registered).

Creating a payment plan

Endpoint

  • URL: https://api.synchpay.com/payment/plan
  • Method: POST
  • Authorization: Bearer <AccessToken>

Request body

ParameterTypeDescriptionRequired
AmountobjectPayment amount for each recurrence. Contains Value (integer, in cents) and CurrencyCode.Yes
RecipientBankAccountIdstringThe bank account ID that receives the payments.Yes
StartDatestringWhen recurring payments begin, in date-only format (for example, "2026-04-01").Yes
TimeZonestringThe IANA timezone for the start date (for example, "America/New_York").Yes
IntervalValueintegerNumber of time units between each payment.Yes
IntervalUnitstringTime unit for recurrence: Day, Week, Month, Quarter, or Year.Yes
The StartDate must not be in the past (evaluated in the timezone you specify). IntervalValue must be greater than zero. The plan is scoped to your company — only users authorized for the same company can manage it.

Example request

{
  "Amount": {
    "Value": 5000,
    "CurrencyCode": "USD"
  },
  "RecipientBankAccountId": "a3f1c2d4-5678-9abc-def0-123456789abc",
  "StartDate": "2026-04-01",
  "TimeZone": "America/New_York",
  "IntervalValue": 1,
  "IntervalUnit": "Month"
}

Response

{
  "PaymentPlanId": "d4e5f6a7-b8c9-0123-4567-89abcdef0123"
}
After creating a plan, add one or more payers by creating consent records.

Endpoint

  • URL: https://api.synchpay.com/payment/plan/{paymentPlanId}/consent
  • Method: POST
  • Authorization: Bearer <AccessToken>

Path parameters

ParameterTypeDescriptionRequired
paymentPlanIdstringThe payment plan ID to add the payer to.Yes

Request body

ParameterTypeDescriptionRequired
SenderSynchProfileIdstringThe payer’s SynchPay profile ID. Required if PhoneNumber is not provided.No*
PhoneNumberstringThe payer’s phone number in international format (for example, +15551234567). Required if SenderSynchProfileId is not provided.No*
* You must provide at least one of SenderSynchProfileId or PhoneNumber.

Example request

{
  "SenderSynchProfileId": "6e8d9257-bd5f-45cf-8f29-6d0ae8a6d991"
}

Retrieving payer consents

Payers can list and inspect their consent records to see which recurring plans they are enrolled in.

List consents

Returns payment plan consents for the authenticated user. Only consents with Pending or Accepted status are included — declined, canceled, and revoked consents are excluded from the list.
  • URL: https://api.synchpay.com/transaction/paymentplanconsent
  • Method: GET
  • Authorization: Bearer <UserToken>

Response

{
  "Consents": [
    {
      "Id": "b1c2d3e4-f5a6-7890-abcd-ef1234567890",
      "PaymentPlanId": "d4e5f6a7-b8c9-0123-4567-89abcdef0123",
      "RecipientName": "Acme Dental",
      "Amount": {
        "Value": 5000,
        "CurrencyCode": "USD"
      },
      "IntervalValue": 1,
      "IntervalUnit": "Month",
      "NextDueDate": "2026-05-01",
      "Status": "Accepted"
    }
  ]
}
Returns details for a specific consent, including its current status.
  • URL: https://api.synchpay.com/transaction/paymentplanconsent/{paymentPlanConsentId}
  • Method: GET
  • Authorization: Bearer <UserToken>

Response

{
  "Id": "b1c2d3e4-f5a6-7890-abcd-ef1234567890",
  "PaymentPlanId": "d4e5f6a7-b8c9-0123-4567-89abcdef0123",
  "RecipientCompanyId": "0bba248e-2d4b-4666-bf04-dd3c65c8fc03",
  "RecipientCompany": {
    "Name": "Acme Dental",
    "ContactNumber": "+15559876543",
    "EmailAddress": "billing@acmedental.com",
    "FeeMultiplier": null,
    "WebsiteUrl": "https://acmedental.com",
    "Address": {
      "StreetNumberAndName": "456 Oak Ave",
      "ApartmentNumber": null,
      "City": "Springfield",
      "ZipCode": "62704",
      "State": "IL",
      "Country": "US"
    }
  },
  "Amount": {
    "Value": 5000,
    "CurrencyCode": "USD"
  },
  "IntervalValue": 1,
  "IntervalUnit": "Month",
  "NextDueDate": "2026-05-01",
  "Status": "Accepted"
}
These fields are shared by both the list and single-consent endpoints:
FieldTypeDescription
IdstringUnique identifier for the consent record.
PaymentPlanIdstringThe payment plan this consent belongs to.
AmountobjectRecurring payment amount. Contains Value (integer, in cents) and CurrencyCode.
IntervalValueintegerNumber of time units between each payment.
IntervalUnitstringTime unit for recurrence (Day, Week, Month, Quarter, or Year).
NextDueDatestringThe next scheduled payment date in YYYY-MM-DD format.
StatusstringCurrent consent status. See consent statuses.
The list endpoint includes a summary field for the recipient:
FieldTypeDescription
RecipientNamestringDisplay name of the company receiving payments.
The single-consent endpoint includes full company details:
FieldTypeDescription
RecipientCompanyIdstringUnique identifier of the company receiving payments.
RecipientCompanyobjectFull details of the company receiving payments. See fields below.

RecipientCompany fields

FieldTypeDescription
NamestringCompany display name.
ContactNumberstringCompany phone number. May be null.
EmailAddressstringCompany email address.
FeeMultipliernumberFee multiplier applied to payments. May be null.
WebsiteUrlstringCompany website URL. May be null.
AddressobjectCompany address. Contains StreetNumberAndName, ApartmentNumber, City, ZipCode, State, and Country.
Payers can respond to a consent request using these endpoints:
ActionMethodURL
AcceptPOST/transaction/paymentplanconsent/{paymentPlanConsentId}/accept
DeclinePOST/transaction/paymentplanconsent/{paymentPlanConsentId}/decline
Both endpoints require Bearer <UserToken> authorization. The decline endpoint handles both pending and accepted consents:
  • Pending consent — moves to Declined. The payer is rejecting the consent request.
  • Accepted consent — moves to Revoked. The payer is withdrawing from a previously accepted plan.
You don’t need to call a separate revoke endpoint. The decline action automatically determines the correct resulting status based on the consent’s current state.

Managing a payment plan

Use these endpoints to change the status of an existing plan:
ActionMethodURLDescription
ActivatePUT/payment/plan/{paymentPlanId}/activateStart generating payments.
PausePUT/payment/plan/{paymentPlanId}/pauseTemporarily stop payments.
CancelPUT/payment/plan/{paymentPlanId}/cancelPermanently stop the plan.
All management endpoints require Bearer <AccessToken> authorization.

Payer experience in the mobile app

When you create a consent record through the API, the payer receives a push notification prompting them to review the recurring payment request. Here is what happens on their end: The payer opens the notification and sees a consent request screen that displays:
  • The recurring amount and frequency (for example, “$50.00/mo”)
  • The date of the first scheduled payment
  • The bank account the payment will be drawn from
  • The name and details of the requesting company
The payer slides to accept the recurring payment or navigates back to decline it. You can share a direct link that takes a payer straight to the consent review screen. The link format is:
https://synchpay.com/RecurringPayment/{planConsentId}
Replace {planConsentId} with the consent ID returned when you add payer consent. When the payer opens the link:
  1. If they have the SynchPay mobile app installed, the link opens the app directly to the consent request screen (via universal links on iOS and app links on Android).
  2. If they open the link in a browser, the web app loads the consent request screen.
  3. If the payer is not logged in, they are prompted to log in first and then redirected to the consent request.
Direct links are useful when you want to send consent requests through your own communication channels (for example, email, SMS, or in-app messages) instead of relying solely on push notifications.

Upcoming payments on the Payments tab

After a payer accepts a recurring plan, their Payments tab shows an Upcoming section at the bottom of the unpaid payments list. Each upcoming recurring payment displays the recipient name, the next due date, and the amount. Tapping an upcoming payment opens a detail sheet where the payer can cancel the recurring plan.

Managing recurring payments from the Profile

Payers who have active recurring payment consents see a Recurring payments card on their Profile screen. Tapping it opens a list of all active plans with the recipient name, amount, and frequency. The payer can select any plan to cancel it.
When a payer cancels a recurring payment from the app, the consent moves to Revoked status. You receive the updated consent status through the API when you query the consent list or individual consent endpoints.

Filtering by frequency

The Payments tab includes a Frequency filter that lets payers categorize their payments into:
  • One-time — single payments
  • Irregular — occasional payments without a fixed schedule
  • Subscriptions — payments that recur at a regular frequency
This helps payers distinguish between one-off charges and ongoing recurring plans.

Autopay and debit authorization

Recurring payment plans work with the debit authorization system. When a payment request is generated from a plan:
  1. SynchPay checks whether the payer has an approved debit authorization.
  2. If the payment amount is within the authorized limit, the payment is automatically scheduled and processed on the due date.
  3. If the payer does not have a valid debit authorization or the amount exceeds the limit, the payment request is created in Pending status and requires manual approval.
To ensure fully automated recurring payments, set up debit authorization for each payer before activating the plan. See managing debit authorization for details.

Payment generation

SynchPay automatically generates individual payment requests from active plans:
  • Payment requests are created for each payer with Accepted consent.
  • The first payment’s due date is the plan’s StartDate. Each subsequent due date is calculated by adding the configured interval to the previous payment’s due date.
  • SynchPay generates one payment at a time per consent. The next payment is created only after the current one’s due date has passed.
  • If the due date falls on the current day and the payer has a valid debit authorization, SynchPay attempts to process the payment immediately.
  • Each generated payment request follows the same payment statuses as manually created payments.
  • You receive payment status webhooks for each generated payment, so your existing webhook handlers work without changes.
Last modified on April 5, 2026