NAV Navbar
cURL PHP C# Java Python

Payment Engine API Documentation

Payment Engine is a point of sale middleware solution that allows developers to work with a variety of payment terminals without the hassle of integrating and certifying each solution. The middleware is available as a cloud based solution.

CLOUD REST API

The Payment Engine is a cloud based EMV middleware that point of sale developers can use to simplify their integration with various EMV capable payment terminals such as the Verifone MX series and the Castles MP200.

API Overview

Endpoint URL

The base url for the production API is: https://usaepay.com/api/v2/

The hostname "usaepay.com" can be swapped out for any of the other gateway hostnames (see the High Availability Guide. During development, "sandbox.usaepay.com" should be used. For more information on the development sandbox see the Sandbox Guide.

The "v2" refers the API version and can replaced with an endpoint key. The API limits the number of API calls allowed per minute and per day based on this key. Using "v2" is fine for development and smaller merchants, but could result in API rate limit errors for high traffic merchants. Larger merchants and developers should register their own software endpoint key in the Dev Portal. For more details, see the API Rate Limits section below.

There are other features available with developer registered endpoints including, restricting use of the end point by IP address and listing contact information for support. The endpoint keys are independent of the merchant API keys. An endpoint can be used with any merchant account.

API Endpoints Index

API Rate Limits

To prevent abuse, the API implements per minute and daily rate limits. The limits are counted per endpoint key and IP address. When using the default endpoint url, the limits are 45/minute and 5000/day. When the limit is exceeded, the API will return HTTP error code 429:

HTTP/1.1 429 API Rate Limit Exceed

The body of the response will be:

{"error":"API Rate Limit Exceed","errorcode":155}

Developers can utilize the "X-Rate-Limit" HTTP header to manage their API rate limit usage:

X-Rate-Limit: "8 of 45/min; 8 of 5000/day"

Higher limits are immediately available by self registering an endpoint in the Dev Portal. Further increases to the limits are granted on a case by case basis. Contact the integration support team for further information. To test the API Rate Limit feature, use the API endpoint "https://sandbox.usaepay.com/api/RATELIMT/". Your second request will be rate limited.

IP Access Restrictions

By default, API endpoints are available to clients on any IP address. Developers can edit their API endpoint to restrict calls from a set list of IP addresses. To test the IP access restriction, you can use the url "https://sandbox.usaepay.com/api/IPACCESS/". When access is blocked HTTP error code 401 will be returned:

HTTP/1.1 401 Access Denied

The body of the response will be:

{"error":"Access Denied","errorcode":156}

Authentication

Hash Example

var seed = random_value();
var prehash = apikey + seed + apipin;
var apihash = 's2/'+ seed + '/' + sha256(prehash);

Authorization Example

Authorization: Basic
  OnMyL2YxYmFmMjE1OGQwNDQwYmI4N2U4OTRjOWU5MmQ4Mzk2L2ZhODgxNWNkYWMxZjY4M2VkNWQyY2Y5NmRhNmMzN2JlODRmNzNhNDA0ODYwNDU3YzNkZDdiNmM0NTc5NjA0YWY=

All API calls require an APIkey (sourcekey) and API hash. The API hash is built by hashing a random seed, the API key, and the private API pin.

The API key and API hash must be sent in a basic auth http header (base64 encode "apikey:apihash"):

Common Formats

Lists

Example

<?php
{
   "type": "list",
   "limit": 100,
   "offset": 0,
   "data": [
      {...},
      {...},
   ],
   "total": 200
 }
?>

All API endpoints that return multi objects use a standard list format:

Offset

To change the number of objects returned in the result set, pass a "limit" variable in the request url (example: /api/customers?limit=1000). To retrieve the next group of objects, pass in "offset" with the item # to start with. "0" is the first item. For example, if there are 21 customers you could pull them in three calls:

/api/customers?limit=10&offset=0 ... 10 customers returned ... /api/customers?limit=10&offset=10 ... 10 customers returned ... /api/customers?limit=10&offset=20 ... 1 customer returned ...

Objects

Example

<?php
{
  "key": "a8ai3k7i77tw",
  "type": "customer",
  "firstname": "John",
  "lastname": "Doe",
  ...
 }
 ?>

Single objects will all include a "key" (the primary public key for the object) and a "type" (the object type). For example:

Common Errors

Errorcode Message Troubleshooting
0 Valid authentication required Authorization header was missing.
21002 API authentication failed Authentication was not successful. Possible reasons could include: using the wrong PIN, using a sourcekey from sandbox in production mode, or that the authentication header was malformed.

Firewall Rules

Payment Engine Diagram

The Payment Engine Gateway facilitates all communication between the point of sale software and the payment terminal. No direct communication happens between the point of sale and the terminal, and the terminal can be on a different network segment than the point of sale.

Payment Engine SDK

The point of sale software will need to be able to communicate with the payment gateway on port 443. This is an outbound connection and the ip address will depend on which URL is being used. Using the default url:

Host Direction IP Port
www.usaepay.com Outbound 209.239.233.7 443
www.usaepay.com Outbound 64.0.146.7 443
www.usaepay.com Outbound 209.220.191.7 443
www.usaepay.com Outbound 65.132.197.7 443

If using the sandbox test environment:

Host Direction IP Port
sandbox.usaepay.com Outbound 64.0.146.129 443

For a full list of all urls and associated IPs, see the high availability guide.

Stand Alone Payment Terminals

Stand alone payment terminals, such as the Castles MP200, establish a persistent outbound connection to the payment gateway. No incoming firewall rules are required.

Host Direction IP Port
pos.usaepay.com Outbound 209.239.233.90 443 and 9011
pos.usaepay.com Outbound 64.0.146.90 443 and 9011
pos.usaepay.com Outbound 209.220.191.90 443 and 9011
pos.usaepay.com Outbound 65.132.197.90 443 and 9011

If using the sandbox test environment:

Host Direction IP Port
pos.sb.usaepay.com Outbound 64.0.146.60 443 and 9011

Basic network services required:

Note: Currently, the payment engine software for stand alone terminals does not support static IP address assignment. DHCP is required.

Connection Manager

Payment Engine Diagram

For some Ingenico and Verifone terminals, either Connection Manager or the Connection Manager Virtual Appliance is required to facilitate the connection to the terminal. Connection Manager is not required for standalone terminals such as the Castles MP200. The connection manager software or appliance will need to be able to make the following outbound connections:

Host Direction IP Port
pos.usaepay.com Outbound 209.239.233.90 443 and 9011
pos.usaepay.com Outbound 64.0.146.90 443 and 9011
pos.usaepay.com Outbound 209.220.191.90 443 and 9011
pos.usaepay.com Outbound 65.132.197.90 443 and 9011

If using the sandbox test environment:

Host Direction IP Port
pos.sb.usaepay.com Outbound 64.0.146.60 443 and 9011

Additionally, the appliance will need the following for software updates:

Host Direction IP Port
downloads.paymentengine.io Outbound 209.239.233.186 443

The appliance also requires these basic network services:

Ingenico iSC

By default the Ingenico terminals listen on port 12000. Configure firewall rules to allow the connection manager to connect to the terminal on this port.

Verifone MX

By default the Verifone mx terminals listen on port 9001. Configure firewall rules to allow the connection manager to connect to the terminal on this port.

Cloud Demo Application

The quickest way to see how the Payment Engine rest API works is to try the demo app.
It provides a simple web UI for registering a device and processing a payment. At the same time it keeps a log of the underlying rest calls that were made. These calls can be used for comparison when writing your own app.

Running the Demo App

Step 1: Payment Application Demo

To open the Payment Application Demo go to https://demo.paymentengine.io. You should get the screen below.

Screenshot

Step 2: Device/Terminal Simulator

When you are using the demo application, you can test using a terminal simulator OR you can use a real hardware device.

Screenshot

Step 3: Get Pairing Code

In the demo app tab, paste an API Key (source key) and PIN into the appropriate fields and click "Register". If you do not already have an API key, log into the merchant console and go the API Keys section of the Settings tab. If you will be using the simulator for testing, you will need a merchant account setup on the "testbed" platform. Please contact the integration support department for assistance. If you have entered a valid source key and PIN, you should see a window that looks like this:

Screenshot

Step 4: Enter Pairing Code on Terminal

Enter the pairing code that is displayed in demo app into the simulator (or real terminal) and then press the "Enter" button (or green button on the MP200):

Screenshot

If the code is entered correctly, you should get a welcome screen:

Screenshot

Step 5: Start Payment Request

In the demo app, enter a desired amount and click "Start Transaction":

Screenshot

A pop-up that tracks the progress of the payment on the terminal should appear:

Screenshot

Step 6: Present Payment on Terminal

If using a real device, follow the prompts on the terminal screen. If using the simulator click on one of the "Swipe Card", "Tap Card" or "Dip Card" buttons. A card selection menu will come up that allows you to select a particular card brand and response type, ie "Swipe Visa: Approved". Once you have selected your card, click on the bottom left button.

Screenshot

Step 7: View Transaction Result in the Demo App

Once the payment is complete, you should see the transaction result in the demo app:

Screenshot

Endpoints

API Index

Devices

POST devices

POST /api/v2/paymentengine/devices

Registers a payment terminal device. The device registration process associates a terminal with a merchant. Depending on the terminal_type, the process may require two steps.

For terminals running the payment engine standalone middleware such as the Castles MP200 a device pairing code is used. When a new terminal is first turned on, it will display a screen prompting for a pairing code. The point of sale software should use API resource to obtain a code. The pairing code is then entered into the terminal. If successful, the terminal should display a welcome idle screen and the API will show a status of "online" in GET /api/v2/paymentengine/devices/:devicekey:.

For security reasons, pairing codes are only valid for a few minutes. If the time limit has expired without the pairing code being entered on the terminal, the pairing code and associated device key are automatically removed.

Once a terminal is successfully paired, it will remain registered until deleted: there is no need to re-register a terminal when it reboots.

Request

Basic Request Example

curl --basic --user APIKEY:PINHASH \
  -H "Content-Type: application/json" -X POST \
  https://usaepay.com/api/v2/paymentengine/devices \
  -d '{"name":"Register 1","terminal_type":"standalone"}'

Request with Settings and Terminal Config Example

curl --basic --user APIKEY:PINHASH \
  -H "Content-Type: application/json" -X POST \
    -d '{"name":"Register 1","terminal_type":"standalone","settings":{"timeout":30,"share_device":false,"enable_standalone":false,"sleep_battery_device":5,"sleep_battery_display":1,"sleep_powered_device":0,"sleep_powered_display":0},"terminal_config":{"enable_emv":true,"enable_debit_msr":true,"enable_tip_adjust":true,"enable_contactless":true}}' \
  https://usaepay.com/api/v2/paymentengine/devices
@POST/paymentengine/devices@
Variable Description Required
terminal_type Type of terminal being registered, currently the only option is 'standalone'. X
name A name associated with the terminal. Device name can contain letters, numbers, spaces, and dashes. All other characters will be filtered out.
%settings% Device settings
%terminal_config% Terminal configuration

Response

Example Response

@POST/paymentengine/devices@

Errors

Errorcode Message Troubleshooting
21113 Required parameter terminal_type was not provided Make sure to include the terminal_type parameter in your post body.
21114 Unsupported terminal type xxxxxxx Make sure the terminal type is in the list of supported terminals (see above).

GET devices/:devicekey:

GET /api/v2/paymentengine/devices/:devicekey:

Retrieve information about a device by its device key.

Request

Request Example

curl --basic --user APIKEY:PINHASH \
https://usaepay.com/api/v2/paymentengine/devices/sa_CCpRfLbkYXNV9rVLdRGvPjwf6ytgN

@GET/paymentengine/devices/:devicekey:@
Parameter Name Type Description
key string Unique device identifier

Response

Response Example - Device Pending Registration

<?php
{
  "type": "device",
  "key": "sa_WKwzyQawBG0RMy0XpDGFXb6pXA23r",
  "apikeyid": "ntC8nP31Moh0wtvYT",
  "terminal_type": "standalone",
  "status": "waiting for device pairing",
  "name": "Register 1",
  "pairing_code": 690520,
  "expiration": "2019-10-29 11:59:28",
  "settings": {
    "timeout": 30,
    "share_device": false,
    "enable_standalone": false,
    "sleep_battery_device": 5,
    "sleep_battery_display": 1,
    "sleep_powered_device": 0,
    "sleep_powered_display": 0
  },
  "terminal_info": {
    "make": "Castles",
    "model": "VEGA3000",
    "revision": "18043001-0055.00",
    "serial": "011118170300198",
    "key_pin": "FFFF5B04",
    "key_pan": "FF908A"
  },
  "terminal_config": {
    "enable_emv": true,
    "enable_debit_msr": true,
    "enable_tip_adjust": true,
    "enable_contactless": true
  }
}
?>

Response Example - Registered Device Example

@GET/paymentengine/devices/:devicekey:@
Parameter Name Type Description
type string Object type. This will always be device.
key string Unique device identifier
apikeyid string The id of API key (source key) associated with the device.
terminal_type string Terminal type: "standalone" for payment engine cloud based terminal.
status string Current device status
name Developer assigned device name. Device name can contain letters, numbers, spaces, and dashes. All other characters will be filtered out.
%settings% object Device settings
%terminal_info% object Details of terminal
%terminal_config% object Terminal configuration
pairing_code If terminal type is 'standalone', this is the pairing code required to pair the payment device with the payment engine.
expiration If terminal type is 'standalone', the expiration is the date/time that the pairing code is no longer valid.

Errors

Errorcode Message Troubleshooting
21121 Unknown devicekey xxxxxxx Double check that the device key is valid. If the device status was still "waiting for device pairing," the request may have expired.

GET devices

GET /api/v2/paymentengine/devices

Retrieves a list of devices registered to merchant.

Request

Request Example

curl --basic --user APIKEY:PINHASH \
https://usaepay.com/api/v2/paymentengine/devices

@GET/paymentengine/devices@

Request Parameters

Variable Description Default
limit Max number of results to return 20
offset Number offset to start response 0

Response

Response Example - No Devices Found

<?php
{
    "type": "list",
    "limit": 20,
    "offset": 0,
    "data": [],
    "total": 0
}
?>

Response Example - Single Device

@GET/paymentengine/devices@

Response Parameters

Variable Description
type "list"
limit The max number of items returned in each result set (see limit request param).
offset The starting point for result set (see offset request param).
total Total number of records found (useful for calculating how many result sets are available).
data Array of matched devices, see above for format of each device.

PUT devices/key

PUT /api/v2/paymentengine/devices/:devicekey:

Updates an existing device. Parameters are only updated if they are present in the body.

Request

Basic Request Example

curl --basic --user APIKEY:PINHASH \
 -X PUT \
 -H "Content-Type: application/json" \
 -d '{"name":"Testing","settings":{"share_device":true}}' \
 https://usaepay.com/api/v2/paymentengine/devices/sa_1BTTI5Yys0G3gVQa6beYxM4K0hhjC
@PUT/paymentengine/devices/:devicekey:@

Request Parameters

Variable Description
name A name associated with the terminal. Device name can contain letters, numbers, spaces, and dashes. All other characters will be filtered out.
settings Device settings
terminal_config Terminal configuration

Device Settings

Variable Description
timeout Transaction timeout, how long to wait for transaction authorization to complete.
notify_update If true, device will be notified on all future updates
notify_update_next If true, device will be notified only on the next update. After notification, this is automatically set back to false.
enable_standalone Allows transactions to be initiated from terminal (if supported).
share_device If true, this allows the payment device to be used by other merchants. If false, only the merchant associated with the apikeyid may send transactions to device.
sleep_battery_device This is the amount of inactive time (in minutes) before the device enters full sleep if it is running on battery. If in full sleep, you will need to turn the device on again before processing. Wifi and Bluetooth pairing should persist, even after full sleep. Set to '0' to never sleep.
sleep_battery_display This is the amount of inactive time (in minutes) before the device enters display sleep if it is running on battery. If in display sleep, just send a transaction to the device or tap any button to wake the device. Set to '0' to never sleep.
sleep_powered_device This is the amount of inactive time (in minutes) before the device enters full sleep if it is plugged into power. If in full sleep, you will need to turn the device on again before processing. Wifi and Bluetooth pairing should persist, even after full sleep. Set to '0' to never sleep.
sleep_powered_display This is the amount of inactive time (in minutes) before the device enters display sleep if it is plugged into power. If in display sleep, just send a transaction to the device or tap any button to wake the device. Set to '0' to never sleep.

Terminal configuration

Variable Description
enable_emv Enables EMV processing.
enable_debit_msr Enables PIN debit for swiped transactions.
enable_tip_adjust Allows EMV transaction amounts to be adjusted after authorization (to add tip). Disables PIN authentication.
enable_contactless Enables NFC reader.

Response

Response Example

@PUT/paymentengine/devices/:devicekey:@

DELETE devices/key

DELETE /api/v2/paymentengine/devices/:devicekey:

Removes terminal registration and un-registers the device referenced by devicekey. This will delete the device key and place the terminal back on the pairing code prompt screen.

Request

Request Example

@DELETE/paymentengine/devices/:devicekey:@

Response

Response Example

@DELETE/paymentengine/devices/:devicekey:@

PUT devices/key/settings

PUT /api/v2/paymentengine/devices/:devicekey:/settings

Updates the device settings. These settings change the behavior of the device. If a setting is not included in the request, it will not be updated.

Request

Request Example

curl --basic --user APIKEY:PINHASH \
 -X POST \
 -H "Content-Type: application/json" \
 -d '{"share_device":true}' \
 https://usaepay.com/api/v2/paymentengine/devices/sa_p7wyCLbGgGtPyDE12U9zHJy3pg6WO/settings
@PUT/paymentengine/devices/:devicekey:/settings@

Request Parameters

Variable Description
timeout Transaction timeout, how long to wait for transaction authorization to complete.
enable_standalone Allows transactions to be initiated from terminal (if supported).
share_device If set to true, this allows a device to be used by other merchants. If false, only the merchant associated with the apikeyid may send transactions to device.

Response

Response Example

@PUT/paymentengine/devices/:devicekey:/settings@

The response is the standard GET device response.

GET devices/key/settings

GET /api/v2/paymentengine/devices/:devicekey:/settings

Retrieves the current device settings.

Request

Request Example

curl --basic --user APIKEY:PINHASH \
https://usaepay.com/api/v2/paymentengine/devices/sa_CCpRfLbkYXNV9rVLdRGvPjwf6ytgN/settings
@GET/paymentengine/devices/:devicekey:/settings@

Response

Response Example

@GET/paymentengine/devices/:devicekey:/settings@
Variable Description
timeout Transaction timeout, how long to wait for transaction authorization to complete.
enable_standalone Allows transactions to be initiated from terminal (if supported).
share_device If set to true, this allows a device to be used by other merchants. If false, only the merchant associated with the apikeyid may send transactions to device.

PUT devices/key/terminal-config

PUT /api/v2/paymentengine/devices/:devicekey:/terminal-config

Updates the devices terminal config. This terminal config controls the devices transaction processing features including supported payment types. If a setting is not included in the request, it will not be updated.

Request

Request Example

curl --user APIKEY:PINHASH \
-X PUT \
-H "Content-Type: application/json" \
-d '{"enable_emv":false}' \
https://usaepay.com/api/v2/paymentengine/devices/sa_p7wyCLbGgGtPyDE12U9zHJy3pg6WO/terminal-config

@PUT/paymentengine/devices/:devicekey:/terminal-config@

Request Parameters

Variable Description
enable_emv Enables EMV processing.
enable_debit_msr Enables PIN debit for swiped transactions.
enable_tip_adjust Allows EMV transaction amounts to be adjusted after authorization (to add tip). Disables PIN authentication.
enable_contactless Enable NFC reader.

Response

Response Example

@PUT/paymentengine/devices/:devicekey:/terminal-config@

The response is the standard GET device response.

GET devices/key/terminal-config

GET /api/v2/paymentengine/devices/:devicekey:/terminal-config

Retrieves the current terminal configuration.

Request

Request Example

curl --basic --user APIKEY:PINHASH \
https://usaepay.com/api/v2/paymentengine/devices/sa_CCpRfLbkYXNV9rVLdRGvPjwf6ytgN/terminal-config
@GET/paymentengine/devices/:devicekey:/terminal-config@

Response

Example Response

@GET/paymentengine/devices/:devicekey:/terminal-config@
Variable Description
enable_emv Enables EMV processing.
enable_debit_msr Enables PIN debit for swiped transactions.
enable_tip_adjust Allows EMV transactions amounts to be adjusted after authorization (to add tip). Disables PIN authentication.
enable_contactless Enables NFC reader.

POST devices/key/kick

POST /api/v2/paymentengine/devices/:devicekey:/kick

Kicks the terminal offline. The terminal should automatically reconnect after a few seconds. This can help jump start a stuck terminal.

Request

Request Example

curl --user APIKEY:PINHASH \
 -X POST \
 https://usaepay.com/api/v2/paymentengine/devices/sa_p7wyCLbGgGtPyDE12U9zHJy3pg6WO/kick

@POST/paymentengine/devices/:devicekey:/kick@

Request Parameters

Response

Response Example

@POST/paymentengine/devices/:devicekey:/kick@

The response is the standard GET device response.

Payment Requests

POST payrequests

POST /api/v2/paymentengine/payrequests

Starts a new payment request (transaction). This will cause the terminal to walk the customer through the payment processing screens:

  1. Swipe/dip/tap card.
  2. Choose credit/debit (if supported).
  3. Enter PIN (if necessary).
  4. Prompt for tip (if enabled).
  5. Approve amount.
  6. Capture signature (if enabled/supported).

A payment requestkey will be returned which can be used to track the customers progress on the terminal via GET /api/v2/paymentengine/payrequests/:requestkey:. When the process is complete, transaction details will be available.

Request

Minimal Payment Request Example

curl --basic --user APIKEY:PINHASH \
 -X POST \
 -H "Content-Type: application/json" \
 -d '{"devicekey":"sa_1BTTI5Yys0G3gVQa6beYxM4K0hhjC","command":"cc:sale","amount":"8.88"}' \
 https://usaepay.com/api/v2/paymentengine/payrequests

@POST/paymentengine/payrequests@

Request Parameters

Parameter Description
devicekey Device key. If device key is not specified, the device associated with current source key is used.
command Type of command being sent for the transaction. Options are: sale, authonly, or refund.
amount Transaction amount.

Optional Paramters

Parameter Description
timeout Time in seconds to wait for payment. Default is 180 seconds. See timeout handling below.
block_offline By default, the payment engine will wait for an offline payment terminal to connect and then start the transaction, up to the timeout time limit. If "block_offline" is set to true, the payment request will return an error right away.
ignore_duplicate Bypass duplicate detection/folding if it has been configured on the api key
save_card Save card and return token
manual_key If true, an option will be displayed to manually key the transaction.
prompt_tip Customer will be prompted to leave a tip.

Additional Transaction Parameters

Parameter Description
amount_detail.subtotal Amount before discounts, shipping, duty and tax. This field is optional, but if sent the following MUST be true: amount = subtotal - discount + shipping + duty + tax
amount_detail.tax Tax amount
amount_detail.nontaxable Transaction is non taxable. Options are: Y = nontaxable or N = taxable
amount_detail.tip Tip amount
amount_detail.discount Discount amount
amount_detail.shipping Shipping amount
amount_detail.duty Duty amount (for level 3 processing)
amount_detail.enable_partialauth Include this parameter to authorize partial funds when the full amount is not available. For example, if the total is $10 and the customer only has $5 in their account, $5 will be authorized. If not included in request, partial authorization defaults to disabled.
invoice Invoice number (11 chars max)
ponum Customer's purchase order number (for corporate cards)
orderid Merchant assigned order ID
description Transaction description
comments Text only visible to merchant
terminal Terminal identifier (i.e. multilane)
table Restaurant table number
clerk Clerk/cashier/server name
billing_address.firstname
billing_address.lastname
billing_address.street
billing_address.street2
billing_address.city
billing_address.state
billing_address.postalcode
billing_address.country
billing_address.phone
shipping_address.firstname
shipping_address.lastname
shipping_address.street
shipping_address.street2
shipping_address.city
shipping_address.state
shipping_address.postalcode
shipping_address.country
shipping_address.phone
customerid Merchant assigned customer ID
email Customer's email address
geolocation Latitude and longitude of transaction location.
software Software name and version (useful for troubleshooting).
custom_fields Optional fields for storing custom data.

Line Item Parameters

Line Items Example

{
    "lineitems": [
        {
            "sku": "The SKU",
            "name": "Prod Name",
            "description": "Prod Desc",
            "cost": "8.88",
            "qty": 1
        },
        {
            "sku": "The SKU 2",
            "name": "Prod Name 2",
            "description": "Prod Desc 2",
            "cost": "1.98",
            "qty": 2
        }
    ]
}

Parameter Description
lineitems Information for one or more individual line items that make up the order. Below are some of the line item details that can be included
sku Identification code for line item
name Name of line item
description Description of line item
cost cost of line item
qty Quantity (Required for Level 3 processing)
commoditycode Commodity code (only required for level 3 processing). See http://www.unspsc.org/ for valid list of codes. (Required for Level 3 processing)
discountamount Discount amount for line (Required for Level 3 processing)
discountrate Discount percentage for line (Required for Level 3 processing)
taxable Y = Taxable, N = Non-taxable (Required for Level 3 processing)
taxamount Amount of tax charge for line (if left blank will be calculated from taxrate) (Required for Level 3 processing)
taxclass The product's tax class (Required for Level 3 processing)
taxrate Tax rate for line (Required for Level 3 processing)
um Unit of measure (Required for Level 3 processing)

Custom Flow Parameters

Custom Fields Example

{
    "custom_fields": {
        "1": "Custom value 1",
        "2": "Custom value 2",
        "3": "Custom value 3"
    }
}

Parameter Description
%custom_flow%(comma delimited string) Allows you to customize the order in which each payment screen is displayed on the device.

Timeout Handling

Once a payment request is initiated, the payment engine does not require any further input from the point of sale software to complete the payment process. This can lead to confusion and potentially duplicate transactions if the point of sale software does not correctly poll the payment request. Consider the follow sequence of events:

  1. User starts the transaction on the point of sale software.
  2. The point of sale software starts polling the status of the request, but is configured to give up after 1 minute.
  3. User takes longer than 1 minute to swipe card.
  4. Payment engine successfully processes transaction, approval is shown on terminal.
  5. User returns to point of sale and sees an error indicating that the request timed out.
  6. User repeats the process and this time swipes the card in under a minute.
  7. Duplicate transaction is run and two charges are now in the batch, despite the point of sale only acknowledging one.

By default the payment engine will wait for 3 minutes (180 seconds) for the user to swipe, dip or tap their card. This can be configured by passing the "timeout" parameter. To prevent the above, the point of sale software should continue to poll the payment request for the full amount of time set in the timeout. When timeout is exceeded, the payment request status will change to "timeout".

Request Tokenization

In addition to processing the payment, a token will be generated that can be used for future payments.

Request Tokenization Example (cURL)

curl --basic --user APIKEY:PINHASH \
-H "Content-Type: application/json" \
-d '{"devicekey":"sa_1BTTI5Yys0G3gVQa6beYxM4K0hhjC","command":"cc:sale","amount":"8.88","save_card":true}' \
https://usaepay.com/api/v2/paymentengine/payrequests

Response

Response Example

@POST/paymentengine/payrequests@

Response Parameters

Parameter Description
key Request key
expiration The expiration is the date/time the request will expire and no longer be valid.
status The status of the request.

Errors

Errorcode Message Troubleshooting
21121 Unknown devicekey xxxxxxx Double check that the device key is valid. If the device status was still "waiting for device pairing," the request may have expired.
21143 Request failed (Payment terminal battery too low) Charge the terminal before processing any more transactions. The terminal does not have the power to complete the transaction.
21144 Transaction request has timed out. Retry transaction, and complete before time out allotted (default is 180 seconds). Lengthen timeout parameter if necessary.
21145 Device is currently offline. Verify terminal is connected to payment engine and try again.
21146 Device is currently processing another transaction. Two requests were sent simultaneously. Wait until the first request is complete and try again.

GET payrequests/key

GET /api/paymentengine/payrequests/:requestkey:

Gets the status of a pay requestkey.

Request

Request Example

curl --basic --user APIKEY:PINHASH \
 https://www-stage.usaepay.com/api/v2/paymentengine/payrequests/pr_TJtcst4SfmEbztWk6V4RmJL5HKMLO
@GET/paymentengine/payrequests/:requestkey:@

Request Parameters

Response

Pending Payment Response Example

@GET/paymentengine/payrequests/:requestkey:@

Payment Approved (with tokenization) Example

{
    "type": "request",
    "key": "pr_YF0Rg5UARsFTN9AItsIKXIczmwIWN",
    "status": "transaction complete",
    "transaction": {
        "type": "transaction",
        "key": "kdbbjsn49jsjy3gm",
        "refnum": "2226860110",
        "is_duplicate": "N",
        "result_code": "A",
        "result": "Approved",
        "authcode": "019930",
        "error": "Approved",
        "error_code": "00000",
        "iccdata": "{\"8A\":\"3030\"}",
        "proc_refnum": "",
        "auth_amount": "5.00",
        "avs": {
            "result_code": "YYY",
            "result": "Address: Match & 5 Digit Zip: Match"
        },
        "cvc": {
            "result_code": "P",
            "result": "Not Processed"
        },
        "signature_required": true,
        "creditcard": {
            "number": "4444xxxxxxxx1111",
            "type": "V",
            "cardholder": "DOE\/JOHN",
            "entry_mode": "Chip Read",
            "aid": "A0000000031010"
        },
        "trantype": "Credit Card Sale",
        "complete": true
    }
}

Parameter Description
key Request key
expiration The expiration is the date/time the request will expire and no longer be valid.
status The status of the request. Possible Values are:
sending to device
sent to device
waiting for card dip
changing interfaces
customer see phone and tap again
processing payment
completing payment
capturing signature
signature capture error
transaction complete
canceled
transaction canceled
transaction failed
timeout
error
transaction Once the transaction has been processed, a transaction object will be added to the result.
complete Confirms if transaction is complete. Value will be: true or false. Please Note: A transaction object could be included in the response (signaling the transaction has been processed), and also receive complete:false. For example, if a Custom Flow is set and signature_required is included, the flag will show as complete:false until the signature has been captured.

DELETE payrequests/key

DELETE /api/v2/paymentengine/payrequests/:requestkey:

Deletes/cancels a payment request.

Request

Request Example

@DELETE/paymentengine/payrequests/:requestkey:@

Request Parameters

Response

Response Example

@DELETE/paymentengine/payrequests/:requestkey:@

Connection Manager Pro

About

This software is an enterprise version of the device manager tool available in USAePay’s virtual terminal. The Connection Manager Pro is ideal for companies that need to manage several EMV devices remotely. Users can log into USAePay’s developer portal, which is capable of handling thousands of EMV devices from multiple locations. This outstanding solution will allow developers to deploy multiple locations remotely by rebooting, restoring and re-pairing EMV devices.

To Login to the Developer Portal

To login to the developer portal, go to https://sandbox.usaepay.com/_developer/app/login. If you do not already have a developer login, simply click "Register for an account" to create one. You can login immediately after you have registered.

Devices

The Devices page of the Developer Portal page will show the list of devices you are currently managing. This list can contain devices over multiple merchant accounts. You can add devices that have already been registered or register the devices as you add them.

Add Device

New Device vs. Registered Device

A new device is a device that has NOT been paired or registered in the Merchant Console Device Manager. If you are pairing a new device then it can be registered as a stand alone or a managed device. If you are going to connecting the device to the Virtual Appliance then the device will ALWAYS be a new device.

A registered device is one that has been paired or registered in the Merchant Console Device Manager.

Stand Alone vs. Managed Device

A stand alone device is one which you do not need a virtual appliance to manage. Castles MP200's will be stand alone device, and all registered devices will automatically be categorized as stand alone.

A managed device is one which you use one of the appliances to manage, like the Ingenico ISC480. Visit the Connection Manager for Windows and the Connection Manager Virtual Appliance pages for more information.

Adding a Device

Creating an API Key

If it is your first time adding devices to the Connection Manager Pro, you will need to make sure you have an API Key created to attach each device to. You can add more than one device to each API Key. If you are managing devices from multiple merchant accounts, then you will need to create an API Key for each merchant account, because the API Key is what links that device to that specific account.

Login to the merchant account and create an API Key/Source Key and PIN for your devices. Instructions for both the Legacy Console and Console 2 are listed below.

Legacy Console

Console 2

Add Device Info

Device in Dev Portal

Import Devices

The Connection Manager also allows you to add multiple devices to your device servers by uploading information for multiple devices in a CSV document. Below are the steps for uploading both a managed and standalone devices.

Prepare the File

First, you will need to prepare the document with your device information. It must be in .csv format. Below you will find descriptions of the fields the file could include and an example template. Please Note: Documents must include only the devices that have the same type (Stand Alone or Managed) and same make.

Field Requirements Description
Store Optional Store number associated with device.
DBA Optional Name of merchant associated with device.
device_name Required for ALL Merchant assigned terminal label. Device name can contain letters, numbers, spaces, and dashes. All other characters will be filtered out.
apikey Required for ALL API key device should be connected to.
apipin Required for ALL API pin for the above api key.
device_ip Required for Managed IP address associated with device.
devicekey Required for Standalone Unique gateway assigned alphanumeric string.

Device Import Templates:

Specify File Information

Once you have prepared the document, click the 'Import' button at the top of the 'Devices' page.

import

Next, specify if the file contains managed or stand alone devices, and the fields associated with that device type will populate.

import

Managed Devices

When importing managed devices you will have to specify the following fields:

import

When complete click 'Upload CSV' button.

Stand Alone Devices

When uploading Stand Alone devices, you will only need to specify the Environment (Sandbox or Production). The environment must match the API Key environment.

import

When complete click 'Upload CSV' button.

Upload and View Errors

Choose the file you wish to upload and click 'Open' and the developer-portal will parse the data in the file.

import

Once the data is parsed, the portal will show the following fields:

import

If you will to view the errors in your upload click 'Download Import Results' button. You will see the same .csv file that you uploaded and with two additional columns added:

Once uploaded, the devices will be listed in the Devices section of the Developer Portal.

import

Device Servers

If you are using an appliance, you will need to create this server and link it to the appliance before connecting any devices. Instructions for creating the server are shown below.

Adding Device Servers

Add Server

Server Details

Change Log

2017-08-25

Connection Manager Setup

The Connection Manager Pro Virtual Appliance is intended for large scale deployments. Appliances are managed through the developer portal web interface.

Requirements:

VMWare

Supported Devices:

Ingenico ISC480 (Other Ingenico Terminals running RBA 23.0.44 should also be compatible)

Installation:

Payment Engine Connection Manager Pro - VMWare OVA (Contact Integration Department for file)

Setup

The Connection Manager Pro will allow you to manage multiple devices at one time. Follow these steps to set up the Payment Engine Connection Manager Pro and connect your devices.

Login

To login to the developer portal, go to https://sandbox.usaepay.com/_developer/app/login.

If you do not already have a developer login, simply click "Register for an account" to create one. You can login immediately after you have registered.

Developer Login Registration

Install

Create Device Server

Developer Portal

Server Added

Connection Manager Pro

Appliance Connected

Create API Keys

Login to the merchant account and create an API Key/Source Key and PIN for your devices. Instructions for both the Legacy Console and Console 2 are listed below.

Legacy Console

Console 2

Add Device

Developer Portal

Device in Dev Portal

Connection Manager Pro

Device in Connection Manager

Connection Manager Virtual Appliance

The Connection Manager Virtual Appliance is intended for large scale deployments of devices. Appliances are managed through the developer portal web interface.

Requirements:

VMWare

Supported Devices:

Ingenico ISC480 (Other Ingenico Terminals running RBA 23.0.44 should also be compatible)

Installation:

Payment Engine Connection Manager Pro - VMWare OVA (Contact Integration Department for file)

Set-Up:

The Connection Manager Virtual Appliance will allow you to manage multiple devices at one time. Follow these steps to set up the Virtual Appliance and connect your devices.

Install the Virtual Appliance

Pairing Key

Appliance Connected

Add Device to Device Server

Connect your devices to the device server in the Developer Portal. For more information, visit the Connection Manager Pro page. When a device has been added successfully, the Connection Manager Virtual Appliance will show the connected device like this:

Device in Connection Manager

Cloud Middleware SDKs

.Net 4.5+

The Middleware SDK for .NET is a collection of classes that implement the rest api for the payment engine cloud solution. It allows developers to quickly create applications in .Net that take advantage of the payment engine middleware.

Middleware Class

Middleware Constructor

Middleware Constructor (C#)

public Middleware(String apiKey, String pin, String host="api.paymentengine.io")

Constructor for the middleware class. To instantiate the middleware object, you will need an API Key and PIN which can be created in the merchant console. You also have the option of specifying the gateway host you would like to use.

Constructor Example (C#)

try
{
   Middleware client = new Middleware("_hxEwTCy4UPSTp7sL5V69fa2Uu5Gzrfu", "1234", "sandbox.usaepay.com");
} catch(MiddlewareException ex) {
   Console.WriteLine("Error instantiating middleware: " + ex.ToString());
}

Parameter Type Description
apiKey String The API Key (aka SourceKey) created in the merchant console.
pin String API PIN set in the merchant console.
host String Gateway host to use. Defaults to primary production gateway "api.paymentengine.io". For sandbox use "sandbox.usaepay.com"

Exceptions

Code Message Notes
Invalid API Key The key parameter was not set to a valid api key.
An API Pin is required The pin parameter must be set to the pin assigned to the api key. If no pin has been set for the api key, log into the merchant console and set one.
Invalid gateway hostname The host parameter must be set to a valid hostname for the gateway. It is the hostname only, do not include https://

RegisterDevice

RegisterDevice Function Header (C#)

public void RegisterDevice(String TerminalName, Action<Device> callback, Action<MiddlewareException> onError, String RegistrationType="standalone")

Starts the registration process for a new terminal. The callback delegate will be called with a middleware device object that includes the "PairingCode" parameter. This code is entered by the user into the payment terminal to complete the pairing process. This method is only needed if the developer wishes to support registering new terminals. Alternately, terminals can be registered in the Device Manager section of the Merchant Console.

RegisterDevice Example (C#)

client.RegisterDevice("Register 1",(device) => {
   Console.WriteLine("Pairing code: " + device.PairingCode);
   Console.WriteLine("Device Key: " + device.DeviceKey);
}, (emw)=> {
  Console.WriteLine("error: " + emw.Message);
});

Parameter Type Description
TerminalName String The name of the terminal chosen by the user/developer. This can be used to distinguish between multiple devices.
callback Action Delegate called when registration request is accepted and pairing code is available.
onError Action Delegate called if an error occurs.
RegistrationType String Type of device registration. Defaults to "standalone".

Exceptions

Code Message Notes

See also: Common Exceptions

LoadDeviceByKey

LoadDeviceByKey Function Header (C#)

public void LoadDeviceByKey(String DeviceKey, Action<Device> callback, Action<MiddlewareException> onError=null)

Loads a Device object for an existing DeviceKey. The DeviceKey is returned when registering the device with RegisterDevice. The DeviceKey is also available in the Device Manager screen under the Settings section of the merchant console.

LoadDeviceByKey Example (C#)

client.LoadDeviceByKey("sa_0nr0qWGWrEQzALVjFkTeptSWj9NnE", (x) => {
   Device device = x;
   Console.WriteLine("Device load: " + device.Name);
}, (emw)=> {
  Console.WriteLine("error: " + emw.Message);
});

Parameter Type Description
DeviceKey String Key that uniquely identifies a device.
callback Action Delegate called when device has been loaded.
onError Action Delegate called if an error occurs.

Exceptions

Code Message Notes
DeviceKey is required A valid DeviceKey must be passed in the first parameter
21121 Unknown device key ... The DeviceKey did not match a device on the server

See also: Common Exceptions

LoadDevices

LoadDevices Function Header (C#)

public void LoadDevices(Action<Device> callback, Action<MiddlewareException> onError=null)

Loads all Devices.

LoadDevices Example (C#)

client.LoadDevices((x) => {
   Device device = x;
   Console.WriteLine("Device load: " + device.Name);
}, (emw)=> {
  Console.WriteLine("error: " + emw.Message);
});

Parameter Type Description
callback Action Delegate called when each device has been loaded.
onError Action Delegate called if an error occurs.

Exceptions

See also: Common Exceptions

LoadPaymentRequestByKey

LoadPaymentRequestByKey Function Header (C#)

public void LoadPaymentRequestByKey(String RequestKey, Action<PaymentRequest> callback, Action<MiddlewareException> onError)

Load an existing payment request by RequestKey.

Missing Example (C#)

ADD ME!
Parameter Type Description
RequestKey String Key that uniquely identifies an existing payment request.
callback Action Delegate called when payment request has been loaded.
onError Action Delegate called if an error occurs.

Exceptions

Code Message Notes
RequestKey is required A valid RequestKey must be passed in the first parameter
99999 Request not found The RequestKey did not match a payment request on the server

Device Class

Parameter Type Description
DeviceKey String Key that uniquely identifies a device.
Name String Developer/merchant assigned device name
Status String Current device status
PairingCode String If device has not been paired yet, this parameter contains the pairing code needed to be entered on terminal to complete registration.
PairingExpiration DateTime Date/Time that the pairing code will expire. The device will automatically be deleted if not paired by this time.
Config %TerminalConfig% Terminal configuration. Controls the payment processing features, such as contactless payments, EMV and PIN debit. TerminalConfig
Settings %DeviceSettings% Settings not related to payment processing, such as whether to allow sharing the device between multiple merchants. DeviceSettings
Details %DeviceDetails% Contains details about the registered terminal, such as the model and serial number. DeviceDetails

StartTransaction

StartTransaction Function Header (C#)

public PaymentRequest StartTransaction(Transaction Request, Action<String,TransactionResult> onTransactionComplete, Action<String> onStatusUpdate, Action<MiddlewareException> onError)

Sends a payment request to the terminal. Returns a PaymentRequest object that can be used to access the current status of the payment or cancel the transaction.

StartTransaction Example (C#)

TransactionRequest tran = new TransactionRequest()
{
    Command = "cc:sale",
    Amount = "10.00"
};
request = device.StartTransaction(tran,
    (status, result) =>
    {
      Console.WriteLine("Status: " + status);
        if(result != null)
        {
            Console.WriteLine("Transaction " + result.Result);
            if (result.ResultCode.Equals("A")) Console.WriteLine("  AuthCode: " + result.AuthCode);
            else Console.WriteLine("  Error: " + result.Error);
        }
    },
    (status) =>
    {
        Console.WriteLine("Status: " + status);
    },
    (emw) =>
    {
        Console.WriteLine("Error: " + emw.Message);
    },
  );

Parameter Type Description
Request %TransactionRequest% Transaction details such as amount. TransactionRequest
onTransactionComplete Action Method that is called once the device has refreshed. Passes a String containing the current device status
onStatusUpdate Action Method that is called once the device has refreshed. Passes a String containing the current device status
onError Action Method that is called if an exception occurs. Note: this is only called for communication and library issues. If the transaction is declined, the customer cancels the transaction or any other processing related error occurs, onTransactionComplete will be called.

ToJSON

ToJSON Example (C#)

String json = device.ToJSON();

Serializes a Device object to a JSON encoded string.

Refresh

Refresh Function Header (C#)

public void Refresh(Action<PaymentRequest> callback, Action<MiddlewareException> onError)

Refreshes device information and status.

Refresh Example (C#)

device.Refresh((x) =>
{
    Console.WriteLine("Device status: " + device.Status);
}, (ex)=>{
    Console.WriteLine("Error: " + ex.Message);
});

Parameter Type Description
callback Action Method that is called once the device has refreshed.
onError Action Method that is called if an exception occurs.

ResetPairing

ResetPairing Function Header (C#)

public void ResetPairing(Action<PairingCode> callback, Action<MiddlewareException> onError)

Unlinks the devicekey from the terminal and generates a new pairing code. The terminal will go back to the pairing screen and the device key can be then be paired to either the same terminal or a new one. This method allows for switching hardware terminals without needing to switch to a new devicekey.

ResetPairing Example (C#)

device.ResetPairing((x) =>
{
    Console.WriteLine("Pairing reset, new pairing code: " + x);
}, (ex)=>{
    Console.WriteLine("Error: " + ex.Message);
});

Parameter Type Description
callback Action Method that is called once the device is reset, passes the new pairing code
onError Action Method that is called if an exception occurs.

DeviceDetails Class

Parameter Type Description
Make String Device manufacturer
Model String Model name of terminal
Revision String Firmware version
Serial String Serial number

DeviceSettings Class

This object controls the settings of the payment engine device not related to payment acceptance. Payment acceptance settings are configured via the TerminalConfig.

Parameter Type Description
Timeout int Sets transaction timeout in seconds.
EnableStandalone bool Allows transactions to be initiated by terminal.
ShareDevice bool Allows terminal to be used by any API key including those belonging to other merchants.

TerminalConfig Class

This object describes the requested terminal config. When processing a transaction, the merchants capabilities are also evaluated. Features that are requested and available to the merchant will be enabled on the terminal. For example: If EnableEMV is set to true, but the merchant is configured for a credit card processor that does not support EMV, then the card slot will not be enabled.

Parameter Type Description
EnableEMV bool Enable the smart card slot for EMV processing
EnableDebitMSR bool Enable swiped PIN debit transactions
EnableContactless bool Enable the contactless reader for NFC transactions
TipAdjustAfterAuth bool Allow addition of tip after initial authorization. Disables PIN CVM and No CVM.

PaymentRequest Class

Parameter Type Description
RequestKey String Unique key that identifies the payment request
Status String The current status of the payment request
Result %TransactionResult% Contains the payment details after a transaction has been completed, such as authorization code. TransactionResult
Timeout int The maximum amount of time allowed for the customer to complete the payment on the terminal. When the timeout is reached, the payment will be canceled.

CancelTransaction

CancelTransaction Function Header (C#)

public void CancelTransaction(Action<String>callback, Action<MiddlewareException> onError)

Cancels a payment request that is in progress.

CancelTransaction Example (C#)

request.CancelTransaction((x) =>
{
    Console.WriteLine("Request cancelled: " + x);
}, (ex)=>
{
    Console.WriteLine("Exception cancelling tran: " + ex.Message);
});

Parameter Type Description
callback Action Delegate is called once the payment request has been canceled.
onError Action Delegate is called if an exception occurs.

TransactionRequest Class

This object is passed to the StartTransaction method. The only required parameters are the "Command" and "Amount" fields. The DeviceKey is set automatically by the StartTransaction method and will be ignored if set manually.

Parameter Type Description
DeviceKey String Unique identifier for the terminal that the transaction will be sent to.
Command String Payment command to run. Supported commands are: cc:sale, cc:authonly and cc:refund
Amount String Amount to process payment for. This should be the final amount (unless choosing to allow terminal to prompt for tip and cashback).
AmountDetail %AmountDetail% Detailed breakdown of the above total Amount. AmountDetail Class
PoNum String Purchase order number, only required for corporate cards.
Invoice String Invoice number, only first 10 digits are sent to platform
OrderID String Order identifier, alpha numeric
Description String Transaction description (visible to customer on receipt)
Comments String Internal transaction comments (visible only to merchant)
RestaurantTable String Table number
Clerk String Clerk/Cashier name
BillingAddress %Address% Billing address information
ShippingAddress %Address% Shipping address information
CustomerEmail String Customer email address
CustomerID String Customer ID
ClientIP String IP address of customer, useful if request is initiated from a server.
GeoLocation String Latitude and longitude to record for transaction. Example: "40.7142700,-74.0059700"
LineItems LineItem[] Array of line item details
ManualKey Boolean Set to true to have the terminal prompt for manual card number entry instead of swipe/dip
PromptTip Boolean Set to true to have the terminal prompt the customer for a tip amount.
PromptCashBack Boolean Set to true to have the terminal prompt the customer for cash back.
PromptSignature Boolean Set to false to prevent the terminal from capturing the customer signature. If the terminal supports signature capture, it will be on by default.
CustomFlow String Optional string that controls the sequence of screens presented to the customer during payment. Leave blank to use the default flow. Example: "amount,payment,result"
SaveCard Boolean Set to true to save the payment data to the customer record
Timeout Integer Set the transaction timeout
BlockOffline Boolean Set to true to have the request refused if the device is currently offline

TransactionResult Class

This object is returned when the payment has been completed.

Parameter Type Description
TransactionKey String Unique identifier for transaction. Can be used to perform actions such as refund and void on a transaction.
RefNum String Numeric sequential transaction reference number. Can be used with older gateway APIs.
AuthAmount String Authorized amount returned from processor.
AuthCode String AuthCode returned from processor.
ProcRefNum String Processor generated transaction reference number (if available).
Result String Result of transaction: Approved, Declined, Error or Partial Approval.
ResultCode String Result code of transaction: A, D, E or P
IsDuplicate String "Y" indicates that a duplicate transaction was detected, the transaction was folded, and the details from the original transaction was returned.
Error String Error message if transaction was a decline or error
ErrorCode String Gateway error code
ProcRefNum String Backend processor reference number (if available)
AVS AvsResult Result of address verification (if manually keyed)
CVC CvcResult Result of card code verification (if manually keyed)
CreditCard CreditCard Information about the credit card used
Token String Reusable token to charge payment data in a new request

Address Class

Parameter Type Description
FirstName String
LastName String
Company String
Street String
Street2 String
City String
State String
PostalCode String
Country String
Phone String
Fax String

AmountDetail Class

The amount class provides a break down of the total charge amount (the Amount field in the TransactionRequest class);

Parameter Type Description
Tax String Total tax amount
NonTaxable String Set to "Y" to indicate that the transaction is non-taxable.
Cash String For debit, amount of cashback
Tip String Tip amount, only set if choosing not to prompt for tip on terminal
Discount String Amount of order level discount
Shipping String Shipping charges
Duty String Duty charges (for level 3 processing)
EnablePartialAuth bool Include this parameter to authorize partial funds when the full amount is not available. For example, if the total is $10 and the customer only has $5 in their account, $5 will be authorized. If not included in request, partial authorization defaults to disabled.

AvsResult Class

Result of the Address Verification System. This only applies to manually keyed transactions. Swiped, dipped and contactless transactions will not typically receive a result.

Parameter Type Description
Result String String describing the address verification result.
ResultCode String Short code representing result.

CvcResult Class

Result of the card verification code match. This only applies to manually keyed transactions.

Parameter Type Description
Result String String describing the card verification code result.
ResultCode String Short code representing result.

CreditCard Class

Information about the credit card that was used to run the transaction .

Parameter Type Description
Type String Brand of card: Visa, Mastercard, Amex, Discover
Number String The masked card number
CardHolder String The card holder name (if available)
EntryMode String How the payment method was entered: keyed, swiped, dipped, or tapped
CategoryCode String The card category code (if available)
AvsStreet String The avs street number if manually keyed
AvsPostalCode String The avs postal code if manually keyed
Verification String The method of customer verification (if available): signature, pin
Signature String The base64 encoded PNG of the signature image (if available)

MiddlewareException Class

Parameter Type Description
Message String Error message
ErrorCode String If the error is a server side error, this parameter will be set to the gateway ErrorCode.

Common Exceptions

ErrorCode Message Notes
21002 API authentication failed The api key or pin is incorrect. Also verify that the gateway host is the same as the one used to create the key. A sandbox key will not work in production.

.Net Change Log

v1.0.9 - 2018-04-17

v1.0.8 - 2017-08-25

v1.0.7 - 2017-08-15

v1.0.6 - 2017-05-16

v1.0.5 - 2017-02-21

v1.0.4 - 2017-02-15

v1.0.3 - 2017-02-03

v1.0.2 - 2017-01-17

v1.0.1 - 2017-01-11

Sample Code: C# .net

Rest Authorization Header

To authenticate with the rest API, you will need to set the authorization header:

Example

WebRequest request = (WebRequest)WebRequest.Create(url);
request.ContentType = " application/json;charset=utf-8";
request.Headers["Authorization"] = BuildAuthHeader();

Helper functions for the above code:

Example

private static String BuildAuthHeader(String key,  String pin)
{

        // create seed for hash
        String Seed = Guid.NewGuid().ToString();

        // create hash of apikey, seed and pin
        String Hash = GenerateHash(key + Seed + pin);

        // assemble auth string,  api key is the username,  hash is the password
        String authInfo = key + ":s2/" + Seed + "/" + Hash;
        authInfo = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));

        return authInfo;
}

private static String GenerateHash(string input)
{
        // Create a new instance of the SHA256CryptoServiceProvider object.
        SHA256 shaHasher = SHA256.Create();

        // Convert the input string to a byte array and compute the hash.
        byte[] data = shaHasher.ComputeHash(Encoding.Default.GetBytes(input));

        // Create a new Stringbuilder to collect the bytes
        // and create a string.
        StringBuilder sBuilder = new StringBuilder();

        // Loop through each byte of the hashed data
        // and format each one as a hexadecimal string.
        for (int i = 0; i < data.Length; i++)
        {
                sBuilder.Append(data[i].ToString("x2"));
        }

        // Return the hexadecimal string.
        return sBuilder.ToString();
}

API Change Log

2018-03-19

2018-01-08

2017-08-28

2017-08-17

2017-01-17

Terminals

Castles MP200/MP200L

MP200

The MP200 combined with the PaymentEngine terminal software offers cutting edge payment acceptance solutions to a wide range of merchants. It can be used both as a mobile solution, paired via to Bluetooth to iOS or Android phones and tablets, and as a standalone wifi-based solution that can be integrated into virtually any desktop and browser based application.

Features

MP200 Main Menu

Settings

Connection Type Manage Wifi Rescan Wifi Mode Select Keypad Sound Off/On Unpair
Wifi Bluetooth USB Network name that you are currently connected to Rescan all networks that are available to connect Production or Sandbox When you press the number “5” on the keypad the sound will turn off/on This option is to unpair from the network that you are currently connected to

Device Information

Mode Build Deployment Device Key Wi-Fi
Production or Sandbox Current version that the device is running on USAePay Specific key associated with the device Network that you are currently connected to

Anatomy of the MP200

Screenshot Screenshot Screenshot Screenshot

Pairing Device (iOS)

When using the MP200 with a iOS mobile application that implements the middleware library, the merchants mobile device will communicate with MP200 via a Bluetooth connection. The following steps must be followed to pair the MP200 with the iOS device. Note: If the Castles MP200 device is to be used with multiple phones/tablets then the MP200 device must be unpaired from any unused mobile devices.

  1. On the MP200 device press and hold the Bluetooth button until the device requests PIN
  2. Go to iPhone/iPad Settings-->Bluetooth-->Enable Bluetooth-->Select the MP200 device
  3. If you have multiple MP200 devices, find the last 4 digits of the S/N (serial number) on the back of the MP200. See below. castleBackImg
  4. In our case, we would select MP200-1793 from the iPhone/iPad. IMG_0009
  5. Once the device connects to the MP200, a PIN will pop up on the mobile device screen. See below. IMG_0010
  6. Enter the pin into the MP200.
  7. Wait until the MP200 displays a green check mark and "OK." On your phone/tablet you should see the MP200 is "Connected," as shown below. IMG_0011

Pairing Device (Payment Engine)

  1. On the MP200 device press and hold the Wi-Fi button until you hear the second beep sound.
  2. You will then be shown a list of available Wi-Fi networks that are in range of the MP200.
  3. Scroll to the network that you want to connect to and press the green key again.
  4. The device will then prompt you for the password for that network. Use the keys to enter letters and numbers by pressing the key repeatedly to scroll through the available characters for that key.
  5. When completed, give the device around thirty seconds to connect with the Wi-Fi network. The Wi-Fi indicator will change from a Wi-Fi symbol with an exclamation mark to showing the Wi-Fi signal strength.

Device Manager

  1. To access the Device Manager, click on ‘Settings’ from your side menu bar then select ‘Device Manager’ on the drop down menu. Screenshot
  2. A source key must be added first to connect your device (CASTLES MP200). Go to ‘Settings’ from your side menu bar and then select ‘API Keys’ on the drop down menu. Click on 'Add API Key' to add a new source key.
  3. After a source key has been generated, return to the Device Manager section under Settings. Click on the 'Add' button to add a new Device. The following screen will appear to register device: Screenshot
  4. Enter the Device’s Name and select the Source Key from the drop down menu as shown below. Please Note: Device name can contain letters, numbers, spaces, and dashes. All other characters will be filtered out. Screenshot Once the Device Name and Source Key have been selected, click on 'Register'. The Merchant Console will then generate a pairing code to pair your device to the Merchant Console. Screenshot The CASTLES MP200 device will then ask you to enter the pairing code (shown in the Merchant Console): Screenshot
  5. Once the pairing code has been entered, your device should be connected. The green icon in the top right of the box indicates that the device is connected. Screenshot
  6. Device Options: Click on the device to view the device’s settings. The following page with the device’s information and options will appear: Screenshot
  7. Now that a device is connected to your Merchant Console, the Simple Charge option will appear under the ‘Transactions’ section of the Console. Screenshot When you click on Simple Charge in the side menu, you can either enter the information manually or use your device to process the card. Click on "Manual" to reveal the drop down menu and select from the devices connected. Screenshot After all information has been entered, click on 'Process Charge' to process the transaction.

Firmware Change Log

Build 0054

Build 0053

Build 0052

Build 0051

Build 0050

Build 0049

%settings%

Parameter Name Type Description
timeout Transaction timeout, how long to wait for transaction authorization to complete.
enable_standalone Allows transactions to be initiated from terminal (if supported).
share_device If true, this allows the payment device to be used by other merchants. If false, only the merchant associated with the apikeyid may send transactions to device.
notify_update If true, device will be notified on all future updates
notify_update_next If true, device will be notified only on the next update. After notification, this is automatically set back to false.
sleep_battery_device This is the amount of inactive time (in minutes) before the device enters full sleep if it is running on battery. If in full sleep, you will need to turn the device on again before processing. Wifi and Bluetooth pairing should persist, even after full sleep. Set to '0' to never sleep.
sleep_battery_display This is the amount of inactive time (in minutes) before the device enters display sleep if it is running on battery. If in display sleep, just send a transaction to the device or tap any button to wake the device. Set to '0' to never sleep.
sleep_powered_device This is the amount of inactive time (in minutes) before the device enters full sleep if it is plugged into power. If in full sleep, you will need to turn the device on again before processing. Wifi and Bluetooth pairing should persist, even after full sleep. Set to '0' to never sleep.
sleep_powered_display This is the amount of inactive time (in minutes) before the device enters display sleep if it is plugged into power. If in display sleep, just send a transaction to the device or tap any button to wake the device. Set to '0' to never sleep.

%terminal_config%

Parameter Name Type Description
device_name String Name of device, should be "MP200".
enable_emv boolean Enables EMV processing.
enable_debit_msr boolean Enables PIN debit for swiped transactions.
enable_tip_adjust boolean Allows EMV transaction amounts to be adjusted after authorization (to add tip). Disables PIN authentication.
enable_contactless boolean Enables NFC reader.

%terminal_info%

Parameter Name Type Description
make Manufacturer
model Device model
revision Hardware version number
serial Device serial number
key_pin Device PIN encryption key. Only necessary if merchant will be processing transactions with a PIN.
key_pan Device PAN encryption key.

%CVMRESULT%

Constant Description
FAIL_CVM Indicates the CMV failed.
NO_CVM_REQ Indicates the CVM is not required.
PIN_OFFLINE_ENCR Indicates the PIN was verified offline and encrypted.
PIN_OFFLINE_PLAIN Indicates the PIN was verified offline in plaintext.
PIN_ONLINE Indicates the PIN was verified online.
SIGNATURE_REQ Indicates that a signature is required.

%UE_ERROR%

Constant Description
ALREADY_STARTED
BAD_SWIPE MP200 received bad swipe. Transaction will be aborted, retry.
GATEWAY_401_UNAUTHORIZED
GATEWAY_CONNECTION_ERROR The connection to the gateway failed.
GENERAL_EXCEPTION_CAUGHT Exception from Exception class caught, stack trace printed, report this error.
HANDLED These errors go out to the user.
INVALID_AMOUNT The amount entered was invalid.
INVALID_MAG_STRIPE The transaction was terminated because a bad mag swipe was retried 3 times.
INVALID_TERMINAL_CONFIG
INVALID_UPDATE_PARAMETER
LOW_BATTERY Low battery, plug in the MP200.
MP200_COMMAND_TIMEOUT Command to MP200 timed out, transaction will abort, retry.
NO_BT_DEVICE No BT(bluetooth) device was found, check BT settings.
NO_DEVICES_FOUND
NO_ERROR
NOT_CONNECTED The device is not in the connected state to execute this function.
NOT_ENOUGH_SPACE_FOR_UPDATE Free up memory in the app cache directory.
TIMEOUT_GATEWAY Timeout has occurred between gateway.
TRANSACTION_CANCEL_BUTTON The transaction was cancelled by pressing the cancel button.
TRANSACTION_CARD_ERROR
TRANSACTION_CARD_REMOVED
TRANSACTION_INVALID_PIN Transaction was terminated because of an invalid PIN.
TRANSACTION_REQUESTS_CHANGE_INTERFACE This will also fire a delegate to change interface.
UNHANDLED_ERROR Unhandled Error, please report this.
UNHANDLED_EXCEPTION
UNHANDLED_EXCEPTION_CAUGHT
UPDATE_COMPLETE
UPDATE_FAILED An error occurred during the update process causing it to fail.
USB_CONNECTION_CLOSED USB Connection has been closed, reconnect.
USER_INPUT_EXCEPTION

%holdTransInfo%

Key Description
command Processing command, in this case it will be "adjust".
amount Total amount of the transaction including tips
tip The amount to tip
refNum The refNum of the transaction for which you are adjusting.

%holdCaptureInfo%

Key Description
command Processing command, in this case it will be "capture".
amount Total amount of the transaction for which you are capturing the signature.
refNum The refNum of the transaction for which you are capturing the signature.
signature The base64Encoded string of the image.

%signatureDict%

Key Description
command Processing command, in this case it will be "capture".
amount Total amount of the transaction for which you are capturing the signature.
refNum The refNum of the transaction for which you are capturing the signature.
signature The base64Encoded string of the image.

%custom_flow%

Parameter Description
%custom_flow%(comma delimited string) Allows you to customize the order in which each payment screen is displayed on the device.

%custom_flow%

Parameter Description
payment Payment taking screen (must come before result).
amount Optional confirmation of amount (must come before result).
result Displays the transaction result.
signature Signature capture (must come after result).
signature_required Signature capture. If the signature is cancelled, then the transaction will be cancelled (must come after result).

%Address%

Parameter Type Description
FirstName String
LastName String
Company String
Street String
Street2 String
City String
State String
PostalCode String
Country String
Phone String
Fax String

%AmountDetail%

Parameter Type Description
Tax String Total tax amount
NonTaxable String Set to "Y" to indicate that the transaction is non-taxable.
Cash String For debit, amount of cashback
Tip String Tip amount, only set if choosing not to prompt for tip on terminal
Discount String Amount of order level discount
Shipping String Shipping charges
Duty String Duty charges (for level 3 processing)
EnablePartialAuth bool Include this parameter to authorize partial funds when the full amount is not available. For example, if the total is $10 and the customer only has $5 in their account, $5 will be authorized. If not included in request, partial authorization defaults to disabled.

%TransactionRequest%

Parameter Type Description
DeviceKey String Unique identifier for the terminal that the transaction will be sent to.
Command String Payment command to run. Supported commands are: cc:sale, cc:authonly and cc:refund
Amount String Amount to process payment for. This should be the final amount (unless choosing to allow terminal to prompt for tip and cashback).
AmountDetail AmountDetail Class Detailed breakdown of the above total Amount.
PoNum String Purchase order number, only required for corporate cards.
Invoice String Invoice number, only first 10 digits are sent to platform
OrderID String Order identifier, alpha numeric
Description String Transaction description (visible to customer on receipt)
Comments String Internal transaction comments (visible only to merchant)
RestaurantTable String Table number
Clerk String Clerk/Cashier name
BillingAddress address Billing address information
ShippingAddress address Shipping address information
CustomerEmail String Customer email address
CustomerID String Customer ID
ClientIP String IP address of customer, useful if request is initiated from a server.
GeoLocation String Latitude and longitude to record for transaction. Example: "40.7142700,-74.0059700"
LineItems LineItem[] Array of line item details
ManualKey Boolean Set to true to have the terminal prompt for manual card number entry instead of swipe/dip
PromptTip Boolean Set to true to have the terminal prompt the customer for a tip amount.
PromptCashBack Boolean Set to true to have the terminal prompt the customer for cash back.
PromptSignature Boolean Set to false to prevent the terminal from capturing the customer signature. If the terminal supports signature capture, it will be on by default.
CustomFlow String Optional string that controls the sequence of screens presented to the customer during payment. Leave blank to use the default flow. Example: "amount,payment,result"
SaveCard Boolean Set to true to save the payment data to the customer record
Timeout Integer Set the transaction timeout
BlockOffline Boolean Set to true to have the request refused if the device is currently offline

%TransactionResult%

Parameter Type Description
TransactionKey String Unique identifier for transaction. Can be used to perform actions such as refund and void on a transaction.
RefNum String Numeric sequential transaction reference number. Can be used with older gateway APIs.
AuthAmount String Authroized amount returned from processor.
AuthCode String AuthCode returned from processor.
ProcRefNum String Processor generated transaction reference number (if available).
Result String Result of transaction: Approved, Declined, Error or Partial Approval.
ResultCode String Result code of transaction: A, D, E or P
IsDuplicate String "Y" indicates that a duplicate transaction was detected, the transaction was folded, and the details from the original transaction was returned.
Error String Error message if transaction was a decline or error
ErrorCode String Gateway error code
ProcRefNum String Backend processor reference number (if available)
AVS AvsResult Result of address verification (if manually keyed)
CVC CvcResult Result of card code verification (if manually keyed)
CreditCard CreditCard Information about the credit card used
Token String Reuasable token to charge payment data in a new request

%TerminalConfig%

Parameter Type Description
EnableEMV bool Enable the smart card slot for EMV processing
EnableDebitMSR bool Enable swiped PIN debit transactions
EnableContactless bool Enable the contactless reader for NFC transactions
TipAdjustAfterAuth bool Allow addition of tip after initial authorization. Disables PIN CVM and No CVM.

%DeviceDetails%

Parameter Type Description
Make String Device manufacturer
Model String Model name of terminal
Revision String Firmware version
Serial String Serial number

%DeviceSettings%

Parameter Type Description
Timeout int Sets transaction timeout in seconds.
EnableStandalone bool Allows transactions to be initiated by terminal.
ShareDevice bool Allows terminal to be used by any API key including those belonging to other merchants.

@GET/batches/:batch_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["batch_key"] = "bt1vswm59pb2488";

var response = USAePay.API.Batches.Get(request);

@GET/batches/:batch_key:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "batch";
response["key"] = "bt1vswm59pb2488";
response["batchrefnum"] = "404494";
response["opened"] = "2018-10-15 05:04:37";
response["status"] = "open";
response["scheduled"] = "2018-10-16 17:04:37";
response["total_amount"] = "73.78";
response["total_count"] = "9";
response["sales_amount"] = "126";
response["sales_count"] = "7";
response["voids_amount"] = "5";
response["voids_count"] = "1";
response["refunds_amount"] = "52.22";
response["refunds_count"] = "1";

@GET/batches@

IDictionary<string, object> request = new Dictionary<string, object>();
request["limit"] = "20";
request["offset"] = "0";

var response = USAePay.API.Batches.Get(request);

@GET/batches@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "list";
response["limit"] = "20";
response["offset"] = "0";
    IList<IDictionary<string, object>> data = new List<IDictionary<string, object>>();
        IDictionary<string, object> dataItem = new Dictionary<string, object>();
        dataItem["type"] = "batch";
        dataItem["key"] = "et1m9h57b44h16g";
        dataItem["batchrefnum"] = "408318";
        dataItem["sequence"] = "1519";
        dataItem["opened"] = "2019-02-15 12:32:21";
    data.Add(dataItem);
        IDictionary<string, object> dataItem1 = new Dictionary<string, object>();
        dataItem1["type"] = "batch";
        dataItem1["key"] = "dt18n0g3b4q4sm8";
        dataItem1["batchrefnum"] = "408317";
        dataItem1["sequence"] = "1518";
        dataItem1["opened"] = "2019-02-15 09:56:35";
        dataItem1["closed"] = "2019-02-15 10:00:23";
    data.Add(dataItem1);
        IDictionary<string, object> dataItem2 = new Dictionary<string, object>();
        dataItem2["type"] = "batch";
        dataItem2["key"] = "ft1m9m5p9wgd9mb";
        dataItem2["batchrefnum"] = "407929";
        dataItem2["sequence"] = "1423";
        dataItem2["opened"] = "2019-01-28 17:30:37";
        dataItem2["closed"] = "2019-02-14 15:20:43";
    data.Add(dataItem2);
response["data"]="data";
response["total"] = "3";

@GET/batches/current@

IDictionary<string, object> request = new Dictionary<string, object>();

var response = USAePay.API.Batches.Current.Get(request);

@GET/batches/current@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "batch";
response["key"] = "bt1vswm59pb2488";
response["batchrefnum"] = "403685";
response["opened"] = "2018-10-15 05:04:37";
response["status"] = "open";
response["scheduled"] = "2018-10-16 17:04:37";
response["total_amount"] = "131";
response["total_count"] = "8";
response["sales_amount"] = "131";
response["sales_count"] = "8";

@GET/batches/:batch_key:/transactions@

IDictionary<string, object> request = new Dictionary<string, object>();
request["batch_key"] = "pt1qxpnx0f5303d";

var response = USAePay.API.Batches.Transactions.Get(request);

@GET/batches/:batch_key:/transactions@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "list";
response["limit"] = "20";
response["offset"] = "0";
    IList<IDictionary<string, object>> data = new List<IDictionary<string, object>>();
        IDictionary<string, object> dataItem = new Dictionary<string, object>();
        dataItem["type"] = "transaction";
        dataItem["key"] = "cnfyy402xz086z8";
        dataItem["refnum"] = "2144606814";
        dataItem["trantype_code"] = "S";
        dataItem["trantype"] = "Credit Card Sale";
        dataItem["result_code"] = "A";
        dataItem["result"] = "Approved";
        dataItem["authcode"] = "703449";
        dataItem["status_code"] = "S";
        dataItem["status"] = "Settled";
            IDictionary<string, object> creditcard = new Dictionary<string, object>();
            creditcard["cardholder"] = "non token customer Customer";
            creditcard["number"] = "4444xxxxxxxx7779";
            creditcard["avs_street"] = "1234 main st";
            creditcard["avs_postalcode"] = "12345";
            creditcard["category_code"] = "A";
            creditcard["entry_mode"] = "Card Not Present, Manually Keyed";
        dataItem["creditcard"]="creditcard";
            IDictionary<string, object> avs = new Dictionary<string, object>();
            avs["result_code"] = "YYY";
            avs["result"] = "Address: Match & 5 Digit Zip: Match";
        dataItem["avs"]="avs";
            IDictionary<string, object> cvc = new Dictionary<string, object>();
            cvc["result_code"] = "P";
            cvc["result"] = "Not Processed";
        dataItem["cvc"]="cvc";
            IDictionary<string, object> batch = new Dictionary<string, object>();
            batch["type"] = "batch";
            batch["key"] = "0t1k3yx5xs37cvb";
            batch["batchrefnum"] = "409384";
            batch["sequence"] = "1417";
        dataItem["batch"]="batch";
        dataItem["amount"] = "50.00";
            IDictionary<string, object> amount_detail = new Dictionary<string, object>();
            amount_detail["tip"] = "0.00";
            amount_detail["tax"] = "2.50";
            amount_detail["shipping"] = "0.00";
            amount_detail["discount"] = "0.00";
        dataItem["amount_detail"]="amount_detail";
        dataItem["orderid"] = "1655102995";
        dataItem["description"] = "Welcome to Costco, I love you";
        dataItem["comments"] = "addCustomer test Created Charge";
            IDictionary<string, object> billing_address = new Dictionary<string, object>();
            billing_address["company"] = "PHP";
            billing_address["first_name"] = "non token customer";
            billing_address["last_name"] = "Customer";
            billing_address["street"] = "1234 main st";
            billing_address["street2"] = "Suite #123";
            billing_address["city"] = "Los Angeles";
            billing_address["state"] = "CA";
            billing_address["country"] = "US";
            billing_address["postalcode"] = "12345";
            billing_address["phone"] = "333-333-3333";
        dataItem["billing_address"]="billing_address";
    data.Add(dataItem);
        IDictionary<string, object> dataItem1 = new Dictionary<string, object>();
        dataItem1["type"] = "transaction";
        dataItem1["key"] = "8nfk1vtz58ckfc4";
        dataItem1["refnum"] = "2143977090";
        dataItem1["trantype_code"] = "S";
        dataItem1["trantype"] = "Credit Card Sale";
        dataItem1["result_code"] = "A";
        dataItem1["result"] = "Approved";
        dataItem1["authcode"] = "701199";
        dataItem1["status_code"] = "S";
        dataItem1["status"] = "Settled";
            IDictionary<string, object> creditcard = new Dictionary<string, object>();
            creditcard["cardholder"] = "non token customer Customer";
            creditcard["number"] = "4444xxxxxxxx7779";
            creditcard["avs_street"] = "1234 main st";
            creditcard["avs_postalcode"] = "12345";
            creditcard["category_code"] = "A";
            creditcard["entry_mode"] = "Card Not Present, Manually Keyed";
        dataItem1["creditcard"]="creditcard";
            IDictionary<string, object> avs = new Dictionary<string, object>();
            avs["result_code"] = "YYY";
            avs["result"] = "Address: Match & 5 Digit Zip: Match";
        dataItem1["avs"]="avs";
            IDictionary<string, object> cvc = new Dictionary<string, object>();
            cvc["result_code"] = "P";
            cvc["result"] = "Not Processed";
        dataItem1["cvc"]="cvc";
            IDictionary<string, object> batch = new Dictionary<string, object>();
            batch["type"] = "batch";
            batch["key"] = "0t1k3yx5xs37cvb";
            batch["batchrefnum"] = "409384";
            batch["sequence"] = "1417";
        dataItem1["batch"]="batch";
        dataItem1["amount"] = "50.00";
            IDictionary<string, object> amount_detail = new Dictionary<string, object>();
            amount_detail["tip"] = "0.00";
            amount_detail["tax"] = "2.50";
            amount_detail["shipping"] = "0.00";
            amount_detail["discount"] = "0.00";
        dataItem1["amount_detail"]="amount_detail";
        dataItem1["orderid"] = "1655102995";
        dataItem1["description"] = "Welcome to Costco, I love you";
        dataItem1["comments"] = "addCustomer test Created Charge";
            IDictionary<string, object> billing_address = new Dictionary<string, object>();
            billing_address["company"] = "PHP";
            billing_address["first_name"] = "non token customer";
            billing_address["last_name"] = "Customer";
            billing_address["street"] = "1234 main st";
            billing_address["street2"] = "Suite #123";
            billing_address["city"] = "Los Angeles";
            billing_address["state"] = "CA";
            billing_address["country"] = "US";
            billing_address["postalcode"] = "12345";
            billing_address["phone"] = "333-333-3333";
        dataItem1["billing_address"]="billing_address";
    data.Add(dataItem1);
response["data"]="data";
response["total"] = "2";

@GET/batches/current/transactions@

IDictionary<string, object> request = new Dictionary<string, object>();
request["limit"] = "20";
request["offset"] = "0";

var response = USAePay.API.Batches.Current.Transactions.Get(request);

@GET/batches/current/transactions@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "list";
response["limit"] = "20";
response["offset"] = "0";
    IList<IDictionary<string, object>> data = new List<IDictionary<string, object>>();
        IDictionary<string, object> dataItem = new Dictionary<string, object>();
        dataItem["type"] = "transaction";
        dataItem["key"] = "enfy5w3bnxqq433";
        dataItem["refnum"] = "2146101010";
        dataItem["trantype_code"] = "C";
        dataItem["trantype"] = "Credit Card Refund (Credit)";
        dataItem["result_code"] = "A";
        dataItem["result"] = "Approved";
        dataItem["authcode"] = "214611";
        dataItem["status_code"] = "P";
        dataItem["status"] = "Pending Settlement";
            IDictionary<string, object> creditcard = new Dictionary<string, object>();
            creditcard["cardholder"] = "Thelma Rogers";
            creditcard["number"] = "5555xxxxxxxx2226";
            creditcard["category_code"] = "";
            creditcard["entry_mode"] = "Card Not Present, Manually Keyed";
        dataItem["creditcard"]="creditcard";
            IDictionary<string, object> batch = new Dictionary<string, object>();
            batch["type"] = "batch";
            batch["key"] = "0t1k3yx5xs37cvb";
            batch["batchrefnum"] = "409384";
            batch["sequence"] = "1418";
        dataItem["batch"]="batch";
        dataItem["amount"] = "52.22";
            IDictionary<string, object> amount_detail = new Dictionary<string, object>();
            amount_detail["tax"] = "2.22";
        dataItem["amount_detail"]="amount_detail";
        dataItem["invoice"] = "52381283";
        dataItem["orderid"] = "75665798";
        dataItem["description"] = "Recurring Bill";
    data.Add(dataItem);
        IDictionary<string, object> dataItem1 = new Dictionary<string, object>();
        dataItem1["type"] = "transaction";
        dataItem1["key"] = "jnfychx0fs524t0";
        dataItem1["refnum"] = "2146100989";
        dataItem1["trantype_code"] = "Z";
        dataItem1["trantype"] = "Voided Credit Card Refund (Credit)";
        dataItem1["result_code"] = "A";
        dataItem1["result"] = "Approved";
        dataItem1["authcode"] = "214611";
        dataItem1["status_code"] = "P";
        dataItem1["status"] = "Voided";
            IDictionary<string, object> creditcard = new Dictionary<string, object>();
            creditcard["cardholder"] = "non token customer Customer";
            creditcard["number"] = "4444xxxxxxxx7779";
            creditcard["category_code"] = "";
            creditcard["entry_mode"] = "Card Not Present, Manually Keyed";
        dataItem1["creditcard"]="creditcard";
            IDictionary<string, object> batch = new Dictionary<string, object>();
            batch["type"] = "batch";
            batch["key"] = "0t1k3yx5xs37cvb";
            batch["batchrefnum"] = "409384";
            batch["sequence"] = "1418";
        dataItem1["batch"]="batch";
        dataItem1["amount"] = "50.00";
            IDictionary<string, object> amount_detail = new Dictionary<string, object>();
            amount_detail["tax"] = "2.50";
        dataItem1["amount_detail"]="amount_detail";
        dataItem1["orderid"] = "1655102995";
        dataItem1["description"] = "Welcome to Costco, I love you";
    data.Add(dataItem1);
        IDictionary<string, object> dataItem2 = new Dictionary<string, object>();
        dataItem2["type"] = "transaction";
        dataItem2["key"] = "2nfj5cpgsf4syhb";
        dataItem2["refnum"] = "2145985220";
        dataItem2["trantype_code"] = "S";
        dataItem2["trantype"] = "Credit Card Sale";
        dataItem2["result_code"] = "A";
        dataItem2["result"] = "Approved";
        dataItem2["authcode"] = "707113";
        dataItem2["status_code"] = "P";
        dataItem2["status"] = "Authorized (Pending Settlement)";
            IDictionary<string, object> creditcard = new Dictionary<string, object>();
            creditcard["cardholder"] = "Thelma Rogers";
            creditcard["number"] = "5555xxxxxxxx2226";
            creditcard["avs_street"] = "123 Sesame St";
            creditcard["avs_postalcode"] = "12345";
            creditcard["category_code"] = "M";
            creditcard["entry_mode"] = "Card Not Present, Manually Keyed";
        dataItem2["creditcard"]="creditcard";
            IDictionary<string, object> avs = new Dictionary<string, object>();
            avs["result_code"] = "YYY";
            avs["result"] = "Address: Match & 5 Digit Zip: Match";
        dataItem2["avs"]="avs";
            IDictionary<string, object> cvc = new Dictionary<string, object>();
            cvc["result_code"] = "M";
            cvc["result"] = "Match";
        dataItem2["cvc"]="cvc";
            IDictionary<string, object> batch = new Dictionary<string, object>();
            batch["type"] = "batch";
            batch["key"] = "0t1k3yx5xs37cvb";
            batch["batchrefnum"] = "409384";
            batch["sequence"] = "1418";
        dataItem2["batch"]="batch";
        dataItem2["amount"] = "5.00";
            IDictionary<string, object> amount_detail = new Dictionary<string, object>();
            amount_detail["tip"] = "0.50";
            amount_detail["tax"] = "1.00";
            amount_detail["shipping"] = "0.00";
            amount_detail["discount"] = "0.00";
        dataItem2["amount_detail"]="amount_detail";
            IDictionary<string, object> billing_address = new Dictionary<string, object>();
            billing_address["company"] = "PBS";
            billing_address["first_name"] = "Fred";
            billing_address["last_name"] = "Rogers";
            billing_address["street"] = "143 Neighborhood Way";
            billing_address["street2"] = "Apt 143";
            billing_address["city"] = "Pittsburgh";
            billing_address["state"] = "PA";
            billing_address["country"] = "USA";
            billing_address["postalcode"] = "15106";
            billing_address["phone"] = "555-5623";
        dataItem2["billing_address"]="billing_address";
    data.Add(dataItem2);
        IDictionary<string, object> dataItem3 = new Dictionary<string, object>();
        dataItem3["type"] = "transaction";
        dataItem3["key"] = "fnfkwdsxmbs7f4k";
        dataItem3["refnum"] = "2145983751";
        dataItem3["trantype_code"] = "S";
        dataItem3["trantype"] = "Credit Card Sale";
        dataItem3["result_code"] = "A";
        dataItem3["result"] = "Approved";
        dataItem3["authcode"] = "707110";
        dataItem3["status_code"] = "P";
        dataItem3["status"] = "Authorized (Pending Settlement)";
            IDictionary<string, object> creditcard = new Dictionary<string, object>();
            creditcard["cardholder"] = "Thelma Rogers";
            creditcard["number"] = "5555xxxxxxxx2226";
            creditcard["avs_street"] = "123 Sesame St";
            creditcard["avs_postalcode"] = "12345";
            creditcard["category_code"] = "M";
            creditcard["entry_mode"] = "Card Not Present, Manually Keyed";
        dataItem3["creditcard"]="creditcard";
            IDictionary<string, object> avs = new Dictionary<string, object>();
            avs["result_code"] = "YYY";
            avs["result"] = "Address: Match & 5 Digit Zip: Match";
        dataItem3["avs"]="avs";
            IDictionary<string, object> cvc = new Dictionary<string, object>();
            cvc["result_code"] = "M";
            cvc["result"] = "Match";
        dataItem3["cvc"]="cvc";
            IDictionary<string, object> batch = new Dictionary<string, object>();
            batch["type"] = "batch";
            batch["key"] = "0t1k3yx5xs37cvb";
            batch["batchrefnum"] = "409384";
            batch["sequence"] = "1418";
        dataItem3["batch"]="batch";
        dataItem3["amount"] = "5.00";
            IDictionary<string, object> amount_detail = new Dictionary<string, object>();
            amount_detail["tip"] = "0.50";
            amount_detail["tax"] = "1.00";
            amount_detail["shipping"] = "0.00";
            amount_detail["discount"] = "0.00";
        dataItem3["amount_detail"]="amount_detail";
            IDictionary<string, object> billing_address = new Dictionary<string, object>();
            billing_address["company"] = "PBS";
            billing_address["first_name"] = "Fred";
            billing_address["last_name"] = "Rogers";
            billing_address["street"] = "143 Neighborhood Way";
            billing_address["street2"] = "Apt 143";
            billing_address["city"] = "Pittsburgh";
            billing_address["state"] = "PA";
            billing_address["country"] = "USA";
            billing_address["postalcode"] = "15106";
            billing_address["phone"] = "555-5623";
        dataItem3["billing_address"]="billing_address";
    data.Add(dataItem3);
        IDictionary<string, object> dataItem4 = new Dictionary<string, object>();
        dataItem4["type"] = "transaction";
        dataItem4["key"] = "5nf0c9thbmmydfh";
        dataItem4["refnum"] = "2145970637";
        dataItem4["trantype_code"] = "V";
        dataItem4["trantype"] = "Voided Credit Card Sale";
        dataItem4["result_code"] = "A";
        dataItem4["result"] = "Approved";
        dataItem4["authcode"] = "707069";
        dataItem4["status_code"] = "R";
        dataItem4["status"] = "Voided (Funds Released)";
            IDictionary<string, object> creditcard = new Dictionary<string, object>();
            creditcard["cardholder"] = "Cornelius Fudge";
            creditcard["number"] = "4444xxxxxxxx7779";
            creditcard["avs_street"] = "1234 Main";
            creditcard["avs_postalcode"] = "34545";
            creditcard["category_code"] = "A";
            creditcard["entry_mode"] = "Card Not Present, Manually Keyed";
        dataItem4["creditcard"]="creditcard";
            IDictionary<string, object> avs = new Dictionary<string, object>();
            avs["result_code"] = "YYY";
            avs["result"] = "Address: Match & 5 Digit Zip: Match";
        dataItem4["avs"]="avs";
            IDictionary<string, object> cvc = new Dictionary<string, object>();
            cvc["result_code"] = "P";
            cvc["result"] = "Not Processed";
        dataItem4["cvc"]="cvc";
            IDictionary<string, object> batch = new Dictionary<string, object>();
            batch["type"] = "batch";
            batch["key"] = "0t1k3yx5xs37cvb";
            batch["batchrefnum"] = "409384";
            batch["sequence"] = "1418";
        dataItem4["batch"]="batch";
        dataItem4["amount"] = "5.00";
            IDictionary<string, object> amount_detail = new Dictionary<string, object>();
            amount_detail["tip"] = "0.00";
            amount_detail["tax"] = "0.00";
            amount_detail["shipping"] = "0.00";
            amount_detail["discount"] = "0.00";
        dataItem4["amount_detail"]="amount_detail";
            IDictionary<string, object> billing_address = new Dictionary<string, object>();
            billing_address["company"] = "Ministry of Magic";
            billing_address["first_name"] = "Cornelius";
            billing_address["last_name"] = "Fudge";
            billing_address["street"] = "123 Ministers Way";
            billing_address["street2"] = "Suite 505";
            billing_address["city"] = "London";
            billing_address["state"] = "CA";
            billing_address["country"] = "UK";
            billing_address["postalcode"] = "WC2N5DU";
            billing_address["phone"] = "555-867-5309";
        dataItem4["billing_address"]="billing_address";
    data.Add(dataItem4);
response["data"]="data";
response["total"] = "5";

@POST/batches/current/close@

IDictionary<string, object> request = new Dictionary<string, object>();

var response = USAePay.API.Batches.Current.Close.Post(request);

@POST/batches/current/close@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "batch";
response["key"] = "bt1vswm59pb2488";
response["batchrefnum"] = "403881";
response["sequence"] = "1418";
response["opened"] = "2018-10-15 05:04:37";
response["status"] = "closing";

@GET/customers/:custkey:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["custkey"] = "fsddgkr534kt7pvc";

var response = USAePay.API.Customers.Get(request);

@GET/customers/:custkey:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["key"] = "fsddgkr534kt7pvc";
response["type"] = "customer";
response["customerid"] = "234545";
response["custid"] = "74183319";
response["company"] = "Company 1";
response["first_name"] = "Mark";
response["last_name"] = "Hoppus";
response["street"] = "123 Blink St";
response["street2"] = "Apt 182";
response["city"] = "Anytown";
response["state"] = "CA";
response["postalcode"] = "12345";
response["country"] = "USA";
response["phone"] = "555-555-5551";
response["fax"] = "777-777-7771";
response["email"] = "email@email.com";
response["url"] = "www.website.com";
response["notes"] = "I miss you";
response["description"] = "this is for your schedule";
    IList<IDictionary<string, object>> billing_schedules = new List<IDictionary<string, object>>();
        IDictionary<string, object> billing_schedulesItem = new Dictionary<string, object>();
        billing_schedulesItem["key"] = "an0mtryxp2d6mw9g9";
        billing_schedulesItem["type"] = "billingschedule";
        billing_schedulesItem["paymethod_key"] = "4n02pccv6tcmd8ky8";
        billing_schedulesItem["method_name"] = "Travis Barker-1111";
        billing_schedulesItem["amount"] = "10.00";
        billing_schedulesItem["currency_code"] = "0";
        billing_schedulesItem["description"] = "this is for your schedule";
        billing_schedulesItem["enabled"] = "1";
        billing_schedulesItem["frequency"] = "weekly";
        billing_schedulesItem["next_date"] = "2018-10-22";
        billing_schedulesItem["numleft"] = "-1";
        billing_schedulesItem["orderid"] = "12";
        billing_schedulesItem["receipt_note"] = "Thank you for your business! ";
        billing_schedulesItem["send_receipt"] = "1";
        billing_schedulesItem["source"] = "0";
        billing_schedulesItem["start_date"] = "2017-10-12";
        billing_schedulesItem["tax"] = "2.00";
        billing_schedulesItem["user"] = "";
        billing_schedulesItem["username"] = "";
        billing_schedulesItem["skip_count"] = "1";
            IList<IDictionary<string, object>> rules = new List<IDictionary<string, object>>();
                IDictionary<string, object> rulesItem = new Dictionary<string, object>();
                rulesItem["key"] = "hn0vr74x82nj7tntb";
                rulesItem["type"] = "billingschedulerule";
                rulesItem["day_offset"] = "0";
                rulesItem["month_offset"] = "0";
                rulesItem["subject"] = "mon";
            rules.Add(rulesItem);
        billing_schedulesItem["rules"]="rules";
    billing_schedules.Add(billing_schedulesItem);
response["billing_schedules"]="billing_schedules";
    IList<IDictionary<string, object>> payment_methods = new List<IDictionary<string, object>>();
        IDictionary<string, object> payment_methodsItem = new Dictionary<string, object>();
        payment_methodsItem["key"] = "4n02pccv6tcmd8ky8";
        payment_methodsItem["type"] = "customerpaymentmethod";
        payment_methodsItem["method_name"] = "Travis Barker-1111";
        payment_methodsItem["expires"] = "2019-09-01";
        payment_methodsItem["card_type"] = "V";
        payment_methodsItem["ccnum4last"] = "1111";
        payment_methodsItem["avs_street"] = "123 Main St";
        payment_methodsItem["avs_postalcode"] = "90005";
        payment_methodsItem["added"] = "2018-08-29 16:40:24";
        payment_methodsItem["updated"] = "2018-08-29 16:40:24";
    payment_methods.Add(payment_methodsItem);
        IDictionary<string, object> payment_methodsItem1 = new Dictionary<string, object>();
        payment_methodsItem1["key"] = "9n02pcf95294xrgtk";
        payment_methodsItem1["type"] = "customerpaymentmethod";
        payment_methodsItem1["method_name"] = "Mastercard";
        payment_methodsItem1["expires"] = "2022-09-30";
        payment_methodsItem1["card_type"] = "M";
        payment_methodsItem1["ccnum4last"] = "2275";
        payment_methodsItem1["avs_street"] = "1236 Main";
        payment_methodsItem1["avs_postalcode"] = "12345";
        payment_methodsItem1["added"] = "2018-07-12 12:03:01";
        payment_methodsItem1["updated"] = "2018-07-12 12:03:01";
    payment_methods.Add(payment_methodsItem1);
response["payment_methods"]="payment_methods";

@GET/customers@

IDictionary<string, object> request = new Dictionary<string, object>();
request["limit"] = "1";
request["offset"] = "5";

var response = USAePay.API.Customers.Get(request);

@GET/customers@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "list";
response["limit"] = "2";
response["offset"] = "5";
    IList<IDictionary<string, object>> data = new List<IDictionary<string, object>>();
        IDictionary<string, object> dataItem = new Dictionary<string, object>();
        dataItem["key"] = "ebrnm62q29gjdm7k";
        dataItem["type"] = "customer";
        dataItem["customerid"] = "10202212";
        dataItem["custid"] = "78625496";
        dataItem["company"] = "Company Men Inc";
        dataItem["first_name"] = "Robert";
        dataItem["last_name"] = "Durst";
        dataItem["street"] = "1222 Verdugo Cir";
        dataItem["street2"] = "#303";
        dataItem["city"] = "Los Angeles";
        dataItem["state"] = "CA";
        dataItem["postalcode"] = "90038";
        dataItem["country"] = "USA";
        dataItem["phone"] = "8888888888";
        dataItem["fax"] = "7777777777";
        dataItem["email"] = "johndoe@anon.com";
        dataItem["url"] = "www.google.com";
        dataItem["notes"] = "Signed up during January 2018 Promotion";
        dataItem["description"] = "Gold Level Customer";
    data.Add(dataItem);
        IDictionary<string, object> dataItem1 = new Dictionary<string, object>();
        dataItem1["key"] = "isddgz0505vcjv20";
        dataItem1["type"] = "customer";
        dataItem1["custid"] = "74183322";
        dataItem1["customerid"] = "";
        dataItem1["company"] = "Company 2";
        dataItem1["first_name"] = "Travis";
        dataItem1["last_name"] = "Barker";
        dataItem1["street"] = "789 Rock Blvd";
        dataItem1["street2"] = "";
        dataItem1["city"] = "Anywhere";
        dataItem1["state"] = "NY";
        dataItem1["postalcode"] = "12345";
        dataItem1["country"] = "USA";
        dataItem1["phone"] = "555-555-5553";
        dataItem1["fax"] = "777-777-7773";
        dataItem1["email"] = "email@email.com";
        dataItem1["url"] = "www.website.com";
        dataItem1["notes"] = "all the small things";
        dataItem1["description"] = "this is for your schedule";
    data.Add(dataItem1);
response["data"]="data";
response["total"] = "7";

@POST/customers@

IDictionary<string, object> request = new Dictionary<string, object>();
request["company"] = "Company Men Inc";
request["first_name"] = "Robert";
request["last_name"] = "Durst";
request["customerid"] = "234545";
request["street"] = "1222 Verdugo Cir";
request["street2"] = "#303";
request["city"] = "Los Angeles";
request["state"] = "CA";
request["postalcode"] = "90038";
request["country"] = "USA";
request["phone"] = "8888888888";
request["fax"] = "7777777777";
request["email"] = "johndoe@anon.com";
request["url"] = "www.google.com";
request["notes"] = "Signed up during January 2018 Promotion";
request["description"] = "Gold Level Customer";

var response = USAePay.API.Customers.Post(request);

@POST/customers@

IDictionary<string, object> response = new Dictionary<string, object>();
response["key"] = "6sddgs2m179ykp7b";
response["type"] = "customer";
response["customerid"] = "234545";
response["custid"] = "10450020";
response["company"] = "Company Men Inc";
response["first_name"] = "Robert";
response["last_name"] = "Durst";
response["street"] = "1222 Verdugo Cir";
response["street2"] = "#303";
response["city"] = "Los Angeles";
response["state"] = "CA";
response["postalcode"] = "90038";
response["country"] = "USA";
response["phone"] = "8888888888";
response["fax"] = "7777777777";
response["email"] = "johndoe@anon.com";
response["url"] = "www.google.com";
response["notes"] = "Signed up during January 2018 Promotion";
response["description"] = "Gold Level Customer";
response["payment_methods"] = null;
response["billing_schedules"] = null;

@DELETE/customers/:custkey:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["custkey"] = "Example_custkey";

var response = USAePay.API.Customers.Delete(request);

@DELETE/customers/:custkey:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["status"] = "success";

@PUT/customers/:custkey:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["custkey"] = "gbrnkzymbn2g9y3p";
request["company"] = "Company Men Inc";
request["first_name"] = "Robert";
request["last_name"] = "";
request["customerid"] = "234545";
request["street"] = "1222 Verdugo Cir";
request["street2"] = "#303";

var response = USAePay.API.Customers.Put(request);

@PUT/customers/:custkey:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["key"] = "gbrnkzymbn2g9y3p";
response["type"] = "customer";
response["custid"] = "75440446";
response["customerid"] = "234545";
response["company"] = "Company Men Inc";
response["first_name"] = "Robert";
response["last_name"] = "";
response["street"] = "1222 Verdugo Cir";
response["street2"] = "#303";
response["city"] = "London";
response["state"] = "CA";
response["postalcode"] = "WC2N5DU";
response["country"] = "UK";
response["phone"] = "555-867-5309";
response["fax"] = "555-329-6363";
response["email"] = "minister@mom.spell";
response["url"] = "http://harrypotter.wikia.com/wiki/Cornelius_Fudge";
response["notes"] = "Signed up during January 2018 Promotion";
response["description"] = "Gold Level Customer";
response["payment_methods"] = null;
response["billing_schedules"] = null;

@POST/customers/enable@

IDictionary<string, object> request = new Dictionary<string, object>();

var response = USAePay.API.Customers.Enable.Post(request);

@POST/customers/enable@

IDictionary<string, object> response = new Dictionary<string, object>();
response["status"] = "success";

@POST/customers/disable@

IDictionary<string, object> request = new Dictionary<string, object>();

var response = USAePay.API.Customers.Disable.Post(request);

@POST/customers/disable@

IDictionary<string, object> response = new Dictionary<string, object>();
response["status"] = "success";

@GET/customers/:custkey:/billing_schedules/:billing_schedule_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["custkey"] = "ksddgpqgpbs5zkmb";
request["billing_schedule_key"] = "0n0mt805n00txppn8";

var response = USAePay.API.Customers.Billing_schedules.Get(request);

@GET/customers/:custkey:/billing_schedules/:billing_schedule_key:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["key"] = "0n0mt805n00txppn8";
response["type"] = "billingschedule";
response["paymethod_key"] = "8n02pc6tg9whk5j67";
response["method_name"] = "Smaug Savings";
response["amount"] = "5.00";
response["currency_code"] = "0";
response["description"] = "Cockroach Clusters";
response["enabled"] = "1";
response["frequency"] = "monthly";
response["next_date"] = "2019-02-01";
response["numleft"] = "12";
response["orderid"] = "76567898";
response["receipt_note"] = "So happy we could provide you with these gross gross candies!";
response["send_receipt"] = "1";
response["source"] = "0";
response["start_date"] = "2019-01-31";
response["tax"] = "1.00";
response["user"] = "33956";
response["username"] = "hgranger";
response["skip_count"] = "1";

@GET/customers/:custkey:/billing_schedules@

IDictionary<string, object> request = new Dictionary<string, object>();
request["custkey"] = "ksddgpqgpbs5zkmb";

var response = USAePay.API.Customers.Billing_schedules.Get(request);

@GET/customers/:custkey:/billing_schedules@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "list";
response["limit"] = "20";
response["offset"] = "0";
    IList<IDictionary<string, object>> data = new List<IDictionary<string, object>>();
        IDictionary<string, object> dataItem = new Dictionary<string, object>();
        dataItem["key"] = "1n0mtq7yvs3sqky8n";
        dataItem["type"] = "billingschedule";
        dataItem["paymethod_key"] = "8n02pc6tg9whk5j67";
        dataItem["method_name"] = "Smaug Savings";
        dataItem["amount"] = "25.00";
        dataItem["currency_code"] = "0";
        dataItem["description"] = "Chocolate Frog Card Value Pack";
        dataItem["enabled"] = "0";
        dataItem["frequency"] = "yearly";
        dataItem["next_date"] = "2019-03-15";
        dataItem["numleft"] = "5";
        dataItem["orderid"] = "877564567";
        dataItem["receipt_note"] = "Good Luck on getting your fave wizard cards.";
        dataItem["send_receipt"] = "1";
        dataItem["source"] = "0";
        dataItem["start_date"] = "2019-03-15";
        dataItem["tax"] = "0.00";
        dataItem["user"] = "";
        dataItem["username"] = "";
        dataItem["skip_count"] = "1";
    data.Add(dataItem);
        IDictionary<string, object> dataItem1 = new Dictionary<string, object>();
        dataItem1["key"] = "ln0mtq7zpq71qsytr";
        dataItem1["type"] = "billingschedule";
        dataItem1["paymethod_key"] = "bn02x3r42bwy833ms";
        dataItem1["method_name"] = "Gringotts Credit";
        dataItem1["amount"] = "5.00";
        dataItem1["currency_code"] = "0";
        dataItem1["description"] = "Cockroach Clusters";
        dataItem1["enabled"] = "1";
        dataItem1["frequency"] = "monthly";
        dataItem1["next_date"] = "2019-03-01";
        dataItem1["numleft"] = "12";
        dataItem1["orderid"] = "76567898";
        dataItem1["receipt_note"] = "So happy we could provide you with these gross gross candies!";
        dataItem1["send_receipt"] = "1";
        dataItem1["source"] = "0";
        dataItem1["start_date"] = "2019-01-31";
        dataItem1["tax"] = "1.00";
        dataItem1["user"] = "33956";
        dataItem1["username"] = "hgranger";
        dataItem1["skip_count"] = "2";
    data.Add(dataItem1);
        IDictionary<string, object> dataItem2 = new Dictionary<string, object>();
        dataItem2["key"] = "fn0mtq7ydjc74sd93";
        dataItem2["type"] = "billingschedule";
        dataItem2["paymethod_key"] = "6n02p9w1sswpgwxyh";
        dataItem2["method_name"] = "Minerva M-1111";
        dataItem2["amount"] = "52.00";
        dataItem2["currency_code"] = "0";
        dataItem2["description"] = "Lemon Drops";
        dataItem2["enabled"] = "1";
        dataItem2["frequency"] = "monthly";
        dataItem2["next_date"] = "2019-02-01";
        dataItem2["numleft"] = "-1";
        dataItem2["orderid"] = "1881";
        dataItem2["receipt_note"] = "Thank you for your order!";
        dataItem2["send_receipt"] = "1";
        dataItem2["source"] = "0";
        dataItem2["start_date"] = "2019-01-01";
        dataItem2["tax"] = "2.00";
        dataItem2["user"] = "33956";
        dataItem2["username"] = "hgranger";
        dataItem2["skip_count"] = "1";
    data.Add(dataItem2);
response["data"]="data";
response["total"] = "3";

@POST/customers/:custkey:/billing_schedules@

IDictionary<string, object> request = new Dictionary<string, object>();
request["custkey"] = "ksddgpqgpbs5zkmb";
    IList<IDictionary<string, object>> requestList = new List<IDictionary<string, object>>();
        IDictionary<string, object> requestListItem = new Dictionary<string, object>();
        requestListItem["amount"] = "5.00";
        requestListItem["currency_code"] = "0";
        requestListItem["paymethod_key"] = "8n02pc6tg9whk5j67";
        requestListItem["description"] = "Cockroach Clusters";
        requestListItem["enabled"] = "1";
        requestListItem["frequency"] = "monthly";
        requestListItem["next_date"] = "2019-01-31";
        requestListItem["numleft"] = "12";
        requestListItem["orderid"] = "76567898";
        requestListItem["receipt_note"] = "So happy we could provide you with these gross gross candies!";
        requestListItem["send_receipt"] = "1";
        requestListItem["source"] = "";
        requestListItem["start_date"] = "2019-02-01";
        requestListItem["tax"] = "1.00";
        requestListItem["user"] = "33956";
        requestListItem["username"] = "hgranger";
        requestListItem["skip_count"] = "2";
            IList<IDictionary<string, object>> rules = new List<IDictionary<string, object>>();
                IDictionary<string, object> rulesItem = new Dictionary<string, object>();
                rulesItem["day_offset"] = "1";
                rulesItem["month_offset"] = "0";
                rulesItem["subject"] = "Day";
            rules.Add(rulesItem);
        requestListItem["rules"]="rules";
    requestList.Add(requestListItem);
request["requestList"]="requestList";

var response = USAePay.API.Customers.Billing_schedules.Post(request);

@POST/customers/:custkey:/billing_schedules@

IList<IDictionary<string, object>> response = new List<IDictionary<string, object>>();
    IDictionary<string, object> responseItem = new Dictionary<string, object>();
    responseItem["paymethod_key"] = "8n02pc6tg9whk5j67";
    responseItem["amount"] = "15.00";
    responseItem["currency_code"] = "0";
    responseItem["description"] = "Lemon Drops";
    responseItem["enabled"] = "1";
    responseItem["frequency"] = "weekly";
    responseItem["next_date"] = "2019-01-09";
    responseItem["numleft"] = "-1";
    responseItem["orderid"] = "12356";
    responseItem["receipt_note"] = "So happy we could provide you with these weird weird muggle candies!";
    responseItem["send_receipt"] = "1";
    responseItem["source"] = "";
    responseItem["start_date"] = "2019-01-09";
    responseItem["tax"] = "2.00";
    responseItem["user"] = "";
    responseItem["username"] = "";
    responseItem["skip_count"] = "1";
        IList<IDictionary<string, object>> rules = new List<IDictionary<string, object>>();
            IDictionary<string, object> rulesItem = new Dictionary<string, object>();
            rulesItem["day_offset"] = "0";
            rulesItem["month_offset"] = "0";
            rulesItem["subject"] = "wed";
        rules.Add(rulesItem);
    responseItem["rules"]="rules";
response.Add(responseItem);
    IDictionary<string, object> responseItem1 = new Dictionary<string, object>();
    responseItem1["paymethod_key"] = "6n02p9w1sswpgwxyh";
    responseItem1["amount"] = "5.00";
    responseItem1["currency_code"] = "0";
    responseItem1["description"] = "Cockroach Clusters";
    responseItem1["enabled"] = "1";
    responseItem1["frequency"] = "monthly";
    responseItem1["next_date"] = "2019-02-01";
    responseItem1["numleft"] = "12";
    responseItem1["orderid"] = "76567898";
    responseItem1["receipt_note"] = "So happy we could provide you with these gross gross candies!";
    responseItem1["send_receipt"] = "1";
    responseItem1["source"] = "";
    responseItem1["start_date"] = "2019-01-31";
    responseItem1["tax"] = "1.00";
    responseItem1["user"] = "33956";
    responseItem1["username"] = "hgranger";
    responseItem1["skip_count"] = "1";
        IList<IDictionary<string, object>> rules = new List<IDictionary<string, object>>();
            IDictionary<string, object> rulesItem2 = new Dictionary<string, object>();
            rulesItem2["day_offset"] = "1";
            rulesItem2["month_offset"] = "0";
            rulesItem2["subject"] = "Day";
        rules.Add(rulesItem2);
    responseItem1["rules"]="rules";
response.Add(responseItem1);
    IDictionary<string, object> responseItem3 = new Dictionary<string, object>();
    responseItem3["paymethod_key"] = "8n02pc6tg9whk5j67";
    responseItem3["amount"] = "25.00";
    responseItem3["currency_code"] = "0";
    responseItem3["description"] = "Chocolate Frog Card Value Pack";
    responseItem3["enabled"] = "";
    responseItem3["frequency"] = "yearly";
    responseItem3["next_date"] = "2019-03-15";
    responseItem3["numleft"] = "5";
    responseItem3["orderid"] = "877564567";
    responseItem3["receipt_note"] = "Good Luck on getting your fave wizard cards.";
    responseItem3["send_receipt"] = "1";
    responseItem3["source"] = "";
    responseItem3["start_date"] = "2019-03-15";
    responseItem3["tax"] = "";
    responseItem3["user"] = "";
    responseItem3["username"] = "";
    responseItem3["skip_count"] = "1";
        IList<IDictionary<string, object>> rules = new List<IDictionary<string, object>>();
            IDictionary<string, object> rulesItem4 = new Dictionary<string, object>();
            rulesItem4["day_offset"] = "15";
            rulesItem4["month_offset"] = "03";
            rulesItem4["subject"] = "Day";
        rules.Add(rulesItem4);
    responseItem3["rules"]="rules";
response.Add(responseItem3);

@DELETE/customers/:custkey:/billing_schedules/:billing_schedule_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["custkey"] = "Example_custkey";
request["billing_schedule_key"] = "Example_billing_schedule_key";

var response = USAePay.API.Customers.Billing_schedules.Delete(request);

@DELETE/customers/:custkey:/billing_schedules/:billing_schedule_key:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["status"] = "success";

@PUT/customers/:custkey:/billing_schedules/:billing_schedule_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["custkey"] = "Example_custkey";
request["billing_schedule_key"] = "Example_billing_schedule_key";
request["type"] = "billingschedule";
    IList<IDictionary<string, object>> rules = new List<IDictionary<string, object>>();
        IDictionary<string, object> rulesItem = new Dictionary<string, object>();
        rulesItem["type"] = "billingschedulerule";
    rules.Add(rulesItem);
        IDictionary<string, object> rulesItem1 = new Dictionary<string, object>();
        rulesItem1["type"] = "billingschedulerule";
    rules.Add(rulesItem1);
request["rules"]="rules";

var response = USAePay.API.Customers.Billing_schedules.Put(request);

@PUT/customers/:custkey:/billing_schedules/:billing_schedule_key:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "billingschedule";
    IList<IDictionary<string, object>> rules = new List<IDictionary<string, object>>();
        IDictionary<string, object> rulesItem = new Dictionary<string, object>();
        rulesItem["type"] = "billingschedulerule";
    rules.Add(rulesItem);
        IDictionary<string, object> rulesItem1 = new Dictionary<string, object>();
        rulesItem1["type"] = "billingschedulerule";
    rules.Add(rulesItem1);
response["rules"]="rules";

@GET/customers/:custkey:/payment_methods/:paymethod_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["custkey"] = "ksddgpqgpbs5zkmb";
request["paymethod_key"] = "ln02pc6vxy98c79cs";

var response = USAePay.API.Customers.Payment_methods.Get(request);

@GET/customers/:custkey:/payment_methods/:paymethod_key:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["key"] = "ln02pc6vxy98c79cs";
response["type"] = "customerpaymentmethod";
response["method_name"] = "Hogwarts Card";
response["expires"] = "2022-09-30";
response["card_type"] = "V";
response["ccnum4last"] = "1111";
response["avs_street"] = "123 Grindy St";
response["avs_postalcode"] = "86577";
response["added"] = "2019-01-04 14:54:22";
response["updated"] = "2019-01-04 14:54:22";

@GET/customers/:custkey:/payment_methods@

IDictionary<string, object> request = new Dictionary<string, object>();
request["custkey"] = "ksddgpqgpbs5zkmb";

var response = USAePay.API.Customers.Payment_methods.Get(request);

@GET/customers/:custkey:/payment_methods@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "list";
response["limit"] = "20";
response["offset"] = "0";
    IList<IDictionary<string, object>> data = new List<IDictionary<string, object>>();
        IDictionary<string, object> dataItem = new Dictionary<string, object>();
        dataItem["key"] = "1n02pc6j72j3hncvb";
        dataItem["type"] = "customerpaymentmethod";
        dataItem["method_name"] = "BlottCash";
        dataItem["expires"] = "0000-00-00";
        dataItem["ccnum4last"] = "8586";
        dataItem["sortord"] = "2";
        dataItem["added"] = "2019-01-04 14:54:22";
        dataItem["updated"] = "2019-01-04 14:54:22";
    data.Add(dataItem);
        IDictionary<string, object> dataItem1 = new Dictionary<string, object>();
        dataItem1["key"] = "on02x3rbwshz23nhb";
        dataItem1["type"] = "customerpaymentmethod";
        dataItem1["method_name"] = "Gringotts Checking";
        dataItem1["expires"] = "0000-00-00";
        dataItem1["sortord"] = "1";
        dataItem1["added"] = "2019-01-04 14:54:22";
        dataItem1["updated"] = "2019-01-04 14:54:22";
    data.Add(dataItem1);
        IDictionary<string, object> dataItem2 = new Dictionary<string, object>();
        dataItem2["key"] = "ln02pc6vxy98c79cs";
        dataItem2["type"] = "customerpaymentmethod";
        dataItem2["method_name"] = "Hogwarts Card";
        dataItem2["expires"] = "2022-09-30";
        dataItem2["card_type"] = "V";
        dataItem2["ccnum4last"] = "1111";
        dataItem2["avs_street"] = "123 Grindy St";
        dataItem2["avs_postalcode"] = "86577";
        dataItem2["added"] = "2019-01-04 14:54:22";
        dataItem2["updated"] = "2019-01-04 14:54:22";
    data.Add(dataItem2);
response["data"]="data";
response["total"] = "3";

@POST/customers/:custkey:/payment_methods@

IDictionary<string, object> request = new Dictionary<string, object>();
request["custkey"] = "ksddgpqgpbs5zkmb";
    IList<IDictionary<string, object>> requestList = new List<IDictionary<string, object>>();
        IDictionary<string, object> requestListItem = new Dictionary<string, object>();
        requestListItem["method_name"] = "Minerva McGonagall";
        requestListItem["cardholder"] = "Hogwarts Card";
        requestListItem["number"] = "4000100011112224";
        requestListItem["expires"] = "0922";
        requestListItem["avs_street"] = "123 Grindy St";
        requestListItem["avs_postalcode"] = "86577";
        requestListItem["pay_type"] = "cc";
        requestListItem["default"] = "1";
        requestListItem["sortord"] = "1";
    requestList.Add(requestListItem);
request["requestList"]="requestList";

var response = USAePay.API.Customers.Payment_methods.Post(request);

@POST/customers/:custkey:/payment_methods@

IList<IDictionary<string, object>> response = new List<IDictionary<string, object>>();
    IDictionary<string, object> responseItem = new Dictionary<string, object>();
    responseItem["key"] = "ln02pc6vxy98c79cs";
    responseItem["type"] = "customerpaymentmethod";
    responseItem["method_name"] = "Hogwarts Card";
    responseItem["expires"] = "2022-09-30";
    responseItem["card_type"] = "V";
    responseItem["ccnum4last"] = "2224";
    responseItem["avs_street"] = "123 Grindy St";
    responseItem["avs_postalcode"] = "86577";
    responseItem["sortord"] = "1";
    responseItem["added"] = "2019-01-04 14:54:22";
    responseItem["updated"] = "2019-01-04 14:54:22";
response.Add(responseItem);

@DELETE/customers/:custkey:/payment_methods/:paymethod_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["custkey"] = "ksddgpqgpbs5zkmb";
request["paymethod_key"] = "fn02pc6jpfwzdnc7b";

var response = USAePay.API.Customers.Payment_methods.Delete(request);

@DELETE/customers/:custkey:/payment_methods/:paymethod_key:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["status"] = "success";

@PUT/customers/:custkey:/payment_methods/:paymethod_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["custkey"] = "ksddgpqgpbs5zkmb";
request["paymethod_key"] = "ln02pc6vxy98c79cs";
request["method_name"] = "Hogsmeade Card";
request["avs_street"] = "789 Low Dr";
request["avs_postalcode"] = "90005";

var response = USAePay.API.Customers.Payment_methods.Put(request);

@PUT/customers/:custkey:/payment_methods/:paymethod_key:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["key"] = "ln02pc6vxy98c79cs";
response["type"] = "customerpaymentmethod";
response["method_name"] = "Hogsmeade Card";
response["expires"] = "2022-09-30";
response["card_type"] = "V";
response["ccnum4last"] = "1111";
response["avs_street"] = "789 Low Dr";
response["avs_postalcode"] = "90005";
response["added"] = "2019-01-04 14:54:22";
response["updated"] = "2019-01-04 16:25:52";

@GET/customers/:custkey:/transactions@

IDictionary<string, object> request = new Dictionary<string, object>();
request["custkey"] = "ksddgpqgpbs5zkmb";
request["limit"] = "2";

var response = USAePay.API.Customers.Transactions.Get(request);

@GET/customers/:custkey:/transactions@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "list";
response["limit"] = "2";
response["offset"] = "0";
    IList<IDictionary<string, object>> data = new List<IDictionary<string, object>>();
        IDictionary<string, object> dataItem = new Dictionary<string, object>();
        dataItem["type"] = "transaction";
        dataItem["key"] = "bnfwhrb3cjzxftr";
        dataItem["refnum"] = "100345";
        dataItem["created"] = "2019-07-03 11:02:01";
        dataItem["trantype_code"] = "S";
        dataItem["trantype"] = "Credit Card Sale";
        dataItem["result_code"] = "A";
        dataItem["result"] = "Approved";
        dataItem["authcode"] = "261144";
        dataItem["status_code"] = "P";
        dataItem["status"] = "Authorized (Pending Settlement)";
            IDictionary<string, object> creditcard = new Dictionary<string, object>();
            creditcard["cardholder"] = "Minerva McGonnegall";
            creditcard["number"] = "4444xxxxxxxx1111";
            creditcard["avs_street"] = "789 Low Dr";
            creditcard["avs_postalcode"] = "90005";
            creditcard["category_code"] = "A";
            creditcard["entry_mode"] = "Card Not Present, Manually Keyed";
        dataItem["creditcard"]="creditcard";
            IDictionary<string, object> avs = new Dictionary<string, object>();
            avs["result_code"] = "YYY";
            avs["result"] = "Address: Match & 5 Digit Zip: Match";
        dataItem["avs"]="avs";
            IDictionary<string, object> cvc = new Dictionary<string, object>();
            cvc["result_code"] = "P";
            cvc["result"] = "Not Processed";
        dataItem["cvc"]="cvc";
            IDictionary<string, object> batch = new Dictionary<string, object>();
            batch["type"] = "batch";
            batch["key"] = "et1m9h57b4m26rt";
            batch["batchrefnum"] = "409384";
            batch["sequence"] = "2516";
        dataItem["batch"]="batch";
        dataItem["amount"] = "5.00";
            IDictionary<string, object> amount_detail = new Dictionary<string, object>();
            amount_detail["tip"] = "0.00";
            amount_detail["tax"] = "0.00";
            amount_detail["shipping"] = "0.00";
            amount_detail["discount"] = "0.00";
        dataItem["amount_detail"]="amount_detail";
        dataItem["invoice"] = "2841373";
        dataItem["description"] = "Recurring Bill";
        dataItem["customer_email"] = "danielle.dartnell@usaepay.com";
        dataItem["source_name"] = "recurring";
            IDictionary<string, object> billing_address = new Dictionary<string, object>();
            billing_address["company"] = "Hogwarts School of Witchcraft and Wizardry";
            billing_address["first_name"] = "Albus";
            billing_address["last_name"] = "Dumbledore";
            billing_address["street"] = "123 Astronomy Tower";
            billing_address["street2"] = "Suite 1";
            billing_address["city"] = "Phoenix";
            billing_address["state"] = "CA";
            billing_address["country"] = "USA";
            billing_address["postalcode"] = "10005";
            billing_address["phone"] = "555-253-3673";
        dataItem["billing_address"]="billing_address";
            IDictionary<string, object> custom_fields = new Dictionary<string, object>();
            custom_fields["1"] = "Gryffindor";
            custom_fields["2"] = "Headmaster of Hogwarts";
        dataItem["custom_fields"]="custom_fields";
    data.Add(dataItem);
        IDictionary<string, object> dataItem1 = new Dictionary<string, object>();
        dataItem1["type"] = "transaction";
        dataItem1["key"] = "6nfty5ftf6c0n8t";
        dataItem1["refnum"] = "100340";
        dataItem1["created"] = "2019-07-02 16:12:37";
        dataItem1["trantype_code"] = "S";
        dataItem1["trantype"] = "Credit Card Sale";
        dataItem1["result_code"] = "A";
        dataItem1["result"] = "Approved";
        dataItem1["authcode"] = "251951";
        dataItem1["status_code"] = "P";
        dataItem1["status"] = "Authorized (Pending Settlement)";
            IDictionary<string, object> creditcard = new Dictionary<string, object>();
            creditcard["cardholder"] = "Hogwarts School of Witchcraft and Wizardry";
            creditcard["number"] = "4444xxxxxxxx1111";
            creditcard["avs_street"] = "1234 Portkey Ave";
            creditcard["avs_postalcode"] = "12345";
            creditcard["category_code"] = "A";
            creditcard["entry_mode"] = "Card Not Present, Manually Keyed";
        dataItem1["creditcard"]="creditcard";
            IDictionary<string, object> avs = new Dictionary<string, object>();
            avs["result_code"] = "YYY";
            avs["result"] = "Address: Match & 5 Digit Zip: Match";
        dataItem1["avs"]="avs";
            IDictionary<string, object> cvc = new Dictionary<string, object>();
            cvc["result_code"] = "N";
            cvc["result"] = "No Match";
        dataItem1["cvc"]="cvc";
            IDictionary<string, object> batch = new Dictionary<string, object>();
            batch["type"] = "batch";
            batch["key"] = "et1m9h57b4m26rt";
            batch["batchrefnum"] = "409384";
            batch["sequence"] = "2516";
        dataItem1["batch"]="batch";
        dataItem1["amount"] = "500.00";
            IDictionary<string, object> amount_detail = new Dictionary<string, object>();
            amount_detail["tip"] = "5.00";
            amount_detail["tax"] = "45.00";
            amount_detail["shipping"] = "50.00";
            amount_detail["discount"] = "50.00";
        dataItem1["amount_detail"]="amount_detail";
        dataItem1["ponum"] = "af416fsd5";
        dataItem1["invoice"] = "98454685";
        dataItem1["description"] = "Antique Pensieve";
        dataItem1["comments"] = "Powerful magical object. Use with caution.";
        dataItem1["customer_email"] = "brian@hogwarts.com";
        dataItem1["source_name"] = "REST TEST";
            IDictionary<string, object> billing_address = new Dictionary<string, object>();
            billing_address["first_name"] = "Albus";
            billing_address["last_name"] = "Dumbledore";
            billing_address["street"] = "123 Astronomy Tower";
            billing_address["street2"] = "Suite 1";
            billing_address["city"] = "Phoenix";
            billing_address["state"] = "CA";
            billing_address["country"] = "USA";
            billing_address["postalcode"] = "10005";
            billing_address["phone"] = "555-253-3673";
            billing_address["fax"] = "666-253-3673";
        dataItem1["billing_address"]="billing_address";
            IDictionary<string, object> shipping_address = new Dictionary<string, object>();
            shipping_address["first_name"] = "Aberforth";
            shipping_address["last_name"] = "Dumbledore";
            shipping_address["street"] = "987 HogsHead St";
            shipping_address["city"] = "Hogsmead";
            shipping_address["state"] = "WY";
            shipping_address["country"] = "USA";
            shipping_address["postalcode"] = "30005";
            shipping_address["phone"] = "555-253-3673";
        dataItem1["shipping_address"]="shipping_address";
            IList<IDictionary<string, object>> lineitems = new List<IDictionary<string, object>>();
                IDictionary<string, object> lineitemsItem = new Dictionary<string, object>();
                lineitemsItem["name"] = "Antique Pensieve";
                lineitemsItem["cost"] = "450.00";
                lineitemsItem["taxable"] = "N";
                lineitemsItem["qty"] = "1.0000";
                lineitemsItem["tax_amount"] = "50.00";
                lineitemsItem["product_key"] = "ds4bb5ckg059vdn8";
                lineitemsItem["um"] = "EA";
                lineitemsItem["locationid"] = "13";
                lineitemsItem["location_key"] = "dnyyjc8s2vbz8hb33";
            lineitems.Add(lineitemsItem);
        dataItem1["lineitems"]="lineitems";
            IDictionary<string, object> custom_fields = new Dictionary<string, object>();
            custom_fields["1"] = "Gryffindor";
            custom_fields["2"] = "Headmaster";
        dataItem1["custom_fields"]="custom_fields";
    data.Add(dataItem1);
response["data"]="data";
response["total"] = "156";

@GET/customers/:custkey:/billing_schedules/:billing_schedule_key:/billing_schedule_rules/:billing_rule_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["custkey"] = "Example_custkey";
request["billing_schedule_key"] = "Example_billing_schedule_key";
request["billing_rule_key"] = "Example_billing_rule_key";

var response = USAePay.API.Customers.Billing_schedules.Billing_schedule_rules.Get(request);

@GET/customers/:custkey:/billing_schedules/:billing_schedule_key:/billing_schedule_rules/:billing_rule_key:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "billingschedulerule";

@GET/customers/:custkey:/billing_schedules/:billing_schedule_key:/billing_schedule_rules@

IDictionary<string, object> request = new Dictionary<string, object>();
request["custkey"] = "Example_custkey";
request["billing_schedule_key"] = "Example_billing_schedule_key";

var response = USAePay.API.Customers.Billing_schedules.Billing_schedule_rules.Get(request);

@GET/customers/:custkey:/billing_schedules/:billing_schedule_key:/billing_schedule_rules@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "list";
response["limit"] = "0";
response["offset"] = "20";
    IList<IDictionary<string, object>> data = new List<IDictionary<string, object>>();
        IDictionary<string, object> dataItem = new Dictionary<string, object>();
        dataItem["type"] = "billingschedulerule";
    data.Add(dataItem);
response["data"]="data";
response["total"] = "1";

@DELETE/customers/:custkey:/billing_schedules/:billing_schedule_key:/billing_schedule_rules/:billing_rule_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["custkey"] = "Example_custkey";
request["billing_schedule_key"] = "Example_billing_schedule_key";
request["billing_rule_key"] = "Example_billing_rule_key";

var response = USAePay.API.Customers.Billing_schedules.Billing_schedule_rules.Delete(request);

@DELETE/customers/:custkey:/billing_schedules/:billing_schedule_key:/billing_schedule_rules/:billing_rule_key:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["status"] = "success";

@PUT/customers/:custkey:/billing_schedules/:billing_schedule_key:/billing_schedule_rules/:billing_rule_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["custkey"] = "Example_custkey";
request["billing_schedule_key"] = "Example_billing_schedule_key";
request["billing_rule_key"] = "Example_billing_rule_key";
request["type"] = "billingschedulerule";

var response = USAePay.API.Customers.Billing_schedules.Billing_schedule_rules.Put(request);

@PUT/customers/:custkey:/billing_schedules/:billing_schedule_key:/billing_schedule_rules/:billing_rule_key:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "billingschedulerule";

@DELETE/customers/:custkey:/billing_schedules/:billing_schedule_key:/billing_schedule_rules/bulk@

IDictionary<string, object> request = new Dictionary<string, object>();
request["custkey"] = "Example_custkey";
request["billing_schedule_key"] = "Example_billing_schedule_key";
    IList<IDictionary<string, object>> requestList = new List<IDictionary<string, object>>();   requestList.Add("Example_delKey");
request["requestList"]="requestList";

var response = USAePay.API.Customers.Billing_schedules.Billing_schedule_rules.Bulk.Delete(request);

@DELETE/customers/:custkey:/billing_schedules/:billing_schedule_key:/billing_schedule_rules/bulk@

IDictionary<string, object> response = new Dictionary<string, object>();
response["status"] = "success";

@POST/inventory/location@

IDictionary<string, object> request = new Dictionary<string, object>();
request["name"] = "Los Angeles";
request["merch_locationid"] = "Los Angeles";
request["description"] = "West coast hub";

var response = USAePay.API.Inventory.Location.Post(request);

@POST/inventory/location@

IDictionary<string, object> response = new Dictionary<string, object>();
response["key"] = "mnyyj94tyvsc4qb33";
response["type"] = "inventorylocation";
response["merch_locationid"] = "Los Angeles";
response["name"] = "Los Angeles";
response["description"] = "West coast hub";

@GET/inventory/location/:location_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["location_key"] = "dnyyjc8s2vbz8hb33";

var response = USAePay.API.Inventory.Location.Get(request);

@GET/inventory/location/:location_key:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["key"] = "dnyyjc8s2vbz8hb33";
response["type"] = "inventorylocation";
response["merch_locationid"] = "London";
response["name"] = "London";
response["description"] = "";

@GET/inventory/location@

IDictionary<string, object> request = new Dictionary<string, object>();
request["limit"] = "100";
request["offset"] = "0";

var response = USAePay.API.Inventory.Location.Get(request);

@GET/inventory/location@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "list";
response["limit"] = "100";
response["offset"] = "0";
    IList<IDictionary<string, object>> data = new List<IDictionary<string, object>>();
        IDictionary<string, object> dataItem = new Dictionary<string, object>();
        dataItem["key"] = "dnyyjc8s2vbz8hb33";
        dataItem["merch_locationid"] = "London";
        dataItem["name"] = "London";
        dataItem["description"] = "";
    data.Add(dataItem);
        IDictionary<string, object> dataItem1 = new Dictionary<string, object>();
        dataItem1["key"] = "gnyyj6yv3jf05pdb3";
        dataItem1["merch_locationid"] = "New York";
        dataItem1["name"] = "New York";
        dataItem1["description"] = "";
    data.Add(dataItem1);
response["data"]="data";
response["total"] = "2";

@PUT/inventory/location/:location_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["location_key"] = "dnyyjc8s2vbz8hb33";
request["name"] = "City of Angels";
request["merch_locationid"] = "LosAngeles";
request["description"] = "LA";

var response = USAePay.API.Inventory.Location.Put(request);

@PUT/inventory/location/:location_key:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["key"] = "mnyyj94tyvsc4qb33";
response["type"] = "inventorylocation";
response["merch_locationid"] = "LosAngeles";
response["name"] = "City of Angels";
response["description"] = "LA";

@DELETE/inventory/location/:location_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["location_key"] = "mnyyj94tyvsc4qb33";

var response = USAePay.API.Inventory.Location.Delete(request);

@DELETE/inventory/location/:location_key:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["status"] = "success";

@POST/inventory@

IDictionary<string, object> request = new Dictionary<string, object>();
request["qtyonhand"] = "500";
request["qtyonorder"] = "50";
request["product_key"] = "as4b4s9sfbwzd1v8";
request["location_key"] = "pnyyj79fhzq8grx30";

var response = USAePay.API.Inventory.Post(request);

@POST/inventory@

IDictionary<string, object> response = new Dictionary<string, object>();
response["key"] = "2nmxtbkvdxy1fw16r";
response["type"] = "product_inventory";
response["qtyonhand"] = "500";
response["qtyonorder"] = "50";
response["date_available"] = "";
    IDictionary<string, object> product = new Dictionary<string, object>();
    product["type"] = "product";
    product["key"] = "as4b4s9sfbwzd1v8";
    product["product_refnum"] = "10";
    product["name"] = "A History of Magic by Bathilda Bagshot";
    product["price"] = "20.00";
    product["enabled"] = "Y";
    product["taxable"] = "Y";
    product["sku"] = "";
response["product"]="product";
    IDictionary<string, object> location = new Dictionary<string, object>();
    location["key"] = "pnyyj79fhzq8grx30";
    location["type"] = "inventorylocation";
    location["merch_locationid"] = "Los Angeles";
    location["name"] = "Los Angeles";
    location["description"] = "West coast hub";
response["location"]="location";

@GET/inventory/:inventory_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["inventory_key"] = "dnyyjc8s2vbz8hb33";

var response = USAePay.API.Inventory.Get(request);

@GET/inventory/:inventory_key:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["key"] = "2nmxtbkvdxy1fw16r";
response["type"] = "product_inventory";
response["qtyonhand"] = "500";
response["qtyonorder"] = "50";
response["date_available"] = "0000-00-00";
    IDictionary<string, object> product = new Dictionary<string, object>();
    product["type"] = "product";
    product["key"] = "as4b4s9sfbwzd1v8";
    product["product_refnum"] = "10";
    product["name"] = "A History of Magic by Bathilda Bagshot";
    product["price"] = "20.00";
    product["enabled"] = "Y";
    product["taxable"] = "Y";
    product["sku"] = "";
response["product"]="product";
    IDictionary<string, object> location = new Dictionary<string, object>();
    location["key"] = "pnyyj79fhzq8grx30";
    location["type"] = "inventorylocation";
    location["merch_locationid"] = "Los Angeles";
    location["name"] = "Los Angeles";
    location["description"] = "West coast hub";
response["location"]="location";

@GET/inventory@

IDictionary<string, object> request = new Dictionary<string, object>();
request["limit"] = "2";
request["offset"] = "0";

var response = USAePay.API.Inventory.Get(request);

@GET/inventory@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "list";
response["limit"] = "2";
response["offset"] = "0";
    IList<IDictionary<string, object>> data = new List<IDictionary<string, object>>();
        IDictionary<string, object> dataItem = new Dictionary<string, object>();
        dataItem["key"] = "anmxtbkr3kg6n0jc3";
        dataItem["type"] = "product_inventory";
        dataItem["qtyonhand"] = "100";
        dataItem["qtyonorder"] = "0";
            IDictionary<string, object> product = new Dictionary<string, object>();
            product["type"] = "product";
            product["key"] = "as4b4s9sfbwzd1v8";
            product["name"] = "A History of Magic by Bathilda Bagshot";
            product["price"] = "20.00";
            product["enabled"] = "Y";
            product["taxable"] = "Y";
            product["sku"] = "";
        dataItem["product"]="product";
            IDictionary<string, object> location = new Dictionary<string, object>();
            location["key"] = "dnyyjc8s2vbz8hb33";
            location["type"] = "inventorylocation";
            location["merch_locationid"] = "London";
            location["name"] = "London";
            location["description"] = "";
        dataItem["location"]="location";
    data.Add(dataItem);
        IDictionary<string, object> dataItem1 = new Dictionary<string, object>();
        dataItem1["key"] = "new";
        dataItem1["type"] = "product_inventory";
        dataItem1["qtyonhand"] = "0";
        dataItem1["qtyonorder"] = "0";
            IDictionary<string, object> product = new Dictionary<string, object>();
            product["type"] = "product";
            product["key"] = "as4b4s9sfbwzd1v8";
            product["name"] = "A History of Magic by Bathilda Bagshot";
            product["price"] = "20.00";
            product["enabled"] = "Y";
            product["taxable"] = "Y";
            product["sku"] = "";
        dataItem1["product"]="product";
            IDictionary<string, object> location = new Dictionary<string, object>();
            location["key"] = "gnyyj6yv3jf05pdb3";
            location["type"] = "inventorylocation";
            location["merch_locationid"] = "New York";
            location["name"] = "New York";
            location["description"] = "";
        dataItem1["location"]="location";
    data.Add(dataItem1);
response["data"]="data";
response["total"] = "10";

@PUT/inventory/:inventory_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["inventory_key"] = "5nmxt2gyrxhrgrgb3";
request["qtyonhand"] = "25";
request["qtyonorder"] = "25";
request["date_available"] = "2018-08-25";

var response = USAePay.API.Inventory.Put(request);

@PUT/inventory/:inventory_key:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["key"] = "5nmxt2gyrxhrgrgb3";
response["type"] = "product_inventory";
response["qtyonhand"] = "25";
response["qtyonorder"] = "25";
response["date_available"] = "2018-08-25";
    IDictionary<string, object> product = new Dictionary<string, object>();
    product["type"] = "product";
    product["key"] = "as4b4s9sfbwzd1v8";
    product["product_refnum"] = "10";
    product["name"] = "A History of Magic by Bathilda Bagshot";
    product["price"] = "20.00";
    product["enabled"] = "Y";
    product["taxable"] = "Y";
    product["sku"] = "";
response["product"]="product";
    IDictionary<string, object> location = new Dictionary<string, object>();
    location["key"] = "pnyyj79fhzq8grx30";
    location["type"] = "inventorylocation";
    location["merch_locationid"] = "Los Angeles";
    location["name"] = "Los Angeles";
    location["description"] = "West coast hub";
response["location"]="location";

@DELETE/inventory/:location_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["inventory_key"] = "2nmxtbkvdxy1fw16r";

var response = USAePay.API.Inventory.Delete(request);

@DELETE/inventory/:location_key:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["status"] = "success";

@GET/invoices/:invoice_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["invoice_key"] = "Example_invoice_key";

var response = USAePay.API.Invoices.Get(request);

@GET/invoices/:invoice_key:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "invoice";
response["status"] = "Q";
response["invoice_number"] = "abc1234";
response["invoice_date"] = "2019-10-02";
response["due_date"] = "2020-10-11";
response["nontaxable"] = "true";
response["customer_email"] = "example@test.com";
    IDictionary<string, object> customer_billing = new Dictionary<string, object>();
    customer_billing["company"] = "Hogwarts School of Witchcraft and Wizardry";
    customer_billing["street"] = "123 Astronomy Tower";
    customer_billing["postalcode"] = "10005";
response["customer_billing"]="customer_billing";
    IDictionary<string, object> customer_shipping = new Dictionary<string, object>();
    customer_shipping["company"] = "Hogwarts School of Witchcraft and Wizardry";
    customer_shipping["street"] = "123 Astronomy Tower";
    customer_shipping["postalcode"] = "10005";
response["customer_shipping"]="customer_shipping";
response["merchant_email"] = "Example@test.com";
response["merchant_address"] = "123 Main St";
response["merchant_phone"] = "111-222-3333";
    IList<IDictionary<string, object>> lineitems = new List<IDictionary<string, object>>();
        IDictionary<string, object> lineitemsItem = new Dictionary<string, object>();
        lineitemsItem["name"] = "Antique Pensieve";
        lineitemsItem["description"] = "See into your past...";
        lineitemsItem["size"] = "Large";
        lineitemsItem["color"] = "Bronze";
        lineitemsItem["cost"] = "450.00";
        lineitemsItem["list_price"] = "500.00";
        lineitemsItem["qty"] = "1";
        lineitemsItem["sku"] = "68453423";
        lineitemsItem["commoditycode"] = "535";
        lineitemsItem["discountamount"] = "0";
        lineitemsItem["discountrate"] = "0";
        lineitemsItem["taxable"] = "";
        lineitemsItem["taxamount"] = "45.00";
        lineitemsItem["taxclass"] = "NA";
        lineitemsItem["taxrate"] = "10";
        lineitemsItem["um"] = "EA";
        lineitemsItem["category"] = "Antiques";
        lineitemsItem["manufacturer"] = "The Ancients";
    lineitems.Add(lineitemsItem);
        IDictionary<string, object> lineitemsItem1 = new Dictionary<string, object>();
        lineitemsItem1["name"] = "Antique Pensieve";
        lineitemsItem1["description"] = "See into your past...";
        lineitemsItem1["size"] = "Large";
        lineitemsItem1["color"] = "Bronze";
        lineitemsItem1["cost"] = "450.00";
        lineitemsItem1["list_price"] = "500.00";
        lineitemsItem1["qty"] = "1";
        lineitemsItem1["sku"] = "68453423";
        lineitemsItem1["commoditycode"] = "535";
        lineitemsItem1["discountamount"] = "0";
        lineitemsItem1["discountrate"] = "0";
        lineitemsItem1["taxable"] = "";
        lineitemsItem1["taxamount"] = "45.00";
        lineitemsItem1["taxclass"] = "NA";
        lineitemsItem1["taxrate"] = "10";
        lineitemsItem1["um"] = "EA";
        lineitemsItem1["category"] = "Antiques";
        lineitemsItem1["manufacturer"] = "The Ancients";
    lineitems.Add(lineitemsItem1);
response["lineitems"]="lineitems";

@GET/invoices@

IDictionary<string, object> request = new Dictionary<string, object>();
request["limit"] = "78";
request["offset"] = "37";

var response = USAePay.API.Invoices.Get(request);

@GET/invoices@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "list";
response["limit"] = "0";
response["offset"] = "20";
    IList<IDictionary<string, object>> data = new List<IDictionary<string, object>>();
        IDictionary<string, object> dataItem = new Dictionary<string, object>();
        dataItem["type"] = "invoice";
        dataItem["status"] = "Q";
        dataItem["invoice_number"] = "abc1234";
        dataItem["invoice_date"] = "2019-10-02";
        dataItem["due_date"] = "2020-10-11";
        dataItem["nontaxable"] = "true";
        dataItem["customer_email"] = "example@test.com";
            IDictionary<string, object> customer_billing184 = new Dictionary<string, object>();
            customer_billing184["company"] = "Hogwarts School of Witchcraft and Wizardry";
            customer_billing184["street"] = "123 Astronomy Tower";
            customer_billing184["postalcode"] = "10005";
        dataItem["customer_billing184"]="customer_billing184";
            IDictionary<string, object> customer_shipping185 = new Dictionary<string, object>();
            customer_shipping185["company"] = "Hogwarts School of Witchcraft and Wizardry";
            customer_shipping185["street"] = "123 Astronomy Tower";
            customer_shipping185["postalcode"] = "10005";
        dataItem["customer_shipping185"]="customer_shipping185";
        dataItem["merchant_email"] = "Example@test.com";
        dataItem["merchant_address"] = "123 Main St";
        dataItem["merchant_phone"] = "111-222-3333";
            IList<IDictionary<string, object>> lineitems = new List<IDictionary<string, object>>();
                IDictionary<string, object> lineitemsItem = new Dictionary<string, object>();
                lineitemsItem["name"] = "Antique Pensieve";
                lineitemsItem["description"] = "See into your past...";
                lineitemsItem["size"] = "Large";
                lineitemsItem["color"] = "Bronze";
                lineitemsItem["cost"] = "450.00";
                lineitemsItem["list_price"] = "500.00";
                lineitemsItem["qty"] = "1";
                lineitemsItem["sku"] = "68453423";
                lineitemsItem["commoditycode"] = "535";
                lineitemsItem["discountamount"] = "0";
                lineitemsItem["discountrate"] = "0";
                lineitemsItem["taxable"] = "";
                lineitemsItem["taxamount"] = "45.00";
                lineitemsItem["taxclass"] = "NA";
                lineitemsItem["taxrate"] = "10";
                lineitemsItem["um"] = "EA";
                lineitemsItem["category"] = "Antiques";
                lineitemsItem["manufacturer"] = "The Ancients";
            lineitems.Add(lineitemsItem);
                IDictionary<string, object> lineitemsItem1 = new Dictionary<string, object>();
                lineitemsItem1["name"] = "Antique Pensieve";
                lineitemsItem1["description"] = "See into your past...";
                lineitemsItem1["size"] = "Large";
                lineitemsItem1["color"] = "Bronze";
                lineitemsItem1["cost"] = "450.00";
                lineitemsItem1["list_price"] = "500.00";
                lineitemsItem1["qty"] = "1";
                lineitemsItem1["sku"] = "68453423";
                lineitemsItem1["commoditycode"] = "535";
                lineitemsItem1["discountamount"] = "0";
                lineitemsItem1["discountrate"] = "0";
                lineitemsItem1["taxable"] = "";
                lineitemsItem1["taxamount"] = "45.00";
                lineitemsItem1["taxclass"] = "NA";
                lineitemsItem1["taxrate"] = "10";
                lineitemsItem1["um"] = "EA";
                lineitemsItem1["category"] = "Antiques";
                lineitemsItem1["manufacturer"] = "The Ancients";
            lineitems.Add(lineitemsItem1);
        dataItem["lineitems"]="lineitems";
    data.Add(dataItem);
response["data"]="data";
response["total"] = "42";

@POST/invoices@

IDictionary<string, object> request = new Dictionary<string, object>();
request["invoice_number"] = "abc1234";
request["due_date"] = "2020-10-11";
request["nontaxable"] = "true";
request["customer_email"] = "example@test.com";
    IDictionary<string, object> customer_billing = new Dictionary<string, object>();
    customer_billing["company"] = "Hogwarts School of Witchcraft and Wizardry";
    customer_billing["street"] = "123 Astronomy Tower";
    customer_billing["postalcode"] = "10005";
request["customer_billing"]="customer_billing";
    IDictionary<string, object> customer_shipping = new Dictionary<string, object>();
    customer_shipping["company"] = "Hogwarts School of Witchcraft and Wizardry";
    customer_shipping["street"] = "123 Astronomy Tower";
    customer_shipping["postalcode"] = "10005";
request["customer_shipping"]="customer_shipping";
request["merchant_email"] = "Example@test.com";
request["merchant_address"] = "123 Main St";
request["merchant_phone"] = "111-222-3333";
    IList<IDictionary<string, object>> lineitems = new List<IDictionary<string, object>>();
        IDictionary<string, object> lineitemsItem = new Dictionary<string, object>();
        lineitemsItem["name"] = "Antique Pensieve";
        lineitemsItem["description"] = "See into your past...";
        lineitemsItem["size"] = "Large";
        lineitemsItem["color"] = "Bronze";
        lineitemsItem["cost"] = "450.00";
        lineitemsItem["list_price"] = "500.00";
        lineitemsItem["qty"] = "1";
        lineitemsItem["sku"] = "68453423";
        lineitemsItem["commoditycode"] = "535";
        lineitemsItem["discountamount"] = "0";
        lineitemsItem["discountrate"] = "0";
        lineitemsItem["taxable"] = "";
        lineitemsItem["taxamount"] = "45.00";
        lineitemsItem["taxclass"] = "NA";
        lineitemsItem["taxrate"] = "10";
        lineitemsItem["um"] = "EA";
        lineitemsItem["category"] = "Antiques";
        lineitemsItem["manufacturer"] = "The Ancients";
    lineitems.Add(lineitemsItem);
        IDictionary<string, object> lineitemsItem1 = new Dictionary<string, object>();
        lineitemsItem1["name"] = "Antique Pensieve";
        lineitemsItem1["description"] = "See into your past...";
        lineitemsItem1["size"] = "Large";
        lineitemsItem1["color"] = "Bronze";
        lineitemsItem1["cost"] = "450.00";
        lineitemsItem1["list_price"] = "500.00";
        lineitemsItem1["qty"] = "1";
        lineitemsItem1["sku"] = "68453423";
        lineitemsItem1["commoditycode"] = "535";
        lineitemsItem1["discountamount"] = "0";
        lineitemsItem1["discountrate"] = "0";
        lineitemsItem1["taxable"] = "";
        lineitemsItem1["taxamount"] = "45.00";
        lineitemsItem1["taxclass"] = "NA";
        lineitemsItem1["taxrate"] = "10";
        lineitemsItem1["um"] = "EA";
        lineitemsItem1["category"] = "Antiques";
        lineitemsItem1["manufacturer"] = "The Ancients";
    lineitems.Add(lineitemsItem1);
request["lineitems"]="lineitems";

var response = USAePay.API.Invoices.Post(request);

@POST/invoices@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "invoice";
response["status"] = "Q";
response["invoice_number"] = "abc1234";
response["invoice_date"] = "2019-10-02";
response["due_date"] = "2020-10-11";
response["nontaxable"] = "true";
response["customer_email"] = "example@test.com";
    IDictionary<string, object> customer_billing = new Dictionary<string, object>();
    customer_billing["company"] = "Hogwarts School of Witchcraft and Wizardry";
    customer_billing["street"] = "123 Astronomy Tower";
    customer_billing["postalcode"] = "10005";
response["customer_billing"]="customer_billing";
    IDictionary<string, object> customer_shipping = new Dictionary<string, object>();
    customer_shipping["company"] = "Hogwarts School of Witchcraft and Wizardry";
    customer_shipping["street"] = "123 Astronomy Tower";
    customer_shipping["postalcode"] = "10005";
response["customer_shipping"]="customer_shipping";
response["merchant_email"] = "Example@test.com";
response["merchant_address"] = "123 Main St";
response["merchant_phone"] = "111-222-3333";
    IList<IDictionary<string, object>> lineitems = new List<IDictionary<string, object>>();
        IDictionary<string, object> lineitemsItem = new Dictionary<string, object>();
        lineitemsItem["name"] = "Antique Pensieve";
        lineitemsItem["description"] = "See into your past...";
        lineitemsItem["size"] = "Large";
        lineitemsItem["color"] = "Bronze";
        lineitemsItem["cost"] = "450.00";
        lineitemsItem["list_price"] = "500.00";
        lineitemsItem["qty"] = "1";
        lineitemsItem["sku"] = "68453423";
        lineitemsItem["commoditycode"] = "535";
        lineitemsItem["discountamount"] = "0";
        lineitemsItem["discountrate"] = "0";
        lineitemsItem["taxable"] = "";
        lineitemsItem["taxamount"] = "45.00";
        lineitemsItem["taxclass"] = "NA";
        lineitemsItem["taxrate"] = "10";
        lineitemsItem["um"] = "EA";
        lineitemsItem["category"] = "Antiques";
        lineitemsItem["manufacturer"] = "The Ancients";
    lineitems.Add(lineitemsItem);
        IDictionary<string, object> lineitemsItem1 = new Dictionary<string, object>();
        lineitemsItem1["name"] = "Antique Pensieve";
        lineitemsItem1["description"] = "See into your past...";
        lineitemsItem1["size"] = "Large";
        lineitemsItem1["color"] = "Bronze";
        lineitemsItem1["cost"] = "450.00";
        lineitemsItem1["list_price"] = "500.00";
        lineitemsItem1["qty"] = "1";
        lineitemsItem1["sku"] = "68453423";
        lineitemsItem1["commoditycode"] = "535";
        lineitemsItem1["discountamount"] = "0";
        lineitemsItem1["discountrate"] = "0";
        lineitemsItem1["taxable"] = "";
        lineitemsItem1["taxamount"] = "45.00";
        lineitemsItem1["taxclass"] = "NA";
        lineitemsItem1["taxrate"] = "10";
        lineitemsItem1["um"] = "EA";
        lineitemsItem1["category"] = "Antiques";
        lineitemsItem1["manufacturer"] = "The Ancients";
    lineitems.Add(lineitemsItem1);
response["lineitems"]="lineitems";

@DELETE/invoices/:invoice_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["invoice_key"] = "Example_invoice_key";

var response = USAePay.API.Invoices.Delete(request);

@DELETE/invoices/:invoice_key:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["status"] = "success";

@PUT/invoices/:invoice_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["invoice_key"] = "Example_invoice_key";
request["invoice_number"] = "abc1234";
request["due_date"] = "2020-10-11";
request["nontaxable"] = "true";
request["customer_email"] = "example@test.com";
    IDictionary<string, object> customer_billing = new Dictionary<string, object>();
    customer_billing["company"] = "Hogwarts School of Witchcraft and Wizardry";
    customer_billing["street"] = "123 Astronomy Tower";
    customer_billing["postalcode"] = "10005";
request["customer_billing"]="customer_billing";
    IDictionary<string, object> customer_shipping = new Dictionary<string, object>();
    customer_shipping["company"] = "Hogwarts School of Witchcraft and Wizardry";
    customer_shipping["street"] = "123 Astronomy Tower";
    customer_shipping["postalcode"] = "10005";
request["customer_shipping"]="customer_shipping";
request["merchant_email"] = "Example@test.com";
request["merchant_address"] = "123 Main St";
request["merchant_phone"] = "111-222-3333";
    IList<IDictionary<string, object>> lineitems = new List<IDictionary<string, object>>();
        IDictionary<string, object> lineitemsItem = new Dictionary<string, object>();
        lineitemsItem["name"] = "Antique Pensieve";
        lineitemsItem["description"] = "See into your past...";
        lineitemsItem["size"] = "Large";
        lineitemsItem["color"] = "Bronze";
        lineitemsItem["cost"] = "450.00";
        lineitemsItem["list_price"] = "500.00";
        lineitemsItem["qty"] = "1";
        lineitemsItem["sku"] = "68453423";
        lineitemsItem["commoditycode"] = "535";
        lineitemsItem["discountamount"] = "0";
        lineitemsItem["discountrate"] = "0";
        lineitemsItem["taxable"] = "";
        lineitemsItem["taxamount"] = "45.00";
        lineitemsItem["taxclass"] = "NA";
        lineitemsItem["taxrate"] = "10";
        lineitemsItem["um"] = "EA";
        lineitemsItem["category"] = "Antiques";
        lineitemsItem["manufacturer"] = "The Ancients";
    lineitems.Add(lineitemsItem);
        IDictionary<string, object> lineitemsItem1 = new Dictionary<string, object>();
        lineitemsItem1["name"] = "Antique Pensieve";
        lineitemsItem1["description"] = "See into your past...";
        lineitemsItem1["size"] = "Large";
        lineitemsItem1["color"] = "Bronze";
        lineitemsItem1["cost"] = "450.00";
        lineitemsItem1["list_price"] = "500.00";
        lineitemsItem1["qty"] = "1";
        lineitemsItem1["sku"] = "68453423";
        lineitemsItem1["commoditycode"] = "535";
        lineitemsItem1["discountamount"] = "0";
        lineitemsItem1["discountrate"] = "0";
        lineitemsItem1["taxable"] = "";
        lineitemsItem1["taxamount"] = "45.00";
        lineitemsItem1["taxclass"] = "NA";
        lineitemsItem1["taxrate"] = "10";
        lineitemsItem1["um"] = "EA";
        lineitemsItem1["category"] = "Antiques";
        lineitemsItem1["manufacturer"] = "The Ancients";
    lineitems.Add(lineitemsItem1);
request["lineitems"]="lineitems";

var response = USAePay.API.Invoices.Put(request);

@PUT/invoices/:invoice_key:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "invoice";
response["status"] = "Q";
response["invoice_number"] = "abc1234";
response["invoice_date"] = "2019-10-02";
response["due_date"] = "2020-10-11";
response["nontaxable"] = "true";
response["customer_email"] = "example@test.com";
    IDictionary<string, object> customer_billing = new Dictionary<string, object>();
    customer_billing["company"] = "Hogwarts School of Witchcraft and Wizardry";
    customer_billing["street"] = "123 Astronomy Tower";
    customer_billing["postalcode"] = "10005";
response["customer_billing"]="customer_billing";
    IDictionary<string, object> customer_shipping = new Dictionary<string, object>();
    customer_shipping["company"] = "Hogwarts School of Witchcraft and Wizardry";
    customer_shipping["street"] = "123 Astronomy Tower";
    customer_shipping["postalcode"] = "10005";
response["customer_shipping"]="customer_shipping";
response["merchant_email"] = "Example@test.com";
response["merchant_address"] = "123 Main St";
response["merchant_phone"] = "111-222-3333";
    IList<IDictionary<string, object>> lineitems209 = new List<IDictionary<string, object>>();
        IDictionary<string, object> lineitems209Item = new Dictionary<string, object>();
        lineitems209Item["name"] = "Antique Pensieve";
        lineitems209Item["description"] = "See into your past...";
        lineitems209Item["size"] = "Large";
        lineitems209Item["color"] = "Bronze";
        lineitems209Item["cost"] = "450.00";
        lineitems209Item["list_price"] = "500.00";
        lineitems209Item["qty"] = "1";
        lineitems209Item["sku"] = "68453423";
        lineitems209Item["commoditycode"] = "535";
        lineitems209Item["discountamount"] = "0";
        lineitems209Item["discountrate"] = "0";
        lineitems209Item["taxable"] = "";
        lineitems209Item["taxamount"] = "45.00";
        lineitems209Item["taxclass"] = "NA";
        lineitems209Item["taxrate"] = "10";
        lineitems209Item["um"] = "EA";
        lineitems209Item["category"] = "Antiques";
        lineitems209Item["manufacturer"] = "The Ancients";
    lineitems209.Add(lineitems209Item);
        IDictionary<string, object> lineitems209Item1 = new Dictionary<string, object>();
        lineitems209Item1["name"] = "Antique Pensieve";
        lineitems209Item1["description"] = "See into your past...";
        lineitems209Item1["size"] = "Large";
        lineitems209Item1["color"] = "Bronze";
        lineitems209Item1["cost"] = "450.00";
        lineitems209Item1["list_price"] = "500.00";
        lineitems209Item1["qty"] = "1";
        lineitems209Item1["sku"] = "68453423";
        lineitems209Item1["commoditycode"] = "535";
        lineitems209Item1["discountamount"] = "0";
        lineitems209Item1["discountrate"] = "0";
        lineitems209Item1["taxable"] = "";
        lineitems209Item1["taxamount"] = "45.00";
        lineitems209Item1["taxclass"] = "NA";
        lineitems209Item1["taxrate"] = "10";
        lineitems209Item1["um"] = "EA";
        lineitems209Item1["category"] = "Antiques";
        lineitems209Item1["manufacturer"] = "The Ancients";
    lineitems209.Add(lineitems209Item1);
response["lineitems209"]="lineitems209";

@DELETE/invoices/bulk@

IDictionary<string, object> request = new Dictionary<string, object>();
    IList<IDictionary<string, object>> requestList = new List<IDictionary<string, object>>();   requestList.Add("example_key");
request["requestList"]="requestList";

var response = USAePay.API.Invoices.Bulk.Delete(request);

@DELETE/invoices/bulk@

IDictionary<string, object> response = new Dictionary<string, object>();
response["status"] = "success";

@GET/invoices/defaults@

IDictionary<string, object> request = new Dictionary<string, object>();

var response = USAePay.API.Invoices.Defaults.Get(request);

@GET/invoices/defaults@

IDictionary<string, object> response = new Dictionary<string, object>();
response["merchant_email"] = "Example@test.com";
response["merchant_address"] = "123 Main St";
response["merchant_phone"] = "111-222-3333";

@GET/invoices/nextnum@

IDictionary<string, object> request = new Dictionary<string, object>();

var response = USAePay.API.Invoices.Nextnum.Get(request);

@GET/invoices/nextnum@

IDictionary<string, object> response = new Dictionary<string, object>();

@GET/invoices/columns@

IDictionary<string, object> request = new Dictionary<string, object>();

var response = USAePay.API.Invoices.Columns.Get(request);

@GET/invoices/columns@

IDictionary<string, object> response = new Dictionary<string, object>();

@POST/invoices/:invoice_key:/send@

IDictionary<string, object> request = new Dictionary<string, object>();
request["invoice_key"] = "Example_invoice_key";

var response = USAePay.API.Invoices.Send.Post(request);

@POST/invoices/:invoice_key:/send@

IDictionary<string, object> response = new Dictionary<string, object>();
response["status"] = "success";

@POST/invoices/:invoice_key:/cancel@

IDictionary<string, object> request = new Dictionary<string, object>();
request["invoice_key"] = "Example_invoice_key";

var response = USAePay.API.Invoices.Cancel.Post(request);

@POST/invoices/:invoice_key:/cancel@

IDictionary<string, object> response = new Dictionary<string, object>();
response["status"] = "success";

@GET/invoices/:invoice_key:/payments@

IDictionary<string, object> request = new Dictionary<string, object>();
request["invoice_key"] = "Example_invoice_key";
request["limit"] = "86";
request["offset"] = "12";

var response = USAePay.API.Invoices.Payments.Get(request);

@GET/invoices/:invoice_key:/payments@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "list";
response["limit"] = "0";
response["offset"] = "20";
    IList<IDictionary<string, object>> data219 = new List<IDictionary<string, object>>();
        IDictionary<string, object> data219Item = new Dictionary<string, object>();
    data219.Add(data219Item);
response["data219"]="data219";
response["total"] = "42";

@POST/invoices/bulk/send@

IDictionary<string, object> request = new Dictionary<string, object>();
    IList<IDictionary<string, object>> requestList = new List<IDictionary<string, object>>();   requestList.Add("Example_key");
request["requestList"]="requestList";

var response = USAePay.API.Invoices.Bulk.Send.Post(request);

@POST/invoices/bulk/send@

IDictionary<string, object> response = new Dictionary<string, object>();
response["status"] = "success";

@GET/paymentengine/devices/:devicekey:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["devicekey"] = "sa_WKwzyQawBG0RMy0XpDGFXb6pXA23r";

var response = USAePay.API.Paymentengine.Devices.Get(request);

@GET/paymentengine/devices/:devicekey:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "device";
response["key"] = "sa_WKwzyQawBG0RMy0XpDGFXb6pXA23r";
response["apikeyid"] = "ntC8nP31Moh0wtvYT";
response["terminal_type"] = "standalone";
response["status"] = "connected";
response["name"] = "Register 1";
    IDictionary<string, object> settings = new Dictionary<string, object>();
    settings["timeout"] = "30";
    settings["share_device"] = "";
    settings["enable_standalone"] = "";
    settings["sleep_battery_device"] = "5";
    settings["sleep_battery_display"] = "1";
    settings["sleep_powered_device"] = "0";
    settings["sleep_powered_display"] = "0";
response["settings"]="settings";
    IDictionary<string, object> terminal_info = new Dictionary<string, object>();
    terminal_info["make"] = "Castles";
    terminal_info["model"] = "VEGA3000";
    terminal_info["revision"] = "18043001-0055.00";
    terminal_info["serial"] = "011118170300198";
    terminal_info["key_pin"] = "FFFF5B04";
    terminal_info["key_pan"] = "FF908A";
response["terminal_info"]="terminal_info";
    IDictionary<string, object> terminal_config = new Dictionary<string, object>();
    terminal_config["enable_emv"] = "1";
    terminal_config["enable_debit_msr"] = "1";
    terminal_config["enable_tip_adjust"] = "1";
    terminal_config["enable_contactless"] = "1";
response["terminal_config"]="terminal_config";

@GET/paymentengine/devices@

IDictionary<string, object> request = new Dictionary<string, object>();
request["limit"] = "20";
request["offset"] = "0";

var response = USAePay.API.Paymentengine.Devices.Get(request);

@GET/paymentengine/devices@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "list";
response["limit"] = "20";
response["offset"] = "0";
    IList<IDictionary<string, object>> data = new List<IDictionary<string, object>>();
        IDictionary<string, object> dataItem = new Dictionary<string, object>();
        dataItem["type"] = "device";
        dataItem["key"] = "sa_WKwzyQawBG0RMy0XpDGFXb6pXA23r";
        dataItem["apikeyid"] = "ntC8nP31Moh0wtvYT";
        dataItem["terminal_type"] = "standalone";
        dataItem["status"] = "connected";
        dataItem["name"] = "Example";
            IDictionary<string, object> settings = new Dictionary<string, object>();
            settings["timeout"] = "30";
            settings["enable_standalone"] = "";
            settings["share_device"] = "";
        dataItem["settings"]="settings";
            IDictionary<string, object> terminal_info = new Dictionary<string, object>();
            terminal_info["make"] = "Castles";
            terminal_info["model"] = "MP200";
            terminal_info["revision"] = null;
            terminal_info["serial"] = "000313162200473";
        dataItem["terminal_info"]="terminal_info";
            IDictionary<string, object> terminal_config = new Dictionary<string, object>();
            terminal_config["enable_emv"] = "";
            terminal_config["enable_debit_msr"] = "";
            terminal_config["enable_tip_adjust"] = "";
            terminal_config["enable_contactless"] = "1";
        dataItem["terminal_config"]="terminal_config";
    data.Add(dataItem);
response["data"]="data";
response["total"] = "1";

@POST/paymentengine/devices@

IDictionary<string, object> request = new Dictionary<string, object>();
request["name"] = "Register 1";
request["terminal_type"] = "standalone";
    IDictionary<string, object> settings = new Dictionary<string, object>();
    settings["timeout"] = "30";
    settings["share_device"] = "";
    settings["enable_standalone"] = "";
    settings["sleep_battery_device"] = "5";
    settings["sleep_battery_display"] = "1";
    settings["sleep_powered_device"] = "0";
    settings["sleep_powered_display"] = "0";
request["settings"]="settings";
    IDictionary<string, object> terminal_config = new Dictionary<string, object>();
    terminal_config["enable_emv"] = "1";
    terminal_config["enable_debit_msr"] = "1";
    terminal_config["enable_tip_adjust"] = "1";
    terminal_config["enable_contactless"] = "1";
request["terminal_config"]="terminal_config";

var response = USAePay.API.Paymentengine.Devices.Post(request);

@POST/paymentengine/devices@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "device";
response["key"] = "sa_WKwzyQawBG0RMy0XpDGFXb6pXA23r";
response["apikeyid"] = "tvYTIxIhm83SlTO4zU";
response["terminal_type"] = "standalone";
response["status"] = "waiting for device pairing";
response["name"] = "Register 1";
    IDictionary<string, object> settings = new Dictionary<string, object>();
    settings["timeout"] = "30";
    settings["share_device"] = "";
    settings["enable_standalone"] = "";
    settings["sleep_battery_device"] = "5";
    settings["sleep_battery_display"] = "1";
    settings["sleep_powered_device"] = "0";
    settings["sleep_powered_display"] = "0";
response["settings"]="settings";
response["pairing_code"] = "628215";
response["expiration"] = "2016-10-29 13:20:47";
    IDictionary<string, object> terminal_config = new Dictionary<string, object>();
    terminal_config["enable_emv"] = "";
    terminal_config["enable_debit_msr"] = "";
    terminal_config["enable_tip_adjust"] = "";
    terminal_config["enable_contactless"] = "1";
response["terminal_config"]="terminal_config";

@DELETE/paymentengine/devices/:devicekey:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["devicekey"] = "Example_devicekey";

var response = USAePay.API.Paymentengine.Devices.Delete(request);

@DELETE/paymentengine/devices/:devicekey:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["status"] = "success";

@PUT/paymentengine/devices/:devicekey:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["devicekey"] = "sa_WKwzyQawBG0RMy0XpDGFXb6pXA23r";
request["name"] = "Testing";
    IDictionary<string, object> settings = new Dictionary<string, object>();
    settings["share_device"] = "1";
request["settings"]="settings";

var response = USAePay.API.Paymentengine.Devices.Put(request);

@PUT/paymentengine/devices/:devicekey:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "device";
response["key"] = "sa_WKwzyQawBG0RMy0XpDGFXb6pXA23r";
response["apikeyid"] = "ntC8nP31Moh0wtvYT";
response["terminal_type"] = "standalone";
response["status"] = "connected";
response["name"] = "Register 1";
    IDictionary<string, object> settings = new Dictionary<string, object>();
    settings["timeout"] = "30";
    settings["share_device"] = "1";
    settings["enable_standalone"] = "";
    settings["sleep_battery_device"] = "5";
    settings["sleep_battery_display"] = "1";
    settings["sleep_powered_device"] = "0";
    settings["sleep_powered_display"] = "0";
response["settings"]="settings";
    IDictionary<string, object> terminal_info = new Dictionary<string, object>();
    terminal_info["make"] = "Castles";
    terminal_info["model"] = "VEGA3000";
    terminal_info["revision"] = "18043001-0055.00";
    terminal_info["serial"] = "011118170300198";
    terminal_info["key_pin"] = "FFFF5B04";
    terminal_info["key_pan"] = "FF908A";
response["terminal_info"]="terminal_info";
    IDictionary<string, object> capabilities = new Dictionary<string, object>();
    capabilities["emv"] = "1";
    capabilities["swipe"] = "1";
    capabilities["contactless"] = "1";
    capabilities["signature_capture"] = "1";
    capabilities["printer"] = "1";
    capabilities["pin"] = "1";
    capabilities["sleep_battery"] = "1";
    capabilities["sleep_power"] = "1";
response["capabilities"]="capabilities";
    IDictionary<string, object> terminal_config = new Dictionary<string, object>();
    terminal_config["enable_emv"] = "1";
    terminal_config["enable_debit_msr"] = "1";
    terminal_config["enable_tip_adjust"] = "1";
    terminal_config["enable_contactless"] = "1";
response["terminal_config"]="terminal_config";

@POST/paymentengine/payrequests@

IDictionary<string, object> request = new Dictionary<string, object>();
request["devicekey"] = "sa_1BTTI5Yys0G3gVQa6beYxM4K0hhjC";
request["command"] = "cc:sale";
request["amount"] = "8.88";

var response = USAePay.API.Paymentengine.Payrequests.Post(request);

@POST/paymentengine/payrequests@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "request";
response["key"] = "pr_3mW7rstrdA0Sp32LW9MN3djCITAhx";
response["expiration"] = "2016-07-08 16:40:48";
response["status"] = "sent to device";

@GET/paymentengine/payrequests/:requestkey:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["requestkey"] = "pr_3mW7rstrdA0Sp32LW9MN3djCITAhx";

var response = USAePay.API.Paymentengine.Payrequests.Get(request);

@GET/paymentengine/payrequests/:requestkey:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "request";
response["key"] = "pr_3mW7rstrdA0Sp32LW9MN3djCITAhx";
response["expiration"] = "2016-07-08 16:40:48";
response["status"] = "sent to device";

@DELETE/paymentengine/payrequests/:requestkey:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["requestkey"] = "Example_requestkey";

var response = USAePay.API.Paymentengine.Payrequests.Delete(request);

@DELETE/paymentengine/payrequests/:requestkey:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["status"] = "success";

@GET/paymentengine/devices/:devicekey:/settings@

IDictionary<string, object> request = new Dictionary<string, object>();
request["devicekey"] = "sa_WKwzyQawBG0RMy0XpDGFXb6pXA23r";

var response = USAePay.API.Paymentengine.Devices.Settings.Get(request);

@GET/paymentengine/devices/:devicekey:/settings@

IDictionary<string, object> response = new Dictionary<string, object>();
response["timeout"] = "30";
response["enable_standalone"] = "false";
response["share_device"] = "false";
response["notify_update"] = "true";
response["notify_update_next"] = "true";
response["sleep_battery_device"] = "5";
response["sleep_battery_display"] = "3";
response["sleep_powered_device"] = "10";
response["sleep_powered_display"] = "8";

@PUT/paymentengine/devices/:devicekey:/settings@

IDictionary<string, object> request = new Dictionary<string, object>();
request["devicekey"] = "sa_WKwzyQawBG0RMy0XpDGFXb6pXA23r";
request["share_device"] = "1";

var response = USAePay.API.Paymentengine.Devices.Settings.Put(request);

@PUT/paymentengine/devices/:devicekey:/settings@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "device";
response["key"] = "sa_WKwzyQawBG0RMy0XpDGFXb6pXA23r";
response["apikeyid"] = "ntC8nP31Moh0wtvYT";
response["terminal_type"] = "standalone";
response["status"] = "connected";
response["name"] = "Register 1";
    IDictionary<string, object> settings = new Dictionary<string, object>();
    settings["timeout"] = "30";
    settings["share_device"] = "1";
    settings["enable_standalone"] = "";
    settings["sleep_battery_device"] = "5";
    settings["sleep_battery_display"] = "1";
    settings["sleep_powered_device"] = "0";
    settings["sleep_powered_display"] = "0";
response["settings"]="settings";
    IDictionary<string, object> terminal_info = new Dictionary<string, object>();
    terminal_info["make"] = "Castles";
    terminal_info["model"] = "VEGA3000";
    terminal_info["revision"] = "18043001-0055.00";
    terminal_info["serial"] = "011118170300198";
    terminal_info["key_pin"] = "FFFF5B04";
    terminal_info["key_pan"] = "FF908A";
response["terminal_info"]="terminal_info";
    IDictionary<string, object> capabilities = new Dictionary<string, object>();
    capabilities["emv"] = "1";
    capabilities["swipe"] = "1";
    capabilities["contactless"] = "1";
    capabilities["signature_capture"] = "1";
    capabilities["printer"] = "1";
    capabilities["pin"] = "1";
    capabilities["sleep_battery"] = "1";
    capabilities["sleep_power"] = "1";
response["capabilities"]="capabilities";
    IDictionary<string, object> terminal_config = new Dictionary<string, object>();
    terminal_config["enable_emv"] = "1";
    terminal_config["enable_debit_msr"] = "1";
    terminal_config["enable_tip_adjust"] = "1";
    terminal_config["enable_contactless"] = "1";
response["terminal_config"]="terminal_config";

@GET/paymentengine/devices/:devicekey:/terminal-config@

IDictionary<string, object> request = new Dictionary<string, object>();
request["devicekey"] = "sa_WKwzyQawBG0RMy0XpDGFXb6pXA23r";

var response = USAePay.API.Paymentengine.Devices.Terminal-config.Get(request);

@GET/paymentengine/devices/:devicekey:/terminal-config@

IDictionary<string, object> response = new Dictionary<string, object>();
response["enable_emv"] = "true";
response["enable_debit_msr"] = "true";
response["enable_tip_adjust"] = "true";
response["enable_contactless"] = "true";

@PUT/paymentengine/devices/:devicekey:/terminal-config@

IDictionary<string, object> request = new Dictionary<string, object>();
request["devicekey"] = "sa_WKwzyQawBG0RMy0XpDGFXb6pXA23r";
request["enable_emv"] = "";

var response = USAePay.API.Paymentengine.Devices.Terminal-config.Put(request);

@PUT/paymentengine/devices/:devicekey:/terminal-config@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "device";
response["key"] = "sa_WKwzyQawBG0RMy0XpDGFXb6pXA23r";
response["apikeyid"] = "ntC8nP31Moh0wtvYT";
response["terminal_type"] = "standalone";
response["status"] = "connected";
response["name"] = "Register 1";
    IDictionary<string, object> settings = new Dictionary<string, object>();
    settings["timeout"] = "30";
    settings["share_device"] = "1";
    settings["enable_standalone"] = "";
    settings["sleep_battery_device"] = "5";
    settings["sleep_battery_display"] = "1";
    settings["sleep_powered_device"] = "0";
    settings["sleep_powered_display"] = "0";
response["settings"]="settings";
    IDictionary<string, object> terminal_info = new Dictionary<string, object>();
    terminal_info["make"] = "Castles";
    terminal_info["model"] = "VEGA3000";
    terminal_info["revision"] = "18043001-0055.00";
    terminal_info["serial"] = "011118170300198";
    terminal_info["key_pin"] = "FFFF5B04";
    terminal_info["key_pan"] = "FF908A";
response["terminal_info"]="terminal_info";
    IDictionary<string, object> capabilities = new Dictionary<string, object>();
    capabilities["emv"] = "1";
    capabilities["swipe"] = "1";
    capabilities["contactless"] = "1";
    capabilities["signature_capture"] = "1";
    capabilities["printer"] = "1";
    capabilities["pin"] = "1";
    capabilities["sleep_battery"] = "1";
    capabilities["sleep_power"] = "1";
response["capabilities"]="capabilities";
    IDictionary<string, object> terminal_config = new Dictionary<string, object>();
    terminal_config["enable_emv"] = "1";
    terminal_config["enable_debit_msr"] = "1";
    terminal_config["enable_tip_adjust"] = "1";
    terminal_config["enable_contactless"] = "1";
response["terminal_config"]="terminal_config";

@POST/paymentengine/devices/:devicekey:/kick@

IDictionary<string, object> request = new Dictionary<string, object>();
request["devicekey"] = "sa_WKwzyQawBG0RMy0XpDGFXb6pXA32r";

var response = USAePay.API.Paymentengine.Devices.Kick.Post(request);

@POST/paymentengine/devices/:devicekey:/kick@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "device";
response["key"] = "sa_WKwzyQawBG0RMy0XpDGFXb6pXA32r";
response["apikeyid"] = "ntC8nP31Moh0wtvYT";
response["terminal_type"] = "standalone";
response["status"] = "ntC8nP31Moh0wtvYT";
response["name"] = "ntC8nP31Moh0wtvYT";
    IDictionary<string, object> settings275 = new Dictionary<string, object>();
    settings275["timeout"] = "30";
    settings275["enable_standalone"] = "false";
    settings275["share_device"] = "false";
    settings275["notify_update"] = "true";
    settings275["notify_update_next"] = "true";
    settings275["sleep_battery_device"] = "5";
    settings275["sleep_battery_display"] = "3";
    settings275["sleep_powered_device"] = "10";
    settings275["sleep_powered_display"] = "8";
response["settings275"]="settings275";
    IDictionary<string, object> terminal_info276 = new Dictionary<string, object>();
    terminal_info276["make"] = "Castle";
    terminal_info276["model"] = "Vega3000";
    terminal_info276["revision"] = "18043001-0055.00";
    terminal_info276["serial"] = "011118170300198";
    terminal_info276["key_pin"] = "FFFF5B04";
    terminal_info276["key_pan"] = "FF908A";
response["terminal_info276"]="terminal_info276";
    IDictionary<string, object> terminal_config277 = new Dictionary<string, object>();
    terminal_config277["enable_emv"] = "true";
    terminal_config277["enable_debit_msr"] = "true";
    terminal_config277["enable_tip_adjust"] = "true";
    terminal_config277["enable_contactless"] = "true";
response["terminal_config277"]="terminal_config277";
response["pairing_code"] = "690520";
response["expiration"] = "2019-10-29 11:59:28";

@GET/products/:product_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["product_key"] = "Example_product_key";

var response = USAePay.API.Products.Get(request);

@GET/products/:product_key:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "product";
response["key"] = "4s4b4qrn3k4pmsg8";
response["product_refnum"] = "4";
response["name"] = "The Standard Book of Spells (Grade 1)";
response["price"] = "10.00";
response["enabled"] = "Y";
response["taxable"] = "N";
response["available_all"] = "";
response["available_all_date"] = "0000-00-00";
response["categoryid"] = "37";
response["commodity_code"] = "715-86";
response["date_available"] = "2018-11-30";
response["description"] = "by Miranda Goshawk An indispensable guide to your basic magical needs.";
response["image_url"] = "";
response["list_price"] = "10.00";
response["manufacturer"] = "Flourish and Blotts";
response["merch_productid"] = "";
response["min_quantity"] = "20";
response["model"] = "1.0";
response["physicalgood"] = "Y";
response["ship_weight"] = "2.1500";
response["sku"] = "";
response["taxclass"] = "";
response["um"] = "EAC";
response["upc"] = "119104110946";
response["url"] = "";
response["weight"] = "2.0000";
response["wholesale_price"] = "7.00";
response["allow_override"] = "";
    IList<IDictionary<string, object>> inventory = new List<IDictionary<string, object>>();
        IDictionary<string, object> inventoryItem = new Dictionary<string, object>();
        inventoryItem["locationid"] = "13";
        inventoryItem["merch_locationid"] = "London";
        inventoryItem["name"] = "London";
        inventoryItem["description"] = "";
        inventoryItem["inventoryid"] = "4";
        inventoryItem["productid"] = "4";
        inventoryItem["qtyonhand"] = "150";
        inventoryItem["qtyonorder"] = "0";
        inventoryItem["date_available"] = "2019-01-06";
        inventoryItem["key"] = "4";
        inventoryItem["location_key"] = "dnyyjc8s2vbz8hb33";
    inventory.Add(inventoryItem);
        IDictionary<string, object> inventoryItem1 = new Dictionary<string, object>();
        inventoryItem1["locationid"] = "16";
        inventoryItem1["merch_locationid"] = "New York";
        inventoryItem1["name"] = "New York";
        inventoryItem1["description"] = "";
        inventoryItem1["inventoryid"] = "19";
        inventoryItem1["productid"] = "4";
        inventoryItem1["qtyonhand"] = "25";
        inventoryItem1["qtyonorder"] = "55";
        inventoryItem1["date_available"] = "2019-01-06";
        inventoryItem1["key"] = "19";
        inventoryItem1["location_key"] = "gnyyj6yv3jf05pdb3";
    inventory.Add(inventoryItem1);
response["inventory"]="inventory";
    IList<IDictionary<string, object>> modifiers = new List<IDictionary<string, object>>();
response["modifiers"]="modifiers";
response["created"] = "2018-11-30";
response["modified"] = "2019-01-06";

@GET/products@

IDictionary<string, object> request = new Dictionary<string, object>();
request["limit"] = "20";
request["offset"] = "0";

var response = USAePay.API.Products.Get(request);

@GET/products@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "list";
response["limit"] = "20";
response["offset"] = "0";
    IList<IDictionary<string, object>> data = new List<IDictionary<string, object>>();
        IDictionary<string, object> dataItem = new Dictionary<string, object>();
        dataItem["type"] = "product";
        dataItem["key"] = "ms4bb95qgg0y8dn8";
        dataItem["product_refnum"] = "22";
        dataItem["name"] = "Advanced Potion-Making";
        dataItem["price"] = "125.00";
        dataItem["enabled"] = null;
        dataItem["taxable"] = null;
        dataItem["has_inventory"] = "";
    data.Add(dataItem);
        IDictionary<string, object> dataItem1 = new Dictionary<string, object>();
        dataItem1["type"] = "product";
        dataItem1["key"] = "ds4bb5ckg059vdn8";
        dataItem1["product_refnum"] = "13";
        dataItem1["name"] = "Antique Pensieve";
        dataItem1["price"] = "450.00";
        dataItem1["enabled"] = null;
        dataItem1["taxable"] = null;
        dataItem1["has_inventory"] = "1";
    data.Add(dataItem1);
        IDictionary<string, object> dataItem2 = new Dictionary<string, object>();
        dataItem2["type"] = "product";
        dataItem2["key"] = "as4b4s9sfbwzd1v8";
        dataItem2["product_refnum"] = "10";
        dataItem2["name"] = "A History of Magic by Bathilda Bagshot";
        dataItem2["price"] = "20.00";
        dataItem2["enabled"] = null;
        dataItem2["taxable"] = null;
        dataItem2["has_inventory"] = "1";
    data.Add(dataItem2);
        IDictionary<string, object> dataItem3 = new Dictionary<string, object>();
        dataItem3["type"] = "product";
        dataItem3["key"] = "4s4b4qrn3k4pmsg8";
        dataItem3["product_refnum"] = "4";
        dataItem3["name"] = "The Standard Book of Spells (Grade 1)";
        dataItem3["price"] = "10.00";
        dataItem3["enabled"] = null;
        dataItem3["taxable"] = null;
        dataItem3["has_inventory"] = "1";
    data.Add(dataItem3);
response["data"]="data";
response["total"] = "4";

@POST/products@

IDictionary<string, object> request = new Dictionary<string, object>();
request["name"] = "Advanced Potion-Making";
request["price"] = "125.00";
request["list_price"] = "130.00";
request["enabled"] = "1";
request["taxable"] = "1";
request["available_all"] = "1";
request["available_all_date"] = "2019-01-10";
request["date_available"] = "2019-01-15";
request["categoryid"] = "37";
request["commodity_code"] = "715-86";
request["description"] = "by Libatius Borage";
request["manufacturer"] = "Merge Books";
request["merch_productid"] = "978675";
request["min_quantity"] = "20";
request["model"] = "4th Edition";
request["physicalgood"] = "1";
request["ship_weight"] = "1.25";
request["weight"] = "1.0";
request["sku"] = "9876457687";
request["taxclass"] = "NA";
request["upc"] = "876457687";
request["um"] = "EA";
request["url"] = "http://harrypotter.wikia.com/wiki/Advanced_Potion-Making";
request["wholesale_price"] = "100.00";
request["allow_overrides"] = "";

var response = USAePay.API.Products.Post(request);

@POST/products@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "product";
response["key"] = "ms4bb95qgg0y8dn8";
response["product_refnum"] = "22";
response["name"] = "Advanced Potion-Making";
response["price"] = "125.00";
response["enabled"] = "Y";
response["taxable"] = "Y";
response["available_all"] = "Y";
response["available_all_date"] = "2019-01-10";
response["categoryid"] = "37";
response["commodity_code"] = "715-86";
response["date_available"] = "2019-01-15";
response["description"] = "by Libatius Borage";
response["image_url"] = "";
response["list_price"] = "130.00";
response["manufacturer"] = "Merge Books";
response["merch_productid"] = "978675";
response["min_quantity"] = "20";
response["model"] = "4th Edition";
response["physicalgood"] = "Y";
response["ship_weight"] = "1.25";
response["sku"] = "9876457687";
response["taxclass"] = "NA";
response["um"] = "EA";
response["upc"] = "876457687";
response["url"] = "http://harrypotter.wikia.com/wiki/Advanced_Potion-Making";
response["weight"] = "1";
response["wholesale_price"] = "100.00";
response["allow_override"] = "";
    IList<IDictionary<string, object>> inventory = new List<IDictionary<string, object>>();
response["inventory"]="inventory";
    IList<IDictionary<string, object>> modifiers = new List<IDictionary<string, object>>();
response["modifiers"]="modifiers";
response["created"] = "2019-01-06 23:57:34";
response["modified"] = "2019-01-06 23:57:34";

@DELETE/products/:product_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["product_key"] = "Example_product_key";

var response = USAePay.API.Products.Delete(request);

@DELETE/products/:product_key:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["status"] = "success";

@PUT/products/:product_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["product_key"] = "Example_product_key";
request["name"] = "Botts Every Flavor Beans";
request["price"] = "2.00";
request["enabled"] = "True";
request["taxable"] = "True";
request["categoryid"] = "1238710";
request["commodity_code"] = "3122";
request["description"] = "Every flavor you can imagine and then some.";
request["list_price"] = "3.00";
request["manufacturer"] = "Jelly Belly";
request["merch_productid"] = "EXA1234";
request["physicalgood"] = "True";
request["ship_weight"] = "1.2 oz";
request["sku"] = "123456789";
request["upc"] = "999999999";
request["weight"] = "1.2 oz";
request["wholesale_price"] = "3.22";

var response = USAePay.API.Products.Put(request);

@PUT/products/:product_key:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "product";
response["key"] = "80v96p6rx2k6sktw";
response["product_refnum"] = "2";
response["name"] = "Botts Every Flavor Beans";
response["price"] = "2.00";
response["enabled"] = "True";
response["taxable"] = "True";
response["categoryid"] = "1238710";
response["commodity_code"] = "3122";
response["description"] = "Every flavor you can imagine and then some.";
response["list_price"] = "3.00";
response["manufacturer"] = "Jelly Belly";
response["merch_productid"] = "EXA1234";
response["physicalgood"] = "True";
response["ship_weight"] = "1.2 oz";
response["sku"] = "123456789";
response["upc"] = "999999999";
response["weight"] = "1.2 oz";
response["wholesale_price"] = "3.22";
response["created"] = "";
response["modified"] = "";

@GET/products/categories/:category_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["category_key"] = "Example_category_key";

var response = USAePay.API.Products.Categories.Get(request);

@GET/products/categories/:category_key:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "product_category";
response["key"] = "80v96p6rx2k6sktw";
response["name"] = "Botts Every Flavor Beans";

@GET/products/categories@

IDictionary<string, object> request = new Dictionary<string, object>();
request["limit"] = "93";
request["offset"] = "93";

var response = USAePay.API.Products.Categories.Get(request);

@GET/products/categories@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "list";
response["limit"] = "0";
response["offset"] = "20";
    IList<IDictionary<string, object>> data286 = new List<IDictionary<string, object>>();
        IDictionary<string, object> data286Item = new Dictionary<string, object>();
        data286Item["type"] = "product_category";
        data286Item["key"] = "80v96p6rx2k6sktw";
        data286Item["name"] = "Botts Every Flavor Beans";
    data286.Add(data286Item);
response["data286"]="data286";
response["total"] = "42";

@POST/products/categories@

IDictionary<string, object> request = new Dictionary<string, object>();
request["name"] = "Botts Every Flavor Beans";

var response = USAePay.API.Products.Categories.Post(request);

@POST/products/categories@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "product_category";
response["key"] = "80v96p6rx2k6sktw";
response["name"] = "Botts Every Flavor Beans";

@DELETE/products/categories/:category_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["category_key"] = "Example_category_key";

var response = USAePay.API.Products.Categories.Delete(request);

@DELETE/products/categories/:category_key:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["status"] = "success";

@PUT/products/categories/:category_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["category_key"] = "Example_category_key";
request["name"] = "Botts Every Flavor Beans";

var response = USAePay.API.Products.Categories.Put(request);

@PUT/products/categories/:category_key:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "product_category";
response["key"] = "80v96p6rx2k6sktw";
response["name"] = "Botts Every Flavor Beans";

@POST/tokens@

IDictionary<string, object> request = new Dictionary<string, object>();
    IDictionary<string, object> creditcard = new Dictionary<string, object>();
    creditcard["cardholder"] = "Minerva McGonnegall";
    creditcard["number"] = "4000100011112224";
    creditcard["expiration"] = "1222";
request["creditcard"]="creditcard";
    IDictionary<string, object> customer = new Dictionary<string, object>();
    customer["custkey"] = "9sddg0ccd915pdbq";
    customer["paymethod_key"] = "2n02pc6k26jkfkh1b";
request["customer"]="customer";
    IList<IDictionary<string, object>> list = new List<IDictionary<string, object>>();
        IDictionary<string, object> listItem = new Dictionary<string, object>();
        listItem["custkey"] = "9sddg0ccd915pdbq";
        listItem["paymethod_key"] = "2n02pc6k26jkfkh1b";
    list.Add(listItem);
request["list"]="list";

var response = USAePay.API.Tokens.Post(request);

@POST/tokens@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "token";
response["key"] = "p4xe-9ax3-26f4-pi6h";
    IDictionary<string, object> token = new Dictionary<string, object>();
    token["type"] = "token";
    token["cardref"] = "p4xe-9ax3-26f4-pi6h";
    token["masked_card_number"] = "XXXXXXXXXXXX2226";
response["token"]="token";

@GET/tokens/:cardref:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["cardref"] = "w4a4ge1p36rkj4jy";

var response = USAePay.API.Tokens.Get(request);

@GET/tokens/:cardref:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["card_key"] = "w4a4-ge1p-36rk-j4jy";
response["masked_card_number"] = "XXXXXXXXXXXX1111";
response["card_type"] = "Visa";

@GET/transactions/:trankey:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["trankey"] = "hnftkyjj2r93ft2";

var response = USAePay.API.Transactions.Get(request);

@GET/transactions/:trankey:@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "transaction";
response["key"] = "hnftkyjj2r93ft2";
response["refnum"] = "100065";
response["created"] = "2018-12-04 10:48:44";
response["trantype_code"] = "S";
response["trantype"] = "Credit Card Sale";
response["result_code"] = "A";
response["result"] = "Approved";
response["authcode"] = "326075";
response["status_code"] = "P";
response["status"] = "Authorized (Pending Settlement)";
    IDictionary<string, object> creditcard = new Dictionary<string, object>();
    creditcard["cardholder"] = "Hogwarts School of Witchcraft and Wizardry";
    creditcard["number"] = "4444xxxxxxxx1111";
    creditcard["avs_street"] = "1234 Portkey Ave";
    creditcard["avs_postalcode"] = "12345";
    creditcard["category_code"] = "A";
    creditcard["aid"] = "A000000025010801";
    creditcard["entry_mode"] = "Contactless";
response["creditcard"]="creditcard";
    IDictionary<string, object> avs = new Dictionary<string, object>();
    avs["result_code"] = "YYY";
    avs["result"] = "Address: Match & 5 Digit Zip: Match";
response["avs"]="avs";
    IDictionary<string, object> cvc = new Dictionary<string, object>();
    cvc["result_code"] = "N";
    cvc["result"] = "No Match";
response["cvc"]="cvc";
    IDictionary<string, object> batch = new Dictionary<string, object>();
    batch["type"] = "batch";
    batch["key"] = "et1m9h57b44h16g";
    batch["batchrefnum"] = "408318";
    batch["sequence"] = "2515";
response["batch"]="batch";
response["amount"] = "157.50";
    IDictionary<string, object> amount_detail = new Dictionary<string, object>();
    amount_detail["tip"] = "0.00";
    amount_detail["tax"] = "11.00";
    amount_detail["shipping"] = "20.00";
    amount_detail["discount"] = "103.50";
response["amount_detail"]="amount_detail";
response["ponum"] = "af416fsd5";
response["invoice"] = "98454685";
response["orderid"] = "8521adsf5312";
response["description"] = "Received First Year Discount";
response["comments"] = "Paid for by Headmaster";
response["tranterm"] = "multilane";
response["clerk"] = "Madam Malkin";
    IDictionary<string, object> billing_address = new Dictionary<string, object>();
    billing_address["company"] = "Hogwarts School of Witchcraft and Wizardry";
    billing_address["first_name"] = "Albus";
    billing_address["last_name"] = "Dumbledore";
    billing_address["street"] = "123 Astronomy Tower";
    billing_address["street2"] = "Suite 1";
    billing_address["city"] = "Phoenix";
    billing_address["state"] = "CA";
    billing_address["country"] = "USA";
    billing_address["postalcode"] = "10005";
    billing_address["phone"] = "5552533673";
response["billing_address"]="billing_address";
    IDictionary<string, object> shipping_address = new Dictionary<string, object>();
    shipping_address["company"] = "Hogwarts School of Witchcraft and Wizardry";
    shipping_address["first_name"] = "Albus";
    shipping_address["last_name"] = "Dumbledore";
    shipping_address["street"] = "123 Astronomy Tower";
    shipping_address["street2"] = "Suite 1";
    shipping_address["city"] = "Phoenix";
    shipping_address["state"] = "CA";
    shipping_address["country"] = "USA";
    shipping_address["postalcode"] = "10005";
    shipping_address["phone"] = "555-253-3673";
response["shipping_address"]="shipping_address";
    IList<IDictionary<string, object>> lineitems = new List<IDictionary<string, object>>();
        IDictionary<string, object> lineitemsItem = new Dictionary<string, object>();
        lineitemsItem["name"] = "The Standard Book of Spells (Grade 1)";
        lineitemsItem["description"] = "by Miranda Goshawk An indispensable guide to your basic magical needs.";
        lineitemsItem["cost"] = "10.00";
        lineitemsItem["taxable"] = "N";
        lineitemsItem["qty"] = "1.0000";
        lineitemsItem["tax_rate"] = "5.000";
        lineitemsItem["commodity_code"] = "715-86";
        lineitemsItem["product_key"] = "4s4b4qrn3k4pmsg8";
        lineitemsItem["um"] = "EAC";
        lineitemsItem["locationid"] = "13";
        lineitemsItem["location_key"] = "dnyyjc8s2vbz8hb33";
    lineitems.Add(lineitemsItem);
        IDictionary<string, object> lineitemsItem1 = new Dictionary<string, object>();
        lineitemsItem1["name"] = "A History of Magic by Bathilda Bagshot";
        lineitemsItem1["description"] = "Bathilda Bagshot embarked on the journey of magical knowledge decades ago. She has always been fascinated by the mysteries and curiosities of the wizarding world. A History of Magic examines significant moments and facts from the beginning of time to the ";
        lineitemsItem1["cost"] = "20.00";
        lineitemsItem1["taxable"] = "Y";
        lineitemsItem1["qty"] = "1.0000";
        lineitemsItem1["tax_amount"] = "1.00";
        lineitemsItem1["tax_rate"] = "5.000";
        lineitemsItem1["commodity_code"] = "715-86";
        lineitemsItem1["product_key"] = "as4b4s9sfbwzd1v8";
        lineitemsItem1["um"] = "EAC";
        lineitemsItem1["locationid"] = "13";
        lineitemsItem1["location_key"] = "dnyyjc8s2vbz8hb33";
    lineitems.Add(lineitemsItem1);
        IDictionary<string, object> lineitemsItem2 = new Dictionary<string, object>();
        lineitemsItem2["sku"] = "378675689";
        lineitemsItem2["name"] = "Dress Robes";
        lineitemsItem2["description"] = "Very pretty/handsome";
        lineitemsItem2["cost"] = "100.00";
        lineitemsItem2["taxable"] = "Y";
        lineitemsItem2["qty"] = "2.0000";
        lineitemsItem2["tax_amount"] = "10.00";
        lineitemsItem2["tax_rate"] = "5.000";
        lineitemsItem2["commodity_code"] = "S2502";
        lineitemsItem2["product_key"] = "bs4b03tc5m4ccs82";
        lineitemsItem2["um"] = "EAC";
        lineitemsItem2["locationid"] = "13";
        lineitemsItem2["location_key"] = "dnyyjc8s2vbz8hb33";
    lineitems.Add(lineitemsItem2);
response["lineitems"]="lineitems";
    IDictionary<string, object> custom_fields = new Dictionary<string, object>();
    custom_fields["1"] = "Gryffindor";
    custom_fields["2"] = "Headmaster";
response["custom_fields"]="custom_fields";

@GET/transactions@

IDictionary<string, object> request = new Dictionary<string, object>();
request["limit"] = "86";
request["offset"] = "78";
request["fuzzy"] = "32";
request["filters"] = "exampleFilter";

var response = USAePay.API.Transactions.Get(request);

@GET/transactions@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "list";
response["limit"] = "0";
response["offset"] = "20";
    IList<IDictionary<string, object>> data = new List<IDictionary<string, object>>();
        IDictionary<string, object> dataItem = new Dictionary<string, object>();
        dataItem["type"] = "transaction";
        dataItem["key"] = "dnfwxwhz5kvnbgb";
        dataItem["refnum"] = "100061";
        dataItem["created"] = "2018-12-04 10:48:44";
        dataItem["trantype_code"] = "S";
        dataItem["trantype"] = "Credit Card Sale";
        dataItem["result_code"] = "A";
        dataItem["result"] = "Approved";
        dataItem["error_code"] = "12";
        dataItem["error"] = "Card Number was not between 13 and 16 digits";
        dataItem["authcode"] = "314407";
        dataItem["status_code"] = "P";
        dataItem["status"] = "Authorized (Pending Settlement)";
        dataItem["proc_refnum"] = "18120443975126";
            IDictionary<string, object> creditcard = new Dictionary<string, object>();
            creditcard["cardholder"] = "Minerva McGonnegall";
            creditcard["number"] = "4444xxxxxxxx1111";
            creditcard["category_code"] = "A";
            creditcard["entry_mode"] = "swiped";
            creditcard["avs_street"] = "1234 Portkey Ave";
            creditcard["avs_postalcode"] = "90006";
        dataItem["creditcard"]="creditcard";
            IDictionary<string, object> check = new Dictionary<string, object>();
            check["accountholder"] = "Remus Lupin";
            check["routing"] = "123456789";
            check["account"] = "324523524";
            check["account_type"] = "checking";
        dataItem["check"]="check";
            IDictionary<string, object> avs = new Dictionary<string, object>();
            avs["result_code"] = "YYY";
            avs["result"] = "Address: Match & 5 Digit Zip: Match";
        dataItem["avs"]="avs";
            IDictionary<string, object> cvc = new Dictionary<string, object>();
            cvc["result_code"] = "N";
            cvc["result"] = "No Match";
        dataItem["cvc"]="cvc";
            IDictionary<string, object> batch = new Dictionary<string, object>();
            batch["type"] = "batch";
            batch["key"] = "ft1m9m5p9wgd9mb";
            batch["batchrefnum"] = "12345678";
            batch["sequence"] = "2902";
        dataItem["batch"]="batch";
        dataItem["amount"] = "50";
            IDictionary<string, object> amount_detail = new Dictionary<string, object>();
            amount_detail["subtotal"] = "40.00";
            amount_detail["tax"] = "10.00";
            amount_detail["enable_partialauth"] = "false";
        dataItem["amount_detail"]="amount_detail";
        dataItem["ponum"] = "af416fsd5";
        dataItem["invoice"] = "98454685";
        dataItem["orderid"] = "98454685";
        dataItem["description"] = "Antique Pensieve";
            IDictionary<string, object> billing_address = new Dictionary<string, object>();
            billing_address["company"] = "Hogwarts School of Witchcraft and Wizardry";
            billing_address["street"] = "123 Astronomy Tower";
            billing_address["postalcode"] = "10005";
        dataItem["billing_address"]="billing_address";
            IDictionary<string, object> shipping_address = new Dictionary<string, object>();
            shipping_address["company"] = "Hogwarts School of Witchcraft and Wizardry";
            shipping_address["street"] = "123 Astronomy Tower";
            shipping_address["postalcode"] = "10005";
        dataItem["shipping_address"]="shipping_address";
            IList<IDictionary<string, object>> lineitems = new List<IDictionary<string, object>>();
                IDictionary<string, object> lineitemsItem = new Dictionary<string, object>();
                lineitemsItem["name"] = "Antique Pensieve";
                lineitemsItem["description"] = "See into your past...";
                lineitemsItem["size"] = "Large";
                lineitemsItem["color"] = "Bronze";
                lineitemsItem["cost"] = "450.00";
                lineitemsItem["list_price"] = "500.00";
                lineitemsItem["qty"] = "1";
                lineitemsItem["sku"] = "68453423";
                lineitemsItem["commoditycode"] = "535";
                lineitemsItem["discountamount"] = "0";
                lineitemsItem["discountrate"] = "0";
                lineitemsItem["taxable"] = "";
                lineitemsItem["taxamount"] = "45.00";
                lineitemsItem["taxclass"] = "NA";
                lineitemsItem["taxrate"] = "10";
                lineitemsItem["um"] = "EA";
                lineitemsItem["category"] = "Antiques";
                lineitemsItem["manufacturer"] = "The Ancients";
            lineitems.Add(lineitemsItem);
        dataItem["lineitems"]="lineitems";
        dataItem["comments"] = "Powerful magical object. Use with caution.";
        dataItem["tranterm"] = "multilane";
        dataItem["clerk"] = "Madame Malkin";
            IDictionary<string, object> receipts = new Dictionary<string, object>();
            receipts["customer"] = "Mail Sent Successfully";
            receipts["merchant"] = "Mail Sent Successfully";
        dataItem["receipts"]="receipts";
            IDictionary<string, object> customer = new Dictionary<string, object>();
            customer["custkey"] = "ksddgpqgpbs5zkmb";
            customer["custid"] = "10275538";
        dataItem["customer"]="customer";
        dataItem["customer_email"] = "noreply@gmail.com";
            IDictionary<string, object> bin = new Dictionary<string, object>();
            bin["bin"] = "444455";
            bin["type"] = "Debit";
            bin["issuer"] = "Visa";
            bin["bank"] = "Chase Bank";
            bin["country"] = "US";
            bin["country_name"] = "United States";
            bin["country_iso"] = "CA";
            bin["location"] = "http://www.jpmorganchase.com";
            bin["phone"] = "USA";
            bin["category"] = "";
        dataItem["bin"]="bin";
        dataItem["clientip"] = "Madame Malkin";
        dataItem["source_name"] = "Madame Malkin";
    data.Add(dataItem);
response["data"]="data";
response["total"] = "42";

@POST/transactions@

IDictionary<string, object> request = new Dictionary<string, object>();
request["command"] = "sale";
request["invoice"] = "98454685";
request["ponum"] = "af416fsd5";
request["description"] = "Antique Pensieve";
request["comments"] = "Powerful magical object. Use with caution.";
request["email"] = "brian@hogwarts.com";
request["send_receipt"] = "1";
request["ignore_duplicate"] = "1";
request["merchemailaddr"] = "receipts@fandb.net";
request["amount"] = "500.00";
    IDictionary<string, object> amount_detail = new Dictionary<string, object>();
    amount_detail["subtotal"] = "450.00";
    amount_detail["tax"] = "45.00";
    amount_detail["tip"] = "5.00";
    amount_detail["discount"] = "50.00";
    amount_detail["shipping"] = "50.00";
request["amount_detail"]="amount_detail";
    IDictionary<string, object> creditcard = new Dictionary<string, object>();
    creditcard["cardholder"] = "Hogwarts School of Witchcraft and Wizardry";
    creditcard["number"] = "4444333322221111";
    creditcard["expiration"] = "0919";
    creditcard["cvc"] = "123";
    creditcard["avs_street"] = "1234 Portkey Ave";
    creditcard["avs_zip"] = "12345";
request["creditcard"]="creditcard";
    IDictionary<string, object> traits = new Dictionary<string, object>();
    traits["is_debt"] = "";
    traits["is_bill_pay"] = "";
    traits["is_recurring"] = "";
    traits["is_healthcare"] = "";
    traits["is_cash_advance"] = "";
request["traits"]="traits";
request["custkey"] = "ksddgpqgpbs5zkmb";
    IDictionary<string, object> billing_address = new Dictionary<string, object>();
    billing_address["firstname"] = "Albus";
    billing_address["lastname"] = "Dumbledore";
    billing_address["street"] = "123 Astronomy Tower";
    billing_address["street2"] = "Suite 1";
    billing_address["city"] = "Phoenix";
    billing_address["state"] = "CA";
    billing_address["postalcode"] = "10005";
    billing_address["country"] = "USA";
    billing_address["phone"] = "555-253-3673";
    billing_address["fax"] = "666-253-3673";
request["billing_address"]="billing_address";
    IDictionary<string, object> shipping_address = new Dictionary<string, object>();
    shipping_address["firstname"] = "Aberforth";
    shipping_address["lastname"] = "Dumbledore";
    shipping_address["street"] = "987 HogsHead St";
    shipping_address["city"] = "Hogsmead";
    shipping_address["state"] = "WY";
    shipping_address["postalcode"] = "30005";
    shipping_address["country"] = "USA";
    shipping_address["phone"] = "555-253-3673";
request["shipping_address"]="shipping_address";
    IList<IDictionary<string, object>> lineitems = new List<IDictionary<string, object>>();
        IDictionary<string, object> lineitemsItem = new Dictionary<string, object>();
        lineitemsItem["product_key"] = "ds4bb5ckg059vdn8";
        lineitemsItem["name"] = "Antique Pensieve";
        lineitemsItem["cost"] = "450.00";
        lineitemsItem["qty"] = "1";
        lineitemsItem["tax_amount"] = "50.00";
        lineitemsItem["location_key"] = "dnyyjc8s2vbz8hb33";
        lineitemsItem["list_price"] = "500.00";
    lineitems.Add(lineitemsItem);
request["lineitems"]="lineitems";
    IDictionary<string, object> custom_fields = new Dictionary<string, object>();
    custom_fields["1"] = "Gryffindor";
    custom_fields["2"] = "Headmaster";
request["custom_fields"]="custom_fields";

var response = USAePay.API.Transactions.Post(request);

@POST/transactions@

IDictionary<string, object> response = new Dictionary<string, object>();
response["type"] = "transaction";
response["key"] = "dnfwxwhz5kvnbgb";
response["refnum"] = "100061";
response["is_duplicate"] = "N";
response["result_code"] = "A";
response["result"] = "Approved";
response["authcode"] = "314407";
    IDictionary<string, object> creditcard = new Dictionary<string, object>();
    creditcard["number"] = "4444xxxxxxxx1111";
    creditcard["cardholder"] = "Hogwarts School of Witchcraft and Wizardry";
    creditcard["category_code"] = "A";
    creditcard["entry_mode"] = "Card Not Present, Manually Keyed";
response["creditcard"]="creditcard";
response["invoice"] = "98454685";
    IDictionary<string, object> avs = new Dictionary<string, object>();
    avs["result_code"] = "YYY";
    avs["result"] = "Address: Match & 5 Digit Zip: Match";
response["avs"]="avs";
    IDictionary<string, object> cvc = new Dictionary<string, object>();
    cvc["result_code"] = "N";
    cvc["result"] = "No Match";
response["cvc"]="cvc";
    IDictionary<string, object> batch = new Dictionary<string, object>();
    batch["type"] = "batch";
    batch["key"] = "0t1jyndn769q1vb";
    batch["batchrefnum"] = "409384";
    batch["sequence"] = "1";
response["batch"]="batch";
response["auth_amount"] = "500.00";
response["trantype"] = "Credit Card Sale";
    IDictionary<string, object> receipts = new Dictionary<string, object>();
    receipts["customer"] = "Mail Sent Successfully";
    receipts["merchant"] = "Mail Sent Successfully";
response["receipts"]="receipts";

@POST/transactions/:trankey:/send@

IDictionary<string, object> request = new Dictionary<string, object>();
request["toemail"] = "example@example.com";

var response = USAePay.API.Transactions.Send.Post(request);

@POST/transactions/:trankey:/send@

IDictionary<string, object> response = new Dictionary<string, object>();
response["status"] = "success";

@GET/transactions/:trankey:/receipts/:receipt_key:@

IDictionary<string, object> request = new Dictionary<string, object>();
request["trankey"] = "Example_trankey";
request["receipt_key"] = "Example_receipt_key";

var response = USAePay.API.Transactions.Receipts.Get(request);

@GET/transactions/:trankey:/receipts/:receipt_key:@

var response = "PGh0bWw+Cgo8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICAgIDx0aXRsZT5OZXcgT3JkZXIgKEN1c3RvbWVyKSBSZWNlaXB0PC90aXRsZT4KICAgIDxzdHlsZT4KCQkjTWFpblJlY2VpcHRCb2R5IHsKCQkJbWF4LXdpZHRoOiA3NTBweDsKCQkJbWFyZ2luOiAwIGF1dG87CgkJfQogICAgICAgIC5iYWNrZ3JvdW5kY29sb3IgewogICAgICAgICAgICBib3JkZXItY29sb3I6ICMwMDM4NUQ7CiAgICAgICAgfQoKICAgICAgICAuZm9yZWdyb3VuZGNvbG9yIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwMzg1RDsKICAgICAgICB9CgogICAgICAgIC5hY2NlbnRjb2xvciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDcyQkQ7CiAgICAgICAgfQoKICAgICAgICAuYWNjZW50Y29sb3J0eHQgewogICAgICAgICAgICBjb2xvcjogIzAwNzJCRDsKICAgICAgICB9CgogICAgICAgIC5hY2NlbnRjb2xvcmhlYWQgewogICAgICAgICAgICBjb2xvcjogIzAwMzg1RDsKICAgICAgICB9CgogICAgICAgIC5hY2NlbnRjb2xvcjIgdGggc3BhbiB7CiAgICAgICAgICAgIGNvbG9yOiAjMDA3MkJEICFpbXBvcnRhbnQ7CiAgICAgICAgfQoKICAgICAgIAoKICAgICAgICAuYm9keS1wYWQgewogICAgICAgICAgICBwYWRkaW5nOiAyMHB4IDUwcHg7CiAgICAgICAgfQoKICAgICAgICAucmVjZWlwdC1ib2R5IHsKICAgICAgICAgICAgYm9yZGVyOiA0cHggc29saWQgIzAwMzg1RDsKICAgICAgICAgICAgcGFkZGluZzogMjBweCA1MHB4OwogICAgICAgIH0KCiAgICAgICAgLmZvbnRfdGhpbiB7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7CiAgICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAxcHg7CiAgICAgICAgfQoKICAgICAgICAucGFkZGluZy1idDAgewogICAgICAgICAgICBwYWRkaW5nLXRvcDogMHB4OwogICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMHB4OwogICAgICAgIH0KCiAgICAgICAgLmNvbXBhbnktbmFtZS10ZXh0IHsKICAgICAgICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgICAgfQoKICAgICAgICAucmVjZWlwdC1uYW1lLXRleHQgewogICAgICAgICAgICBmb250LXNpemU6IDI1cHggIWltcG9ydGFudDsKICAgICAgICAgICAgdGV4dC1zaGFkb3c6IDFweCAwcHggMXB4IHJnYmEoMTUwLCAxNTAsIDE1MCwgMSk7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IDBweDsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICAgIH0KCiAgICAgICAgLnRvdGFsLXRleHQgewogICAgICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgfQoKICAgICAgICAucmVjZWlwdC1zZWN0aW9uLXRhYmxlIHsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDsKICAgICAgICB9CgogICAgICAgCiAgICAgICAgdGhlYWQgdGggewogICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTBweDsKICAgICAgICB9CgogICAgICAgIHRoZWFkIHRoIHNwYW4gewogICAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAzcHg7CiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuNSk7CiAgICAgICAgfQoKICAgICAgICB0Ym9keSB0ZCB7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgICAgcGFkZGluZzogMnB4IDA7CiAgICAgICAgfQoKICAgICAgICAuaGVhZGVyewogICAgICAgICAgICBkaXNwbGF5OiBpbmhlcml0OwogICAgICAgIH0KCiAgICA8L3N0eWxlPgo8L2hlYWQ+Cgo8Ym9keT4KICAgIDx0YWJsZSBpZD0iTWFpblJlY2VpcHRCb2R5IiBjbGFzcz0icmVjZWlwdC1ib2R5IGJvZHktcGFkIiB3aWR0aD0iMTAwJSI+CiAgICAgICAgPHRib2R5PgogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSIiIGlkPSJyZWNlaXB0cy1lbWFpbC1pbmZvIiB3aWR0aD0iMTAwJSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keSBhbGlnbj0iY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS08dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJsb2dvLWltZyIgc3JjPSIgICIgd2lkdGg9IjE1MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4tLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0icmVjZWlwdF9uYW1lIGNvbXBhbnktbmFtZS10ZXh0IGZvbnRfdGhpbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3VyIGNhcmQgaGFzIGJlZW4gY2hhcmdlZCBieSBGbG91cmlzaCAmYW1wOyBCbG90dHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0icmVjZWlwdC1uYW1lLXRleHQgYWNjZW50Y29sb3J0eHQiIHN0eWxlPSJmb250LXNpemU6IDMwcHg7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY2VpcHQgb2YgUGF5bWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0b3RhbC10ZXh0Ij5Ub3RhbCAgNTAwLjAwPC9oMj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPSJ0b3RhbC10ZXh0Ij5UYXggNDUuMDA8L2g0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0idG90YWwtdGV4dCI+U2hpcHBpbmcgNTAuMDA8L2g0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0idG90YWwtdGV4dCI+VGlwIDUuMDA8L2g0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0idG90YWwtdGV4dCI+RGlzY291bnQgNTAuMDA8L2g0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ie3sjZW1haWxpY29ufX0gYWNjZW50Y29sb3IyIHt7L2VtYWlsaWNvbn19Ij4KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlIHJlY2VpcHQtZWRpdC10YWJsZSByZWNlaXB0LXNlY3Rpb24tdGFibGUgICIgaWQ9ImNjLXRhYmxlIiAgd2lkdGg9IjEwMCUiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQgYWxpZ249ImxlZnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlYWRlciI+Q3JlZGl0IENhcmQgSW5mb3JtYXRpb248L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHkgaWQ9ImNjLWJvZHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBpZD0iY3VzdG9tZXItcm93IiBjbGFzcz0idWktc29ydGFibGUtaGFuZGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZCBIb2xkZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW5lcnZhIE1jR29ubmVnYWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgaWQ9ImNjbnVtNC1yb3ciIGNsYXNzPSJ1aS1zb3J0YWJsZS1oYW5kbGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDcmVkaXQgQ2FyZCAjCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHh4eCB4eHh4IHh4eHggIDExMTEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSAgcmVjZWlwdC1lZGl0LXRhYmxlIHJlY2VpcHQtc2VjdGlvbi10YWJsZSAgIiBpZD0iZGV0YWlscy10YWJsZSIgd2lkdGg9IjEwMCUiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQgYWxpZ249ImxlZnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhlYWRlciI+RGV0YWlsIEluZm9ybWF0aW9uPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5IGlkPSJkZXRhaWxzLWJvZHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBpZD0iZGF0ZS1yb3ciIGNsYXNzPSJ1aS1zb3J0YWJsZS1oYW5kbGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDEvMjQvMTkgMDQ6MjEgcG0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBpZD0ibWVyY2hhbnQtcm93IiBjbGFzcz0idWktc29ydGFibGUtaGFuZGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmcmVuY2UgIwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDExNgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGlkPSJtZXJjaGFudC1yb3ciIGNsYXNzPSJ1aS1zb3J0YWJsZS1oYW5kbGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbiBLZXkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbmZrZDEybXFrenRiZzIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBpZD0iYXV0aGNvZGUtcm93IiBjbGFzcz0idWktc29ydGFibGUtaGFuZGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbiAjCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA2OTA3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgaWQ9Imludm9pY2Utcm93IiBjbGFzcz0idWktc29ydGFibGUtaGFuZGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52b2ljZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk4NDU0Njg1CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgaWQ9InR5cGUtcm93IiBjbGFzcz0idWktc29ydGFibGUtaGFuZGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyZWRpdCBDYXJkIFNhbGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBpZD0ibGluZWl0ZW0tcm93IiBjbGFzcz0idWktc29ydGFibGUtaGFuZGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmUgSXRlbXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9ImxpbmVpdGVtcy10YmwiPjx0ciBjbGFzcz0ibGluZWl0ZW1zLWhlYWRlci1yb3ciPiAgPHRoIGNsYXNzPSJsaW5laXRlbXMtaGVhZGVyLWNlbGwgbGluZWl0ZW1zLXNrdSIgaWQ9ImxpbmVpdGVtcy1oZWFkZXItc2t1Ij5TS1U8L3RoPiAgPHRoIGNsYXNzPSJsaW5laXRlbXMtaGVhZGVyLWNlbGwgbGluZWl0ZW1zLW5hbWUiIGlkPSJsaW5laXRlbXMtaGVhZGVyLW5hbWUiPk5hbWU8L3RoPiAgPHRoIGNsYXNzPSJsaW5laXRlbXMtaGVhZGVyLWNlbGwgbGluZWl0ZW1zLWNvc3QiIGlkPSJsaW5laXRlbXMtaGVhZGVyLWNvc3QiPkNvc3Q8L3RoPiAgPHRoIGNsYXNzPSJsaW5laXRlbXMtaGVhZGVyLWNlbGwgbGluZWl0ZW1zLXF0eSIgaWQ9ImxpbmVpdGVtcy1oZWFkZXItcXR5Ij5RdHk8L3RoPiAgPHRoIGNsYXNzPSJsaW5laXRlbXMtaGVhZGVyLWNlbGwgbGluZWl0ZW1zLXN1YnRvdGFsIiBpZD0ibGluZWl0ZW1zLWhlYWRlci1zdWJ0b3RhbCI+U3ViVG90YWw8L3RoPjwvdHI+Cjx0ciBjbGFzcz0ibGluZWl0ZW1zLXJvdyI+IDx0ZCBjbGFzcz0ibGluZWl0ZW1zLWNlbGwgbGluZWl0ZW1zLXNrdSBsaW5laXRlbXMtc2t1LWNlbGwiPjY4NDUzNDIzPC90ZD4gPHRkIGNsYXNzPSJsaW5laXRlbXMtY2VsbCBsaW5laXRlbXMtbmFtZSBsaW5laXRlbXMtbmFtZS1jZWxsIj5BbnRpcXVlIFBlbnNpZXZlPC90ZD4gPHRkIGNsYXNzPSJsaW5laXRlbXMtY2VsbCBsaW5laXRlbXMtY29zdCBsaW5laXRlbXMtY29zdC1jZWxsIj40NTAuMDA8L3RkPiA8dGQgY2xhc3M9ImxpbmVpdGVtcy1jZWxsIGxpbmVpdGVtcy1xdHkgbGluZWl0ZW1zLXF0eS1jZWxsIj4xPC90ZD4gPHRkIGNsYXNzPSJsaW5laXRlbXMtY2VsbCBsaW5laXRlbXMtc3VidG90YWwgbGluZWl0ZW1zLXN1YnRvdGFsLWNlbGwiPiQ0NTAuMDA8L3RkPjwvdHI+Cjx0ciBjbGFzcz0ibGluZWl0ZW1zLXN1YnRvdGFsLXJvdyI+PHRkIGNsYXNzPSJsaW5laXRlbXMtc2t1Ij48L3RkPjx0ZCBjbGFzcz0ibGluZWl0ZW1zLW5hbWUgbGluZWl0ZW1zLWZvb3Rlci1sYWJlbCBsaW5laXRlbXMtZm9vdGVyLXN1YnRvdGFsLWxhYmxlIj5TdWJ0b3RhbDwvdGQ+PHRkIGNsYXNzPSJsaW5laXRlbXMtY29zdCI+PC90ZD48dGQgY2xhc3M9ImxpbmVpdGVtcy1xdHkiPjwvdGQ+PHRkIGNsYXNzPSJsaW5laXRlbXMtZm9vdGVyLXZhbHVlIGxpbmVpdGVtcy1mb290ZXItc3VidG90YWwtdmFsdWUiPiQ0NTAuMDA8L3RkPjwvdHI+PHRyIGNsYXNzPSJsaW5laXRlbXMtdGlwLXJvdyI+PHRkIGNsYXNzPSJsaW5laXRlbXMtc2t1Ij48L3RkPjx0ZCBjbGFzcz0ibGluZWl0ZW1zLW5hbWUgbGluZWl0ZW1zLWZvb3Rlci1sYWJlbCBsaW5laXRlbXMtZm9vdGVyLXRpcC1sYWJlbCI+VGlwPC90ZD48dGQgY2xhc3M9ImxpbmVpdGVtcy1jb3N0Ij48L3RkPjx0ZCBjbGFzcz0ibGluZWl0ZW1zLXF0eSI+PC90ZD48dGQgY2xhc3M9ImxpbmVpdGVtcy1mb290ZXItdmFsdWUgbGluZWl0ZW1zLWZvb3Rlci10aXAtdmFsdWUiPiQ1LjAwPC90ZD48L3RyPjx0ciBjbGFzcz0ibGluZWl0ZW1zLXRheC1yb3ciPjx0ZCBjbGFzcz0ibGluZWl0ZW1zLXNrdSI+PC90ZD48dGQgY2xhc3M9ImxpbmVpdGVtcy1uYW1lIGxpbmVpdGVtcy1mb290ZXItbGFiZWwgbGluZWl0ZW1zLWZvb3Rlci10YXgtbGFiZWwiPlRheDwvdGQ+PHRkIGNsYXNzPSJsaW5laXRlbXMtY29zdCI+PC90ZD48dGQgY2xhc3M9ImxpbmVpdGVtcy1xdHkiPjwvdGQ+PHRkIGNsYXNzPSJsaW5laXRlbXMtZm9vdGVyLXZhbHVlIGxpbmVpdGVtcy1mb290ZXItdGF4LXZhbHVlIj4kNDUuMDA8L3RkPjwvdHI+PHRyIGNsYXNzPSJsaW5laXRlbXMtc2hpcHBpbmctcm93Ij48dGQgY2xhc3M9ImxpbmVpdGVtcy1za3UiPjwvdGQ+PHRkIGNsYXNzPSJsaW5laXRlbXMtbmFtZSBsaW5laXRlbXMtZm9vdGVyLWxhYmVsIGxpbmVpdGVtcy1mb290ZXItc2hpcHBpbmctbGFiZWwiPlNoaXBwaW5nPC90ZD48dGQgY2xhc3M9ImxpbmVpdGVtcy1jb3N0Ij48L3RkPjx0ZCBjbGFzcz0ibGluZWl0ZW1zLXF0eSI+PC90ZD48dGQgY2xhc3M9ImxpbmVpdGVtcy1mb290ZXItdmFsdWUgbGluZWl0ZW1zLWZvb3Rlci1zaGlwcGluZy12YWx1ZSI+JDUwLjAwPC90ZD48L3RyPjx0ciBjbGFzcz0ibGluZWl0ZW1zLWRpc2NvdW50LXJvdyI+PHRkIGNsYXNzPSJsaW5laXRlbXMtc2t1Ij48L3RkPjx0ZCBjbGFzcz0ibGluZWl0ZW1zLW5hbWUgbGluZWl0ZW1zLWZvb3Rlci1sYWJlbCBsaW5laXRlbXMtZm9vdGVyLWRpc2NvdW50LWxhYmVsIj5EaXNjb3VudDwvdGQ+PHRkIGNsYXNzPSJsaW5laXRlbXMtY29zdCI+PC90ZD48dGQgY2xhc3M9ImxpbmVpdGVtcy1xdHkiPjwvdGQ+PHRkIGNsYXNzPSJsaW5laXRlbXMtZm9vdGVyLXZhbHVlIGxpbmVpdGVtcy1mb290ZXItZGlzY291bnQtdmFsdWUiPi0kNTAuMDA8L3RkPjwvdHI+PHRyIGNsYXNzPSJsaW5laXRlbXMtdG90YWwtcm93Ij48dGQgY2xhc3M9ImxpbmVpdGVtcy1za3UiPjwvdGQ+PHRkIGNsYXNzPSJsaW5laXRlbXMtbmFtZSBsaW5laXRlbXMtZm9vdGVyLWxhYmVsIGxpbmVpdGVtcy1mb290ZXItdG90YWwtbGFiZWwiPlRvdGFsPC90ZD48dGQgY2xhc3M9ImxpbmVpdGVtcy1jb3N0Ij48L3RkPjx0ZCBjbGFzcz0ibGluZWl0ZW1zLXF0eSI+PC90ZD48dGQgY2xhc3M9ImxpbmVpdGVtcy1mb290ZXItdmFsdWUgbGluZWl0ZW1zLWZvb3Rlci10b3RhbC12YWx1ZSI+JDUwMC4wMDwvdGQ+PC90cj48L3RhYmxlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPC90cj4KICAgICAgICA8L3Rib2R5PgogICAgPC90YWJsZT4KICAKPC9ib2R5PgoKPC9odG1sPgo="

@GET/batches/:batch_key:@

Map<String, Object> request = new HashMap<String, Object>();
request.put("batch_key","bt1vswm59pb2488");

String response = "";
response = USAePay.Batches.get(request);

@GET/batches/:batch_key:@

{
"type": "batch",
"key": "bt1vswm59pb2488",
"batchrefnum": "404494",
"opened": "2018-10-15 05:04:37",
"status": "open",
"scheduled": "2018-10-16 17:04:37",
"total_amount": "73.78",
"total_count": "9",
"sales_amount": "126",
"sales_count": "7",
"voids_amount": "5",
"voids_count": "1",
"refunds_amount": "52.22",
"refunds_count": "1"
}

@GET/batches@

Map<String, Object> request = new HashMap<String, Object>();
request.put("limit","20");
request.put("offset","0");

String response = "";
response = USAePay.Batches.get(request);

@GET/batches@

{
"type": "list",
"limit": "20",
"offset": "0",
"data": 
    [
        {
        "type": "batch",
        "key": "et1m9h57b44h16g",
        "batchrefnum": "408318",
        "sequence": "1519",
        "opened": "2019-02-15 12:32:21"
        },
        {
        "type": "batch",
        "key": "dt18n0g3b4q4sm8",
        "batchrefnum": "408317",
        "sequence": "1518",
        "opened": "2019-02-15 09:56:35",
        "closed": "2019-02-15 10:00:23"
        },
        {
        "type": "batch",
        "key": "ft1m9m5p9wgd9mb",
        "batchrefnum": "407929",
        "sequence": "1423",
        "opened": "2019-01-28 17:30:37",
        "closed": "2019-02-14 15:20:43"
        }
    ],
"total": "3"
}

@GET/batches/current@

Map<String, Object> request = new HashMap<String, Object>();

String response = "";
response = USAePay.Batches.Current.get(request);

@GET/batches/current@

{
"type": "batch",
"key": "bt1vswm59pb2488",
"batchrefnum": "403685",
"opened": "2018-10-15 05:04:37",
"status": "open",
"scheduled": "2018-10-16 17:04:37",
"total_amount": "131",
"total_count": "8",
"sales_amount": "131",
"sales_count": "8"
}

@GET/batches/:batch_key:/transactions@

Map<String, Object> request = new HashMap<String, Object>();
request.put("batch_key","pt1qxpnx0f5303d");

String response = "";
response = USAePay.Batches.Transactions.get(request);

@GET/batches/:batch_key:/transactions@

{
"type": "list",
"limit": "20",
"offset": "0",
"data": 
    [
        {
        "type": "transaction",
        "key": "cnfyy402xz086z8",
        "refnum": "2144606814",
        "trantype_code": "S",
        "trantype": "Credit Card Sale",
        "result_code": "A",
        "result": "Approved",
        "authcode": "703449",
        "status_code": "S",
        "status": "Settled",
        "creditcard": 
            {
            "cardholder": "non token customer Customer",
            "number": "4444xxxxxxxx7779",
            "avs_street": "1234 main st",
            "avs_postalcode": "12345",
            "category_code": "A",
            "entry_mode": "Card Not Present, Manually Keyed"
            },
        "avs": 
            {
            "result_code": "YYY",
            "result": "Address: Match & 5 Digit Zip: Match"
            },
        "cvc": 
            {
            "result_code": "P",
            "result": "Not Processed"
            },
        "batch": 
            {
            "type": "batch",
            "key": "0t1k3yx5xs37cvb",
            "batchrefnum": "409384",
            "sequence": "1417"
            },
        "amount": "50.00",
        "amount_detail": 
            {
            "tip": "0.00",
            "tax": "2.50",
            "shipping": "0.00",
            "discount": "0.00"
            },
        "orderid": "1655102995",
        "description": "Welcome to Costco, I love you",
        "comments": "addCustomer test Created Charge",
        "billing_address": 
            {
            "company": "PHP",
            "first_name": "non token customer",
            "last_name": "Customer",
            "street": "1234 main st",
            "street2": "Suite #123",
            "city": "Los Angeles",
            "state": "CA",
            "country": "US",
            "postalcode": "12345",
            "phone": "333-333-3333"
            }
        },
        {
        "type": "transaction",
        "key": "8nfk1vtz58ckfc4",
        "refnum": "2143977090",
        "trantype_code": "S",
        "trantype": "Credit Card Sale",
        "result_code": "A",
        "result": "Approved",
        "authcode": "701199",
        "status_code": "S",
        "status": "Settled",
        "creditcard": 
            {
            "cardholder": "non token customer Customer",
            "number": "4444xxxxxxxx7779",
            "avs_street": "1234 main st",
            "avs_postalcode": "12345",
            "category_code": "A",
            "entry_mode": "Card Not Present, Manually Keyed"
            },
        "avs": 
            {
            "result_code": "YYY",
            "result": "Address: Match & 5 Digit Zip: Match"
            },
        "cvc": 
            {
            "result_code": "P",
            "result": "Not Processed"
            },
        "batch": 
            {
            "type": "batch",
            "key": "0t1k3yx5xs37cvb",
            "batchrefnum": "409384",
            "sequence": "1417"
            },
        "amount": "50.00",
        "amount_detail": 
            {
            "tip": "0.00",
            "tax": "2.50",
            "shipping": "0.00",
            "discount": "0.00"
            },
        "orderid": "1655102995",
        "description": "Welcome to Costco, I love you",
        "comments": "addCustomer test Created Charge",
        "billing_address": 
            {
            "company": "PHP",
            "first_name": "non token customer",
            "last_name": "Customer",
            "street": "1234 main st",
            "street2": "Suite #123",
            "city": "Los Angeles",
            "state": "CA",
            "country": "US",
            "postalcode": "12345",
            "phone": "333-333-3333"
            }
        }
    ],
"total": "2"
}

@GET/batches/current/transactions@

Map<String, Object> request = new HashMap<String, Object>();
request.put("limit","20");
request.put("offset","0");

String response = "";
response = USAePay.Batches.Current.Transactions.get(request);

@GET/batches/current/transactions@

{
"type": "list",
"limit": "20",
"offset": "0",
"data": 
    [
        {
        "type": "transaction",
        "key": "enfy5w3bnxqq433",
        "refnum": "2146101010",
        "trantype_code": "C",
        "trantype": "Credit Card Refund (Credit)",
        "result_code": "A",
        "result": "Approved",
        "authcode": "214611",
        "status_code": "P",
        "status": "Pending Settlement",
        "creditcard": 
            {
            "cardholder": "Thelma Rogers",
            "number": "5555xxxxxxxx2226",
            "category_code": "",
            "entry_mode": "Card Not Present, Manually Keyed"
            },
        "batch": 
            {
            "type": "batch",
            "key": "0t1k3yx5xs37cvb",
            "batchrefnum": "409384",
            "sequence": "1418"
            },
        "amount": "52.22",
        "amount_detail": 
            {
            "tax": "2.22"
            },
        "invoice": "52381283",
        "orderid": "75665798",
        "description": "Recurring Bill"
        },
        {
        "type": "transaction",
        "key": "jnfychx0fs524t0",
        "refnum": "2146100989",
        "trantype_code": "Z",
        "trantype": "Voided Credit Card Refund (Credit)",
        "result_code": "A",
        "result": "Approved",
        "authcode": "214611",
        "status_code": "P",
        "status": "Voided",
        "creditcard": 
            {
            "cardholder": "non token customer Customer",
            "number": "4444xxxxxxxx7779",
            "category_code": "",
            "entry_mode": "Card Not Present, Manually Keyed"
            },
        "batch": 
            {
            "type": "batch",
            "key": "0t1k3yx5xs37cvb",
            "batchrefnum": "409384",
            "sequence": "1418"
            },
        "amount": "50.00",
        "amount_detail": 
            {
            "tax": "2.50"
            },
        "orderid": "1655102995",
        "description": "Welcome to Costco, I love you"
        },
        {
        "type": "transaction",
        "key": "2nfj5cpgsf4syhb",
        "refnum": "2145985220",
        "trantype_code": "S",
        "trantype": "Credit Card Sale",
        "result_code": "A",
        "result": "Approved",
        "authcode": "707113",
        "status_code": "P",
        "status": "Authorized (Pending Settlement)",
        "creditcard": 
            {
            "cardholder": "Thelma Rogers",
            "number": "5555xxxxxxxx2226",
            "avs_street": "123 Sesame St",
            "avs_postalcode": "12345",
            "category_code": "M",
            "entry_mode": "Card Not Present, Manually Keyed"
            },
        "avs": 
            {
            "result_code": "YYY",
            "result": "Address: Match & 5 Digit Zip: Match"
            },
        "cvc": 
            {
            "result_code": "M",
            "result": "Match"
            },
        "batch": 
            {
            "type": "batch",
            "key": "0t1k3yx5xs37cvb",
            "batchrefnum": "409384",
            "sequence": "1418"
            },
        "amount": "5.00",
        "amount_detail": 
            {
            "tip": "0.50",
            "tax": "1.00",
            "shipping": "0.00",
            "discount": "0.00"
            },
        "billing_address": 
            {
            "company": "PBS",
            "first_name": "Fred",
            "last_name": "Rogers",
            "street": "143 Neighborhood Way",
            "street2": "Apt 143",
            "city": "Pittsburgh",
            "state": "PA",
            "country": "USA",
            "postalcode": "15106",
            "phone": "555-5623"
            }
        },
        {
        "type": "transaction",
        "key": "fnfkwdsxmbs7f4k",
        "refnum": "2145983751",
        "trantype_code": "S",
        "trantype": "Credit Card Sale",
        "result_code": "A",
        "result": "Approved",
        "authcode": "707110",
        "status_code": "P",
        "status": "Authorized (Pending Settlement)",
        "creditcard": 
            {
            "cardholder": "Thelma Rogers",
            "number": "5555xxxxxxxx2226",
            "avs_street": "123 Sesame St",
            "avs_postalcode": "12345",
            "category_code": "M",
            "entry_mode": "Card Not Present, Manually Keyed"
            },
        "avs": 
            {
            "result_code": "YYY",
            "result": "Address: Match & 5 Digit Zip: Match"
            },
        "cvc": 
            {
            "result_code": "M",
            "result": "Match"
            },
        "batch": 
            {
            "type": "batch",
            "key": "0t1k3yx5xs37cvb",
            "batchrefnum": "409384",
            "sequence": "1418"
            },
        "amount": "5.00",
        "amount_detail": 
            {
            "tip": "0.50",
            "tax": "1.00",
            "shipping": "0.00",
            "discount": "0.00"
            },
        "billing_address": 
            {
            "company": "PBS",
            "first_name": "Fred",
            "last_name": "Rogers",
            "street": "143 Neighborhood Way",
            "street2": "Apt 143",
            "city": "Pittsburgh",
            "state": "PA",
            "country": "USA",
            "postalcode": "15106",
            "phone": "555-5623"
            }
        },
        {
        "type": "transaction",
        "key": "5nf0c9thbmmydfh",
        "refnum": "2145970637",
        "trantype_code": "V",
        "trantype": "Voided Credit Card Sale",
        "result_code": "A",
        "result": "Approved",
        "authcode": "707069",
        "status_code": "R",
        "status": "Voided (Funds Released)",
        "creditcard": 
            {
            "cardholder": "Cornelius Fudge",
            "number": "4444xxxxxxxx7779",
            "avs_street": "1234 Main",
            "avs_postalcode": "34545",
            "category_code": "A",
            "entry_mode": "Card Not Present, Manually Keyed"
            },
        "avs": 
            {
            "result_code": "YYY",
            "result": "Address: Match & 5 Digit Zip: Match"
            },
        "cvc": 
            {
            "result_code": "P",
            "result": "Not Processed"
            },
        "batch": 
            {
            "type": "batch",
            "key": "0t1k3yx5xs37cvb",
            "batchrefnum": "409384",
            "sequence": "1418"
            },
        "amount": "5.00",
        "amount_detail": 
            {
            "tip": "0.00",
            "tax": "0.00",
            "shipping": "0.00",
            "discount": "0.00"
            },
        "billing_address": 
            {
            "company": "Ministry of Magic",
            "first_name": "Cornelius",
            "last_name": "Fudge",
            "street": "123 Ministers Way",
            "street2": "Suite 505",
            "city": "London",
            "state": "CA",
            "country": "UK",
            "postalcode": "WC2N5DU",
            "phone": "555-867-5309"
            }
        }
    ],
"total": "5"
}

@POST/batches/current/close@

Map<String, Object> request = new HashMap<String, Object>();

String response = "";
response = USAePay.Batches.Current.Close.post(request);

@POST/batches/current/close@

{
"type": "batch",
"key": "bt1vswm59pb2488",
"batchrefnum": "403881",
"sequence": "1418",
"opened": "2018-10-15 05:04:37",
"status": "closing"
}

@GET/customers/:custkey:@

Map<String, Object> request = new HashMap<String, Object>();
request.put("custkey","fsddgkr534kt7pvc");

String response = "";
response = USAePay.Customers.get(request);

@GET/customers/:custkey:@

{
"key": "fsddgkr534kt7pvc",
"type": "customer",
"customerid": "234545",
"custid": "74183319",
"company": "Company 1",
"first_name": "Mark",
"last_name": "Hoppus",
"street": "123 Blink St",
"street2": "Apt 182",
"city": "Anytown",
"state": "CA",
"postalcode": "12345",
"country": "USA",
"phone": "555-555-5551",
"fax": "777-777-7771",
"email": "email@email.com",
"url": "www.website.com",
"notes": "I miss you",
"description": "this is for your schedule",
"billing_schedules": 
    [
        {
        "key": "an0mtryxp2d6mw9g9",
        "type": "billingschedule",
        "paymethod_key": "4n02pccv6tcmd8ky8",
        "method_name": "Travis Barker-1111",
        "amount": "10.00",
        "currency_code": "0",
        "description": "this is for your schedule",
        "enabled": "1",
        "frequency": "weekly",
        "next_date": "2018-10-22",
        "numleft": "-1",
        "orderid": "12",
        "receipt_note": "Thank you for your business! ",
        "send_receipt": "1",
        "source": "0",
        "start_date": "2017-10-12",
        "tax": "2.00",
        "user": "",
        "username": "",
        "skip_count": "1",
        "rules": 
            [
                {
                "key": "hn0vr74x82nj7tntb",
                "type": "billingschedulerule",
                "day_offset": "0",
                "month_offset": "0",
                "subject": "mon"
                }
            ]
        }
    ],
"payment_methods": 
    [
        {
        "key": "4n02pccv6tcmd8ky8",
        "type": "customerpaymentmethod",
        "method_name": "Travis Barker-1111",
        "expires": "2019-09-01",
        "card_type": "V",
        "ccnum4last": "1111",
        "avs_street": "123 Main St",
        "avs_postalcode": "90005",
        "added": "2018-08-29 16:40:24",
        "updated": "2018-08-29 16:40:24"
        },
        {
        "key": "9n02pcf95294xrgtk",
        "type": "customerpaymentmethod",
        "method_name": "Mastercard",
        "expires": "2022-09-30",
        "card_type": "M",
        "ccnum4last": "2275",
        "avs_street": "1236 Main",
        "avs_postalcode": "12345",
        "added": "2018-07-12 12:03:01",
        "updated": "2018-07-12 12:03:01"
        }
    ]
}

@GET/customers@

Map<String, Object> request = new HashMap<String, Object>();
request.put("limit","1");
request.put("offset","5");

String response = "";
response = USAePay.Customers.get(request);

@GET/customers@

{
"type": "list",
"limit": "2",
"offset": "5",
"data": 
    [
        {
        "key": "ebrnm62q29gjdm7k",
        "type": "customer",
        "customerid": "10202212",
        "custid": "78625496",
        "company": "Company Men Inc",
        "first_name": "Robert",
        "last_name": "Durst",
        "street": "1222 Verdugo Cir",
        "street2": "#303",
        "city": "Los Angeles",
        "state": "CA",
        "postalcode": "90038",
        "country": "USA",
        "phone": "8888888888",
        "fax": "7777777777",
        "email": "johndoe@anon.com",
        "url": "www.google.com",
        "notes": "Signed up during January 2018 Promotion",
        "description": "Gold Level Customer"
        },
        {
        "key": "isddgz0505vcjv20",
        "type": "customer",
        "custid": "74183322",
        "customerid": "",
        "company": "Company 2",
        "first_name": "Travis",
        "last_name": "Barker",
        "street": "789 Rock Blvd",
        "street2": "",
        "city": "Anywhere",
        "state": "NY",
        "postalcode": "12345",
        "country": "USA",
        "phone": "555-555-5553",
        "fax": "777-777-7773",
        "email": "email@email.com",
        "url": "www.website.com",
        "notes": "all the small things",
        "description": "this is for your schedule"
        }
    ],
"total": "7"
}

@POST/customers@

Map<String, Object> request = new HashMap<String, Object>();
request.put("company","Company Men Inc");
request.put("first_name","Robert");
request.put("last_name","Durst");
request.put("customerid","234545");
request.put("street","1222 Verdugo Cir");
request.put("street2","#303");
request.put("city","Los Angeles");
request.put("state","CA");
request.put("postalcode","90038");
request.put("country","USA");
request.put("phone","8888888888");
request.put("fax","7777777777");
request.put("email","johndoe@anon.com");
request.put("url","www.google.com");
request.put("notes","Signed up during January 2018 Promotion");
request.put("description","Gold Level Customer");

String response = "";
response = USAePay.Customers.post(request);

@POST/customers@

{
"key": "6sddgs2m179ykp7b",
"type": "customer",
"customerid": "234545",
"custid": "10450020",
"company": "Company Men Inc",
"first_name": "Robert",
"last_name": "Durst",
"street": "1222 Verdugo Cir",
"street2": "#303",
"city": "Los Angeles",
"state": "CA",
"postalcode": "90038",
"country": "USA",
"phone": "8888888888",
"fax": "7777777777",
"email": "johndoe@anon.com",
"url": "www.google.com",
"notes": "Signed up during January 2018 Promotion",
"description": "Gold Level Customer",
"payment_methods": "",
"billing_schedules": ""
}

@DELETE/customers/:custkey:@

Map<String, Object> request = new HashMap<String, Object>();
request.put("custkey","Example_custkey");

String response = "";
response = USAePay.Customers.delete(request);

@DELETE/customers/:custkey:@

{
"status": "success"
}

@PUT/customers/:custkey:@

Map<String, Object> request = new HashMap<String, Object>();
request.put("custkey","gbrnkzymbn2g9y3p");
request.put("company","Company Men Inc");
request.put("first_name","Robert");
request.put("last_name","");
request.put("customerid","234545");
request.put("street","1222 Verdugo Cir");
request.put("street2","#303");

String response = "";
response = USAePay.Customers.put(request);

@PUT/customers/:custkey:@

{
"key": "gbrnkzymbn2g9y3p",
"type": "customer",
"custid": "75440446",
"customerid": "234545",
"company": "Company Men Inc",
"first_name": "Robert",
"last_name": "",
"street": "1222 Verdugo Cir",
"street2": "#303",
"city": "London",
"state": "CA",
"postalcode": "WC2N5DU",
"country": "UK",
"phone": "555-867-5309",
"fax": "555-329-6363",
"email": "minister@mom.spell",
"url": "http://harrypotter.wikia.com/wiki/Cornelius_Fudge",
"notes": "Signed up during January 2018 Promotion",
"description": "Gold Level Customer",
"payment_methods": "",
"billing_schedules": ""
}

@POST/customers/enable@

Map<String, Object> request = new HashMap<String, Object>();

String response = "";
response = USAePay.Customers.Enable.post(request);

@POST/customers/enable@

{
"status": "success"
}

@POST/customers/disable@

Map<String, Object> request = new HashMap<String, Object>();

String response = "";
response = USAePay.Customers.Disable.post(request);

@POST/customers/disable@

{
"status": "success"
}

@GET/customers/:custkey:/billing_schedules/:billing_schedule_key:@

Map<String, Object> request = new HashMap<String, Object>();
request.put("custkey","ksddgpqgpbs5zkmb");
request.put("billing_schedule_key","0n0mt805n00txppn8");

String response = "";
response = USAePay.Customers.Billing_schedules.get(request);

@GET/customers/:custkey:/billing_schedules/:billing_schedule_key:@

{
"key": "0n0mt805n00txppn8",
"type": "billingschedule",
"paymethod_key": "8n02pc6tg9whk5j67",
"method_name": "Smaug Savings",
"amount": "5.00",
"currency_code": "0",
"description": "Cockroach Clusters",
"enabled": "1",
"frequency": "monthly",
"next_date": "2019-02-01",
"numleft": "12",
"orderid": "76567898",
"receipt_note": "So happy we could provide you with these gross gross candies!",
"send_receipt": "1",
"source": "0",
"start_date": "2019-01-31",
"tax": "1.00",
"user": "33956",
"username": "hgranger",
"skip_count": "1"
}

@GET/customers/:custkey:/billing_schedules@

Map<String, Object> request = new HashMap<String, Object>();
request.put("custkey","ksddgpqgpbs5zkmb");

String response = "";
response = USAePay.Customers.Billing_schedules.get(request);

@GET/customers/:custkey:/billing_schedules@

{
"type": "list",
"limit": "20",
"offset": "0",
"data": 
    [
        {
        "key": "1n0mtq7yvs3sqky8n",
        "type": "billingschedule",
        "paymethod_key": "8n02pc6tg9whk5j67",
        "method_name": "Smaug Savings",
        "amount": "25.00",
        "currency_code": "0",
        "description": "Chocolate Frog Card Value Pack",
        "enabled": "0",
        "frequency": "yearly",
        "next_date": "2019-03-15",
        "numleft": "5",
        "orderid": "877564567",
        "receipt_note": "Good Luck on getting your fave wizard cards.",
        "send_receipt": "1",
        "source": "0",
        "start_date": "2019-03-15",
        "tax": "0.00",
        "user": "",
        "username": "",
        "skip_count": "1"
        },
        {
        "key": "ln0mtq7zpq71qsytr",
        "type": "billingschedule",
        "paymethod_key": "bn02x3r42bwy833ms",
        "method_name": "Gringotts Credit",
        "amount": "5.00",
        "currency_code": "0",
        "description": "Cockroach Clusters",
        "enabled": "1",
        "frequency": "monthly",
        "next_date": "2019-03-01",
        "numleft": "12",
        "orderid": "76567898",
        "receipt_note": "So happy we could provide you with these gross gross candies!",
        "send_receipt": "1",
        "source": "0",
        "start_date": "2019-01-31",
        "tax": "1.00",
        "user": "33956",
        "username": "hgranger",
        "skip_count": "2"
        },
        {
        "key": "fn0mtq7ydjc74sd93",
        "type": "billingschedule",
        "paymethod_key": "6n02p9w1sswpgwxyh",
        "method_name": "Minerva M-1111",
        "amount": "52.00",
        "currency_code": "0",
        "description": "Lemon Drops",
        "enabled": "1",
        "frequency": "monthly",
        "next_date": "2019-02-01",
        "numleft": "-1",
        "orderid": "1881",
        "receipt_note": "Thank you for your order!",
        "send_receipt": "1",
        "source": "0",
        "start_date": "2019-01-01",
        "tax": "2.00",
        "user": "33956",
        "username": "hgranger",
        "skip_count": "1"
        }
    ],
"total": "3"
}

@POST/customers/:custkey:/billing_schedules@

Map<String, Object> request = new HashMap<String, Object>();
request.put("custkey","ksddgpqgpbs5zkmb");
    List<Map> requestList = new ArrayList<Map>();
        Map<String, Object> requestList_item = new HashMap<String, Object>();
        requestList_item.put("amount","5.00");
        requestList_item.put("currency_code","0");
        requestList_item.put("paymethod_key","8n02pc6tg9whk5j67");
        requestList_item.put("description","Cockroach Clusters");
        requestList_item.put("enabled","1");
        requestList_item.put("frequency","monthly");
        requestList_item.put("next_date","2019-01-31");
        requestList_item.put("numleft","12");
        requestList_item.put("orderid","76567898");
        requestList_item.put("receipt_note","So happy we could provide you with these gross gross candies!");
        requestList_item.put("send_receipt","1");
        requestList_item.put("source","");
        requestList_item.put("start_date","2019-02-01");
        requestList_item.put("tax","1.00");
        requestList_item.put("user","33956");
        requestList_item.put("username","hgranger");
        requestList_item.put("skip_count","2");
            List<Map> rules = new ArrayList<Map>();
                Map<String, Object> rules_item = new HashMap<String, Object>();
                rules_item.put("day_offset","1");
                rules_item.put("month_offset","0");
                rules_item.put("subject","Day");
            rules.add(rules_item);
        requestList_item.put("rules",(rules);
    requestList.add(requestList_item);
request.put("requestList",(requestList);

String response = "";
response = USAePay.Customers.Billing_schedules.post(request);

@POST/customers/:custkey:/billing_schedules@

[
    {
    "paymethod_key": "8n02pc6tg9whk5j67",
    "amount": "15.00",
    "currency_code": "0",
    "description": "Lemon Drops",
    "enabled": "1",
    "frequency": "weekly",
    "next_date": "2019-01-09",
    "numleft": "-1",
    "orderid": "12356",
    "receipt_note": "So happy we could provide you with these weird weird muggle candies!",
    "send_receipt": "1",
    "source": "",
    "start_date": "2019-01-09",
    "tax": "2.00",
    "user": "",
    "username": "",
    "skip_count": "1",
    "rules": 
        [
            {
            "day_offset": "0",
            "month_offset": "0",
            "subject": "wed"
            }
        ]
    },
    {
    "paymethod_key": "6n02p9w1sswpgwxyh",
    "amount": "5.00",
    "currency_code": "0",
    "description": "Cockroach Clusters",
    "enabled": "1",
    "frequency": "monthly",
    "next_date": "2019-02-01",
    "numleft": "12",
    "orderid": "76567898",
    "receipt_note": "So happy we could provide you with these gross gross candies!",
    "send_receipt": "1",
    "source": "",
    "start_date": "2019-01-31",
    "tax": "1.00",
    "user": "33956",
    "username": "hgranger",
    "skip_count": "1",
    "rules": 
        [
            {
            "day_offset": "1",
            "month_offset": "0",
            "subject": "Day"
            }
        ]
    },
    {
    "paymethod_key": "8n02pc6tg9whk5j67",
    "amount": "25.00",
    "currency_code": "0",
    "description": "Chocolate Frog Card Value Pack",
    "enabled": "",
    "frequency": "yearly",
    "next_date": "2019-03-15",
    "numleft": "5",
    "orderid": "877564567",
    "receipt_note": "Good Luck on getting your fave wizard cards.",
    "send_receipt": "1",
    "source": "",
    "start_date": "2019-03-15",
    "tax": "",
    "user": "",
    "username": "",
    "skip_count": "1",
    "rules": 
        [
            {
            "day_offset": "15",
            "month_offset": "03",
            "subject": "Day"
            }
        ]
    }
]

@DELETE/customers/:custkey:/billing_schedules/:billing_schedule_key:@

Map<String, Object> request = new HashMap<String, Object>();
request.put("custkey","Example_custkey");
request.put("billing_schedule_key","Example_billing_schedule_key");

String response = "";
response = USAePay.Customers.Billing_schedules.delete(request);

@DELETE/customers/:custkey:/billing_schedules/:billing_schedule_key:@

{
"status": "success"
}

@PUT/customers/:custkey:/billing_schedules/:billing_schedule_key:@

Map<String, Object> request = new HashMap<String, Object>();
request.put("custkey","Example_custkey");
request.put("billing_schedule_key","Example_billing_schedule_key");</