Schedule Service API
The Schedule and Recurring service allows easy integration for creating, modifying, and retrieving of Schedule and Recurring information. Schedules are retrieved, created and modified through GET
, POST
, PATCH
, and PUT
requests.
Authentication and authorization for the ScheduleService
will be done by JWT
in the HTTP Authorization Header
. This JWT
can be obtained by passing a valid username
and password
to the AuthenticationService.
In general, fields will only be returned if their value is not null or empty.
All requests that fail validation will return an HTTP response code 403 - Bad Request
and a RequestErrorList
containing details pertaining to the error(s).
Request Error List
Request Error List Object:
{
"requestErrorList": [
{
"code": "10028",
"description": "Missing required field",
"apiFieldNameList": [
{
"apiFieldName": "firstName"
}
]
},
{
"code": "10028",
"description": "Missing required field",
"apiFieldNameList": [
{
"apiFieldName": "owedAmount"
}
]
}
]
}
Attribute | Description | ||||||||||||
requestErrorList
ListN/A
|
A list of RequestError objects containing validation errors.
Details
|
The first step will be to save some settings that will be used in schedule creation.
Schedule Settings
POST
to save new schedule setting.
PUT
to overwrite a single schedule setting by settingId
.
GET
to retrieve list of schedule settings.
GET
to retrieve single schedule setting by settingId
.
GET
to retrieve single schedule setting by name
.
DELETE
to delete single schedule setting by settingId
.
ScheduleSetting Object
Full Setting Object
>Setting Object: ```json { "settingId": 3, "companyId": 1234, "name": "MySettingName", "recurSetting": "{\"recurrenceRule\":\"FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=1;\",\"paymentTypes\":[\"CARD\",\"CHECK\"],\"minimumPaymentAmount\":\"25\",\"allowedFrequencies\":[\"MONTHLY\",\"WEEKLY\",\"BI_WEEKLY\",\"BI_MONTHLY\"],\"checkReminderDays\":\"10\",\"cardReminderDays\":\"5\"}", "date": "2018-01-01 12:00:00", "user": "testUser" } ```Attribute | Description |
settingId
Numeric 8
|
The id of the schedule setting. |
companyId
Numeric 8
|
The company id of the company the setting belongs to. |
name
Alpha 75
|
The name of the schedule setting. |
description
Alphanumeric 255
|
Description of the schedule setting. |
recurSetting
JSON65000
|
The recurring schedule settings. |
date
Date19
|
The date the setting was updated.
Format: ISO-8601 (YYYY-MM-DD HH:mm:ss)
|
user
Alphanumeric75
|
The user that last updated the schedule setting. |
--Setting Creation
POST :
Test endpoint: https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings
Live endpoint: https://schedule.pdc4u.com/ScheduleService/api/v1_0/settings
Sample Response:
{
"settingId": 4,
"companyId": 1234,
"name": "MySettingName",
"recurSetting": "{\"recurrenceRule\":\"FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=1;\",\"paymentTypes\":[\"CARD\",\"CHECK\"],\"minimumPaymentAmount\":\"25\",\"allowedFrequencies\":[\"MONTHLY\",\"WEEKLY\",\"BI_WEEKLY\",\"BI_MONTHLY\"],\"checkReminderDays\":\"10\",\"cardReminderDays\":\"5\"}",
"date": "2020-01-01 17:00:00",
"user": "testUser"
}
Attribute | Description | ||||||||||||||||
name
Alpha 75
Required
|
The name of the schedule setting. This must be unique. | ||||||||||||||||
description
Alphanumeric 255
|
Description of the schedule setting. | ||||||||||||||||
recurSetting
JSON
Required
|
The recurring schedule settings. This value must be a JSON encoded string.
Expected JSON fields
|
||||||||||||||||
user
Alphanumeric75
Required
|
The user that is creating the schedule setting. |
--Setting Modification
PUT :
Test endpoint: https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/{settingId}
Live endpoint: https://schedule.pdc4u.com/ScheduleService/api/v1_0/settings/{settingId}
Sample Response:
{
"settingId": 4,
"companyId": 1234,
"name": "MySettingNameUpdated",
"recurSetting": "{\"recurrenceRule\":\"FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=1;\",\"paymentTypes\":[\"CARD\",\"CHECK\"],\"minimumPaymentAmount\":\"25\",\"allowedFrequencies\":[\"MONTHLY\",\"WEEKLY\",\"BI_WEEKLY\",\"BI_MONTHLY\"],\"checkReminderDays\":\"10\",\"cardReminderDays\":\"5\"}",
"date": "2020-01-02 17:00:00",
"user": "updatingUser"
}
PUT
requests will completely override the existing specified (by settingId
in the URL) setting. As such, the request object the same as the setting creation.
Setting Modification
Attribute
Description
The name of the schedule setting. This must be unique.
Description of the schedule setting.
The recurring schedule settings. This value must be a JSON encoded string.
Expected JSON fields
The schedule payment types in a list.
CARD
- schedules with card transactions will be allowed
CHECK
- schedules with check transactions will be allowed
PAYPAL
- schedules with PayPal transactions will be allowed
The minimum payment allowed per payment on a schedule. This value must be between 1 and 10000.
The allowed payment frequencies, in a list.
MONTHLY
- once per month
BI_MONTHLY
- 2 times per month
BI_WEEKLY
- once every 2 weeks
WEEKLY
- once per week
DAILY
- once per day
The number of days prior to a Check payment date to send a reminder. The reminder will be sent to the
associated email address. If the schedule has no email address, reminders will NOT be sent.
This value must be between 3 and 14.
The number of days prior to a Card payment date to send a reminder. The reminder will be sent to the
associated email address. If the schedule has no email address, reminders will NOT be sent.
This value must be between 3 and 14.
The number of days prior to a PayPal payment date to send a reminder. The reminder will be sent to the
associated email address. If the schedule has no email address, reminders will NOT be sent.
This value must be between 3 and 14.
This is the recurrence rule that you want the schedules using this setting to calculate the payments
against.
This follows the ICal RRule standard, with
the
exception that DTSTART will only accept yyyyMMdd format. Any timestamp included as part of DTSTART will
be
ignored.
There is also no need to start a rule with "RRULE="
Example valid rule "FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=1;". The DTSTART value cannot be in the past or
more than
maxDaysToStart
days in the future and needs to be formatted "yyyyMMdd".
The INTERVAL has the following valid ranges: MONTHLY 1-12, WEEKLY 1-5, DAILY 1-31.
See note about Schedule Payment Processing.
The number of days in the future that a schedule must start when providing
DTSTART
in the Schedule recurrenceRule
. Defaults to 13 months if not provided.
The user that is creating the schedule setting.
--Setting Retrieval List
GET :
Test endpoint: https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings
Live endpoint: https://schedule.pdc4u.com/ScheduleService/api/v1_0/settings
Sample Response:
[
{
"settingId": 2,
"companyId": 1234,
"name": "Name of a setting",
"recurSetting": "{\"recurrenceRule\":\"FREQ=WEEKLY;INTERVAL=1;\",\"paymentTypes\":[\"CARD\"],\"minimumPaymentAmount\":\"100\",\"allowedFrequencies\":[\"MONTHLY\",\"WEEKLY\"],\"checkReminderDays\":\"10\",\"cardReminderDays\":\"5\"}",
"date": "2019-11-09 01:01:01",
"user": "betterTester"
},
{
"settingId": 3,
"companyId": 1234,
"name": "Another setting",
"recurSetting": "{\"recurrenceRule\":\"FREQ=MONTHLY;INTERVAL=2;BYMONTHDAY=15;\",\"paymentTypes\":[\"CHECK\"],\"minimumPaymentAmount\":\"1000\",\"allowedFrequencies\":[\"MONTHLY\"],\"checkReminderDays\":\"13\",\"cardReminderDays\":\"13\"}",
"date": "2019-11-19 12:00:00",
"user": "anotherTester@test.com"
},
{
"settingId": 4,
"companyId": 1234,
"name": "MySettingName",
"recurSetting": "{\"recurrenceRule\":\"FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=1;\",\"paymentTypes\":[\"CARD\",\"CHECK\"],\"minimumPaymentAmount\":\"25\",\"allowedFrequencies\":[\"MONTHLY\",\"WEEKLY\",\"BI_WEEKLY\",\"BI_MONTHLY\"],\"checkReminderDays\":\"10\",\"cardReminderDays\":\"5\"}",
"date": "2020-01-01 17:00:00",
"user": "testUser"
}
]
Retrieve a list of all previously saved schedule settings. https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings
--Setting Retrieval Individual
GET :
Test endpoint: https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/{id}
Live endpoint: https://schedule.pdc4u.com/ScheduleService/api/v1_0/settings/{id}
Sample Response:
{
"settingId": 4,
"companyId": 1234,
"name": "MySettingName",
"recurSetting": "{\"recurrenceRule\":\"FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=1;\",\"paymentTypes\":[\"CARD\",\"CHECK\"],\"minimumPaymentAmount\":\"25\",\"allowedFrequencies\":[\"MONTHLY\",\"WEEKLY\",\"BI_WEEKLY\",\"BI_MONTHLY\"],\"checkReminderDays\":\"10\",\"cardReminderDays\":\"5\"}",
"date": "2020-01-01 17:00:00",
"user": "testUser"
}
Retrieve an individual schedule setting by settingId
.
https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/4
--Setting Retrieval Name
GET :
Test endpoint: https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/names/{name}
Live endpoint: https://schedule.pdc4u.com/ScheduleService/api/v1_0/settings/names/{name}
Sample Response:
{
"settingId": 4,
"companyId": 1234,
"name": "MySettingName",
"recurSetting": "{\"recurrenceRule\":\"FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=1;\",\"paymentTypes\":[\"CARD\",\"CHECK\"],\"minimumPaymentAmount\":\"25\",\"allowedFrequencies\":[\"MONTHLY\",\"WEEKLY\",\"BI_WEEKLY\",\"BI_MONTHLY\"],\"checkReminderDays\":\"10\",\"cardReminderDays\":\"5\"}",
"date": "2020-01-01 17:00:00",
"user": "testUser"
}
Retrieve an individual schedule setting by name
.
https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/names/MySettingName
--Setting Deletion
DELETE :
Test endpoint: https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/{id}
Live endpoint: https://schedule.pdc4u.com/ScheduleService/api/v1_0/settings/{id}
Delete an individual schedule setting by settingId
. A setting cannot be deleted if it is associated with a schedule.
This request will return no response body, rather just a standard HTTP
status code 200
for successful deletion.
https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/4
Recurring Term
POST
to create a new recurring term record.
PUT
to modify an existing recurring term.
DELETE
to delete an exiting recurring term.
GET
to get a list of recurring terms or an individual term.
Recurring Terms can be used to restrict the run length of schedules within a specific owed amount range. For example, you can specify that schedules with an owed amount less than $1,000 can have a maximum length of 36 months. Specifying multiple recurring terms allows for different lengths of schedules for different amounts. Specifying a recurring term with no maximum amount would allow a maximum schedule duration to be specified for any schedule amount.
Recurring Term Object
Full Recurring Term Object
>Recurring Term Object: ```json { "id": 3, "maximumAmount": 1000, "termMonth": 36, "date": "2020-01-01 12:00:00", "maximumPayments": 23, "user": "testUser" } ```Attribute | Description |
---|---|
id
Numeric20
|
Id for the recurring term. |
maximumAmount
Numeric12
|
Maximum amount for the term. |
termMonth
AlphaNumeric3
|
The maximum amount of months a schedule with an owedAmount within the maximumAmount
can run.
|
date
Date19
|
Date the term was last modified
Format: URL Encoded ISO-8601
|
user
AlphaNumeric75
|
User creating or modifying the record. |
maximumPayments
Numeric
|
READONLY The maximum amount of payments that can be created with this term and the recurrenceRule from the
specified setting . Only returns when an amount and settingId are
specified in the URL.
|
--Recurring Term Creation
POST :
Test endpoint: https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms
Live endpoint: https://schedule.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms
Sample Response:
{
"id": 3,
"maximumAmount": 1000,
"termMonth": 36,
"date": "2020-01-01 12:00:00",
"user": "testUser"
}
Attribute | Description |
---|---|
maximumAmount
Numeric12
|
Maximum amount for the term. Leaving the amount blank will make the record unbounded. This value must be unique. |
termMonth
AlphaNumeric3
Required
|
The maximum amount of months a schedule with an owedAmount within the maximumAmount
can run.
|
user
AlphaNumeric75
Required
|
User creating or modifying the record. |
--Recurring Term Modification
PUT :
Test endpoint: https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms/{recurringTermId}
Live endpoint: https://schedule.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms/{recurringTermId}
Sample Response:
{
"id": 3,
"maximumAmount": 1000,
"termMonth": 36,
"date": "2020-01-01 12:00:00",
"user": "testUser"
}
PUT
requests will completely override the existing specified (by recurringTermId
in the URL) recurring term. As such, the request object is the same as the recurring term creation.
Schedule Modification
Attribute
Description
Maximum amount for the term. Leaving the amount blank will make the record unbounded. This value must be unique.
The maximum amount of months a schedule with an
owedAmount
within the maximumAmount
can run.
User creating or modifying the record.
--Recurring Term Retrieval (List)
GET :
Test endpoint: https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms/
Live endpoint: https://schedule.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms/
Sample Response:
{
"recurringTerms": [
{
"id": 3,
"maximumAmount": 1000,
"termMonth": 36,
"date": "2020-01-01 12:00:00",
"user": "testUser"
},
{
"id": 4,
"termMonth": 48,
"date": "2019-01-01 12:00:00",
"user": "testUserHere"
},
{
"id": 9,
"maximumAmount": 20000,
"termMonth": 36,
"date": "2019-01-06 12:00:00",
"user": "oneMoreUser"
}
]
}
Retrieve an object with a list of all previously saved recurring terms. https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms
--Recurring Term Retrieval (Individual)
GET :
Test endpoint: https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms/{id}
Live endpoint: https://schedule.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms/{id}
Sample Response:
{
"id": 9,
"maximumAmount": 20000,
"termMonth": 36,
"date": "2019-01-06 12:00:00",
"user": "oneMoreUser"
}
Retrieve an individual recurring term by recurringTermId
.
https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/recurringTerms/9
--Recurring Term Retrieval (By Amount)
GET :
Test endpoint: https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms/
Live endpoint: https://schedule.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms/
Sample Response:
{
"id": 3,
"maximumAmount": 1000,
"termMonth": 36,
"date": "2020-01-01 12:00:00",
"maximumPayments": "20",
"user": "testUser"
}
Retrieve a recurring term based on a specified amount. This will return the term that would be used if a schedule with a specified amount were to be created. The maximumPayments
is the maximum amount of payments
that would be allowed for a schedule of the specified amount, based on the Setting
specified.
https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms?amount=850
Attribute | Description |
---|---|
amount
Numeric12
|
The amount to retrieve the recurring term for. |
settingId
Numeric8
|
The setting that will be used for schedule creation. Passing this value, along with the amount , will
allow the service to return the correct recurringTerm for the amount,
and also the maximum number of payments possible for a schedule created using this
settingId and this amount .
|
recurrenceRule
Alphanumeric255
|
This is the recurrence rule that you want the schedules using this setting to calculate the payments
against. Providing this in this request will allow overriding of the recurrenceRule specified
by the settingId and will calculate the maximum number of payments based on the amount
and this recurrenceRule . This follows the ICal RRule standard, with the exception that DTSTART will only accept yyyyMMdd format. Any timestamp included as part of DTSTART will be ignored. There is also no need to start a rule with "RRULE=" Example valid rule "FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=1;". The DTSTART value cannot be in the past or more than maxDaysToStart days in the future and needs to be formatted "yyyyMMdd".
The INTERVAL has the following valid ranges: MONTHLY 1-12, WEEKLY 1-5, DAILY 1-31.
See note about Schedule Payment Processing. |
--Recurring Term Deletion
DELETE :
Test endpoint: https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/recurringTerms/{id}
Live endpoint: https://schedule.pdc4u.com/ScheduleService/api/v1_0/settings/recurringTerms/{id}
Delete an individual recurring term by recurringTermId
.
This request will return no response body, rather just a standard HTTP
status code 200
for successful deletion.
https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/recurringTerms/9
Schedule Preview
POST
to create a preview of a schedule. This preview will not be saved until the schedules
endpoint is called with a POST
or a PUT
request to save the schedule.
Schedule Preview Object
Complete Schedule Preview Object
>Schedule Preview Object ```json { "owedAmount": 1500, "settingId": 14434, "initialPaymentAmount": 500, "adjustmentAmount": 500, "paymentAmount": 100, "numberOfPayments": 5, "payments": [ { "status": "PENDING", "paymentAmount": 100, "paymentDate": "2020-02-01" }, { "status": "PENDING", "paymentAmount": 100, "paymentDate": "2020-03-01" }, { "status": "PENDING", "paymentAmount": 100, "paymentDate": "2020-04-01" }, { "status": "PENDING", "paymentAmount": 100, "paymentDate": "2020-05-01" }, { "status": "PENDING", "paymentAmount": 100.00, "paymentDate": "2020-06-01" } ] } ```Attribute | Description | ||
---|---|---|---|
owedAmount
Numeric11
|
The original amount, or the amount owed by the debtor. | ||
settingId
Numeric 8
|
The id of the schedule setting to be used to generate the schedule preview. | ||
initialPaymentAmount
Numeric11
Conditional
|
An amount processed before the schedule is started. This will be deducted from the owedAmount .
If processInitialPaymentOnActivation is true this amount is required and will be processed. Otherwise this amount will not be processed, and is on the schedule for reference only. |
||
processInitialPaymentOnActivation
Boolean5
|
If this is true , the initialPaymentAmount is required. The initialPaymentAmount will be inserted as the first payment and will be processed when the schedule goes ACTIVE .
See note about Schedule Payment Processing. |
||
adjustmentAmount
Numeric11
|
An amount to be deducted from the owedAmount .
This amount will not be processed by the schedule, but is on the schedule for reference only.
|
||
numberOfPayments
Numeric3
|
The number of payments desired for the schedule. If this is provided the paymentAmount cannot be
provided. If the number of payments requested is too great, causing each payment to be less than the minimumPaymentAmount
as specified by the ScheduleSetting ,
an error message will be provided that indicates the maximum number of payments.
|
||
paymentAmount
Numeric11
|
This is the amount that will be charged for each scheduled payment. If this is provided the
numberOfPayments
cannot be provided. If the payment amount is too small, causing the schedule length to exceed the
termMonth
for this amount, an error message will be provided that indicates the minimum value.
|
||
recurrenceRule
Alphanumeric255
|
This is the recurrence rule that you want the schedule to calculate the payments against. Passing in a
recurrence rule here will override the recurrence that was saved as part of the ScheduleSetting
referenced by the settingId .
This follows the ICal RRule standard, with the
exception that DTSTART will only accept yyyyMMdd format. Any timestamp included as part of DTSTART will be
ignored.
Restrictions on which frequencies are allowed are stored in the ScheduleSetting object.
There is no need to start a rule with "RRULE=". The DTSTART value cannot be in the past or more than maxDaysToStart days
in the future and needs to be formatted "yyyyMMdd".
The INTERVAL has the following valid ranges: MONTHLY 1-12, WEEKLY 1-5, DAILY 1-31.
Example valid rule "FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=1;".
See note about Schedule Payment Processing. |
||
state
Alpha2
Conditional
|
The state for the person associated with this schedule. Some payment gateway processors require this. | ||
zip
NumericString5
Conditional
|
The zip code for the person associated with this schedule. Some payment gateway processors require this. | ||
feeAmount
Numeric11
|
The fee which will apply to each scheduled payment | ||
feePercent
Decimal4
|
The fee percent which will be used to calculate the fee on to each scheduled payment | ||
initialFeeAmount
Numeric11
|
The fee which will apply to the initial payment if processInitialPaymentOnActivation is true
|
||
initialFeePercent
Decimal4
|
The fee percent which will be used to calculate the initial payment fee if processInitialPaymentOnActivation is true
|
||
billingCard
ObjectN/A
|
BillingCard object. The accountDirective field is validated to determine if the directive is set up with a Zero Cost Fee so the payment feeAmount is automatically calculatedDetails
|
||
billingCheck
ObjectN/A
|
BillingCheck object. The accountDirective field is validated to determine if the directive is set up with a Zero Cost Fee so the payment feeAmount is automatically calculatedDetails
|
||
billingPayPal
ObjectN/A
|
BillingPayPal object. The accountDirective field is validated to determine if the directive is set up with a Zero Cost Fee so the payment feeAmount is automatically calculatedDetails
|
||
payments
ListN/A
|
List of SchedulePayment objects. Each SchedulePayment will include only a paymentAmount
and paymentDate .
See note about Schedule Payment Processing. |
--Schedule Preview Creation
POST :
test urls:
https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/previews
live urls:
https://schedule.pdc4u.com/ScheduleService/api/v1_0/schedules/previews
Sample Response:
{
"owedAmount": 1500,
"settingId": 14434,
"initialPaymentAmount": 500,
"adjustmentAmount": 500,
"paymentAmount": 100,
"numberOfPayments": 5,
"payments": [
{
"status": "PENDING",
"paymentAmount": 100,
"paymentDate": "2020-02-01"
},
{
"status": "PENDING",
"paymentAmount": 100,
"paymentDate": "2020-03-01"
},
{
"status": "PENDING",
"paymentAmount": 100,
"paymentDate": "2020-04-01"
},
{
"status": "PENDING",
"paymentAmount": 100,
"paymentDate": "2020-05-01"
},
{
"status": "PENDING",
"paymentAmount": 100.00,
"paymentDate": "2020-06-01"
}
]
}
Attribute | Description | ||
---|---|---|---|
owedAmount
Numeric11
Required
|
The original amount, or the amount owed by the debtor. | ||
settingId
Numeric 8
Required
|
The id of the ScheduleSetting to be used to generate the schedule preview.
|
||
initialPaymentAmount
Numeric11
Conditional
|
An amount processed before the schedule is started. This will be deducted from the owedAmount .
If processInitialPaymentOnActivation is true this amount is required and will be processed. Otherwise this amount will not be processed, and is on the schedule for reference only. |
||
processInitialPaymentOnActivation
Boolean5
|
If this is true , the initialPaymentAmount is required. The initialPaymentAmount will be inserted as the first payment and will be processed when the schedule goes ACTIVE .
See note about Schedule Payment Processing. |
||
adjustmentAmount
Numeric11
|
An amount to be deducted from the owedAmount .
This amount will not be processed by the schedule, but is on the schedule for reference only.
|
||
numberOfPayments
Numeric3
|
The number of payments desired for the schedule. If this is provided the paymentAmount cannot be
provided. If the number of payments requested is too great, causing each payment to be less than the minimumPaymentAmount specified in the ScheduleSetting ,
an error message will be provided that indicates the maximum number of payments.
|
||
paymentAmount
Numeric11
|
This is the amount that will be charged for each scheduled payment. If this is provided the
numberOfPayments
cannot be provided. If the payment amount is too small, causing the schedule length to exceed the
termMonth
for this amount, an error message will be provided that indicates the minimum value.
|
||
recurrenceRule
Alphanumeric255
|
This is the recurrence rule that you want the schedule to calculate the payments against. Passing in a
recurrence rule here will override the recurrence that was saved as part of the ScheduleSetting
referenced by the settingId .
This follows the ICal RRule standard, with the
exception that DTSTART will only accept yyyyMMdd format. Any timestamp included as part of DTSTART will be
ignored.
Restrictions on which frequencies are allowed are stored in the ScheduleSetting object.
There is no need to start a rule with "RRULE=". The DTSTART value cannot be in the past or more than maxDaysToStart days
in the future and needs to be formatted "yyyyMMdd".
The INTERVAL has the following valid ranges: MONTHLY 1-12, WEEKLY 1-5, DAILY 1-31.
Example valid rule "FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=1;".
See note about Schedule Payment Processing. |
||
state
Alpha2
Conditional
|
The state for the person associated with this schedule. Some payment gateway processors require this. | ||
zip
NumericString5
Conditional
|
The zip code for the person associated with this schedule. Some payment gateway processors require this. | ||
feeAmount
Numeric11
|
The fee which will apply to each scheduled payment | ||
feePercent
Decimal4
|
The fee percent which will be used to calculate the fee on to each scheduled payment | ||
initialFeeAmount
Numeric11
|
The fee which will apply to the initial payment if processInitialPaymentOnActivation is true
|
||
initialFeePercent
Decimal4
|
The fee percent which will be used to calculate the initial payment fee if processInitialPaymentOnActivation is true
|
||
billingCard
ObjectN/A
|
BillingCard object. The accountDirective field is validated to determine if the directive is set up with a Zero Cost Fee so the payment feeAmount is automatically calculatedDetails
|
||
billingCheck
ObjectN/A
|
BillingCheck object. The accountDirective field is validated to determine if the directive is set up with a Zero Cost Fee so the payment feeAmount is automatically calculatedDetails
|
||
billingPayPal
ObjectN/A
|
BillingPayPal object. The accountDirective field is validated to determine if the directive is set up with a Zero Cost Fee so the payment feeAmount is automatically calculatedDetails
|
Schedule
POST
to create a new schedule.
PUT
to modify an existing schedule. This will ALWAYS regenerate the payment list based on the updated request parameters. All original values will be overwritten with the updated parameters.
PATCH
to modify an existing schedule. This will NEVER regenerate the payment list and will only modify specified parameters. Passing in an empty value for a parameter will remove the stored value for that parameter.
DELETE
to delete an existing schedule. Schedules with a payment that has been attempted, either successful or failed, cannot be deleted.
GET
to get a list of schedules. The READONLY fields will only be present on this endpoint.
Schedule Object
Complete Schedule Object
>Schedule Object: ```json { "id": 9107, "companyId": 1234, "status": "ACTIVE", "settingId": 2, "paymentMethod": "CARD", "requestPaymentData": false, "firstName": "Test", "lastName": "McTester", "accountNumber": "4654", "numberOfPayments": 4, "paymentAmount": 100.00, "memo": "I am making a schedule", "emailAddress": "test@test.com", "sendReceiptToEmailAddress": true, "phoneNumber": "1234567890", "sendAuthorizationRequest": true, "processInitialPaymentOnActivation": false, "authorization": { "pinDescription": "Last four of card number", "verificationPin": "1234", "timeoutMinutes": 30, "eventRecipientList": [ { "emailAddress": "someone@example.com" } ] }, "flowId": 2, "addressOne": "234 Test Street", "addressTwo": "Suite 3", "city": "Ogden", "state": "UT", "zip": "84401", "zipPlusFour": "1234", "country": "US", "origin": "EXT", "locationId": "12", "recurrenceRule": "FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=1", "username": "testUser", "createUser": "testUser", "updateUser": "testUser", "createDate": "2012-06-26 12:10:55", "updateDate": "2014-01-16 10:19:45", "owedAmount": 900, "initialPaymentAmount": 500, "adjustmentAmount": 100, "pendingAmount": 100.00, "nextPaymentAmount": 100, "collectedAmount": 200.00, "unsuccessfulAmount": 100.00, "totalExpectedAmount": 300.00, "nextPaymentDate": "2014-01-24", "pendingCount": 1, "collectedCount": 2, "unsuccessfulCount": 1, "totalExpectedCount": 4, "billingLastFour": "2224", "billingCard": { "cardToken": "aCardToken123456", "expirationMonth": 4, "expirationYear": 16, "accountDirective": "888-1" }, "billingCheck": { "bankAccountNumber": "aBankToken123456", "routingNumber": "123456789", "bankAccountType": "CHECKING", "accountDirective": "123-1" }, "payments": [ { "paymentId": 33, "status": "PAID", "paymentAmount": 100.00, "paymentDate": "2012-11-22", "arrivalId": 43, "transactionId": 12345, "paymentAttempts": [ { "arrivalId": 43, "transactionId": 12345, "attemptDate": "2019-11-22T11:00:46.000+0000", "status": "PAID" } ] }, { "paymentId": 90739, "status": "PAID", "paymentAmount": 100.00, "paymentDate": "2013-02-17", "arrivalId": 44, "transactionId": 12346, "paymentAttempts": [ { "arrivalId": 44, "transactionId": 12346, "attemptDate": "2013-02-17T11:00:46.000+0000", "status": "PAID" } ] }, { "paymentId": 90740, "status": "FAILED", "paymentAmount": 100.00, "paymentDate": "2014-01-17", "arrivalId": 45, "transactionId": 12347, "paymentAttempts": [ { "arrivalId": 45, "transactionId": 12347, "attemptDate": "2014-01-17T11:00:46.000+0000", "status": "FAILED", "statusMessage": "Insufficient Funds" } ] }, { "paymentId": 90741, "status": "PENDING", "paymentAmount": 100.00, "paymentDate": "2014-04-24" } ], "customReceiptLabels": { "PAYMENT": "My new payment label", "ACCOUNT_NUMBER": "My new account number label", "MEMO": "My new memo label", "BANK_ACCOUNT_TYPE": "My new account type label" }, "customRenderLabels": { "SCHEDULE_STATUS": "My new schedule status label" }, "roundTripMap": { "myField1": "Custom Value 1", "myField2": "Custom Value 2" }, "scheduleHistoryList": [ { "date": "2019-11-22 11:00:46", "event": "PAYMENT_ATTEMPT", "user": "recurring" }, { "date": "2013-02-17 11:00:46", "event": "PAYMENT_ATTEMPT", "user": "recurring" }, { "date": "2014-01-17 11:00:46", "event": "PAYMENT_ATTEMPT", "user": "recurring" } ] } ```Attribute | Description |
scheduleId
Numeric10
|
READONLY The id of the schedule. This can be used to retrieve the schedule by sending an HTTP GET request
with this id in the url.
|
companyId
Numeric8
|
READONLY The companyId for which the schedule was created. |
status
AlphaN/A
|
Valid value(s):
DRAFT - Schedules in DRAFT have not yet been saved as ACTIVE .ACTIVE - Schedules that are actively processing payments.INACTIVE - Schedules that have been inactivated and are no longer running payments, though PENDING payments may still be present.COMPLETED - Schedules that have finished processing all payments, be they successful or failed.AUTHORIZE - Schedules that are pending the completion of a signature request before becoming ACTIVE .UNAUTHORIZED - Schedules of which the signature request was not completed successfully.PAYMENT_FAILED - Schedules of which the first due payment failed while trying to Activate the Schedule.BILLING_DATA - Schedules that are pending the completion of a signature request requesting payment data to be entered.Default value: DRAFT
|
settingId
Numeric 10
|
The id of the schedule setting to be used with this schedule. |
paymentMethod
Alpha5
|
The payment method to be used for processing payments on this schedule.
Valid value(s):
CARD CHECK PAYPAL |
sendFlowRequest
Boolean
|
Flag to determine if Schedule Service should send the Flow request, or if it will be requested separately using the
Flow Service API The following 2 attributes sendAuthorizationRequest and requestPaymentData
still need to be set to the proper value so the Signature Service API can build the Flow request correctly.
Default value: true
|
sendAuthorizationRequest
Boolean5
|
Whether an authorization request will be sent to the included emailAddress and/or
phoneNumber . Default: false . An authorization request will only be sent if the status of the schedule is ACTIVE ,
AUTHORIZE or UNAUTHORIZED .
When an authorization request is sent, the schedule will be set to a status of AUTHORIZE until the
account holder has completed the authorization request. When the authorization request is successfully
completed, the status of the schedule will be set to ACTIVE . |
requestPaymentData
Boolean5
|
If this is true , a flow request will be sent to the emailAddress or
phoneNumber requesting the payment information. |
processInitialPaymentOnActivation
Boolean5
|
If this is true , the initialPaymentAmount is required. The initialPaymentAmount will be inserted as the first payment and will be processed when the schedule goes ACTIVE .
See note about Schedule Payment Processing. |
firstName
Alphanumeric45
|
The first name of the person associated to this schedule. |
lastName
Alphanumeric45
|
The last name of the person associated to this schedule. |
accountNumber
Alphanumeric45
|
The accountNumber of the person associated to this schedule. |
numberOfPayments
Numeric3
|
The number of payments used for creation of the schedule. If this is provided, the paymentAmount
cannot be provided. The number of payments, along with the minimum amount per payment, must generate a schedule with less payments than the maxTerm in the setting for this schedule. If the number of payments is too
great, an error message will be provided that indicates the maximum value. If this is changed during a PUT call, then the SchedulePayments will be regenerated.
Only returns if not zero on POST or PUT requests.
|
paymentAmount
Numeric11
|
This is the amount that will be charged for each scheduled payment. If this is provided the numberOfPayments
cannot be provided. The paymentAmount, along with the term setting, must generate a schedule with less payments than the maxTerm
in the setting for this schedule. If the payment amount is too small an error message will be
provided that indicates the minimum value. If this is changed during a PUT call, then the SchedulePayments will be regenerated.
Only returns if not zero on POST or PUT requests.
|
feeAmount
Numeric11
|
The fee which will apply to each scheduled payment |
feePercent
Decimal4
|
The fee percent which will be used to calculate the fee on to each scheduled payment |
initialFeeAmount
Numeric11
|
The fee which will apply to the initial payment if processInitialPaymentOnActivation is true
|
initialFeePercent
Decimal4
|
The fee percent which will be used to calculate the initial payment fee if processInitialPaymentOnActivation is true
|
dialog
AlphaNumeric5000
Conditional
|
This dialog text comes from the Dialog Templates where each template placeholder variable has been replaced. The templates can either be generated in your system, or you can use the Generate Dialog Endpoint .
Some payment gateway processors, such as Pay N Seconds , require this.
|
memo
Alphanumeric50
|
The memo associated to the schedule. |
emailAddress
Alphanumeric75
|
An email address to associate with the schedule. Reminders will be sent to this email address prior to payments
being processed, according to the cardReminderDays or checkReminderDays or payPalReminderDays in the Setting
for this schedule.
If sendAuthorizationRequest is true , the flow request will be sent to this email
address.
If requestPaymentData is true , the flow request will be sent to this email
address. |
sendReceiptToEmailAddress
Boolean5
|
Toggle the sending of email receipts on payment processing. |
phoneNumber
Numeric10
|
A phone number to associate with the schedule. If sendAuthorizationRequest is true , the flow request will be sent to this phone
number via text message.If requestPaymentData is true , the flow request will be sent to this phone number via
text message. |
sendAuthorizationRequest
BooleanN/A
|
Whether an authorization request will be sent to the included emailAddress and/or
phoneNumber . Default: false . An authorization request will only be sent if the status of the schedule is ACTIVE ,
AUTHORIZE or UNAUTHORIZED .
When an authorization request is sent, the schedule will be set to a status of AUTHORIZE until the
account holder has completed the authorization request. When the authorization request is successfully
completed, the status of the schedule will be set to ACTIVE . |
authorization
AuthorizationN/A
|
The data relating to an authorization request. |
flowId
Numeric20
|
READONLY The id of the last flow request associated with this schedule. This will only be present if sendAuthorizationRequest
or requestPaymentData is true .
|
addressOne
Alphanumeric80
|
The address for the person associated with this schedule. |
addressTwo
Alphanumeric45
|
The second part of the address for the person associated with this schedule. |
city
Alphanumeric45
|
The city for the person associated with this schedule. |
state
Alpha2
Conditional
|
The state for the person associated with this schedule. Some payment gateway processors require this. |
zip
NumericString5
Conditional
|
The zip code for the person associated with this schedule. Some payment gateway processors require this. |
zipPlusFour
Alphanumeric4
|
The four digit zip code extension for the person associated with this schedule. |
country
Alphanumeric2
|
The country for the person associated with this schedule. |
origin
Alpha3
|
The origin of this schedule. This should always be set to "EXT". |
locationId
Numeric10
|
The locationId for a branch of the company setting up the schedule (if configured, typically this will be blank). |
recurrenceRule
Alphanumeric255
|
This is the recurrence rule that you want the schedule to calculate the payments against. Passing in a
recurrence rule here will override the recurrence that was saved as part of the Setting referenced
by the settingId .
This follows the ICal RRule standard, with the
exception that DTSTART will only accept yyyyMMdd format. Any timestamp included as part of DTSTART will be
ignored.
Restrictions on which frequencies are allowed are stored in the Setting object.
There is no need to start a rule with "RRULE=". The DTSTART value cannot be in the past or more than maxDaysToStart days
in the future and needs to be formatted "yyyyMMdd".
The INTERVAL has the following valid ranges: MONTHLY 1-12, WEEKLY 1-5, DAILY 1-31.
Example valid rule "FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=1;". If this is changed during a PUT call,
then the SchedulePayments will be regenerated.
See note about Schedule Payment Processing. |
username
Alphanumeric75
|
The username for the employee creating the schedule. This value is used as the createUser and/or
updateUser .
|
createUser
Alphanumeric75
|
READONLY The user who created the Schedule .
|
updateUser
Alphanumeric75
|
READONLY The user who last modified the Schedule .
|
createDate
Date19
|
READONLY Date the Schedule was created.
Format: URL Encoded ISO-8601
|
updateDate
Date19
|
READONLY Date the Schedule was last updated.
Format: URL Encoded ISO-8601
|
owedAmount
Numeric11
|
The original amount, or the amount owed by the debtor. If this is changed during a PUT call, then
the SchedulePayments will be regenerated. Only returns if not zero on POST or PUT
requests.
|
initialPaymentAmount
Numeric11
Conditional
|
An amount processed before the schedule is started. This will be deducted from the owedAmount .
If processInitialPaymentOnActivation is true this amount is required and will be processed. Otherwise this amount will not be processed, and is on the schedule for reference only.Only returns if not zero on POST or PUT requests.
|
adjustmentAmount
Numeric11
|
An amount to be deducted from the owedAmount .
This amount will not be processed by the schedule, but is on the schedule for reference only. Only returns if not zero on POST or PUT requests.
|
pendingFee
Numeric11
|
READONLY The total fees still pending on the schedule. |
pendingAmount
Numeric11
|
READONLY The total amount still pending on the schedule. |
nextPaymentFee
Numeric11
|
READONLY The payment fee of the next scheduled payment. |
nextPaymentAmount
Numeric11
|
READONLY The payment amount of the next scheduled payment. |
nextPaymentTotal
Numeric11
|
READONLY The payment + fee amount of the next scheduled payment. |
collectedFee
Numeric11
|
READONLY The total fees that have been collected on the schedule. |
collectedAmount
Numeric11
|
READONLY The total amount that has been collected on the schedule. |
unsuccessfulFee
Numeric11
|
READONLY The sum of the payment fees of all failed payments on the schedule. |
unsuccessfulAmount
Numeric11
|
READONLY The sum of the payment amounts of all failed payments on the schedule. |
totalExpectedFee
Numeric11
|
READONLY The total fees of all payments on the schedule regardless of status, failed, successful or pending. |
totalExpectedAmount
Numeric11
|
READONLY The total amount of all payments on the schedule regardless of status, failed, successful or pending. |
nextPaymentDate
DateTime19
|
READONLY Date the next payment on the schedule is scheduled to process.
Format: URL Encoded ISO-8601
|
pendingCount
Numeric3
|
READONLY The total number of payments that are still waiting to be collected on the schedule. |
collectedCount
Numeric3
|
READONLY The total number of payments that have been collected successfully on the schedule. |
unsuccessfulCount
Numeric3
|
READONLY The total number of payments that have been unsuccessful on the schedule. |
totalExpectedCount
Numeric3
|
READONLY The total number of payments associated with the schedule, regardless of current status. |
billingLastFour
Alphanumeric
4
|
READONLY The last four digits of the credit card number or the bank account number. From the active payment method. |
billingCard
Object
N/A
|
BillingCard object. This is ONLY returned when paymentMethod is CARD
and when a single Schedule object is returned.
Description: See object definition below.
|
billingCheck
ObjectN/A
|
BillingCheck object. This is ONLY returned when paymentMethod is CHECK
and when a single Schedule object is returned.
Description: See object definition below.
|
billingPayPal
ObjectN/A
|
BillingPayPal object. This is ONLY returned when paymentMethod is PAYPAL
and when a single Schedule object is returned.
Description: See object definition below.
|
payments
ListN/A
|
List of SchedulePayment objects for the schedule. This cannot be modified through the schedules endpoint and will only be returned when a single schedule is
requested, or when performing a search using the SearchParameters: paymentDateStart , paymentDateEnd , or paymentStatusList .
Description: See object definition below.
See note about Schedule Payment Processing. |
customReceiptLabels
ObjectN/A
|
CustomReceiptLabels object that contains labels which will override the default labels used on receipts.
This will be returned when a single schedule is returned and can be modified through the schedules endpoint.
Invalid values will be ignored.
Description: See object definition below.
|
customRenderLabels
ObjectN/A
|
customRenderLabels object that contains labels which will override the default labels used on a Schedule render .
This will be returned when a single schedule is returned and can be modified through the schedules endpoint.
Invalid values will be ignored.
Description: See object definition below.
|
roundTripMap
ObjectN/A
|
An object with a custom set of key/value pairs to save and return with the Schedule.
Both the Key and Value are required and must be 75 characters or less.
|
notificationEvent
String15
|
Specify if a Notification Event should be sent when the Schedule is created.
If this field is not provided, no Notification Event will be sent. This field is not saved and will not be returned on a GET
Valid value(s):
SCHEDULE |
flowRequestList
ListN/A
|
READONLY List of FlowRequest objects for the schedule. This will be returned when a single Schedule is
returned and cannot be modified through the schedules endpoint.
A flow request will be generated any time sendAuthorizationRequest or
requestPaymentData is true .
Description: See object definition below.
|
scheduleHistoryList
ListN/A
|
READONLY List of ScheduleHistory objects. This will be returned when a single Schedule is returned and
cannot be modified through the schedules endpoint.
Description: See object definition below.
|
--Schedule Creation
POST :
test urls:
https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules
live urls:
https://schedule.pdc4u.com/ScheduleService/api/v1_0/schedules
Sample Response:
{
"id": 2,
"companyId": 1234,
"accountNumber": "123455",
"status": "AUTHORIZE",
"paymentMethod": "CHECK",
"firstName": "Test",
"lastName": "McTester",
"settingId": 1,
"emailAddress": "test@test.com",
"sendReceiptToEmailAddress": false,
"origin": "EXT",
"recurrenceRule": "FREQ=MONTHLY;INTERVAL=1;",
"createUser": "testUser",
"updateUser": "testUser",
"createDate": "2020-01-02 16:40:21",
"updateDate": "2020-01-02 16:40:21",
"requestPaymentData": false,
"sendAuthorizationRequest": true,
"processInitialPaymentOnActivation": false,
"flowId": 1,
"pendingAmount": 1000.00,
"nextPaymentAmount": 100.00,
"collectedAmount": 0.00,
"unsuccessfulAmount": 0.00,
"totalExpectedAmount": 1000.00,
"nextPaymentDate": "2020-01-13",
"pendingCount": 10,
"collectedCount": 0,
"unsuccessfulCount": 0,
"totalExpectedCount": 10,
"owedAmount": 1000,
"paymentAmount": 100,
"billingLastFour": "4321",
"billingCheck": {
"bankAccountNumber": "aBankToken123456",
"routingNumber": "123456789",
"bankAccountType": "CHECKING",
"accountDirective": "1271-1"
},
"payments": [
{
"paymentId": 2,
"status": "PENDING",
"paymentAmount": 100,
"paymentDate": "2020-01-13"
},
{
"paymentId": 3,
"status": "PENDING",
"paymentAmount": 100,
"paymentDate": "2020-02-13"
},
{
"paymentId": 4,
"status": "PENDING",
"paymentAmount": 100,
"paymentDate": "2020-03-13"
},
{
"paymentId": 5,
"status": "PENDING",
"paymentAmount": 100,
"paymentDate": "2020-04-13"
},
{
"paymentId": 6,
"status": "PENDING",
"paymentAmount": 100,
"paymentDate": "2020-05-13"
},
{
"paymentId": 7,
"status": "PENDING",
"paymentAmount": 100,
"paymentDate": "2020-06-13"
},
{
"paymentId": 8,
"status": "PENDING",
"paymentAmount": 100,
"paymentDate": "2020-07-13"
},
{
"paymentId": 9,
"status": "PENDING",
"paymentAmount": 100,
"paymentDate": "2020-08-13"
},
{
"paymentId": 10,
"status": "PENDING",
"paymentAmount": 100,
"paymentDate": "2020-09-13"
},
{
"paymentId": 11,
"status": "PENDING",
"paymentAmount": 100.00,
"paymentDate": "2020-10-13"
}
],
"flowRequestList": [
{
"flowId": 2,
"status": "PENDING",
"statusDate": "2020-01-02 16:40:22"
}
],
"scheduleHistoryList": [
{
"date": "2020-01-02 16:40:21",
"event": "CREATE",
"eventId": 14,
"user": "testUser"
},
{
"date": "2020-01-02 16:40:22",
"event": "AUTHORIZATION_REQUEST",
"eventId": 15,
"user": "testUser",
"data": "Authorization request HTTP response status: 200 OK"
},
{
"date": "2020-01-02 16:40:22",
"event": "SCHEDULE_STATUS",
"eventId": 16,
"user": "testUser",
"data": "Status: {ACTIVE} -> {AUTHORIZE}"
}
]
}
Attribute | Description | ||||||||||||||
owedAmount
Numeric11
Required
|
The original amount, or the amount owed by the debtor. If this is changed during a PUT call, then the
SchedulePayments will be regenerated. Only returns if not zero on POST or
PUT requests.
|
||||||||||||||
initialPaymentAmount
Numeric11
Conditional
|
An amount processed before the schedule is started. This will be deducted from the owedAmount .
If processInitialPaymentOnActivation is true this amount is required and will be processed. Otherwise this amount will not be processed, and is on the schedule for reference only.Only returns if not zero on POST or PUT requests.
|
||||||||||||||
adjustmentAmount
Numeric11
|
An amount to be deducted from the owedAmount .
This amount will not be processed by the schedule, but is on the schedule for reference only. Only returns if not zero on POST or PUT requests.
|
||||||||||||||
status
AlphaN/A
|
Valid value(s):
DRAFT - Schedules in DRAFT have not yet been saved as ACTIVE .ACTIVE - Schedules that are actively processing payments.INACTIVE - Schedules that have been inactivated and are no longer running payments, though PENDING payments may still be present.COMPLETED - Schedules that have finished processing all payments, be they successful or failed.AUTHORIZE - Schedules that are pending the completion of a signature request before becoming ACTIVE .UNAUTHORIZED - Schedules of which the signature request was not completed successfully.PAYMENT_FAILED - Schedules of which the first due payment failed while trying to Activate the Schedule.BILLING_DATA - Schedules that are pending the completion of a signature request requesting payment data to be entered.Default value: DRAFT
|
||||||||||||||
settingId
Numeric 10
Required
|
The id of the schedule setting to be used with this schedule. The setting must first be saved. | ||||||||||||||
sendFlowRequest
Boolean
|
Flag to determine if Schedule Service should send the Flow request, or if it will be requested separately using the
Flow Service API The following 2 attributes sendAuthorizationRequest and requestPaymentData
still need to be set to the proper value so the Signature Service API can build the Flow request correctly.
Default value: true
|
||||||||||||||
sendAuthorizationRequest
Boolean5
|
Whether an authorization request will be sent to the included emailAddress and/or
phoneNumber . Default: false . An authorization request will only be sent if the status of the schedule is ACTIVE ,
AUTHORIZE or UNAUTHORIZED .
When an authorization request is sent, the schedule will be set to a status of AUTHORIZE until the
account holder has completed the authorization request. When the authorization request is successfully completed,
the status of the schedule will be set to ACTIVE .If sendAuthorizationRequest is true , the Authorization object is required,
along with either the emailAddress or phoneNumber .
|
||||||||||||||
requestPaymentData
Boolean5
|
If this is true , a flow request will be sent to the emailAddress or
phoneNumber requesting the payment information. The accountDirective for all allowed payment types is required if this is set to
true .A valid emailAddress or phoneNumber is required when set to true .
|
||||||||||||||
processInitialPaymentOnActivation
Boolean5
|
If this is true , the initialPaymentAmount is required. The initialPaymentAmount will be inserted as the first payment and will be processed when the schedule goes ACTIVE .
See note about Schedule Payment Processing. |
||||||||||||||
paymentMethod
Alpha5
Conditional
|
The payment method to be used for processing payments on this schedule.
Valid value(s):
CARD CHECK PAYPAL Required if requestPaymentData is false .
|
||||||||||||||
billingCard
ObjectN/A
Conditional
|
BillingCard object. This is ONLY returned when paymentMethod is CARD
and when a single Schedule object is returned.Required if paymentMethod is set to CARD .
Only the accountDirective field in the billingCard object is required if requestPaymentData
is true and CARD is an accepted payment type. Details
|
||||||||||||||
billingCheck
ObjectN/A
Conditional
|
BillingCheck object. This is ONLY returned when paymentMethod is CHECK
and when a single Schedule object is returned.Required if paymentMethod is set to CHECK .
Only the accountDirective field in the billingCheck object is required if requestPaymentData
is true and CHECK is an accepted payment type.
Details
|
||||||||||||||
billingPayPal
ObjectN/A
Conditional
|
BillingPayPal object. This is ONLY returned when paymentMethod is PAYPAL
and when a single Schedule object is returned.Required if paymentMethod is set to PAYPAL .
Only the accountDirective field in the billingPayPal object is required if requestPaymentData
is true and PAYPAL is an accepted payment type.
Details
|
||||||||||||||
firstName
Alphanumeric45
Required
|
The first name of the person associated to this schedule. | ||||||||||||||
lastName
Alphanumeric45
Required
|
The last name of the person associated to this schedule. | ||||||||||||||
accountNumber
Alphanumeric45
Required
|
The accountNumber of the person associated to this schedule. | ||||||||||||||
numberOfPayments
Numeric3
|
The number of payments used for creation of the schedule. If this is provided, the paymentAmount
cannot be provided. The number of payments, along with the minimum amount per payment, must generate a schedule with less payments than the maxTerm in the setting for this schedule. If the number of payments is too
great, an error message will be provided that indicates the maximum value. If this is changed during a PUT call, then the SchedulePayments will be regenerated.
Only returns if not zero on POST or PUT requests.
|
||||||||||||||
paymentAmount
Numeric11
|
This is the amount that will be charged for each scheduled payment. If this is provided the
numberOfPayments cannot be provided. The paymentAmount, along with the term setting, must generate a schedule with less payments than the maxTerm in the setting for this schedule. If the payment amount is too small an error
message will be provided that indicates the minimum value. If this is changed during a PUT call, then the SchedulePayments will be regenerated.
Only returns if not zero on POST or PUT requests.
|
||||||||||||||
feeAmount
Numeric11
|
The fee which will apply to each scheduled payment | ||||||||||||||
feePercent
Decimal4
|
The fee percent which will be used to calculate the fee on to each scheduled payment | ||||||||||||||
initialFeeAmount
Numeric11
|
The fee which will apply to the initial payment if processInitialPaymentOnActivation is true
|
||||||||||||||
initialFeePercent
Decimal4
|
The fee percent which will be used to calculate the initial payment fee if processInitialPaymentOnActivation is true
|
||||||||||||||
dialog
AlphaNumeric5000
Conditional
|
This dialog text comes from the Dialog Templates where each template placeholder variable has been replaced. The templates can either be generated in your system, or you can use the Generate Dialog Endpoint .
Some payment gateway processors, such as Pay N Seconds , require this.
|
||||||||||||||
memo
Alphanumeric50
|
The memo associated to the schedule. | ||||||||||||||
sendReceiptToEmailAddress
Boolean5
Required
|
Toggle the sending of email receipts on payment processing. A valid emailAddress is required when set
to true .
|
||||||||||||||
sendAuthorizationRequest
BooleanN/A
|
Whether an authorization request will be sent to the included emailAddress and/or
phoneNumber . Default: false . An authorization request will only be sent if the status of the schedule is ACTIVE ,
AUTHORIZE or UNAUTHORIZED .
When an authorization request is sent, the schedule will be set to a status of AUTHORIZE until the
account holder has completed the authorization request. When the authorization request is successfully completed,
the status of the schedule will be set to ACTIVE .If sendAuthorizationRequest is true , the Authorization object is required,
along with either the emailAddress or phoneNumber .
|
||||||||||||||
emailAddress
Alphanumeric75
Conditional
|
An email address to associate with the schedule. Reminders will be sent to this email address prior to payments
being processed, according to the cardReminderDays or checkReminderDays or payPalReminderDays in the Setting
for this schedule.
If sendAuthorizationRequest is true , the flow request will be sent to this email
address.
If requestPaymentData is true , the flow request will be sent to this email
address.Either the emailAddress or phoneNumber is required if
sendAuthorizationRequest or requestPaymentData is true .
|
||||||||||||||
phoneNumber
Numeric10
Conditional
|
A phone number to associate with the schedule. If sendAuthorizationRequest is true , the flow request will be sent to this phone number
via text message.If requestPaymentData is true , the flow request will be sent to this phone number via
text message.Either the emailAddress or phoneNumber is required if
sendAuthorizationRequest or requestPaymentData is true .
|
||||||||||||||
authorization
AuthorizationN/A
Conditional
|
The data relating to an authorization request.
Required if sendAuthorizationRequest or requestPaymentData is true .
Details
|
||||||||||||||
addressOne
Alphanumeric80
|
The address for the person associated with this schedule. | ||||||||||||||
addressTwo
Alphanumeric45
|
The second part of the address for the person associated with this schedule. | ||||||||||||||
city
Alphanumeric45
|
The city for the person associated with this schedule. | ||||||||||||||
state
Alpha2
Conditional
|
The state for the person associated with this schedule. Some payment gateway processors require this. | ||||||||||||||
zip
NumericString5
Conditional
|
The zip code for the person associated with this schedule. Some payment gateway processors require this. | ||||||||||||||
zipPlusFour
Alphanumeric4
|
The four digit zip code extension for the person associated with this schedule. | ||||||||||||||
country
Alphanumeric2
|
The country for the person associated with this schedule. | ||||||||||||||
origin
Alpha3
|
The origin of this schedule. This should always be set to "EXT". | ||||||||||||||
locationId
Numeric10
|
The locationId for a branch of the company setting up the schedule (if configured, typically this will be blank). | ||||||||||||||
recurrenceRule
Alphanumeric255
|
This is the recurrence rule that you want the schedule to calculate the payments against. Passing in a recurrence
rule here will override the recurrence that was saved as part of the Setting referenced by the settingId .
This follows the ICal RRule standard, with the
exception that DTSTART will only accept yyyyMMdd format. Any timestamp included as part of DTSTART will be
ignored.
Restrictions on which frequencies are allowed are stored in the Setting object.
There is no need to start a rule with "RRULE=". The DTSTART value cannot be in the past or more than maxDaysToStart days in
the future and needs to be formatted "yyyyMMdd".
The INTERVAL has the following valid ranges: MONTHLY 1-12, WEEKLY 1-5, DAILY 1-31.
Example valid rule "FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=1;". If this is changed during a PUT call,
then the SchedulePayments will be regenerated.
See note about Schedule Payment Processing. |
||||||||||||||
username
Alphanumeric75
Required
|
The username for the employee creating the schedule. This value is used as the createUser and/or
updateUser .
|
||||||||||||||
customReceiptLabels
ObjectN/A
|
CustomReceiptLabels object that contains labels which will override the default labels used on receipts.
This will be returned when a single schedule is returned and can be modified through the schedules endpoint.
Invalid values will be ignored.
Description: See object definition below.
|
||||||||||||||
customRenderLabels
ObjectN/A
|
customRenderLabels object that contains labels which will override the default labels used on a Schedule render .
This will be returned when a single schedule is returned and can be modified through the schedules endpoint.
Invalid values will be ignored.
Description: See object definition below.
|
||||||||||||||
roundTripMap
ObjectN/A
|
An object with a custom set of key/value pairs to save and return with the Schedule.
Both the Key and Value are required and must be 75 characters or less.
|
||||||||||||||
notificationEvent
String15
|
Specify if a Notification Event should be sent when the Schedule is created.
If this field is not provided, no Notification Event will be sent. This field is not saved and will not be returned on a GET
Valid value(s):
SCHEDULE |
||||||||||||||
flowId
Numeric20
|
WRITEONLY If provided, a History Event will be added to the schedule, linking this schedule to an existing Flow Request. This value will NOT be returned in the READONLY flowId field of the schedule object. |
--Schedule Override
PUT :
test urls:
https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/{scheduleId}
live urls:
https://schedule.pdc4u.com/ScheduleService/api/v1_0/schedules/{scheduleId}
Sample Response:
{
"id": 17381,
"companyId": 1234,
"accountNumber": "123455",
"status": "ACTIVE",
"paymentMethod": "CHECK",
"firstName": "Test",
"lastName": "McTester",
"settingId": 5669,
"emailAddress": "test@test.com",
"sendReceiptToEmailAddress": false,
"origin": "EXT",
"recurrenceRule": "FREQ=MONTHLY;INTERVAL=1;",
"createUser": "test@test.com",
"updateUser": "testUser",
"createDate": "2019-12-06 11:23:13",
"updateDate": "2020-01-13 13:59:05",
"requestPaymentData": false,
"sendAuthorizationRequest": false,
"processInitialPaymentOnActivation": false,
"flowId": 3,
"pendingAmount": 1000.00,
"nextPaymentAmount": 100.00,
"collectedAmount": 0.00,
"unsuccessfulAmount": 0.00,
"totalExpectedAmount": 1000.00,
"nextPaymentDate": "2020-01-24",
"pendingCount": 10,
"collectedCount": 0,
"unsuccessfulCount": 0,
"totalExpectedCount": 10,
"billingLastFour": "4321",
"billingCheck": {
"bankAccountNumber": "aBankToken123456",
"routingNumber": "123456789",
"bankAccountType": "CHECKING",
"accountDirective": "1271-1"
},
"payments": [
{
"paymentId": 179361,
"status": "PAID",
"paymentAmount": 100.00,
"paymentDate": "2019-12-07"
},
{
"paymentId": 179362,
"status": "PENDING",
"paymentAmount": 100.00,
"paymentDate": "2020-02-24"
},
{
"paymentId": 179363,
"status": "PENDING",
"paymentAmount": 100.00,
"paymentDate": "2020-03-24"
},
{
"paymentId": 179364,
"status": "PENDING",
"paymentAmount": 100.00,
"paymentDate": "2020-04-24"
},
{
"paymentId": 179365,
"status": "PENDING",
"paymentAmount": 100.00,
"paymentDate": "2020-05-24"
},
{
"paymentId": 179366,
"status": "PENDING",
"paymentAmount": 100.00,
"paymentDate": "2020-06-24"
},
{
"paymentId": 179367,
"status": "PENDING",
"paymentAmount": 100.00,
"paymentDate": "2020-07-24"
},
{
"paymentId": 179368,
"status": "PENDING",
"paymentAmount": 100.00,
"paymentDate": "2020-08-24"
},
{
"paymentId": 179369,
"status": "PENDING",
"paymentAmount": 100.00,
"paymentDate": "2020-09-24"
},
{
"paymentId": 179370,
"status": "PENDING",
"paymentAmount": 100.00,
"paymentDate": "2020-10-24"
}
],
"customReceiptLabels": {
"PAYMENT": "My new payment label",
"ACCOUNT_NUMBER": "My new account number label",
"MEMO": "My new memo label",
"BANK_ACCOUNT_TYPE": "My new account type label"
},
"customRenderLabels": {
"SCHEDULE_STATUS": "My new schedule status label"
},
"roundTripMap": {
"myField1": "Custom Value 1",
"myField2": "Custom Value 2"
},
"flowRequestList": [
{
"flowId": 29094,
"status": "COMPLETED",
"statusDate": "2019-12-06 11:23:47",
"flowResultList": [
{
"flowId": 29094,
"status": "BILLING_RECEIVE",
"statusDate": "2019-12-06 11:23:47"
},
{
"flowId": 29094,
"status": "COMPLETED",
"statusDate": "2019-12-06 11:23:47"
}
]
}
],
"scheduleHistoryList": [
{
"date": "2019-12-06 11:23:13",
"event": "CREATE",
"eventId": 17381,
"user": "test@test.com"
},
{
"date": "2019-12-06 11:23:16",
"event": "BILLING_REQUEST",
"eventId": 29094,
"user": "test@test.com",
"data": "Authorization request HTTP response status: 200 OK"
},
{
"date": "2019-12-06 11:23:17",
"event": "SCHEDULE_STATUS",
"eventId": 17381,
"user": "test@test.com",
"data": "Status: {ACTIVE} -> {BILLING_DATA}"
},
{
"date": "2019-12-06 11:23:47",
"event": "BILLING_MODIFY",
"eventId": 17381,
"user": "signatureUI",
"data": "Change Billing Card"
},
{
"date": "2019-12-06 11:23:47",
"event": "FLOW_RESULT",
"eventId": 3236,
"user": "signatureUI",
"data": "FlowId: 29094 Updated with status of BILLING_RECEIVE"
},
{
"date": "2019-12-06 11:23:47",
"event": "SCHEDULE_STATUS",
"eventId": 17381,
"user": "signatureUI",
"data": "Status: {BILLING_DATA} -> {ACTIVE}"
},
{
"date": "2019-12-06 11:23:47",
"event": "FLOW_RESULT",
"eventId": 3237,
"user": "signatureUI",
"data": "FlowId: 29094 Updated with status of COMPLETED"
},
{
"date": "2019-12-07 04:00:50",
"event": "PAYMENT_ATTEMPT",
"eventId": 2229,
"user": "recurring"
},
{
"date": "2020-01-13 13:59:05",
"event": "SCHEDULE_MODIFY",
"eventId": 17381,
"user": "testUser"
}
]
}
PUT
requests will completely override the existing specified (by scheduleId
in the URL) schedule. As such, the request object the same as the schedule creation.
Modifying a schedule will remove all PENDING
payments from the existing schedule and will generate new payments based off the PUT
request. Payments that have
already been processed for this schedule will not be changed.
Schedule Modification
Attribute
Description
Schedule
to modify. Set in the URL.
DRAFT
- Schedules in DRAFT
have not yet been saved as ACTIVE
.
ACTIVE
- Schedules that are actively processing payments.
INACTIVE
- Schedules that have been inactivated and are no longer running payments, though PENDING
payments may still be present.
COMPLETED
- Schedules that have finished processing all payments, be they successful or failed.
AUTHORIZE
- Schedules that are pending the completion of a signature request before becoming ACTIVE
.
UNAUTHORIZED
- Schedules of which the signature request was not completed successfully.
PAYMENT_FAILED
- Schedules of which the first due payment failed while trying to Activate the Schedule.
BILLING_DATA
- Schedules that are pending the completion of a signature request requesting payment data to be entered.
The id of the schedule setting to be used with this schedule. The setting must first be saved.
The payment method to be used for processing payments on this schedule.
CARD
CHECK
PAYPAL
Required if requestPaymentData
is false
.
If this is
true
, a flow request will be sent to the emailAddress
or
phoneNumber
requesting the payment information.
The accountDirective
for all allowed payment types is required if this is set to
true
.
A valid emailAddress
or phoneNumber
is required when set to true
.
If this is
true
, the initialPaymentAmount
is required. The initialPaymentAmount
will be inserted as the first payment and will be processed when the schedule goes ACTIVE
.
See note about Schedule Payment Processing.
The first name of the person associated to this schedule.
The last name of the person associated to this schedule.
The accountNumber of the person associated to this schedule.
The number of payments used for creation of the schedule. If this is provided, the
paymentAmount
cannot be provided.
The number of payments, along with the minimum amount per payment, must generate a schedule with less payments
than the maxTerm
in the setting
for this schedule. If the number of payments is too
great, an error message will be provided that indicates the maximum value.
If this is changed during a PUT
call, then the SchedulePayments
will be regenerated.
Only returns if not zero on POST
or PUT
requests.
This is the amount that will be charged for each scheduled payment. If this is provided the
numberOfPayments
cannot be provided.
The paymentAmount, along with the term setting, must generate a schedule with less payments than the
maxTerm
in the setting
for this schedule. If the payment amount is too small an error
message will be provided that indicates the minimum value.
If this is changed during a PUT
call, then the SchedulePayments
will be regenerated.
Only returns if not zero on POST
or PUT
requests.
The memo associated to the schedule.
An email address to associate with the schedule. Reminders will be sent to this email address prior to payments
being processed, according to the
cardReminderDays
or checkReminderDays
or payPalReminderDays
in the Setting
for this schedule.
If sendAuthorizationRequest
is true
, the flow request will be sent to this email
address.
If requestPaymentData
is true
, the flow request will be sent to this email
address.
Either the emailAddress
or phoneNumber
is required if
sendAuthorizationRequest
or requestPaymentData
is true
.
Toggle the sending of email receipts on payment processing. A valid
emailAddress
is required when
set
to true
.
A phone number to associate with the schedule.
If sendAuthorizationRequest
is true
, the flow request will be sent to this phone
number
via text message.
If requestPaymentData
is true
, the flow request will be sent to this phone number via
text message.
Either the emailAddress
or phoneNumber
is required if
sendAuthorizationRequest
or requestPaymentData
is true
.
Whether an authorization request will be sent to the included
emailAddress
and/or
phoneNumber
.
Default: false
.
An authorization request will only be sent if the status
of the schedule is ACTIVE
,
AUTHORIZE
or UNAUTHORIZED
.
When an authorization request is sent, the schedule will be set to a status of AUTHORIZE
until the
account holder has completed the authorization request. When the authorization request is successfully
completed,
the status of the schedule will be set to ACTIVE
.
If sendAuthorizationRequest
is true
, the Authorization
object is
required,
along with either the emailAddress
or phoneNumber
.
The data relating to an authorization request.
Required if
sendAuthorizationRequest
or requestPaymentData
is true
.
Details
A description of the PIN the user will enter to access their authorization request. This cannot contain
the
verificationPin
.
The pin that the user will need to enter in order to access their authorization request.
The amount of minutes that the authorization request will be accessible for. The user must complete the
authorization request before this timeout, or a new authorization request will need to be sent.
List of
EventRecipient
objects. These recipients will receive a notification for a final Flow status of COMPLETED
, DISPUTED
, EXPIRED
, FAILED
.
EventRecipient
Object
An Email address to receive a Flow event notification.
The address for the person associated with this schedule.
The second part of the address for the person associated with this schedule.
The city for the person associated with this schedule.
The state for the person associated with this schedule. Some payment gateway processors require this.
The zip code for the person associated with this schedule. Some payment gateway processors require this.
The four digit zip code extension for the person associated with this schedule.
The country for the person associated with this schedule.
The origin of this schedule. This should always be set to "EXT".
The locationId for a branch of the company setting up the schedule (if configured, typically this will be
blank).
This is the recurrence rule that you want the schedule to calculate the payments against. Passing in a
recurrence
rule here will override the recurrence that was saved as part of the
Setting
referenced by the
settingId
.
This follows the ICal RRule standard, with the
exception that DTSTART will only accept yyyyMMdd format. Any timestamp included as part of DTSTART will be
ignored.
Restrictions on which frequencies are allowed are stored in the Setting
object.
There is no need to start a rule with "RRULE=". The DTSTART value cannot be in the past or more than maxDaysToStart
days
in
the future and needs to be formatted "yyyyMMdd".
The INTERVAL has the following valid ranges: MONTHLY 1-12, WEEKLY 1-5, DAILY 1-31.
Example valid rule "FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=1;". If this is changed during a PUT
call,
then the SchedulePayments
will be regenerated.
See note about Schedule Payment Processing.
The username for the employee creating the schedule. This value is used as the
createUser
and/or
updateUser
.
The original amount, or the amount owed by the debtor. If this is changed during a
PUT
call, then
the
SchedulePayments
will be regenerated. Only returns if not zero on POST
or
PUT
requests.
An amount processed before the schedule is started. This will be deducted from the
owedAmount
.
If processInitialPaymentOnActivation
is true
this amount is required and will be processed. Otherwise this amount will not be processed, and is on the schedule for reference only.
Only returns if not zero on POST
or PUT
requests.
An amount to be deducted from the
owedAmount
.
This amount will not be processed by the schedule, but is on the schedule for reference only.
Only returns if not zero on POST
or PUT
requests.
BillingCard
object. This is ONLY returned when paymentMethod
is CARD
and when a single Schedule object is returned.
Required if paymentMethod
is set to CARD
.
Only the accountDirective
field in the billingCard
object is required if requestPaymentData
is true
and CARD
is an accepted payment type.
Details
The credit card token. This must be a token, and not a raw credit card number.
To create a token, see Secure Overlay API and/or TokenizationService.
The type of card used for the schedule.
Possible values: AMERICAN_EXPRESS
, DISCOVER
, MASTERCARD
, VISA
, UNKNOWN
The credit card expiration month.
This value will be retrieved from the cardToken
if not provided.
Required if expirationYear
is provided.
The credit card expiration year.
This value will be retrieved from the cardToken
if not provided.
Required if expirationMonth
is provided.
The security code or cvv2 of the credit card to be used for verification or processing the first payment. This field is not returned.
The account directive that defines which card merchant account to use for processing the schedule
payments.
BillingCheck
object. This is ONLY returned when paymentMethod
is CHECK
and when a single Schedule object is returned.
Required if paymentMethod
is set to CHECK
.
Only the accountDirective
field in the billingCheck
object is required if requestPaymentData
is true
and CHECK
is an accepted payment type.
Details
The bank routing number for processing the schedule payments.
Required if a raw bankAccountNumber
is provided. Otherwise it is retrieved from a token bankAccountNumber
if not provided.
A bank Token or a raw bank account number to use for processing the schedule payments.
To create a token, see Secure Overlay API and/or TokenizationService.
NOTE: Providing a raw bank account number is deprecated
. When a raw bank account number is provided, the bankAccountNumber
, routingNumber
, and bankAccountType
will be Tokenized and the Token will be returned here as the bankAccountNumber
Valid values:
CHECKING
SAVINGS
Required if a raw bankAccountNumber
is provided. Otherwise it is retrieved from a token bankAccountNumber
if not provided.
The account directive that defines which check merchant account to use for processing the schedule
payments.
BillingPayPal
object. This is ONLY returned when paymentMethod
is PAYPAL
and when a single Schedule object is returned.
Required if paymentMethod
is set to PAYPAL
.
Only the accountDirective
field in the billingPayPal
object is required if requestPaymentData
is true
and PAYPAL
is an accepted payment type.
Details
A reference for the PayPal payment information.
This can be generated by sending true for requestPaymentData
which will use FlowService
, or use TransactionService
The account directive that defines which PayPal merchant account to use for processing the schedule payments.
CustomReceiptLabels
object that contains labels which will override the default labels used on receipts.
This will be returned when a single schedule returned and can be modified through the schedules endpoint.
Invalid values will be ignored.
customRenderLabels
object that contains labels which will override the default labels used on a Schedule render
.
This will be returned when a single schedule is returned and can be modified through the schedules endpoint.
Invalid values will be ignored.
An object with a custom set of key/value pairs to save and return with the Schedule.
Specify if a Notification Event should be sent when the Schedule is created.
If this field is not provided, no Notification Event will be sent. This field is not saved and will not be returned on a GET
SCHEDULE
--Schedule Modification
PATCH :
test urls:
https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/{scheduleId}
live urls:
https://schedule.pdc4u.com/ScheduleService/api/v1_0/schedules/{scheduleId}
Sample Response:
{
"id": 17381,
"companyId": 1234,
"accountNumber": "123455",
"status": "ACTIVE",
"paymentMethod": "CHECK",
"firstName": "Test",
"lastName": "McTester",
"settingId": 5669,
"emailAddress": "test@test.com",
"sendReceiptToEmailAddress": false,
"origin": "EXT",
"recurrenceRule": "FREQ=MONTHLY;INTERVAL=1;",
"createUser": "test@test.com",
"updateUser": "testUser",
"createDate": "2019-12-06 11:23:13",
"updateDate": "2020-01-13 13:59:05",
"requestPaymentData": false,
"sendAuthorizationRequest": false,
"flowId": 3,
"pendingAmount": 1000.00,
"nextPaymentAmount": 100.00,
"collectedAmount": 0.00,
"unsuccessfulAmount": 0.00,
"totalExpectedAmount": 1000.00,
"nextPaymentDate": "2020-01-24",
"pendingCount": 10,
"collectedCount": 0,
"unsuccessfulCount": 0,
"totalExpectedCount": 10,
"billingLastFour": "4321",
"billingCheck": {
"bankAccountNumber": "aBankToken123456",
"routingNumber": "123456789",
"bankAccountType": "CHECKING",
"accountDirective": "1271-1"
},
"payments": [
{
"paymentId": 179361,
"status": "PAID",
"paymentAmount": 100.00,
"paymentDate": "2019-12-07"
},
{
"paymentId": 179362,
"status": "PENDING",
"paymentAmount": 100.00,
"paymentDate": "2020-02-24"
},
{
"paymentId": 179363,
"status": "PENDING",
"paymentAmount": 100.00,
"paymentDate": "2020-03-24"
},
{
"paymentId": 179364,
"status": "PENDING",
"paymentAmount": 100.00,
"paymentDate": "2020-04-24"
},
{
"paymentId": 179365,
"status": "PENDING",
"paymentAmount": 100.00,
"paymentDate": "2020-05-24"
},
{
"paymentId": 179366,
"status": "PENDING",
"paymentAmount": 100.00,
"paymentDate": "2020-06-24"
},
{
"paymentId": 179367,
"status": "PENDING",
"paymentAmount": 100.00,
"paymentDate": "2020-07-24"
},
{
"paymentId": 179368,
"status": "PENDING",
"paymentAmount": 100.00,
"paymentDate": "2020-08-24"
},
{
"paymentId": 179369,
"status": "PENDING",
"paymentAmount": 100.00,
"paymentDate": "2020-09-24"
},
{
"paymentId": 179370,
"status": "PENDING",
"paymentAmount": 100.00,
"paymentDate": "2020-10-24"
}
],
"customReceiptLabels": {
"PAYMENT": "My new payment label",
"ACCOUNT_NUMBER": "My new account number label",
"MEMO": "My new memo label",
"BANK_ACCOUNT_TYPE": "My new account type label"
},
"customRenderLabels": {
"SCHEDULE_STATUS": "My new schedule status label"
},
"roundTripMap": {
"myField1": "Custom Value 1",
"myField2": "Custom Value 2"
},
"flowRequestList": [
{
"flowId": 29094,
"status": "COMPLETED",
"statusDate": "2019-12-06 11:23:47",
"flowResultList": [
{
"flowId": 29094,
"status": "BILLING_RECEIVE",
"statusDate": "2019-12-06 11:23:47"
},
{
"flowId": 29094,
"status": "COMPLETED",
"statusDate": "2019-12-06 11:23:47"
}
]
}
],
"scheduleHistoryList": [
{
"date": "2019-12-06 11:23:13",
"event": "CREATE",
"eventId": 17381,
"user": "test@test.com"
},
{
"date": "2019-12-06 11:23:16",
"event": "BILLING_REQUEST",
"eventId": 29094,
"user": "test@test.com",
"data": "Authorization request HTTP response status: 200 OK"
},
{
"date": "2019-12-06 11:23:17",
"event": "SCHEDULE_STATUS",
"eventId": 17381,
"user": "test@test.com",
"data": "Status: {ACTIVE} -> {BILLING_DATA}"
},
{
"date": "2019-12-06 11:23:47",
"event": "BILLING_MODIFY",
"eventId": 17381,
"user": "signatureUI",
"data": "Change Billing Card"
},
{
"date": "2019-12-06 11:23:47",
"event": "FLOW_RESULT",
"eventId": 3236,
"user": "signatureUI",
"data": "FlowId: 29094 Updated with status of BILLING_RECEIVE"
},
{
"date": "2019-12-06 11:23:47",
"event": "SCHEDULE_STATUS",
"eventId": 17381,
"user": "signatureUI",
"data": "Status: {BILLING_DATA} -> {ACTIVE}"
},
{
"date": "2019-12-06 11:23:47",
"event": "FLOW_RESULT",
"eventId": 3237,
"user": "signatureUI",
"data": "FlowId: 29094 Updated with status of COMPLETED"
},
{
"date": "2019-12-07 04:00:50",
"event": "PAYMENT_ATTEMPT",
"eventId": 2229,
"user": "recurring"
},
{
"date": "2020-01-13 13:59:05",
"event": "SCHEDULE_MODIFY",
"eventId": 17381,
"user": "testUser"
}
]
}
PATCH
requests will update the existing specified (by scheduleId
in the URL) schedule. This is a soft update and will not regenerate the schedule payments.
As such, fields which would require the payments to be regenerated will not be allowed in this request. Fields left null will not affect the schedule, while fields set to an empty
string will remove the stored value from the schedule. As such, certain required fields cannot be set to empty.
Attribute | Description | ||||||||||||
scheduleId
Alpha8
|
The id of the
Schedule to modify. Set in the URL.
|
||||||||||||
firstName
Alphanumeric45
|
Cannot be set empty. The first name of the person associated to this schedule. | ||||||||||||
lastName
Alphanumeric45
|
Cannot be set empty. The last name of the person associated to this schedule. | ||||||||||||
accountNumber
Alphanumeric45
|
Cannot be set empty. The accountNumber of the person associated to this schedule. | ||||||||||||
origin
Alpha3
|
The origin of this schedule. This should always be set to "EXT". | ||||||||||||
status
AlphaN/A
|
Cannot be set empty.
Valid value(s):
DRAFT - Schedules in DRAFT have not yet been saved as ACTIVE .ACTIVE - Schedules that are actively processing payments.INACTIVE - Schedules that have been inactivated and are no longer running payments, though PENDING payments may still be present.COMPLETED - Schedules that have finished processing all payments, be they successful or failed.AUTHORIZE - Schedules that are pending the completion of a signature request before becoming ACTIVE .UNAUTHORIZED - Schedules of which the signature request was not completed successfully.PAYMENT_FAILED - Schedules of which the first due payment failed while trying to Activate the Schedule.BILLING_DATA - Schedules that are pending the completion of a signature request requesting payment data to be entered. |
||||||||||||
paymentMethod
Alpha5
|
The payment method to be used for processing payments on this schedule.
Valid value(s):
CARD CHECK PAYPAL |
||||||||||||
requestPaymentData
Boolean5
|
If this is true , a flow request will be sent to the emailAddress or
phoneNumber requesting the payment information. The accountDirective for all allowed payment types is required if this is set to
true .A valid emailAddress or phoneNumber is required when set to true .
|
||||||||||||
dialog
AlphaNumeric5000
Conditional
|
This dialog text comes from the Dialog Templates where each template placeholder variable has been replaced. The templates can either be generated in your system, or you can use the Generate Dialog Endpoint .
Some payment gateway processors, such as Pay N Seconds , require this.
|
||||||||||||
memo
Alphanumeric50
|
The memo associated to the schedule. | ||||||||||||
emailAddress
Alphanumeric75
|
An email address to associate with the schedule. Reminders will be sent to this email address prior to payments
being processed, according to the cardReminderDays or checkReminderDays or payPalReminderDays in the Setting
for this schedule.
If sendAuthorizationRequest is true , the flow request will be sent to this email
address.
If requestPaymentData is true , the flow request will be sent to this email
address.Either the emailAddress or phoneNumber is required if
sendAuthorizationRequest or requestPaymentData is true .
|
||||||||||||
sendReceiptToEmailAddress
Boolean5
|
Toggle the sending of email receipts on payment processing. A valid emailAddress is required when
set to true .
|
||||||||||||
phoneNumber
Numeric10
|
A phone number to associate with the schedule. If sendAuthorizationRequest is true , the flow request will be sent to this phone
number
via text message.If requestPaymentData is true , the flow request will be sent to this phone number via
text message.Either the emailAddress or phoneNumber is required if
sendAuthorizationRequest or requestPaymentData is true .
|
||||||||||||
sendAuthorizationRequest
BooleanN/A
|
Whether an authorization request will be sent to the included emailAddress and/or
phoneNumber . Default: false . An authorization request will only be sent if the status of the schedule is ACTIVE ,
AUTHORIZE or UNAUTHORIZED .
When an authorization request is sent, the schedule will be set to a status of AUTHORIZE until the
account holder has completed the authorization request. When the authorization request is successfully
completed,
the status of the schedule will be set to ACTIVE .If sendAuthorizationRequest is true , the Authorization object is
required,
along with either the emailAddress or phoneNumber .
|
||||||||||||
authorization
AuthorizationN/A
Conditional
|
The data relating to an authorization request.
Required if sendAuthorizationRequest or requestPaymentData is true .
Details
|
||||||||||||
addressOne
Alphanumeric80
|
The address for the person associated with this schedule. | ||||||||||||
addressTwo
Alphanumeric45
|
The second part of the address for the person associated with this schedule. | ||||||||||||
city
Alphanumeric45
|
The city for the person associated with this schedule. | ||||||||||||
state
Alpha2
Conditional
|
The state for the person associated with this schedule. Some payment gateway processors require this. | ||||||||||||
zip
NumericString5
Conditional
|
The zip code for the person associated with this schedule. Some payment gateway processors require this. | ||||||||||||
zipPlusFour
Alphanumeric4
|
The four digit zip code extension for the person associated with this schedule. | ||||||||||||
country
Alphanumeric2
|
The country for the person associated with this schedule. | ||||||||||||
locationId
Numeric10
|
The locationId for a branch of the company setting up the schedule (if configured. Typically this will be blank). | ||||||||||||
username
Alphanumeric75
Required
|
The username for the employee creating the schedule. This value is used as the createUser and/or
updateUser .
|
||||||||||||
billingCard
ObjectN/A
Conditional
|
BillingCard object. This is ONLY returned when paymentMethod is CARD
and when a single Schedule object is returned.Required if paymentMethod is set to CARD .
Only the accountDirective field in the billingCard object is required if requestPaymentData
is true and CARD is an accepted payment type. Details
|
||||||||||||
billingCheck
ObjectN/A
Conditional
|
BillingCheck object. This is ONLY returned when paymentMethod is CHECK
and when a single Schedule object is returned.Required if paymentMethod is set to CHECK .
Only the accountDirective field in the billingCheck object is required if requestPaymentData
is true and CHECK is an accepted payment type.
Details
|
||||||||||||
billingPayPal
ObjectN/A
Conditional
|
BillingPayPal object. This is ONLY returned when paymentMethod is PAYPAL
and when a single Schedule object is returned.Required if paymentMethod is set to PAYPAL .
Only the accountDirective field in the billingPayPal object is required if requestPaymentData
is true and PAYPAL is an accepted payment type.
Details
|
||||||||||||
customReceiptLabels
ObjectN/A
|
CustomReceiptLabels object that contains labels which will override the default labels used on receipts.
This will be returned when a single schedule returned and can be modified through the schedules endpoint.
Invalid values will be ignored.
Description: See object definition below.
|
||||||||||||
customRenderLabels
ObjectN/A
|
customRenderLabels object that contains labels which will override the default labels used on a Schedule render .
This will be returned when a single schedule is returned and can be modified through the schedules endpoint.
Invalid values will be ignored.
Description: See object definition below.
|
||||||||||||
roundTripMap
ObjectN/A
|
An object with a custom set of key/value pairs to save and return with the Schedule.
Both the Key and Value are required and must be 75 characters or less.
|
||||||||||||
notificationEvent
String15
|
Specify if a Notification Event should be sent when the Schedule is created.
If this field is not provided, no Notification Event will be sent. This field is not saved and will not be returned on a GET
Valid value(s):
SCHEDULE |
||||||||||||
--Account Directive Migration
PATCH :
Test endpoint: https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/migrations/accountdirectives
Live endpoint: https://schedule.pdc4u.com/ScheduleService/api/v1_0/migrations/accountdirectivesSample Response:
{
"response": "Account directive migration started for 15 schedules"
}
Send a PATCH
request with a AccountDirectiveMigration
body to migrate all schedules that aren't in a COMPLETED
status from one accountDirective
to another. This will apply only to unprocessed new scheduled payments. Returns a MigrationResponse
. This is an asynchronous process and realtime processing results will not be returned.
AccountDirectiveMigration
Attribute | Description |
oldAccountDirective
Alphanumeric String
10
Required
|
The accountDirective assigned to the targeted schedules.
|
newAccountDirective
Alphanumeric String
10
Required
|
The desired accountDirective to assign to the targeted schedules.
Constraint(s): Must be valid for the same payment method as the
oldAccountDirective .If the payment method is CARD , this field must allow at least the same card types as the oldAccountDirective .If the payment method is CHECK , this field must be valid for the same SEC code as the oldAccountDirective
|
MigrationResponse
Attribute | Description |
response
String
|
A description of the processing status. |
requestErrorList
List
|
A list of RequestError objects. Only returned on unsuccessful migrations.
|
--Schedule Retrieval (List)
POST :
Test endpoint: https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/search
Live endpoint: https://schedule.pdc4u.com/ScheduleService/api/v1_0/schedules/search
Sample Response:
{
"scheduleList": [
{
"id": 23,
"companyId": 1234,
"accountNumber": "456465",
"status": "COMPLETED",
"paymentMethod": "CHECK",
"firstName": "Cashier",
"lastName": "test",
"settingId": 2,
"memo": "Cashier test",
"addressOne": "3242 Street",
"city": "myCity",
"state": "UT",
"zip": "12345",
"origin": "EXT",
"locationId": "2",
"recurrenceRule": "FREQ=MONTHLY;INTERVAL=1;",
"createUser": "test@test.com",
"updateUser": "tester@test.com",
"createDate": "2018-04-03 15:48:07",
"updateDate": "2018-08-30 10:44:37",
"requestPaymentData": false,
"sendAuthorizationRequest": false,
"pendingAmount": 0.00,
"nextPaymentAmount": 0.00,
"collectedAmount": 100.00,
"unsuccessfulAmount": 400.00,
"totalExpectedAmount": 580.00,
"pendingCount": 0,
"collectedCount": 4,
"unsuccessfulCount": 1,
"totalExpectedCount": 5,
"initialPaymentAmount": 0,
"adjustmentAmount": 0,
"billingLastFour": "1212"
},
{
"id": 24,
"companyId": 1234,
"accountNumber": "12344",
"status": "COMPLETED",
"paymentMethod": "CARD",
"firstName": "Arthur",
"lastName": "TestMan",
"settingId": 3,
"emailAddress": "tested@test.com",
"origin": "EXT",
"recurrenceRule": "FREQ=DAILY;INTERVAL=1;",
"createUser": "test@test.com",
"updateUser": "test@test.com",
"createDate": "2018-04-05 12:17:28",
"updateDate": "2018-04-26 17:15:55",
"requestPaymentData": false,
"sendAuthorizationRequest": false,
"pendingAmount": 0.00,
"collectedAmount": 10.01,
"unsuccessfulAmount": 0.00,
"totalExpectedAmount": 10.01,
"pendingCount": 0,
"collectedCount": 2,
"unsuccessfulCount": 0,
"totalExpectedCount": 2,
"initialPaymentAmount": 0,
"adjustmentAmount": 0,
"billingLastFour": "2224"
},
{
"id": 25,
"companyId": 1234,
"accountNumber": "8874",
"status": "ACTIVE",
"paymentMethod": "CARD",
"firstName": "Keith",
"lastName": "CardTester",
"settingId": 1374,
"emailAddress": "test@tests.com",
"phoneNumber": "8017810199",
"addressOne": "223 Round Ave",
"city": "CityPlace",
"state": "UT",
"zip": "84421",
"origin": "EXT",
"locationId": "23",
"recurrenceRule": "FREQ=MONTHLY;INTERVAL=1;",
"createUser": "test@test.com",
"updateUser": "test@test.com",
"createDate": "2018-05-01 16:29:09",
"updateDate": "2018-08-17 10:31:00",
"requestPaymentData": false,
"sendAuthorizationRequest": false,
"pendingAmount": 28000.00,
"nextPaymentAmount": 1000.00,
"collectedAmount": 16080.00,
"unsuccessfulAmount": 1005.00,
"totalExpectedAmount": 45085.00,
"nextPaymentDate": "2020-01-18",
"pendingCount": 28,
"collectedCount": 23,
"unsuccessfulCount": 2,
"totalExpectedCount": 53,
"initialPaymentAmount": 0,
"adjustmentAmount": 0,
"billingLastFour": "1111"
}
]
}
POST
to retrieve a list of Schedule
objects filtered on a SearchParameters
object passed in.
SearchParameters
Attribute | Description |
---|---|
createStartDate
DateTime19
|
Filters the records by looking for schedules with a createDate newer than or equal to the date provided.
Formatted "yyyy-MM-dd HH:mm:ss".
Format: URL Encoded ISO-8601
|
createEndDate
DateTime19
|
Filters the records by looking for schedules with a createDate older than or equal to the date provided.
Formatted "yyyy-MM-dd HH:mm:ss".
Format: URL Encoded ISO-8601
|
updateStartDate
DateTime19
|
Filters the records by looking for schedules with a updateDate newer than or equal to the date provided.
Formatted "yyyy-MM-dd HH:mm:ss".
Format: URL Encoded ISO-8601
|
updateEndDate
DateTime19
|
Filters the records by looking for schedules with a updateDate older than or equal to the date provided.
Formatted "yyyy-MM-dd HH:mm:ss".
Format: URL Encoded ISO-8601
|
paymentDateStart
DateTime19
|
Filters the records by looking for schedules with a SchedulePayment paymentDate newer than or equal to the date provided.
Formatted "yyyy-MM-dd HH:mm:ss".
Format: URL Encoded ISO-8601
NOTE: Using this search option, the matching Schedule payments will be provided and the Schedule summary calculated fields (pendingAmount , pendingCount , etc) will be based on the matching payments
|
paymentDateEnd
DateTime19
|
Filters the records by looking for schedules with a SchedulePayment paymentDate older than or equal to the date provided.
Formatted "yyyy-MM-dd HH:mm:ss".
Format: URL Encoded ISO-8601
NOTE: Using this search option, the matching Schedule payments will be provided and the Schedule summary calculated fields (pendingAmount , pendingCount , etc) will be based on the matching payments
|
firstName
Alphanumeric45
|
Filters the records by the first name on the schedule. |
lastName
Alphanumeric45
|
Filters the records by the last name on the schedule. |
accountNumber
45
Alphanumeric
|
Filters the records by the account number on the schedule. |
paymentType
AlphanumericN/A
|
Filters the records by the payment type on the schedule.
If empty then both values will be used.
Valid value(s):
CARD CHECK PAYPAL |
origin
ListN/A
|
Filter the records by a list of origins. You can pass in an alphanumeric list of Origin values.
|
createUser
Alphanumeric75
Deprecated
|
This field has been deprecated in favor of using createUserList |
createUserList
ListN/A
|
Filters the records by a list of alphanumeric users who created the record. Users cannot be longer than 75 characters. |
updateUser
Alphanumeric75
Deprecated
|
This field has been deprecated in favor of using updateUserList. |
updateUserList
ListN/A
|
Filters the records by a list of alphanumeric users who have updated the record. Users cannot be longer than 75 characters. |
billingLastFour
Alphanumeric4
|
Filters the records by the last four of the card number or bank account number. |
status
ListN/A
|
Filters the records by the current status of the Schedule . You can pass in a list of values.
Valid value(s):
DRAFT - Schedules in DRAFT have not yet been saved as ACTIVE .ACTIVE - Schedules that are actively processing payments.INACTIVE - Schedules that have been inactivated and are no longer running payments, though PENDING payments may still be present.COMPLETED - Schedules that have finished processing all payments, be they successful or failed.AUTHORIZE - Schedules that are pending the completion of a signature request before becoming ACTIVE .UNAUTHORIZED - Schedules of which the signature request was not completed successfully.PAYMENT_FAILED - Schedules of which the first due payment failed while trying to Activate the Schedule.BILLING_DATA - Schedules that are pending the completion of a signature request requesting payment data to be entered. |
accountDirectiveList
ListN/A
|
Filters the records by a list of their associated account directives. |
locationIdList
ListN/A
|
Filters the records by a list of numeric locationIds. To search for schedules that do not have a locationId assigned, include 0 as one of the locationId's to search for.
|
paymentStatusList
ListN/A
|
Filters the records by looking for schedules with a matching SchedulePayment status .
Valid value(s):
PENDING ,
WAITING ,
PULLED ,
ACKNOWLEDGED ,
REJECTED ,
SUBMITTED ,
VOID ,
PAID ,
FUNDED ,
NSF ,
RETURNED ,
NSF_DEDUCTION ,
DECLINED ,
CORRECTION ,
ERROR ,
RETRY ,
CANCELLED ,
SKIPPED
NOTE: Using this search option, the matching Schedule payments will be provided and the Schedule summary calculated fields (pendingAmount , pendingCount , etc) will be based on the matching payments
|
roundTripMapSearch
ListN/A
|
Filters the records by a list of SearchRoundTripMap objects. Those key/value pairs combined as a single object will perform an AND search for Schedules matching all those of the single object. A separate object of key/value pairs will perform an OR search for Schedules matching any pairs between the separate objects in the list.
see search example |
recordStart
Numeric20
|
The record count to start on.
Default: 0
|
recordCount
Numeric4
|
How many records to return.
Default: 2000
Maximum: 5000 |
SearchRoundTripMap
Attribute | Description |
YOUR_KEY_NAME
Alphanumeric75
Required
|
The round trip name to filter by. |
YOUR_VALUES
Alphanumeric ListN/A
Required
|
A list of values for the round trip name to filter by. If the list contains a value of -1 , the results will also be filtered to include schedules that do not contain a RoundTripMap with the specified nameConstraint(s): Each value must not exceed 75 characters
|
Example roundTripMapSearch
WHERE
(("Key 1" == "Key 1 Value 1" OR "Key 1" == "Key 1 Value 2") AND ("Key 2" == "Key 2 Value 1" OR "Key 2" does not exist))
OR ("Key 3" == "Key 3 Value1")
json [ { "Key 1": ["Key 1 Value 1", "Key 1 Value 2"], "Key 2": ["Key 2 Value 1", "-1"] }, { "Key 3" : ["Key 3 Value 1"] } ]
--Schedule Retrieval (Individual)
GET :
Test endpoint: [https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/{scheduleId}]](https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/{scheduleId})
Live endpoint: https://schedule.pdc4u.com/ScheduleService/api/v1_0/schedules/{scheduleId}
Sample Response:
{
"id": 23,
"companyId": 1234,
"accountNumber": "456465",
"status": "COMPLETED",
"paymentMethod": "CHECK",
"firstName": "Cashier",
"lastName": "test",
"settingId": 2,
"memo": "Cashier test",
"addressOne": "3242 Street",
"city": "myCity",
"state": "UT",
"zip": "12345",
"origin": "EXT",
"locationId": "2",
"recurrenceRule": "FREQ=MONTHLY;INTERVAL=1;",
"createUser": "test@test.com",
"updateUser": "tester@test.com",
"createDate": "2018-04-03 15:48:07",
"updateDate": "2018-08-30 10:44:37",
"requestPaymentData": false,
"sendAuthorizationRequest": false,
"pendingAmount": 0.00,
"nextPaymentAmount": 0.00,
"collectedAmount": 100.00,
"unsuccessfulAmount": 400.00,
"totalExpectedAmount": 580.00,
"pendingCount": 0,
"collectedCount": 4,
"unsuccessfulCount": 1,
"totalExpectedCount": 5,
"initialPaymentAmount": 0,
"adjustmentAmount": 0,
"billingLastFour": "1212"
}
Retrieve an individual Schedule
object based on the id passed in the URL.
https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/23
--Schedule Deletion
DELETE :
Test endpoint: https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/{id}
Live endpoint: https://schedule.pdc4u.com/ScheduleService/api/v1_0/schedules/{id}
Delete an individual schedule by scheduleId
. A schedule cannot be deleted if has payments that have been attempted, whether successfully or failed. A schedule that cannot be
deleted should be set to INACTIVE
with a PATCH
request.
This request will return no response body, rather just a standard HTTP
status code 200
for successful deletion.
https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/4
--Schedule Render
POST :
Test endpoint: [https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/render]](https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/render)
Live endpoint: https://schedule.pdc4u.com/ScheduleService/api/v1_0/schedules/render
Sample Response:
{
"scheduleId": 17381,
"includeSignatureImage": false,
"scheduleHtml": "<!DOCTYPE html><html lang='en' xmlns='http://www.w3.org/1999/xhtml'><head> <meta charset='utf-8'> <meta name='viewport' content='width=device-width'> <meta http-equiv='X-UA-Compatible' content='IE=edge'> <meta name='x-apple-disable-message-reformatting'> <title>Schedule Information</title> <!-- Web Font / @font-face : BEGIN --> <!-- Desktop Outlook chokes on web font references and defaults to Times New Roman, so we force a safe fallback font. --> <!--[if mso]> <style> * { font-family: sans-serif !important; } </style> <![endif]--> <!-- All other clients get the webfont reference; some will render the font and others will silently fail to the fallbacks. --> <!--[if !mso]><!--> <link href='https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic' rel='stylesheet' type='text/css'> <!--<![endif]--> <!-- Web Font / @font-face : END --> <!-- CSS Reset : BEGIN --> <style> /* What it does: Remove spaces around the email design added by some email clients. */ /* Beware: It can remove the padding / margin and add a background color to the compose a reply window. */ html, body { margin: 0 auto !important; padding: 0 !important; height: 100% !important; width: 100% !important; } /* What it does: Stops email clients resizing small text. */ * { -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; } .value { text-align: right; } .title { text-align: left; } /* What it does: Centers email on Android 4.4 */ div[style*='margin: 16px 0'] { margin: 0 !important; } /* What it does: Stops Outlook from adding extra spacing to tables. */ table, td { mso-table-lspace: 0pt !important; mso-table-rspace: 0pt !important; } /* What it does: Fixes webkit padding issue. */ table { border-spacing: 0 !important; border-collapse: collapse !important; table-layout: fixed !important; margin: 0 auto !important; } /* What it does: Uses a better rendering method when resizing images in IE. */ img { -ms-interpolation-mode:bicubic; } /* What it does: Prevents Windows 10 Mail from underlining links despite inline CSS. Styles for underlined links should be inline. */ a { text-decoration: none; } /* What it does: A work-around for email clients meddling in triggered links. */ *[x-apple-data-detectors], /* iOS */ .unstyle-auto-detected-links *, .aBn { border-bottom: 0 !important; cursor: default !important; color: inherit !important; text-decoration: none !important; font-size: inherit !important; font-family: inherit !important; font-weight: inherit !important; line-height: inherit !important; } a[href^=tel]{ color:#555; text-decoration:none; } #footer a[href^=tel]{ color:#fef; text-decoration:none; } /* What it does: Prevents Gmail from displaying a download button on large, non-linked images. */ .a6S { display: none !important; opacity: 0.01 !important; } /* What it does: Prevents Gmail from changing the text color in conversation threads. */ .im { color: inherit !important; } /* If the above doesn't work, add a .g-img class to any image in question. */ img.g-img + div { display: none !important; } /* What it does: Removes right gutter in Gmail iOS app: https://github.com/TedGoas/Cerberus/issues/89 */ /* Create one of these media queries for each additional viewport size you'd like to fix */ /* iPhone 4, 4S, 5, 5S, 5C, and 5SE */ @media only screen and (min-device-width: 320px) and (max-device-width: 374px) and (-webkit-min-device-pixel-ratio: 3) { u ~ div .email-container { min-width: 320px !important; } } /* iPhone 6, 6S, 7, 8, and X */ @media only screen and (min-device-width: 375px) and (max-device-width: 413px) and (-webkit-min-device-pixel-ratio: 2) { u ~ div .email-container { min-width: 375px !important; } } /* iPhone 6+, 7+, and 8+ */ @media only screen and (min-device-width: 414px) and (-webkit-min-device-pixel-ratio: 3) { u ~ div .email-container { min-width: 414px !important; } } /* iPhone X */ @media only screen and (min-device-width: 375px) and (max-device-width: 812px) and (-webkit-min-device-pixel-ratio: 3) { u ~ div .email-container { min-width: 414px !important; } } </style> <!-- What it does: Makes background images in 72ppi Outlook render at correct size. --> <!--[if gte mso 9]> <xml> <o:OfficeDocumentSettings> <o:AllowPNG/> <o:PixelsPerInch>96</o:PixelsPerInch> </o:OfficeDocumentSettings> </xml> <![endif]--> <!-- CSS Reset : END --> <!-- Progressive Enhancements : BEGIN --> <style> /* Media Queries */ @media screen and (min-width:380px) { } @media screen and (min-width:420px) { } @media screen and (min-width:460px) { #scheduleInformation td, #paymentInformation td { display:table-cell !important; } #scheduleInformation td.title, #paymentInformation td.title { padding:0 5% 0 0 !important; width:50% !important; } #scheduleInformation td.value, #paymentInformation td.value { padding:0 0 0 5% !important; text-align:right !important; width:auto !important; } #scheduleInformation td.value h2, #paymentInformation td.value h2 { font-weight:bold !important; } } @media screen and (min-width:600px) { #accountInformation table td table td { display:table-cell !important; } #accountInformation table td table td.payee { padding:0 5% 0 0 !important; width:60% !important; } #accountInformation table td table td.account { padding:0 0 0 5% !important; text-align:right !important; width:auto !important; } #accountInformation table td table td h2 { margin:0 0 10px 0 !important; } } </style> <!-- Progressive Enhancements : END --></head><body width='100%' style='background-color:#fefefe; margin:0; padding:0 !important; width:100%; mso-line-height-rule:exactly;'><center style='background-color:#fefefe; width:100%;'> <!--[if mso | IE]> <table role='presentation' border='0' cellpadding='0' cellspacing='0' width='100%' style='background-color:#fefefe;'> <tr> <td> <![endif]--> <div style='max-width:720px; margin:0 auto;' class='email-container'> <!--[if mso]> <table align='center' role='presentation' cellspacing='0' cellpadding='0' border='0' width='720'> <tr> <td> <![endif]--> <!-- Email Body : BEGIN --> <table align='center' role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%' style='margin:auto;'> <tbody> <!-- Header Bar : BEGIN --> <tr> <td id='header' style='background:#56565A; font-family:Lato,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif; padding:40px; text-align:center;'> </td> </tr> <!-- Header Bar : END --> <!-- Clear Spacer 40 : BEGIN --> <tr> <td class='spacerForty' aria-hidden='true' height='40' style='font-size:0px; line-height:0px;'> </td> </tr> <!-- Clear Spacer 40 : END --> <!-- Main Content : BEGIN --> <tr> <td id='content' style='color:#56565a; font-family:Lato,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif; font-size:16px; line-height:24px; padding:0 40px;'> <table role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%'> <tbody> <!-- Account Information : BEGIN --> <tr> <td id='accountInformation'> <h1 style='text-align:left; margin:0; font-size:24px; line-height:32px; font-weight:normal;'>Account Information</h1> <hr style='margin:20px 0;'> <table role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%'> <tbody> <tr> <td style='padding:0 20px;'> <table role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%'> <tbody> <tr> <td class='payee' style='text-align:left; padding:0 0 20px 0; vertical-align:top; width:100%;'> <h2 style='font-size:20px; font-weight:bold; line-height:30px; margin:0;'>Test McTester</h2> <div> <span style='display:none'></span> <span style='display:display:none;'></span> </div> <div> <span style='display:none;'></span> </div> <div> <span style='display:none'></span> </div> </td> <td class='account' style='text-align:right; padding:0; vertical-align:top; width:100%;'> <h2 style='font-size:20px; font-weight:bold; line-height:30px; margin:0;'>Account Number</h2> <div> 123455 </div> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> </td> </tr> <!-- Account Information : END --> <!-- Clear Spacer 40 : BEGIN --> <tr> <td class='spacerForty' aria-hidden='true' height='40' style='font-size:0px; line-height:0px;'> </td> </tr> <!-- Clear Spacer 40 : END --> <!-- Schedule Information : BEGIN --> <tr> <td id='scheduleInformation'> <h1 style='text-align:left; margin:0; font-size:24px; line-height:32px; font-weight:normal;'>Schedule Information</h1> <hr style='margin:20px 0;'> <table role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%'> <tbody> <tr> <td style='padding:0 20px;'> <table role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%'> <tbody> <tr> <td style='padding:0 5% 0 0; text-align:left; vertical-align:top;'> Amount Owed </td> <td style='padding:0 0 0 5%; text-align:right; vertical-align:top;'> $1,000.00 </td> </tr> <!-- Clear Spacer 20 : BEGIN --> <tr> <td class='spacerTwenty' colspan='2' aria-hidden='true' height='20' style='font-size:0px; line-height:0px;'> </td> </tr> <!-- Clear Spacer 20 : END --> <tr> <td style='padding:0 5% 0 0; text-align:left; vertical-align:top;'> Amount Paid </td> <td style='padding:0 0 0 5%; text-align:right; vertical-align:top;'> $0.00 </td> </tr> <tr> <td colspan='2' style=''> <hr style='margin:20px 0;'> </td> </tr> <tr> <td style='padding:0 5% 0 0; text-align:left; vertical-align:top;'> <h2 style='font-size:20px; font-weight:bold; line-height:30px; margin:0;'>Amount Remaining</h2> </td> <td style='padding:0 0 0 5%; text-align:right; vertical-align:top;'> <h2 style='font-size:20px; font-weight:bold; line-height:30px; margin:0;'>$1,000.00</h2> </td> </tr> </tbody> </table> </td> </tr> <!-- Clear Spacer 40 : BEGIN --> <tr> <td class='spacerForty' aria-hidden='true' height='40' style='font-size:0px; line-height:0px;'> </td> </tr> <!-- Clear Spacer 40 : END --> <tr> <td style='padding:0 20px;'> <table role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%'> <tbody> <tr> <td> <table role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%'> <tbody> <tr> <td class='title' style='font-weight:bold; padding:0; vertical-align:top; width:100%;'> Schedule Status </td> <td class='value' style='padding:0; text-align:right; vertical-align:top; width:100%;'> Active </td> </tr> </tbody> </table> </td> </tr> <!-- Clear Spacer 20 : BEGIN --> <tr> <td class='spacerTwenty' aria-hidden='true' height='20' style='font-size:0px; line-height:0px;'> </td> </tr> <!-- Clear Spacer 20 : END --> <tr> <td> <table role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%'> <tbody> <tr> <td class='title' style='font-weight:bold; padding:0; vertical-align:top; width:100%;'> Next Payment </td> <td class='value' style='padding:0; vertical-align:top; width:100%;'> $100.00 on 01/24/2020 </td> </tr> <!-- Clear Spacer 20 : BEGIN --> <tr> <td class='spacerTwenty' aria-hidden='true' height='20' style='font-size:0px; line-height:0px;'> </td> <td class='spacerTwenty' aria-hidden='true' height='20' style='font-size:0px; line-height:0px;'> </td> </tr> <!-- Clear Spacer 20 : END --> </tbody> </table> </td> </tr> <tr> <td> <table role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%'> <tbody> <tr> <td class='title' style='font-weight:bold; padding:0; vertical-align:top; width:100%;'> Schedule Frequency </td> <td class='value' style='padding:0; vertical-align:top; width:100%;'> Once per month </td> </tr> </tbody> </table> </td> </tr> <!-- Clear Spacer 20 : BEGIN --> <tr> <td class='spacerTwenty' aria-hidden='true' height='20' style='font-size:0px; line-height:0px;'> </td> </tr> <!-- Clear Spacer 20 : END --> <tr> <td> <table role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%'> <tbody> <tr> <td class='title' style='font-weight:bold; padding:0; vertical-align:top; width:100%;'> Remaining Payments </td> <td class='value' style='padding:0; vertical-align:top; width:100%;'> 10 </td> </tr> </tbody> </table> </td> </tr> <tr style='display:none'> <td> <table role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%'> <tbody> <!-- Clear Spacer 20 : BEGIN --> <tr> <td class='spacerTwenty' aria-hidden='true' height='20' style='font-size:0px; line-height:0px;'> </td> </tr> <!-- Clear Spacer 20 : END --> <tr> <td> <table role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%'> <tbody> <tr> <td class='title' style='font-weight:bold; padding:0; vertical-align:top; width:100%;'> Memo </td> <td class='value' style='padding:0; vertical-align:top; width:100%;'> <p style='line-height:20px; margin:0;'></p> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> </td> </tr> <!-- Schedule Information : END --> <!-- Clear Spacer 40 : BEGIN --> <tr> <td class='spacerForty' aria-hidden='true' height='40' style='font-size:0px; line-height:0px;'> </td> </tr> <!-- Clear Spacer 40 : END --> <!-- Payment Information : BEGIN --> <tr> <td id='paymentInformation'> <h1 style='text-align:left; margin:0; font-size:24px; line-height:32px; font-weight:normal;'>Payment Information</h1> <hr style='margin:20px 0;'> <!-- Card Payment : Begin --> <table id='cardPayment' style='display:none' role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%'> <tbody> <tr> <td style='padding:0 20px;'> <table role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%'> <tbody> <tr> <td> <table role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%'> <tbody> <tr> <td class='title' style='font-weight:bold; padding:0; vertical-align:top; width:100%;'> Card Number </td> <td class='value' style='padding:0; vertical-align:top; width:100%;'> ************ </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <!-- Card Payment : END --> <!-- Check Payment : BEGIN --> <table id='checkPayment' role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%'> <tbody> <tr> <td style='padding:0 20px;'> <table role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%'> <tbody> <tr> <td> <table role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%'> <tbody> <tr> <td class='title' style='font-weight:bold; padding:0; vertical-align:top; width:100%;'> Bank Account Number </td> <td class='value' style='padding:0; vertical-align:top; width:100%;'> ******4321 </td> </tr> </tbody> </table> </td> </tr> <!-- Clear Spacer 20 : BEGIN --> <tr> <td class='spacerTwenty' aria-hidden='true' height='20' style='font-size:0px; line-height:0px;'> </td> </tr> <!-- Clear Spacer 20 : END --> <tr> <td> <table role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%'> <tbody> <tr> <td class='title' style='font-weight:bold; padding:0; vertical-align:top; width:100%;'> Bank Routing Number </td> <td class='value' style='padding:0; vertical-align:top; width:100%;'> 123456789 </td> </tr> </tbody> </table> </td> </tr> <!-- Clear Spacer 20 : BEGIN --> <tr> <td class='spacerTwenty' aria-hidden='true' height='20' style='font-size:0px; line-height:0px;'> </td> </tr> <!-- Clear Spacer 20 : END --> <tr> <td> <table role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%'> <tbody> <tr> <td class='title' style='font-weight:bold; padding:0; vertical-align:top; width:100%;'> Bank Account Type </td> <td class='value' style='padding:0; vertical-align:top; width:100%;'> Checking </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <!-- Check Payment : END --> </td> </tr> <!-- Payment Information : END --> <!-- Clear Spacer 40 : BEGIN --> <tr> <td class='spacerForty' aria-hidden='true' height='40' style='font-size:0px; line-height:0px;'> </td> </tr> <!-- Clear Spacer 40 : END --> <!-- Payment Schedule : BEGIN --> <tr> <td id='paymentSchedule'> <h1 style='text-align:left; margin:0; font-size:24px; line-height:32px; font-weight:normal;'>Payment Schedule</h1> <hr style='margin:20px 0;'> <table role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%'> <tbody> <tr> <td style='padding:0 20px;'> <div style='border:1px solid #cacaca; overflow-x:auto; width:100%;'> <table style='table-layout:initial !important;' role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%'> <thead> <tr style='background:#cacaca;'> <th style='padding:10px 10px 10px 20px; text-align:left;'> Date </th> <th style='padding:10px 20px; text-align:right;'> Amount </th> <th style='padding:10px 20px 10px 10px; text-align:left;'> Status </th> </tr> </thead> <tbody> <tr class='oddRow' style='background:#fefefe;'> <td style='padding:10px 10px 10px 20px; text-align:left; vertical-align:top;'> 01/24/2020 </td> <td style='padding:10px 20px; text-align:right; vertical-align:top;'> $100.00 </td> <td style='padding:10px 20px 10px 10px; text-align:left; vertical-align:top;'> Pending </td></tr><tr class='evenRow' style='background:#f1f1f1;'> <td style='padding:10px 10px 10px 20px; text-align:left; vertical-align:top;'> 02/24/2020 </td> <td style='padding:10px 20px; text-align:right; vertical-align:top;'> $100.00 </td> <td style='padding:10px 20px 10px 10px; text-align:left; vertical-align:top;'> Pending </td></tr><tr class='oddRow' style='background:#fefefe;'> <td style='padding:10px 10px 10px 20px; text-align:left; vertical-align:top;'> 03/24/2020 </td> <td style='padding:10px 20px; text-align:right; vertical-align:top;'> $100.00 </td> <td style='padding:10px 20px 10px 10px; text-align:left; vertical-align:top;'> Pending </td></tr><tr class='evenRow' style='background:#f1f1f1;'> <td style='padding:10px 10px 10px 20px; text-align:left; vertical-align:top;'> 04/24/2020 </td> <td style='padding:10px 20px; text-align:right; vertical-align:top;'> $100.00 </td> <td style='padding:10px 20px 10px 10px; text-align:left; vertical-align:top;'> Pending </td></tr><tr class='oddRow' style='background:#fefefe;'> <td style='padding:10px 10px 10px 20px; text-align:left; vertical-align:top;'> 05/24/2020 </td> <td style='padding:10px 20px; text-align:right; vertical-align:top;'> $100.00 </td> <td style='padding:10px 20px 10px 10px; text-align:left; vertical-align:top;'> Pending </td></tr><tr class='evenRow' style='background:#f1f1f1;'> <td style='padding:10px 10px 10px 20px; text-align:left; vertical-align:top;'> 06/24/2020 </td> <td style='padding:10px 20px; text-align:right; vertical-align:top;'> $100.00 </td> <td style='padding:10px 20px 10px 10px; text-align:left; vertical-align:top;'> Pending </td></tr><tr class='oddRow' style='background:#fefefe;'> <td style='padding:10px 10px 10px 20px; text-align:left; vertical-align:top;'> 07/24/2020 </td> <td style='padding:10px 20px; text-align:right; vertical-align:top;'> $100.00 </td> <td style='padding:10px 20px 10px 10px; text-align:left; vertical-align:top;'> Pending </td></tr><tr class='evenRow' style='background:#f1f1f1;'> <td style='padding:10px 10px 10px 20px; text-align:left; vertical-align:top;'> 08/24/2020 </td> <td style='padding:10px 20px; text-align:right; vertical-align:top;'> $100.00 </td> <td style='padding:10px 20px 10px 10px; text-align:left; vertical-align:top;'> Pending </td></tr><tr class='oddRow' style='background:#fefefe;'> <td style='padding:10px 10px 10px 20px; text-align:left; vertical-align:top;'> 09/24/2020 </td> <td style='padding:10px 20px; text-align:right; vertical-align:top;'> $100.00 </td> <td style='padding:10px 20px 10px 10px; text-align:left; vertical-align:top;'> Pending </td></tr><tr class='evenRow' style='background:#f1f1f1;'> <td style='padding:10px 10px 10px 20px; text-align:left; vertical-align:top;'> 10/24/2020 </td> <td style='padding:10px 20px; text-align:right; vertical-align:top;'> $100.00 </td> <td style='padding:10px 20px 10px 10px; text-align:left; vertical-align:top;'> Pending </td></tr> </tbody> </table> </div> </td> </tr> </tbody> </table> </td> </tr> <!-- Payment Schedule : END --> <!-- Clear Spacer 40 : BEGIN --> <tr> <td class='spacerForty' aria-hidden='true' height='40' style='font-size:0px; line-height:0px;'> </td> </tr> <!-- Clear Spacer 40 : END --> <!-- Signature Image : BEGIN --> <tr style='display:none'> <td id='signatureConfirmation'> <h1 style='margin:0; font-size:24px; line-height:32px; font-weight:normal;'>Signature Confirmation</h1> <hr style='margin:20px 0;'> <table role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%'> <tbody> <tr> <td style='padding:0 20px;'> <table role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%'> <tbody> <tr> <td style='text-align:center; vertical-align:top; width:100%;'> <div id='signatureConfirmationContainer' style='border:1px solid #cacaca; box-sizing:border-box; padding:2%; position:relative; width:100%;'> <div id='signatureConfirmationImage' style='margin:0 auto; position:relative; max-width:535px; width:100%; z-index:4;'> <img src='data:image/png;base64,' alt='Signature Confirmation' style='max-width:100%;'> </div> <div id='signatureConfirmationLine' style='background:#cacaca; height:2px; position:absolute; top:70%; width:96%; z-index:1;'></div> <div class='signatureConfirmationX' style='background:#cacaca; height:30%; left:6%; position:absolute; top:35%; transform:rotate(34deg); -webkit-transform-style: preserve-3d; -webkit-transform: rotateZ(34deg); width:1%; z-index:2;'></div> <div class='signatureConfirmationX' style='background:#cacaca; height:30%; left:6%; position:absolute; top:35%; transform:rotate(-34deg); -webkit-transform-style: preserve-3d; -webkit-transform: rotateZ(-34deg); width:1%; z-index:2;'></div> </div> </td> </tr> </tbody> </table> </td> </tr> <!-- Clear Spacer 40 : BEGIN --> <tr> <td class='spacerForty' aria-hidden='true' height='40' style='font-size:0px; line-height:0px;'> </td> </tr> <!-- Clear Spacer 40 : END --> </tbody> </table> </td> </tr> <!-- Signature Image : END --> </tbody> </table> </td> </tr> <!-- Main Content : END --> <!-- Custom Text : BEGIN --> <tr> <td id='customText'> <hr style='margin:0 0 40px 0;'> <table role='presentation' cellspacing='0' cellpadding='0' border='0' width='100%'> <tbody> <tr> <td style='color:#56565a; font-family:Lato,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif; font-size:16px; line-height:24px; padding:0 40px;'> <table> <tbody> <!-- Custom Text : BEGIN --> <tr> <td style='text-align:center;'> After this schedule text </td> </tr> <!-- Custom Text : END --> <!-- Clear Spacer 40 : BEGIN --> <tr> <td class='spacerForty' aria-hidden='true' height='40' style='font-size:0px; line-height:0px;'> </td> </tr> <!-- Clear Spacer 40 : END --> </tbody> </table> </td> </tr> </tbody> </table> </td> </tr> <!-- Custom Text : END --> <!-- Footer Bar : BEGIN --> <tr id='footer'> <td style='background:#56565a; color:#fefefe; font-family:Lato,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif; font-size:16px; line-height:24px; padding:40px; text-align:center;'> <h2 style='font-size:20px; font-weight:normal; line-height:30px; margin:0 0 20px 0;'>Demonstration Company</h2> <div> Just an address </div> <div> OKLAHOMA CITY, OK 73119 </div> <div style='display:none'> <span style='margin:20px 0 0 0;'>Customer Support : <a style='color:#fefefe;'></a></span> </div> <div style='margin:40px 0 0 0;'> <small><i>01/13/2020 14:48 PM</i></small> </div> </td> </tr> <!-- Footer Bar : END --> </tbody> </table> <!-- Email Body : END --> <!--[if mso]> </td> </tr> </table> <![endif]--> </div> <!--[if mso | IE]> </td> </tr> </table> <![endif]--> </center></body></html>"
}
Retrieve an HTML representation of an individual Schedule
object based on the id passed in the request.
https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/render
Attribute | Description |
---|---|
scheduleId
Numeric10
|
The id of the schedule for which to generate the render. |
emailTo
ListN/A
|
A list of email addresses to send the HTML render to. |
emailCC
ListN/A
|
A list of email addresses to CC send the HTML render to. |
emailBCC
ListN/A
|
A list of email addresses to BCC send the HTML render to. |
scheduleHtml
AlphanumericN/A
|
The HTML render of the schedule. |
includeSignatureImage
BooleanN/A
|
Whether to include the signature image on the schedule render. A signature image will only be present if sendAuthorizationRequest
was originally set to true and the signature request was completed successfully.
|
Schedule Payments
Use this endpoint to add, edit or remove payments from an existing schedule.
POST
to add a new payment.
PUT
to overwrite an existing payment by paymentId
.
GET
to retrieve list of schedule payments.
GET
to retrieve single schedule payments by paymentId
.
DELETE
to delete single schedule payment by paymentId
.
See note about Schedule Payment Processing.
Schedule Payment Object
Full Payment Object
>Payment Object: ```json { "paymentId": 2, "status": "ERROR", "paymentAmount": 300.00, "paymentDate": "2019-12-08", "arrivalId": 4, "paymentAttempts": [ { "arrivalId": 4, "attemptDate": "2019-12-08T11:01:23.000+0000", "status": "ERROR", "statusMessage": "Request error: Field can only contain numeric and dash characters. " } ] } ```Attribute | Description | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
paymentId
Numeric20
|
Id for the payment record. | ||||||||||||||||
scheduleId
Numeric10
|
Id for the parent schedule object. | ||||||||||||||||
status
AlphaN/A
|
The current status of the payment.
Valid value(s): PENDING - The payment is waiting to be processed.WAITING - The ACH payment wil be submitted with the current day's batch.PULLED - The ACH payment has been pulled from the account.ACKNOWLEDGED - The ACH payment has been submitted to the bank and acknowledged by the bank as received.REJECTED - The payment was rejected.SUBMITTED - The ACH payment has been submitted to the bank.VOID - The payment has been voided.PAID - The payment has processed successfully.FUNDED - The ACH payment has funded successfully.NSF - The ACH payment was rejected by the bank due to non-sufficient funds.RETURNED - The ACH payment was returned.NSF_DEDUCTION - The ACH payment was deducted due to non-sufficient funds.DECLINED - The card payment was declined.CORRECTION - The ACH payment funded successfully but has a corrected bank account or routing number.ERROR - The payment failed to process.RETRY - The payment failed to submit for processing, but will be tried again.CANCELLED - The payment was marked as cancelled and will not be processed.SKIPPED - No successful attempt to process the payment was made and it is past due. This would happen if a schedule was INACTIVE then later activated.DEDUCTION - Payment was returned after being funded.
|
||||||||||||||||
paymentAmount
Numeric11
|
Payment amount for this payment. | ||||||||||||||||
feeAmount
Numeric11
|
Fee amount for this payment. | ||||||||||||||||
totalAmount
Numeric11
|
Payment + Fee amount for this payment. | ||||||||||||||||
paymentDate
Date19
|
Date the payment is scheduled to post, formatted "yyyy-MM-dd".
Format: URL Encoded ISO-8601
|
||||||||||||||||
arrivalId
Numeric11
|
The arrivalId of the last payment attempt. This will only exist if a payment has been attempted. | ||||||||||||||||
transactionId
Numeric20
|
The transaction id of the last payment. This will only exist if a payment has been processed successfully. | ||||||||||||||||
paymentAttempts
List
|
READONLY This is a list of attempts to process this payment, and the results of those attempts. Details
|
--Payment Processing
The payments for an ACTIVE
schedule will process automatically on their paymentDate
. However, it is important to note that when either the processInitialPaymentOnActivation
is true OR the recurrenceRule.DTSTART
is today and there is a first payment due it will attempt to process immediately when the Schedule is attempting to go ACTIVE
. If that attempt is successful, the schedule will go ACTIVE
, otherwise the schedule status will be changed to PAYMENT_FAILED
.
Here are some example situations:
- A schedule was created, later a PUT to go
ACTIVE
is performed. Payments in aPENDING/RETRY
status will be deleted, payments that were not successful (DECLINE
, etc.) will be marked asREJECTED
, and new payments will be created based on the request. If there is a new payment due today it will be attempted now. - A schedule was created, later a PATCH to go
ACTIVE
is performed. Past due payments (older than today) in aPENDING/RETRY/DECLINE/ERROR
status will be changed toSKIPPED
. If there is a payment due today it will be attempted now. - A schedule was created to go
ACTIVE
with a first payment due today. The first payment DECLINED so the schedule is now in aPAYMENT_FAILED
status. Later a PUT to goACTIVE
is performed. TheDECLINE
payment is changed toREJECTED
, and new payments are created based on the request. If there is a new payment due today it will be attempted now. - A schedule was created to go
ACTIVE
with a first payment due today. The first payment DECLINED so the schedule is now in aPAYMENT_FAILED
status. Later that day a PATCH to goACTIVE
is performed. TheDECLINE
payment is retried. If successful, the schedule isACTIVE
, otherwise it will go back toPAYMENT_FAILED
. - A schedule was created to go
ACTIVE
with a first payment due today. The first payment DECLINED so the schedule is now in aPAYMENT_FAILED
status. A day+ later a PATCH to goACTIVE
is performed. TheDECLINE
payment is changed toSKIPPED
. If another first payment is due today it will be attempted now.
--Payment Creation
POST :
Test endpoint: https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedulepayments
Live endpoint: https://schedule.pdc4u.com/ScheduleService/api/v1_0/schedulepayments
Sample Response:
{
"paymentId": 6,
"status": "PENDING",
"paymentAmount": 300.00,
"paymentDate": "2019-12-08"
}
POST
to create a new payment on a schedule.
Attribute | Description |
---|---|
scheduleId
Numeric10
|
Id for the parent schedule object. |
paymentAmount
Numeric11
|
Payment amount for this payment. |
feeAmount
Numeric11
|
Fee amount for this payment. |
totalAmount
Numeric11
Readonly
|
Payment + Fee amount for this payment. |
paymentDate
Date19
|
Date the payment is scheduled to post, formatted "yyyy-MM-dd".
Format: URL Encoded ISO-8601
|
--Payment Modification
PUT :
Test endpoint: https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedulepayments/{schedulepaymentId}
Live endpoint: https://schedule.pdc4u.com/ScheduleService/api/v1_0/schedulepayments/{schedulepaymentId}
Sample Response:
{
"paymentId": 6,
"status": "PENDING",
"paymentAmount": 300.00,
"paymentDate": "2019-12-08"
}
PUT
requests will completely override the existing specified (by schedulePaymentId
payment in the URL) setting. As such, the request object the same as the payment creation.
Payment Modification
Attribute
Description
Id for the parent schedule object.
Payment amount for this payment.
Fee amount for this payment.
Payment + Fee amount for this payment.
Date the payment is scheduled to post, formatted "yyyy-MM-dd".
--Payment Retrieval (Individual)
GET :
Test endpoint: [https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedulepayments/{schedulepaymentId}]](https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedulepayments/{schedulepaymentId})
Live endpoint: https://schedule.pdc4u.com/ScheduleService/api/v1_0/schedulepayments/{schedulepaymentId}
Sample Response:
{
"paymentId": 2,
"status": "ERROR",
"paymentAmount": 300.00,
"paymentDate": "2019-12-08",
"arrivalId": 4,
"paymentAttempts": [
{
"arrivalId": 4,
"attemptDate": "2019-12-08T11:01:23.000+0000",
"status": "ERROR",
"statusMessage": "Request error: Field can only contain numeric and dash characters. "
}
]
}
Retrieve an individual Payment
object based on the id passed in the URL.
https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedulepayments/2
--Payment Deletion
DELETE :
Test endpoint: https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedulepayments/{id}
Live endpoint: https://schedule.pdc4u.com/ScheduleService/api/v1_0/schedulepayments/{id}
Delete an individual payment by schedulePaymentId
. A payment can only be deleted if it is in PENDING
status.
This request will return no response body, rather just a standard HTTP
status code 200
for successful deletion.
https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedulepayments/4
Schedule History
GET
to retrieve list of histories for a schedule.
Schedule History Object
Full History Object
>History Object: ```json { "date": "2020-01-08 04:01:22", "event": "PAYMENT_ATTEMPT", "eventId": 7, "user": "recurring", "data": "Request error: Field can only contain numeric and dash characters. " } ```Attribute | Description |
---|---|
event
AlphaN/A
|
Valid value(s):
CREATE SCHEDULE_MODIFY SCHEDULE_STATUS BILLING_MODIFY PAYMENT_ATTEMPT FLOW_RESULT AUTHORIZATION_REQUEST BILLING_REQUEST |
eventId
Numeric
|
The id of the related EVENT. |
data
Alphanumeric 255
|
Free form text description of the event. |
date
Date19
|
The date the history was added.
Format: ISO-8601 (YYYY-MM-DD HH:mm:ss)
|
user
Alphanumeric75
|
User that added the history. |
isNew
Boolean5
|
Returned with a schedule POST , PUT , or PATCH request to show which history elements were added during that request. Only returned if the value is true .
|
--History Retrieval (List)
GET :
Test endpoint: [https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/{scheduleId}/histories]](https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/{scheduleId}/histories)
Live endpoint: https://schedule.pdc4u.com/ScheduleService/api/v1_0/schedules/{scheduleId}/histories
Sample Response:
{
"scheduleHistoryList": [
{
"date": "2019-11-07 12:49:52",
"event": "CREATE",
"eventId": 3,
"user": "test"
},
{
"date": "2019-11-07 12:49:53",
"event": "AUTHORIZATION_REQUEST",
"eventId": 4,
"user": "test",
"data": "Authorization request HTTP response status: 200 OK"
},
{
"date": "2019-11-07 12:49:52",
"event": "FLOW_REQUEST",
"eventId": 5,
"user": "test"
},
{
"date": "2019-11-07 12:56:08",
"event": "FLOW_RESULT",
"user": "signatureUI",
"data": "FlowId: 5 Updated with status of AUTHORIZED"
},
{
"date": "2019-11-07 12:56:11",
"event": "FLOW_RESULT",
"user": "signatureUI",
"data": "FlowId: 5 Updated with status of COMPLETED"
},
{
"date": "2019-12-08 04:01:23",
"event": "PAYMENT_ATTEMPT",
"eventId": 6,
"user": "recurring",
"data": "Request error: Field can only contain numeric and dash characters. "
},
{
"date": "2020-01-08 04:01:22",
"event": "PAYMENT_ATTEMPT",
"eventId": 7,
"user": "recurring",
"data": "Request error: Field can only contain numeric and dash characters. "
}
]
}
Retrieve an list of ScheduleHistory
objects for the schedule id passed in the URL.
Optional Parameter: eventType - Type of history event to search for
https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/2/histories?eventType=
Attribute | Description |
---|---|
eventType
AlphaN/A
|
Valid value(s):
CREATE - The schedule was created.SCHEDULE_MODIFY - The schedule was modified.SCHEDULE_STATUS - The schedule status was changed.BILLING_MODIFY - The billing data on the schedule was modified.PAYMENT_ATTEMPT - An attempt to process a payment was made.FLOW_RESULT - The status of an attached flow was changed.AUTHORIZATION_REQUEST - An authorization request was sent.BILLING_REQUEST - Billing data was updated from an flow request. |
For Reference
These objects are used or returned in the requests and responses above. They are listed here for quick reference.
--Billing Card
Billing Card Object
``` ```
cardToken
Alphanumeric
16
Required
|
The credit card token. This must be a token, and not a raw credit card number. To create a token, see Secure Overlay API and/or TokenizationService. |
cardType
Alpha50
Readonly
|
The type of card used for the schedule. Possible values: AMERICAN_EXPRESS , DISCOVER , MASTERCARD , VISA , UNKNOWN
|
expirationMonth
Numeric
2
Conditional
|
The credit card expiration month. This value will be retrieved from the cardToken if not provided.
Required if expirationYear is provided.
|
expirationYear
Numeric
2
Conditional
|
The credit card expiration year. This value will be retrieved from the cardToken if not provided.
Required if expirationMonth is provided.
|
securityCode
Numeric4
|
The security code or cvv2 of the credit card to be used for verification or processing the first payment. This field is not returned. |
accountDirective
Alphanumeric
10
Required
|
The account directive that defines which card merchant account to use for processing the schedule payments. |
--Billing Check
Billing Check Object
``` ```
routingNumber
Numeric
9
Conditional
|
The bank routing number for processing the schedule payments. Required if a raw bankAccountNumber is provided. Otherwise it is retrieved from a token bankAccountNumber if not provided.
|
bankAccountNumber
Alphanumeric
20
Required
|
A bank Token or a raw bank account number to use for processing the schedule payments. To create a token, see Secure Overlay API and/or TokenizationService. NOTE: Providing a raw bank account number is deprecated . When a raw bank account number is provided, the bankAccountNumber , routingNumber , and bankAccountType will be Tokenized and the Token will be returned here as the bankAccountNumber |
bankAccountType
Alpha N/A
Conditional
|
Valid values:CHECKING SAVINGS Required if a raw bankAccountNumber is provided. Otherwise it is retrieved from a token bankAccountNumber if not provided.
|
accountDirective
Alphanumeric
10
Required
|
The account directive that defines which check merchant account to use for processing the schedule payments. |
--Billing PayPal
Billing PayPal Object
``` ```
vaultId
Alphanumeric
16
Required
|
A reference for the PayPal payment information. This can be generated by sending true for requestPaymentData which will use FlowService , or use TransactionService
|
accountDirective
Alphanumeric
10
Required
|
The account directive that defines which PayPal merchant account to use for processing the schedule payments. |
--Custom Receipt Labels
Custom Receipt Labels Object
``` ```Attribute | Description |
PAYMENT
Alphanumeric30
|
Default value: Payment .
|
FEE
Alphanumeric30
|
Default value: Fee .
|
TOTAL
Alphanumeric30
|
Default value: Total .
|
ACCOUNT_NUMBER
Alphanumeric30
|
Default value: Account Number .
|
MEMO
Alphanumeric30
|
Default value: Memo .
|
CHECK_NUMBER
Alphanumeric30
|
Default value: Check Number . Only applies to a CHECK paymentMethod .
|
BANK_ACCOUNT_TYPE
Alphanumeric30
|
Default value: Bank Account Type . Only applies to a CHECK paymentMethod .
|
DATE_SCHEDULED
Alphanumeric30
|
Default value: Date Scheduled .
|
--Custom Render Labels
Custom Render Labels Object
``` ```Attribute | Description |
ACCOUNT_NUMBER
Alphanumeric30
|
Default value: Account Number .
|
AMOUNT_OWED
Alphanumeric30
|
Default value: Total Owed .
|
AMOUNT_PAID
Alphanumeric30
|
Default value: Total Paid .
|
AMOUNT_REMAINING
Alphanumeric30
|
Default value: Amount Remaining .
|
SCHEDULE_STATUS
Alphanumeric30
|
Default value: Schedule Status .
|
NEXT_PAYMENT
Alphanumeric30
|
Default value: Next Payment .
|
SCHEDULE_INTERVAL
Alphanumeric30
|
Default value: Schedule Interval .
|
REMAINING_PAYMENTS
Alphanumeric30
|
Default value: Remaining Payments .
|
MEMO
Alphanumeric30
|
Default value: Memo .
|
PAYMENT
Alphanumeric30
|
Default value: Payment .
|
FEE
Alphanumeric30
|
Default value: Fee .
|
TOTAL
Alphanumeric30
|
Default value: Total .
|
BANK_ACCOUNT_NUMBER
Alphanumeric30
|
Default value: Bank Account Number . Only applies to a CHECK paymentMethod .
|
BANK_ROUTING_NUMBER
Alphanumeric30
|
Default value: Bank Routing Number . Only applies to a CHECK paymentMethod .
|
BANK_ACCOUNT_TYPE
Alphanumeric30
|
Default value: Bank Account Type . Only applies to a CHECK paymentMethod .
|
CARD_NUMBER
Alphanumeric30
|
Default value: Card Number . Only applies to a CARD paymentMethod .
|
CARD_EXPIRATION
Alphanumeric30
|
Default value: Expiration . Only applies to a CARD paymentMethod .
|
DATE_SCHEDULED
Alphanumeric30
|
Default value: Date Scheduled .
|
--Flow Request
Flow Request Object
``` ```Attribute | Description |
---|---|
flowId
Numeric
9
|
The id of the flow request. |
status
Alpha
N/A
|
The current status of the Flow request.
Valid values:PENDING - The flow request has been sent and is awaiting completion.EXPIRED - The flow request has expired and can no longer be completed.COMPLETED - The flow request was successfully completed.AUTHORIZED - The flow request has been signed. Any further steps may still be pending.BILLING_RECEIVE - The billing data requested has been received. Any further steps (such as signing authorization) may still be pending.CANCELED - The flow request was cancelled by the user.FAILED - The flow request failed to send. |
statusDate
Date19
|
The date the flow was last updated.
Format: ISO-8601 (YYYY-MM-DD HH:mm:ss)
|
flowResultList
ListN/A
|
List of FlowResult objects.Each step of the flow completed by the end user will generate a new FlowResult for the action the user took.
Description: See object definition below.
|
--Flow Result
Flow Result Object
``` ```Attribute | Description |
---|---|
id
Numeric20
|
The id of the flow result. |
flowId
Numeric
|
The id of the flow request that this result belongs to. |
status
AlphaN/A
|
The status of this flow result.
Valid values:PENDING - The flow request has been sent and is awaiting completion.EXPIRED - The flow request has expired and can no longer be completed.COMPLETED - The flow request was successfully completed.AUTHORIZED - The flow request has been signed. Any further steps may still be pending.BILLING_RECEIVE - The billing data requested has been received. Any further steps (such as signing
authorization) may still be pending.CANCELED - The flow request was cancelled by the user.FAILED - The flow request failed to send. |
statusDate
Date19
|
The date the flow was updated.
Format: ISO-8601 (YYYY-MM-DD HH:mm:ss)
|
scheduleId
Date10
|
The id of the schedule that this flow request belongs to. |
username
Date75
|
The user that updated the flow request. This will likely be signatureUI. |
--Recur Setting
Recur Setting Object
``` ```Attribute | Description |
paymentTypes
AlphaN/A
|
The payment types that will be allowed on a schedule.
Valid value(s):
CARD - Card transaction will be processedCHECK - Check transaction will be processedPAYPAL - PayPal transaction will be processed |
minimumPaymentAmount
Numeric
|
The minimum payment allowed on a schedule payment. This value must be between 1 and 10000. |
allowedFrequencies
AlphaN/A
|
The allowed payment frequencies in a list.
Valid value(s):
MONTHLY - once per monthBI_MONTHLY - 2 times per monthBI_WEEKLY - once every 2 weeksWEEKLY - once per weekDAILY - once per day |
checkReminderDays
Numeric
|
The number of days prior to a check payment to send a reminder. This value must be between 3 and 14. |
cardReminderDays
Numeric
|
The number of days prior to a card payment to send a reminder. This value must be between 3 and 14. |
payPalReminderDays
Numeric
|
The number of days prior to a PayPal payment to send a reminder. This value must be between 3 and 14.
NOTE: Required if paymentTypes includes PAYPAL
|
recurrenceRule
Alphanumeric255
|
This is the recurrence rule that you want the schedules using this setting to calculate the payments against.
This follows the ICal RRule standard, with the exception that DTSTART will only accept yyyyMMdd format. Any timestamp included as part of DTSTART will be ignored.
There is also no need to start a rule with "RRULE="
Example valid rule "FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=1;". The DTSTART value cannot be in the past or more than maxDaysToStart days in the future and needs to be formatted "yyyyMMdd".
The INTERVAL has the following valid ranges: MONTHLY 1-12, WEEKLY 1-5, DAILY 1-31.
See note about Schedule Payment Processing. |
maxDaysToStart
Numeric3
|
The number of days in the future that a schedule must start when providing DTSTART in the Schedule recurrenceRule . Defaults to 13 months if not provided.
|
--Payment Attempt
Payment Attempt
``` ```Attribute | Description |
---|---|
paymentAttemptId
Numeric20
|
The id of the payment attempt. |
paymentId
Numeric20
|
The id of the payment the attempt was made for. |
arrivalId
Numeric11
|
The arrival id of the attempted transaction. |
transactionId
Numeric20
|
The transaction id of the payment. This will only be present on a successful transaction. |
attemptDate
Date19
|
The date that the attempt to post this payment was made. |
status
AlphaN/A
|
The status of the payment attempt.
Valid value(s): PENDING - The payment is waiting to be processed.WAITING - The ACH payment wil be submitted with the current day's batch.PULLED - The ACH payment has been pulled from the account.ACKNOWLEDGED - The ACH payment has been submitted to the bank and acknowledged by the bank as received.REJECTED - The payment was rejected.SUBMITTED - The ACH payment has been submitted to the bank.VOID - The payment has been voided.PAID - The payment has processed successfully.FUNDED - The ACH payment has funded successfully.NSF - The ACH payment was rejected by the bank due to non-sufficient funds.RETURNED - The ACH payment was returned.NSF_DEDUCTION - The ACH payment was deducted due to non-sufficient funds.DECLINED - The card payment was declined.CORRECTION - The ACH payment funded successfully but has a corrected bank account or routing number.ERROR - The payment failed to process.RETRY - The payment failed to submit for processing, but will be tried again.CANCELLED - The payment was marked as cancelled and will not be processed.SKIPPED - No successful attempt to process the payment was made and it is past due. This would happen if a schedule was INACTIVE then later activated. |
statusMessage
Alphanumeric255
|
Any messages that are a result of the payment attempt.
|
PostBack Schedule Events
Basic information about a Schedule can be sent back to your system for some Schedule events. The information returned can be used to securely GET
further details from Schedule Service. The PostBackBody
will always come as JSON
using an HTTPs
POST
.
If something goes wrong attempting to postback to your system, we will automatically retry on this schedule:
- Attempt #1 - Immediate
- Attempt #2 - 5 minutes after 1st attempt
- Attempt #3 - 15 minutes after 1st attempt
- Attempt #4 - 1 hour after 1st attempt
- Attempt #5 - 24 hours after 1st attempt (final attempt)
To be considered successful, we expect your server to return HTTP STATUS 200
. Once that is received or after Attempt #5 we will no longer try to post the data.
To enable sending, please log into your app.pdcflow.com account and navigate to CONFIGURE > NOTIFICATIONS. This is where you can configure PostBacks for each Schedule event:
Event | Description |
---|---|
SCHEDULE_CREATED
|
A schedule has been created. |
PostBackBody
Attribute | Description |
---|---|
scheduleId
Numeric10
|
The PDC Schedule ID, always present. Use this to pull further details on a schedule from Schedule Service. |
status
Alpha
|
Status of the Schedule, always present.
Valid value(s):
DRAFT - Schedules in DRAFT have not yet been saved as ACTIVE .ACTIVE - Schedules that are actively processing payments.INACTIVE - Schedules that have been inactivated and are no longer running payments, though PENDING payments may still be present.COMPLETED - Schedules that have finished processing all payments, be they successful or failed.AUTHORIZE - Schedules that are pending the completion of a signature request before becoming ACTIVE .UNAUTHORIZED - Schedules of which the signature request was not completed successfully.PAYMENT_FAILED - Schedules of which the first due payment failed while trying to Activate the Schedule.BILLING_DATA - Schedules that are pending the completion of a signature requesting payment data to be entered. |
Sample Code
This section offers some client implementation examples in different languages. Keep in mind, these are only minimalistic examples used to demonstrate the Transaction Service REST API and are not meant for production use.
A Jason Web Token (JWT) is required to process all requests through the ScheduleService
. You can request a JWT through the AuthenticationService, using your company's username
and password
, as shown below.
Result Status Codes
Expected Http Status codes
Status '200':
Description = 'Success.'
Status: '400':
Description = 'Malformed request. The request is either incorrectly formatted, or there are validation errors.'
Status '401':
Description = 'Invalid credentials.'
Status '403':
Description = 'Service not activated.'
Status '404':
Description = 'The requested signature/document/image was not found.'
Status '405':
Description = 'POST, GET, PUT request not supported for resource.'
Status '500':
Description = 'An internal error has occurred.'
Sample Create Setting request
<?php
$url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/previews';
$authorization = "Authorization: BASIC " . base64_encode('companyUsername'.':'.'companyPassword');
$scheduleSetting = [
'name' => 'MySettingName',
'recurSetting' => "{\"recurrenceRule\":\"FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=1;\",\"paymentTypes\":[\"CARD\",\"CHECK\"],\"minimumPaymentAmount\":\"25\",\"allowedFrequencies\":[\"MONTHLY\",\"WEEKLY\",\"BI_WEEKLY\",\"BI_MONTHLY\"],\"checkReminderDays\":\"10\",\"cardReminderDays\":\"5\"}",
'user' => 'testUser'
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_POST, 1);
$data = json_encode($scheduleSetting, JSON_UNESCAPED_SLASHES);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Content-Length: ' . strlen($data),
$authorization]
);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT ,5); //num seconds to try connecting
curl_setopt($curl, CURLOPT_TIMEOUT, 30); //max number of seconds to allow execution
$result = curl_exec($curl);
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
// View response
print_r(json_decode($result, true));
if($statusCode == '200') {
echo $result;
}
else {
echo "Error #:" . $statusCode;
}
curl_close($curl);
#!/usr/bin/perl
use LWP::UserAgent;
use HTTP::Request;
use JSON::XS;
use IO::Socket::SSL qw(debug3); # verbose for troubleshooting
eval {
my $scheduleSetting = {
'name' => 'MySettingName',
'recurSetting' => "{\"recurrenceRule\":\"FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=1;\",\"paymentTypes\":[\"CARD\",\"CHECK\"],\"minimumPaymentAmount\":\"25\",\"allowedFrequencies\":[\"MONTHLY\",\"WEEKLY\",\"BI_WEEKLY\",\"BI_MONTHLY\"],\"checkReminderDays\":\"10\",\"cardReminderDays\":\"5\"}",
'user' => 'testUser'
}
$data = JSON::XS->new->utf8->encode ($scheduleSetting);
my $url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings';
my $req = HTTP::Request->new( 'POST', $url );
$req->authorization_basic( 'SomeSecretUsername', 'SomeSecretPassword' );
$req->content_type('application/json');
$req->content_length( length($data) );
$req->content( $data );
my $lwp = LWP::UserAgent->new;
$lwp->timeout(30);
my $response = $lwp->request( $req );
if ( $response->is_success ) {
print "Success: " . $response->decoded_content;
}
else {
die $response->status_line . ": " . $response->decoded_content;
}
};
if ( $@ ) {
print "Error: $@\n";
}
#!/usr/bin/ruby
require 'curl'
require 'curb'
require 'json'
begin
scheduleSetting = {
'name' => 'MySettingName',
'recurSetting' => "{\"recurrenceRule\":\"FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=1;\",\"paymentTypes\":[\"CARD\",\"CHECK\"],\"minimumPaymentAmount\":\"25\",\"allowedFrequencies\":[\"MONTHLY\",\"WEEKLY\",\"BI_WEEKLY\",\"BI_MONTHLY\"],\"checkReminderDays\":\"10\",\"cardReminderDays\":\"5\"}",
'user' => 'testUser'
}
c = Curl::Easy.new
c.url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/'
c.http_auth_types = :basic
c.username = 'SomeSecretUsername'
c.password = 'SomeSecretPassword'
c.connect_timeout = 5
c.timeout = 30
c.verbose = true
headers={}
headers['Content-Type'] = 'application/json'
headers['Content-Length'] = scheduleSetting.to_json.length
headers['Authorization'] = 'BASIC jws_from_authenticationservice'
payload = scheduleSetting.to_json
c.headers = headers
c.http_post(payload)
puts JSON.parse c.body_str
if c.response_code == 200 then
puts "Success " + c.status
else
puts "Error " + c.status
end
rescue
puts "Caught: #$!\n"
end
This will create a Setting
. The settingId
that is returned can be used in Schedule
creation to use this Setting
with that Schedule
Send an HTTP POST
request to:
test url:
https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings
live url:
https://schedule.pdc4u.com/ScheduleService/api/v1_0/settings
Sample Get Settings request
<?php
$settingId = 2;
$url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/'.$settingId;
$authorization = "Authorization: BASIC " . base64_encode('companyUsername'.':'.'companyPassword');
$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
$authorization
]);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5); //num seconds to try connecting
curl_setopt($curl, CURLOPT_TIMEOUT, 30); //max number of seconds to allow execution
$result = curl_exec($curl);
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
// View response
print_r(json_decode($result, true));
if($statusCode == '200') {
echo $result;
}
else {
echo "Error #:" . $statusCode;
}
curl_close($curl);
#!/usr/bin/perl
use LWP::UserAgent;
use HTTP::Request;
use JSON::XS;
use IO::Socket::SSL qw(debug3); # verbose for troubleshooting
eval {
my $settingId = 2;
my $uri = URI->new("https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/".$settingId);
my $req = HTTP::Request->new( 'GET', $uri );
$req->authorization_basic( 'SomeSecretUsername', 'SomeSecretPassword' );
my $lwp = LWP::UserAgent->new;
my $response = $lwp->request( $req );
if ( $response->is_success ) {
print "Success: " . $response->decoded_content;
}
else {
die $response->status_line . ": " . $response->decoded_content;
}
};
if ( $@ ) {
print "Error: $@\n";
}
#!/usr/bin/ruby
require 'curl'
require 'curb'
require 'json'
begin
settingId = 2;
url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/' + settingId
c = Curl::Easy.new( url )
c.http_auth_types = :basic
c.username = 'SomeSecretUsername'
c.password = 'SomeSecretPassword'
c.connect_timeout = 5
c.timeout = 30
c.verbose = true
c.perform
puts JSON.parse c.body_str
if c.response_code == 200 then
puts "Success " + c.status
else
puts "Error " + c.status
end
rescue
puts "Caught: #$!\n"
end
This will retrieve a ScheduleSetting
, specified by the settingId
in the URL.
Send an HTTP POST
request to:
test url:
https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/2
live url:
https://schedule.pdc4u.com/ScheduleService/api/v1_0/settings/2
Sample Create Recurring Term request
<?php
$url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms';
$authorization = "Authorization: BASIC " . base64_encode('companyUsername'.':'.'companyPassword');
$recurringTerm = [
"maximumAmount" => 1000,
"termMonth"=> 36,
"user"=> "testUser"
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_POST, 1);
$data = json_encode($recurringTerm, JSON_UNESCAPED_SLASHES);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Content-Length: ' . strlen($data),
$authorization]
);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT ,5); //num seconds to try connecting
curl_setopt($curl, CURLOPT_TIMEOUT, 30); //max number of seconds to allow execution
$result = curl_exec($curl);
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
// View response
print_r(json_decode($result, true));
if($statusCode == '200') {
echo $result;
}
else {
echo "Error #:" . $statusCode;
}
curl_close($curl);
#!/usr/bin/perl
use LWP::UserAgent;
use HTTP::Request;
use JSON::XS;
use IO::Socket::SSL qw(debug3); # verbose for troubleshooting
eval {
my $recurringTerm = {
"maximumAmount" => 1000,
"termMonth"=> 36,
"user"=> "testUser"
}
$data = JSON::XS->new->utf8->encode ($recurringTerm);
my $url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms';
my $req = HTTP::Request->new( 'POST', $url );
$req->authorization_basic( 'SomeSecretUsername', 'SomeSecretPassword' );
$req->content_type('application/json');
$req->content_length( length($data) );
$req->content( $data );
my $lwp = LWP::UserAgent->new;
$lwp->timeout(30);
my $response = $lwp->request( $req );
if ( $response->is_success ) {
print "Success: " . $response->decoded_content;
}
else {
die $response->status_line . ": " . $response->decoded_content;
}
};
if ( $@ ) {
print "Error: $@\n";
}
#!/usr/bin/ruby
require 'curl'
require 'curb'
require 'json'
begin
recurringTerm = {
"maximumAmount" => 1000,
"termMonth"=> 36,
"user"=> "testUser"
}
c = Curl::Easy.new
c.url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms'
c.http_auth_types = :basic
c.username = 'SomeSecretUsername'
c.password = 'SomeSecretPassword'
c.connect_timeout = 5
c.timeout = 30
c.verbose = true
headers={}
headers['Content-Type'] = 'application/json'
headers['Content-Length'] = recurringTerm.to_json.length
payload = recurringTerm.to_json
c.headers = headers
c.http_post(payload)
puts JSON.parse c.body_str
if c.response_code == 200 then
puts "Success " + c.status
else
puts "Error " + c.status
end
rescue
puts "Caught: #$!\n"
end
This will create a RecurringTerm
. Any schedules created with an owedAmount
less than or equal to $1000 will have a max run time of 36 months.
Send an HTTP POST
request to:
test url:
https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms
live url:
https://schedule.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms
Sample Update Recurring Term request
<?php
$url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms/6';
$authorization = "Authorization: BASIC " . base64_encode('companyUsername'.':'.'companyPassword');
$recurringTerm = [
"maximumAmount" => 1000,
"termMonth"=> 24,
"user"=> "testUser"
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
$data = json_encode($recurringTerm, JSON_UNESCAPED_SLASHES);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Content-Length: ' . strlen($data),
$authorization]
);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT ,5); //num seconds to try connecting
curl_setopt($curl, CURLOPT_TIMEOUT, 30); //max number of seconds to allow execution
$result = curl_exec($curl);
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
// View response
print_r(json_decode($result, true));
if($statusCode == '200') {
echo $result;
}
else {
echo "Error #:" . $statusCode;
}
curl_close($curl);
#!/usr/bin/perl
use LWP::UserAgent;
use HTTP::Request;
use JSON::XS;
use IO::Socket::SSL qw(debug3); # verbose for troubleshooting
eval {
my $recurringTerm = {
"maximumAmount" => 1000,
"termMonth"=> 36,
"user"=> "testUser"
}
$data = JSON::XS->new->utf8->encode ($recurringTerm);
my $url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms/6';
my $req = HTTP::Request->new( 'PUT', $url );
$req->authorization_basic( 'SomeSecretUsername', 'SomeSecretPassword' );
$req->content_type('application/json');
$req->content_length( length($data) );
$req->content( $data );
my $lwp = LWP::UserAgent->new;
$lwp->timeout(30);
my $response = $lwp->request( $req );
if ( $response->is_success ) {
print "Success: " . $response->decoded_content;
}
else {
die $response->status_line . ": " . $response->decoded_content;
}
};
if ( $@ ) {
print "Error: $@\n";
}
#!/usr/bin/ruby
require 'curl'
require 'curb'
require 'json'
begin
recurringTerm = {
"maximumAmount" => 1000,
"termMonth"=> 36,
"user"=> "testUser"
}
c = Curl::Easy.new
c.url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms/6'
c.http_auth_types = :basic
c.username = 'SomeSecretUsername'
c.password = 'SomeSecretPassword'
c.connect_timeout = 5
c.timeout = 30
c.verbose = true
headers={}
headers['Content-Type'] = 'application/json'
headers['Content-Length'] = recurringTerm.to_json.length
payload = recurringTerm.to_json
c.headers = headers
c.http_put(payload)
puts JSON.parse c.body_str
if c.response_code == 200 then
puts "Success " + c.status
else
puts "Error " + c.status
end
rescue
puts "Caught: #$!\n"
end
This will update the RecurringTerm
with the id 6. Any schedules created with an owedAmount
less than or equal to $1000 will now have a max run time of 24 months.
Send an HTTP PUT
request to:
test url:
https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms/{recurringTermId}
live url:
https://schedule.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms/{recurringTermId}
Sample Get Recurring Terms request
<?php
$url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms';
$authorization = "Authorization: BASIC " . base64_encode('companyUsername'.':'.'companyPassword');
$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
$authorization
]);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5); //num seconds to try connecting
curl_setopt($curl, CURLOPT_TIMEOUT, 30); //max number of seconds to allow execution
$result = curl_exec($curl);
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
// View response
print_r(json_decode($result, true));
if($statusCode == '200') {
echo $result;
}
else {
echo "Error #:" . $statusCode;
}
curl_close($curl);
#!/usr/bin/perl
use LWP::UserAgent;
use HTTP::Request;
use JSON::XS;
use IO::Socket::SSL qw(debug3); # verbose for troubleshooting
eval {
my $settingId = 2;
my $uri = URI->new("https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms/");
my $req = HTTP::Request->new( 'GET', $uri );
$req->authorization_basic( 'SomeSecretUsername', 'SomeSecretPassword' );
my $lwp = LWP::UserAgent->new;
my $response = $lwp->request( $req );
if ( $response->is_success ) {
print "Success: " . $response->decoded_content;
}
else {
die $response->status_line . ": " . $response->decoded_content;
}
};
if ( $@ ) {
print "Error: $@\n";
}
#!/usr/bin/ruby
require 'curl'
require 'curb'
require 'json'
begin
settingId = 2;
url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms/'
c = Curl::Easy.new( url )
c.http_auth_types = :basic
c.username = 'SomeSecretUsername'
c.password = 'SomeSecretPassword'
c.connect_timeout = 5
c.timeout = 30
c.verbose = true
c.perform
puts JSON.parse c.body_str
if c.response_code == 200 then
puts "Success " + c.status
else
puts "Error " + c.status
end
rescue
puts "Caught: #$!\n"
end
This will retrieve a list of all your RecurringTerm
objects. A recurring term with no maximumAmount
defines the maximum run time of schedules that exceed the amount specified by the highest maximumAmount
.
Send an HTTP POST
request to:
test url:
https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms/
live url:
https://schedule.pdc4u.com/ScheduleService/api/v1_0/settings/recurringterms/
Sample SchedulePreview request
<?php
$url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/previews';
$authorization = "Authorization: BASIC " . base64_encode('companyUsername'.':'.'companyPassword');
$schedulePreview = [
'owedAmount' => '2000.00',
'initialPaymentAmount' => '500.00',
'adjustmentAmount' => '100.00',
'numberOfPayments' => '0',
'paymentAmount' => '50.00',
'settingId' => '16',
'recurrenceRule' => 'FREQ=WEEKLY;INTERVAL=1;BYMONTHDAY=1;DTSTART=20201116Y000000',
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_POST, 1);
$data = json_encode($schedulePreview, JSON_UNESCAPED_SLASHES);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Content-Length: ' . strlen($data),
$authorization]
);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT ,5); //num seconds to try connecting
curl_setopt($curl, CURLOPT_TIMEOUT, 30); //max number of seconds to allow execution
$result = curl_exec($curl);
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
// View response
print_r(json_decode($result, true));
if($statusCode == '200') {
echo $result;
}
else {
echo "Error #:" . $statusCode;
}
curl_close($curl);
#!/usr/bin/perl
use LWP::UserAgent;
use HTTP::Request;
use JSON::XS;
use IO::Socket::SSL qw(debug3); # verbose for troubleshooting
eval {
my $schedulePreview = {
'owedAmount' => '2000.00',
'initialPaymentAmount' => '500.00',
'adjustmentAmount' => '100.00',
'numberOfPayments' => '0',
'paymentAmount' => '50.00',
'settingId' => '16',
'recurrenceRule' => 'FREQ=WEEKLY;INTERVAL=1;BYMONTHDAY=1;DTSTART=20201116Y000000',
}
$data = JSON::XS->new->utf8->encode ($schedulePreview);
my $url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/previews';
my $req = HTTP::Request->new( 'POST', $url );
$req->authorization_basic( 'SomeSecretUsername', 'SomeSecretPassword' );
$req->content_type('application/json');
$req->content_length( length($data) );
$req->content( $data );
my $lwp = LWP::UserAgent->new;
$lwp->timeout(30);
my $response = $lwp->request( $req );
if ( $response->is_success ) {
print "Success: " . $response->decoded_content;
}
else {
die $response->status_line . ": " . $response->decoded_content;
}
};
if ( $@ ) {
print "Error: $@\n";
}
#!/usr/bin/ruby
require 'curl'
require 'curb'
require 'json'
begin
schedulePreview = {
'owedAmount' => '2000.00',
'initialPaymentAmount' => '500.00',
'adjustmentAmount' => '100.00',
'numberOfPayments' => '0',
'paymentAmount' => '50.00',
'settingId' => '16',
'recurrenceRule' => 'FREQ=WEEKLY;INTERVAL=1;BYMONTHDAY=1;DTSTART=20201116Y000000',
}
c = Curl::Easy.new
c.url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/previews'
c.http_auth_types = :basic
c.username = 'SomeSecretUsername'
c.password = 'SomeSecretPassword'
c.connect_timeout = 5
c.timeout = 30
c.verbose = true
headers={}
headers['Content-Type'] = 'application/json'
headers['Content-Length'] = schedulePreview.to_json.length
payload = schedulePreview.to_json
c.headers = headers
c.http_post(payload)
puts JSON.parse c.body_str
if c.response_code == 200 then
puts "Success " + c.status
else
puts "Error " + c.status
end
rescue
puts "Caught: #$!\n"
end
This will create a SchedulePreview
. SchedulePayments
generated through this method will contain only a paymentAmount
, and feeAmount
(if applicable) and paymentDate
and will not be saved until the schedules
endpoint is called with a POST
or PUT
request.
Send an HTTP POST
request to:
test url:
https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/previews
live url:
https://schedule.pdc4u.com/ScheduleService/api/v1_0/schedules/previews
Sample Schedule Creation request
<?php
$url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules';
$authorization = "Authorization: BASIC " . base64_encode('companyUsername'.':'.'companyPassword');
$schedule = [
'firstName'=>'Test',
'lastName'=>'McTesty',
'accountNumber'=>'123455',
'owedAmount'=>'1000',
'settingId'=>'2',
'numberOfPayments'=>'',
'paymentAmount'=>'100',
'initialPaymentAmount'=>'',
'adjustmentAmount'=>'',
'username'=>'testUser',
'paymentMethod'=>'CHECK',
'phoneNumber'=>'',
'status'=>'ACTIVE',
'emailAddress'=>'test@test.com',
'memo'=>'',
'origin'=>'EXT',
'recurrenceRule'=>'FREQ=MONTHLY;INTERVAL=1;',
'sendReceiptToEmailAddress'=>'true',
'sendAuthorizationRequest'=>'true',
'requestPaymentData'=>'false',
'authorization'=>[
'pinDescription'=>'Last 4 of card number',
'verificationPin'=>'1234',
'timeoutMinutes'=>'30',
'eventRecipientList'=>[
[
'emailAddress'=>'someone@example.com'
]
]
],
'billingCheck'=>[
'routingNumber'=>'123456789',
'bankAccountNumber'=>'aBankToken123456',
'accountDirective'=>'1111-1',
'checkNumber'=>'12'
],
'customReceiptLabels'=>[
'PAYMENT'=>'Custom payment label',
'ACCOUNT_NUMBER'=>'Custom account number label',
'MEMO'=>'Custom memo label',
'BANK_ACCOUNT_TYPE'=>'Custom account type label'
],
'customRenderLabels'=>[
'SCHEDULE_STATUS'=>'Custom schedule status label'
],
'roundTripMap'=> [
'myField1'=>'Custom Value 1',
'myField2'=>'Custom Value 2'
],
'notificationEvent'=>'SCHEDULE'
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_POST, 1);
$data = json_encode($schedule, JSON_UNESCAPED_SLASHES);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Content-Length: ' . strlen($data),
$authorization]
);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT ,5); //num seconds to try connecting
curl_setopt($curl, CURLOPT_TIMEOUT, 30); //max number of seconds to allow execution
$result = curl_exec($curl);
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
// View response
print_r(json_decode($result, true));
if($statusCode == '200') {
echo $result;
}
else {
echo "Error #:" . $statusCode;
}
curl_close($curl);
#!/usr/bin/perl
use LWP::UserAgent;
use HTTP::Request;
use JSON::XS;
use IO::Socket::SSL qw(debug3); # verbose for troubleshooting
eval {
my $schedule = {
'firstName'=>'Test',
'lastName'=>'McTesty',
'accountNumber'=>'123455',
'owedAmount'=>'1000',
'settingId'=>'2',
'numberOfPayments'=>'',
'paymentAmount'=>'100',
'initialPaymentAmount'=>'',
'adjustmentAmount'=>'',
'username'=>'testUser',
'paymentMethod'=>'CHECK',
'phoneNumber'=>'',
'status'=>'ACTIVE',
'emailAddress'=>'test@test.com',
'memo'=>'',
'origin'=>'EXT',
'recurrenceRule'=>'FREQ=MONTHLY;INTERVAL=1;',
'sendReceiptToEmailAddress'=>'true',
'sendAuthorizationRequest'=>'true',
'requestPaymentData'=>'false',
'authorization'=>{
'pinDescription'=>'Last 4 of card number',
'verificationPin'=>'1234',
'timeoutMinutes'=>'30',
'eventRecipientList'=>[
{
'emailAddress'=>'someone@example.com'
}
]
},
'billingCheck'=>{
'routingNumber'=>'123456789',
'bankAccountNumber'=>'aBankToken123456',
'accountDirective'=>'1111-1',
'checkNumber'=>'12'
},
'customReceiptLabels'=>{
'PAYMENT'=>'Custom payment label',
'ACCOUNT_NUMBER'=>'Custom account number label',
'MEMO'=>'Custom memo label',
'BANK_ACCOUNT_TYPE'=>'Custom account type label'
},
'customRenderLabels'=>{
'SCHEDULE_STATUS'=>'Custom schedule status label'
},
'roundTripMap'=> {
'myField1'=>'Custom Value 1',
'myField2'=>'Custom Value 2'
},
'notificationEvent'=>'SCHEDULE'
}
$data = JSON::XS->new->utf8->encode ($schedule);
my $url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules';
my $req = HTTP::Request->new( 'POST', $url );
$req->authorization_basic( 'SomeSecretUsername', 'SomeSecretPassword' );
$req->content_type('application/json');
$req->content_length( length($data) );
$req->content( $data );
my $lwp = LWP::UserAgent->new;
$lwp->timeout(30);
my $response = $lwp->request( $req );
if ( $response->is_success ) {
print "Success: " . $response->decoded_content;
}
else {
die $response->status_line . ": " . $response->decoded_content;
}
};
if ( $@ ) {
print "Error: $@\n";
}
#!/usr/bin/ruby
require 'curl'
require 'curb'
require 'json'
begin
schedule = {
'firstName'=>'Test',
'lastName'=>'McTesty',
'accountNumber'=>'123455',
'owedAmount'=>'1000',
'settingId'=>'2',
'numberOfPayments'=>'',
'paymentAmount'=>'100',
'initialPaymentAmount'=>'',
'adjustmentAmount'=>'',
'username'=>'testUser',
'paymentMethod'=>'CHECK',
'phoneNumber'=>'',
'status'=>'ACTIVE',
'emailAddress'=>'test@test.com',
'memo'=>'',
'origin'=>'EXT',
'recurrenceRule'=>'FREQ=MONTHLY;INTERVAL=1;',
'sendReceiptToEmailAddress'=>'true',
'sendAuthorizationRequest'=>'true',
'requestPaymentData'=>'false',
'authorization'=>{
'pinDescription'=>'Last 4 of card number',
'verificationPin'=>'1234',
'timeoutMinutes'=>'30',
'eventRecipientList'=>[
{
'emailAddress'=>'someone@example.com'
}
]
},
'billingCheck'=>{
'routingNumber'=>'123456789',
'bankAccountNumber'=>'aBankToken123456',
'accountDirective'=>'1111-1',
'checkNumber'=>'12'
},
'customReceiptLabels'=>{
'PAYMENT'=>'Custom payment label',
'ACCOUNT_NUMBER'=>'Custom account number label',
'MEMO'=>'Custom memo label',
'BANK_ACCOUNT_TYPE'=>'Custom account type label'
},
'customRenderLabels'=>{
'SCHEDULE_STATUS'=>'Custom schedule status label'
},
'roundTripMap'=> {
'myField1'=>'Custom Value 1',
'myField2'=>'Custom Value 2'
},
'notificationEvent'=>'SCHEDULE'
}
c = Curl::Easy.new
c.url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules'
c.http_auth_types = :basic
c.username = 'SomeSecretUsername'
c.password = 'SomeSecretPassword'
c.connect_timeout = 5
c.timeout = 30
c.verbose = true
headers={}
headers['Content-Type'] = 'application/json'
headers['Content-Length'] = schedule.to_json.length
payload = schedule.to_json
c.headers = headers
c.http_post(payload)
puts JSON.parse c.body_str
if c.response_code == 200 then
puts "Success " + c.status
else
puts "Error " + c.status
end
rescue
puts "Caught: #$!\n"
end
This will create a Schedule
with 10 CHECK payments of $100. As sendAuthorizationRequest
is true
, a signature request will be sent to the email "test@test.com" and the schedule will be in AUTHORIZE
status until that signature is completed, upon which the schedule will automatically become ACTIVE
.
Send an HTTP POST
request to:
test url:
https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules
live url:
https://schedule.pdc4u.com/ScheduleService/api/v1_0/schedules
Sample Schedule Patch request
<?php
$scheduleIdToPatch = 2;
$url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/'.$scheduleIdToPatch;
$authorization = "Authorization: BASIC " . base64_encode('companyUsername'.':'.'companyPassword');
$schedulePatch = [
'status' => 'ACTIVE',
'firstName' => 'Test',
'lastName' => 'Testing',
'accountNumber' => '123455',
'origin' => 'EXT',
'username' => 'user',
'memo' => '', //This will clear the current value of memo
'emailAddress' => 'test@test.com',
'phoneNumber' => '4654654654',
'addressOne' => '', //This will clear the current value of addressOne
'addressTwo' => '', //This will clear the current value of addressTwo
'city' => 'Montezuma',
'state' => 'MI',
'zip' => '84404',
'zipPlusFour' => '4564',
'country' => 'US',
'paymentMethod' => 'CARD',
'billingCard' => [
'cardToken' => 'aCardToken123456',
'expirationMonth' => '12',
'expirationYear' => '24',
'accountDirective' => '1111'
],
'customReceiptLabels'=>[
'PAYMENT'=>'Custom payment label',
'ACCOUNT_NUMBER'=>'Custom account number label',
'MEMO'=>'Custom memo label',
'BANK_ACCOUNT_TYPE'=>'Custom account type label'
],
'customRenderLabels'=>[
'SCHEDULE_STATUS'=>'Custom schedule status label'
],
'roundTripMap'=> [
'myField1'=>'Custom Value 1',
'myField2'=>'Custom Value 2'
],
'notificationEvent'=>'SCHEDULE'
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PATCH');
$data = json_encode($schedulePatch, JSON_UNESCAPED_SLASHES);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Content-Length: ' . strlen($data),
$authorization]
);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT ,5); //num seconds to try connecting
curl_setopt($curl, CURLOPT_TIMEOUT, 30); //max number of seconds to allow execution
$result = curl_exec($curl);
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
// View response
print_r(json_decode($result, true));
if($statusCode == '200') {
echo $result;
}
else {
echo "Error #:" . $statusCode;
}
curl_close($curl);
#!/usr/bin/perl
use LWP::UserAgent;
use HTTP::Request;
use JSON::XS;
use IO::Socket::SSL qw(debug3); # verbose for troubleshooting
eval {
my $scheduleIdToPatch = 2;
my $schedulePatch = {
'status' => 'ACTIVE',
'firstName' => 'Test',
'lastName' => 'Testing',
'accountNumber' => '123455',
'origin' => 'EXT',
'username' => 'user',
'memo' => '', //This will clear the current value of memo
'emailAddress' => 'test@test.com',
'phoneNumber' => '4654654654',
'addressOne' => '', //This will clear the current value of addressOne
'addressTwo' => '', //This will clear the current value of addressTwo
'city' => 'Montezuma',
'state' => 'MI',
'zip' => '84404',
'zipPlusFour' => '4564',
'country' => 'US',
'paymentMethod' => 'CARD',
'billingCard' => {
'cardToken' => 'aCardToken123456',
'expirationMonth' => '12',
'expirationYear' => '24',
'accountDirective' => '1111'
},
'customReceiptLabels'=>{
'PAYMENT'=>'Custom payment label',
'ACCOUNT_NUMBER'=>'Custom account number label',
'MEMO'=>'Custom memo label',
'BANK_ACCOUNT_TYPE'=>'Custom account type label'
},
'customRenderLabels'=>{
'SCHEDULE_STATUS'=>'Custom schedule status label'
},
'roundTripMap'=> {
'myField1'=>'Custom Value 1',
'myField2'=>'Custom Value 2'
},
'notificationEvent'=>'SCHEDULE'
}
$data = JSON::XS->new->utf8->encode ($schedulePatch);
my $url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/'.$scheduleIdToPatch;
my $req = HTTP::Request->new( 'PATCH', $url );
$req->authorization_basic( 'SomeSecretUsername', 'SomeSecretPassword' );
$req->content_type('application/json');
$req->content_length( length($data) );
$req->content( $data );
my $lwp = LWP::UserAgent->new;
$lwp->timeout(30);
my $response = $lwp->request( $req );
if ( $response->is_success ) {
print "Success: " . $response->decoded_content;
}
else {
die $response->status_line . ": " . $response->decoded_content;
}
};
if ( $@ ) {
print "Error: $@\n";
}
#!/usr/bin/ruby
require 'curl'
require 'curb'
require 'json'
begin
scheduleIdToPatch = 2
schedulePatch = {
'status' => 'ACTIVE',
'firstName' => 'Test',
'lastName' => 'Testing',
'accountNumber' => '123455',
'origin' => 'EXT',
'username' => 'user',
'memo' => '', //This will clear the current value of memo
'emailAddress' => 'test@test.com',
'phoneNumber' => '4654654654',
'addressOne' => '', //This will clear the current value of addressOne
'addressTwo' => '', //This will clear the current value of addressTwo
'city' => 'Montezuma',
'state' => 'MI',
'zip' => '84404',
'zipPlusFour' => '4564',
'country' => 'US',
'paymentMethod' => 'CARD',
'billingCard' => {
'cardToken' => 'aCardToken123456',
'expirationMonth' => '12',
'expirationYear' => '24',
'accountDirective' => '1111'
},
'customReceiptLabels'=>{
'PAYMENT'=>'Custom payment label',
'ACCOUNT_NUMBER'=>'Custom account number label',
'MEMO'=>'Custom memo label',
'BANK_ACCOUNT_TYPE'=>'Custom account type label'
},
'customRenderLabels'=>{
'SCHEDULE_STATUS'=>'Custom schedule status label'
},
'roundTripMap'=> {
'myField1'=>'Custom Value 1',
'myField2'=>'Custom Value 2'
},
'notificationEvent'=>'SCHEDULE'
}
c = Curl::Easy.new
c.url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/' + scheduleIdToPatch
c.http_auth_types = :basic
c.username = 'SomeSecretUsername'
c.password = 'SomeSecretPassword'
c.connect_timeout = 5
c.timeout = 30
c.verbose = true
headers={}
headers['Content-Type'] = 'application/json'
headers['Content-Length'] = schedulePatch.to_json.length
payload = schedulePatch.to_json
c.headers = headers
c.http_post(payload)
puts JSON.parse c.body_str
if c.response_code == 200 then
puts "Success " + c.status
else
puts "Error " + c.status
end
rescue
puts "Caught: #$!\n"
end
This will update a Schedule
. Parameters passed in empty will clear the previous value. If change on a field is undesired, do not pass in that parameter. The Schedule will be returned with the newly updated values.
Send an HTTP PATCH
request to:
test url:
https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/{scheduleId}
live url:
https://schedule.pdc4u.com/ScheduleService/api/v1_0/schedules/{scheduleId}
Sample Schedule Account Directive Migration
<?php
$url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/migrations/accountdirectives';
$authorization = "Authorization: BASIC " . base64_encode('companyUsername'.':'.'companyPassword');
$migrationRequest = [
'oldAccountDirective' => '123-1',
'newAccountDirective' => '123-2'
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
$authorization
]);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_PATCH, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, migrationRequest);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5); //num seconds to try connecting
curl_setopt($curl, CURLOPT_TIMEOUT, 30); //max number of seconds to allow execution
$result = curl_exec($curl);
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
// View response
print_r(json_decode($result, true));
if($statusCode == '200') {
echo $result;
}
else {
echo "Error #:" . $statusCode;
}
curl_close($curl);
#!/usr/bin/perl
use LWP::UserAgent;
use HTTP::Request;
use JSON::XS;
use IO::Socket::SSL qw(debug3); # verbose for troubleshooting
eval {
my $uri = URI->new("https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/migrations/accountdirectives");
my $migrationRequest = {
'oldAccountDirective' => '123-1',
'newAccountDirective' => '123-2'
}
my $req = HTTP::Request->new( 'POST', $uri );
$req->authorization_basic( 'SomeSecretUsername', 'SomeSecretPassword' );
$req->content_type('application/json');
$req->content_length( length($migrationRequest) );
$req->content( $migrationRequest );
my $lwp = LWP::UserAgent->new;
my $response = $lwp->request( $req );
if ( $response->is_success ) {
print "Success: " . $response->decoded_content;
}
else {
die $response->status_line . ": " . $response->decoded_content;
}
};
if ( $@ ) {
print "Error: $@\n";
}
#!/usr/bin/ruby
require 'curl'
require 'curb'
require 'json'
begin
migrationRequest = {
'oldAccountDirective' => '123-1',
'newAccountDirective' => '123-2'
}
url = "https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/migrations/accountdirectives"
c = Curl::Easy.new( url )
c.http_auth_types = :basic
c.username = 'SomeSecretUsername'
c.password = 'SomeSecretPassword'
c.connect_timeout = 5
c.timeout = 30
c.verbose = true
c.perform
payload = migrationRequest.to_json
headers={}
headers['Content-Type'] = 'application/json'
headers['Content-Length'] = payload.length
c.headers = headers
c.http_post(payload)
puts JSON.parse c.body_str
if c.response_code == 200 then
puts "Success " + c.status
else
puts "Error " + c.status
end
rescue
puts "Caught: #$!\n"
end
Sample Schedule Retrieval
<?php
$url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/search';
$authorization = "Authorization: BASIC " . base64_encode('companyUsername'.':'.'companyPassword');
$searchParameters = [
'createStartDate' => '2017-01-01 00:00:00',
'createEndDate' => '2017-01-31 23:59:59',
'status' => 'ACTIVE',
'roundTripMapSearch' => [
[
"field1" => ["value1","value11"],
"field2" => ["value2"]
],
[
"field3" => ["value3"]
]
]
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
$authorization
]);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $searchParameters);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5); //num seconds to try connecting
curl_setopt($curl, CURLOPT_TIMEOUT, 30); //max number of seconds to allow execution
$result = curl_exec($curl);
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
// View response
print_r(json_decode($result, true));
if($statusCode == '200') {
echo $result;
}
else {
echo "Error #:" . $statusCode;
}
curl_close($curl);
#!/usr/bin/perl
use LWP::UserAgent;
use HTTP::Request;
use JSON::XS;
use IO::Socket::SSL qw(debug3); # verbose for troubleshooting
eval {
my $uri = URI->new("https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/search");
my $searchParameters = {
'createStartDate' => '2017-01-01 00:00:00',
'createEndDate' => '2017-01-31 23:59:59',
'status' => 'ACTIVE',
'roundTripMapSearch' => [
{
"field1" => ["value1","value11"],
"field2" => ["value2"]
},
{
"field3" => ["value3"]
}
]
}
my $req = HTTP::Request->new( 'POST', $uri );
$req->authorization_basic( 'SomeSecretUsername', 'SomeSecretPassword' );
$req->content_type('application/json');
$req->content_length( length($searchParameters) );
$req->content( $searchParameters );
my $lwp = LWP::UserAgent->new;
my $response = $lwp->request( $req );
if ( $response->is_success ) {
print "Success: " . $response->decoded_content;
}
else {
die $response->status_line . ": " . $response->decoded_content;
}
};
if ( $@ ) {
print "Error: $@\n";
}
#!/usr/bin/ruby
require 'curl'
require 'curb'
require 'json'
begin
searchParameters = {
'createStartDate' => '2017-01-01 00:00:00',
'createEndDate' => '2017-01-31 23:59:59',
'status' => 'ACTIVE',
'roundTripMapSearch' => [
{
"field1" => ["value1","value11"],
"field2" => ["value2"]
},
{
"field3" => ["value3"]
}
]
}
url = "https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/search"
c = Curl::Easy.new( url )
c.http_auth_types = :basic
c.username = 'SomeSecretUsername'
c.password = 'SomeSecretPassword'
c.connect_timeout = 5
c.timeout = 30
c.verbose = true
c.perform
payload = searchParameters.to_json
headers={}
headers['Content-Type'] = 'application/json'
headers['Content-Length'] = payload.length
c.headers = headers
c.http_post(payload)
puts JSON.parse c.body_str
if c.response_code == 200 then
puts "Success " + c.status
else
puts "Error " + c.status
end
rescue
puts "Caught: #$!\n"
end
Sample Render Schedule Request
<?php
$url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/render';
$scheduleIdToRender = 4;
$render = [
'scheduleId' => $scheduleIdToRender,
'includeSignatureImage' => true
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_POST, 1);
$data = json_encode($render, JSON_UNESCAPED_SLASHES);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Content-Length: ' . strlen($data)
]);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, "someSecretUsername:someSecretPassword");
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5); //num seconds to try connecting
curl_setopt($curl, CURLOPT_TIMEOUT, 30); //max number of seconds to allow execution
$result = curl_exec($curl);
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
// View response
print_r(json_decode($result, true));
if($statusCode == '200') {
echo $result;
}
else {
echo "Error #:" . $statusCode;
}
curl_close($curl);
#!/usr/bin/perl
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Request::Common;
use JSON::XS;
use IO::Socket::SSL qw(debug3); # verbose for troubleshooting
use File::Slurp;
use MIME::Base64;
eval {
my $scheduleToRender = 42;
my $data = {
'scheduleId' => $scheduleToRender,
'includeSignatureImage' => true
};
$data = JSON::XS->new->utf8->encode ($data);
my $url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/render';
my $req = HTTP::Request->new( 'POST', $url );
$req->authorization_basic( 'SomeSecretUsername', 'SomeSecretPassword' );
$req->content_type('application/json');
$req->content_length( length($data) );
$req->content( $data );
my $lwp = LWP::UserAgent->new;
$lwp->timeout(30);
my $response = $lwp->request( $req );
if ( $response->is_success ) {
print $response->decoded_content;
}
else {
die $response->status_line . ": " . $response->decoded_content;
}
};
if ( $@ ) {
print "Error: $@\n";
}
#!/usr/bin/ruby
require 'curl'
require 'curb'
require 'json'
require 'base64'
begin
# read and encode pdf to upload
scheduleToRender = 55
data = {
'scheduleId' => scheduleToRender,
'includeSignatureImage' => true
}
c = Curl::Easy.new
c.url = 'https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/render'
c.http_auth_types = :basic
c.username = 'SomeSecretUsername'
c.password = 'SomeSecretPassword'
c.connect_timeout = 5
c.timeout = 30
c.verbose = true
headers={}
headers['Content-Type'] = 'application/json'
headers['Content-Length'] = data.to_json.length
payload = data.to_json
c.headers = headers
c.http_post(payload)
puts JSON.parse c.body_str
if c.response_code == 200 then
puts "Success " + c.status
else
puts "Error " + c.status
end
rescue
puts "Caught: #$!\n"
end
This will create an HTML representation of the requested Schedule
.
Send an HTTP POST
request to:
test url:
https://scheduledemo.pdc4u.com/ScheduleService/api/v1_0/schedules/render
live url:
https://schedule.pdc4u.com/ScheduleService/api/v1_0/schedules/render