{"id":6594,"date":"2022-03-29T13:09:06","date_gmt":"2022-03-29T17:09:06","guid":{"rendered":"https:\/\/tranzpay.io\/getting-started-api\/clone-of-hosted-payment-method\/"},"modified":"2025-07-22T16:53:20","modified_gmt":"2025-07-22T20:53:20","slug":"hosted-vault-method","status":"publish","type":"page","link":"https:\/\/tranzpay.io\/getting-started-api\/hosted-vault-method\/","title":{"rendered":"Hosted Vault Method"},"content":{"rendered":"<h2>Hosted Vault Method<\/h2>\n<h2><\/h2>\n<h3><a href=\"https:\/\/tranzpay.io\/getting-started-api\/api-docs\/#menu_achcharge\" style=\"outline: none;\">Overview<\/a><\/h3>\n<p>This document provides technical specifications for adding customer information and financial data for future rebills through the Tranzpay gateway by interfacing with the Gateway API and a Hosted Vault Entry Page. We have written this specifically for web designers and professionals who implement and support the intended systems. We use HTTPS POST to transmit and receive data.<\/p>\n<p><b>Description:<\/b>To reduce your PCI DCSS requirements and liability, and eliminate sensitive card data footprints in your environment, Tranzpay provides a Hosted Vault Solution that provides the ability for customers to add their payment information for future rebills while adhering to all PCI requirements.<\/p>\n<h3 style=\"\">Summary of Steps Required<\/h3>\n<ol>\n<li>Send non-secure customer data in initial request to prefill Customer Name, Address, Phone, Email, Policy Number, along with your PostBack and RedirectUrl to capture and store payment results.<\/li>\n<li>Receive encrypted link via API Response to prefilled vault entry form.<\/li>\n<li>Using tokenized link, customer will enter payment information to store in PCI secure vault for future use (rebill).<\/li>\n<li>Data is saved and customer is sent to provided RedirectUrl.<\/li>\n<li>Provided PostBackUrl receives POST response and stores response in database.<\/li>\n<\/ol>\n<h2><\/h2>\n<h3>Initial Request<\/h3>\n<h2><\/h2>\n<h3>Sample Request<\/h3>\n<h3>Notes<\/h3>\n<p><b>ThirdPartyCallID<\/b>&nbsp;must be unique to every transaction.<b>PostBackUrl<\/b>&nbsp;is your API page set up to process a POST request containing results of saved entry.<b>RedirectUrl<\/b>&nbsp;is the page the customer will be directed to to view the results of the saved entry from the Postback results provided to the PostBackUrl.<b>CancelUrl<\/b>&nbsp;is the page the customer will be directed to if the vault entry is cancelled before completion, or the session times-out.<b><\/b><b>CustomerID<\/b> should be a minimum of 6 characters with no spaces, and a maximum of 45 characters.<\/p>\n<p>To test and view the postback response within the page, it is recommended to use<a href=\"https:\/\/tranzpaydev.com\/testThirdPartyCheck.php\" style=\"outline: none;\">demo.tranzpay.com\/testThirdPartyCheck.php<\/a>&nbsp;in the RedirectUrl field and&nbsp;<a href=\"https:\/\/www.tranzpaydev.com\/testSilentPostBack.php\" style=\"outline: none;\">demo.tranzpay.com\/testSilentPostBack.php<\/a> in the PostBackUrl field. These pages are for demonstration purposes only.<\/p>\n<h2><\/h2>\n<h3>Sample Initial Response<\/h3>\n<h4><\/h4>\n<h3>Postback Response<\/h3>\n<table data-rows=\"15\" data-cols=\"6\">\n<thead>\n<tr>\n<th style=\"\">\n<p style=\"\">Fieldname<\/p>\n<\/th>\n<th style=\"\">\n<p style=\"\">Required<\/p>\n<\/th>\n<th style=\"\">\n<p style=\"\">Type<\/p>\n<\/th>\n<th>\n<p style=\"\">Description<\/p>\n<\/th>\n<th style=\"\">\n<p style=\"\">Validate<\/p>\n<\/th>\n<th colspan=\"1\" rowspan=\"1\">\n<p style=\"\">Post<\/p>\n<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td data-th=\"Fieldname\" rowspan=\"1\" colspan=\"1\">\n<p>Status<\/p>\n<\/td>\n<td data-th=\"Required\" rowspan=\"1\" colspan=\"1\"><\/td>\n<td data-th=\"Type\" rowspan=\"1\" colspan=\"1\">\n<p>String<\/p>\n<\/td>\n<td data-th=\"Description\" rowspan=\"1\" colspan=\"1\">\n<p>Transaction Status<\/p>\n<\/td>\n<td data-th=\"Validate\" rowspan=\"1\" colspan=\"1\">\n<p>SUCCESS or FAILED<\/p>\n<\/td>\n<td data-th=\"Post\" colspan=\"1\" rowspan=\"1\">\n<p>Status<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-th=\"Fieldname\" rowspan=\"1\" colspan=\"1\">\n<p>CustomerID<\/p>\n<\/td>\n<td data-th=\"Required\" rowspan=\"1\" colspan=\"1\"><\/td>\n<td data-th=\"Type\" rowspan=\"1\" colspan=\"1\">\n<p>String<\/p>\n<\/td>\n<td data-th=\"Description\" rowspan=\"1\" colspan=\"1\">\n<p>Token ID for Vault Entry (Saved Payment Information)<\/p>\n<\/td>\n<td data-th=\"Validate\" rowspan=\"1\" colspan=\"1\">\n<p>Any alphanumeric. Max Len. (45)<\/p>\n<\/td>\n<td data-th=\"Post\" colspan=\"1\" rowspan=\"1\">\n<p>CustomerID<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-th=\"Fieldname\" rowspan=\"1\" colspan=\"1\">\n<p>TransactionType<\/p>\n<\/td>\n<td data-th=\"Required\" rowspan=\"1\" colspan=\"1\"><\/td>\n<td data-th=\"Type\" rowspan=\"1\" colspan=\"1\">\n<p>String<\/p>\n<\/td>\n<td data-th=\"Description\" rowspan=\"1\" colspan=\"1\">\n<p>Transaction type. (\u201cThirdPartyAddCustomer\u201d)<\/p>\n<\/td>\n<td data-th=\"Validate\" rowspan=\"1\" colspan=\"1\">\n<p>ThirdPartyAddCustomer<\/p>\n<\/td>\n<td data-th=\"Post\" colspan=\"1\" rowspan=\"1\">\n<p>TransactionType<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-th=\"Fieldname\" rowspan=\"1\" colspan=\"1\">\n<p>BankRoutingNumber<\/p>\n<\/td>\n<td data-th=\"Required\" rowspan=\"1\" colspan=\"1\"><\/td>\n<td data-th=\"Type\" rowspan=\"1\" colspan=\"1\">\n<p>String<\/p>\n<\/td>\n<td data-th=\"Description\" rowspan=\"1\" colspan=\"1\">\n<p>Bank Routing Number.<\/p>\n<\/td>\n<td data-th=\"Validate\" rowspan=\"1\" colspan=\"1\">\n<p>9 Digit Routing Number<\/p>\n<\/td>\n<td data-th=\"Post\" colspan=\"1\" rowspan=\"1\">\n<p>BankRoutingNumber<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-th=\"Fieldname\" rowspan=\"1\" colspan=\"1\">\n<p>AccountNumber<\/p>\n<\/td>\n<td data-th=\"Required\" rowspan=\"1\" colspan=\"1\"><\/td>\n<td data-th=\"Type\" rowspan=\"1\" colspan=\"1\">\n<p>String<\/p>\n<\/td>\n<td data-th=\"Description\" rowspan=\"1\" colspan=\"1\">\n<p>Bank Account Number.<\/p>\n<\/td>\n<td data-th=\"Validate\" rowspan=\"1\" colspan=\"1\">\n<p>Last 4 Digits of Account Number<\/p>\n<\/td>\n<td data-th=\"Post\" colspan=\"1\" rowspan=\"1\">\n<p>AccountNumber<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-th=\"Fieldname\" rowspan=\"1\" colspan=\"1\">\n<p>BankAccountType<\/p>\n<\/td>\n<td data-th=\"Required\" rowspan=\"1\" colspan=\"1\"><\/td>\n<td data-th=\"Type\" rowspan=\"1\" colspan=\"1\">\n<p>String<\/p>\n<\/td>\n<td data-th=\"Description\" rowspan=\"1\" colspan=\"1\">\n<p>Bank Account Type.<\/p>\n<\/td>\n<td data-th=\"Validate\" rowspan=\"1\" colspan=\"1\">\n<p>CH = Checking SV = SAVINGS<\/p>\n<\/td>\n<td data-th=\"Post\" colspan=\"1\" rowspan=\"1\">\n<p>BankAccountType<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-th=\"Fieldname\" rowspan=\"1\" colspan=\"1\">\n<p>CardType<\/p>\n<\/td>\n<td data-th=\"Required\" rowspan=\"1\" colspan=\"1\"><\/td>\n<td data-th=\"Type\" rowspan=\"1\" colspan=\"1\">\n<p>String<\/p>\n<\/td>\n<td data-th=\"Description\" rowspan=\"1\" colspan=\"1\">\n<p>Payment method card type.<\/p>\n<\/td>\n<td data-th=\"Validate\" rowspan=\"1\" colspan=\"1\">\n<p>Visa, Mastercard, Discover, Amex<\/p>\n<\/td>\n<td data-th=\"Post\" colspan=\"1\" rowspan=\"1\">\n<p>CardType<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-th=\"Fieldname\" rowspan=\"1\" colspan=\"1\">\n<p>AccountNumber<\/p>\n<\/td>\n<td data-th=\"Required\" rowspan=\"1\" colspan=\"1\"><\/td>\n<td data-th=\"Type\" rowspan=\"1\" colspan=\"1\">\n<p>Integer<\/p>\n<\/td>\n<td data-th=\"Description\" rowspan=\"1\" colspan=\"1\">\n<p>Last four digits of account number.<\/p>\n<\/td>\n<td data-th=\"Validate\" rowspan=\"1\" colspan=\"1\">\n<p>Numeric only<\/p>\n<\/td>\n<td data-th=\"Post\" colspan=\"1\" rowspan=\"1\">\n<p>AccountNumber<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-th=\"Fieldname\" rowspan=\"1\" colspan=\"1\">\n<p>ExpirationDateMMYY<\/p>\n<\/td>\n<td data-th=\"Required\" rowspan=\"1\" colspan=\"1\"><\/td>\n<td data-th=\"Type\" rowspan=\"1\" colspan=\"1\">\n<p>Integer<\/p>\n<\/td>\n<td data-th=\"Description\" rowspan=\"1\" colspan=\"1\">\n<p>2 digit month and 2 digit year<\/p>\n<\/td>\n<td data-th=\"Validate\" rowspan=\"1\" colspan=\"1\">\n<p>06\/24<\/p>\n<\/td>\n<td data-th=\"Post\" colspan=\"1\" rowspan=\"1\">\n<p>ExpirationDateMMYY<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-th=\"Fieldname\" rowspan=\"1\" colspan=\"1\">\n<p>PaymentMethod<\/p>\n<\/td>\n<td data-th=\"Required\" rowspan=\"1\" colspan=\"1\"><\/td>\n<td data-th=\"Type\" rowspan=\"1\" colspan=\"1\">\n<p>String<\/p>\n<\/td>\n<td data-th=\"Description\" rowspan=\"1\" colspan=\"1\">\n<p>Transaction Payment Type (CC or ACH)<\/p>\n<\/td>\n<td data-th=\"Validate\" rowspan=\"1\" colspan=\"1\">Cell<\/td>\n<td data-th=\"Post\" colspan=\"1\" rowspan=\"1\">\n<p>PaymentMethod<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-th=\"Fieldname\" rowspan=\"1\" colspan=\"1\">\n<p>AddDate<\/p>\n<\/td>\n<td data-th=\"Required\" rowspan=\"1\" colspan=\"1\"><\/td>\n<td data-th=\"Type\" rowspan=\"1\" colspan=\"1\">\n<p>DateTime<\/p>\n<\/td>\n<td data-th=\"Description\" rowspan=\"1\" colspan=\"1\">\n<p>AddDate<\/p>\n<\/td>\n<td data-th=\"Validate\" rowspan=\"1\" colspan=\"1\">Cell<\/td>\n<td data-th=\"Post\" colspan=\"1\" rowspan=\"1\">\n<p>02\/04\/2020 1:21:30 pm<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-th=\"Fieldname\" rowspan=\"1\" colspan=\"1\">\n<p>ThirdPartyCallID<\/p>\n<\/td>\n<td data-th=\"Required\" rowspan=\"1\" colspan=\"1\"><\/td>\n<td data-th=\"Type\" rowspan=\"1\" colspan=\"1\">\n<p>String<\/p>\n<\/td>\n<td data-th=\"Description\" rowspan=\"1\" colspan=\"1\">\n<p>Unique ID assigned by merchant for transaction.<\/p>\n<\/td>\n<td data-th=\"Validate\" rowspan=\"1\" colspan=\"1\">\n<p>Any alphanumeric. Max Len. (45)<\/p>\n<\/td>\n<td data-th=\"Post\" colspan=\"1\" rowspan=\"1\">\n<p>ThirdPartyCallID<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-th=\"Fieldname\" rowspan=\"1\" colspan=\"1\">\n<p>PolicyNumber<\/p>\n<\/td>\n<td data-th=\"Required\" rowspan=\"1\" colspan=\"1\"><\/td>\n<td data-th=\"Type\" rowspan=\"1\" colspan=\"1\">\n<p>String<\/p>\n<\/td>\n<td data-th=\"Description\" rowspan=\"1\" colspan=\"1\">\n<p>Customer policy number or equivalent.<\/p>\n<\/td>\n<td data-th=\"Validate\" rowspan=\"1\" colspan=\"1\">\n<p>Any alphanumeric<\/p>\n<\/td>\n<td data-th=\"Post\" colspan=\"1\" rowspan=\"1\">\n<p>PolicyNumber<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-th=\"Fieldname\" rowspan=\"1\" colspan=\"1\">\n<p>Error<\/p>\n<\/td>\n<td data-th=\"Required\" rowspan=\"1\" colspan=\"1\"><\/td>\n<td data-th=\"Type\" rowspan=\"1\" colspan=\"1\">\n<p>String<\/p>\n<\/td>\n<td data-th=\"Description\" rowspan=\"1\" colspan=\"1\">\n<p>Returned error Message.<\/p>\n<\/td>\n<td data-th=\"Validate\" rowspan=\"1\" colspan=\"1\">\n<p>Any alphanumeric<\/p>\n<\/td>\n<td data-th=\"Post\" colspan=\"1\" rowspan=\"1\">\n<p>Error<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4><\/h4>\n<h3>Sample Postback Success Return<\/h3>\n<h4><\/h4>\n<h3>Sample Postback Failed Return<\/h3>\n<h2>Notes<\/h2>\n<p><span>Values above can be fetched in PHP via $_POST variables. Example: on the Post Back url page just use $_POST[\u2018Status\u2019] to fetch \u201cSUCCESS\u201d or \u201cFAILED\u201d<\/span>.<\/p>\n<h4><\/h4>\n<h3>Methodology<\/h3>\n<p style=\"\">Postback response contains \u2018CustomerID\u2019 if the customer\u2019s information was successfully added the vault. Using the \u2018CustomerID\u2019 the following functions are available:<\/p>\n<h3 style=\"\">Billing a Customer:<\/h3>\n<p style=\"\">To bill a vaulted customer that was previously added to the Customer Vault, provide the CustomerID and then utilize one the following API requests:<\/p>\n<p><span style=\"font-size: 17px;\">Credit Card: <a href=\"https:\/\/tranzpay.io\/getting-started-api\/api-docs\/#menu_vaultccsale\" style=\"outline: none;\">AddCustomerCCCharge<\/a>ACH:&nbsp;<\/span><a href=\"https:\/\/tranzpay.io\/getting-started-api\/api-docs\/#menu_vaultachsale\" style=\"outline: none;\"><span style=\"font-size: 17px;\">AddCustomerACHDebit<\/span><\/a><\/p>\n<h3 style=\"\">Updating a Vault Record:<\/h3>\n<p style=\"\">To update a customer record in the vault, provide the CustomerID and utilize the&nbsp;<a href=\"https:\/\/tranzpay.io\/getting-started-api\/api-docs\/#menu_updatecustomer\" style=\"outline: none;\">UpdateCustomer<\/a>&nbsp;request.<\/p>\n<h3 style=\"\">View Vault Record:<\/h3>\n<p style=\"\">To view details of a previously stored Vault record, provide the CustomerID and utilize the&nbsp;<a href=\"https:\/\/tranzpay.io\/getting-started-api\/api-docs\/#menu_getcustomer\">GetCustomer<\/a> API Request.<\/p>\n<p>Test transactions can be submitted with the following information:<\/p>\n<table data-rows=\"7\" data-cols=\"2\">\n<thead>\n<tr>\n<th>\n<p>Card Type<\/p>\n<\/th>\n<th style=\"\">\n<p>Card Number<\/p>\n<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td data-th=\"Card Type\">\n<p>Visa<\/p>\n<\/td>\n<td data-th=\"Card Number\">\n<p>4747474747474747<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-th=\"Card Type\">\n<p>MasterCard<\/p>\n<\/td>\n<td data-th=\"Card Number\">\n<p>5431111111111111<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-th=\"Card Type\">\n<p>Discover<\/p>\n<\/td>\n<td data-th=\"Card Number\">\n<p>6011601160116611<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-th=\"Card Type\">\n<p>American Express<\/p>\n<\/td>\n<td data-th=\"Card Number\">\n<p style=\"text-align: center;\">341111111111111<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-th=\"Card Type\" rowspan=\"1\" colspan=\"1\">\n<p>Test Server<\/p>\n<\/td>\n<td data-th=\"Card Number\" rowspan=\"1\" colspan=\"1\">\n<p>https:\/\/demo.tranzpay.com\/api\/transaction.php<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-th=\"Card Type\" rowspan=\"1\" colspan=\"1\">\n<p>Production Server<\/p>\n<\/td>\n<td data-th=\"Card Number\" rowspan=\"1\" colspan=\"1\">\n<p>https:\/\/www.tranzpay.com\/api\/transaction.php<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","protected":false},"excerpt":{"rendered":"<p>Hosted Vault Method Overview This document provides technical specifications for adding customer information and financial data for future rebills through the Tranzpay gateway by interfacing with the Gateway API and a Hosted Vault Entry Page. We have written this specifically for web designers and professionals who implement and support the intended systems. We use HTTPS [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":"","tve_updated_post":"","tve_custom_css":"","tve_user_custom_css":"","tve_globals":{},"tcb2_ready":1,"tcb_editor_enabled":1,"tve_landing_page":"tcb2-shapeshift-blank-page","_tve_header":"6404","_tve_footer":"0"},"wf_page_folders":[89],"class_list":["post-6594","page","type-page","status-publish","hentry","post-wrapper","thrv_wrapper"],"_links":{"self":[{"href":"https:\/\/tranzpay.io\/getting-started-api\/wp-json\/wp\/v2\/pages\/6594","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tranzpay.io\/getting-started-api\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/tranzpay.io\/getting-started-api\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/tranzpay.io\/getting-started-api\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tranzpay.io\/getting-started-api\/wp-json\/wp\/v2\/comments?post=6594"}],"version-history":[{"count":26,"href":"https:\/\/tranzpay.io\/getting-started-api\/wp-json\/wp\/v2\/pages\/6594\/revisions"}],"predecessor-version":[{"id":1022097,"href":"https:\/\/tranzpay.io\/getting-started-api\/wp-json\/wp\/v2\/pages\/6594\/revisions\/1022097"}],"wp:attachment":[{"href":"https:\/\/tranzpay.io\/getting-started-api\/wp-json\/wp\/v2\/media?parent=6594"}],"wp:term":[{"taxonomy":"wf_page_folders","embeddable":true,"href":"https:\/\/tranzpay.io\/getting-started-api\/wp-json\/wp\/v2\/wf_page_folders?post=6594"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}