Recurring payments are only setup with ACH and with specific gateways, please reach out to us to ensure recurring option is enabled for your account.
Recurring payments will be ran on the scheduled options presented to us towards the gateway_id in the request
List all recurring scheduled payments.
N/A
Parameter | Type | Required | Description |
internal_id | string | Y | Only show recurring schedule for this specific customer |
PHP Example Request:
$data = array( 'internal_id' => '123456', ); if(isset($data)) { $url = 'https://demo.goodfundsgateway.com/api/recurrings.json?' . http_build_query($data); } else { $url = 'https://demo.goodfundsgateway.com/api/recurrings.json'; } $ch = curl_init($url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'svs-api-id: [SVS API ID]', 'svs-api-key: [SVS API KEY]') ); $result = curl_exec($ch); $err = curl_error($ch); curl_close($ch); if ($err) { echo "cURL Error #:" . $err; } else { echo $result; }
Response data: (json format)
{ "status": "success", "successMessage": { "response_code": 706, "message": { "recurrings": [ { "recur_id": "[recur_id]", "gateway_id": "[gateway_id]", "internal_id": "[internal_id]", "start_date": "2025-07-12", "day_of_month": "12", "frequency": "monthly", "description": "Product Services", "amount": "1.00", "timestamp": "2025-07-29 05:57:18" }, { "recur_id": "[recur_id]", "gateway_id": "[gateway_id]", "internal_id": "[internal_id]", "start_date": "2025-07-12", "day_of_month": "12", "frequency": "monthly", "description": "Product Services", "amount": "1.00", "timestamp": "2025-07-29 05:57:18" } ] } } }
Setup recurring ach payment.
N/A
Parameter | Type | Required | Description |
charge_type | string | Y | "ecrecurring" : Setup Recurring payment with gateway |
gateway_id | int | N |
Condition: { If not included, the default ach gateway account will be used if possible } Unique gateway account id to be used for processing ach. |
customer | node | N | Customer Node: Customer information node |
internal_id | string | N | A username or user ID in your own records, e.g. "Simulatedusername", "98765432". |
first_name | string | Y | Joe |
last_name | string | Y | Smith |
company | string | N | John Smith Plumbing |
address_1 | string | N | 12345 Simulated St. |
address_2 | string | N | For apartment/unit/suite #'s, eg. "Unit 2". |
city | string | N | San Diego |
state | string | N | The state/province/region of the customer. For the US and Canada, this must be supplied as the two letter abbreviation, eg. "CA" |
postal_code | string | N | The zip or postal code of the user, e.g. "A1B2C3", "90210". |
country | string | N | The ISO 3166-1 alpha-3 code of the customer's country, e.g. "CAN", "USA". |
string | N | A valid email address for the customer. Email node can be generated more than once inside the emails wrapper. | |
phone | string | N | Supported: 1-555-555-0000 | 555-555-5555 | 555.555.5555 | 555 555 5555 | (555) 555-5555 |
echeck | node | Y | ECheck Node: ECheck information to be processed with this current transaction |
echeck_name | string | Y | Full Name or Company Name as printed on the Check. |
echeck_account_number | string | Y | Bank account number as printed on the Check. |
echeck_routing_number | string | Y | Routing/Transit Number as printed on the Check. |
echeck_account_type | int | Y |
"0" : Business Bank Account "1" : Personal Bank Account |
echeck_holder_type | int | Y |
"0" : Checking Account "1" : Savings Account |
echeck_seccode | string | Y |
"WEB" : Internet-Initiated Entry "TEL" : Telephone-Initiated Entry "PPD" : Prearranged Payment & Deposit Entry "CCD" : Cash Concentration or Disbursement |
echeck_agree | int | Y | The agreement flag. One numeric digit value, valid values are: 1 for I agree, 0 for I do not Agree. |
schedule | node | Y | Schedule Node: Information about the recurring schedule for this transaction |
frequency | string | Y | monthly, weekly, quarterly, yearly |
payment_day | string | Y | Day of the month going forward to process on ( If weekly, will be day of the week; value: 0=Sun, 1=Mon, 2=Tues, 3=Wed, 4=Thur, 5=Friday,6=Sat ) |
start_date | date | Y | Date to start the recurring transaction, e.g. "2015-01-01" (YYYY-MM-DD). |
num_payments | date | Y | Either a specific number of payments or indefinite (will run forever until cancelled) |
enabled | boolean | Y | 1 for enabled, 0 for disabled |
description | string | N | Description of the recurring transaction, e.g. "Monthly Payment for Service". |
amount | int | Y | e.g. "45.67" |
PHP Example Request: (json format)
$data = array( 'charge_type' => 'ccauthcapture', 'gateway_id' => '[Gateway ID]', 'customer' => array( 'internal_id' => '1375894109', 'first_name' => 'John', 'last_name' => 'Doe', 'company' => 'John Doe\'s Bakery', 'address_1' => '321 Way St.', 'address_2' => 'Suite 400', 'city' => 'San Diego', 'state' => 'CA', 'postal_code' => '92020', 'country' => 'US', 'phone' => '619-444-5555', 'email' => 'example@domain.com' ), 'echeck' => array( 'echeck_name' => 'John Doe', 'echeck_account_number' => '0000000016', 'echeck_routing_number' => '122105278', 'echeck_account_type' => '1', 'echeck_holder_type' => '0', 'echeck_seccode' => 'CCD', 'echeck_agree' => '1' ), 'schedule' => array( 'frequency' => 'monthly', 'payment_day' => '29', 'start_date' => '2025-07-29', 'num_payments' => 'indefinite', 'enabled' => '1', 'description' => 'Product Services' ), 'amount' => '1.00' ); $data_string = json_encode($data); $ch = curl_init('https://demo.goodfundsgateway.com/api/setuprecurringcharge.json'); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data_string), 'svs-api-id: {api_id}', 'svs-api-key: {api_key}') ); $result = curl_exec($ch); $err = curl_error($ch); curl_close($ch); if ($err) { echo "cURL Error #:" . $err; } else { echo $result; }
Response data: (json format)
{ "status": "success", "successMessage": { "response_code": 1, "message": { "recurring": { "response_code": 100, "response_text": "Recurring Payment created.", "success": true, "recur_id": {recur_id}, "raw_data": { {gateway_raw_response_data} }, "amount": "1.00" } } } }
Update an ach recurring payment.
N/A
Parameter | Type | Required | Description |
charge_type | string | Y | "ecupdaterecurring" : Update Recurring payment with gateway |
gateway_id | int | N |
Condition: { If not included, the default ach gateway account will be used if possible } Unique gateway account id to be used for processing ach. |
recur_id | int | Y | Unique recur_id from originating recurring payment setup. |
customer | node | N | Customer Node: Customer information node |
internal_id | string | N | A username or user ID in your own records, e.g. "Simulatedusername", "98765432". |
first_name | string | Y | Joe |
last_name | string | Y | Smith |
company | string | N | John Smith Plumbing |
address_1 | string | N | 12345 Simulated St. |
address_2 | string | N | For apartment/unit/suite #'s, eg. "Unit 2". |
city | string | N | San Diego |
state | string | N | The state/province/region of the customer. For the US and Canada, this must be supplied as the two letter abbreviation, eg. "CA" |
postal_code | string | N | The zip or postal code of the user, e.g. "A1B2C3", "90210". |
country | string | N | The ISO 3166-1 alpha-3 code of the customer's country, e.g. "CAN", "USA". |
string | N | A valid email address for the customer. Email node can be generated more than once inside the emails wrapper. | |
phone | string | N | Supported: 1-555-555-0000 | 555-555-5555 | 555.555.5555 | 555 555 5555 | (555) 555-5555 |
echeck | node | Y | ECheck Node: ECheck information to be processed with this current transaction |
echeck_name | string | Y | Full Name or Company Name as printed on the Check. |
echeck_account_number | string | Y | Bank account number as printed on the Check. |
echeck_routing_number | string | Y | Routing/Transit Number as printed on the Check. |
echeck_account_type | int | Y |
"0" : Business Bank Account "1" : Personal Bank Account |
echeck_holder_type | int | Y |
"0" : Checking Account "1" : Savings Account |
echeck_seccode | string | Y |
"WEB" : Internet-Initiated Entry "TEL" : Telephone-Initiated Entry "PPD" : Prearranged Payment & Deposit Entry "CCD" : Cash Concentration or Disbursement |
echeck_agree | int | Y | The agreement flag. One numeric digit value, valid values are: 1 for I agree, 0 for I do not Agree. |
schedule | node | Y | Schedule Node: Information about the recurring schedule for this transaction |
frequency | string | Y | monthly, weekly, quarterly, yearly |
payment_day | string | Y | Day of the month going forward to process on ( If weekly, will be day of the week; value: 0=Sun, 1=Mon, 2=Tues, 3=Wed, 4=Thur, 5=Friday,6=Sat ) |
start_date | date | Y | Date to start the recurring transaction, e.g. "2015-01-01" (YYYY-MM-DD). |
num_payments | date | Y | Either a specific number of payments or indefinite (will run forever until cancelled) |
enabled | boolean | Y | 1 for enabled, 0 for disabled |
description | string | N | Description of the recurring transaction, e.g. "Monthly Payment for Service". |
amount | int | Y | e.g. "45.67" |
PHP Example Request: (json format)
$data = array( 'charge_type' => 'ccauthcapture', 'gateway_id' => '[Gateway ID]', 'recur_id' => '[recur_id]', 'customer' => array( 'internal_id' => '1375894109', 'first_name' => 'John', 'last_name' => 'Doe', 'company' => 'John Doe\'s Bakery', 'address_1' => '321 Way St.', 'address_2' => 'Suite 400', 'city' => 'San Diego', 'state' => 'CA', 'postal_code' => '92020', 'country' => 'US', 'phone' => '619-444-5555', 'email' => 'example@domain.com' ), 'echeck' => array( 'echeck_name' => 'John Doe', 'echeck_account_number' => '0000000016', 'echeck_routing_number' => '122105278', 'echeck_account_type' => '1', 'echeck_holder_type' => '0', 'echeck_seccode' => 'CCD', 'echeck_agree' => '1' ), 'schedule' => array( 'frequency' => 'monthly', 'payment_day' => '29', 'start_date' => '2025-07-29', 'num_payments' => 'indefinite', 'enabled' => '1', 'description' => 'Product Services' ), 'amount' => '1.00' ); $data_string = json_encode($data); $ch = curl_init('https://demo.goodfundsgateway.com/api/updaterecurringcharge.json'); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data_string), 'svs-api-id: {api_id}', 'svs-api-key: {api_key}') ); $result = curl_exec($ch); $err = curl_error($ch); curl_close($ch); if ($err) { echo "cURL Error #:" . $err; } else { echo $result; }
Response data: (json format)
{ "status": "success", "successMessage": { "response_code": 1, "message": { "recurring": { "response_code": 102, "response_text": "Recurring Payment updated.", "success": true, "recur_id": "[recur_id]", "raw_data": { {gateway_raw_response_data} }, "amount": "1.00" } } } }
Stop an ach recurring payment.
N/A
Parameter | Type | Required | Description |
charge_type | string | Y | "ecstoprecurring" : Stop Recurring payment with gateway |
gateway_id | int | N |
Condition: { If not included, the default ach gateway account will be used if possible } Unique gateway account id to be used for processing ach. |
recur_id | int | Y | Unique recur_id from originating recurring payment setup. |
reason | node | N | Reason for cancelling recurring payment. |
PHP Example Request: (json format)
$data = array( 'charge_type' => 'ecstoprecurring', 'gateway_id' => '[Gateway ID]', 'recur_id' => '[recur_id]', 'reason' => 'Customer cancelled payment' ); $data_string = json_encode($data); $ch = curl_init('https://demo.goodfundsgateway.com/api/stoprecurringcharge.json'); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data_string), 'svs-api-id: {api_id}', 'svs-api-key: {api_key}') ); $result = curl_exec($ch); $err = curl_error($ch); curl_close($ch); if ($err) { echo "cURL Error #:" . $err; } else { echo $result; }
Response data: (json format)
{ "status": "success", "successMessage": { "response_code": 1, "message": { "recurring": { "response_code": 101, "response_text": "Recurring Payment cancelled.", "success": true, "recur_id": "[recur_id]", "raw_data": { {gateway_raw_response} } } } } }