{"info":{"_postman_id":"377a90f7-f180-4853-8bc6-bc1351327e21","name":"Evertec Unified API (EVUAPI)","description":"<html><head></head><body><h1 id=\"evertec-unified-api-evuapi\">Evertec Unified API (EVUAPI)</h1>\n<blockquote>\n<p>Accept card-not-present and card-present payments on the Evertec network through one JSON API. EVUAPI takes care of terminal communication, processor connectivity and result normalization, so your application only has to create a transaction and read its result.</p>\n</blockquote>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Audience</strong></td>\n<td>Developers of merchant, POS and e-commerce applications</td>\n</tr>\n<tr>\n<td><strong>Base path</strong></td>\n<td><code>/api/v1</code></td>\n</tr>\n<tr>\n<td><strong>Protocol</strong></td>\n<td>HTTPS, TLS 1.2 or later</td>\n</tr>\n<tr>\n<td><strong>Format</strong></td>\n<td>JSON (<code>application/json</code>, UTF-8)</td>\n</tr>\n<tr>\n<td><strong>Authentication</strong></td>\n<td>Merchant identity: <code>X-Merchant-Id</code>, <code>X-Terminal-Id</code>, <code>X-Identification</code></td>\n</tr>\n<tr>\n<td><strong>Channels</strong></td>\n<td>Card-not-present (tokenized) and card-present (payment terminal)</td>\n</tr>\n<tr>\n<td><strong>Tenders</strong></td>\n<td>Credit, Debit, Cash, ATH Móvil</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"what-you-can-do\">What you can do</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Capability</th>\n<th>Requests</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Take tokenized payments</td>\n<td><strong>CNP → Credit</strong>: Sale, Auth, Force, Void, Return</td>\n</tr>\n<tr>\n<td>Take in-person payments on a terminal</td>\n<td><strong>CP → Credit / Cash / ATH Móvil</strong> (Debit uses the Credit requests with <code>paymentType=6</code>)</td>\n</tr>\n<tr>\n<td>Settle the day's transactions</td>\n<td><strong>CNP → Batch</strong> and <strong>CP → Batch</strong>: Close Batch</td>\n</tr>\n<tr>\n<td>Track any transaction</td>\n<td><strong>Get Transaction Status</strong></td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"environments\">Environments</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Environment</th>\n<th>Base URL</th>\n<th>Use</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Sandbox</td>\n<td><code>https://webtest.chargeanywhere.com/evuapi</code></td>\n<td>Development and certification. No real money moves.</td>\n</tr>\n<tr>\n<td>Production</td>\n<td>Provided by Charge Anywhere at go-live</td>\n<td>Live payments.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Sandbox and production use <strong>different credentials</strong>. Keep each environment in its own Postman environment, and never mix them.</p>\n<h2 id=\"get-started-in-five-minutes\">Get started in five minutes</h2>\n<ol>\n<li><strong>Get credentials.</strong> Charge Anywhere gives you a Merchant ID, Terminal ID and terminal Identification, plus a payment token for CNP testing.</li>\n<li><strong>Import the collection and the sandbox environment.</strong> Put your values in the environment, not in the collection. The collection ships with empty credential variables on purpose.</li>\n<li><strong>Select the environment</strong> in Postman's environment picker.</li>\n<li><strong>Send CNP → Credit → Sale.</strong> The response is final (<code>Completed=true</code>) and should show <code>Status=Approved</code>.</li>\n<li><strong>Send CNP → Credit → Void.</strong> It uses the values the Sale saved automatically.</li>\n<li><strong>Try card-present.</strong> Make sure your terminal is online, send <strong>CP → Credit → Sale</strong> and complete the payment on the terminal. If the response has <code>Completed=false</code>, send <strong>Get Transaction Status</strong> until it's final.</li>\n</ol>\n<h2 id=\"authentication\">Authentication</h2>\n<p>Each request identifies the merchant/terminal relationship with three values issued during onboarding. EVUAPI uses them to authorize the request and to make sure a merchant can only read its own transactions.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header (POST)</th>\n<th>Body field (POST)</th>\n<th>Query parameter (GET status)</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>X-Merchant-Id</code></td>\n<td><code>merchantId</code></td>\n<td><code>merchantId</code></td>\n<td>Merchant ID.</td>\n</tr>\n<tr>\n<td><code>X-Terminal-Id</code></td>\n<td><code>terminalId</code></td>\n<td><code>terminalId</code></td>\n<td>Merchant terminal ID. A string; keep leading zeros.</td>\n</tr>\n<tr>\n<td><code>X-Identification</code></td>\n<td><code>identification</code></td>\n<td><code>identification</code></td>\n<td>Physical terminal / device identity.</td>\n</tr>\n</tbody>\n</table>\n</div><p>On <code>POST</code>, the header and body values <strong>must match</strong>.</p>\n<blockquote>\n<p>🔒 <strong>Treat these values as credentials.</strong> Keep them in a secret manager or in Postman environment <em>current values</em>. Never commit them to source control or include them in screenshots, logs or exported collections.</p>\n</blockquote>\n<h2 id=\"request-conventions\">Request conventions</h2>\n<ul>\n<li><strong>Money:</strong> JSON numbers with 2 decimal places. Calculate with a decimal type, not binary floating point.<ul>\n<li><code>tax = stateTax + cityTax + reducedTax</code></li>\n<li><code>subTotal = amountOfSale</code></li>\n<li><code>grandTotal = subTotal + tax + tips + cashBack + fee</code></li>\n</ul>\n</li>\n<li><strong>Identifiers:</strong> send <code>terminalId</code>, reference numbers and codes as <strong>strings</strong>, and keep leading zeros.</li>\n<li><strong>Date/time:</strong> <code>terminalDateTime</code> is local time in ISO 8601 with no offset (<code>yyyy-MM-ddTHH:mm:ss</code>). Response dates use <code>MMddyyyy</code> and times use <code>HHmmss</code>.</li>\n<li><strong>Casing:</strong> send request fields in camelCase. Responses use <strong>PascalCase</strong> at the top level and <strong>snake_case</strong> inside <code>EvertecResponse</code>. Parse top-level names case-insensitively.</li>\n<li><strong>Forward compatibility:</strong> EVUAPI may add optional properties and new enum values. Ignore properties you don't recognize, and handle unknown enum values gracefully.</li>\n</ul>\n<h2 id=\"transaction-types\">Transaction types</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>transactionType</th>\n<th>Operation</th>\n<th>Purpose</th>\n<th>Kind</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>1</td>\n<td>Sale</td>\n<td>Authorize and capture in one step.</td>\n<td>Originating</td>\n</tr>\n<tr>\n<td>2</td>\n<td>Void</td>\n<td>Cancel a prior transaction (normally before settlement).</td>\n<td>Follow-up</td>\n</tr>\n<tr>\n<td>3</td>\n<td>Return</td>\n<td>Refund money to the cardholder / customer.</td>\n<td>Follow-up (linked) or standalone</td>\n</tr>\n<tr>\n<td>4</td>\n<td>Force</td>\n<td>Complete (capture) a prior Auth / PreAuth.</td>\n<td>Follow-up</td>\n</tr>\n<tr>\n<td>6</td>\n<td>Auth (AuthOnly / PreAuth)</td>\n<td>Authorize funds without capturing them.</td>\n<td>Originating</td>\n</tr>\n<tr>\n<td>12</td>\n<td>Close Batch</td>\n<td>Settle the current batch. Not a payment.</td>\n<td>Batch operation</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"payment-types\">Payment types</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>paymentType</th>\n<th>Tender</th>\n<th>CNP</th>\n<th>CP</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>2</td>\n<td>Credit</td>\n<td>Sale, Auth, Force, Void, Return</td>\n<td>Sale, Auth, Force, Void, Return</td>\n</tr>\n<tr>\n<td>6</td>\n<td>Debit</td>\n<td>n/a</td>\n<td>Sale, Auth, Force, Void, Return ¹</td>\n</tr>\n<tr>\n<td>5</td>\n<td>Cash</td>\n<td>n/a</td>\n<td>Sale, Return</td>\n</tr>\n<tr>\n<td>13</td>\n<td>ATH Móvil</td>\n<td>n/a</td>\n<td>Sale, Return</td>\n</tr>\n<tr>\n<td>0 / 2</td>\n<td>Batch (not a tender)</td>\n<td>Close Batch (<code>paymentType=0</code>)</td>\n<td>Close Batch (<code>paymentType=2</code>) ²</td>\n</tr>\n</tbody>\n</table>\n</div><p>¹ Use the CP Credit requests with <code>paymentType=6</code>.<br>² Close Batch is a batch operation, not a tender. CNP uses <code>paymentType=0</code>. CP uses <code>paymentType=2</code> because the field must be positive; it doesn't affect routing.</p>\n<h2 id=\"transaction-lifecycle\">Transaction lifecycle</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-text\">Pending ─► SentToTerminal ─► ReceivedByTerminal ─► Processing ─┬─► Approved\n                                                               ├─► Declined\n        (card-present; CNP normally returns a final status)    ├─► Failed\n                                                               ├─► TimedOut\n                                                               └─► Cancelled\n</code></pre>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Status</th>\n<th>Final?</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Pending</code></td>\n<td>No</td>\n<td>EVUAPI saved the CP request. Dispatch to the terminal is queued.</td>\n</tr>\n<tr>\n<td><code>SentToTerminal</code></td>\n<td>No</td>\n<td>The request was sent to the terminal.</td>\n</tr>\n<tr>\n<td><code>ReceivedByTerminal</code></td>\n<td>No</td>\n<td>The terminal confirmed it received the request.</td>\n</tr>\n<tr>\n<td><code>Processing</code></td>\n<td>No</td>\n<td>The terminal is working with the cardholder, or the processor is working on the request.</td>\n</tr>\n<tr>\n<td><code>Approved</code></td>\n<td><strong>Yes</strong></td>\n<td>The transaction was approved. Check that <code>Completed=true</code>.</td>\n</tr>\n<tr>\n<td><code>Declined</code></td>\n<td><strong>Yes</strong></td>\n<td>The processor or gateway declined the transaction. Check that <code>Completed=true</code>.</td>\n</tr>\n<tr>\n<td><code>Failed</code></td>\n<td><strong>Yes</strong></td>\n<td>Processing could not complete successfully.</td>\n</tr>\n<tr>\n<td><code>TimedOut</code></td>\n<td><strong>Yes</strong></td>\n<td>The terminal workflow hit its processing deadline.</td>\n</tr>\n<tr>\n<td><code>Cancelled</code></td>\n<td><strong>Yes</strong></td>\n<td>The transaction was cancelled before it was approved.</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Rule:</strong> a transaction is finished only when <code>Completed=true</code>. Never treat an intermediate status as an approval.</p>\n<h2 id=\"response-envelope\">Response envelope</h2>\n<p>The create call and <strong>Get Transaction Status</strong> return the same envelope.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>RequestId</code></td>\n<td>string</td>\n<td>EVUAPI's ID for this transaction: 32 lowercase hex characters, no hyphens. Save it right away. You need it to get the status and to contact support.</td>\n</tr>\n<tr>\n<td><code>Status</code></td>\n<td>string</td>\n<td>Current lifecycle state. See <strong>Transaction statuses</strong>.</td>\n</tr>\n<tr>\n<td><code>Completed</code></td>\n<td>boolean</td>\n<td><code>true</code> only when <code>Status</code> is final. While it is <code>false</code>, keep polling <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><code>ResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Result code normalized by EVUAPI. See <strong>Response codes</strong>. Keep it as a string (it can have leading zeros). <code>null</code> while not final.</td>\n</tr>\n<tr>\n<td><code>ProcessorResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Raw code from the processor or terminal, such as <code>00</code> or <code>68</code>. An empty string means the processor was never reached.</td>\n</tr>\n<tr>\n<td><code>ResponseText</code></td>\n<td>string (nullable)</td>\n<td>Readable result text from the processor, gateway or EVUAPI. Show it to operators, but don't parse it.</td>\n</tr>\n<tr>\n<td><code>EvertecResponse</code></td>\n<td>object (nullable)</td>\n<td>Processor-specific details. <strong>CNP:</strong> a fixed, ordered shape. <strong>CP:</strong> the terminal's raw final result. <code>null</code> while not final. See the <em>CNP</em> and <em>CP</em> folder docs.</td>\n</tr>\n<tr>\n<td><code>ApprovalCode</code></td>\n<td>string (nullable)</td>\n<td>Processor authorization code, normally 6 characters. It can also be filled in on a <strong>decline</strong>, so never use it alone to decide approval.</td>\n</tr>\n<tr>\n<td><code>GatewayReferenceNumber</code></td>\n<td>string (nullable)</td>\n<td>Charge Anywhere gateway reference: 12 digits, keep the leading zeros. Send it as <code>originalGatewayReferenceNumber</code> on a later Force, Void or Return.</td>\n</tr>\n<tr>\n<td><code>AuthorizedAmount</code></td>\n<td>number (nullable)</td>\n<td>Amount the processor authorized. <code>0</code> on an approved Void. <code>null</code> when nothing was authorized.</td>\n</tr>\n<tr>\n<td><code>TokenNumber</code></td>\n<td>string (nullable)</td>\n<td>CNP: the payment token for the transaction. CP: <code>null</code>. <strong>Sensitive.</strong></td>\n</tr>\n<tr>\n<td><code>CardType</code></td>\n<td>string (nullable)</td>\n<td>Card brand or tender code. See <strong>Card type codes</strong>.</td>\n</tr>\n<tr>\n<td><code>StatusUrl</code></td>\n<td>string</td>\n<td>Relative path of the status resource, e.g. <code>/api/v1/transactions/{RequestId}</code>. Put <code>https://webtest.chargeanywhere.com/evuapi</code> in front and add the three identity query parameters.</td>\n</tr>\n<tr>\n<td><code>ErrorId</code></td>\n<td>string (nullable)</td>\n<td>ID of an error that EVUAPI logged. Give it to Charge Anywhere support.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response-codes\">Response codes</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>ResponseCode</th>\n<th>Meaning</th>\n<th>Description</th>\n<th>What to do</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>000</code></td>\n<td>Approved</td>\n<td>The processor approved the transaction.</td>\n<td>Approved. Check <code>AuthorizedAmount</code>.</td>\n</tr>\n<tr>\n<td><code>010</code></td>\n<td>Approved (terminal code <code>10</code>)</td>\n<td>Terminal <code>approval_code=10</code>. In ISO 8583, <code>10</code> means <em>partial approval</em>.</td>\n<td>Compare <code>AuthorizedAmount</code> with the <code>grandTotal</code> you requested, and collect any balance another way.</td>\n</tr>\n<tr>\n<td><code>FFE</code></td>\n<td>Declined</td>\n<td>The processor declined the transaction (for example insufficient funds, referral, hold card).</td>\n<td>Don't retry the same payment unchanged. Ask the customer for another payment method.</td>\n</tr>\n<tr>\n<td><code>FFF</code></td>\n<td>Not approved (other)</td>\n<td>Any other card-present result that is not an approval.</td>\n<td>Treat as not approved. Check <code>ResponseText</code> and <code>ProcessorResponseCode</code>.</td>\n</tr>\n<tr>\n<td><code>FE6</code></td>\n<td>Invalid transaction data</td>\n<td>The gateway rejected the request before it reached the processor. <code>ProcessorResponseCode</code> and <code>GatewayReferenceNumber</code> are empty.</td>\n<td>Fix the request data (for example stale <code>original*</code> values) before you send it again.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Base business decisions on <strong><code>Status</code> + <code>Completed</code></strong>. Use <code>ResponseCode</code> and <code>ProcessorResponseCode</code> for reporting and troubleshooting.</p>\n<h2 id=\"card-type-codes\">Card type codes</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>CardType</th>\n<th>Brand / tender</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>1</code></td>\n<td>Visa</td>\n</tr>\n<tr>\n<td><code>2</code></td>\n<td>Mastercard</td>\n</tr>\n<tr>\n<td><code>3</code></td>\n<td>American Express</td>\n</tr>\n<tr>\n<td><code>4</code></td>\n<td>Discover</td>\n</tr>\n<tr>\n<td><code>994</code></td>\n<td>ATH Móvil (seen on CP)</td>\n</tr>\n<tr>\n<td><code>999</code></td>\n<td>Cash (seen on CP)</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"http-status-codes\">HTTP status codes</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>HTTP status</th>\n<th>Meaning</th>\n<th>What to do</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>200 OK</code></td>\n<td>Request processed. The body has the current or final state. <strong>A decline is also returned as 200.</strong></td>\n<td>Read <code>Completed</code> and <code>Status</code>.</td>\n</tr>\n<tr>\n<td><code>202 Accepted</code></td>\n<td>Card-present request accepted. The result is not final yet.</td>\n<td>Poll <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><code>4xx</code></td>\n<td>Validation, identity or authorization problem, or resource not found.</td>\n<td>Fix the request. Don't retry unchanged.</td>\n</tr>\n<tr>\n<td><code>5xx</code></td>\n<td>Service or dependency failure.</td>\n<td>Save <code>ErrorId</code>. Check the status by <code>RequestId</code> before any retry.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"errors-retries-and-reconciliation\">Errors, retries and reconciliation</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Situation</th>\n<th>What to do</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>HTTP success, <code>Completed=false</code></td>\n<td>The payment isn't final. Poll <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td>HTTP success, <code>Completed=true</code></td>\n<td>Final. Decide from <code>Status</code> and save the full response.</td>\n</tr>\n<tr>\n<td>Create call timed out <strong>after</strong> you got a <code>RequestId</code></td>\n<td>Get the status. <strong>Don't</strong> submit a replacement transaction.</td>\n</tr>\n<tr>\n<td>Create call outcome unknown (no <code>RequestId</code>)</td>\n<td>Reconcile with your order reference and contact support before you retry. A blind retry can charge the customer twice.</td>\n</tr>\n<tr>\n<td>Status call fails temporarily</td>\n<td>Retry with bounded exponential backoff and jitter.</td>\n</tr>\n<tr>\n<td>Validation or authorization failure</td>\n<td>Fix the configuration or the request data. Don't retry unchanged.</td>\n</tr>\n<tr>\n<td>Service failure</td>\n<td>Keep <code>RequestId</code> and <code>ErrorId</code>, and contact support if it persists.</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Duplicate protection:</strong> save <code>RequestId</code> before doing anything else. It is your handle for recovering a transaction, and you should never resend a create request automatically.</p>\n<p><strong>Polling:</strong> poll every 2 seconds for the first 10 seconds, then every 5 seconds with jitter, up to an overall deadline that suits your checkout (for example 3 minutes for card-present). Stop as soon as <code>Completed=true</code>.</p>\n<h2 id=\"security-and-compliance\">Security and compliance</h2>\n<ul>\n<li><strong>Minimize card data.</strong> CNP uses payment tokens, and CP card data is captured on the terminal, so card numbers never pass through your application. This helps keep your PCI DSS scope small.</li>\n<li><strong>Protect credentials and tokens.</strong> Store them in a secret manager and rotate them if they are exposed.</li>\n<li><strong>Never log</strong> payment tokens, identity values, or full request/response bodies that contain them.</li>\n<li><strong>Treat receipts as sensitive.</strong> Card-present receipts include masked card data and EMV data, and may include a signature image.</li>\n<li><strong>Use HTTPS only</strong>, with certificate validation turned on.</li>\n</ul>\n<h2 id=\"using-this-collection\">Using this collection</h2>\n<h3 id=\"variables\">Variables</h3>\n<p>Put credentials and environment-specific values in a Postman <strong>environment</strong>; its values take precedence over collection defaults. Each variable's description is on the collection's <strong>Variables</strong> tab.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Variable</th>\n<th>Set by</th>\n<th>Purpose</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>BaseUrl</code></td>\n<td>Environment</td>\n<td>EVUAPI base URL.</td>\n</tr>\n<tr>\n<td><code>MerchantId</code>, <code>TerminalId</code>, <code>Identification</code></td>\n<td>Environment</td>\n<td>Merchant identity, sent in headers, body and status query.</td>\n</tr>\n<tr>\n<td><code>TokenNumber</code></td>\n<td>Environment</td>\n<td>CNP payment token.</td>\n</tr>\n<tr>\n<td><code>StationNumber</code>, <code>CashierId</code></td>\n<td>You</td>\n<td>Station and cashier sent with each transaction.</td>\n</tr>\n<tr>\n<td><code>AppVersion</code></td>\n<td>You</td>\n<td>Your application's version, sent as <code>appVersion</code>.</td>\n</tr>\n<tr>\n<td><code>AmountOfSale</code>, <code>StateTax</code>, <code>CityTax</code>, <code>ReducedTax</code>, <code>Tips</code>, <code>CashBack</code>, <code>Fee</code>, <code>BaseStateTax</code>, <code>BaseReducedTax</code></td>\n<td>You</td>\n<td>Amount inputs.</td>\n</tr>\n<tr>\n<td><code>SubTotal</code>, <code>Tax</code>, <code>GrandTotal</code></td>\n<td>Pre-request script</td>\n<td>Recalculated before every request.</td>\n</tr>\n<tr>\n<td><code>RequestId</code></td>\n<td>Test scripts</td>\n<td>Latest <code>RequestId</code>, used by <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><code>OriginalAmount</code>, <code>OriginalApprovalCode</code>, <code>OriginalGatewayReferenceNumber</code></td>\n<td>Test scripts</td>\n<td>Values carried into Force, Void and Return.</td>\n</tr>\n<tr>\n<td><code>ErrorId</code></td>\n<td>Test scripts</td>\n<td>Latest <code>ErrorId</code> returned.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"scripts\">Scripts</h3>\n<ul>\n<li><strong>Pre-request (collection):</strong> calculates <code>SubTotal</code>, <code>Tax</code> and <code>GrandTotal</code> from the amount inputs and writes them in local scope, so the calculated totals are always what gets sent. The totals are logged to the Postman console.</li>\n<li><strong>Tests (collection and request):</strong> save <code>RequestId</code>, <code>ErrorId</code> and the <code>Original*</code> values from each response, and check the response contract.</li>\n</ul>\n<h3 id=\"recommended-run-order\">Recommended run order</h3>\n<ol>\n<li><strong>CNP → Credit:</strong> Sale → Void, then Auth → Force → Return.</li>\n<li><strong>CP → Credit / Cash / ATH Móvil:</strong> Sale → Void or Return. Run <strong>Get Transaction Status</strong> after any <code>Completed=false</code> response.</li>\n<li><strong>Close Batch</strong> for each channel at the end of the cycle.</li>\n</ol>\n<p>The <code>Original*</code> variables always hold the <strong>most recent</strong> response, declines included, so run each follow-up straight after the transaction it refers to.</p>\n<h2 id=\"card-present-terminal-readiness\">Card-present terminal readiness</h2>\n<p>Before a card-present request can succeed, the terminal identified by <code>identification</code> must be enrolled with EVUAPI by Charge Anywhere, powered on, connected to the internet, and running the Charge Anywhere payment applications. If a CP request stays at <code>Pending</code> or <code>SentToTerminal</code>, check the terminal's power and connectivity first.</p>\n<h2 id=\"go-live-checklist\">Go-live checklist</h2>\n<ul>\n<li> Every transaction type you use is certified in sandbox, including declines and follow-ups.</li>\n<li> <code>RequestId</code> is saved with your order reference before any other processing.</li>\n<li> Card-present polling uses backoff, jitter and an overall deadline.</li>\n<li> Create requests are never resent automatically after a timeout.</li>\n<li> Money uses decimal arithmetic, and the total formulas are checked before sending.</li>\n<li> Outcomes are decided from <code>Status</code> + <code>Completed</code>, not from the HTTP status or <code>ApprovalCode</code>.</li>\n<li> <code>terminalDateTime</code> is the actual local time of the request.</li>\n<li> Credentials and tokens are in a secret store, and logs have been reviewed for sensitive data.</li>\n<li> Receipts and IVU control lines are printed or stored as required.</li>\n<li> Daily Close Batch and reconciliation are scheduled.</li>\n<li> Production base URL and credentials have been received and set up in a separate environment.</li>\n</ul>\n<h2 id=\"support\">Support</h2>\n<p>Contact your Charge Anywhere integration representative. To speed things up, include:</p>\n<ul>\n<li>Environment (sandbox or production) and the UTC time of the request</li>\n<li><code>RequestId</code> and, if returned, <code>ErrorId</code></li>\n<li>The request type (channel, tender, operation) and the HTTP status you received</li>\n<li>Your Merchant ID and Terminal ID, masked except for the last 4 characters</li>\n</ul>\n<p>Never send payment tokens or full credentials to support.</p>\n<h2 id=\"glossary\">Glossary</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Term</th>\n<th>Definition</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>CNP</strong></td>\n<td>Card not present: a token-based transaction with no physical card at a terminal.</td>\n</tr>\n<tr>\n<td><strong>CP</strong></td>\n<td>Card present: a transaction completed on the merchant's payment terminal.</td>\n</tr>\n<tr>\n<td><strong>RequestId</strong></td>\n<td>EVUAPI's ID for a transaction, used to get its status.</td>\n</tr>\n<tr>\n<td><strong>GatewayReferenceNumber</strong></td>\n<td>Charge Anywhere gateway reference, used to identify a transaction in follow-ups.</td>\n</tr>\n<tr>\n<td><strong>Completed</strong></td>\n<td><code>true</code> when a transaction has reached a final state.</td>\n</tr>\n<tr>\n<td><strong>Close Batch</strong></td>\n<td>Settles every open transaction in the current batch.</td>\n</tr>\n<tr>\n<td><strong>IVU</strong></td>\n<td><em>Impuesto sobre Ventas y Uso</em>: Puerto Rico sales and use tax.</td>\n</tr>\n</tbody>\n</table>\n</div></body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"Evertec Unified API (EVUAPI)","slug":"evertec-unified-api-evuapi"}],"owner":"22768899","collectionId":"377a90f7-f180-4853-8bc6-bc1351327e21","publishedId":"2sBYB4Mn7q","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-09-30T11:16:50.000Z"},"item":[{"name":"Transactions","item":[{"name":"CNP","item":[{"name":"Credit","item":[{"name":"Sale","event":[{"listen":"test","script":{"type":"text/javascript","exec":["let body = {};","try { body = pm.response.json(); } catch (e) {}","const requestId = body.requestId || body.RequestId;","const gatewayReferenceNumber = body.gatewayReferenceNumber || body.GatewayReferenceNumber;","const authorizedAmount = body.authorizedAmount !== undefined ? body.authorizedAmount : body.AuthorizedAmount;","const errorId = body.errorId || body.ErrorId;","if (requestId) pm.collectionVariables.set('RequestId', requestId);","if (gatewayReferenceNumber) pm.collectionVariables.set('OriginalGatewayReferenceNumber', gatewayReferenceNumber);","if (authorizedAmount !== undefined && authorizedAmount !== null) pm.collectionVariables.set('OriginalAmount', authorizedAmount);","if (errorId) pm.collectionVariables.set('ErrorId', errorId);","pm.test('Transaction request accepted', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });","const originalApprovalCode = body.approvalCode || body.ApprovalCode || (body.data && (body.data.approvalCode || body.data.ApprovalCode));","if (originalApprovalCode) pm.collectionVariables.set('OriginalApprovalCode', originalApprovalCode);","","let requestBody = {};","try { requestBody = JSON.parse(pm.variables.replaceIn(pm.request.body.raw || '{}')); } catch (e) {","  console.warn('Unable to parse request body for CNP response validation:', e.message);","}","","const evertecResponse = body.EvertecResponse || body.evertecResponse;","const isSuccess = pm.response.code >= 200 && pm.response.code < 300;","","if (isSuccess) {","  pm.test('CNP EvertecResponse is present', function () {","    pm.expect(evertecResponse).to.be.an('object');","  });","}","","if (isSuccess && evertecResponse && typeof evertecResponse === 'object') {","  const expectedKeys = [","    'trace_number', 'batch_number', 'card_acceptor_id', 'special_account',","    'merchant_id', 'pan_card_number', 'reference', 'receipt_output',","    'amounts', 'authorization_code', 'emv_data', 'signature_indicator',","    'transaction_time', 'payment_host', 'invoice_number', 'terminal_id',","    'merchant_vid', 'transaction_date', 'approval_code', 'cashier_id',","    'manual_entry_indicator', 'ivu', 'process_cashback', 'card_bin_type',","    'terminal_vid', 'station_number', 'response_message', 'receipt_email',","    'transaction_type_indicator', 'entry_type', 'fallback'","  ];","","  pm.test('CNP EvertecResponse has the CP-compatible ordered shape', function () {","    pm.expect(Object.keys(evertecResponse)).to.eql(expectedKeys);","  });","","  pm.test('CNP EvertecResponse nested objects have the expected keys', function () {","    pm.expect(Object.keys(evertecResponse.receipt_output || {})).to.eql(['merchant', 'customer']);","    pm.expect(Object.keys(evertecResponse.amounts || {})).to.eql(['total', 'base_state_tax', 'tip', 'reduced_tax', 'base_reduced_tax', 'state_tax', 'city_tax']);","    pm.expect(evertecResponse.emv_data).to.be.an('object');","    pm.expect(Object.keys(evertecResponse.emv_data || {})).to.eql([]);","    pm.expect(Object.keys(evertecResponse.ivu || {})).to.eql(['control_line1', 'control_line2']);","  });","","  pm.test('CNP static Evertec fields are correct', function () {","    pm.expect(evertecResponse.card_acceptor_id).to.eql('NONE');","    pm.expect(evertecResponse.signature_indicator).to.eql('NOSIGN');","    pm.expect(evertecResponse.payment_host).to.eql('ATH1');","    pm.expect(evertecResponse.manual_entry_indicator).to.eql('yes');","    pm.expect(evertecResponse.receipt_email).to.eql('no');","    pm.expect(evertecResponse.entry_type).to.eql('MANUAL');","    pm.expect(evertecResponse.emv_data).to.be.an('object');","    pm.expect(Object.keys(evertecResponse.emv_data || {})).to.eql([]);","  });","","  pm.test('CNP transaction and merchant enrichment fields are present', function () {","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'trace_number')).to.eql(true);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'merchant_id')).to.eql(true);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'merchant_vid')).to.eql(true);","  });","","  if (evertecResponse.merchant_id !== null && evertecResponse.merchant_id !== undefined) {","    pm.test('CNP merchant_id is trimmed and no longer than 19 characters', function () {","      pm.expect(evertecResponse.merchant_id).to.eql(String(evertecResponse.merchant_id).trim());","      pm.expect(String(evertecResponse.merchant_id).length).to.be.at.most(19);","    });","  }","","  if (evertecResponse.merchant_vid !== null && evertecResponse.merchant_vid !== undefined) {","    pm.test('CNP merchant_vid is trimmed and no longer than 19 characters', function () {","      pm.expect(evertecResponse.merchant_vid).to.eql(String(evertecResponse.merchant_vid).trim());","      pm.expect(String(evertecResponse.merchant_vid).length).to.be.at.most(19);","    });","  }","","  if (evertecResponse.merchant_id && evertecResponse.merchant_vid) {","    pm.test('CNP merchant_id and merchant_vid use the same P-048 value', function () {","      pm.expect(evertecResponse.merchant_vid).to.eql(evertecResponse.merchant_id);","    });","  }","","  if (requestBody.stationNumber !== undefined && requestBody.stationNumber !== null) {","    pm.test('CNP station_number echoes request stationNumber', function () {","      pm.expect(String(evertecResponse.station_number)).to.eql(String(requestBody.stationNumber));","    });","  }","","  const indicatorByPaymentType = { 2: 'C', 5: 'I', 6: 'D', 7: 'E', 8: 'E', 13: 'A' };","  const expectedIndicator = indicatorByPaymentType[Number(requestBody.paymentType)];","  if (expectedIndicator) {","    pm.test('CNP transaction_type_indicator matches paymentType', function () {","      pm.expect(evertecResponse.transaction_type_indicator).to.eql(expectedIndicator);","    });","  }","","  const specialByPaymentType = { 5: 'IC', 6: 'AT', 7: 'EC', 8: 'EB', 13: 'AM' };","  const expectedNonCreditSpecial = specialByPaymentType[Number(requestBody.paymentType)];","  if (expectedNonCreditSpecial) {","    pm.test('CNP special_account matches non-credit paymentType', function () {","      pm.expect(evertecResponse.special_account).to.eql(expectedNonCreditSpecial);","    });","  }","","  if (Number(requestBody.paymentType) === 2) {","    const supportedCardBinTypes = [null, 'VISA', 'MASTERCARD', 'AMEX', 'DISCOVER'];","    pm.test('CNP card_bin_type is null or a supported CreditCardType brand', function () {","      pm.expect(evertecResponse.card_bin_type).to.be.oneOf(supportedCardBinTypes);","    });","","    const specialByCardBinType = { VISA: 'VC', MASTERCARD: 'MC', AMEX: 'AX', DISCOVER: 'DC' };","    const expectedCreditSpecial = specialByCardBinType[evertecResponse.card_bin_type];","    if (expectedCreditSpecial) {","      pm.test('CNP credit special_account matches card_bin_type', function () {","        pm.expect(evertecResponse.special_account).to.eql(expectedCreditSpecial);","      });","    }","  }","","  pm.test('EvertecResponse suppresses App2-only correlation fields', function () {","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'last_reference')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'trx_id')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'session_id')).to.eql(false);","  });","}"],"id":"c6418000-eedc-48c6-813f-cffc31544d55"}}],"id":"3f75aef8-ea87-4ec4-a52e-5ca3795acf78","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 2,\n  \"transactionType\": 1,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": false,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"<h1 id=\"cnp-credit-sale\">CNP Credit Sale</h1>\n<blockquote>\n<p>Authorizes <strong>and</strong> captures a payment in one step.</p>\n</blockquote>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Endpoint</strong></td>\n<td><code>POST https://webtest.chargeanywhere.com/evuapi/api/v1/transactions</code></td>\n</tr>\n<tr>\n<td><strong>Channel</strong></td>\n<td>Card-not-present (CNP) · <code>cardPresent=false</code></td>\n</tr>\n<tr>\n<td><strong>Tender</strong></td>\n<td>Credit (<code>paymentType=2</code>)</td>\n</tr>\n<tr>\n<td><strong>Operation</strong></td>\n<td>Sale (<code>transactionType=1</code>)</td>\n</tr>\n<tr>\n<td><strong>Processing model</strong></td>\n<td><strong>Synchronous.</strong> The final result is returned in this response (<code>Completed=true</code>).</td>\n</tr>\n<tr>\n<td><strong>Caller</strong></td>\n<td>Merchant or POS application</td>\n</tr>\n<tr>\n<td><strong>Authentication</strong></td>\n<td>Merchant identity headers <code>X-Merchant-Id</code>, <code>X-Terminal-Id</code>, <code>X-Identification</code></td>\n</tr>\n<tr>\n<td><strong>Financial impact</strong></td>\n<td>Money is authorized and queued for settlement in the current batch.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"overview\">Overview</h2>\n<p>Use Sale when goods or services are delivered right away and the final amount is known. Sale is an <strong>originating</strong> transaction, so it has no <code>original*</code> fields.</p>\n<h2 id=\"before-you-call\">Before you call</h2>\n<ul>\n<li><code></code> must hold a valid Charge Anywhere payment token for this merchant.</li>\n<li>Set <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code> and <code></code> in your active environment.</li>\n</ul>\n<h2 id=\"request\">Request</h2>\n<h3 id=\"headers\">Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Required</th>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Content-Type</code></td>\n<td>Yes</td>\n<td><code>application/json</code></td>\n<td>The request body is JSON.</td>\n</tr>\n<tr>\n<td><code>Accept</code></td>\n<td>Recommended</td>\n<td><code>application/json</code></td>\n<td>Asks for a JSON response.</td>\n</tr>\n<tr>\n<td><code>X-Merchant-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant identity. Must match body <code>merchantId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Terminal-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant terminal identity (keep leading zeros). Must match body <code>terminalId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Identification</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Physical terminal identity. Must match body <code>identification</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"body-parameters\">Body parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Value in this request</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>merchantId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant ID that Charge Anywhere issued for this integration. Must be the same as the <code>X-Merchant-Id</code> header.</td>\n</tr>\n<tr>\n<td><code>identification</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Physical terminal / device identity (the same value as the terminal serial number / ManNumber). Must be the same as <code>X-Identification</code>.</td>\n</tr>\n<tr>\n<td><code>terminalId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant terminal ID. Send it as a <strong>string</strong> and keep leading zeros (e.g. <code>0002</code>). Must be the same as <code>X-Terminal-Id</code>.</td>\n</tr>\n<tr>\n<td><code>terminalDateTime</code></td>\n<td>string (date-time)</td>\n<td>Required</td>\n<td><code>\"2026-08-14T18:30:00\"</code></td>\n<td>Local date/time of the calling system, ISO 8601 with no UTC offset: <code>yyyy-MM-ddTHH:mm:ss</code>. Send the actual time of the request. The value shown is an example.</td>\n</tr>\n<tr>\n<td><code>paymentType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>2</code></td>\n<td>Tender. <code>2</code> = Credit. See <strong>Payment types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>transactionType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>1</code></td>\n<td>Operation. <code>1</code> = Sale. See <strong>Transaction types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>stationNumber</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Station / register number. Returned as a string in <code>EvertecResponse.station_number</code>.</td>\n</tr>\n<tr>\n<td><code>cashierId</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Cashier / clerk ID. Returned in <code>EvertecResponse.cashier_id</code>.</td>\n</tr>\n<tr>\n<td><code>cardPresent</code></td>\n<td>boolean</td>\n<td>Required</td>\n<td><code>false</code></td>\n<td><code>false</code> sends the request down the synchronous, token-based <strong>CNP</strong> path.</td>\n</tr>\n<tr>\n<td><code>tokenNumber</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Charge Anywhere payment token that stands for the stored card. <strong>Sensitive:</strong> never log it or show it.</td>\n</tr>\n<tr>\n<td><code>fullName</code></td>\n<td>string</td>\n<td>Optional</td>\n<td><code>\"John Smith\"</code></td>\n<td>Cardholder / customer display name. Informational only.</td>\n</tr>\n<tr>\n<td><code>amountOfSale</code></td>\n<td>number (2 dp)</td>\n<td>Required</td>\n<td><code>20.00</code></td>\n<td>Base amount before tax, tip, cashback and fee.</td>\n</tr>\n<tr>\n<td><code>tax</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>6.00</code></td>\n<td>Total tax = <code>stateTax + cityTax + reducedTax</code>. The collection pre-request script calculates it.</td>\n</tr>\n<tr>\n<td><code>baseStateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for state and municipal tax.</td>\n</tr>\n<tr>\n<td><code>baseReducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for reduced state tax.</td>\n</tr>\n<tr>\n<td><code>stateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>1.00</code></td>\n<td>State tax amount (tax type: State).</td>\n</tr>\n<tr>\n<td><code>cityTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>2.00</code></td>\n<td>Municipal / city tax amount (tax type: Municipal).</td>\n</tr>\n<tr>\n<td><code>reducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>3.00</code></td>\n<td>Reduced state tax amount (tax type: Reduced state).</td>\n</tr>\n<tr>\n<td><code>subTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>20.00</code></td>\n<td>Equals <code>amountOfSale</code>. The collection script calculates it.</td>\n</tr>\n<tr>\n<td><code>tips</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Tip / gratuity amount.</td>\n</tr>\n<tr>\n<td><code>cashBack</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Cashback amount.</td>\n</tr>\n<tr>\n<td><code>fee</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Extra fee / surcharge amount.</td>\n</tr>\n<tr>\n<td><code>grandTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>26.00</code></td>\n<td><code>subTotal + tax + tips + cashBack + fee</code>. The collection script calculates it. This is the total sent for authorization; it comes back as <code>EvertecResponse.amounts.total</code>.</td>\n</tr>\n<tr>\n<td><code>appVersion</code></td>\n<td>string</td>\n<td>Recommended</td>\n<td><code>\"1.0.0\"</code></td>\n<td>Version of the calling application. Used for support and compatibility tracking.</td>\n</tr>\n<tr>\n<td><code>timeOut</code></td>\n<td>integer (ms)</td>\n<td>Optional</td>\n<td><code>30000</code></td>\n<td>Maximum time, in ms, to wait for the processor's response. Processing is synchronous, and EVUAPI returns as soon as the response arrives. <code>0</code> uses the platform default.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"business-rules\">Business rules</h3>\n<ul>\n<li><code>tax</code> must equal <code>stateTax + cityTax + reducedTax</code>.</li>\n<li><code>subTotal</code> must equal <code>amountOfSale</code>.</li>\n<li><code>grandTotal</code> must equal <code>subTotal + tax + tips + cashBack + fee</code>.</li>\n<li>Use decimal (not floating-point) math, and round money to 2 decimal places.</li>\n<li>The identity header values must be the same as the body's <code>merchantId</code>, <code>terminalId</code> and <code>identification</code>.</li>\n<li>Originating transaction: <strong>don't</strong> send <code>originalAmount</code>, <code>originalApprovalCode</code> or <code>originalGatewayReferenceNumber</code>.</li>\n</ul>\n<h2 id=\"response\">Response</h2>\n<h3 id=\"http-status-codes\">HTTP status codes</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>HTTP status</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>200 OK</code></td>\n<td>The request was processed. The final result is in the body.</td>\n</tr>\n<tr>\n<td><code>4xx</code></td>\n<td>Validation, identity or authorization failure. Fix the request or configuration. <strong>Don't retry it unchanged.</strong></td>\n</tr>\n<tr>\n<td><code>5xx</code></td>\n<td>Service-side failure. Save <code>ErrorId</code> if one is returned. If you have a <code>RequestId</code>, check the status before you consider a retry.</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p><strong>HTTP 200 does not mean approved.</strong> A decline also comes back as <code>200</code> with <code>Status=Declined</code>. Always decide the outcome from <code>Status</code> and <code>Completed</code>.</p>\n</blockquote>\n<h3 id=\"response-body\">Response body</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>RequestId</code></td>\n<td>string</td>\n<td>EVUAPI's ID for this transaction: 32 lowercase hex characters, no hyphens. Save it right away. You need it to get the status and to contact support.</td>\n</tr>\n<tr>\n<td><code>Status</code></td>\n<td>string</td>\n<td>Current lifecycle state. See <strong>Transaction statuses</strong>.</td>\n</tr>\n<tr>\n<td><code>Completed</code></td>\n<td>boolean</td>\n<td><code>true</code> only when <code>Status</code> is final. While it is <code>false</code>, keep polling <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><code>ResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Result code normalized by EVUAPI. See <strong>Response codes</strong>. Keep it as a string (it can have leading zeros). <code>null</code> while not final.</td>\n</tr>\n<tr>\n<td><code>ProcessorResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Raw code from the processor or terminal, such as <code>00</code> or <code>68</code>. An empty string means the processor was never reached.</td>\n</tr>\n<tr>\n<td><code>ResponseText</code></td>\n<td>string (nullable)</td>\n<td>Readable result text from the processor, gateway or EVUAPI. Show it to operators, but don't parse it.</td>\n</tr>\n<tr>\n<td><code>EvertecResponse</code></td>\n<td>object (nullable)</td>\n<td>Processor-specific details. <strong>CNP:</strong> a fixed, ordered shape. <strong>CP:</strong> the terminal's raw final result. <code>null</code> while not final. See the <em>CNP</em> and <em>CP</em> folder docs.</td>\n</tr>\n<tr>\n<td><code>ApprovalCode</code></td>\n<td>string (nullable)</td>\n<td>Processor authorization code, normally 6 characters. It can also be filled in on a <strong>decline</strong>, so never use it alone to decide approval.</td>\n</tr>\n<tr>\n<td><code>GatewayReferenceNumber</code></td>\n<td>string (nullable)</td>\n<td>Charge Anywhere gateway reference: 12 digits, keep the leading zeros. Send it as <code>originalGatewayReferenceNumber</code> on a later Force, Void or Return.</td>\n</tr>\n<tr>\n<td><code>AuthorizedAmount</code></td>\n<td>number (nullable)</td>\n<td>Amount the processor authorized. <code>0</code> on an approved Void. <code>null</code> when nothing was authorized.</td>\n</tr>\n<tr>\n<td><code>TokenNumber</code></td>\n<td>string (nullable)</td>\n<td>CNP: the payment token for the transaction. CP: <code>null</code>. <strong>Sensitive.</strong></td>\n</tr>\n<tr>\n<td><code>CardType</code></td>\n<td>string (nullable)</td>\n<td>Card brand or tender code. See <strong>Card type codes</strong>.</td>\n</tr>\n<tr>\n<td><code>StatusUrl</code></td>\n<td>string</td>\n<td>Relative path of the status resource, e.g. <code>/api/v1/transactions/{RequestId}</code>. Put <code>https://webtest.chargeanywhere.com/evuapi</code> in front and add the three identity query parameters.</td>\n</tr>\n<tr>\n<td><code>ErrorId</code></td>\n<td>string (nullable)</td>\n<td>ID of an error that EVUAPI logged. Give it to Charge Anywhere support.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"evertecresponse\">EvertecResponse</h3>\n<p><code>EvertecResponse</code> always has the <strong>complete, ordered CNP shape</strong>: 31 properties, where an unavailable value is an explicit <code>null</code>, and the nested objects are always present. The full dictionary is in the <strong>CNP</strong> folder documentation.</p>\n<h3 id=\"how-to-interpret-the-result\">How to interpret the result</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Completed</th>\n<th>Status</th>\n<th>What to do</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>true</code></td>\n<td><code>Approved</code></td>\n<td>Success. Save <code>RequestId</code>, <code>GatewayReferenceNumber</code>, <code>ApprovalCode</code>, <code>AuthorizedAmount</code>.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Declined</code></td>\n<td>Not approved. Show <code>ResponseText</code>. Don't retry unchanged.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Failed</code> / <code>TimedOut</code> / <code>Cancelled</code></td>\n<td>Not approved. Record the result. Only start a new transaction after you confirm with the customer.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"error-handling\">Error handling</h2>\n<ul>\n<li><strong>Network timeout or no response:</strong> Don't resend the POST automatically. If you got a <code>RequestId</code>, call <strong>Get Transaction Status</strong>. If you didn't, reconcile with your invoice/order reference before you try again.</li>\n<li><strong><code>4xx</code>:</strong> Check the identity headers against the body, the <code>paymentType</code> / <code>transactionType</code> combination, the amount math, and the required fields.</li>\n<li><strong><code>5xx</code>:</strong> Save <code>ErrorId</code> and <code>RequestId</code> (if you have them) and contact support. Check the status before you retry.</li>\n</ul>\n<h2 id=\"testing-in-postman\">Testing in Postman</h2>\n<ul>\n<li><strong>Reads:</strong> <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code>, <code></code>, <code>1</code>, <code>1</code>, <code>1.0.0</code> and the amount variables. The collection pre-request script recalculates <code>SubTotal</code>, <code>Tax</code> and <code>GrandTotal</code>.</li>\n<li><strong>Writes (test script):</strong> <code>RequestId</code>, <code>OriginalGatewayReferenceNumber</code> (from <code>GatewayReferenceNumber</code>), <code>OriginalAmount</code> (from <code>AuthorizedAmount</code>), <code>OriginalApprovalCode</code> (from <code>ApprovalCode</code>) and <code>ErrorId</code>, <strong>whenever these are in the response</strong>.</li>\n<li>⚠️ Values are saved even when the transaction is <strong>declined</strong>. Before you run a follow-up request, check that the last response was the approved original you meant.</li>\n<li><strong>Tests:</strong> HTTP status is 200/201/202. <code>EvertecResponse</code> is present. The exact ordered CNP key list and nested keys match. Static values are correct (<code>card_acceptor_id</code>, <code>signature_indicator</code>, <code>payment_host</code>, <code>manual_entry_indicator</code>, <code>receipt_email</code>, <code>entry_type</code>, <code>emv_data</code>). <code>merchant_id</code> / <code>merchant_vid</code> are trimmed, at most 19 characters, and equal. <code>station_number</code> matches the request. <code>transaction_type_indicator</code> and <code>special_account</code> match the tender. <code>card_bin_type</code> is a supported brand. Internal correlation fields (<code>last_reference</code>, <code>trx_id</code>, <code>session_id</code>) are not present.</li>\n</ul>\n<h2 id=\"related-requests\">Related requests</h2>\n<ul>\n<li><strong>CNP → Credit → Void</strong> to cancel it</li>\n<li><strong>CNP → Credit → Return</strong> to refund it</li>\n<li><strong>Get Transaction Status</strong> to recover a lost response</li>\n</ul>\n","urlObject":{"path":["api","v1","transactions"],"host":["https://webtest.chargeanywhere.com/evuapi"],"query":[],"variable":[]}},"response":[{"id":"bc9172e3-9195-4d58-9038-398429e2bf1c","name":"200 OK · Approved","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 2,\n  \"transactionType\": 1,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": false,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"**Scenario:** A Mastercard token Sale was approved.\n\n- `Status=Approved`, `Completed=true`, `ResponseCode=000`, `ProcessorResponseCode=00`.\n- Keep `ApprovalCode` and `GatewayReferenceNumber`. A later Void or Return needs them.\n- `EvertecResponse` has the complete, ordered CNP shape, and the `ivu` control lines are filled in.\n- `receipt_output` is `null` because CNP has no terminal receipt."},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Cache-Control","value":"no-cache,no-cache, no-store"},{"key":"Pragma","value":"no-cache"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Expires","value":"-1,0"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"X-FRAME-OPTIONS","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"Referrer-Policy","value":"no-referrer-when-downgrade"},{"key":"Content-Security-Policy","value":"default-src data: 'unsafe-inline' 'unsafe-eval' https:; img-src * data:;"},{"key":"Date","value":"Wed, 23 Sep 2026 08:19:56 GMT"},{"key":"Content-Length","value":"1983"}],"cookie":[],"responseTime":null,"body":"{\n    \"RequestId\": \"cce63469efe14a32a1d2a31ea48316df\",\n    \"Status\": \"Approved\",\n    \"Completed\": true,\n    \"ResponseCode\": \"000\",\n    \"ProcessorResponseCode\": \"00\",\n    \"ResponseText\": \"APPROVED\",\n    \"EvertecResponse\": {\n        \"trace_number\": \"041954\",\n        \"batch_number\": \"009267001\",\n        \"card_acceptor_id\": \"NONE\",\n        \"special_account\": \"MC\",\n        \"merchant_id\": \"4549000000123\",\n        \"pan_card_number\": \"0013\",\n        \"reference\": \"000004587981\",\n        \"receipt_output\": {\n            \"merchant\": null,\n            \"customer\": null\n        },\n        \"amounts\": {\n            \"total\": \"26.00\",\n            \"base_state_tax\": \"10.00\",\n            \"tip\": \"0.00\",\n            \"reduced_tax\": \"3.00\",\n            \"base_reduced_tax\": \"10.00\",\n            \"state_tax\": \"1.00\",\n            \"city_tax\": \"2.00\"\n        },\n        \"authorization_code\": \"124094\",\n        \"emv_data\": {},\n        \"signature_indicator\": \"NOSIGN\",\n        \"transaction_time\": \"041955\",\n        \"payment_host\": \"ATH1\",\n        \"invoice_number\": null,\n        \"terminal_id\": \"CAWW000000001\",\n        \"merchant_vid\": \"4549000000123\",\n        \"transaction_date\": \"09232026\",\n        \"approval_code\": \"00\",\n        \"cashier_id\": \"1\",\n        \"manual_entry_indicator\": \"yes\",\n        \"ivu\": {\n            \"control_line1\": \"CONTROL: S1QM2-DGJP2\",\n            \"control_line2\": \"ET                  \"\n        },\n        \"process_cashback\": \"no\",\n        \"card_bin_type\": \"MASTERCARD\",\n        \"terminal_vid\": \"CAWW000000001\",\n        \"station_number\": \"1\",\n        \"response_message\": \"APPROVED\",\n        \"receipt_email\": \"no\",\n        \"transaction_type_indicator\": \"C\",\n        \"entry_type\": \"MANUAL\",\n        \"fallback\": \"no\"\n    },\n    \"ApprovalCode\": \"124094\",\n    \"GatewayReferenceNumber\": \"000004587981\",\n    \"AuthorizedAmount\": 26,\n    \"TokenNumber\": \"0000000000001234\",\n    \"CardType\": \"2\",\n    \"StatusUrl\": \"/api/v1/transactions/cce63469efe14a32a1d2a31ea48316df\",\n    \"ErrorId\": null\n}"}],"_postman_id":"3f75aef8-ea87-4ec4-a52e-5ca3795acf78"},{"name":"Auth","event":[{"listen":"test","script":{"type":"text/javascript","exec":["let body = {};","try { body = pm.response.json(); } catch (e) {}","const requestId = body.requestId || body.RequestId;","const gatewayReferenceNumber = body.gatewayReferenceNumber || body.GatewayReferenceNumber;","const authorizedAmount = body.authorizedAmount !== undefined ? body.authorizedAmount : body.AuthorizedAmount;","const errorId = body.errorId || body.ErrorId;","if (requestId) pm.collectionVariables.set('RequestId', requestId);","if (gatewayReferenceNumber) pm.collectionVariables.set('OriginalGatewayReferenceNumber', gatewayReferenceNumber);","if (authorizedAmount !== undefined && authorizedAmount !== null) pm.collectionVariables.set('OriginalAmount', authorizedAmount);","if (errorId) pm.collectionVariables.set('ErrorId', errorId);","pm.test('Transaction request accepted', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });","const originalApprovalCode = body.approvalCode || body.ApprovalCode || (body.data && (body.data.approvalCode || body.data.ApprovalCode));","if (originalApprovalCode) pm.collectionVariables.set('OriginalApprovalCode', originalApprovalCode);","","let requestBody = {};","try { requestBody = JSON.parse(pm.variables.replaceIn(pm.request.body.raw || '{}')); } catch (e) {","  console.warn('Unable to parse request body for CNP response validation:', e.message);","}","","const evertecResponse = body.EvertecResponse || body.evertecResponse;","const isSuccess = pm.response.code >= 200 && pm.response.code < 300;","","if (isSuccess) {","  pm.test('CNP EvertecResponse is present', function () {","    pm.expect(evertecResponse).to.be.an('object');","  });","}","","if (isSuccess && evertecResponse && typeof evertecResponse === 'object') {","  const expectedKeys = [","    'trace_number', 'batch_number', 'card_acceptor_id', 'special_account',","    'merchant_id', 'pan_card_number', 'reference', 'receipt_output',","    'amounts', 'authorization_code', 'emv_data', 'signature_indicator',","    'transaction_time', 'payment_host', 'invoice_number', 'terminal_id',","    'merchant_vid', 'transaction_date', 'approval_code', 'cashier_id',","    'manual_entry_indicator', 'ivu', 'process_cashback', 'card_bin_type',","    'terminal_vid', 'station_number', 'response_message', 'receipt_email',","    'transaction_type_indicator', 'entry_type', 'fallback'","  ];","","  pm.test('CNP EvertecResponse has the CP-compatible ordered shape', function () {","    pm.expect(Object.keys(evertecResponse)).to.eql(expectedKeys);","  });","","  pm.test('CNP EvertecResponse nested objects have the expected keys', function () {","    pm.expect(Object.keys(evertecResponse.receipt_output || {})).to.eql(['merchant', 'customer']);","    pm.expect(Object.keys(evertecResponse.amounts || {})).to.eql(['total', 'base_state_tax', 'tip', 'reduced_tax', 'base_reduced_tax', 'state_tax', 'city_tax']);","    pm.expect(evertecResponse.emv_data).to.be.an('object');","    pm.expect(Object.keys(evertecResponse.emv_data || {})).to.eql([]);","    pm.expect(Object.keys(evertecResponse.ivu || {})).to.eql(['control_line1', 'control_line2']);","  });","","  pm.test('CNP static Evertec fields are correct', function () {","    pm.expect(evertecResponse.card_acceptor_id).to.eql('NONE');","    pm.expect(evertecResponse.signature_indicator).to.eql('NOSIGN');","    pm.expect(evertecResponse.payment_host).to.eql('ATH1');","    pm.expect(evertecResponse.manual_entry_indicator).to.eql('yes');","    pm.expect(evertecResponse.receipt_email).to.eql('no');","    pm.expect(evertecResponse.entry_type).to.eql('MANUAL');","    pm.expect(evertecResponse.emv_data).to.be.an('object');","    pm.expect(Object.keys(evertecResponse.emv_data || {})).to.eql([]);","  });","","  pm.test('CNP transaction and merchant enrichment fields are present', function () {","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'trace_number')).to.eql(true);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'merchant_id')).to.eql(true);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'merchant_vid')).to.eql(true);","  });","","  if (evertecResponse.merchant_id !== null && evertecResponse.merchant_id !== undefined) {","    pm.test('CNP merchant_id is trimmed and no longer than 19 characters', function () {","      pm.expect(evertecResponse.merchant_id).to.eql(String(evertecResponse.merchant_id).trim());","      pm.expect(String(evertecResponse.merchant_id).length).to.be.at.most(19);","    });","  }","","  if (evertecResponse.merchant_vid !== null && evertecResponse.merchant_vid !== undefined) {","    pm.test('CNP merchant_vid is trimmed and no longer than 19 characters', function () {","      pm.expect(evertecResponse.merchant_vid).to.eql(String(evertecResponse.merchant_vid).trim());","      pm.expect(String(evertecResponse.merchant_vid).length).to.be.at.most(19);","    });","  }","","  if (evertecResponse.merchant_id && evertecResponse.merchant_vid) {","    pm.test('CNP merchant_id and merchant_vid use the same P-048 value', function () {","      pm.expect(evertecResponse.merchant_vid).to.eql(evertecResponse.merchant_id);","    });","  }","","  if (requestBody.stationNumber !== undefined && requestBody.stationNumber !== null) {","    pm.test('CNP station_number echoes request stationNumber', function () {","      pm.expect(String(evertecResponse.station_number)).to.eql(String(requestBody.stationNumber));","    });","  }","","  const indicatorByPaymentType = { 2: 'C', 5: 'I', 6: 'D', 7: 'E', 8: 'E', 13: 'A' };","  const expectedIndicator = indicatorByPaymentType[Number(requestBody.paymentType)];","  if (expectedIndicator) {","    pm.test('CNP transaction_type_indicator matches paymentType', function () {","      pm.expect(evertecResponse.transaction_type_indicator).to.eql(expectedIndicator);","    });","  }","","  const specialByPaymentType = { 5: 'IC', 6: 'AT', 7: 'EC', 8: 'EB', 13: 'AM' };","  const expectedNonCreditSpecial = specialByPaymentType[Number(requestBody.paymentType)];","  if (expectedNonCreditSpecial) {","    pm.test('CNP special_account matches non-credit paymentType', function () {","      pm.expect(evertecResponse.special_account).to.eql(expectedNonCreditSpecial);","    });","  }","","  if (Number(requestBody.paymentType) === 2) {","    const supportedCardBinTypes = [null, 'VISA', 'MASTERCARD', 'AMEX', 'DISCOVER'];","    pm.test('CNP card_bin_type is null or a supported CreditCardType brand', function () {","      pm.expect(evertecResponse.card_bin_type).to.be.oneOf(supportedCardBinTypes);","    });","","    const specialByCardBinType = { VISA: 'VC', MASTERCARD: 'MC', AMEX: 'AX', DISCOVER: 'DC' };","    const expectedCreditSpecial = specialByCardBinType[evertecResponse.card_bin_type];","    if (expectedCreditSpecial) {","      pm.test('CNP credit special_account matches card_bin_type', function () {","        pm.expect(evertecResponse.special_account).to.eql(expectedCreditSpecial);","      });","    }","  }","","  pm.test('EvertecResponse suppresses App2-only correlation fields', function () {","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'last_reference')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'trx_id')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'session_id')).to.eql(false);","  });","}"],"id":"c355d4f5-59f5-4cb2-bc11-819075e36f1e"}}],"id":"28f621ad-a88e-489a-9cd0-6f8b1aec6037","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 2,\n  \"transactionType\": 6,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": false,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"<h1 id=\"cnp-credit-auth\">CNP Credit Auth</h1>\n<blockquote>\n<p>Authorizes (holds) funds without capturing them. Also called AuthOnly or PreAuth.</p>\n</blockquote>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Endpoint</strong></td>\n<td><code>POST https://webtest.chargeanywhere.com/evuapi/api/v1/transactions</code></td>\n</tr>\n<tr>\n<td><strong>Channel</strong></td>\n<td>Card-not-present (CNP) · <code>cardPresent=false</code></td>\n</tr>\n<tr>\n<td><strong>Tender</strong></td>\n<td>Credit (<code>paymentType=2</code>)</td>\n</tr>\n<tr>\n<td><strong>Operation</strong></td>\n<td>Auth (AuthOnly / PreAuth) (<code>transactionType=6</code>)</td>\n</tr>\n<tr>\n<td><strong>Processing model</strong></td>\n<td><strong>Synchronous.</strong> The final result is returned in this response (<code>Completed=true</code>).</td>\n</tr>\n<tr>\n<td><strong>Caller</strong></td>\n<td>Merchant or POS application</td>\n</tr>\n<tr>\n<td><strong>Authentication</strong></td>\n<td>Merchant identity headers <code>X-Merchant-Id</code>, <code>X-Terminal-Id</code>, <code>X-Identification</code></td>\n</tr>\n<tr>\n<td><strong>Financial impact</strong></td>\n<td>Funds are held on the customer's account. Nothing is captured until a <strong>Force</strong> completes the authorization.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"overview\">Overview</h2>\n<p>Use Auth when the final amount or fulfilment is not yet confirmed (hospitality, rentals, ship-later orders). Complete it later with <strong>Force</strong> (<code>transactionType=4</code>). Auth is an <strong>originating</strong> transaction, so it has no <code>original*</code> fields.</p>\n<h2 id=\"before-you-call\">Before you call</h2>\n<ul>\n<li><code></code> must hold a valid Charge Anywhere payment token for this merchant.</li>\n<li>Set <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code> and <code></code> in your active environment.</li>\n</ul>\n<h2 id=\"request\">Request</h2>\n<h3 id=\"headers\">Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Required</th>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Content-Type</code></td>\n<td>Yes</td>\n<td><code>application/json</code></td>\n<td>The request body is JSON.</td>\n</tr>\n<tr>\n<td><code>Accept</code></td>\n<td>Recommended</td>\n<td><code>application/json</code></td>\n<td>Asks for a JSON response.</td>\n</tr>\n<tr>\n<td><code>X-Merchant-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant identity. Must match body <code>merchantId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Terminal-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant terminal identity (keep leading zeros). Must match body <code>terminalId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Identification</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Physical terminal identity. Must match body <code>identification</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"body-parameters\">Body parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Value in this request</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>merchantId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant ID that Charge Anywhere issued for this integration. Must be the same as the <code>X-Merchant-Id</code> header.</td>\n</tr>\n<tr>\n<td><code>identification</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Physical terminal / device identity (the same value as the terminal serial number / ManNumber). Must be the same as <code>X-Identification</code>.</td>\n</tr>\n<tr>\n<td><code>terminalId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant terminal ID. Send it as a <strong>string</strong> and keep leading zeros (e.g. <code>0002</code>). Must be the same as <code>X-Terminal-Id</code>.</td>\n</tr>\n<tr>\n<td><code>terminalDateTime</code></td>\n<td>string (date-time)</td>\n<td>Required</td>\n<td><code>\"2026-08-14T18:30:00\"</code></td>\n<td>Local date/time of the calling system, ISO 8601 with no UTC offset: <code>yyyy-MM-ddTHH:mm:ss</code>. Send the actual time of the request. The value shown is an example.</td>\n</tr>\n<tr>\n<td><code>paymentType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>2</code></td>\n<td>Tender. <code>2</code> = Credit. See <strong>Payment types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>transactionType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>6</code></td>\n<td>Operation. <code>6</code> = Auth (AuthOnly / PreAuth). See <strong>Transaction types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>stationNumber</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Station / register number. Returned as a string in <code>EvertecResponse.station_number</code>.</td>\n</tr>\n<tr>\n<td><code>cashierId</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Cashier / clerk ID. Returned in <code>EvertecResponse.cashier_id</code>.</td>\n</tr>\n<tr>\n<td><code>cardPresent</code></td>\n<td>boolean</td>\n<td>Required</td>\n<td><code>false</code></td>\n<td><code>false</code> sends the request down the synchronous, token-based <strong>CNP</strong> path.</td>\n</tr>\n<tr>\n<td><code>tokenNumber</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Charge Anywhere payment token that stands for the stored card. <strong>Sensitive:</strong> never log it or show it.</td>\n</tr>\n<tr>\n<td><code>fullName</code></td>\n<td>string</td>\n<td>Optional</td>\n<td><code>\"John Smith\"</code></td>\n<td>Cardholder / customer display name. Informational only.</td>\n</tr>\n<tr>\n<td><code>amountOfSale</code></td>\n<td>number (2 dp)</td>\n<td>Required</td>\n<td><code>20.00</code></td>\n<td>Base amount before tax, tip, cashback and fee.</td>\n</tr>\n<tr>\n<td><code>tax</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>6.00</code></td>\n<td>Total tax = <code>stateTax + cityTax + reducedTax</code>. The collection pre-request script calculates it.</td>\n</tr>\n<tr>\n<td><code>baseStateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for state and municipal tax.</td>\n</tr>\n<tr>\n<td><code>baseReducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for reduced state tax.</td>\n</tr>\n<tr>\n<td><code>stateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>1.00</code></td>\n<td>State tax amount (tax type: State).</td>\n</tr>\n<tr>\n<td><code>cityTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>2.00</code></td>\n<td>Municipal / city tax amount (tax type: Municipal).</td>\n</tr>\n<tr>\n<td><code>reducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>3.00</code></td>\n<td>Reduced state tax amount (tax type: Reduced state).</td>\n</tr>\n<tr>\n<td><code>subTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>20.00</code></td>\n<td>Equals <code>amountOfSale</code>. The collection script calculates it.</td>\n</tr>\n<tr>\n<td><code>tips</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Tip / gratuity amount.</td>\n</tr>\n<tr>\n<td><code>cashBack</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Cashback amount.</td>\n</tr>\n<tr>\n<td><code>fee</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Extra fee / surcharge amount.</td>\n</tr>\n<tr>\n<td><code>grandTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>26.00</code></td>\n<td><code>subTotal + tax + tips + cashBack + fee</code>. The collection script calculates it. This is the total sent for authorization; it comes back as <code>EvertecResponse.amounts.total</code>.</td>\n</tr>\n<tr>\n<td><code>appVersion</code></td>\n<td>string</td>\n<td>Recommended</td>\n<td><code>\"1.0.0\"</code></td>\n<td>Version of the calling application. Used for support and compatibility tracking.</td>\n</tr>\n<tr>\n<td><code>timeOut</code></td>\n<td>integer (ms)</td>\n<td>Optional</td>\n<td><code>30000</code></td>\n<td>Maximum time, in ms, to wait for the processor's response. Processing is synchronous, and EVUAPI returns as soon as the response arrives. <code>0</code> uses the platform default.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"business-rules\">Business rules</h3>\n<ul>\n<li><code>tax</code> must equal <code>stateTax + cityTax + reducedTax</code>.</li>\n<li><code>subTotal</code> must equal <code>amountOfSale</code>.</li>\n<li><code>grandTotal</code> must equal <code>subTotal + tax + tips + cashBack + fee</code>.</li>\n<li>Use decimal (not floating-point) math, and round money to 2 decimal places.</li>\n<li>The identity header values must be the same as the body's <code>merchantId</code>, <code>terminalId</code> and <code>identification</code>.</li>\n<li>Originating transaction: <strong>don't</strong> send <code>originalAmount</code>, <code>originalApprovalCode</code> or <code>originalGatewayReferenceNumber</code>.</li>\n</ul>\n<h2 id=\"response\">Response</h2>\n<h3 id=\"http-status-codes\">HTTP status codes</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>HTTP status</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>200 OK</code></td>\n<td>The request was processed. The final result is in the body.</td>\n</tr>\n<tr>\n<td><code>4xx</code></td>\n<td>Validation, identity or authorization failure. Fix the request or configuration. <strong>Don't retry it unchanged.</strong></td>\n</tr>\n<tr>\n<td><code>5xx</code></td>\n<td>Service-side failure. Save <code>ErrorId</code> if one is returned. If you have a <code>RequestId</code>, check the status before you consider a retry.</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p><strong>HTTP 200 does not mean approved.</strong> A decline also comes back as <code>200</code> with <code>Status=Declined</code>. Always decide the outcome from <code>Status</code> and <code>Completed</code>.</p>\n</blockquote>\n<h3 id=\"response-body\">Response body</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>RequestId</code></td>\n<td>string</td>\n<td>EVUAPI's ID for this transaction: 32 lowercase hex characters, no hyphens. Save it right away. You need it to get the status and to contact support.</td>\n</tr>\n<tr>\n<td><code>Status</code></td>\n<td>string</td>\n<td>Current lifecycle state. See <strong>Transaction statuses</strong>.</td>\n</tr>\n<tr>\n<td><code>Completed</code></td>\n<td>boolean</td>\n<td><code>true</code> only when <code>Status</code> is final. While it is <code>false</code>, keep polling <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><code>ResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Result code normalized by EVUAPI. See <strong>Response codes</strong>. Keep it as a string (it can have leading zeros). <code>null</code> while not final.</td>\n</tr>\n<tr>\n<td><code>ProcessorResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Raw code from the processor or terminal, such as <code>00</code> or <code>68</code>. An empty string means the processor was never reached.</td>\n</tr>\n<tr>\n<td><code>ResponseText</code></td>\n<td>string (nullable)</td>\n<td>Readable result text from the processor, gateway or EVUAPI. Show it to operators, but don't parse it.</td>\n</tr>\n<tr>\n<td><code>EvertecResponse</code></td>\n<td>object (nullable)</td>\n<td>Processor-specific details. <strong>CNP:</strong> a fixed, ordered shape. <strong>CP:</strong> the terminal's raw final result. <code>null</code> while not final. See the <em>CNP</em> and <em>CP</em> folder docs.</td>\n</tr>\n<tr>\n<td><code>ApprovalCode</code></td>\n<td>string (nullable)</td>\n<td>Processor authorization code, normally 6 characters. It can also be filled in on a <strong>decline</strong>, so never use it alone to decide approval.</td>\n</tr>\n<tr>\n<td><code>GatewayReferenceNumber</code></td>\n<td>string (nullable)</td>\n<td>Charge Anywhere gateway reference: 12 digits, keep the leading zeros. Send it as <code>originalGatewayReferenceNumber</code> on a later Force, Void or Return.</td>\n</tr>\n<tr>\n<td><code>AuthorizedAmount</code></td>\n<td>number (nullable)</td>\n<td>Amount the processor authorized. <code>0</code> on an approved Void. <code>null</code> when nothing was authorized.</td>\n</tr>\n<tr>\n<td><code>TokenNumber</code></td>\n<td>string (nullable)</td>\n<td>CNP: the payment token for the transaction. CP: <code>null</code>. <strong>Sensitive.</strong></td>\n</tr>\n<tr>\n<td><code>CardType</code></td>\n<td>string (nullable)</td>\n<td>Card brand or tender code. See <strong>Card type codes</strong>.</td>\n</tr>\n<tr>\n<td><code>StatusUrl</code></td>\n<td>string</td>\n<td>Relative path of the status resource, e.g. <code>/api/v1/transactions/{RequestId}</code>. Put <code>https://webtest.chargeanywhere.com/evuapi</code> in front and add the three identity query parameters.</td>\n</tr>\n<tr>\n<td><code>ErrorId</code></td>\n<td>string (nullable)</td>\n<td>ID of an error that EVUAPI logged. Give it to Charge Anywhere support.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"evertecresponse\">EvertecResponse</h3>\n<p><code>EvertecResponse</code> always has the <strong>complete, ordered CNP shape</strong>: 31 properties, where an unavailable value is an explicit <code>null</code>, and the nested objects are always present. The full dictionary is in the <strong>CNP</strong> folder documentation.</p>\n<h3 id=\"how-to-interpret-the-result\">How to interpret the result</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Completed</th>\n<th>Status</th>\n<th>What to do</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>true</code></td>\n<td><code>Approved</code></td>\n<td>Success. Save <code>RequestId</code>, <code>GatewayReferenceNumber</code>, <code>ApprovalCode</code>, <code>AuthorizedAmount</code>.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Declined</code></td>\n<td>Not approved. Show <code>ResponseText</code>. Don't retry unchanged.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Failed</code> / <code>TimedOut</code> / <code>Cancelled</code></td>\n<td>Not approved. Record the result. Only start a new transaction after you confirm with the customer.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"error-handling\">Error handling</h2>\n<ul>\n<li><strong>Network timeout or no response:</strong> Don't resend the POST automatically. If you got a <code>RequestId</code>, call <strong>Get Transaction Status</strong>. If you didn't, reconcile with your invoice/order reference before you try again.</li>\n<li><strong><code>4xx</code>:</strong> Check the identity headers against the body, the <code>paymentType</code> / <code>transactionType</code> combination, the amount math, and the required fields.</li>\n<li><strong><code>5xx</code>:</strong> Save <code>ErrorId</code> and <code>RequestId</code> (if you have them) and contact support. Check the status before you retry.</li>\n</ul>\n<h2 id=\"testing-in-postman\">Testing in Postman</h2>\n<ul>\n<li><strong>Reads:</strong> <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code>, <code></code>, <code>1</code>, <code>1</code>, <code>1.0.0</code> and the amount variables. The collection pre-request script recalculates <code>SubTotal</code>, <code>Tax</code> and <code>GrandTotal</code>.</li>\n<li><strong>Writes (test script):</strong> <code>RequestId</code>, <code>OriginalGatewayReferenceNumber</code> (from <code>GatewayReferenceNumber</code>), <code>OriginalAmount</code> (from <code>AuthorizedAmount</code>), <code>OriginalApprovalCode</code> (from <code>ApprovalCode</code>) and <code>ErrorId</code>, <strong>whenever these are in the response</strong>.</li>\n<li>⚠️ Values are saved even when the transaction is <strong>declined</strong>. Before you run a follow-up request, check that the last response was the approved original you meant.</li>\n<li><strong>Tests:</strong> HTTP status is 200/201/202. <code>EvertecResponse</code> is present. The exact ordered CNP key list and nested keys match. Static values are correct (<code>card_acceptor_id</code>, <code>signature_indicator</code>, <code>payment_host</code>, <code>manual_entry_indicator</code>, <code>receipt_email</code>, <code>entry_type</code>, <code>emv_data</code>). <code>merchant_id</code> / <code>merchant_vid</code> are trimmed, at most 19 characters, and equal. <code>station_number</code> matches the request. <code>transaction_type_indicator</code> and <code>special_account</code> match the tender. <code>card_bin_type</code> is a supported brand. Internal correlation fields (<code>last_reference</code>, <code>trx_id</code>, <code>session_id</code>) are not present.</li>\n</ul>\n<h2 id=\"related-requests\">Related requests</h2>\n<ul>\n<li><strong>CNP → Credit → Force</strong> to capture the funds</li>\n<li><strong>CNP → Credit → Void</strong> to release the hold</li>\n</ul>\n","urlObject":{"path":["api","v1","transactions"],"host":["https://webtest.chargeanywhere.com/evuapi"],"query":[],"variable":[]}},"response":[{"id":"2c2e10b0-3c77-44ef-9332-3e67a2594f55","name":"200 OK · Approved","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 2,\n  \"transactionType\": 6,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": false,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"**Scenario:** Visa token Auth (PreAuth) approved.\n\n- Funds are held for `AuthorizedAmount=26`. Capture them with **Force** using this response's `ApprovalCode` and `GatewayReferenceNumber`.\n- `ivu` control lines are `null` here, which is allowed for CNP."},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Cache-Control","value":"no-cache,no-cache, no-store"},{"key":"Pragma","value":"no-cache"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Expires","value":"-1,0"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"X-FRAME-OPTIONS","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"Referrer-Policy","value":"no-referrer-when-downgrade"},{"key":"Content-Security-Policy","value":"default-src data: 'unsafe-inline' 'unsafe-eval' https:; img-src * data:;"},{"key":"Date","value":"Wed, 23 Sep 2026 15:26:14 GMT"},{"key":"Content-Length","value":"1941"}],"cookie":[],"responseTime":null,"body":"{\n    \"RequestId\": \"a66b38a5a23f47d5926361205972c2a9\",\n    \"Status\": \"Approved\",\n    \"Completed\": true,\n    \"ResponseCode\": \"000\",\n    \"ProcessorResponseCode\": \"00\",\n    \"ResponseText\": \"APPROVED\",\n    \"EvertecResponse\": {\n        \"trace_number\": \"112613\",\n        \"batch_number\": \"001267001\",\n        \"card_acceptor_id\": \"NONE\",\n        \"special_account\": \"VC\",\n        \"merchant_id\": \"4549000000123\",\n        \"pan_card_number\": \"0854\",\n        \"reference\": \"000004588401\",\n        \"receipt_output\": {\n            \"merchant\": null,\n            \"customer\": null\n        },\n        \"amounts\": {\n            \"total\": \"26.00\",\n            \"base_state_tax\": \"10.00\",\n            \"tip\": \"0.00\",\n            \"reduced_tax\": \"3.00\",\n            \"base_reduced_tax\": \"10.00\",\n            \"state_tax\": \"1.00\",\n            \"city_tax\": \"2.00\"\n        },\n        \"authorization_code\": \"148049\",\n        \"emv_data\": {},\n        \"signature_indicator\": \"NOSIGN\",\n        \"transaction_time\": \"112614\",\n        \"payment_host\": \"ATH1\",\n        \"invoice_number\": null,\n        \"terminal_id\": \"CAWW000000001\",\n        \"merchant_vid\": \"4549000000123\",\n        \"transaction_date\": \"09232026\",\n        \"approval_code\": \"00\",\n        \"cashier_id\": \"1\",\n        \"manual_entry_indicator\": \"yes\",\n        \"ivu\": {\n            \"control_line1\": null,\n            \"control_line2\": null\n        },\n        \"process_cashback\": \"no\",\n        \"card_bin_type\": \"VISA\",\n        \"terminal_vid\": \"CAWW000000001\",\n        \"station_number\": \"1\",\n        \"response_message\": \"APPROVED\",\n        \"receipt_email\": \"no\",\n        \"transaction_type_indicator\": \"C\",\n        \"entry_type\": \"MANUAL\",\n        \"fallback\": \"no\"\n    },\n    \"ApprovalCode\": \"148049\",\n    \"GatewayReferenceNumber\": \"000004588401\",\n    \"AuthorizedAmount\": 26,\n    \"TokenNumber\": \"0000000000001234\",\n    \"CardType\": \"1\",\n    \"StatusUrl\": \"/api/v1/transactions/a66b38a5a23f47d5926361205972c2a9\",\n    \"ErrorId\": null\n}"},{"id":"66138cad-2a95-4fcc-8348-bca7311c49ef","name":"200 OK · Declined (processor 68)","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 2,\n  \"transactionType\": 6,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": false,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"**Scenario:** The processor declined the Auth.\n\n- HTTP is still **200**. The outcome comes from `Status=Declined` and `Completed=true`.\n- `ResponseCode=FFE` (declined). `ProcessorResponseCode=68`, `ResponseText=\"Response received too late\"`.\n- `AuthorizedAmount=null`, `TokenNumber=\"\"`.\n- ⚠️ `ApprovalCode` and `authorization_code` are **still filled in**, so never decide approval from them.\n- ⚠️ The Postman test script still saves `OriginalGatewayReferenceNumber` / `OriginalApprovalCode` from this response. Run a successful Auth again before you try **Force**."},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Cache-Control","value":"no-cache,no-cache, no-store"},{"key":"Pragma","value":"no-cache"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Expires","value":"-1,0"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"X-FRAME-OPTIONS","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"Referrer-Policy","value":"no-referrer-when-downgrade"},{"key":"Content-Security-Policy","value":"default-src data: 'unsafe-inline' 'unsafe-eval' https:; img-src * data:;"},{"key":"Date","value":"Wed, 23 Sep 2026 08:23:00 GMT"},{"key":"Content-Length","value":"1969"}],"cookie":[],"responseTime":null,"body":"{\n    \"RequestId\": \"91d45593e2344ca1bca8f867673707b1\",\n    \"Status\": \"Declined\",\n    \"Completed\": true,\n    \"ResponseCode\": \"FFE\",\n    \"ProcessorResponseCode\": \"68\",\n    \"ResponseText\": \"Response received too late\",\n    \"EvertecResponse\": {\n        \"trace_number\": \"042245\",\n        \"batch_number\": \"009267001\",\n        \"card_acceptor_id\": \"NONE\",\n        \"special_account\": \"MC\",\n        \"merchant_id\": \"4549000000123\",\n        \"pan_card_number\": \"0013\",\n        \"reference\": \"000004587982\",\n        \"receipt_output\": {\n            \"merchant\": null,\n            \"customer\": null\n        },\n        \"amounts\": {\n            \"total\": \"26.00\",\n            \"base_state_tax\": \"10.00\",\n            \"tip\": \"0.00\",\n            \"reduced_tax\": \"3.00\",\n            \"base_reduced_tax\": \"10.00\",\n            \"state_tax\": \"1.00\",\n            \"city_tax\": \"2.00\"\n        },\n        \"authorization_code\": \"419596\",\n        \"emv_data\": {},\n        \"signature_indicator\": \"NOSIGN\",\n        \"transaction_time\": \"042300\",\n        \"payment_host\": \"ATH1\",\n        \"invoice_number\": null,\n        \"terminal_id\": \"CAWW000000001\",\n        \"merchant_vid\": \"4549000000123\",\n        \"transaction_date\": \"09232026\",\n        \"approval_code\": \"68\",\n        \"cashier_id\": \"1\",\n        \"manual_entry_indicator\": \"yes\",\n        \"ivu\": {\n            \"control_line1\": null,\n            \"control_line2\": null\n        },\n        \"process_cashback\": \"no\",\n        \"card_bin_type\": \"MASTERCARD\",\n        \"terminal_vid\": \"CAWW000000001\",\n        \"station_number\": \"1\",\n        \"response_message\": \"Response received too late\",\n        \"receipt_email\": \"no\",\n        \"transaction_type_indicator\": \"C\",\n        \"entry_type\": \"MANUAL\",\n        \"fallback\": \"no\"\n    },\n    \"ApprovalCode\": \"419596\",\n    \"GatewayReferenceNumber\": \"000004587982\",\n    \"AuthorizedAmount\": null,\n    \"TokenNumber\": \"\",\n    \"CardType\": \"2\",\n    \"StatusUrl\": \"/api/v1/transactions/91d45593e2344ca1bca8f867673707b1\",\n    \"ErrorId\": null\n}"}],"_postman_id":"28f621ad-a88e-489a-9cd0-6f8b1aec6037"},{"name":"Force","event":[{"listen":"test","script":{"type":"text/javascript","exec":["let body = {};","try { body = pm.response.json(); } catch (e) {}","const requestId = body.requestId || body.RequestId;","const gatewayReferenceNumber = body.gatewayReferenceNumber || body.GatewayReferenceNumber;","const authorizedAmount = body.authorizedAmount !== undefined ? body.authorizedAmount : body.AuthorizedAmount;","const errorId = body.errorId || body.ErrorId;","if (requestId) pm.collectionVariables.set('RequestId', requestId);","if (gatewayReferenceNumber) pm.collectionVariables.set('OriginalGatewayReferenceNumber', gatewayReferenceNumber);","if (authorizedAmount !== undefined && authorizedAmount !== null) pm.collectionVariables.set('OriginalAmount', authorizedAmount);","if (errorId) pm.collectionVariables.set('ErrorId', errorId);","pm.test('Transaction request accepted', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });","const originalApprovalCode = body.approvalCode || body.ApprovalCode || (body.data && (body.data.approvalCode || body.data.ApprovalCode));","if (originalApprovalCode) pm.collectionVariables.set('OriginalApprovalCode', originalApprovalCode);","","let requestBody = {};","try { requestBody = JSON.parse(pm.variables.replaceIn(pm.request.body.raw || '{}')); } catch (e) {","  console.warn('Unable to parse request body for CNP response validation:', e.message);","}","","const evertecResponse = body.EvertecResponse || body.evertecResponse;","const isSuccess = pm.response.code >= 200 && pm.response.code < 300;","","if (isSuccess) {","  pm.test('CNP EvertecResponse is present', function () {","    pm.expect(evertecResponse).to.be.an('object');","  });","}","","if (isSuccess && evertecResponse && typeof evertecResponse === 'object') {","  const expectedKeys = [","    'trace_number', 'batch_number', 'card_acceptor_id', 'special_account',","    'merchant_id', 'pan_card_number', 'reference', 'receipt_output',","    'amounts', 'authorization_code', 'emv_data', 'signature_indicator',","    'transaction_time', 'payment_host', 'invoice_number', 'terminal_id',","    'merchant_vid', 'transaction_date', 'approval_code', 'cashier_id',","    'manual_entry_indicator', 'ivu', 'process_cashback', 'card_bin_type',","    'terminal_vid', 'station_number', 'response_message', 'receipt_email',","    'transaction_type_indicator', 'entry_type', 'fallback'","  ];","","  pm.test('CNP EvertecResponse has the CP-compatible ordered shape', function () {","    pm.expect(Object.keys(evertecResponse)).to.eql(expectedKeys);","  });","","  pm.test('CNP EvertecResponse nested objects have the expected keys', function () {","    pm.expect(Object.keys(evertecResponse.receipt_output || {})).to.eql(['merchant', 'customer']);","    pm.expect(Object.keys(evertecResponse.amounts || {})).to.eql(['total', 'base_state_tax', 'tip', 'reduced_tax', 'base_reduced_tax', 'state_tax', 'city_tax']);","    pm.expect(evertecResponse.emv_data).to.be.an('object');","    pm.expect(Object.keys(evertecResponse.emv_data || {})).to.eql([]);","    pm.expect(Object.keys(evertecResponse.ivu || {})).to.eql(['control_line1', 'control_line2']);","  });","","  pm.test('CNP static Evertec fields are correct', function () {","    pm.expect(evertecResponse.card_acceptor_id).to.eql('NONE');","    pm.expect(evertecResponse.signature_indicator).to.eql('NOSIGN');","    pm.expect(evertecResponse.payment_host).to.eql('ATH1');","    pm.expect(evertecResponse.manual_entry_indicator).to.eql('yes');","    pm.expect(evertecResponse.receipt_email).to.eql('no');","    pm.expect(evertecResponse.entry_type).to.eql('MANUAL');","    pm.expect(evertecResponse.emv_data).to.be.an('object');","    pm.expect(Object.keys(evertecResponse.emv_data || {})).to.eql([]);","  });","","  pm.test('CNP transaction and merchant enrichment fields are present', function () {","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'trace_number')).to.eql(true);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'merchant_id')).to.eql(true);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'merchant_vid')).to.eql(true);","  });","","  if (evertecResponse.merchant_id !== null && evertecResponse.merchant_id !== undefined) {","    pm.test('CNP merchant_id is trimmed and no longer than 19 characters', function () {","      pm.expect(evertecResponse.merchant_id).to.eql(String(evertecResponse.merchant_id).trim());","      pm.expect(String(evertecResponse.merchant_id).length).to.be.at.most(19);","    });","  }","","  if (evertecResponse.merchant_vid !== null && evertecResponse.merchant_vid !== undefined) {","    pm.test('CNP merchant_vid is trimmed and no longer than 19 characters', function () {","      pm.expect(evertecResponse.merchant_vid).to.eql(String(evertecResponse.merchant_vid).trim());","      pm.expect(String(evertecResponse.merchant_vid).length).to.be.at.most(19);","    });","  }","","  if (evertecResponse.merchant_id && evertecResponse.merchant_vid) {","    pm.test('CNP merchant_id and merchant_vid use the same P-048 value', function () {","      pm.expect(evertecResponse.merchant_vid).to.eql(evertecResponse.merchant_id);","    });","  }","","  if (requestBody.stationNumber !== undefined && requestBody.stationNumber !== null) {","    pm.test('CNP station_number echoes request stationNumber', function () {","      pm.expect(String(evertecResponse.station_number)).to.eql(String(requestBody.stationNumber));","    });","  }","","  const indicatorByPaymentType = { 2: 'C', 5: 'I', 6: 'D', 7: 'E', 8: 'E', 13: 'A' };","  const expectedIndicator = indicatorByPaymentType[Number(requestBody.paymentType)];","  if (expectedIndicator) {","    pm.test('CNP transaction_type_indicator matches paymentType', function () {","      pm.expect(evertecResponse.transaction_type_indicator).to.eql(expectedIndicator);","    });","  }","","  const specialByPaymentType = { 5: 'IC', 6: 'AT', 7: 'EC', 8: 'EB', 13: 'AM' };","  const expectedNonCreditSpecial = specialByPaymentType[Number(requestBody.paymentType)];","  if (expectedNonCreditSpecial) {","    pm.test('CNP special_account matches non-credit paymentType', function () {","      pm.expect(evertecResponse.special_account).to.eql(expectedNonCreditSpecial);","    });","  }","","  if (Number(requestBody.paymentType) === 2) {","    const supportedCardBinTypes = [null, 'VISA', 'MASTERCARD', 'AMEX', 'DISCOVER'];","    pm.test('CNP card_bin_type is null or a supported CreditCardType brand', function () {","      pm.expect(evertecResponse.card_bin_type).to.be.oneOf(supportedCardBinTypes);","    });","","    const specialByCardBinType = { VISA: 'VC', MASTERCARD: 'MC', AMEX: 'AX', DISCOVER: 'DC' };","    const expectedCreditSpecial = specialByCardBinType[evertecResponse.card_bin_type];","    if (expectedCreditSpecial) {","      pm.test('CNP credit special_account matches card_bin_type', function () {","        pm.expect(evertecResponse.special_account).to.eql(expectedCreditSpecial);","      });","    }","  }","","  pm.test('EvertecResponse suppresses App2-only correlation fields', function () {","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'last_reference')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'trx_id')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'session_id')).to.eql(false);","  });","}"],"id":"9ed51188-9df6-435b-9190-3ae4789c0cd0"}}],"id":"9cef07e2-92f3-482e-92bd-db254d1d6c11","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 2,\n  \"transactionType\": 4,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": false,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"originalAmount\": ,\n  \"originalApprovalCode\": \"\",\n  \"originalGatewayReferenceNumber\": \"\",\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"<h1 id=\"cnp-credit-force\">CNP Credit Force</h1>\n<blockquote>\n<p>Completes (captures) an earlier <strong>Auth / PreAuth</strong>.</p>\n</blockquote>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Endpoint</strong></td>\n<td><code>POST https://webtest.chargeanywhere.com/evuapi/api/v1/transactions</code></td>\n</tr>\n<tr>\n<td><strong>Channel</strong></td>\n<td>Card-not-present (CNP) · <code>cardPresent=false</code></td>\n</tr>\n<tr>\n<td><strong>Tender</strong></td>\n<td>Credit (<code>paymentType=2</code>)</td>\n</tr>\n<tr>\n<td><strong>Operation</strong></td>\n<td>Force (<code>transactionType=4</code>)</td>\n</tr>\n<tr>\n<td><strong>Processing model</strong></td>\n<td><strong>Synchronous.</strong> The final result is returned in this response (<code>Completed=true</code>).</td>\n</tr>\n<tr>\n<td><strong>Caller</strong></td>\n<td>Merchant or POS application</td>\n</tr>\n<tr>\n<td><strong>Authentication</strong></td>\n<td>Merchant identity headers <code>X-Merchant-Id</code>, <code>X-Terminal-Id</code>, <code>X-Identification</code></td>\n</tr>\n<tr>\n<td><strong>Financial impact</strong></td>\n<td>The earlier authorization is captured and queued for settlement.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"overview\">Overview</h2>\n<p>Use Force to capture funds that an earlier Auth held. Send the original authorization's <code>originalAmount</code>, <code>originalApprovalCode</code> and <code>originalGatewayReferenceNumber</code>.</p>\n<h2 id=\"before-you-call\">Before you call</h2>\n<ul>\n<li><code></code> must hold a valid Charge Anywhere payment token for this merchant.</li>\n<li>Run the matching <strong>Auth</strong> first. Its test script saves <code></code>, <code></code> and <code></code>.</li>\n<li>Set <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code> and <code></code> in your active environment.</li>\n</ul>\n<h2 id=\"request\">Request</h2>\n<h3 id=\"headers\">Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Required</th>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Content-Type</code></td>\n<td>Yes</td>\n<td><code>application/json</code></td>\n<td>The request body is JSON.</td>\n</tr>\n<tr>\n<td><code>Accept</code></td>\n<td>Recommended</td>\n<td><code>application/json</code></td>\n<td>Asks for a JSON response.</td>\n</tr>\n<tr>\n<td><code>X-Merchant-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant identity. Must match body <code>merchantId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Terminal-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant terminal identity (keep leading zeros). Must match body <code>terminalId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Identification</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Physical terminal identity. Must match body <code>identification</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"body-parameters\">Body parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Value in this request</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>merchantId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant ID that Charge Anywhere issued for this integration. Must be the same as the <code>X-Merchant-Id</code> header.</td>\n</tr>\n<tr>\n<td><code>identification</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Physical terminal / device identity (the same value as the terminal serial number / ManNumber). Must be the same as <code>X-Identification</code>.</td>\n</tr>\n<tr>\n<td><code>terminalId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant terminal ID. Send it as a <strong>string</strong> and keep leading zeros (e.g. <code>0002</code>). Must be the same as <code>X-Terminal-Id</code>.</td>\n</tr>\n<tr>\n<td><code>terminalDateTime</code></td>\n<td>string (date-time)</td>\n<td>Required</td>\n<td><code>\"2026-08-14T18:30:00\"</code></td>\n<td>Local date/time of the calling system, ISO 8601 with no UTC offset: <code>yyyy-MM-ddTHH:mm:ss</code>. Send the actual time of the request. The value shown is an example.</td>\n</tr>\n<tr>\n<td><code>paymentType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>2</code></td>\n<td>Tender. <code>2</code> = Credit. See <strong>Payment types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>transactionType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>4</code></td>\n<td>Operation. <code>4</code> = Force. See <strong>Transaction types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>stationNumber</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Station / register number. Returned as a string in <code>EvertecResponse.station_number</code>.</td>\n</tr>\n<tr>\n<td><code>cashierId</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Cashier / clerk ID. Returned in <code>EvertecResponse.cashier_id</code>.</td>\n</tr>\n<tr>\n<td><code>cardPresent</code></td>\n<td>boolean</td>\n<td>Required</td>\n<td><code>false</code></td>\n<td><code>false</code> sends the request down the synchronous, token-based <strong>CNP</strong> path.</td>\n</tr>\n<tr>\n<td><code>tokenNumber</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Charge Anywhere payment token that stands for the stored card. <strong>Sensitive:</strong> never log it or show it.</td>\n</tr>\n<tr>\n<td><code>fullName</code></td>\n<td>string</td>\n<td>Optional</td>\n<td><code>\"John Smith\"</code></td>\n<td>Cardholder / customer display name. Informational only.</td>\n</tr>\n<tr>\n<td><code>amountOfSale</code></td>\n<td>number (2 dp)</td>\n<td>Required</td>\n<td><code>20.00</code></td>\n<td>Base amount before tax, tip, cashback and fee.</td>\n</tr>\n<tr>\n<td><code>tax</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>6.00</code></td>\n<td>Total tax = <code>stateTax + cityTax + reducedTax</code>. The collection pre-request script calculates it.</td>\n</tr>\n<tr>\n<td><code>baseStateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for state and municipal tax.</td>\n</tr>\n<tr>\n<td><code>baseReducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for reduced state tax.</td>\n</tr>\n<tr>\n<td><code>stateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>1.00</code></td>\n<td>State tax amount (tax type: State).</td>\n</tr>\n<tr>\n<td><code>cityTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>2.00</code></td>\n<td>Municipal / city tax amount (tax type: Municipal).</td>\n</tr>\n<tr>\n<td><code>reducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>3.00</code></td>\n<td>Reduced state tax amount (tax type: Reduced state).</td>\n</tr>\n<tr>\n<td><code>subTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>20.00</code></td>\n<td>Equals <code>amountOfSale</code>. The collection script calculates it.</td>\n</tr>\n<tr>\n<td><code>tips</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Tip / gratuity amount.</td>\n</tr>\n<tr>\n<td><code>cashBack</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Cashback amount.</td>\n</tr>\n<tr>\n<td><code>fee</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Extra fee / surcharge amount.</td>\n</tr>\n<tr>\n<td><code>grandTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>26.00</code></td>\n<td><code>subTotal + tax + tips + cashBack + fee</code>. The collection script calculates it. This is the total sent for authorization; it comes back as <code>EvertecResponse.amounts.total</code>.</td>\n</tr>\n<tr>\n<td><code>originalAmount</code></td>\n<td>number</td>\n<td>Required</td>\n<td><code></code></td>\n<td>Amount of the original transaction, normally its <code>AuthorizedAmount</code>. Postman saves it as <code></code>.</td>\n</tr>\n<tr>\n<td><code>originalApprovalCode</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td><code>ApprovalCode</code> returned by the original transaction. Postman saves it as <code></code>.</td>\n</tr>\n<tr>\n<td><code>originalGatewayReferenceNumber</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td><code>GatewayReferenceNumber</code> of the original transaction (12 digits, keep leading zeros).</td>\n</tr>\n<tr>\n<td><code>appVersion</code></td>\n<td>string</td>\n<td>Recommended</td>\n<td><code>\"1.0.0\"</code></td>\n<td>Version of the calling application. Used for support and compatibility tracking.</td>\n</tr>\n<tr>\n<td><code>timeOut</code></td>\n<td>integer (ms)</td>\n<td>Optional</td>\n<td><code>30000</code></td>\n<td>Maximum time, in ms, to wait for the processor's response. Processing is synchronous, and EVUAPI returns as soon as the response arrives. <code>0</code> uses the platform default.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"business-rules\">Business rules</h3>\n<ul>\n<li><code>tax</code> must equal <code>stateTax + cityTax + reducedTax</code>.</li>\n<li><code>subTotal</code> must equal <code>amountOfSale</code>.</li>\n<li><code>grandTotal</code> must equal <code>subTotal + tax + tips + cashBack + fee</code>.</li>\n<li>Use decimal (not floating-point) math, and round money to 2 decimal places.</li>\n<li>The identity header values must be the same as the body's <code>merchantId</code>, <code>terminalId</code> and <code>identification</code>.</li>\n<li>Send the <code>original*</code> values of the <strong>Auth</strong> being completed.</li>\n</ul>\n<h2 id=\"response\">Response</h2>\n<h3 id=\"http-status-codes\">HTTP status codes</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>HTTP status</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>200 OK</code></td>\n<td>The request was processed. The final result is in the body.</td>\n</tr>\n<tr>\n<td><code>4xx</code></td>\n<td>Validation, identity or authorization failure. Fix the request or configuration. <strong>Don't retry it unchanged.</strong></td>\n</tr>\n<tr>\n<td><code>5xx</code></td>\n<td>Service-side failure. Save <code>ErrorId</code> if one is returned. If you have a <code>RequestId</code>, check the status before you consider a retry.</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p><strong>HTTP 200 does not mean approved.</strong> A decline also comes back as <code>200</code> with <code>Status=Declined</code>. Always decide the outcome from <code>Status</code> and <code>Completed</code>.</p>\n</blockquote>\n<h3 id=\"response-body\">Response body</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>RequestId</code></td>\n<td>string</td>\n<td>EVUAPI's ID for this transaction: 32 lowercase hex characters, no hyphens. Save it right away. You need it to get the status and to contact support.</td>\n</tr>\n<tr>\n<td><code>Status</code></td>\n<td>string</td>\n<td>Current lifecycle state. See <strong>Transaction statuses</strong>.</td>\n</tr>\n<tr>\n<td><code>Completed</code></td>\n<td>boolean</td>\n<td><code>true</code> only when <code>Status</code> is final. While it is <code>false</code>, keep polling <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><code>ResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Result code normalized by EVUAPI. See <strong>Response codes</strong>. Keep it as a string (it can have leading zeros). <code>null</code> while not final.</td>\n</tr>\n<tr>\n<td><code>ProcessorResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Raw code from the processor or terminal, such as <code>00</code> or <code>68</code>. An empty string means the processor was never reached.</td>\n</tr>\n<tr>\n<td><code>ResponseText</code></td>\n<td>string (nullable)</td>\n<td>Readable result text from the processor, gateway or EVUAPI. Show it to operators, but don't parse it.</td>\n</tr>\n<tr>\n<td><code>EvertecResponse</code></td>\n<td>object (nullable)</td>\n<td>Processor-specific details. <strong>CNP:</strong> a fixed, ordered shape. <strong>CP:</strong> the terminal's raw final result. <code>null</code> while not final. See the <em>CNP</em> and <em>CP</em> folder docs.</td>\n</tr>\n<tr>\n<td><code>ApprovalCode</code></td>\n<td>string (nullable)</td>\n<td>Processor authorization code, normally 6 characters. It can also be filled in on a <strong>decline</strong>, so never use it alone to decide approval.</td>\n</tr>\n<tr>\n<td><code>GatewayReferenceNumber</code></td>\n<td>string (nullable)</td>\n<td>Charge Anywhere gateway reference: 12 digits, keep the leading zeros. Send it as <code>originalGatewayReferenceNumber</code> on a later Force, Void or Return.</td>\n</tr>\n<tr>\n<td><code>AuthorizedAmount</code></td>\n<td>number (nullable)</td>\n<td>Amount the processor authorized. <code>0</code> on an approved Void. <code>null</code> when nothing was authorized.</td>\n</tr>\n<tr>\n<td><code>TokenNumber</code></td>\n<td>string (nullable)</td>\n<td>CNP: the payment token for the transaction. CP: <code>null</code>. <strong>Sensitive.</strong></td>\n</tr>\n<tr>\n<td><code>CardType</code></td>\n<td>string (nullable)</td>\n<td>Card brand or tender code. See <strong>Card type codes</strong>.</td>\n</tr>\n<tr>\n<td><code>StatusUrl</code></td>\n<td>string</td>\n<td>Relative path of the status resource, e.g. <code>/api/v1/transactions/{RequestId}</code>. Put <code>https://webtest.chargeanywhere.com/evuapi</code> in front and add the three identity query parameters.</td>\n</tr>\n<tr>\n<td><code>ErrorId</code></td>\n<td>string (nullable)</td>\n<td>ID of an error that EVUAPI logged. Give it to Charge Anywhere support.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"evertecresponse\">EvertecResponse</h3>\n<p><code>EvertecResponse</code> always has the <strong>complete, ordered CNP shape</strong>: 31 properties, where an unavailable value is an explicit <code>null</code>, and the nested objects are always present. The full dictionary is in the <strong>CNP</strong> folder documentation.</p>\n<h3 id=\"how-to-interpret-the-result\">How to interpret the result</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Completed</th>\n<th>Status</th>\n<th>What to do</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>true</code></td>\n<td><code>Approved</code></td>\n<td>Success. Save <code>RequestId</code>, <code>GatewayReferenceNumber</code>, <code>ApprovalCode</code>, <code>AuthorizedAmount</code>.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Declined</code></td>\n<td>Not approved. Show <code>ResponseText</code>. Don't retry unchanged.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Failed</code> / <code>TimedOut</code> / <code>Cancelled</code></td>\n<td>Not approved. Record the result. Only start a new transaction after you confirm with the customer.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"error-handling\">Error handling</h2>\n<ul>\n<li><strong>Network timeout or no response:</strong> Don't resend the POST automatically. If you got a <code>RequestId</code>, call <strong>Get Transaction Status</strong>. If you didn't, reconcile with your invoice/order reference before you try again.</li>\n<li><strong><code>4xx</code>:</strong> Check the identity headers against the body, the <code>paymentType</code> / <code>transactionType</code> combination, the amount math, and the <code>original*</code> values.</li>\n<li><strong><code>5xx</code>:</strong> Save <code>ErrorId</code> and <code>RequestId</code> (if you have them) and contact support. Check the status before you retry.</li>\n<li><strong><code>ResponseCode=FE6</code> (Invalid Transaction Data):</strong> The gateway rejected the completion. Check that the <code>original*</code> values belong to an approved, not-yet-completed Auth.</li>\n</ul>\n<h2 id=\"testing-in-postman\">Testing in Postman</h2>\n<ul>\n<li><strong>Reads:</strong> <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code>, <code></code>, <code>1</code>, <code>1</code>, <code>1.0.0</code> and the amount variables. The collection pre-request script recalculates <code>SubTotal</code>, <code>Tax</code> and <code>GrandTotal</code>.</li>\n<li><strong>Writes (test script):</strong> <code>RequestId</code>, <code>OriginalGatewayReferenceNumber</code> (from <code>GatewayReferenceNumber</code>), <code>OriginalAmount</code> (from <code>AuthorizedAmount</code>), <code>OriginalApprovalCode</code> (from <code>ApprovalCode</code>) and <code>ErrorId</code>, <strong>whenever these are in the response</strong>.</li>\n<li>⚠️ Values are saved even when the transaction is <strong>declined</strong>. Before you run a follow-up request, check that the last response was the approved original you meant.</li>\n<li><strong>Tests:</strong> HTTP status is 200/201/202. <code>EvertecResponse</code> is present. The exact ordered CNP key list and nested keys match. Static values are correct (<code>card_acceptor_id</code>, <code>signature_indicator</code>, <code>payment_host</code>, <code>manual_entry_indicator</code>, <code>receipt_email</code>, <code>entry_type</code>, <code>emv_data</code>). <code>merchant_id</code> / <code>merchant_vid</code> are trimmed, at most 19 characters, and equal. <code>station_number</code> matches the request. <code>transaction_type_indicator</code> and <code>special_account</code> match the tender. <code>card_bin_type</code> is a supported brand. Internal correlation fields (<code>last_reference</code>, <code>trx_id</code>, <code>session_id</code>) are not present.</li>\n</ul>\n<h2 id=\"related-requests\">Related requests</h2>\n<ul>\n<li><strong>CNP → Credit → Auth</strong>, which this request completes</li>\n<li><strong>CNP → Credit → Void</strong> / <strong>Return</strong> as follow-ups</li>\n</ul>\n","urlObject":{"path":["api","v1","transactions"],"host":["https://webtest.chargeanywhere.com/evuapi"],"query":[],"variable":[]}},"response":[{"id":"d1a83d92-9390-42e8-8926-d10d904134b2","name":"200 OK · Approved","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 2,\n  \"transactionType\": 4,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": false,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"originalAmount\": ,\n  \"originalApprovalCode\": \"\",\n  \"originalGatewayReferenceNumber\": \"\",\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"**Scenario:** An earlier Visa Auth was completed.\n\n- The Force gets its own `GatewayReferenceNumber`, and `ApprovalCode` matches the Auth's authorization code.\n- `merchant_id` / `merchant_vid` are `null` here. Any scalar CNP value can be `null` when it isn't available."},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Cache-Control","value":"no-cache,no-cache, no-store"},{"key":"Pragma","value":"no-cache"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Expires","value":"-1,0"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"X-FRAME-OPTIONS","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"Referrer-Policy","value":"no-referrer-when-downgrade"},{"key":"Content-Security-Policy","value":"default-src data: 'unsafe-inline' 'unsafe-eval' https:; img-src * data:;"},{"key":"Date","value":"Wed, 23 Sep 2026 15:26:43 GMT"},{"key":"Content-Length","value":"1919"}],"cookie":[],"responseTime":null,"body":"{\n    \"RequestId\": \"d66d35356fe343728f18abe76a434588\",\n    \"Status\": \"Approved\",\n    \"Completed\": true,\n    \"ResponseCode\": \"000\",\n    \"ProcessorResponseCode\": \"00\",\n    \"ResponseText\": \"APPROVED\",\n    \"EvertecResponse\": {\n        \"trace_number\": \"112643\",\n        \"batch_number\": \"001267001\",\n        \"card_acceptor_id\": \"NONE\",\n        \"special_account\": \"VC\",\n        \"merchant_id\": null,\n        \"pan_card_number\": \"0854\",\n        \"reference\": \"000004588402\",\n        \"receipt_output\": {\n            \"merchant\": null,\n            \"customer\": null\n        },\n        \"amounts\": {\n            \"total\": \"26.00\",\n            \"base_state_tax\": \"10.00\",\n            \"tip\": \"0.00\",\n            \"reduced_tax\": \"3.00\",\n            \"base_reduced_tax\": \"10.00\",\n            \"state_tax\": \"1.00\",\n            \"city_tax\": \"2.00\"\n        },\n        \"authorization_code\": \"148049\",\n        \"emv_data\": {},\n        \"signature_indicator\": \"NOSIGN\",\n        \"transaction_time\": \"112643\",\n        \"payment_host\": \"ATH1\",\n        \"invoice_number\": null,\n        \"terminal_id\": \"CAWW000000001\",\n        \"merchant_vid\": null,\n        \"transaction_date\": \"09232026\",\n        \"approval_code\": \"00\",\n        \"cashier_id\": \"1\",\n        \"manual_entry_indicator\": \"yes\",\n        \"ivu\": {\n            \"control_line1\": null,\n            \"control_line2\": null\n        },\n        \"process_cashback\": \"no\",\n        \"card_bin_type\": \"VISA\",\n        \"terminal_vid\": \"CAWW000000001\",\n        \"station_number\": \"1\",\n        \"response_message\": \"APPROVED\",\n        \"receipt_email\": \"no\",\n        \"transaction_type_indicator\": \"C\",\n        \"entry_type\": \"MANUAL\",\n        \"fallback\": \"no\"\n    },\n    \"ApprovalCode\": \"148049\",\n    \"GatewayReferenceNumber\": \"000004588402\",\n    \"AuthorizedAmount\": 26,\n    \"TokenNumber\": \"0000000000001234\",\n    \"CardType\": \"1\",\n    \"StatusUrl\": \"/api/v1/transactions/d66d35356fe343728f18abe76a434588\",\n    \"ErrorId\": null\n}"},{"id":"ab2fa2b2-6556-4643-a798-4451d2ee6847","name":"200 OK · Declined (FE6 Invalid Transaction Data)","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 2,\n  \"transactionType\": 4,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": false,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"originalAmount\": ,\n  \"originalApprovalCode\": \"\",\n  \"originalGatewayReferenceNumber\": \"\",\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"**Scenario:** The gateway rejected the completion before it reached the processor.\n\n- `ResponseCode=FE6`, `ResponseText=\"Invalid Transaction Data.\"`. `ProcessorResponseCode`, `ApprovalCode` and `GatewayReferenceNumber` are all empty.\n- `EvertecResponse` keeps the full CNP shape, with nulls for the processor fields. `transaction_date` / `transaction_time` repeat the request's `terminalDateTime`.\n- Check that the `original*` values refer to an approved Auth that hasn't been completed yet."},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Cache-Control","value":"no-cache,no-cache, no-store"},{"key":"Pragma","value":"no-cache"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Expires","value":"-1,0"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"X-FRAME-OPTIONS","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"Referrer-Policy","value":"no-referrer-when-downgrade"},{"key":"Content-Security-Policy","value":"default-src data: 'unsafe-inline' 'unsafe-eval' https:; img-src * data:;"},{"key":"Date","value":"Wed, 23 Sep 2026 08:27:18 GMT"},{"key":"Content-Length","value":"1877"}],"cookie":[],"responseTime":null,"body":"{\n    \"RequestId\": \"afc0460cbd6740a1b815122ae661aad0\",\n    \"Status\": \"Declined\",\n    \"Completed\": true,\n    \"ResponseCode\": \"FE6\",\n    \"ProcessorResponseCode\": \"\",\n    \"ResponseText\": \"Invalid Transaction Data.\",\n    \"EvertecResponse\": {\n        \"trace_number\": null,\n        \"batch_number\": \"-001267001\",\n        \"card_acceptor_id\": \"NONE\",\n        \"special_account\": null,\n        \"merchant_id\": null,\n        \"pan_card_number\": null,\n        \"reference\": null,\n        \"receipt_output\": {\n            \"merchant\": null,\n            \"customer\": null\n        },\n        \"amounts\": {\n            \"total\": \"26.00\",\n            \"base_state_tax\": \"10.00\",\n            \"tip\": \"0.00\",\n            \"reduced_tax\": \"3.00\",\n            \"base_reduced_tax\": \"10.00\",\n            \"state_tax\": \"1.00\",\n            \"city_tax\": \"2.00\"\n        },\n        \"authorization_code\": null,\n        \"emv_data\": {},\n        \"signature_indicator\": \"NOSIGN\",\n        \"transaction_time\": \"183000\",\n        \"payment_host\": \"ATH1\",\n        \"invoice_number\": null,\n        \"terminal_id\": null,\n        \"merchant_vid\": null,\n        \"transaction_date\": \"08142026\",\n        \"approval_code\": null,\n        \"cashier_id\": \"1\",\n        \"manual_entry_indicator\": \"yes\",\n        \"ivu\": {\n            \"control_line1\": null,\n            \"control_line2\": null\n        },\n        \"process_cashback\": \"no\",\n        \"card_bin_type\": null,\n        \"terminal_vid\": null,\n        \"station_number\": \"1\",\n        \"response_message\": \"Invalid Transaction Data.\",\n        \"receipt_email\": \"no\",\n        \"transaction_type_indicator\": null,\n        \"entry_type\": \"MANUAL\",\n        \"fallback\": null\n    },\n    \"ApprovalCode\": \"\",\n    \"GatewayReferenceNumber\": \"\",\n    \"AuthorizedAmount\": null,\n    \"TokenNumber\": \"\",\n    \"CardType\": \"2\",\n    \"StatusUrl\": \"/api/v1/transactions/afc0460cbd6740a1b815122ae661aad0\",\n    \"ErrorId\": null\n}"}],"_postman_id":"9cef07e2-92f3-482e-92bd-db254d1d6c11"},{"name":"Void","event":[{"listen":"test","script":{"type":"text/javascript","exec":["let body = {};","try { body = pm.response.json(); } catch (e) {}","const requestId = body.requestId || body.RequestId;","const gatewayReferenceNumber = body.gatewayReferenceNumber || body.GatewayReferenceNumber;","const authorizedAmount = body.authorizedAmount !== undefined ? body.authorizedAmount : body.AuthorizedAmount;","const errorId = body.errorId || body.ErrorId;","if (requestId) pm.collectionVariables.set('RequestId', requestId);","if (gatewayReferenceNumber) pm.collectionVariables.set('OriginalGatewayReferenceNumber', gatewayReferenceNumber);","if (authorizedAmount !== undefined && authorizedAmount !== null) pm.collectionVariables.set('OriginalAmount', authorizedAmount);","if (errorId) pm.collectionVariables.set('ErrorId', errorId);","pm.test('Transaction request accepted', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });","const originalApprovalCode = body.approvalCode || body.ApprovalCode || (body.data && (body.data.approvalCode || body.data.ApprovalCode));","if (originalApprovalCode) pm.collectionVariables.set('OriginalApprovalCode', originalApprovalCode);","","let requestBody = {};","try { requestBody = JSON.parse(pm.variables.replaceIn(pm.request.body.raw || '{}')); } catch (e) {","  console.warn('Unable to parse request body for CNP response validation:', e.message);","}","","const evertecResponse = body.EvertecResponse || body.evertecResponse;","const isSuccess = pm.response.code >= 200 && pm.response.code < 300;","","if (isSuccess) {","  pm.test('CNP EvertecResponse is present', function () {","    pm.expect(evertecResponse).to.be.an('object');","  });","}","","if (isSuccess && evertecResponse && typeof evertecResponse === 'object') {","  const expectedKeys = [","    'trace_number', 'batch_number', 'card_acceptor_id', 'special_account',","    'merchant_id', 'pan_card_number', 'reference', 'receipt_output',","    'amounts', 'authorization_code', 'emv_data', 'signature_indicator',","    'transaction_time', 'payment_host', 'invoice_number', 'terminal_id',","    'merchant_vid', 'transaction_date', 'approval_code', 'cashier_id',","    'manual_entry_indicator', 'ivu', 'process_cashback', 'card_bin_type',","    'terminal_vid', 'station_number', 'response_message', 'receipt_email',","    'transaction_type_indicator', 'entry_type', 'fallback'","  ];","","  pm.test('CNP EvertecResponse has the CP-compatible ordered shape', function () {","    pm.expect(Object.keys(evertecResponse)).to.eql(expectedKeys);","  });","","  pm.test('CNP EvertecResponse nested objects have the expected keys', function () {","    pm.expect(Object.keys(evertecResponse.receipt_output || {})).to.eql(['merchant', 'customer']);","    pm.expect(Object.keys(evertecResponse.amounts || {})).to.eql(['total', 'base_state_tax', 'tip', 'reduced_tax', 'base_reduced_tax', 'state_tax', 'city_tax']);","    pm.expect(evertecResponse.emv_data).to.be.an('object');","    pm.expect(Object.keys(evertecResponse.emv_data || {})).to.eql([]);","    pm.expect(Object.keys(evertecResponse.ivu || {})).to.eql(['control_line1', 'control_line2']);","  });","","  pm.test('CNP static Evertec fields are correct', function () {","    pm.expect(evertecResponse.card_acceptor_id).to.eql('NONE');","    pm.expect(evertecResponse.signature_indicator).to.eql('NOSIGN');","    pm.expect(evertecResponse.payment_host).to.eql('ATH1');","    pm.expect(evertecResponse.manual_entry_indicator).to.eql('yes');","    pm.expect(evertecResponse.receipt_email).to.eql('no');","    pm.expect(evertecResponse.entry_type).to.eql('MANUAL');","    pm.expect(evertecResponse.emv_data).to.be.an('object');","    pm.expect(Object.keys(evertecResponse.emv_data || {})).to.eql([]);","  });","","  pm.test('CNP transaction and merchant enrichment fields are present', function () {","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'trace_number')).to.eql(true);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'merchant_id')).to.eql(true);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'merchant_vid')).to.eql(true);","  });","","  if (evertecResponse.merchant_id !== null && evertecResponse.merchant_id !== undefined) {","    pm.test('CNP merchant_id is trimmed and no longer than 19 characters', function () {","      pm.expect(evertecResponse.merchant_id).to.eql(String(evertecResponse.merchant_id).trim());","      pm.expect(String(evertecResponse.merchant_id).length).to.be.at.most(19);","    });","  }","","  if (evertecResponse.merchant_vid !== null && evertecResponse.merchant_vid !== undefined) {","    pm.test('CNP merchant_vid is trimmed and no longer than 19 characters', function () {","      pm.expect(evertecResponse.merchant_vid).to.eql(String(evertecResponse.merchant_vid).trim());","      pm.expect(String(evertecResponse.merchant_vid).length).to.be.at.most(19);","    });","  }","","  if (evertecResponse.merchant_id && evertecResponse.merchant_vid) {","    pm.test('CNP merchant_id and merchant_vid use the same P-048 value', function () {","      pm.expect(evertecResponse.merchant_vid).to.eql(evertecResponse.merchant_id);","    });","  }","","  if (requestBody.stationNumber !== undefined && requestBody.stationNumber !== null) {","    pm.test('CNP station_number echoes request stationNumber', function () {","      pm.expect(String(evertecResponse.station_number)).to.eql(String(requestBody.stationNumber));","    });","  }","","  const indicatorByPaymentType = { 2: 'C', 5: 'I', 6: 'D', 7: 'E', 8: 'E', 13: 'A' };","  const expectedIndicator = indicatorByPaymentType[Number(requestBody.paymentType)];","  if (expectedIndicator) {","    pm.test('CNP transaction_type_indicator matches paymentType', function () {","      pm.expect(evertecResponse.transaction_type_indicator).to.eql(expectedIndicator);","    });","  }","","  const specialByPaymentType = { 5: 'IC', 6: 'AT', 7: 'EC', 8: 'EB', 13: 'AM' };","  const expectedNonCreditSpecial = specialByPaymentType[Number(requestBody.paymentType)];","  if (expectedNonCreditSpecial) {","    pm.test('CNP special_account matches non-credit paymentType', function () {","      pm.expect(evertecResponse.special_account).to.eql(expectedNonCreditSpecial);","    });","  }","","  if (Number(requestBody.paymentType) === 2) {","    const supportedCardBinTypes = [null, 'VISA', 'MASTERCARD', 'AMEX', 'DISCOVER'];","    pm.test('CNP card_bin_type is null or a supported CreditCardType brand', function () {","      pm.expect(evertecResponse.card_bin_type).to.be.oneOf(supportedCardBinTypes);","    });","","    const specialByCardBinType = { VISA: 'VC', MASTERCARD: 'MC', AMEX: 'AX', DISCOVER: 'DC' };","    const expectedCreditSpecial = specialByCardBinType[evertecResponse.card_bin_type];","    if (expectedCreditSpecial) {","      pm.test('CNP credit special_account matches card_bin_type', function () {","        pm.expect(evertecResponse.special_account).to.eql(expectedCreditSpecial);","      });","    }","  }","","  pm.test('EvertecResponse suppresses App2-only correlation fields', function () {","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'last_reference')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'trx_id')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'session_id')).to.eql(false);","  });","}"],"id":"09442548-287e-4ae1-b2d5-807ea1b74e95"}}],"id":"2b07084d-0714-452a-9ca2-bb54e99203e9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 2,\n  \"transactionType\": 2,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": false,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"originalAmount\": ,\n  \"originalApprovalCode\": \"\",\n  \"originalGatewayReferenceNumber\": \"\",\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"<h1 id=\"cnp-credit-void\">CNP Credit Void</h1>\n<blockquote>\n<p>Cancels an earlier transaction. <code>transactionType</code> is always <code>2</code>.</p>\n</blockquote>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Endpoint</strong></td>\n<td><code>POST https://webtest.chargeanywhere.com/evuapi/api/v1/transactions</code></td>\n</tr>\n<tr>\n<td><strong>Channel</strong></td>\n<td>Card-not-present (CNP) · <code>cardPresent=false</code></td>\n</tr>\n<tr>\n<td><strong>Tender</strong></td>\n<td>Credit (<code>paymentType=2</code>)</td>\n</tr>\n<tr>\n<td><strong>Operation</strong></td>\n<td>Void (<code>transactionType=2</code>)</td>\n</tr>\n<tr>\n<td><strong>Processing model</strong></td>\n<td><strong>Synchronous.</strong> The final result is returned in this response (<code>Completed=true</code>).</td>\n</tr>\n<tr>\n<td><strong>Caller</strong></td>\n<td>Merchant or POS application</td>\n</tr>\n<tr>\n<td><strong>Authentication</strong></td>\n<td>Merchant identity headers <code>X-Merchant-Id</code>, <code>X-Terminal-Id</code>, <code>X-Identification</code></td>\n</tr>\n<tr>\n<td><strong>Financial impact</strong></td>\n<td>The original transaction is cancelled. A voided transaction does not settle.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"overview\">Overview</h2>\n<p>Use Void to cancel a transaction, normally before its batch is closed. After settlement, use <strong>Return</strong> instead. Send <code>originalGatewayReferenceNumber</code>. EVUAPI uses it to find the original transaction.</p>\n<h2 id=\"before-you-call\">Before you call</h2>\n<ul>\n<li><code></code> must hold a valid Charge Anywhere payment token for this merchant.</li>\n<li>Run the transaction you want to void first (e.g. <strong>Sale</strong>). Its test script saves the <code>Original*</code> variables.</li>\n<li>Set <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code> and <code></code> in your active environment.</li>\n</ul>\n<h2 id=\"request\">Request</h2>\n<h3 id=\"headers\">Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Required</th>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Content-Type</code></td>\n<td>Yes</td>\n<td><code>application/json</code></td>\n<td>The request body is JSON.</td>\n</tr>\n<tr>\n<td><code>Accept</code></td>\n<td>Recommended</td>\n<td><code>application/json</code></td>\n<td>Asks for a JSON response.</td>\n</tr>\n<tr>\n<td><code>X-Merchant-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant identity. Must match body <code>merchantId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Terminal-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant terminal identity (keep leading zeros). Must match body <code>terminalId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Identification</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Physical terminal identity. Must match body <code>identification</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"body-parameters\">Body parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Value in this request</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>merchantId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant ID that Charge Anywhere issued for this integration. Must be the same as the <code>X-Merchant-Id</code> header.</td>\n</tr>\n<tr>\n<td><code>identification</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Physical terminal / device identity (the same value as the terminal serial number / ManNumber). Must be the same as <code>X-Identification</code>.</td>\n</tr>\n<tr>\n<td><code>terminalId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant terminal ID. Send it as a <strong>string</strong> and keep leading zeros (e.g. <code>0002</code>). Must be the same as <code>X-Terminal-Id</code>.</td>\n</tr>\n<tr>\n<td><code>terminalDateTime</code></td>\n<td>string (date-time)</td>\n<td>Required</td>\n<td><code>\"2026-08-14T18:30:00\"</code></td>\n<td>Local date/time of the calling system, ISO 8601 with no UTC offset: <code>yyyy-MM-ddTHH:mm:ss</code>. Send the actual time of the request. The value shown is an example.</td>\n</tr>\n<tr>\n<td><code>paymentType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>2</code></td>\n<td>Tender. <code>2</code> = Credit. See <strong>Payment types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>transactionType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>2</code></td>\n<td>Operation. <code>2</code> = Void. See <strong>Transaction types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>stationNumber</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Station / register number. Returned as a string in <code>EvertecResponse.station_number</code>.</td>\n</tr>\n<tr>\n<td><code>cashierId</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Cashier / clerk ID. Returned in <code>EvertecResponse.cashier_id</code>.</td>\n</tr>\n<tr>\n<td><code>cardPresent</code></td>\n<td>boolean</td>\n<td>Required</td>\n<td><code>false</code></td>\n<td><code>false</code> sends the request down the synchronous, token-based <strong>CNP</strong> path.</td>\n</tr>\n<tr>\n<td><code>tokenNumber</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Charge Anywhere payment token that stands for the stored card. <strong>Sensitive:</strong> never log it or show it.</td>\n</tr>\n<tr>\n<td><code>fullName</code></td>\n<td>string</td>\n<td>Optional</td>\n<td><code>\"John Smith\"</code></td>\n<td>Cardholder / customer display name. Informational only.</td>\n</tr>\n<tr>\n<td><code>amountOfSale</code></td>\n<td>number (2 dp)</td>\n<td>Required</td>\n<td><code>20.00</code></td>\n<td>Base amount before tax, tip, cashback and fee.</td>\n</tr>\n<tr>\n<td><code>tax</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>6.00</code></td>\n<td>Total tax = <code>stateTax + cityTax + reducedTax</code>. The collection pre-request script calculates it.</td>\n</tr>\n<tr>\n<td><code>baseStateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for state and municipal tax.</td>\n</tr>\n<tr>\n<td><code>baseReducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for reduced state tax.</td>\n</tr>\n<tr>\n<td><code>stateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>1.00</code></td>\n<td>State tax amount (tax type: State).</td>\n</tr>\n<tr>\n<td><code>cityTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>2.00</code></td>\n<td>Municipal / city tax amount (tax type: Municipal).</td>\n</tr>\n<tr>\n<td><code>reducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>3.00</code></td>\n<td>Reduced state tax amount (tax type: Reduced state).</td>\n</tr>\n<tr>\n<td><code>subTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>20.00</code></td>\n<td>Equals <code>amountOfSale</code>. The collection script calculates it.</td>\n</tr>\n<tr>\n<td><code>tips</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Tip / gratuity amount.</td>\n</tr>\n<tr>\n<td><code>cashBack</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Cashback amount.</td>\n</tr>\n<tr>\n<td><code>fee</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Extra fee / surcharge amount.</td>\n</tr>\n<tr>\n<td><code>grandTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>26.00</code></td>\n<td><code>subTotal + tax + tips + cashBack + fee</code>. The collection script calculates it. This is the total sent for authorization; it comes back as <code>EvertecResponse.amounts.total</code>.</td>\n</tr>\n<tr>\n<td><code>originalAmount</code></td>\n<td>number</td>\n<td>Required</td>\n<td><code></code></td>\n<td>Amount of the original transaction, normally its <code>AuthorizedAmount</code>. Postman saves it as <code></code>.</td>\n</tr>\n<tr>\n<td><code>originalApprovalCode</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td><code>ApprovalCode</code> returned by the original transaction. Postman saves it as <code></code>.</td>\n</tr>\n<tr>\n<td><code>originalGatewayReferenceNumber</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td><code>GatewayReferenceNumber</code> of the original transaction (12 digits, keep leading zeros). EVUAPI uses it to find the transaction being voided.</td>\n</tr>\n<tr>\n<td><code>appVersion</code></td>\n<td>string</td>\n<td>Recommended</td>\n<td><code>\"1.0.0\"</code></td>\n<td>Version of the calling application. Used for support and compatibility tracking.</td>\n</tr>\n<tr>\n<td><code>timeOut</code></td>\n<td>integer (ms)</td>\n<td>Optional</td>\n<td><code>30000</code></td>\n<td>Maximum time, in ms, to wait for the processor's response. Processing is synchronous, and EVUAPI returns as soon as the response arrives. <code>0</code> uses the platform default.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"business-rules\">Business rules</h3>\n<ul>\n<li><code>tax</code> must equal <code>stateTax + cityTax + reducedTax</code>.</li>\n<li><code>subTotal</code> must equal <code>amountOfSale</code>.</li>\n<li><code>grandTotal</code> must equal <code>subTotal + tax + tips + cashBack + fee</code>.</li>\n<li>Use decimal (not floating-point) math, and round money to 2 decimal places.</li>\n<li>The identity header values must be the same as the body's <code>merchantId</code>, <code>terminalId</code> and <code>identification</code>.</li>\n<li><code>transactionType</code> is always <code>2</code>. <code>originalGatewayReferenceNumber</code> is <strong>required</strong>. It identifies the transaction being voided.</li>\n</ul>\n<h2 id=\"response\">Response</h2>\n<h3 id=\"http-status-codes\">HTTP status codes</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>HTTP status</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>200 OK</code></td>\n<td>The request was processed. The final result is in the body.</td>\n</tr>\n<tr>\n<td><code>4xx</code></td>\n<td>Validation, identity or authorization failure. Fix the request or configuration. <strong>Don't retry it unchanged.</strong></td>\n</tr>\n<tr>\n<td><code>5xx</code></td>\n<td>Service-side failure. Save <code>ErrorId</code> if one is returned. If you have a <code>RequestId</code>, check the status before you consider a retry.</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p><strong>HTTP 200 does not mean approved.</strong> A decline also comes back as <code>200</code> with <code>Status=Declined</code>. Always decide the outcome from <code>Status</code> and <code>Completed</code>.</p>\n</blockquote>\n<h3 id=\"response-body\">Response body</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>RequestId</code></td>\n<td>string</td>\n<td>EVUAPI's ID for this transaction: 32 lowercase hex characters, no hyphens. Save it right away. You need it to get the status and to contact support.</td>\n</tr>\n<tr>\n<td><code>Status</code></td>\n<td>string</td>\n<td>Current lifecycle state. See <strong>Transaction statuses</strong>.</td>\n</tr>\n<tr>\n<td><code>Completed</code></td>\n<td>boolean</td>\n<td><code>true</code> only when <code>Status</code> is final. While it is <code>false</code>, keep polling <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><code>ResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Result code normalized by EVUAPI. See <strong>Response codes</strong>. Keep it as a string (it can have leading zeros). <code>null</code> while not final.</td>\n</tr>\n<tr>\n<td><code>ProcessorResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Raw code from the processor or terminal, such as <code>00</code> or <code>68</code>. An empty string means the processor was never reached.</td>\n</tr>\n<tr>\n<td><code>ResponseText</code></td>\n<td>string (nullable)</td>\n<td>Readable result text from the processor, gateway or EVUAPI. Show it to operators, but don't parse it.</td>\n</tr>\n<tr>\n<td><code>EvertecResponse</code></td>\n<td>object (nullable)</td>\n<td>Processor-specific details. <strong>CNP:</strong> a fixed, ordered shape. <strong>CP:</strong> the terminal's raw final result. <code>null</code> while not final. See the <em>CNP</em> and <em>CP</em> folder docs.</td>\n</tr>\n<tr>\n<td><code>ApprovalCode</code></td>\n<td>string (nullable)</td>\n<td>Processor authorization code, normally 6 characters. It can also be filled in on a <strong>decline</strong>, so never use it alone to decide approval.</td>\n</tr>\n<tr>\n<td><code>GatewayReferenceNumber</code></td>\n<td>string (nullable)</td>\n<td>Charge Anywhere gateway reference: 12 digits, keep the leading zeros. Send it as <code>originalGatewayReferenceNumber</code> on a later Force, Void or Return.</td>\n</tr>\n<tr>\n<td><code>AuthorizedAmount</code></td>\n<td>number (nullable)</td>\n<td>Amount the processor authorized. <code>0</code> on an approved Void. <code>null</code> when nothing was authorized.</td>\n</tr>\n<tr>\n<td><code>TokenNumber</code></td>\n<td>string (nullable)</td>\n<td>CNP: the payment token for the transaction. CP: <code>null</code>. <strong>Sensitive.</strong></td>\n</tr>\n<tr>\n<td><code>CardType</code></td>\n<td>string (nullable)</td>\n<td>Card brand or tender code. See <strong>Card type codes</strong>.</td>\n</tr>\n<tr>\n<td><code>StatusUrl</code></td>\n<td>string</td>\n<td>Relative path of the status resource, e.g. <code>/api/v1/transactions/{RequestId}</code>. Put <code>https://webtest.chargeanywhere.com/evuapi</code> in front and add the three identity query parameters.</td>\n</tr>\n<tr>\n<td><code>ErrorId</code></td>\n<td>string (nullable)</td>\n<td>ID of an error that EVUAPI logged. Give it to Charge Anywhere support.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"evertecresponse\">EvertecResponse</h3>\n<p><code>EvertecResponse</code> always has the <strong>complete, ordered CNP shape</strong>: 31 properties, where an unavailable value is an explicit <code>null</code>, and the nested objects are always present. The full dictionary is in the <strong>CNP</strong> folder documentation.</p>\n<p>On a Void, <code>EvertecResponse.reference</code> holds the <strong>original</strong> transaction's reference, and the top-level <code>GatewayReferenceNumber</code> holds the Void's own new reference. <code>amounts.total</code> is <code>0.00</code>.</p>\n<h3 id=\"how-to-interpret-the-result\">How to interpret the result</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Completed</th>\n<th>Status</th>\n<th>What to do</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>true</code></td>\n<td><code>Approved</code></td>\n<td>Success. Save <code>RequestId</code>, <code>GatewayReferenceNumber</code>, <code>ApprovalCode</code>, <code>AuthorizedAmount</code>.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Declined</code></td>\n<td>Not approved. Show <code>ResponseText</code>. Don't retry unchanged.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Failed</code> / <code>TimedOut</code> / <code>Cancelled</code></td>\n<td>Not approved. Record the result. Only start a new transaction after you confirm with the customer.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"error-handling\">Error handling</h2>\n<ul>\n<li><strong>Network timeout or no response:</strong> Don't resend the POST automatically. If you got a <code>RequestId</code>, call <strong>Get Transaction Status</strong>. If you didn't, reconcile with your invoice/order reference before you try again.</li>\n<li><strong><code>4xx</code>:</strong> Check the identity headers against the body, the <code>paymentType</code> / <code>transactionType</code> combination, the amount math, and the <code>original*</code> values.</li>\n<li><strong><code>5xx</code>:</strong> Save <code>ErrorId</code> and <code>RequestId</code> (if you have them) and contact support. Check the status before you retry.</li>\n<li><strong>Original not found:</strong> Check that <code>originalGatewayReferenceNumber</code> belongs to a transaction on the same merchant/terminal identity.</li>\n</ul>\n<h2 id=\"testing-in-postman\">Testing in Postman</h2>\n<ul>\n<li><strong>Reads:</strong> <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code>, <code></code>, <code>1</code>, <code>1</code>, <code>1.0.0</code> and the amount variables. The collection pre-request script recalculates <code>SubTotal</code>, <code>Tax</code> and <code>GrandTotal</code>.</li>\n<li><strong>Writes (test script):</strong> <code>RequestId</code>, <code>OriginalGatewayReferenceNumber</code> (from <code>GatewayReferenceNumber</code>), <code>OriginalAmount</code> (from <code>AuthorizedAmount</code>), <code>OriginalApprovalCode</code> (from <code>ApprovalCode</code>) and <code>ErrorId</code>, <strong>whenever these are in the response</strong>.</li>\n<li>⚠️ Values are saved even when the transaction is <strong>declined</strong>. Before you run a follow-up request, check that the last response was the approved original you meant.</li>\n<li><strong>Tests:</strong> HTTP status is 200/201/202. <code>EvertecResponse</code> is present. The exact ordered CNP key list and nested keys match. Static values are correct (<code>card_acceptor_id</code>, <code>signature_indicator</code>, <code>payment_host</code>, <code>manual_entry_indicator</code>, <code>receipt_email</code>, <code>entry_type</code>, <code>emv_data</code>). <code>merchant_id</code> / <code>merchant_vid</code> are trimmed, at most 19 characters, and equal. <code>station_number</code> matches the request. <code>transaction_type_indicator</code> and <code>special_account</code> match the tender. <code>card_bin_type</code> is a supported brand. Internal correlation fields (<code>last_reference</code>, <code>trx_id</code>, <code>session_id</code>) are not present.</li>\n</ul>\n<h2 id=\"related-requests\">Related requests</h2>\n<ul>\n<li><strong>CNP → Credit → Return</strong> once the batch has settled</li>\n</ul>\n","urlObject":{"path":["api","v1","transactions"],"host":["https://webtest.chargeanywhere.com/evuapi"],"query":[],"variable":[]}},"response":[{"id":"f6bb38ea-5e1f-483c-8a64-26584f42e01c","name":"200 OK · Approved","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 2,\n  \"transactionType\": 2,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": false,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"originalAmount\": ,\n  \"originalApprovalCode\": \"\",\n  \"originalGatewayReferenceNumber\": \"\",\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"**Scenario:** An earlier Mastercard Sale was voided.\n\n- `AuthorizedAmount=0`, `EvertecResponse.amounts.total=\"0.00\"`, and `ApprovalCode` is empty.\n- `EvertecResponse.reference` is the **original Sale's** reference. The top-level `GatewayReferenceNumber` is the Void's own reference."},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Cache-Control","value":"no-cache,no-cache, no-store"},{"key":"Pragma","value":"no-cache"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Expires","value":"-1,0"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"X-FRAME-OPTIONS","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"Referrer-Policy","value":"no-referrer-when-downgrade"},{"key":"Content-Security-Policy","value":"default-src data: 'unsafe-inline' 'unsafe-eval' https:; img-src * data:;"},{"key":"Date","value":"Wed, 23 Sep 2026 08:25:00 GMT"},{"key":"Content-Length","value":"1913"}],"cookie":[],"responseTime":null,"body":"{\n    \"RequestId\": \"8309e32267244602a8e68c0cc64a6b8b\",\n    \"Status\": \"Approved\",\n    \"Completed\": true,\n    \"ResponseCode\": \"000\",\n    \"ProcessorResponseCode\": \"00\",\n    \"ResponseText\": \"APPROVED\",\n    \"EvertecResponse\": {\n        \"trace_number\": \"042459\",\n        \"batch_number\": \"009267001\",\n        \"card_acceptor_id\": \"NONE\",\n        \"special_account\": \"MC\",\n        \"merchant_id\": null,\n        \"pan_card_number\": \"0013\",\n        \"reference\": \"000004587981\",\n        \"receipt_output\": {\n            \"merchant\": null,\n            \"customer\": null\n        },\n        \"amounts\": {\n            \"total\": \"0.00\",\n            \"base_state_tax\": \"10.00\",\n            \"tip\": \"0.00\",\n            \"reduced_tax\": \"3.00\",\n            \"base_reduced_tax\": \"10.00\",\n            \"state_tax\": \"1.00\",\n            \"city_tax\": \"2.00\"\n        },\n        \"authorization_code\": null,\n        \"emv_data\": {},\n        \"signature_indicator\": \"NOSIGN\",\n        \"transaction_time\": \"042500\",\n        \"payment_host\": \"ATH1\",\n        \"invoice_number\": null,\n        \"terminal_id\": \"CAWW000000001\",\n        \"merchant_vid\": null,\n        \"transaction_date\": \"09232026\",\n        \"approval_code\": \"00\",\n        \"cashier_id\": \"1\",\n        \"manual_entry_indicator\": \"yes\",\n        \"ivu\": {\n            \"control_line1\": null,\n            \"control_line2\": null\n        },\n        \"process_cashback\": \"no\",\n        \"card_bin_type\": \"MASTERCARD\",\n        \"terminal_vid\": \"CAWW000000001\",\n        \"station_number\": \"1\",\n        \"response_message\": \"APPROVED\",\n        \"receipt_email\": \"no\",\n        \"transaction_type_indicator\": \"C\",\n        \"entry_type\": \"MANUAL\",\n        \"fallback\": \"no\"\n    },\n    \"ApprovalCode\": \"\",\n    \"GatewayReferenceNumber\": \"000004587983\",\n    \"AuthorizedAmount\": 0,\n    \"TokenNumber\": \"0000000000001234\",\n    \"CardType\": \"2\",\n    \"StatusUrl\": \"/api/v1/transactions/8309e32267244602a8e68c0cc64a6b8b\",\n    \"ErrorId\": null\n}"}],"_postman_id":"2b07084d-0714-452a-9ca2-bb54e99203e9"},{"name":"Return","event":[{"listen":"test","script":{"type":"text/javascript","exec":["let body = {};","try { body = pm.response.json(); } catch (e) {}","const requestId = body.requestId || body.RequestId;","const gatewayReferenceNumber = body.gatewayReferenceNumber || body.GatewayReferenceNumber;","const authorizedAmount = body.authorizedAmount !== undefined ? body.authorizedAmount : body.AuthorizedAmount;","const errorId = body.errorId || body.ErrorId;","if (requestId) pm.collectionVariables.set('RequestId', requestId);","if (gatewayReferenceNumber) pm.collectionVariables.set('OriginalGatewayReferenceNumber', gatewayReferenceNumber);","if (authorizedAmount !== undefined && authorizedAmount !== null) pm.collectionVariables.set('OriginalAmount', authorizedAmount);","if (errorId) pm.collectionVariables.set('ErrorId', errorId);","pm.test('Transaction request accepted', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });","const originalApprovalCode = body.approvalCode || body.ApprovalCode || (body.data && (body.data.approvalCode || body.data.ApprovalCode));","if (originalApprovalCode) pm.collectionVariables.set('OriginalApprovalCode', originalApprovalCode);","","let requestBody = {};","try { requestBody = JSON.parse(pm.variables.replaceIn(pm.request.body.raw || '{}')); } catch (e) {","  console.warn('Unable to parse request body for CNP response validation:', e.message);","}","","const evertecResponse = body.EvertecResponse || body.evertecResponse;","const isSuccess = pm.response.code >= 200 && pm.response.code < 300;","","if (isSuccess) {","  pm.test('CNP EvertecResponse is present', function () {","    pm.expect(evertecResponse).to.be.an('object');","  });","}","","if (isSuccess && evertecResponse && typeof evertecResponse === 'object') {","  const expectedKeys = [","    'trace_number', 'batch_number', 'card_acceptor_id', 'special_account',","    'merchant_id', 'pan_card_number', 'reference', 'receipt_output',","    'amounts', 'authorization_code', 'emv_data', 'signature_indicator',","    'transaction_time', 'payment_host', 'invoice_number', 'terminal_id',","    'merchant_vid', 'transaction_date', 'approval_code', 'cashier_id',","    'manual_entry_indicator', 'ivu', 'process_cashback', 'card_bin_type',","    'terminal_vid', 'station_number', 'response_message', 'receipt_email',","    'transaction_type_indicator', 'entry_type', 'fallback'","  ];","","  pm.test('CNP EvertecResponse has the CP-compatible ordered shape', function () {","    pm.expect(Object.keys(evertecResponse)).to.eql(expectedKeys);","  });","","  pm.test('CNP EvertecResponse nested objects have the expected keys', function () {","    pm.expect(Object.keys(evertecResponse.receipt_output || {})).to.eql(['merchant', 'customer']);","    pm.expect(Object.keys(evertecResponse.amounts || {})).to.eql(['total', 'base_state_tax', 'tip', 'reduced_tax', 'base_reduced_tax', 'state_tax', 'city_tax']);","    pm.expect(evertecResponse.emv_data).to.be.an('object');","    pm.expect(Object.keys(evertecResponse.emv_data || {})).to.eql([]);","    pm.expect(Object.keys(evertecResponse.ivu || {})).to.eql(['control_line1', 'control_line2']);","  });","","  pm.test('CNP static Evertec fields are correct', function () {","    pm.expect(evertecResponse.card_acceptor_id).to.eql('NONE');","    pm.expect(evertecResponse.signature_indicator).to.eql('NOSIGN');","    pm.expect(evertecResponse.payment_host).to.eql('ATH1');","    pm.expect(evertecResponse.manual_entry_indicator).to.eql('yes');","    pm.expect(evertecResponse.receipt_email).to.eql('no');","    pm.expect(evertecResponse.entry_type).to.eql('MANUAL');","    pm.expect(evertecResponse.emv_data).to.be.an('object');","    pm.expect(Object.keys(evertecResponse.emv_data || {})).to.eql([]);","  });","","  pm.test('CNP transaction and merchant enrichment fields are present', function () {","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'trace_number')).to.eql(true);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'merchant_id')).to.eql(true);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'merchant_vid')).to.eql(true);","  });","","  if (evertecResponse.merchant_id !== null && evertecResponse.merchant_id !== undefined) {","    pm.test('CNP merchant_id is trimmed and no longer than 19 characters', function () {","      pm.expect(evertecResponse.merchant_id).to.eql(String(evertecResponse.merchant_id).trim());","      pm.expect(String(evertecResponse.merchant_id).length).to.be.at.most(19);","    });","  }","","  if (evertecResponse.merchant_vid !== null && evertecResponse.merchant_vid !== undefined) {","    pm.test('CNP merchant_vid is trimmed and no longer than 19 characters', function () {","      pm.expect(evertecResponse.merchant_vid).to.eql(String(evertecResponse.merchant_vid).trim());","      pm.expect(String(evertecResponse.merchant_vid).length).to.be.at.most(19);","    });","  }","","  if (evertecResponse.merchant_id && evertecResponse.merchant_vid) {","    pm.test('CNP merchant_id and merchant_vid use the same P-048 value', function () {","      pm.expect(evertecResponse.merchant_vid).to.eql(evertecResponse.merchant_id);","    });","  }","","  if (requestBody.stationNumber !== undefined && requestBody.stationNumber !== null) {","    pm.test('CNP station_number echoes request stationNumber', function () {","      pm.expect(String(evertecResponse.station_number)).to.eql(String(requestBody.stationNumber));","    });","  }","","  const indicatorByPaymentType = { 2: 'C', 5: 'I', 6: 'D', 7: 'E', 8: 'E', 13: 'A' };","  const expectedIndicator = indicatorByPaymentType[Number(requestBody.paymentType)];","  if (expectedIndicator) {","    pm.test('CNP transaction_type_indicator matches paymentType', function () {","      pm.expect(evertecResponse.transaction_type_indicator).to.eql(expectedIndicator);","    });","  }","","  const specialByPaymentType = { 5: 'IC', 6: 'AT', 7: 'EC', 8: 'EB', 13: 'AM' };","  const expectedNonCreditSpecial = specialByPaymentType[Number(requestBody.paymentType)];","  if (expectedNonCreditSpecial) {","    pm.test('CNP special_account matches non-credit paymentType', function () {","      pm.expect(evertecResponse.special_account).to.eql(expectedNonCreditSpecial);","    });","  }","","  if (Number(requestBody.paymentType) === 2) {","    const supportedCardBinTypes = [null, 'VISA', 'MASTERCARD', 'AMEX', 'DISCOVER'];","    pm.test('CNP card_bin_type is null or a supported CreditCardType brand', function () {","      pm.expect(evertecResponse.card_bin_type).to.be.oneOf(supportedCardBinTypes);","    });","","    const specialByCardBinType = { VISA: 'VC', MASTERCARD: 'MC', AMEX: 'AX', DISCOVER: 'DC' };","    const expectedCreditSpecial = specialByCardBinType[evertecResponse.card_bin_type];","    if (expectedCreditSpecial) {","      pm.test('CNP credit special_account matches card_bin_type', function () {","        pm.expect(evertecResponse.special_account).to.eql(expectedCreditSpecial);","      });","    }","  }","","  pm.test('EvertecResponse suppresses App2-only correlation fields', function () {","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'last_reference')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'trx_id')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'session_id')).to.eql(false);","  });","}"],"id":"3b8d697c-87ca-4de6-9e77-d592e784b7ca"}}],"id":"4142e025-c6f4-417d-ae34-ea495753de79","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 2,\n  \"transactionType\": 3,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": false,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"originalAmount\": ,\n  \"originalApprovalCode\": \"\",\n  \"originalGatewayReferenceNumber\": \"\",\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"<h1 id=\"cnp-credit-return\">CNP Credit Return</h1>\n<blockquote>\n<p>Refunds money to the customer.</p>\n</blockquote>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Endpoint</strong></td>\n<td><code>POST https://webtest.chargeanywhere.com/evuapi/api/v1/transactions</code></td>\n</tr>\n<tr>\n<td><strong>Channel</strong></td>\n<td>Card-not-present (CNP) · <code>cardPresent=false</code></td>\n</tr>\n<tr>\n<td><strong>Tender</strong></td>\n<td>Credit (<code>paymentType=2</code>)</td>\n</tr>\n<tr>\n<td><strong>Operation</strong></td>\n<td>Return (<code>transactionType=3</code>)</td>\n</tr>\n<tr>\n<td><strong>Processing model</strong></td>\n<td><strong>Synchronous.</strong> The final result is returned in this response (<code>Completed=true</code>).</td>\n</tr>\n<tr>\n<td><strong>Caller</strong></td>\n<td>Merchant or POS application</td>\n</tr>\n<tr>\n<td><strong>Authentication</strong></td>\n<td>Merchant identity headers <code>X-Merchant-Id</code>, <code>X-Terminal-Id</code>, <code>X-Identification</code></td>\n</tr>\n<tr>\n<td><strong>Financial impact</strong></td>\n<td>Money is returned to the customer and the refund is queued for settlement.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"overview\">Overview</h2>\n<p>Use Return to refund an earlier purchase, usually after settlement. For a <strong>linked</strong> Return, send the original transaction's <code>original*</code> fields, as this collection does.</p>\n<h2 id=\"before-you-call\">Before you call</h2>\n<ul>\n<li><code></code> must hold a valid Charge Anywhere payment token for this merchant.</li>\n<li>For a linked Return, run the original <strong>Sale</strong> (or <strong>Force</strong>) first so the <code>Original*</code> variables are filled in.</li>\n<li>Set <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code> and <code></code> in your active environment.</li>\n</ul>\n<h2 id=\"request\">Request</h2>\n<h3 id=\"headers\">Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Required</th>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Content-Type</code></td>\n<td>Yes</td>\n<td><code>application/json</code></td>\n<td>The request body is JSON.</td>\n</tr>\n<tr>\n<td><code>Accept</code></td>\n<td>Recommended</td>\n<td><code>application/json</code></td>\n<td>Asks for a JSON response.</td>\n</tr>\n<tr>\n<td><code>X-Merchant-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant identity. Must match body <code>merchantId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Terminal-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant terminal identity (keep leading zeros). Must match body <code>terminalId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Identification</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Physical terminal identity. Must match body <code>identification</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"body-parameters\">Body parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Value in this request</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>merchantId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant ID that Charge Anywhere issued for this integration. Must be the same as the <code>X-Merchant-Id</code> header.</td>\n</tr>\n<tr>\n<td><code>identification</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Physical terminal / device identity (the same value as the terminal serial number / ManNumber). Must be the same as <code>X-Identification</code>.</td>\n</tr>\n<tr>\n<td><code>terminalId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant terminal ID. Send it as a <strong>string</strong> and keep leading zeros (e.g. <code>0002</code>). Must be the same as <code>X-Terminal-Id</code>.</td>\n</tr>\n<tr>\n<td><code>terminalDateTime</code></td>\n<td>string (date-time)</td>\n<td>Required</td>\n<td><code>\"2026-08-14T18:30:00\"</code></td>\n<td>Local date/time of the calling system, ISO 8601 with no UTC offset: <code>yyyy-MM-ddTHH:mm:ss</code>. Send the actual time of the request. The value shown is an example.</td>\n</tr>\n<tr>\n<td><code>paymentType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>2</code></td>\n<td>Tender. <code>2</code> = Credit. See <strong>Payment types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>transactionType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>3</code></td>\n<td>Operation. <code>3</code> = Return. See <strong>Transaction types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>stationNumber</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Station / register number. Returned as a string in <code>EvertecResponse.station_number</code>.</td>\n</tr>\n<tr>\n<td><code>cashierId</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Cashier / clerk ID. Returned in <code>EvertecResponse.cashier_id</code>.</td>\n</tr>\n<tr>\n<td><code>cardPresent</code></td>\n<td>boolean</td>\n<td>Required</td>\n<td><code>false</code></td>\n<td><code>false</code> sends the request down the synchronous, token-based <strong>CNP</strong> path.</td>\n</tr>\n<tr>\n<td><code>tokenNumber</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Charge Anywhere payment token that stands for the stored card. <strong>Sensitive:</strong> never log it or show it.</td>\n</tr>\n<tr>\n<td><code>fullName</code></td>\n<td>string</td>\n<td>Optional</td>\n<td><code>\"John Smith\"</code></td>\n<td>Cardholder / customer display name. Informational only.</td>\n</tr>\n<tr>\n<td><code>amountOfSale</code></td>\n<td>number (2 dp)</td>\n<td>Required</td>\n<td><code>20.00</code></td>\n<td>Base amount before tax, tip, cashback and fee.</td>\n</tr>\n<tr>\n<td><code>tax</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>6.00</code></td>\n<td>Total tax = <code>stateTax + cityTax + reducedTax</code>. The collection pre-request script calculates it.</td>\n</tr>\n<tr>\n<td><code>baseStateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for state and municipal tax.</td>\n</tr>\n<tr>\n<td><code>baseReducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for reduced state tax.</td>\n</tr>\n<tr>\n<td><code>stateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>1.00</code></td>\n<td>State tax amount (tax type: State).</td>\n</tr>\n<tr>\n<td><code>cityTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>2.00</code></td>\n<td>Municipal / city tax amount (tax type: Municipal).</td>\n</tr>\n<tr>\n<td><code>reducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>3.00</code></td>\n<td>Reduced state tax amount (tax type: Reduced state).</td>\n</tr>\n<tr>\n<td><code>subTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>20.00</code></td>\n<td>Equals <code>amountOfSale</code>. The collection script calculates it.</td>\n</tr>\n<tr>\n<td><code>tips</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Tip / gratuity amount.</td>\n</tr>\n<tr>\n<td><code>cashBack</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Cashback amount.</td>\n</tr>\n<tr>\n<td><code>fee</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Extra fee / surcharge amount.</td>\n</tr>\n<tr>\n<td><code>grandTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>26.00</code></td>\n<td><code>subTotal + tax + tips + cashBack + fee</code>. The collection script calculates it. This is the total sent for authorization; it comes back as <code>EvertecResponse.amounts.total</code>.</td>\n</tr>\n<tr>\n<td><code>originalAmount</code></td>\n<td>number</td>\n<td>Conditional (linked Return)</td>\n<td><code></code></td>\n<td>Amount of the original transaction, normally its <code>AuthorizedAmount</code>. Postman saves it as <code></code>.</td>\n</tr>\n<tr>\n<td><code>originalApprovalCode</code></td>\n<td>string</td>\n<td>Conditional (linked Return)</td>\n<td><code>\"\"</code></td>\n<td><code>ApprovalCode</code> returned by the original transaction. Postman saves it as <code></code>.</td>\n</tr>\n<tr>\n<td><code>originalGatewayReferenceNumber</code></td>\n<td>string</td>\n<td>Conditional (linked Return)</td>\n<td><code>\"\"</code></td>\n<td><code>GatewayReferenceNumber</code> of the original transaction (12 digits, keep leading zeros).</td>\n</tr>\n<tr>\n<td><code>appVersion</code></td>\n<td>string</td>\n<td>Recommended</td>\n<td><code>\"1.0.0\"</code></td>\n<td>Version of the calling application. Used for support and compatibility tracking.</td>\n</tr>\n<tr>\n<td><code>timeOut</code></td>\n<td>integer (ms)</td>\n<td>Optional</td>\n<td><code>30000</code></td>\n<td>Maximum time, in ms, to wait for the processor's response. Processing is synchronous, and EVUAPI returns as soon as the response arrives. <code>0</code> uses the platform default.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"business-rules\">Business rules</h3>\n<ul>\n<li><code>tax</code> must equal <code>stateTax + cityTax + reducedTax</code>.</li>\n<li><code>subTotal</code> must equal <code>amountOfSale</code>.</li>\n<li><code>grandTotal</code> must equal <code>subTotal + tax + tips + cashBack + fee</code>.</li>\n<li>Use decimal (not floating-point) math, and round money to 2 decimal places.</li>\n<li>The identity header values must be the same as the body's <code>merchantId</code>, <code>terminalId</code> and <code>identification</code>.</li>\n<li>For a linked Return, send the <code>original*</code> values of the purchase being refunded.</li>\n</ul>\n<h2 id=\"response\">Response</h2>\n<h3 id=\"http-status-codes\">HTTP status codes</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>HTTP status</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>200 OK</code></td>\n<td>The request was processed. The final result is in the body.</td>\n</tr>\n<tr>\n<td><code>4xx</code></td>\n<td>Validation, identity or authorization failure. Fix the request or configuration. <strong>Don't retry it unchanged.</strong></td>\n</tr>\n<tr>\n<td><code>5xx</code></td>\n<td>Service-side failure. Save <code>ErrorId</code> if one is returned. If you have a <code>RequestId</code>, check the status before you consider a retry.</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p><strong>HTTP 200 does not mean approved.</strong> A decline also comes back as <code>200</code> with <code>Status=Declined</code>. Always decide the outcome from <code>Status</code> and <code>Completed</code>.</p>\n</blockquote>\n<h3 id=\"response-body\">Response body</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>RequestId</code></td>\n<td>string</td>\n<td>EVUAPI's ID for this transaction: 32 lowercase hex characters, no hyphens. Save it right away. You need it to get the status and to contact support.</td>\n</tr>\n<tr>\n<td><code>Status</code></td>\n<td>string</td>\n<td>Current lifecycle state. See <strong>Transaction statuses</strong>.</td>\n</tr>\n<tr>\n<td><code>Completed</code></td>\n<td>boolean</td>\n<td><code>true</code> only when <code>Status</code> is final. While it is <code>false</code>, keep polling <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><code>ResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Result code normalized by EVUAPI. See <strong>Response codes</strong>. Keep it as a string (it can have leading zeros). <code>null</code> while not final.</td>\n</tr>\n<tr>\n<td><code>ProcessorResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Raw code from the processor or terminal, such as <code>00</code> or <code>68</code>. An empty string means the processor was never reached.</td>\n</tr>\n<tr>\n<td><code>ResponseText</code></td>\n<td>string (nullable)</td>\n<td>Readable result text from the processor, gateway or EVUAPI. Show it to operators, but don't parse it.</td>\n</tr>\n<tr>\n<td><code>EvertecResponse</code></td>\n<td>object (nullable)</td>\n<td>Processor-specific details. <strong>CNP:</strong> a fixed, ordered shape. <strong>CP:</strong> the terminal's raw final result. <code>null</code> while not final. See the <em>CNP</em> and <em>CP</em> folder docs.</td>\n</tr>\n<tr>\n<td><code>ApprovalCode</code></td>\n<td>string (nullable)</td>\n<td>Processor authorization code, normally 6 characters. It can also be filled in on a <strong>decline</strong>, so never use it alone to decide approval.</td>\n</tr>\n<tr>\n<td><code>GatewayReferenceNumber</code></td>\n<td>string (nullable)</td>\n<td>Charge Anywhere gateway reference: 12 digits, keep the leading zeros. Send it as <code>originalGatewayReferenceNumber</code> on a later Force, Void or Return.</td>\n</tr>\n<tr>\n<td><code>AuthorizedAmount</code></td>\n<td>number (nullable)</td>\n<td>Amount the processor authorized. <code>0</code> on an approved Void. <code>null</code> when nothing was authorized.</td>\n</tr>\n<tr>\n<td><code>TokenNumber</code></td>\n<td>string (nullable)</td>\n<td>CNP: the payment token for the transaction. CP: <code>null</code>. <strong>Sensitive.</strong></td>\n</tr>\n<tr>\n<td><code>CardType</code></td>\n<td>string (nullable)</td>\n<td>Card brand or tender code. See <strong>Card type codes</strong>.</td>\n</tr>\n<tr>\n<td><code>StatusUrl</code></td>\n<td>string</td>\n<td>Relative path of the status resource, e.g. <code>/api/v1/transactions/{RequestId}</code>. Put <code>https://webtest.chargeanywhere.com/evuapi</code> in front and add the three identity query parameters.</td>\n</tr>\n<tr>\n<td><code>ErrorId</code></td>\n<td>string (nullable)</td>\n<td>ID of an error that EVUAPI logged. Give it to Charge Anywhere support.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"evertecresponse\">EvertecResponse</h3>\n<p><code>EvertecResponse</code> always has the <strong>complete, ordered CNP shape</strong>: 31 properties, where an unavailable value is an explicit <code>null</code>, and the nested objects are always present. The full dictionary is in the <strong>CNP</strong> folder documentation.</p>\n<h3 id=\"how-to-interpret-the-result\">How to interpret the result</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Completed</th>\n<th>Status</th>\n<th>What to do</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>true</code></td>\n<td><code>Approved</code></td>\n<td>Success. Save <code>RequestId</code>, <code>GatewayReferenceNumber</code>, <code>ApprovalCode</code>, <code>AuthorizedAmount</code>.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Declined</code></td>\n<td>Not approved. Show <code>ResponseText</code>. Don't retry unchanged.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Failed</code> / <code>TimedOut</code> / <code>Cancelled</code></td>\n<td>Not approved. Record the result. Only start a new transaction after you confirm with the customer.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"error-handling\">Error handling</h2>\n<ul>\n<li><strong>Network timeout or no response:</strong> Don't resend the POST automatically. If you got a <code>RequestId</code>, call <strong>Get Transaction Status</strong>. If you didn't, reconcile with your invoice/order reference before you try again.</li>\n<li><strong><code>4xx</code>:</strong> Check the identity headers against the body, the <code>paymentType</code> / <code>transactionType</code> combination, the amount math, and the <code>original*</code> values.</li>\n<li><strong><code>5xx</code>:</strong> Save <code>ErrorId</code> and <code>RequestId</code> (if you have them) and contact support. Check the status before you retry.</li>\n</ul>\n<h2 id=\"testing-in-postman\">Testing in Postman</h2>\n<ul>\n<li><strong>Reads:</strong> <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code>, <code></code>, <code>1</code>, <code>1</code>, <code>1.0.0</code> and the amount variables. The collection pre-request script recalculates <code>SubTotal</code>, <code>Tax</code> and <code>GrandTotal</code>.</li>\n<li><strong>Writes (test script):</strong> <code>RequestId</code>, <code>OriginalGatewayReferenceNumber</code> (from <code>GatewayReferenceNumber</code>), <code>OriginalAmount</code> (from <code>AuthorizedAmount</code>), <code>OriginalApprovalCode</code> (from <code>ApprovalCode</code>) and <code>ErrorId</code>, <strong>whenever these are in the response</strong>.</li>\n<li>⚠️ Values are saved even when the transaction is <strong>declined</strong>. Before you run a follow-up request, check that the last response was the approved original you meant.</li>\n<li><strong>Tests:</strong> HTTP status is 200/201/202. <code>EvertecResponse</code> is present. The exact ordered CNP key list and nested keys match. Static values are correct (<code>card_acceptor_id</code>, <code>signature_indicator</code>, <code>payment_host</code>, <code>manual_entry_indicator</code>, <code>receipt_email</code>, <code>entry_type</code>, <code>emv_data</code>). <code>merchant_id</code> / <code>merchant_vid</code> are trimmed, at most 19 characters, and equal. <code>station_number</code> matches the request. <code>transaction_type_indicator</code> and <code>special_account</code> match the tender. <code>card_bin_type</code> is a supported brand. Internal correlation fields (<code>last_reference</code>, <code>trx_id</code>, <code>session_id</code>) are not present.</li>\n</ul>\n<h2 id=\"related-requests\">Related requests</h2>\n<ul>\n<li><strong>CNP → Credit → Void</strong> to cancel an unsettled Return</li>\n</ul>\n","urlObject":{"path":["api","v1","transactions"],"host":["https://webtest.chargeanywhere.com/evuapi"],"query":[],"variable":[]}},"response":[{"id":"f780fb86-3f64-4bb1-8ffa-f016fe3ad604","name":"200 OK · Approved","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 2,\n  \"transactionType\": 3,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": false,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"originalAmount\": ,\n  \"originalApprovalCode\": \"\",\n  \"originalGatewayReferenceNumber\": \"\",\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"**Scenario:** A linked Mastercard Return was approved.\n\n- The Return gets its own `GatewayReferenceNumber` and `ApprovalCode`.\n- `AuthorizedAmount` is the refunded total (`26`)."},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Cache-Control","value":"no-cache,no-cache, no-store"},{"key":"Pragma","value":"no-cache"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Expires","value":"-1,0"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"X-FRAME-OPTIONS","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"Referrer-Policy","value":"no-referrer-when-downgrade"},{"key":"Content-Security-Policy","value":"default-src data: 'unsafe-inline' 'unsafe-eval' https:; img-src * data:;"},{"key":"Date","value":"Wed, 23 Sep 2026 08:25:50 GMT"},{"key":"Content-Length","value":"1947"}],"cookie":[],"responseTime":null,"body":"{\n    \"RequestId\": \"f68c529abf7641c39148b5966e08dbc0\",\n    \"Status\": \"Approved\",\n    \"Completed\": true,\n    \"ResponseCode\": \"000\",\n    \"ProcessorResponseCode\": \"00\",\n    \"ResponseText\": \"APPROVED\",\n    \"EvertecResponse\": {\n        \"trace_number\": \"042549\",\n        \"batch_number\": \"009267001\",\n        \"card_acceptor_id\": \"NONE\",\n        \"special_account\": \"MC\",\n        \"merchant_id\": \"4549000000123\",\n        \"pan_card_number\": \"0013\",\n        \"reference\": \"000004587985\",\n        \"receipt_output\": {\n            \"merchant\": null,\n            \"customer\": null\n        },\n        \"amounts\": {\n            \"total\": \"26.00\",\n            \"base_state_tax\": \"10.00\",\n            \"tip\": \"0.00\",\n            \"reduced_tax\": \"3.00\",\n            \"base_reduced_tax\": \"10.00\",\n            \"state_tax\": \"1.00\",\n            \"city_tax\": \"2.00\"\n        },\n        \"authorization_code\": \"124097\",\n        \"emv_data\": {},\n        \"signature_indicator\": \"NOSIGN\",\n        \"transaction_time\": \"042550\",\n        \"payment_host\": \"ATH1\",\n        \"invoice_number\": null,\n        \"terminal_id\": \"CAWW000000001\",\n        \"merchant_vid\": \"4549000000123\",\n        \"transaction_date\": \"09232026\",\n        \"approval_code\": \"00\",\n        \"cashier_id\": \"1\",\n        \"manual_entry_indicator\": \"yes\",\n        \"ivu\": {\n            \"control_line1\": null,\n            \"control_line2\": null\n        },\n        \"process_cashback\": \"no\",\n        \"card_bin_type\": \"MASTERCARD\",\n        \"terminal_vid\": \"CAWW000000001\",\n        \"station_number\": \"1\",\n        \"response_message\": \"APPROVED\",\n        \"receipt_email\": \"no\",\n        \"transaction_type_indicator\": \"C\",\n        \"entry_type\": \"MANUAL\",\n        \"fallback\": \"no\"\n    },\n    \"ApprovalCode\": \"124097\",\n    \"GatewayReferenceNumber\": \"000004587985\",\n    \"AuthorizedAmount\": 26,\n    \"TokenNumber\": \"0000000000001234\",\n    \"CardType\": \"2\",\n    \"StatusUrl\": \"/api/v1/transactions/f68c529abf7641c39148b5966e08dbc0\",\n    \"ErrorId\": null\n}"}],"_postman_id":"4142e025-c6f4-417d-ae34-ea495753de79"}],"id":"cf7f71c6-279c-4196-aed6-ed6a1099bf93","description":"<h1 id=\"cnp-·-credit\">CNP · Credit</h1>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>paymentType</code></td>\n<td><code>2</code> (Credit)</td>\n</tr>\n<tr>\n<td><code>cardPresent</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>Card data</td>\n<td><code>tokenNumber</code>: a Charge Anywhere token. Card numbers are never sent.</td>\n</tr>\n<tr>\n<td>Supported operations</td>\n<td>Sale (<code>1</code>), Auth (<code>6</code>), Force (<code>4</code>), Void (<code>2</code>), Return (<code>3</code>)</td>\n</tr>\n<tr>\n<td>Brands</td>\n<td>Visa, Mastercard, American Express, Discover (<code>CardType</code> <code>1</code>–<code>4</code>)</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Token handling:</strong> <code>tokenNumber</code> is sensitive. Store it in a secret store, never write it to logs, and mask it in any UI.</p>\n","_postman_id":"cf7f71c6-279c-4196-aed6-ed6a1099bf93"},{"name":"Batch","item":[{"name":"Close Batch","event":[{"listen":"test","script":{"type":"text/javascript","exec":["let body = {};","try { body = pm.response.json(); } catch (e) {}","const requestId = body.requestId || body.RequestId || (body.data && (body.data.requestId || body.data.RequestId));","const errorId = body.errorId || body.ErrorId || (body.data && (body.data.errorId || body.data.ErrorId));","if (requestId) pm.collectionVariables.set('RequestId', requestId);","if (errorId) pm.collectionVariables.set('ErrorId', errorId);","pm.test('CNP CloseBatch request completed', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });"],"id":"3f4d7712-22a9-41be-99da-e5dead6951da"}}],"id":"3f004328-a92f-452d-8f86-cd087ad46bf5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 0,\n  \"transactionType\": 12,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": false,\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 0\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"<h1 id=\"cnp-close-batch\">CNP Close Batch</h1>\n<blockquote>\n<p>Closes and settles the current batch. This is a batch operation, not a payment.</p>\n</blockquote>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Endpoint</strong></td>\n<td><code>POST https://webtest.chargeanywhere.com/evuapi/api/v1/transactions</code></td>\n</tr>\n<tr>\n<td><strong>Channel</strong></td>\n<td>Card-not-present (CNP) · <code>cardPresent=false</code></td>\n</tr>\n<tr>\n<td><strong>Tender</strong></td>\n<td>Batch operation (not tender-specific)</td>\n</tr>\n<tr>\n<td><strong>Operation</strong></td>\n<td>Close Batch (<code>transactionType=12</code>)</td>\n</tr>\n<tr>\n<td><strong>Processing model</strong></td>\n<td><strong>Synchronous.</strong> The final result is returned in this response (<code>Completed=true</code>).</td>\n</tr>\n<tr>\n<td><strong>Caller</strong></td>\n<td>Merchant or POS application</td>\n</tr>\n<tr>\n<td><strong>Authentication</strong></td>\n<td>Merchant identity headers <code>X-Merchant-Id</code>, <code>X-Terminal-Id</code>, <code>X-Identification</code></td>\n</tr>\n<tr>\n<td><strong>Financial impact</strong></td>\n<td>Every open transaction in the batch is submitted for settlement.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"overview\">Overview</h2>\n<p>Run Close Batch at the end of the business day, or whenever your settlement process calls for it.</p>\n<h2 id=\"before-you-call\">Before you call</h2>\n<ul>\n<li>Set <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code> and <code></code> in your active environment.</li>\n</ul>\n<h2 id=\"request\">Request</h2>\n<h3 id=\"headers\">Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Required</th>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Content-Type</code></td>\n<td>Yes</td>\n<td><code>application/json</code></td>\n<td>The request body is JSON.</td>\n</tr>\n<tr>\n<td><code>Accept</code></td>\n<td>Recommended</td>\n<td><code>application/json</code></td>\n<td>Asks for a JSON response.</td>\n</tr>\n<tr>\n<td><code>X-Merchant-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant identity. Must match body <code>merchantId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Terminal-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant terminal identity (keep leading zeros). Must match body <code>terminalId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Identification</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Physical terminal identity. Must match body <code>identification</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"body-parameters\">Body parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Value in this request</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>merchantId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant ID that Charge Anywhere issued for this integration. Must be the same as the <code>X-Merchant-Id</code> header.</td>\n</tr>\n<tr>\n<td><code>identification</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Physical terminal / device identity (the same value as the terminal serial number / ManNumber). Must be the same as <code>X-Identification</code>.</td>\n</tr>\n<tr>\n<td><code>terminalId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant terminal ID. Send it as a <strong>string</strong> and keep leading zeros (e.g. <code>0002</code>). Must be the same as <code>X-Terminal-Id</code>.</td>\n</tr>\n<tr>\n<td><code>terminalDateTime</code></td>\n<td>string (date-time)</td>\n<td>Required</td>\n<td><code>\"2026-08-14T18:30:00\"</code></td>\n<td>Local date/time of the calling system, ISO 8601 with no UTC offset: <code>yyyy-MM-ddTHH:mm:ss</code>. Send the actual time of the request. The value shown is an example.</td>\n</tr>\n<tr>\n<td><code>paymentType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>0</code></td>\n<td><code>0</code>: Close Batch is not tied to a tender.</td>\n</tr>\n<tr>\n<td><code>transactionType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>12</code></td>\n<td>Operation. <code>12</code> = Close Batch. See <strong>Transaction types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>stationNumber</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Station / register number. Returned as a string in <code>EvertecResponse.station_number</code>.</td>\n</tr>\n<tr>\n<td><code>cashierId</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Cashier / clerk ID. Returned in <code>EvertecResponse.cashier_id</code>.</td>\n</tr>\n<tr>\n<td><code>cardPresent</code></td>\n<td>boolean</td>\n<td>Required</td>\n<td><code>false</code></td>\n<td><code>false</code> sends the request down the synchronous, token-based <strong>CNP</strong> path.</td>\n</tr>\n<tr>\n<td><code>appVersion</code></td>\n<td>string</td>\n<td>Recommended</td>\n<td><code>\"1.0.0\"</code></td>\n<td>Version of the calling application. Used for support and compatibility tracking.</td>\n</tr>\n<tr>\n<td><code>timeOut</code></td>\n<td>integer (ms)</td>\n<td>Optional</td>\n<td><code>0</code></td>\n<td>Maximum time, in ms, to wait for the settlement response. <code>0</code> uses the 60-second default for Close Batch.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"business-rules\">Business rules</h3>\n<ul>\n<li><code>paymentType=0</code>: Close Batch is not tied to a tender.</li>\n<li>Don't send <code>tokenNumber</code>, amounts, tax, tip, cashback, fee or <code>original*</code> fields.</li>\n<li>Settlement runs synchronously, so the response is final.</li>\n</ul>\n<h2 id=\"response\">Response</h2>\n<h3 id=\"http-status-codes\">HTTP status codes</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>HTTP status</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>200 OK</code></td>\n<td>The request was processed. The final result is in the body.</td>\n</tr>\n<tr>\n<td><code>4xx</code></td>\n<td>Validation, identity or authorization failure. Fix the request or configuration. <strong>Don't retry it unchanged.</strong></td>\n</tr>\n<tr>\n<td><code>5xx</code></td>\n<td>Service-side failure. Save <code>ErrorId</code> if one is returned. If you have a <code>RequestId</code>, check the status before you consider a retry.</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p><strong>HTTP 200 does not mean approved.</strong> A decline also comes back as <code>200</code> with <code>Status=Declined</code>. Always decide the outcome from <code>Status</code> and <code>Completed</code>.</p>\n</blockquote>\n<h3 id=\"response-body\">Response body</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>RequestId</code></td>\n<td>string</td>\n<td>EVUAPI's ID for this transaction: 32 lowercase hex characters, no hyphens. Save it right away. You need it to get the status and to contact support.</td>\n</tr>\n<tr>\n<td><code>Status</code></td>\n<td>string</td>\n<td>Current lifecycle state. See <strong>Transaction statuses</strong>.</td>\n</tr>\n<tr>\n<td><code>Completed</code></td>\n<td>boolean</td>\n<td><code>true</code> only when <code>Status</code> is final. While it is <code>false</code>, keep polling <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><code>ResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Result code normalized by EVUAPI. See <strong>Response codes</strong>. Keep it as a string (it can have leading zeros). <code>null</code> while not final.</td>\n</tr>\n<tr>\n<td><code>ProcessorResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Raw code from the processor or terminal, such as <code>00</code> or <code>68</code>. An empty string means the processor was never reached.</td>\n</tr>\n<tr>\n<td><code>ResponseText</code></td>\n<td>string (nullable)</td>\n<td>Readable result text from the processor, gateway or EVUAPI. Show it to operators, but don't parse it.</td>\n</tr>\n<tr>\n<td><code>EvertecResponse</code></td>\n<td>object (nullable)</td>\n<td>Processor-specific details. <strong>CNP:</strong> a fixed, ordered shape. <strong>CP:</strong> the terminal's raw final result. <code>null</code> while not final. See the <em>CNP</em> and <em>CP</em> folder docs.</td>\n</tr>\n<tr>\n<td><code>ApprovalCode</code></td>\n<td>string (nullable)</td>\n<td>Processor authorization code, normally 6 characters. It can also be filled in on a <strong>decline</strong>, so never use it alone to decide approval.</td>\n</tr>\n<tr>\n<td><code>GatewayReferenceNumber</code></td>\n<td>string (nullable)</td>\n<td>Charge Anywhere gateway reference: 12 digits, keep the leading zeros. Send it as <code>originalGatewayReferenceNumber</code> on a later Force, Void or Return.</td>\n</tr>\n<tr>\n<td><code>AuthorizedAmount</code></td>\n<td>number (nullable)</td>\n<td>Amount the processor authorized. <code>0</code> on an approved Void. <code>null</code> when nothing was authorized.</td>\n</tr>\n<tr>\n<td><code>TokenNumber</code></td>\n<td>string (nullable)</td>\n<td>CNP: the payment token for the transaction. CP: <code>null</code>. <strong>Sensitive.</strong></td>\n</tr>\n<tr>\n<td><code>CardType</code></td>\n<td>string (nullable)</td>\n<td>Card brand or tender code. See <strong>Card type codes</strong>.</td>\n</tr>\n<tr>\n<td><code>StatusUrl</code></td>\n<td>string</td>\n<td>Relative path of the status resource, e.g. <code>/api/v1/transactions/{RequestId}</code>. Put <code>https://webtest.chargeanywhere.com/evuapi</code> in front and add the three identity query parameters.</td>\n</tr>\n<tr>\n<td><code>ErrorId</code></td>\n<td>string (nullable)</td>\n<td>ID of an error that EVUAPI logged. Give it to Charge Anywhere support.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"evertecresponse\">EvertecResponse</h3>\n<p><code>EvertecResponse</code> keeps the full, ordered CNP shape (see the <strong>CNP</strong> folder), but almost every value is <code>null</code> because no card data is involved. Only the static CNP values are filled in.</p>\n<h3 id=\"how-to-interpret-the-result\">How to interpret the result</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Completed</th>\n<th>Status</th>\n<th>What to do</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>true</code></td>\n<td><code>Approved</code></td>\n<td>The batch closed. Keep the settlement totals for reconciliation.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td>anything else</td>\n<td>The batch did not close. Look at <code>ResponseText</code>, then reconcile before you try again.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"error-handling\">Error handling</h2>\n<ul>\n<li><strong>Network timeout or no response:</strong> Don't resend the POST automatically. If you got a <code>RequestId</code>, call <strong>Get Transaction Status</strong>. If you didn't, reconcile with your invoice/order reference before you try again.</li>\n<li><strong><code>4xx</code>:</strong> Check the identity headers against the body, the <code>paymentType</code> / <code>transactionType</code> combination, the amount math, and the required fields.</li>\n<li><strong><code>5xx</code>:</strong> Save <code>ErrorId</code> and <code>RequestId</code> (if you have them) and contact support. Check the status before you retry.</li>\n</ul>\n<h2 id=\"testing-in-postman\">Testing in Postman</h2>\n<ul>\n<li><strong>Writes (test script):</strong> <code>RequestId</code> and <code>ErrorId</code>, when present.</li>\n<li><strong>Tests:</strong> HTTP status is 200/201/202.</li>\n</ul>\n<h2 id=\"related-requests\">Related requests</h2>\n<ul>\n<li><strong>CP → Batch → Close Batch</strong> to settle the terminal batch</li>\n</ul>\n","urlObject":{"path":["api","v1","transactions"],"host":["https://webtest.chargeanywhere.com/evuapi"],"query":[],"variable":[]}},"response":[{"id":"375358e8-8aca-420a-aa08-6c6bf3f2cdd4","name":"200 OK · Batch closed","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 0,\n  \"transactionType\": 12,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": false,\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 0\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"**Scenario:** The gateway batch closed successfully.\n\n- `Status=Approved`, `ResponseCode=000`, `ResponseText=\"Success*\"`.\n- `GatewayReferenceNumber`, `ApprovalCode` and `TokenNumber` are empty. Ignore `CardType` for batch operations.\n- `EvertecResponse` keeps the CNP shape, with only the static values filled in."},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Cache-Control","value":"no-cache,no-cache, no-store"},{"key":"Pragma","value":"no-cache"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Expires","value":"-1,0"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"X-FRAME-OPTIONS","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"Referrer-Policy","value":"no-referrer-when-downgrade"},{"key":"Content-Security-Policy","value":"default-src data: 'unsafe-inline' 'unsafe-eval' https:; img-src * data:;"},{"key":"Date","value":"Thu, 24 Sep 2026 18:54:07 GMT"},{"key":"Content-Length","value":"1804"}],"cookie":[],"responseTime":null,"body":"{\n    \"RequestId\": \"8990e2fac0984ed395cc2ab3c8d57e80\",\n    \"Status\": \"Approved\",\n    \"Completed\": true,\n    \"ResponseCode\": \"000\",\n    \"ProcessorResponseCode\": \"\",\n    \"ResponseText\": \"Success*\",\n    \"EvertecResponse\": {\n        \"trace_number\": null,\n        \"batch_number\": null,\n        \"card_acceptor_id\": \"NONE\",\n        \"special_account\": null,\n        \"merchant_id\": null,\n        \"pan_card_number\": null,\n        \"reference\": null,\n        \"receipt_output\": {\n            \"merchant\": null,\n            \"customer\": null\n        },\n        \"amounts\": {\n            \"total\": null,\n            \"base_state_tax\": null,\n            \"tip\": null,\n            \"reduced_tax\": null,\n            \"base_reduced_tax\": null,\n            \"state_tax\": null,\n            \"city_tax\": null\n        },\n        \"authorization_code\": null,\n        \"emv_data\": {},\n        \"signature_indicator\": \"NOSIGN\",\n        \"transaction_time\": null,\n        \"payment_host\": \"ATH1\",\n        \"invoice_number\": null,\n        \"terminal_id\": null,\n        \"merchant_vid\": null,\n        \"transaction_date\": null,\n        \"approval_code\": null,\n        \"cashier_id\": null,\n        \"manual_entry_indicator\": \"yes\",\n        \"ivu\": {\n            \"control_line1\": null,\n            \"control_line2\": null\n        },\n        \"process_cashback\": null,\n        \"card_bin_type\": null,\n        \"terminal_vid\": null,\n        \"station_number\": null,\n        \"response_message\": null,\n        \"receipt_email\": \"no\",\n        \"transaction_type_indicator\": null,\n        \"entry_type\": \"MANUAL\",\n        \"fallback\": null\n    },\n    \"ApprovalCode\": \"\",\n    \"GatewayReferenceNumber\": \"\",\n    \"AuthorizedAmount\": null,\n    \"TokenNumber\": \"\",\n    \"CardType\": \"1\",\n    \"StatusUrl\": \"/api/v1/transactions/8990e2fac0984ed395cc2ab3c8d57e80\",\n    \"ErrorId\": null\n}"}],"_postman_id":"3f004328-a92f-452d-8f86-cd087ad46bf5"}],"id":"ef4e7012-76fb-4df2-bb23-a109ec6d1259","description":"<h1 id=\"cnp-·-batch\">CNP · Batch</h1>\n<p>Settles the current <strong>gateway</strong> batch synchronously.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>transactionType</code></td>\n<td><code>12</code> (Close Batch)</td>\n</tr>\n<tr>\n<td><code>paymentType</code></td>\n<td><code>0</code> (not tender-specific)</td>\n</tr>\n<tr>\n<td><code>cardPresent</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>Body</td>\n<td>Identity, station/cashier, <code>appVersion</code> and <code>timeOut</code> only. No token, amounts or <code>original*</code> fields.</td>\n</tr>\n</tbody>\n</table>\n</div>","_postman_id":"ef4e7012-76fb-4df2-bb23-a109ec6d1259"}],"id":"a460e4ee-87c8-4baa-a08f-93677dc0a729","description":"<h1 id=\"card-not-present-cnp\">Card-not-present (CNP)</h1>\n<p>CNP transactions charge a stored <strong>payment token</strong> (<code>tokenNumber</code>) with no physical terminal involved. They are processed <strong>synchronously</strong>, so the create response normally carries the final result (<code>Completed=true</code>).</p>\n<h2 id=\"flow\">Flow</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-text\">Merchant app ──POST /transactions (cardPresent=false, tokenNumber)──► EVUAPI ──► Gateway ──► Processor\nMerchant app ◄────────── 200 OK (Completed=true, Approved / Declined) ◄──────────────────────┘\n</code></pre>\n<h2 id=\"timeout\">timeOut</h2>\n<p><code>timeOut</code> is the maximum time, in milliseconds, to wait for the processor's response. EVUAPI returns as soon as the response arrives. <code>timeOut=0</code> uses the platform default (60 seconds for Close Batch).</p>\n<h2 id=\"cnp-evertecresponse\">CNP EvertecResponse</h2>\n<p>For CNP, EVUAPI returns <code>EvertecResponse</code> in a stable, normalized shape. Every property below is always present, in this order. An unavailable value is <code>null</code>. The nested objects <code>receipt_output</code>, <code>amounts</code>, <code>emv_data</code> and <code>ivu</code> are always present with their child keys.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>#</th>\n<th>Property</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>1</td>\n<td><code>trace_number</code></td>\n<td>string</td>\n<td>System trace audit number.</td>\n</tr>\n<tr>\n<td>2</td>\n<td><code>batch_number</code></td>\n<td>string</td>\n<td>Gateway batch number. Informational only.</td>\n</tr>\n<tr>\n<td>3</td>\n<td><code>card_acceptor_id</code></td>\n<td>string</td>\n<td>Always <code>NONE</code> for CNP.</td>\n</tr>\n<tr>\n<td>4</td>\n<td><code>special_account</code></td>\n<td>string</td>\n<td>Account-type code. Credit by brand: <code>VC</code> Visa, <code>MC</code> Mastercard, <code>AX</code> Amex, <code>DC</code> Discover. Other tenders: <code>IC</code> Cash, <code>AT</code> Debit, <code>EC</code> EBT Cash, <code>EB</code> EBT FoodStamp, <code>AM</code> ATH Móvil.</td>\n</tr>\n<tr>\n<td>5</td>\n<td><code>merchant_id</code></td>\n<td>string (nullable)</td>\n<td>Evertec merchant ID.</td>\n</tr>\n<tr>\n<td>6</td>\n<td><code>pan_card_number</code></td>\n<td>string</td>\n<td>Last four digits of the card number.</td>\n</tr>\n<tr>\n<td>7</td>\n<td><code>reference</code></td>\n<td>string</td>\n<td>Gateway reference of the transaction. <strong>On a Void, this is the reference of the transaction being voided.</strong></td>\n</tr>\n<tr>\n<td>8</td>\n<td><code>receipt_output</code></td>\n<td>object</td>\n<td><code>{ merchant, customer }</code>. Both are <code>null</code> for CNP because no terminal receipt is printed.</td>\n</tr>\n<tr>\n<td>9</td>\n<td><code>amounts</code></td>\n<td>object</td>\n<td><code>{ total, base_state_tax, tip, reduced_tax, base_reduced_tax, state_tax, city_tax }</code>. Decimal strings with 2 places.</td>\n</tr>\n<tr>\n<td>10</td>\n<td><code>authorization_code</code></td>\n<td>string (nullable)</td>\n<td>Processor authorization code.</td>\n</tr>\n<tr>\n<td>11</td>\n<td><code>emv_data</code></td>\n<td>object</td>\n<td>Always <code>{}</code> for CNP.</td>\n</tr>\n<tr>\n<td>12</td>\n<td><code>signature_indicator</code></td>\n<td>string</td>\n<td>Always <code>NOSIGN</code> for CNP.</td>\n</tr>\n<tr>\n<td>13</td>\n<td><code>transaction_time</code></td>\n<td>string</td>\n<td>Time the processor handled the transaction, <code>HHmmss</code>.</td>\n</tr>\n<tr>\n<td>14</td>\n<td><code>payment_host</code></td>\n<td>string</td>\n<td>Always <code>ATH1</code> for CNP.</td>\n</tr>\n<tr>\n<td>15</td>\n<td><code>invoice_number</code></td>\n<td>null</td>\n<td>Always <code>null</code> for CNP. The public request has no invoice number.</td>\n</tr>\n<tr>\n<td>16</td>\n<td><code>terminal_id</code></td>\n<td>string (nullable)</td>\n<td>Evertec terminal ID for the device.</td>\n</tr>\n<tr>\n<td>17</td>\n<td><code>merchant_vid</code></td>\n<td>string (nullable)</td>\n<td>Same value as <code>merchant_id</code>.</td>\n</tr>\n<tr>\n<td>18</td>\n<td><code>transaction_date</code></td>\n<td>string</td>\n<td>Processing date, <code>MMddyyyy</code>.</td>\n</tr>\n<tr>\n<td>19</td>\n<td><code>approval_code</code></td>\n<td>string (nullable)</td>\n<td>Raw processor <strong>response</strong> code (<code>00</code> = approved). Despite the name, this is not the authorization code.</td>\n</tr>\n<tr>\n<td>20</td>\n<td><code>cashier_id</code></td>\n<td>string</td>\n<td>The request's <code>cashierId</code>, returned as a string.</td>\n</tr>\n<tr>\n<td>21</td>\n<td><code>manual_entry_indicator</code></td>\n<td>string</td>\n<td>Always <code>yes</code> for CNP.</td>\n</tr>\n<tr>\n<td>22</td>\n<td><code>ivu</code></td>\n<td>object</td>\n<td><code>{ control_line1, control_line2 }</code>: Puerto Rico IVU control lines when the processor returns them, otherwise <code>null</code>.</td>\n</tr>\n<tr>\n<td>23</td>\n<td><code>process_cashback</code></td>\n<td>string (nullable)</td>\n<td><code>yes</code> / <code>no</code>.</td>\n</tr>\n<tr>\n<td>24</td>\n<td><code>card_bin_type</code></td>\n<td>string (nullable)</td>\n<td><code>VISA</code>, <code>MASTERCARD</code>, <code>AMEX</code>, <code>DISCOVER</code>, or <code>null</code> if unknown.</td>\n</tr>\n<tr>\n<td>25</td>\n<td><code>terminal_vid</code></td>\n<td>string (nullable)</td>\n<td>Same value as <code>terminal_id</code>.</td>\n</tr>\n<tr>\n<td>26</td>\n<td><code>station_number</code></td>\n<td>string</td>\n<td>The request's <code>stationNumber</code>, returned as a string.</td>\n</tr>\n<tr>\n<td>27</td>\n<td><code>response_message</code></td>\n<td>string (nullable)</td>\n<td>Processor or gateway message.</td>\n</tr>\n<tr>\n<td>28</td>\n<td><code>receipt_email</code></td>\n<td>string</td>\n<td>Always <code>no</code> for CNP.</td>\n</tr>\n<tr>\n<td>29</td>\n<td><code>transaction_type_indicator</code></td>\n<td>string (nullable)</td>\n<td>Tender indicator: <code>C</code> Credit, <code>D</code> Debit, <code>I</code> Cash, <code>E</code> EBT, <code>A</code> ATH Móvil.</td>\n</tr>\n<tr>\n<td>30</td>\n<td><code>entry_type</code></td>\n<td>string</td>\n<td>Always <code>MANUAL</code> for CNP.</td>\n</tr>\n<tr>\n<td>31</td>\n<td><code>fallback</code></td>\n<td>string (nullable)</td>\n<td><code>no</code>, or <code>null</code> when unavailable.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"fixed-values\">Fixed values</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"card_acceptor_id\": \"NONE\",\n  \"emv_data\": {},\n  \"signature_indicator\": \"NOSIGN\",\n  \"payment_host\": \"ATH1\",\n  \"manual_entry_indicator\": \"yes\",\n  \"receipt_email\": \"no\",\n  \"entry_type\": \"MANUAL\"\n}\n</code></pre>\n<h3 id=\"value-mappings\">Value mappings</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Property</th>\n<th>Mapping</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>transaction_type_indicator</code></td>\n<td>Credit <code>C</code>, Debit <code>D</code>, Cash <code>I</code>, EBT <code>E</code>, ATH Móvil <code>A</code></td>\n</tr>\n<tr>\n<td><code>special_account</code> (Credit)</td>\n<td>Visa <code>VC</code>, Mastercard <code>MC</code>, American Express <code>AX</code>, Discover <code>DC</code></td>\n</tr>\n<tr>\n<td><code>special_account</code> (other)</td>\n<td>Cash <code>IC</code>, Debit <code>AT</code>, EBT Cash <code>EC</code>, EBT FoodStamp <code>EB</code>, ATH Móvil <code>AM</code></td>\n</tr>\n<tr>\n<td><code>card_bin_type</code></td>\n<td><code>VISA</code>, <code>MASTERCARD</code>, <code>AMEX</code>, <code>DISCOVER</code>, or <code>null</code></td>\n</tr>\n<tr>\n<td><code>station_number</code> / <code>cashier_id</code></td>\n<td>The request's <code>stationNumber</code> / <code>cashierId</code>, as strings</td>\n</tr>\n<tr>\n<td><code>merchant_vid</code> / <code>terminal_vid</code></td>\n<td>Same values as <code>merchant_id</code> / <code>terminal_id</code></td>\n</tr>\n</tbody>\n</table>\n</div>","_postman_id":"a460e4ee-87c8-4baa-a08f-93677dc0a729"},{"name":"CP","item":[{"name":"Credit","item":[{"name":"Sale","event":[{"listen":"test","script":{"type":"text/javascript","exec":["let body = {};","try { body = pm.response.json(); } catch (e) {}","const requestId = body.requestId || body.RequestId;","const gatewayReferenceNumber = body.gatewayReferenceNumber || body.GatewayReferenceNumber;","const authorizedAmount = body.authorizedAmount !== undefined ? body.authorizedAmount : body.AuthorizedAmount;","const errorId = body.errorId || body.ErrorId;","if (requestId) pm.collectionVariables.set('RequestId', requestId);","if (gatewayReferenceNumber) pm.collectionVariables.set('OriginalGatewayReferenceNumber', gatewayReferenceNumber);","if (authorizedAmount !== undefined && authorizedAmount !== null) pm.collectionVariables.set('OriginalAmount', authorizedAmount);","if (errorId) pm.collectionVariables.set('ErrorId', errorId);","pm.test('Transaction request accepted', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });","const originalApprovalCode = body.approvalCode || body.ApprovalCode || (body.data && (body.data.approvalCode || body.data.ApprovalCode));","if (originalApprovalCode) pm.collectionVariables.set('OriginalApprovalCode', originalApprovalCode);","","// App2-only correlation fields are never part of the public EvertecResponse.","const evertecResponse = body.EvertecResponse || body.evertecResponse;","if (evertecResponse && typeof evertecResponse === 'object') {","  pm.test('EvertecResponse suppresses App2-only correlation fields', function () {","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'last_reference')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'trx_id')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'session_id')).to.eql(false);","  });","}"],"id":"90b20e87-6ca2-442d-969f-207d3655a796"}}],"id":"1d4afd2f-d2cb-452d-8683-a3ac238f5a4b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 2,\n  \"transactionType\": 1,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": true,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"<h1 id=\"cp-credit-sale\">CP Credit Sale</h1>\n<blockquote>\n<p>Authorizes <strong>and</strong> captures a payment in one step.</p>\n</blockquote>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Endpoint</strong></td>\n<td><code>POST https://webtest.chargeanywhere.com/evuapi/api/v1/transactions</code></td>\n</tr>\n<tr>\n<td><strong>Channel</strong></td>\n<td>Card-present (CP) · <code>cardPresent=true</code></td>\n</tr>\n<tr>\n<td><strong>Tender</strong></td>\n<td>Credit (<code>paymentType=2</code>)</td>\n</tr>\n<tr>\n<td><strong>Operation</strong></td>\n<td>Sale (<code>transactionType=1</code>)</td>\n</tr>\n<tr>\n<td><strong>Processing model</strong></td>\n<td><strong>Asynchronous.</strong> The response may be final or not final. If <code>Completed=false</code>, poll <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><strong>Caller</strong></td>\n<td>Merchant or POS application</td>\n</tr>\n<tr>\n<td><strong>Authentication</strong></td>\n<td>Merchant identity headers <code>X-Merchant-Id</code>, <code>X-Terminal-Id</code>, <code>X-Identification</code></td>\n</tr>\n<tr>\n<td><strong>Financial impact</strong></td>\n<td>Money is authorized and queued for settlement in the current batch.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"overview\">Overview</h2>\n<p>Use Sale when goods or services are delivered right away and the final amount is known. Sale is an <strong>originating</strong> transaction, so it has no <code>original*</code> fields.</p>\n<h2 id=\"before-you-call\">Before you call</h2>\n<ul>\n<li>The terminal for <code></code> must be enrolled with EVUAPI, powered on and online.</li>\n<li>Set <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code> and <code></code> in your active environment.</li>\n</ul>\n<h2 id=\"request\">Request</h2>\n<h3 id=\"headers\">Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Required</th>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Content-Type</code></td>\n<td>Yes</td>\n<td><code>application/json</code></td>\n<td>The request body is JSON.</td>\n</tr>\n<tr>\n<td><code>Accept</code></td>\n<td>Recommended</td>\n<td><code>application/json</code></td>\n<td>Asks for a JSON response.</td>\n</tr>\n<tr>\n<td><code>X-Merchant-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant identity. Must match body <code>merchantId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Terminal-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant terminal identity (keep leading zeros). Must match body <code>terminalId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Identification</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Physical terminal identity. Must match body <code>identification</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"body-parameters\">Body parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Value in this request</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>merchantId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant ID that Charge Anywhere issued for this integration. Must be the same as the <code>X-Merchant-Id</code> header.</td>\n</tr>\n<tr>\n<td><code>identification</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Physical terminal / device identity (the same value as the terminal serial number / ManNumber). Must be the same as <code>X-Identification</code>. Identifies the terminal that will process the transaction.</td>\n</tr>\n<tr>\n<td><code>terminalId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant terminal ID. Send it as a <strong>string</strong> and keep leading zeros (e.g. <code>0002</code>). Must be the same as <code>X-Terminal-Id</code>.</td>\n</tr>\n<tr>\n<td><code>terminalDateTime</code></td>\n<td>string (date-time)</td>\n<td>Required</td>\n<td><code>\"2026-08-14T18:30:00\"</code></td>\n<td>Local date/time of the calling system, ISO 8601 with no UTC offset: <code>yyyy-MM-ddTHH:mm:ss</code>. Send the actual time of the request. The value shown is an example.</td>\n</tr>\n<tr>\n<td><code>paymentType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>2</code></td>\n<td>Tender. <code>2</code> = Credit. See <strong>Payment types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>transactionType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>1</code></td>\n<td>Operation. <code>1</code> = Sale. See <strong>Transaction types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>stationNumber</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Station / register number. Returned as a string in <code>EvertecResponse.station_number</code>.</td>\n</tr>\n<tr>\n<td><code>cashierId</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Cashier / clerk ID. Returned in <code>EvertecResponse.cashier_id</code>.</td>\n</tr>\n<tr>\n<td><code>cardPresent</code></td>\n<td>boolean</td>\n<td>Required</td>\n<td><code>true</code></td>\n<td><code>true</code> sends the request down the asynchronous <strong>card-present</strong> path (a push to the terminal).</td>\n</tr>\n<tr>\n<td><code>tokenNumber</code></td>\n<td>string</td>\n<td>Send <code>\"\"</code></td>\n<td><code>\"\"</code></td>\n<td>Not used for card-present; send an empty string. The terminal reads the card or tender.</td>\n</tr>\n<tr>\n<td><code>fullName</code></td>\n<td>string</td>\n<td>Optional</td>\n<td><code>\"John Smith\"</code></td>\n<td>Cardholder / customer display name. Informational only.</td>\n</tr>\n<tr>\n<td><code>amountOfSale</code></td>\n<td>number (2 dp)</td>\n<td>Required</td>\n<td><code>20.00</code></td>\n<td>Base amount before tax, tip, cashback and fee.</td>\n</tr>\n<tr>\n<td><code>tax</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>6.00</code></td>\n<td>Total tax = <code>stateTax + cityTax + reducedTax</code>. The collection pre-request script calculates it.</td>\n</tr>\n<tr>\n<td><code>baseStateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for state and municipal tax.</td>\n</tr>\n<tr>\n<td><code>baseReducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for reduced state tax.</td>\n</tr>\n<tr>\n<td><code>stateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>1.00</code></td>\n<td>State tax amount (tax type: State).</td>\n</tr>\n<tr>\n<td><code>cityTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>2.00</code></td>\n<td>Municipal / city tax amount (tax type: Municipal).</td>\n</tr>\n<tr>\n<td><code>reducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>3.00</code></td>\n<td>Reduced state tax amount (tax type: Reduced state).</td>\n</tr>\n<tr>\n<td><code>subTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>20.00</code></td>\n<td>Equals <code>amountOfSale</code>. The collection script calculates it.</td>\n</tr>\n<tr>\n<td><code>tips</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Tip / gratuity amount.</td>\n</tr>\n<tr>\n<td><code>cashBack</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Cashback amount.</td>\n</tr>\n<tr>\n<td><code>fee</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Extra fee / surcharge amount.</td>\n</tr>\n<tr>\n<td><code>grandTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>26.00</code></td>\n<td><code>subTotal + tax + tips + cashBack + fee</code>. The collection script calculates it. This is the total sent for authorization; it comes back as <code>EvertecResponse.amounts.total</code>.</td>\n</tr>\n<tr>\n<td><code>appVersion</code></td>\n<td>string</td>\n<td>Recommended</td>\n<td><code>\"1.0.0\"</code></td>\n<td>Version of the calling application. Used for support and compatibility tracking.</td>\n</tr>\n<tr>\n<td><code>timeOut</code></td>\n<td>integer (ms)</td>\n<td>Optional</td>\n<td><code>30000</code></td>\n<td>How long, in ms, the HTTP call waits for the terminal's final result. <code>0</code> returns right after the request is saved and dispatched (<code>Completed=false</code>). With a value above 0, EVUAPI returns as soon as the final result arrives, or when the wait runs out. <strong>When the wait runs out, the terminal transaction is not cancelled.</strong></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"business-rules\">Business rules</h3>\n<ul>\n<li><code>tax</code> must equal <code>stateTax + cityTax + reducedTax</code>.</li>\n<li><code>subTotal</code> must equal <code>amountOfSale</code>.</li>\n<li><code>grandTotal</code> must equal <code>subTotal + tax + tips + cashBack + fee</code>.</li>\n<li>Use decimal (not floating-point) math, and round money to 2 decimal places.</li>\n<li>The identity header values must be the same as the body's <code>merchantId</code>, <code>terminalId</code> and <code>identification</code>.</li>\n<li>Originating transaction: <strong>don't</strong> send <code>originalAmount</code>, <code>originalApprovalCode</code> or <code>originalGatewayReferenceNumber</code>.</li>\n<li>Send <code>tokenNumber</code> as an empty string. The terminal reads the card or tender.</li>\n</ul>\n<h2 id=\"response\">Response</h2>\n<h3 id=\"http-status-codes\">HTTP status codes</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>HTTP status</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>200 OK</code></td>\n<td>The request was processed. The body holds the final result (<code>Completed=true</code>).</td>\n</tr>\n<tr>\n<td><code>202 Accepted</code></td>\n<td>The terminal accepted the request, but the result is not final yet (<code>Completed=false</code>). Poll <strong>Get Transaction Status</strong> with <code>RequestId</code>.</td>\n</tr>\n<tr>\n<td><code>4xx</code></td>\n<td>Validation, identity or authorization failure. Fix the request or configuration. <strong>Don't retry it unchanged.</strong></td>\n</tr>\n<tr>\n<td><code>5xx</code></td>\n<td>Service-side failure. Save <code>ErrorId</code> if one is returned. If you have a <code>RequestId</code>, check the status before you consider a retry.</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p><strong>HTTP 200 does not mean approved.</strong> A decline also comes back as <code>200</code> with <code>Status=Declined</code>. Always decide the outcome from <code>Status</code> and <code>Completed</code>.</p>\n</blockquote>\n<h3 id=\"response-body\">Response body</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>RequestId</code></td>\n<td>string</td>\n<td>EVUAPI's ID for this transaction: 32 lowercase hex characters, no hyphens. Save it right away. You need it to get the status and to contact support.</td>\n</tr>\n<tr>\n<td><code>Status</code></td>\n<td>string</td>\n<td>Current lifecycle state. See <strong>Transaction statuses</strong>.</td>\n</tr>\n<tr>\n<td><code>Completed</code></td>\n<td>boolean</td>\n<td><code>true</code> only when <code>Status</code> is final. While it is <code>false</code>, keep polling <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><code>ResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Result code normalized by EVUAPI. See <strong>Response codes</strong>. Keep it as a string (it can have leading zeros). <code>null</code> while not final.</td>\n</tr>\n<tr>\n<td><code>ProcessorResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Raw code from the processor or terminal, such as <code>00</code> or <code>68</code>. An empty string means the processor was never reached.</td>\n</tr>\n<tr>\n<td><code>ResponseText</code></td>\n<td>string (nullable)</td>\n<td>Readable result text from the processor, gateway or EVUAPI. Show it to operators, but don't parse it.</td>\n</tr>\n<tr>\n<td><code>EvertecResponse</code></td>\n<td>object (nullable)</td>\n<td>Processor-specific details. <strong>CNP:</strong> a fixed, ordered shape. <strong>CP:</strong> the terminal's raw final result. <code>null</code> while not final. See the <em>CNP</em> and <em>CP</em> folder docs.</td>\n</tr>\n<tr>\n<td><code>ApprovalCode</code></td>\n<td>string (nullable)</td>\n<td>Processor authorization code, normally 6 characters. It can also be filled in on a <strong>decline</strong>, so never use it alone to decide approval.</td>\n</tr>\n<tr>\n<td><code>GatewayReferenceNumber</code></td>\n<td>string (nullable)</td>\n<td>Charge Anywhere gateway reference: 12 digits, keep the leading zeros. Send it as <code>originalGatewayReferenceNumber</code> on a later Force, Void or Return.</td>\n</tr>\n<tr>\n<td><code>AuthorizedAmount</code></td>\n<td>number (nullable)</td>\n<td>Amount the processor authorized. <code>0</code> on an approved Void. <code>null</code> when nothing was authorized.</td>\n</tr>\n<tr>\n<td><code>TokenNumber</code></td>\n<td>string (nullable)</td>\n<td>CNP: the payment token for the transaction. CP: <code>null</code>. <strong>Sensitive.</strong></td>\n</tr>\n<tr>\n<td><code>CardType</code></td>\n<td>string (nullable)</td>\n<td>Card brand or tender code. See <strong>Card type codes</strong>.</td>\n</tr>\n<tr>\n<td><code>StatusUrl</code></td>\n<td>string</td>\n<td>Relative path of the status resource, e.g. <code>/api/v1/transactions/{RequestId}</code>. Put <code>https://webtest.chargeanywhere.com/evuapi</code> in front and add the three identity query parameters.</td>\n</tr>\n<tr>\n<td><code>ErrorId</code></td>\n<td>string (nullable)</td>\n<td>ID of an error that EVUAPI logged. Give it to Charge Anywhere support.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"evertecresponse\">EvertecResponse</h3>\n<p><code>EvertecResponse</code> is the terminal's <strong>raw</strong> final result, with internal correlation fields removed. It is not normalized, so treat <strong>every property as optional</strong>. The dictionary is in the <strong>CP</strong> folder documentation.</p>\n<h3 id=\"how-to-interpret-the-result\">How to interpret the result</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Completed</th>\n<th>Status</th>\n<th>What to do</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>true</code></td>\n<td><code>Approved</code></td>\n<td>Success. Save <code>RequestId</code>, <code>GatewayReferenceNumber</code>, <code>ApprovalCode</code>, <code>AuthorizedAmount</code> and the receipts.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Declined</code></td>\n<td>Not approved. Show <code>ResponseText</code>. Don't retry unchanged.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Failed</code> / <code>TimedOut</code> / <code>Cancelled</code></td>\n<td>Not approved. Record the result. Only start a new transaction after you confirm with the customer.</td>\n</tr>\n<tr>\n<td><code>false</code></td>\n<td><code>Pending</code> / <code>SentToTerminal</code> / <code>ReceivedByTerminal</code> / <code>Processing</code></td>\n<td>Not final. Poll <strong>Get Transaction Status</strong>. <strong>Never</strong> send a second transaction just because the first one is still pending.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"error-handling\">Error handling</h2>\n<ul>\n<li><strong>Network timeout or no response:</strong> Don't resend the POST automatically. If you got a <code>RequestId</code>, call <strong>Get Transaction Status</strong>. If you didn't, reconcile with your invoice/order reference before you try again.</li>\n<li><strong><code>4xx</code>:</strong> Check the identity headers against the body, the <code>paymentType</code> / <code>transactionType</code> combination, the amount math, and the required fields.</li>\n<li><strong><code>5xx</code>:</strong> Save <code>ErrorId</code> and <code>RequestId</code> (if you have them) and contact support. Check the status before you retry.</li>\n</ul>\n<h2 id=\"testing-in-postman\">Testing in Postman</h2>\n<ul>\n<li><strong>Reads:</strong> <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code>, <code></code>, <code>1</code>, <code>1</code>, <code>1.0.0</code> and the amount variables. The collection pre-request script recalculates <code>SubTotal</code>, <code>Tax</code> and <code>GrandTotal</code>.</li>\n<li><strong>Writes (test script):</strong> <code>RequestId</code>, <code>OriginalGatewayReferenceNumber</code> (from <code>GatewayReferenceNumber</code>), <code>OriginalAmount</code> (from <code>AuthorizedAmount</code>), <code>OriginalApprovalCode</code> (from <code>ApprovalCode</code>) and <code>ErrorId</code>, <strong>whenever these are in the response</strong>.</li>\n<li>⚠️ Values are saved even when the transaction is <strong>declined</strong>. Before you run a follow-up request, check that the last response was the approved original you meant.</li>\n<li><strong>Tests:</strong> HTTP status is 200/201/202. When <code>EvertecResponse</code> is present, internal correlation fields (<code>last_reference</code>, <code>trx_id</code>, <code>session_id</code>) are not in it.</li>\n</ul>\n<h2 id=\"related-requests\">Related requests</h2>\n<ul>\n<li><strong>Get Transaction Status</strong> while <code>Completed=false</code></li>\n<li><strong>Void</strong> / <strong>Return</strong> in the same tender folder</li>\n</ul>\n","urlObject":{"path":["api","v1","transactions"],"host":["https://webtest.chargeanywhere.com/evuapi"],"query":[],"variable":[]}},"response":[{"id":"a10ccf91-0311-4d11-97ba-97d83cf00aaa","name":"200 OK · Approved (contactless EMV)","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 2,\n  \"transactionType\": 1,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": true,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"**Scenario:** A Visa contactless Sale finished on the terminal within `timeOut`, so the create call returned the final result.\n\n- `entry_type=CTLS`, and `emv_data` holds the EMV tags (AID `84`, TVR `95`, TSI `9B`, cryptogram `9F26`, and so on).\n- `receipt_output.merchant` / `.customer` are HTML receipts. The merchant copy includes a base64 **signature image** (`signature_indicator=SIGN`).\n- `reference=11` is the terminal reference. A later Void of this Sale returns it as `target_reference`.\n- `TokenNumber` is `null` for CP."},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Cache-Control","value":"no-cache,no-cache, no-store"},{"key":"Pragma","value":"no-cache"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Expires","value":"-1,0"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"X-FRAME-OPTIONS","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"Referrer-Policy","value":"no-referrer-when-downgrade"},{"key":"Content-Security-Policy","value":"default-src data: 'unsafe-inline' 'unsafe-eval' https:; img-src * data:;"},{"key":"Date","value":"Thu, 24 Sep 2026 12:03:44 GMT"},{"key":"Content-Length","value":"2332"}],"cookie":[],"responseTime":null,"body":"{\n    \"RequestId\": \"304668afcdb240e0802c1c658bb5d3f2\",\n    \"Status\": \"Approved\",\n    \"Completed\": true,\n    \"ResponseCode\": \"000\",\n    \"ProcessorResponseCode\": \"00\",\n    \"ResponseText\": \"APPROVED.\",\n    \"EvertecResponse\": {\n        \"trace_number\": \"000005\",\n        \"batch_number\": \"2\",\n        \"card_acceptor_id\": \"NONE\",\n        \"special_account\": \"VC\",\n        \"merchant_id\": \"4549000000123\",\n        \"pan_card_number\": \"3005\",\n        \"reference\": \"11\",\n        \"receipt_output\": {\n            \"merchant\": \"<html><body><!-- Receipt HTML shortened for documentation --><p>MERCHANT COPY</p></body></html>\",\n            \"customer\": \"<html><body><!-- Receipt HTML shortened for documentation --><p>CUSTOMER COPY</p></body></html>\"\n        },\n        \"amounts\": {\n            \"total\": \"26.00\",\n            \"base_state_tax\": \"10.00\",\n            \"tip\": \"0.00\",\n            \"reduced_tax\": \"3.00\",\n            \"base_reduced_tax\": \"10.00\",\n            \"state_tax\": \"1.00\",\n            \"city_tax\": \"2.00\"\n        },\n        \"authorization_code\": \"124543\",\n        \"emv_data\": {\n            \"84\": \"A0000000031010\",\n            \"95\": \"0000000000\",\n            \"9F12\": \"VISA CREDIT\",\n            \"9B\": \"0000\",\n            \"9F26\": \"1C727DD5FA1F3DDC\",\n            \"9F37\": \"B9FB787C\"\n        },\n        \"signature_indicator\": \"SIGN\",\n        \"transaction_time\": \"080307\",\n        \"payment_host\": \"ATH1\",\n        \"invoice_number\": \"000938\",\n        \"terminal_id\": \"40000001\",\n        \"merchant_vid\": \"4549000000123\",\n        \"transaction_date\": \"09242026\",\n        \"approval_code\": \"00\",\n        \"cashier_id\": \"1\",\n        \"manual_entry_indicator\": \"no\",\n        \"ivu\": {\n            \"control_line1\": \"CONTROL: 8LGJP-4VNZF\",\n            \"control_line2\": \"ET                  \"\n        },\n        \"process_cashback\": \"no\",\n        \"card_bin_type\": \"VISA\",\n        \"terminal_vid\": \"40000001\",\n        \"station_number\": \"1\",\n        \"response_message\": \"APPROVED.\",\n        \"receipt_email\": \"yes\",\n        \"transaction_type_indicator\": \"C\",\n        \"entry_type\": \"CTLS\",\n        \"fallback\": \"no\"\n    },\n    \"ApprovalCode\": \"124543\",\n    \"GatewayReferenceNumber\": \"000004588675\",\n    \"AuthorizedAmount\": 26,\n    \"TokenNumber\": null,\n    \"CardType\": \"1\",\n    \"StatusUrl\": \"/api/v1/transactions/304668afcdb240e0802c1c658bb5d3f2\",\n    \"ErrorId\": null\n}"}],"_postman_id":"1d4afd2f-d2cb-452d-8683-a3ac238f5a4b"},{"name":"Auth","event":[{"listen":"test","script":{"type":"text/javascript","exec":["let body = {};","try { body = pm.response.json(); } catch (e) {}","const requestId = body.requestId || body.RequestId;","const gatewayReferenceNumber = body.gatewayReferenceNumber || body.GatewayReferenceNumber;","const authorizedAmount = body.authorizedAmount !== undefined ? body.authorizedAmount : body.AuthorizedAmount;","const errorId = body.errorId || body.ErrorId;","if (requestId) pm.collectionVariables.set('RequestId', requestId);","if (gatewayReferenceNumber) pm.collectionVariables.set('OriginalGatewayReferenceNumber', gatewayReferenceNumber);","if (authorizedAmount !== undefined && authorizedAmount !== null) pm.collectionVariables.set('OriginalAmount', authorizedAmount);","if (errorId) pm.collectionVariables.set('ErrorId', errorId);","pm.test('Transaction request accepted', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });","const originalApprovalCode = body.approvalCode || body.ApprovalCode || (body.data && (body.data.approvalCode || body.data.ApprovalCode));","if (originalApprovalCode) pm.collectionVariables.set('OriginalApprovalCode', originalApprovalCode);","","// App2-only correlation fields are never part of the public EvertecResponse.","const evertecResponse = body.EvertecResponse || body.evertecResponse;","if (evertecResponse && typeof evertecResponse === 'object') {","  pm.test('EvertecResponse suppresses App2-only correlation fields', function () {","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'last_reference')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'trx_id')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'session_id')).to.eql(false);","  });","}"],"id":"ebd2789a-b64a-469d-85c5-64b3156e1461"}}],"id":"201830aa-4b9f-4ee1-a1aa-de7a981ba5ed","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 2,\n  \"transactionType\": 6,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": true,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"<h1 id=\"cp-credit-auth\">CP Credit Auth</h1>\n<blockquote>\n<p>Authorizes (holds) funds without capturing them. Also called AuthOnly or PreAuth.</p>\n</blockquote>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Endpoint</strong></td>\n<td><code>POST https://webtest.chargeanywhere.com/evuapi/api/v1/transactions</code></td>\n</tr>\n<tr>\n<td><strong>Channel</strong></td>\n<td>Card-present (CP) · <code>cardPresent=true</code></td>\n</tr>\n<tr>\n<td><strong>Tender</strong></td>\n<td>Credit (<code>paymentType=2</code>)</td>\n</tr>\n<tr>\n<td><strong>Operation</strong></td>\n<td>Auth (AuthOnly / PreAuth) (<code>transactionType=6</code>)</td>\n</tr>\n<tr>\n<td><strong>Processing model</strong></td>\n<td><strong>Asynchronous.</strong> The response may be final or not final. If <code>Completed=false</code>, poll <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><strong>Caller</strong></td>\n<td>Merchant or POS application</td>\n</tr>\n<tr>\n<td><strong>Authentication</strong></td>\n<td>Merchant identity headers <code>X-Merchant-Id</code>, <code>X-Terminal-Id</code>, <code>X-Identification</code></td>\n</tr>\n<tr>\n<td><strong>Financial impact</strong></td>\n<td>Funds are held on the customer's account. Nothing is captured until a <strong>Force</strong> completes the authorization.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"overview\">Overview</h2>\n<p>Use Auth when the final amount or fulfilment is not yet confirmed (hospitality, rentals, ship-later orders). Complete it later with <strong>Force</strong> (<code>transactionType=4</code>). Auth is an <strong>originating</strong> transaction, so it has no <code>original*</code> fields.</p>\n<h2 id=\"before-you-call\">Before you call</h2>\n<ul>\n<li>The terminal for <code></code> must be enrolled with EVUAPI, powered on and online.</li>\n<li>Set <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code> and <code></code> in your active environment.</li>\n</ul>\n<h2 id=\"request\">Request</h2>\n<h3 id=\"headers\">Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Required</th>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Content-Type</code></td>\n<td>Yes</td>\n<td><code>application/json</code></td>\n<td>The request body is JSON.</td>\n</tr>\n<tr>\n<td><code>Accept</code></td>\n<td>Recommended</td>\n<td><code>application/json</code></td>\n<td>Asks for a JSON response.</td>\n</tr>\n<tr>\n<td><code>X-Merchant-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant identity. Must match body <code>merchantId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Terminal-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant terminal identity (keep leading zeros). Must match body <code>terminalId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Identification</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Physical terminal identity. Must match body <code>identification</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"body-parameters\">Body parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Value in this request</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>merchantId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant ID that Charge Anywhere issued for this integration. Must be the same as the <code>X-Merchant-Id</code> header.</td>\n</tr>\n<tr>\n<td><code>identification</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Physical terminal / device identity (the same value as the terminal serial number / ManNumber). Must be the same as <code>X-Identification</code>. Identifies the terminal that will process the transaction.</td>\n</tr>\n<tr>\n<td><code>terminalId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant terminal ID. Send it as a <strong>string</strong> and keep leading zeros (e.g. <code>0002</code>). Must be the same as <code>X-Terminal-Id</code>.</td>\n</tr>\n<tr>\n<td><code>terminalDateTime</code></td>\n<td>string (date-time)</td>\n<td>Required</td>\n<td><code>\"2026-08-14T18:30:00\"</code></td>\n<td>Local date/time of the calling system, ISO 8601 with no UTC offset: <code>yyyy-MM-ddTHH:mm:ss</code>. Send the actual time of the request. The value shown is an example.</td>\n</tr>\n<tr>\n<td><code>paymentType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>2</code></td>\n<td>Tender. <code>2</code> = Credit. See <strong>Payment types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>transactionType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>6</code></td>\n<td>Operation. <code>6</code> = Auth (AuthOnly / PreAuth). See <strong>Transaction types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>stationNumber</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Station / register number. Returned as a string in <code>EvertecResponse.station_number</code>.</td>\n</tr>\n<tr>\n<td><code>cashierId</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Cashier / clerk ID. Returned in <code>EvertecResponse.cashier_id</code>.</td>\n</tr>\n<tr>\n<td><code>cardPresent</code></td>\n<td>boolean</td>\n<td>Required</td>\n<td><code>true</code></td>\n<td><code>true</code> sends the request down the asynchronous <strong>card-present</strong> path (a push to the terminal).</td>\n</tr>\n<tr>\n<td><code>tokenNumber</code></td>\n<td>string</td>\n<td>Send <code>\"\"</code></td>\n<td><code>\"\"</code></td>\n<td>Not used for card-present; send an empty string. The terminal reads the card or tender.</td>\n</tr>\n<tr>\n<td><code>fullName</code></td>\n<td>string</td>\n<td>Optional</td>\n<td><code>\"John Smith\"</code></td>\n<td>Cardholder / customer display name. Informational only.</td>\n</tr>\n<tr>\n<td><code>amountOfSale</code></td>\n<td>number (2 dp)</td>\n<td>Required</td>\n<td><code>20.00</code></td>\n<td>Base amount before tax, tip, cashback and fee.</td>\n</tr>\n<tr>\n<td><code>tax</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>6.00</code></td>\n<td>Total tax = <code>stateTax + cityTax + reducedTax</code>. The collection pre-request script calculates it.</td>\n</tr>\n<tr>\n<td><code>baseStateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for state and municipal tax.</td>\n</tr>\n<tr>\n<td><code>baseReducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for reduced state tax.</td>\n</tr>\n<tr>\n<td><code>stateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>1.00</code></td>\n<td>State tax amount (tax type: State).</td>\n</tr>\n<tr>\n<td><code>cityTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>2.00</code></td>\n<td>Municipal / city tax amount (tax type: Municipal).</td>\n</tr>\n<tr>\n<td><code>reducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>3.00</code></td>\n<td>Reduced state tax amount (tax type: Reduced state).</td>\n</tr>\n<tr>\n<td><code>subTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>20.00</code></td>\n<td>Equals <code>amountOfSale</code>. The collection script calculates it.</td>\n</tr>\n<tr>\n<td><code>tips</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Tip / gratuity amount.</td>\n</tr>\n<tr>\n<td><code>cashBack</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Cashback amount.</td>\n</tr>\n<tr>\n<td><code>fee</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Extra fee / surcharge amount.</td>\n</tr>\n<tr>\n<td><code>grandTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>26.00</code></td>\n<td><code>subTotal + tax + tips + cashBack + fee</code>. The collection script calculates it. This is the total sent for authorization; it comes back as <code>EvertecResponse.amounts.total</code>.</td>\n</tr>\n<tr>\n<td><code>appVersion</code></td>\n<td>string</td>\n<td>Recommended</td>\n<td><code>\"1.0.0\"</code></td>\n<td>Version of the calling application. Used for support and compatibility tracking.</td>\n</tr>\n<tr>\n<td><code>timeOut</code></td>\n<td>integer (ms)</td>\n<td>Optional</td>\n<td><code>30000</code></td>\n<td>How long, in ms, the HTTP call waits for the terminal's final result. <code>0</code> returns right after the request is saved and dispatched (<code>Completed=false</code>). With a value above 0, EVUAPI returns as soon as the final result arrives, or when the wait runs out. <strong>When the wait runs out, the terminal transaction is not cancelled.</strong></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"business-rules\">Business rules</h3>\n<ul>\n<li><code>tax</code> must equal <code>stateTax + cityTax + reducedTax</code>.</li>\n<li><code>subTotal</code> must equal <code>amountOfSale</code>.</li>\n<li><code>grandTotal</code> must equal <code>subTotal + tax + tips + cashBack + fee</code>.</li>\n<li>Use decimal (not floating-point) math, and round money to 2 decimal places.</li>\n<li>The identity header values must be the same as the body's <code>merchantId</code>, <code>terminalId</code> and <code>identification</code>.</li>\n<li>Originating transaction: <strong>don't</strong> send <code>originalAmount</code>, <code>originalApprovalCode</code> or <code>originalGatewayReferenceNumber</code>.</li>\n<li>Send <code>tokenNumber</code> as an empty string. The terminal reads the card or tender.</li>\n</ul>\n<h2 id=\"response\">Response</h2>\n<h3 id=\"http-status-codes\">HTTP status codes</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>HTTP status</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>200 OK</code></td>\n<td>The request was processed. The body holds the final result (<code>Completed=true</code>).</td>\n</tr>\n<tr>\n<td><code>202 Accepted</code></td>\n<td>The terminal accepted the request, but the result is not final yet (<code>Completed=false</code>). Poll <strong>Get Transaction Status</strong> with <code>RequestId</code>.</td>\n</tr>\n<tr>\n<td><code>4xx</code></td>\n<td>Validation, identity or authorization failure. Fix the request or configuration. <strong>Don't retry it unchanged.</strong></td>\n</tr>\n<tr>\n<td><code>5xx</code></td>\n<td>Service-side failure. Save <code>ErrorId</code> if one is returned. If you have a <code>RequestId</code>, check the status before you consider a retry.</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p><strong>HTTP 200 does not mean approved.</strong> A decline also comes back as <code>200</code> with <code>Status=Declined</code>. Always decide the outcome from <code>Status</code> and <code>Completed</code>.</p>\n</blockquote>\n<h3 id=\"response-body\">Response body</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>RequestId</code></td>\n<td>string</td>\n<td>EVUAPI's ID for this transaction: 32 lowercase hex characters, no hyphens. Save it right away. You need it to get the status and to contact support.</td>\n</tr>\n<tr>\n<td><code>Status</code></td>\n<td>string</td>\n<td>Current lifecycle state. See <strong>Transaction statuses</strong>.</td>\n</tr>\n<tr>\n<td><code>Completed</code></td>\n<td>boolean</td>\n<td><code>true</code> only when <code>Status</code> is final. While it is <code>false</code>, keep polling <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><code>ResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Result code normalized by EVUAPI. See <strong>Response codes</strong>. Keep it as a string (it can have leading zeros). <code>null</code> while not final.</td>\n</tr>\n<tr>\n<td><code>ProcessorResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Raw code from the processor or terminal, such as <code>00</code> or <code>68</code>. An empty string means the processor was never reached.</td>\n</tr>\n<tr>\n<td><code>ResponseText</code></td>\n<td>string (nullable)</td>\n<td>Readable result text from the processor, gateway or EVUAPI. Show it to operators, but don't parse it.</td>\n</tr>\n<tr>\n<td><code>EvertecResponse</code></td>\n<td>object (nullable)</td>\n<td>Processor-specific details. <strong>CNP:</strong> a fixed, ordered shape. <strong>CP:</strong> the terminal's raw final result. <code>null</code> while not final. See the <em>CNP</em> and <em>CP</em> folder docs.</td>\n</tr>\n<tr>\n<td><code>ApprovalCode</code></td>\n<td>string (nullable)</td>\n<td>Processor authorization code, normally 6 characters. It can also be filled in on a <strong>decline</strong>, so never use it alone to decide approval.</td>\n</tr>\n<tr>\n<td><code>GatewayReferenceNumber</code></td>\n<td>string (nullable)</td>\n<td>Charge Anywhere gateway reference: 12 digits, keep the leading zeros. Send it as <code>originalGatewayReferenceNumber</code> on a later Force, Void or Return.</td>\n</tr>\n<tr>\n<td><code>AuthorizedAmount</code></td>\n<td>number (nullable)</td>\n<td>Amount the processor authorized. <code>0</code> on an approved Void. <code>null</code> when nothing was authorized.</td>\n</tr>\n<tr>\n<td><code>TokenNumber</code></td>\n<td>string (nullable)</td>\n<td>CNP: the payment token for the transaction. CP: <code>null</code>. <strong>Sensitive.</strong></td>\n</tr>\n<tr>\n<td><code>CardType</code></td>\n<td>string (nullable)</td>\n<td>Card brand or tender code. See <strong>Card type codes</strong>.</td>\n</tr>\n<tr>\n<td><code>StatusUrl</code></td>\n<td>string</td>\n<td>Relative path of the status resource, e.g. <code>/api/v1/transactions/{RequestId}</code>. Put <code>https://webtest.chargeanywhere.com/evuapi</code> in front and add the three identity query parameters.</td>\n</tr>\n<tr>\n<td><code>ErrorId</code></td>\n<td>string (nullable)</td>\n<td>ID of an error that EVUAPI logged. Give it to Charge Anywhere support.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"evertecresponse\">EvertecResponse</h3>\n<p><code>EvertecResponse</code> is the terminal's <strong>raw</strong> final result, with internal correlation fields removed. It is not normalized, so treat <strong>every property as optional</strong>. The dictionary is in the <strong>CP</strong> folder documentation.</p>\n<h3 id=\"how-to-interpret-the-result\">How to interpret the result</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Completed</th>\n<th>Status</th>\n<th>What to do</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>true</code></td>\n<td><code>Approved</code></td>\n<td>Success. Save <code>RequestId</code>, <code>GatewayReferenceNumber</code>, <code>ApprovalCode</code>, <code>AuthorizedAmount</code> and the receipts.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Declined</code></td>\n<td>Not approved. Show <code>ResponseText</code>. Don't retry unchanged.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Failed</code> / <code>TimedOut</code> / <code>Cancelled</code></td>\n<td>Not approved. Record the result. Only start a new transaction after you confirm with the customer.</td>\n</tr>\n<tr>\n<td><code>false</code></td>\n<td><code>Pending</code> / <code>SentToTerminal</code> / <code>ReceivedByTerminal</code> / <code>Processing</code></td>\n<td>Not final. Poll <strong>Get Transaction Status</strong>. <strong>Never</strong> send a second transaction just because the first one is still pending.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"error-handling\">Error handling</h2>\n<ul>\n<li><strong>Network timeout or no response:</strong> Don't resend the POST automatically. If you got a <code>RequestId</code>, call <strong>Get Transaction Status</strong>. If you didn't, reconcile with your invoice/order reference before you try again.</li>\n<li><strong><code>4xx</code>:</strong> Check the identity headers against the body, the <code>paymentType</code> / <code>transactionType</code> combination, the amount math, and the required fields.</li>\n<li><strong><code>5xx</code>:</strong> Save <code>ErrorId</code> and <code>RequestId</code> (if you have them) and contact support. Check the status before you retry.</li>\n</ul>\n<h2 id=\"testing-in-postman\">Testing in Postman</h2>\n<ul>\n<li><strong>Reads:</strong> <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code>, <code></code>, <code>1</code>, <code>1</code>, <code>1.0.0</code> and the amount variables. The collection pre-request script recalculates <code>SubTotal</code>, <code>Tax</code> and <code>GrandTotal</code>.</li>\n<li><strong>Writes (test script):</strong> <code>RequestId</code>, <code>OriginalGatewayReferenceNumber</code> (from <code>GatewayReferenceNumber</code>), <code>OriginalAmount</code> (from <code>AuthorizedAmount</code>), <code>OriginalApprovalCode</code> (from <code>ApprovalCode</code>) and <code>ErrorId</code>, <strong>whenever these are in the response</strong>.</li>\n<li>⚠️ Values are saved even when the transaction is <strong>declined</strong>. Before you run a follow-up request, check that the last response was the approved original you meant.</li>\n<li><strong>Tests:</strong> HTTP status is 200/201/202. When <code>EvertecResponse</code> is present, internal correlation fields (<code>last_reference</code>, <code>trx_id</code>, <code>session_id</code>) are not in it.</li>\n</ul>\n<h2 id=\"related-requests\">Related requests</h2>\n<ul>\n<li><strong>CP → Credit → Force</strong> to capture the funds</li>\n<li><strong>Get Transaction Status</strong> while <code>Completed=false</code></li>\n</ul>\n","urlObject":{"path":["api","v1","transactions"],"host":["https://webtest.chargeanywhere.com/evuapi"],"query":[],"variable":[]}},"response":[{"id":"b9a207b3-2414-4816-9964-94ab7193e7cc","name":"202 Accepted · Processing (not final)","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 2,\n  \"transactionType\": 6,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": true,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"**Scenario:** The terminal accepted the Auth, but it wasn't finished when the HTTP wait ended.\n\n- `Status=Processing`, `Completed=false`, and every result field is `null`.\n- `ResponseText` is informational only, so don't parse it.\n- **Next step:** poll **Get Transaction Status** with `RequestId` until `Completed=true`. Don't send the Auth again."},"status":"Accepted","code":202,"_postman_previewlanguage":"Text","header":[{"key":"Cache-Control","value":"no-cache,no-cache, no-store"},{"key":"Pragma","value":"no-cache"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Expires","value":"-1,0"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"X-FRAME-OPTIONS","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"Referrer-Policy","value":"no-referrer-when-downgrade"},{"key":"Content-Security-Policy","value":"default-src data: 'unsafe-inline' 'unsafe-eval' https:; img-src * data:;"},{"key":"Date","value":"Fri, 25 Sep 2026 15:43:58 GMT"},{"key":"Content-Length","value":"532"}],"cookie":[],"responseTime":null,"body":"{\n    \"RequestId\": \"09ed5df8b43c42afa1e3d92735f764db\",\n    \"Status\": \"Processing\",\n    \"Completed\": false,\n    \"ResponseCode\": null,\n    \"ProcessorResponseCode\": null,\n    \"ResponseText\": \"Evertec accepted the transaction. trx_id=09612e18-703c-413d-b720-c85aee48bed3\",\n    \"EvertecResponse\": null,\n    \"ApprovalCode\": null,\n    \"GatewayReferenceNumber\": null,\n    \"AuthorizedAmount\": null,\n    \"TokenNumber\": null,\n    \"CardType\": null,\n    \"StatusUrl\": \"/api/v1/transactions/09ed5df8b43c42afa1e3d92735f764db\",\n    \"ErrorId\": null\n}"}],"_postman_id":"201830aa-4b9f-4ee1-a1aa-de7a981ba5ed"},{"name":"Force","event":[{"listen":"test","script":{"exec":["let body = {};","try { body = pm.response.json(); } catch (e) {}","const requestId = body.requestId || body.RequestId;","const gatewayReferenceNumber = body.gatewayReferenceNumber || body.GatewayReferenceNumber;","const authorizedAmount = body.authorizedAmount !== undefined ? body.authorizedAmount : body.AuthorizedAmount;","const errorId = body.errorId || body.ErrorId;","if (requestId) pm.collectionVariables.set('RequestId', requestId);","if (gatewayReferenceNumber) pm.collectionVariables.set('OriginalGatewayReferenceNumber', gatewayReferenceNumber);","if (authorizedAmount !== undefined && authorizedAmount !== null) pm.collectionVariables.set('OriginalAmount', authorizedAmount);","if (errorId) pm.collectionVariables.set('ErrorId', errorId);","pm.test('Transaction request accepted', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });","const originalApprovalCode = body.approvalCode || body.ApprovalCode || (body.data && (body.data.approvalCode || body.data.ApprovalCode));","if (originalApprovalCode) pm.collectionVariables.set('OriginalApprovalCode', originalApprovalCode);","","// App2-only correlation fields are never part of the public EvertecResponse.","const evertecResponse = body.EvertecResponse || body.evertecResponse;","if (evertecResponse && typeof evertecResponse === 'object') {","  pm.test('EvertecResponse suppresses App2-only correlation fields', function () {","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'last_reference')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'trx_id')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'session_id')).to.eql(false);","  });","}"],"type":"text/javascript","packages":{},"requests":{},"id":"8e8880e2-e42b-4e93-9985-1e6100cb0100"}}],"id":"b89150fe-41d7-4ae5-baf4-06249f862ffe","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 2,\n  \"transactionType\": 4,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": true,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"originalAmount\": ,\n  \"originalApprovalCode\": \"\",\n  \"originalGatewayReferenceNumber\": \"\",\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"<h1 id=\"cp-credit-force\">CP Credit Force</h1>\n<blockquote>\n<p>Completes (captures) an earlier <strong>Auth / PreAuth</strong>.</p>\n</blockquote>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Endpoint</strong></td>\n<td><code>POST https://webtest.chargeanywhere.com/evuapi/api/v1/transactions</code></td>\n</tr>\n<tr>\n<td><strong>Channel</strong></td>\n<td>Card-present (CP) · <code>cardPresent=true</code></td>\n</tr>\n<tr>\n<td><strong>Tender</strong></td>\n<td>Credit (<code>paymentType=2</code>)</td>\n</tr>\n<tr>\n<td><strong>Operation</strong></td>\n<td>Force (<code>transactionType=4</code>)</td>\n</tr>\n<tr>\n<td><strong>Processing model</strong></td>\n<td><strong>Asynchronous.</strong> The response may be final or not final. If <code>Completed=false</code>, poll <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><strong>Caller</strong></td>\n<td>Merchant or POS application</td>\n</tr>\n<tr>\n<td><strong>Authentication</strong></td>\n<td>Merchant identity headers <code>X-Merchant-Id</code>, <code>X-Terminal-Id</code>, <code>X-Identification</code></td>\n</tr>\n<tr>\n<td><strong>Financial impact</strong></td>\n<td>The earlier authorization is captured and queued for settlement.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"overview\">Overview</h2>\n<p>Use Force to capture funds that an earlier Auth held. Send the original authorization's <code>originalAmount</code>, <code>originalApprovalCode</code> and <code>originalGatewayReferenceNumber</code>.</p>\n<h2 id=\"before-you-call\">Before you call</h2>\n<ul>\n<li>The terminal for <code></code> must be enrolled with EVUAPI, powered on and online.</li>\n<li>Run the matching <strong>Auth</strong> first. Its test script saves <code></code>, <code></code> and <code></code>.</li>\n<li>Set <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code> and <code></code> in your active environment.</li>\n</ul>\n<h2 id=\"request\">Request</h2>\n<h3 id=\"headers\">Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Required</th>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Content-Type</code></td>\n<td>Yes</td>\n<td><code>application/json</code></td>\n<td>The request body is JSON.</td>\n</tr>\n<tr>\n<td><code>Accept</code></td>\n<td>Recommended</td>\n<td><code>application/json</code></td>\n<td>Asks for a JSON response.</td>\n</tr>\n<tr>\n<td><code>X-Merchant-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant identity. Must match body <code>merchantId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Terminal-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant terminal identity (keep leading zeros). Must match body <code>terminalId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Identification</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Physical terminal identity. Must match body <code>identification</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"body-parameters\">Body parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Value in this request</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>merchantId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant ID that Charge Anywhere issued for this integration. Must be the same as the <code>X-Merchant-Id</code> header.</td>\n</tr>\n<tr>\n<td><code>identification</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Physical terminal / device identity (the same value as the terminal serial number / ManNumber). Must be the same as <code>X-Identification</code>. Identifies the terminal that will process the transaction.</td>\n</tr>\n<tr>\n<td><code>terminalId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant terminal ID. Send it as a <strong>string</strong> and keep leading zeros (e.g. <code>0002</code>). Must be the same as <code>X-Terminal-Id</code>.</td>\n</tr>\n<tr>\n<td><code>terminalDateTime</code></td>\n<td>string (date-time)</td>\n<td>Required</td>\n<td><code>\"2026-08-14T18:30:00\"</code></td>\n<td>Local date/time of the calling system, ISO 8601 with no UTC offset: <code>yyyy-MM-ddTHH:mm:ss</code>. Send the actual time of the request. The value shown is an example.</td>\n</tr>\n<tr>\n<td><code>paymentType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>2</code></td>\n<td>Tender. <code>2</code> = Credit. See <strong>Payment types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>transactionType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>4</code></td>\n<td>Operation. <code>4</code> = Force. See <strong>Transaction types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>stationNumber</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Station / register number. Returned as a string in <code>EvertecResponse.station_number</code>.</td>\n</tr>\n<tr>\n<td><code>cashierId</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Cashier / clerk ID. Returned in <code>EvertecResponse.cashier_id</code>.</td>\n</tr>\n<tr>\n<td><code>cardPresent</code></td>\n<td>boolean</td>\n<td>Required</td>\n<td><code>true</code></td>\n<td><code>true</code> sends the request down the asynchronous <strong>card-present</strong> path (a push to the terminal).</td>\n</tr>\n<tr>\n<td><code>tokenNumber</code></td>\n<td>string</td>\n<td>Send <code>\"\"</code></td>\n<td><code>\"\"</code></td>\n<td>Not used for card-present; send an empty string. The terminal reads the card or tender.</td>\n</tr>\n<tr>\n<td><code>fullName</code></td>\n<td>string</td>\n<td>Optional</td>\n<td><code>\"John Smith\"</code></td>\n<td>Cardholder / customer display name. Informational only.</td>\n</tr>\n<tr>\n<td><code>amountOfSale</code></td>\n<td>number (2 dp)</td>\n<td>Required</td>\n<td><code>20.00</code></td>\n<td>Base amount before tax, tip, cashback and fee.</td>\n</tr>\n<tr>\n<td><code>tax</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>6.00</code></td>\n<td>Total tax = <code>stateTax + cityTax + reducedTax</code>. The collection pre-request script calculates it.</td>\n</tr>\n<tr>\n<td><code>baseStateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for state and municipal tax.</td>\n</tr>\n<tr>\n<td><code>baseReducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for reduced state tax.</td>\n</tr>\n<tr>\n<td><code>stateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>1.00</code></td>\n<td>State tax amount (tax type: State).</td>\n</tr>\n<tr>\n<td><code>cityTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>2.00</code></td>\n<td>Municipal / city tax amount (tax type: Municipal).</td>\n</tr>\n<tr>\n<td><code>reducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>3.00</code></td>\n<td>Reduced state tax amount (tax type: Reduced state).</td>\n</tr>\n<tr>\n<td><code>subTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>20.00</code></td>\n<td>Equals <code>amountOfSale</code>. The collection script calculates it.</td>\n</tr>\n<tr>\n<td><code>cashBack</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Cashback amount.</td>\n</tr>\n<tr>\n<td><code>fee</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Extra fee / surcharge amount.</td>\n</tr>\n<tr>\n<td><code>grandTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>26.00</code></td>\n<td><code>subTotal + tax + tips + cashBack + fee</code>. The collection script calculates it. This is the total sent for authorization; it comes back as <code>EvertecResponse.amounts.total</code>.</td>\n</tr>\n<tr>\n<td><code>originalAmount</code></td>\n<td>number</td>\n<td>Required</td>\n<td><code></code></td>\n<td>Amount of the original transaction, normally its <code>AuthorizedAmount</code>. Postman saves it as <code></code>.</td>\n</tr>\n<tr>\n<td><code>originalApprovalCode</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td><code>ApprovalCode</code> returned by the original transaction. Postman saves it as <code></code>.</td>\n</tr>\n<tr>\n<td><code>originalGatewayReferenceNumber</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td><code>GatewayReferenceNumber</code> of the original transaction (12 digits, keep leading zeros).</td>\n</tr>\n<tr>\n<td><code>appVersion</code></td>\n<td>string</td>\n<td>Recommended</td>\n<td><code>\"1.0.0\"</code></td>\n<td>Version of the calling application. Used for support and compatibility tracking.</td>\n</tr>\n<tr>\n<td><code>timeOut</code></td>\n<td>integer (ms)</td>\n<td>Optional</td>\n<td><code>30000</code></td>\n<td>How long, in ms, the HTTP call waits for the terminal's final result. <code>0</code> returns right after the request is saved and dispatched (<code>Completed=false</code>). With a value above 0, EVUAPI returns as soon as the final result arrives, or when the wait runs out. <strong>When the wait runs out, the terminal transaction is not cancelled.</strong></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"business-rules\">Business rules</h3>\n<ul>\n<li><code>tax</code> must equal <code>stateTax + cityTax + reducedTax</code>.</li>\n<li><code>subTotal</code> must equal <code>amountOfSale</code>.</li>\n<li><code>grandTotal</code> must equal <code>subTotal + tax + tips + cashBack + fee</code>.</li>\n<li>Use decimal (not floating-point) math, and round money to 2 decimal places.</li>\n<li>The identity header values must be the same as the body's <code>merchantId</code>, <code>terminalId</code> and <code>identification</code>.</li>\n<li>Send the <code>original*</code> values of the <strong>Auth</strong> being completed.</li>\n<li>Send <code>tokenNumber</code> as an empty string. The terminal reads the card or tender.</li>\n</ul>\n<h2 id=\"response\">Response</h2>\n<h3 id=\"http-status-codes\">HTTP status codes</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>HTTP status</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>200 OK</code></td>\n<td>The request was processed. The body holds the final result (<code>Completed=true</code>).</td>\n</tr>\n<tr>\n<td><code>202 Accepted</code></td>\n<td>The terminal accepted the request, but the result is not final yet (<code>Completed=false</code>). Poll <strong>Get Transaction Status</strong> with <code>RequestId</code>.</td>\n</tr>\n<tr>\n<td><code>4xx</code></td>\n<td>Validation, identity or authorization failure. Fix the request or configuration. <strong>Don't retry it unchanged.</strong></td>\n</tr>\n<tr>\n<td><code>5xx</code></td>\n<td>Service-side failure. Save <code>ErrorId</code> if one is returned. If you have a <code>RequestId</code>, check the status before you consider a retry.</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p><strong>HTTP 200 does not mean approved.</strong> A decline also comes back as <code>200</code> with <code>Status=Declined</code>. Always decide the outcome from <code>Status</code> and <code>Completed</code>.</p>\n</blockquote>\n<h3 id=\"response-body\">Response body</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>RequestId</code></td>\n<td>string</td>\n<td>EVUAPI's ID for this transaction: 32 lowercase hex characters, no hyphens. Save it right away. You need it to get the status and to contact support.</td>\n</tr>\n<tr>\n<td><code>Status</code></td>\n<td>string</td>\n<td>Current lifecycle state. See <strong>Transaction statuses</strong>.</td>\n</tr>\n<tr>\n<td><code>Completed</code></td>\n<td>boolean</td>\n<td><code>true</code> only when <code>Status</code> is final. While it is <code>false</code>, keep polling <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><code>ResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Result code normalized by EVUAPI. See <strong>Response codes</strong>. Keep it as a string (it can have leading zeros). <code>null</code> while not final.</td>\n</tr>\n<tr>\n<td><code>ProcessorResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Raw code from the processor or terminal, such as <code>00</code> or <code>68</code>. An empty string means the processor was never reached.</td>\n</tr>\n<tr>\n<td><code>ResponseText</code></td>\n<td>string (nullable)</td>\n<td>Readable result text from the processor, gateway or EVUAPI. Show it to operators, but don't parse it.</td>\n</tr>\n<tr>\n<td><code>EvertecResponse</code></td>\n<td>object (nullable)</td>\n<td>Processor-specific details. <strong>CNP:</strong> a fixed, ordered shape. <strong>CP:</strong> the terminal's raw final result. <code>null</code> while not final. See the <em>CNP</em> and <em>CP</em> folder docs.</td>\n</tr>\n<tr>\n<td><code>ApprovalCode</code></td>\n<td>string (nullable)</td>\n<td>Processor authorization code, normally 6 characters. It can also be filled in on a <strong>decline</strong>, so never use it alone to decide approval.</td>\n</tr>\n<tr>\n<td><code>GatewayReferenceNumber</code></td>\n<td>string (nullable)</td>\n<td>Charge Anywhere gateway reference: 12 digits, keep the leading zeros. Send it as <code>originalGatewayReferenceNumber</code> on a later Force, Void or Return.</td>\n</tr>\n<tr>\n<td><code>AuthorizedAmount</code></td>\n<td>number (nullable)</td>\n<td>Amount the processor authorized. <code>0</code> on an approved Void. <code>null</code> when nothing was authorized.</td>\n</tr>\n<tr>\n<td><code>TokenNumber</code></td>\n<td>string (nullable)</td>\n<td>CNP: the payment token for the transaction. CP: <code>null</code>. <strong>Sensitive.</strong></td>\n</tr>\n<tr>\n<td><code>CardType</code></td>\n<td>string (nullable)</td>\n<td>Card brand or tender code. See <strong>Card type codes</strong>.</td>\n</tr>\n<tr>\n<td><code>StatusUrl</code></td>\n<td>string</td>\n<td>Relative path of the status resource, e.g. <code>/api/v1/transactions/{RequestId}</code>. Put <code>https://webtest.chargeanywhere.com/evuapi</code> in front and add the three identity query parameters.</td>\n</tr>\n<tr>\n<td><code>ErrorId</code></td>\n<td>string (nullable)</td>\n<td>ID of an error that EVUAPI logged. Give it to Charge Anywhere support.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"evertecresponse\">EvertecResponse</h3>\n<p><code>EvertecResponse</code> is the terminal's <strong>raw</strong> final result, with internal correlation fields removed. It is not normalized, so treat <strong>every property as optional</strong>. The dictionary is in the <strong>CP</strong> folder documentation.</p>\n<p><code>target_reference</code> holds the terminal <code>reference</code> of the original transaction.</p>\n<h3 id=\"how-to-interpret-the-result\">How to interpret the result</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Completed</th>\n<th>Status</th>\n<th>What to do</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>true</code></td>\n<td><code>Approved</code></td>\n<td>Success. Save <code>RequestId</code>, <code>GatewayReferenceNumber</code>, <code>ApprovalCode</code>, <code>AuthorizedAmount</code> and the receipts.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Declined</code></td>\n<td>Not approved. Show <code>ResponseText</code>. Don't retry unchanged.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Failed</code> / <code>TimedOut</code> / <code>Cancelled</code></td>\n<td>Not approved. Record the result. Only start a new transaction after you confirm with the customer.</td>\n</tr>\n<tr>\n<td><code>false</code></td>\n<td><code>Pending</code> / <code>SentToTerminal</code> / <code>ReceivedByTerminal</code> / <code>Processing</code></td>\n<td>Not final. Poll <strong>Get Transaction Status</strong>. <strong>Never</strong> send a second transaction just because the first one is still pending.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"error-handling\">Error handling</h2>\n<ul>\n<li><strong>Network timeout or no response:</strong> Don't resend the POST automatically. If you got a <code>RequestId</code>, call <strong>Get Transaction Status</strong>. If you didn't, reconcile with your invoice/order reference before you try again.</li>\n<li><strong><code>4xx</code>:</strong> Check the identity headers against the body, the <code>paymentType</code> / <code>transactionType</code> combination, the amount math, and the <code>original*</code> values.</li>\n<li><strong><code>5xx</code>:</strong> Save <code>ErrorId</code> and <code>RequestId</code> (if you have them) and contact support. Check the status before you retry.</li>\n<li><strong><code>ResponseCode=FE6</code> (Invalid Transaction Data):</strong> The gateway rejected the completion. Check that the <code>original*</code> values belong to an approved, not-yet-completed Auth.</li>\n</ul>\n<h2 id=\"testing-in-postman\">Testing in Postman</h2>\n<ul>\n<li><strong>Reads:</strong> <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code>, <code></code>, <code>1</code>, <code>1</code>, <code>1.0.0</code> and the amount variables. The collection pre-request script recalculates <code>SubTotal</code>, <code>Tax</code> and <code>GrandTotal</code>.</li>\n<li><strong>Writes (test script):</strong> <code>RequestId</code>, <code>OriginalGatewayReferenceNumber</code> (from <code>GatewayReferenceNumber</code>), <code>OriginalAmount</code> (from <code>AuthorizedAmount</code>), <code>OriginalApprovalCode</code> (from <code>ApprovalCode</code>) and <code>ErrorId</code>, <strong>whenever these are in the response</strong>.</li>\n<li>⚠️ Values are saved even when the transaction is <strong>declined</strong>. Before you run a follow-up request, check that the last response was the approved original you meant.</li>\n<li><strong>Tests:</strong> HTTP status is 200/201/202. When <code>EvertecResponse</code> is present, internal correlation fields (<code>last_reference</code>, <code>trx_id</code>, <code>session_id</code>) are not in it.</li>\n</ul>\n<h2 id=\"related-requests\">Related requests</h2>\n<ul>\n<li><strong>CP → Credit → Auth</strong>, which this request completes</li>\n<li><strong>Get Transaction Status</strong> while <code>Completed=false</code></li>\n</ul>\n","urlObject":{"path":["api","v1","transactions"],"host":["https://webtest.chargeanywhere.com/evuapi"],"query":[],"variable":[]}},"response":[{"id":"a7ed38c2-6670-4536-af72-756f55d31c6b","name":"200 OK · Approved","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 2,\n  \"transactionType\": 4,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": true,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"originalAmount\": ,\n  \"originalApprovalCode\": \"\",\n  \"originalGatewayReferenceNumber\": \"\",\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"**Scenario:** An earlier CP Auth was completed.\n\n- `target_reference=41` is the terminal reference of the Auth that was completed.\n- No card was read (`entry_type=MANUAL`), so there's no `emv_data`. `trace_number`, `tip` and `ivu` aren't returned either, which shows that CP keys are optional."},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Cache-Control","value":"no-cache,no-cache, no-store"},{"key":"Pragma","value":"no-cache"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Expires","value":"-1,0"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"X-FRAME-OPTIONS","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"Referrer-Policy","value":"no-referrer-when-downgrade"},{"key":"Content-Security-Policy","value":"default-src data: 'unsafe-inline' 'unsafe-eval' https:; img-src * data:;"},{"key":"Date","value":"Fri, 25 Sep 2026 16:04:28 GMT"},{"key":"Content-Length","value":"1841"}],"cookie":[],"responseTime":null,"body":"{\n    \"RequestId\": \"498493f3ad9b4b5d9a6475dbdfdf7a44\",\n    \"Status\": \"Approved\",\n    \"Completed\": true,\n    \"ResponseCode\": \"000\",\n    \"ProcessorResponseCode\": \"00\",\n    \"ResponseText\": \"APPROVED.\",\n    \"EvertecResponse\": {\n        \"card_acceptor_id\": \"NONE\",\n        \"batch_number\": \"5\",\n        \"special_account\": \"VC\",\n        \"pan_card_number\": \"0854\",\n        \"merchant_id\": \"4549000000123\",\n        \"reference\": \"44\",\n        \"receipt_output\": {\n            \"merchant\": \"<html><body><!-- Receipt HTML shortened for documentation --><p>MERCHANT COPY</p></body></html>\",\n            \"customer\": \"<html><body><!-- Receipt HTML shortened for documentation --><p>CUSTOMER COPY</p></body></html>\"\n        },\n        \"amounts\": {\n            \"total\": \"26.00\",\n            \"base_state_tax\": \"10.00\",\n            \"reduced_tax\": \"3.00\",\n            \"base_reduced_tax\": \"10.00\",\n            \"state_tax\": \"1.00\",\n            \"city_tax\": \"2.00\"\n        },\n        \"authorization_code\": \"609473\",\n        \"target_reference\": \"41\",\n        \"signature_indicator\": \"SIGN\",\n        \"transaction_time\": \"213425\",\n        \"payment_host\": \"ATH1\",\n        \"invoice_number\": \"000963\",\n        \"terminal_id\": \"40000001\",\n        \"merchant_vid\": \"4549000000123\",\n        \"transaction_date\": \"09252026\",\n        \"approval_code\": \"00\",\n        \"cashier_id\": \"1\",\n        \"card_bin_type\": \"VISA\",\n        \"terminal_vid\": \"40000001\",\n        \"station_number\": \"1\",\n        \"response_message\": \"APPROVED.\",\n        \"receipt_email\": \"yes\",\n        \"transaction_type_indicator\": \"C\",\n        \"entry_type\": \"MANUAL\"\n    },\n    \"ApprovalCode\": \"609473\",\n    \"GatewayReferenceNumber\": \"000004589460\",\n    \"AuthorizedAmount\": 26,\n    \"TokenNumber\": null,\n    \"CardType\": \"1\",\n    \"StatusUrl\": \"/api/v1/transactions/498493f3ad9b4b5d9a6475dbdfdf7a44\",\n    \"ErrorId\": null\n}"}],"_postman_id":"b89150fe-41d7-4ae5-baf4-06249f862ffe"},{"name":"Void","event":[{"listen":"test","script":{"type":"text/javascript","exec":["let body = {};","try { body = pm.response.json(); } catch (e) {}","const requestId = body.requestId || body.RequestId;","const gatewayReferenceNumber = body.gatewayReferenceNumber || body.GatewayReferenceNumber;","const authorizedAmount = body.authorizedAmount !== undefined ? body.authorizedAmount : body.AuthorizedAmount;","const errorId = body.errorId || body.ErrorId;","if (requestId) pm.collectionVariables.set('RequestId', requestId);","if (gatewayReferenceNumber) pm.collectionVariables.set('OriginalGatewayReferenceNumber', gatewayReferenceNumber);","if (authorizedAmount !== undefined && authorizedAmount !== null) pm.collectionVariables.set('OriginalAmount', authorizedAmount);","if (errorId) pm.collectionVariables.set('ErrorId', errorId);","pm.test('Transaction request accepted', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });","const originalApprovalCode = body.approvalCode || body.ApprovalCode || (body.data && (body.data.approvalCode || body.data.ApprovalCode));","if (originalApprovalCode) pm.collectionVariables.set('OriginalApprovalCode', originalApprovalCode);","","// App2-only correlation fields are never part of the public EvertecResponse.","const evertecResponse = body.EvertecResponse || body.evertecResponse;","if (evertecResponse && typeof evertecResponse === 'object') {","  pm.test('EvertecResponse suppresses App2-only correlation fields', function () {","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'last_reference')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'trx_id')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'session_id')).to.eql(false);","  });","}"],"id":"fe49424f-d922-4dc9-b984-6b9b22991d6e"}}],"id":"94b412a9-a836-4fc1-9723-c58501b08e33","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 2,\n  \"transactionType\": 2,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": true,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"originalAmount\": ,\n  \"originalApprovalCode\": \"\",\n  \"originalGatewayReferenceNumber\": \"\",\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"<h1 id=\"cp-credit-void\">CP Credit Void</h1>\n<blockquote>\n<p>Cancels an earlier transaction. <code>transactionType</code> is always <code>2</code>.</p>\n</blockquote>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Endpoint</strong></td>\n<td><code>POST https://webtest.chargeanywhere.com/evuapi/api/v1/transactions</code></td>\n</tr>\n<tr>\n<td><strong>Channel</strong></td>\n<td>Card-present (CP) · <code>cardPresent=true</code></td>\n</tr>\n<tr>\n<td><strong>Tender</strong></td>\n<td>Credit (<code>paymentType=2</code>)</td>\n</tr>\n<tr>\n<td><strong>Operation</strong></td>\n<td>Void (<code>transactionType=2</code>)</td>\n</tr>\n<tr>\n<td><strong>Processing model</strong></td>\n<td><strong>Asynchronous.</strong> The response may be final or not final. If <code>Completed=false</code>, poll <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><strong>Caller</strong></td>\n<td>Merchant or POS application</td>\n</tr>\n<tr>\n<td><strong>Authentication</strong></td>\n<td>Merchant identity headers <code>X-Merchant-Id</code>, <code>X-Terminal-Id</code>, <code>X-Identification</code></td>\n</tr>\n<tr>\n<td><strong>Financial impact</strong></td>\n<td>The original transaction is cancelled. A voided transaction does not settle.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"overview\">Overview</h2>\n<p>Use Void to cancel a transaction, normally before its batch is closed. After settlement, use <strong>Return</strong> instead. Send <code>originalGatewayReferenceNumber</code>. EVUAPI uses it to find the original transaction.</p>\n<h2 id=\"before-you-call\">Before you call</h2>\n<ul>\n<li>The terminal for <code></code> must be enrolled with EVUAPI, powered on and online.</li>\n<li>Run the transaction you want to void first (e.g. <strong>Sale</strong>). Its test script saves the <code>Original*</code> variables.</li>\n<li>Set <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code> and <code></code> in your active environment.</li>\n</ul>\n<h2 id=\"request\">Request</h2>\n<h3 id=\"headers\">Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Required</th>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Content-Type</code></td>\n<td>Yes</td>\n<td><code>application/json</code></td>\n<td>The request body is JSON.</td>\n</tr>\n<tr>\n<td><code>Accept</code></td>\n<td>Recommended</td>\n<td><code>application/json</code></td>\n<td>Asks for a JSON response.</td>\n</tr>\n<tr>\n<td><code>X-Merchant-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant identity. Must match body <code>merchantId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Terminal-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant terminal identity (keep leading zeros). Must match body <code>terminalId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Identification</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Physical terminal identity. Must match body <code>identification</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"body-parameters\">Body parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Value in this request</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>merchantId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant ID that Charge Anywhere issued for this integration. Must be the same as the <code>X-Merchant-Id</code> header.</td>\n</tr>\n<tr>\n<td><code>identification</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Physical terminal / device identity (the same value as the terminal serial number / ManNumber). Must be the same as <code>X-Identification</code>. Identifies the terminal that will process the transaction.</td>\n</tr>\n<tr>\n<td><code>terminalId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant terminal ID. Send it as a <strong>string</strong> and keep leading zeros (e.g. <code>0002</code>). Must be the same as <code>X-Terminal-Id</code>.</td>\n</tr>\n<tr>\n<td><code>terminalDateTime</code></td>\n<td>string (date-time)</td>\n<td>Required</td>\n<td><code>\"2026-08-14T18:30:00\"</code></td>\n<td>Local date/time of the calling system, ISO 8601 with no UTC offset: <code>yyyy-MM-ddTHH:mm:ss</code>. Send the actual time of the request. The value shown is an example.</td>\n</tr>\n<tr>\n<td><code>paymentType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>2</code></td>\n<td>Tender. <code>2</code> = Credit. See <strong>Payment types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>transactionType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>2</code></td>\n<td>Operation. <code>2</code> = Void. See <strong>Transaction types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>stationNumber</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Station / register number. Returned as a string in <code>EvertecResponse.station_number</code>.</td>\n</tr>\n<tr>\n<td><code>cashierId</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Cashier / clerk ID. Returned in <code>EvertecResponse.cashier_id</code>.</td>\n</tr>\n<tr>\n<td><code>cardPresent</code></td>\n<td>boolean</td>\n<td>Required</td>\n<td><code>true</code></td>\n<td><code>true</code> sends the request down the asynchronous <strong>card-present</strong> path (a push to the terminal).</td>\n</tr>\n<tr>\n<td><code>tokenNumber</code></td>\n<td>string</td>\n<td>Send <code>\"\"</code></td>\n<td><code>\"\"</code></td>\n<td>Not used for card-present; send an empty string. The terminal reads the card or tender.</td>\n</tr>\n<tr>\n<td><code>fullName</code></td>\n<td>string</td>\n<td>Optional</td>\n<td><code>\"John Smith\"</code></td>\n<td>Cardholder / customer display name. Informational only.</td>\n</tr>\n<tr>\n<td><code>amountOfSale</code></td>\n<td>number (2 dp)</td>\n<td>Required</td>\n<td><code>20.00</code></td>\n<td>Base amount before tax, tip, cashback and fee.</td>\n</tr>\n<tr>\n<td><code>tax</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>6.00</code></td>\n<td>Total tax = <code>stateTax + cityTax + reducedTax</code>. The collection pre-request script calculates it.</td>\n</tr>\n<tr>\n<td><code>baseStateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for state and municipal tax.</td>\n</tr>\n<tr>\n<td><code>baseReducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for reduced state tax.</td>\n</tr>\n<tr>\n<td><code>stateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>1.00</code></td>\n<td>State tax amount (tax type: State).</td>\n</tr>\n<tr>\n<td><code>cityTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>2.00</code></td>\n<td>Municipal / city tax amount (tax type: Municipal).</td>\n</tr>\n<tr>\n<td><code>reducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>3.00</code></td>\n<td>Reduced state tax amount (tax type: Reduced state).</td>\n</tr>\n<tr>\n<td><code>subTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>20.00</code></td>\n<td>Equals <code>amountOfSale</code>. The collection script calculates it.</td>\n</tr>\n<tr>\n<td><code>tips</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Tip / gratuity amount.</td>\n</tr>\n<tr>\n<td><code>cashBack</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Cashback amount.</td>\n</tr>\n<tr>\n<td><code>fee</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Extra fee / surcharge amount.</td>\n</tr>\n<tr>\n<td><code>grandTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>26.00</code></td>\n<td><code>subTotal + tax + tips + cashBack + fee</code>. The collection script calculates it. This is the total sent for authorization; it comes back as <code>EvertecResponse.amounts.total</code>.</td>\n</tr>\n<tr>\n<td><code>originalAmount</code></td>\n<td>number</td>\n<td>Required</td>\n<td><code></code></td>\n<td>Amount of the original transaction, normally its <code>AuthorizedAmount</code>. Postman saves it as <code></code>.</td>\n</tr>\n<tr>\n<td><code>originalApprovalCode</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td><code>ApprovalCode</code> returned by the original transaction. Postman saves it as <code></code>.</td>\n</tr>\n<tr>\n<td><code>originalGatewayReferenceNumber</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td><code>GatewayReferenceNumber</code> of the original transaction (12 digits, keep leading zeros). EVUAPI uses it to find the transaction being voided.</td>\n</tr>\n<tr>\n<td><code>appVersion</code></td>\n<td>string</td>\n<td>Recommended</td>\n<td><code>\"1.0.0\"</code></td>\n<td>Version of the calling application. Used for support and compatibility tracking.</td>\n</tr>\n<tr>\n<td><code>timeOut</code></td>\n<td>integer (ms)</td>\n<td>Optional</td>\n<td><code>30000</code></td>\n<td>How long, in ms, the HTTP call waits for the terminal's final result. <code>0</code> returns right after the request is saved and dispatched (<code>Completed=false</code>). With a value above 0, EVUAPI returns as soon as the final result arrives, or when the wait runs out. <strong>When the wait runs out, the terminal transaction is not cancelled.</strong></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"business-rules\">Business rules</h3>\n<ul>\n<li><code>tax</code> must equal <code>stateTax + cityTax + reducedTax</code>.</li>\n<li><code>subTotal</code> must equal <code>amountOfSale</code>.</li>\n<li><code>grandTotal</code> must equal <code>subTotal + tax + tips + cashBack + fee</code>.</li>\n<li>Use decimal (not floating-point) math, and round money to 2 decimal places.</li>\n<li>The identity header values must be the same as the body's <code>merchantId</code>, <code>terminalId</code> and <code>identification</code>.</li>\n<li><code>transactionType</code> is always <code>2</code>. <code>originalGatewayReferenceNumber</code> is <strong>required</strong>. It identifies the transaction being voided.</li>\n<li>Send <code>tokenNumber</code> as an empty string. The terminal reads the card or tender.</li>\n</ul>\n<h2 id=\"response\">Response</h2>\n<h3 id=\"http-status-codes\">HTTP status codes</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>HTTP status</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>200 OK</code></td>\n<td>The request was processed. The body holds the final result (<code>Completed=true</code>).</td>\n</tr>\n<tr>\n<td><code>202 Accepted</code></td>\n<td>The terminal accepted the request, but the result is not final yet (<code>Completed=false</code>). Poll <strong>Get Transaction Status</strong> with <code>RequestId</code>.</td>\n</tr>\n<tr>\n<td><code>4xx</code></td>\n<td>Validation, identity or authorization failure. Fix the request or configuration. <strong>Don't retry it unchanged.</strong></td>\n</tr>\n<tr>\n<td><code>5xx</code></td>\n<td>Service-side failure. Save <code>ErrorId</code> if one is returned. If you have a <code>RequestId</code>, check the status before you consider a retry.</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p><strong>HTTP 200 does not mean approved.</strong> A decline also comes back as <code>200</code> with <code>Status=Declined</code>. Always decide the outcome from <code>Status</code> and <code>Completed</code>.</p>\n</blockquote>\n<h3 id=\"response-body\">Response body</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>RequestId</code></td>\n<td>string</td>\n<td>EVUAPI's ID for this transaction: 32 lowercase hex characters, no hyphens. Save it right away. You need it to get the status and to contact support.</td>\n</tr>\n<tr>\n<td><code>Status</code></td>\n<td>string</td>\n<td>Current lifecycle state. See <strong>Transaction statuses</strong>.</td>\n</tr>\n<tr>\n<td><code>Completed</code></td>\n<td>boolean</td>\n<td><code>true</code> only when <code>Status</code> is final. While it is <code>false</code>, keep polling <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><code>ResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Result code normalized by EVUAPI. See <strong>Response codes</strong>. Keep it as a string (it can have leading zeros). <code>null</code> while not final.</td>\n</tr>\n<tr>\n<td><code>ProcessorResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Raw code from the processor or terminal, such as <code>00</code> or <code>68</code>. An empty string means the processor was never reached.</td>\n</tr>\n<tr>\n<td><code>ResponseText</code></td>\n<td>string (nullable)</td>\n<td>Readable result text from the processor, gateway or EVUAPI. Show it to operators, but don't parse it.</td>\n</tr>\n<tr>\n<td><code>EvertecResponse</code></td>\n<td>object (nullable)</td>\n<td>Processor-specific details. <strong>CNP:</strong> a fixed, ordered shape. <strong>CP:</strong> the terminal's raw final result. <code>null</code> while not final. See the <em>CNP</em> and <em>CP</em> folder docs.</td>\n</tr>\n<tr>\n<td><code>ApprovalCode</code></td>\n<td>string (nullable)</td>\n<td>Processor authorization code, normally 6 characters. It can also be filled in on a <strong>decline</strong>, so never use it alone to decide approval.</td>\n</tr>\n<tr>\n<td><code>GatewayReferenceNumber</code></td>\n<td>string (nullable)</td>\n<td>Charge Anywhere gateway reference: 12 digits, keep the leading zeros. Send it as <code>originalGatewayReferenceNumber</code> on a later Force, Void or Return.</td>\n</tr>\n<tr>\n<td><code>AuthorizedAmount</code></td>\n<td>number (nullable)</td>\n<td>Amount the processor authorized. <code>0</code> on an approved Void. <code>null</code> when nothing was authorized.</td>\n</tr>\n<tr>\n<td><code>TokenNumber</code></td>\n<td>string (nullable)</td>\n<td>CNP: the payment token for the transaction. CP: <code>null</code>. <strong>Sensitive.</strong></td>\n</tr>\n<tr>\n<td><code>CardType</code></td>\n<td>string (nullable)</td>\n<td>Card brand or tender code. See <strong>Card type codes</strong>.</td>\n</tr>\n<tr>\n<td><code>StatusUrl</code></td>\n<td>string</td>\n<td>Relative path of the status resource, e.g. <code>/api/v1/transactions/{RequestId}</code>. Put <code>https://webtest.chargeanywhere.com/evuapi</code> in front and add the three identity query parameters.</td>\n</tr>\n<tr>\n<td><code>ErrorId</code></td>\n<td>string (nullable)</td>\n<td>ID of an error that EVUAPI logged. Give it to Charge Anywhere support.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"evertecresponse\">EvertecResponse</h3>\n<p><code>EvertecResponse</code> is the terminal's <strong>raw</strong> final result, with internal correlation fields removed. It is not normalized, so treat <strong>every property as optional</strong>. The dictionary is in the <strong>CP</strong> folder documentation.</p>\n<p><code>target_reference</code> holds the terminal <code>reference</code> of the original transaction.</p>\n<h3 id=\"how-to-interpret-the-result\">How to interpret the result</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Completed</th>\n<th>Status</th>\n<th>What to do</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>true</code></td>\n<td><code>Approved</code></td>\n<td>Success. Save <code>RequestId</code>, <code>GatewayReferenceNumber</code>, <code>ApprovalCode</code>, <code>AuthorizedAmount</code> and the receipts.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Declined</code></td>\n<td>Not approved. Show <code>ResponseText</code>. Don't retry unchanged.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Failed</code> / <code>TimedOut</code> / <code>Cancelled</code></td>\n<td>Not approved. Record the result. Only start a new transaction after you confirm with the customer.</td>\n</tr>\n<tr>\n<td><code>false</code></td>\n<td><code>Pending</code> / <code>SentToTerminal</code> / <code>ReceivedByTerminal</code> / <code>Processing</code></td>\n<td>Not final. Poll <strong>Get Transaction Status</strong>. <strong>Never</strong> send a second transaction just because the first one is still pending.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"error-handling\">Error handling</h2>\n<ul>\n<li><strong>Network timeout or no response:</strong> Don't resend the POST automatically. If you got a <code>RequestId</code>, call <strong>Get Transaction Status</strong>. If you didn't, reconcile with your invoice/order reference before you try again.</li>\n<li><strong><code>4xx</code>:</strong> Check the identity headers against the body, the <code>paymentType</code> / <code>transactionType</code> combination, the amount math, and the <code>original*</code> values.</li>\n<li><strong><code>5xx</code>:</strong> Save <code>ErrorId</code> and <code>RequestId</code> (if you have them) and contact support. Check the status before you retry.</li>\n<li><strong>Original not found:</strong> Check that <code>originalGatewayReferenceNumber</code> belongs to a transaction on the same merchant/terminal identity.</li>\n</ul>\n<h2 id=\"testing-in-postman\">Testing in Postman</h2>\n<ul>\n<li><strong>Reads:</strong> <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code>, <code></code>, <code>1</code>, <code>1</code>, <code>1.0.0</code> and the amount variables. The collection pre-request script recalculates <code>SubTotal</code>, <code>Tax</code> and <code>GrandTotal</code>.</li>\n<li><strong>Writes (test script):</strong> <code>RequestId</code>, <code>OriginalGatewayReferenceNumber</code> (from <code>GatewayReferenceNumber</code>), <code>OriginalAmount</code> (from <code>AuthorizedAmount</code>), <code>OriginalApprovalCode</code> (from <code>ApprovalCode</code>) and <code>ErrorId</code>, <strong>whenever these are in the response</strong>.</li>\n<li>⚠️ Values are saved even when the transaction is <strong>declined</strong>. Before you run a follow-up request, check that the last response was the approved original you meant.</li>\n<li><strong>Tests:</strong> HTTP status is 200/201/202. When <code>EvertecResponse</code> is present, internal correlation fields (<code>last_reference</code>, <code>trx_id</code>, <code>session_id</code>) are not in it.</li>\n</ul>\n<h2 id=\"related-requests\">Related requests</h2>\n<ul>\n<li><strong>Get Transaction Status</strong> while <code>Completed=false</code></li>\n</ul>\n","urlObject":{"path":["api","v1","transactions"],"host":["https://webtest.chargeanywhere.com/evuapi"],"query":[],"variable":[]}},"response":[{"id":"1f4e5dc7-1715-4955-8010-81d5fd00f5ee","name":"200 OK · Approved","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 2,\n  \"transactionType\": 2,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": true,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"originalAmount\": ,\n  \"originalApprovalCode\": \"\",\n  \"originalGatewayReferenceNumber\": \"\",\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"**Scenario:** The contactless Visa Sale (terminal reference `11`) was voided.\n\n- `target_reference=11` points to the voided Sale. `reference=56` is the Void itself.\n- `emv_data` and `ivu` repeat the original Sale's values."},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Cache-Control","value":"no-cache,no-cache, no-store"},{"key":"Pragma","value":"no-cache"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Expires","value":"-1,0"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"X-FRAME-OPTIONS","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"Referrer-Policy","value":"no-referrer-when-downgrade"},{"key":"Content-Security-Policy","value":"default-src data: 'unsafe-inline' 'unsafe-eval' https:; img-src * data:;"},{"key":"Date","value":"Thu, 24 Sep 2026 18:41:08 GMT"},{"key":"Content-Length","value":"2261"}],"cookie":[],"responseTime":null,"body":"{\n    \"RequestId\": \"697d43d636734b0bb127e4a2ca8a5468\",\n    \"Status\": \"Approved\",\n    \"Completed\": true,\n    \"ResponseCode\": \"000\",\n    \"ProcessorResponseCode\": \"00\",\n    \"ResponseText\": \"APPROVED.\",\n    \"EvertecResponse\": {\n        \"trace_number\": \"5\",\n        \"batch_number\": \"2\",\n        \"card_acceptor_id\": \"NONE\",\n        \"special_account\": \"VC\",\n        \"pan_card_number\": \"3005\",\n        \"merchant_id\": \"4549000000123\",\n        \"reference\": \"56\",\n        \"receipt_output\": {\n            \"merchant\": \"<html><body><!-- Receipt HTML shortened for documentation --><p>MERCHANT COPY</p></body></html>\",\n            \"customer\": \"<html><body><!-- Receipt HTML shortened for documentation --><p>CUSTOMER COPY</p></body></html>\"\n        },\n        \"amounts\": {\n            \"total\": \"26.00\",\n            \"base_state_tax\": \"10.00\",\n            \"tip\": \"0.00\",\n            \"reduced_tax\": \"3.00\",\n            \"base_reduced_tax\": \"10.00\",\n            \"state_tax\": \"1.00\",\n            \"city_tax\": \"2.00\"\n        },\n        \"authorization_code\": \"124543\",\n        \"target_reference\": \"11\",\n        \"emv_data\": {\n            \"84\": \"A0000000031010\",\n            \"95\": \"0000000000\",\n            \"9F12\": \"VISA CREDIT\",\n            \"9B\": \"0000\",\n            \"9F26\": \"1C727DD5FA1F3DDC\",\n            \"9F37\": \"B9FB787C\"\n        },\n        \"signature_indicator\": \"SIGN\",\n        \"transaction_time\": \"001105\",\n        \"payment_host\": \"ATH1\",\n        \"invoice_number\": \"000938\",\n        \"terminal_id\": \"40000001\",\n        \"merchant_vid\": \"4549000000123\",\n        \"transaction_date\": \"09252026\",\n        \"approval_code\": \"00\",\n        \"cashier_id\": \"1\",\n        \"ivu\": {\n            \"control_line1\": \"CONTROL: 8LGJP-4VNZF\",\n            \"control_line2\": \"ET                  \"\n        },\n        \"card_bin_type\": \"VISA\",\n        \"terminal_vid\": \"40000001\",\n        \"station_number\": \"1\",\n        \"response_message\": \"APPROVED.\",\n        \"receipt_email\": \"yes\",\n        \"transaction_type_indicator\": \"C\",\n        \"entry_type\": \"CTLS\"\n    },\n    \"ApprovalCode\": \"124543\",\n    \"GatewayReferenceNumber\": \"000004588900\",\n    \"AuthorizedAmount\": 26,\n    \"TokenNumber\": null,\n    \"CardType\": \"1\",\n    \"StatusUrl\": \"/api/v1/transactions/697d43d636734b0bb127e4a2ca8a5468\",\n    \"ErrorId\": null\n}"}],"_postman_id":"94b412a9-a836-4fc1-9723-c58501b08e33"},{"name":"Return","event":[{"listen":"test","script":{"type":"text/javascript","exec":["let body = {};","try { body = pm.response.json(); } catch (e) {}","const requestId = body.requestId || body.RequestId;","const gatewayReferenceNumber = body.gatewayReferenceNumber || body.GatewayReferenceNumber;","const authorizedAmount = body.authorizedAmount !== undefined ? body.authorizedAmount : body.AuthorizedAmount;","const errorId = body.errorId || body.ErrorId;","if (requestId) pm.collectionVariables.set('RequestId', requestId);","if (gatewayReferenceNumber) pm.collectionVariables.set('OriginalGatewayReferenceNumber', gatewayReferenceNumber);","if (authorizedAmount !== undefined && authorizedAmount !== null) pm.collectionVariables.set('OriginalAmount', authorizedAmount);","if (errorId) pm.collectionVariables.set('ErrorId', errorId);","pm.test('Transaction request accepted', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });","const originalApprovalCode = body.approvalCode || body.ApprovalCode || (body.data && (body.data.approvalCode || body.data.ApprovalCode));","if (originalApprovalCode) pm.collectionVariables.set('OriginalApprovalCode', originalApprovalCode);","","// App2-only correlation fields are never part of the public EvertecResponse.","const evertecResponse = body.EvertecResponse || body.evertecResponse;","if (evertecResponse && typeof evertecResponse === 'object') {","  pm.test('EvertecResponse suppresses App2-only correlation fields', function () {","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'last_reference')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'trx_id')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'session_id')).to.eql(false);","  });","}"],"id":"ef84161d-2f84-470d-b405-d7d96c1d7868"}}],"id":"38356f00-7832-40f7-84fb-8be223d7c5d3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 2,\n  \"transactionType\": 3,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": true,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"originalAmount\": ,\n  \"originalApprovalCode\": \"\",\n  \"originalGatewayReferenceNumber\": \"\",\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"<h1 id=\"cp-credit-return\">CP Credit Return</h1>\n<blockquote>\n<p>Refunds money to the customer.</p>\n</blockquote>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Endpoint</strong></td>\n<td><code>POST https://webtest.chargeanywhere.com/evuapi/api/v1/transactions</code></td>\n</tr>\n<tr>\n<td><strong>Channel</strong></td>\n<td>Card-present (CP) · <code>cardPresent=true</code></td>\n</tr>\n<tr>\n<td><strong>Tender</strong></td>\n<td>Credit (<code>paymentType=2</code>)</td>\n</tr>\n<tr>\n<td><strong>Operation</strong></td>\n<td>Return (<code>transactionType=3</code>)</td>\n</tr>\n<tr>\n<td><strong>Processing model</strong></td>\n<td><strong>Asynchronous.</strong> The response may be final or not final. If <code>Completed=false</code>, poll <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><strong>Caller</strong></td>\n<td>Merchant or POS application</td>\n</tr>\n<tr>\n<td><strong>Authentication</strong></td>\n<td>Merchant identity headers <code>X-Merchant-Id</code>, <code>X-Terminal-Id</code>, <code>X-Identification</code></td>\n</tr>\n<tr>\n<td><strong>Financial impact</strong></td>\n<td>Money is returned to the customer and the refund is queued for settlement.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"overview\">Overview</h2>\n<p>Use Return to refund an earlier purchase, usually after settlement. For a <strong>linked</strong> Return, send the original transaction's <code>original*</code> fields, as this collection does.</p>\n<h2 id=\"before-you-call\">Before you call</h2>\n<ul>\n<li>The terminal for <code></code> must be enrolled with EVUAPI, powered on and online.</li>\n<li>For a linked Return, run the original <strong>Sale</strong> (or <strong>Force</strong>) first so the <code>Original*</code> variables are filled in.</li>\n<li>Set <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code> and <code></code> in your active environment.</li>\n</ul>\n<h2 id=\"request\">Request</h2>\n<h3 id=\"headers\">Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Required</th>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Content-Type</code></td>\n<td>Yes</td>\n<td><code>application/json</code></td>\n<td>The request body is JSON.</td>\n</tr>\n<tr>\n<td><code>Accept</code></td>\n<td>Recommended</td>\n<td><code>application/json</code></td>\n<td>Asks for a JSON response.</td>\n</tr>\n<tr>\n<td><code>X-Merchant-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant identity. Must match body <code>merchantId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Terminal-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant terminal identity (keep leading zeros). Must match body <code>terminalId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Identification</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Physical terminal identity. Must match body <code>identification</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"body-parameters\">Body parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Value in this request</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>merchantId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant ID that Charge Anywhere issued for this integration. Must be the same as the <code>X-Merchant-Id</code> header.</td>\n</tr>\n<tr>\n<td><code>identification</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Physical terminal / device identity (the same value as the terminal serial number / ManNumber). Must be the same as <code>X-Identification</code>. Identifies the terminal that will process the transaction.</td>\n</tr>\n<tr>\n<td><code>terminalId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant terminal ID. Send it as a <strong>string</strong> and keep leading zeros (e.g. <code>0002</code>). Must be the same as <code>X-Terminal-Id</code>.</td>\n</tr>\n<tr>\n<td><code>terminalDateTime</code></td>\n<td>string (date-time)</td>\n<td>Required</td>\n<td><code>\"2026-08-14T18:30:00\"</code></td>\n<td>Local date/time of the calling system, ISO 8601 with no UTC offset: <code>yyyy-MM-ddTHH:mm:ss</code>. Send the actual time of the request. The value shown is an example.</td>\n</tr>\n<tr>\n<td><code>paymentType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>2</code></td>\n<td>Tender. <code>2</code> = Credit. See <strong>Payment types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>transactionType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>3</code></td>\n<td>Operation. <code>3</code> = Return. See <strong>Transaction types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>stationNumber</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Station / register number. Returned as a string in <code>EvertecResponse.station_number</code>.</td>\n</tr>\n<tr>\n<td><code>cashierId</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Cashier / clerk ID. Returned in <code>EvertecResponse.cashier_id</code>.</td>\n</tr>\n<tr>\n<td><code>cardPresent</code></td>\n<td>boolean</td>\n<td>Required</td>\n<td><code>true</code></td>\n<td><code>true</code> sends the request down the asynchronous <strong>card-present</strong> path (a push to the terminal).</td>\n</tr>\n<tr>\n<td><code>tokenNumber</code></td>\n<td>string</td>\n<td>Send <code>\"\"</code></td>\n<td><code>\"\"</code></td>\n<td>Not used for card-present; send an empty string. The terminal reads the card or tender.</td>\n</tr>\n<tr>\n<td><code>fullName</code></td>\n<td>string</td>\n<td>Optional</td>\n<td><code>\"John Smith\"</code></td>\n<td>Cardholder / customer display name. Informational only.</td>\n</tr>\n<tr>\n<td><code>amountOfSale</code></td>\n<td>number (2 dp)</td>\n<td>Required</td>\n<td><code>20.00</code></td>\n<td>Base amount before tax, tip, cashback and fee.</td>\n</tr>\n<tr>\n<td><code>tax</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>6.00</code></td>\n<td>Total tax = <code>stateTax + cityTax + reducedTax</code>. The collection pre-request script calculates it.</td>\n</tr>\n<tr>\n<td><code>baseStateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for state and municipal tax.</td>\n</tr>\n<tr>\n<td><code>baseReducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for reduced state tax.</td>\n</tr>\n<tr>\n<td><code>stateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>1.00</code></td>\n<td>State tax amount (tax type: State).</td>\n</tr>\n<tr>\n<td><code>cityTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>2.00</code></td>\n<td>Municipal / city tax amount (tax type: Municipal).</td>\n</tr>\n<tr>\n<td><code>reducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>3.00</code></td>\n<td>Reduced state tax amount (tax type: Reduced state).</td>\n</tr>\n<tr>\n<td><code>subTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>20.00</code></td>\n<td>Equals <code>amountOfSale</code>. The collection script calculates it.</td>\n</tr>\n<tr>\n<td><code>tips</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Tip / gratuity amount.</td>\n</tr>\n<tr>\n<td><code>cashBack</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Cashback amount.</td>\n</tr>\n<tr>\n<td><code>fee</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Extra fee / surcharge amount.</td>\n</tr>\n<tr>\n<td><code>grandTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>26.00</code></td>\n<td><code>subTotal + tax + tips + cashBack + fee</code>. The collection script calculates it. This is the total sent for authorization; it comes back as <code>EvertecResponse.amounts.total</code>.</td>\n</tr>\n<tr>\n<td><code>originalAmount</code></td>\n<td>number</td>\n<td>Conditional (linked Return)</td>\n<td><code></code></td>\n<td>Amount of the original transaction, normally its <code>AuthorizedAmount</code>. Postman saves it as <code></code>.</td>\n</tr>\n<tr>\n<td><code>originalApprovalCode</code></td>\n<td>string</td>\n<td>Conditional (linked Return)</td>\n<td><code>\"\"</code></td>\n<td><code>ApprovalCode</code> returned by the original transaction. Postman saves it as <code></code>.</td>\n</tr>\n<tr>\n<td><code>originalGatewayReferenceNumber</code></td>\n<td>string</td>\n<td>Conditional (linked Return)</td>\n<td><code>\"\"</code></td>\n<td><code>GatewayReferenceNumber</code> of the original transaction (12 digits, keep leading zeros).</td>\n</tr>\n<tr>\n<td><code>appVersion</code></td>\n<td>string</td>\n<td>Recommended</td>\n<td><code>\"1.0.0\"</code></td>\n<td>Version of the calling application. Used for support and compatibility tracking.</td>\n</tr>\n<tr>\n<td><code>timeOut</code></td>\n<td>integer (ms)</td>\n<td>Optional</td>\n<td><code>30000</code></td>\n<td>How long, in ms, the HTTP call waits for the terminal's final result. <code>0</code> returns right after the request is saved and dispatched (<code>Completed=false</code>). With a value above 0, EVUAPI returns as soon as the final result arrives, or when the wait runs out. <strong>When the wait runs out, the terminal transaction is not cancelled.</strong></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"business-rules\">Business rules</h3>\n<ul>\n<li><code>tax</code> must equal <code>stateTax + cityTax + reducedTax</code>.</li>\n<li><code>subTotal</code> must equal <code>amountOfSale</code>.</li>\n<li><code>grandTotal</code> must equal <code>subTotal + tax + tips + cashBack + fee</code>.</li>\n<li>Use decimal (not floating-point) math, and round money to 2 decimal places.</li>\n<li>The identity header values must be the same as the body's <code>merchantId</code>, <code>terminalId</code> and <code>identification</code>.</li>\n<li>For a linked Return, send the <code>original*</code> values of the purchase being refunded.</li>\n<li>Send <code>tokenNumber</code> as an empty string. The terminal reads the card or tender.</li>\n</ul>\n<h2 id=\"response\">Response</h2>\n<h3 id=\"http-status-codes\">HTTP status codes</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>HTTP status</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>200 OK</code></td>\n<td>The request was processed. The body holds the final result (<code>Completed=true</code>).</td>\n</tr>\n<tr>\n<td><code>202 Accepted</code></td>\n<td>The terminal accepted the request, but the result is not final yet (<code>Completed=false</code>). Poll <strong>Get Transaction Status</strong> with <code>RequestId</code>.</td>\n</tr>\n<tr>\n<td><code>4xx</code></td>\n<td>Validation, identity or authorization failure. Fix the request or configuration. <strong>Don't retry it unchanged.</strong></td>\n</tr>\n<tr>\n<td><code>5xx</code></td>\n<td>Service-side failure. Save <code>ErrorId</code> if one is returned. If you have a <code>RequestId</code>, check the status before you consider a retry.</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p><strong>HTTP 200 does not mean approved.</strong> A decline also comes back as <code>200</code> with <code>Status=Declined</code>. Always decide the outcome from <code>Status</code> and <code>Completed</code>.</p>\n</blockquote>\n<h3 id=\"response-body\">Response body</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>RequestId</code></td>\n<td>string</td>\n<td>EVUAPI's ID for this transaction: 32 lowercase hex characters, no hyphens. Save it right away. You need it to get the status and to contact support.</td>\n</tr>\n<tr>\n<td><code>Status</code></td>\n<td>string</td>\n<td>Current lifecycle state. See <strong>Transaction statuses</strong>.</td>\n</tr>\n<tr>\n<td><code>Completed</code></td>\n<td>boolean</td>\n<td><code>true</code> only when <code>Status</code> is final. While it is <code>false</code>, keep polling <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><code>ResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Result code normalized by EVUAPI. See <strong>Response codes</strong>. Keep it as a string (it can have leading zeros). <code>null</code> while not final.</td>\n</tr>\n<tr>\n<td><code>ProcessorResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Raw code from the processor or terminal, such as <code>00</code> or <code>68</code>. An empty string means the processor was never reached.</td>\n</tr>\n<tr>\n<td><code>ResponseText</code></td>\n<td>string (nullable)</td>\n<td>Readable result text from the processor, gateway or EVUAPI. Show it to operators, but don't parse it.</td>\n</tr>\n<tr>\n<td><code>EvertecResponse</code></td>\n<td>object (nullable)</td>\n<td>Processor-specific details. <strong>CNP:</strong> a fixed, ordered shape. <strong>CP:</strong> the terminal's raw final result. <code>null</code> while not final. See the <em>CNP</em> and <em>CP</em> folder docs.</td>\n</tr>\n<tr>\n<td><code>ApprovalCode</code></td>\n<td>string (nullable)</td>\n<td>Processor authorization code, normally 6 characters. It can also be filled in on a <strong>decline</strong>, so never use it alone to decide approval.</td>\n</tr>\n<tr>\n<td><code>GatewayReferenceNumber</code></td>\n<td>string (nullable)</td>\n<td>Charge Anywhere gateway reference: 12 digits, keep the leading zeros. Send it as <code>originalGatewayReferenceNumber</code> on a later Force, Void or Return.</td>\n</tr>\n<tr>\n<td><code>AuthorizedAmount</code></td>\n<td>number (nullable)</td>\n<td>Amount the processor authorized. <code>0</code> on an approved Void. <code>null</code> when nothing was authorized.</td>\n</tr>\n<tr>\n<td><code>TokenNumber</code></td>\n<td>string (nullable)</td>\n<td>CNP: the payment token for the transaction. CP: <code>null</code>. <strong>Sensitive.</strong></td>\n</tr>\n<tr>\n<td><code>CardType</code></td>\n<td>string (nullable)</td>\n<td>Card brand or tender code. See <strong>Card type codes</strong>.</td>\n</tr>\n<tr>\n<td><code>StatusUrl</code></td>\n<td>string</td>\n<td>Relative path of the status resource, e.g. <code>/api/v1/transactions/{RequestId}</code>. Put <code>https://webtest.chargeanywhere.com/evuapi</code> in front and add the three identity query parameters.</td>\n</tr>\n<tr>\n<td><code>ErrorId</code></td>\n<td>string (nullable)</td>\n<td>ID of an error that EVUAPI logged. Give it to Charge Anywhere support.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"evertecresponse\">EvertecResponse</h3>\n<p><code>EvertecResponse</code> is the terminal's <strong>raw</strong> final result, with internal correlation fields removed. It is not normalized, so treat <strong>every property as optional</strong>. The dictionary is in the <strong>CP</strong> folder documentation.</p>\n<h3 id=\"how-to-interpret-the-result\">How to interpret the result</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Completed</th>\n<th>Status</th>\n<th>What to do</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>true</code></td>\n<td><code>Approved</code></td>\n<td>Success. Save <code>RequestId</code>, <code>GatewayReferenceNumber</code>, <code>ApprovalCode</code>, <code>AuthorizedAmount</code> and the receipts.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Declined</code></td>\n<td>Not approved. Show <code>ResponseText</code>. Don't retry unchanged.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Failed</code> / <code>TimedOut</code> / <code>Cancelled</code></td>\n<td>Not approved. Record the result. Only start a new transaction after you confirm with the customer.</td>\n</tr>\n<tr>\n<td><code>false</code></td>\n<td><code>Pending</code> / <code>SentToTerminal</code> / <code>ReceivedByTerminal</code> / <code>Processing</code></td>\n<td>Not final. Poll <strong>Get Transaction Status</strong>. <strong>Never</strong> send a second transaction just because the first one is still pending.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"error-handling\">Error handling</h2>\n<ul>\n<li><strong>Network timeout or no response:</strong> Don't resend the POST automatically. If you got a <code>RequestId</code>, call <strong>Get Transaction Status</strong>. If you didn't, reconcile with your invoice/order reference before you try again.</li>\n<li><strong><code>4xx</code>:</strong> Check the identity headers against the body, the <code>paymentType</code> / <code>transactionType</code> combination, the amount math, and the <code>original*</code> values.</li>\n<li><strong><code>5xx</code>:</strong> Save <code>ErrorId</code> and <code>RequestId</code> (if you have them) and contact support. Check the status before you retry.</li>\n</ul>\n<h2 id=\"testing-in-postman\">Testing in Postman</h2>\n<ul>\n<li><strong>Reads:</strong> <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code>, <code></code>, <code>1</code>, <code>1</code>, <code>1.0.0</code> and the amount variables. The collection pre-request script recalculates <code>SubTotal</code>, <code>Tax</code> and <code>GrandTotal</code>.</li>\n<li><strong>Writes (test script):</strong> <code>RequestId</code>, <code>OriginalGatewayReferenceNumber</code> (from <code>GatewayReferenceNumber</code>), <code>OriginalAmount</code> (from <code>AuthorizedAmount</code>), <code>OriginalApprovalCode</code> (from <code>ApprovalCode</code>) and <code>ErrorId</code>, <strong>whenever these are in the response</strong>.</li>\n<li>⚠️ Values are saved even when the transaction is <strong>declined</strong>. Before you run a follow-up request, check that the last response was the approved original you meant.</li>\n<li><strong>Tests:</strong> HTTP status is 200/201/202. When <code>EvertecResponse</code> is present, internal correlation fields (<code>last_reference</code>, <code>trx_id</code>, <code>session_id</code>) are not in it.</li>\n</ul>\n<h2 id=\"related-requests\">Related requests</h2>\n<ul>\n<li><strong>Get Transaction Status</strong> while <code>Completed=false</code></li>\n</ul>\n","urlObject":{"path":["api","v1","transactions"],"host":["https://webtest.chargeanywhere.com/evuapi"],"query":[],"variable":[]}},"response":[{"id":"692ea06d-9f9b-4ede-9fb7-7f62ba4a58ac","name":"200 OK · Approved","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 2,\n  \"transactionType\": 3,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": true,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"originalAmount\": ,\n  \"originalApprovalCode\": \"\",\n  \"originalGatewayReferenceNumber\": \"\",\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"**Scenario:** A contactless Visa Return was approved.\n\n- The Return has its own `GatewayReferenceNumber`, `ApprovalCode` and EMV cryptogram.\n- `amounts` has no `tip` key, and no `ivu` block is returned."},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Cache-Control","value":"no-cache,no-cache, no-store"},{"key":"Pragma","value":"no-cache"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Expires","value":"-1,0"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"X-FRAME-OPTIONS","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"Referrer-Policy","value":"no-referrer-when-downgrade"},{"key":"Content-Security-Policy","value":"default-src data: 'unsafe-inline' 'unsafe-eval' https:; img-src * data:;"},{"key":"Date","value":"Thu, 24 Sep 2026 12:05:33 GMT"},{"key":"Content-Length","value":"2138"}],"cookie":[],"responseTime":null,"body":"{\n    \"RequestId\": \"f18752725aa1411eae61452bffc2f9f9\",\n    \"Status\": \"Approved\",\n    \"Completed\": true,\n    \"ResponseCode\": \"000\",\n    \"ProcessorResponseCode\": \"00\",\n    \"ResponseText\": \"APPROVED.\",\n    \"EvertecResponse\": {\n        \"trace_number\": \"000007\",\n        \"batch_number\": \"2\",\n        \"card_acceptor_id\": \"NONE\",\n        \"special_account\": \"VC\",\n        \"merchant_id\": \"4549000000123\",\n        \"pan_card_number\": \"3005\",\n        \"reference\": \"20\",\n        \"receipt_output\": {\n            \"merchant\": \"<html><body><!-- Receipt HTML shortened for documentation --><p>MERCHANT COPY</p></body></html>\",\n            \"customer\": \"<html><body><!-- Receipt HTML shortened for documentation --><p>CUSTOMER COPY</p></body></html>\"\n        },\n        \"amounts\": {\n            \"total\": \"26.00\",\n            \"base_state_tax\": \"10.00\",\n            \"reduced_tax\": \"3.00\",\n            \"base_reduced_tax\": \"10.00\",\n            \"state_tax\": \"1.00\",\n            \"city_tax\": \"2.00\"\n        },\n        \"authorization_code\": \"124544\",\n        \"emv_data\": {\n            \"84\": \"A0000000031010\",\n            \"95\": \"0000000000\",\n            \"9F12\": \"VISA CREDIT\",\n            \"9B\": \"0000\",\n            \"9F26\": \"AA538A893A805F0A\",\n            \"9F37\": \"683E33C5\"\n        },\n        \"signature_indicator\": \"SIGN\",\n        \"transaction_time\": \"080456\",\n        \"payment_host\": \"ATH1\",\n        \"invoice_number\": \"000940\",\n        \"terminal_id\": \"40000001\",\n        \"merchant_vid\": \"4549000000123\",\n        \"transaction_date\": \"09242026\",\n        \"approval_code\": \"00\",\n        \"cashier_id\": \"1\",\n        \"manual_entry_indicator\": \"no\",\n        \"card_bin_type\": \"VISA\",\n        \"terminal_vid\": \"40000001\",\n        \"station_number\": \"1\",\n        \"response_message\": \"APPROVED.\",\n        \"receipt_email\": \"yes\",\n        \"transaction_type_indicator\": \"C\",\n        \"entry_type\": \"CTLS\",\n        \"fallback\": \"no\"\n    },\n    \"ApprovalCode\": \"124544\",\n    \"GatewayReferenceNumber\": \"000004588682\",\n    \"AuthorizedAmount\": 26,\n    \"TokenNumber\": null,\n    \"CardType\": \"1\",\n    \"StatusUrl\": \"/api/v1/transactions/f18752725aa1411eae61452bffc2f9f9\",\n    \"ErrorId\": null\n}"}],"_postman_id":"38356f00-7832-40f7-84fb-8be223d7c5d3"}],"id":"d4c13768-3d6a-4ae0-935f-3421c601046b","description":"<h1 id=\"cp-·-credit\">CP · Credit</h1>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>paymentType</code></td>\n<td><code>2</code> (Credit)</td>\n</tr>\n<tr>\n<td><code>cardPresent</code></td>\n<td><code>true</code></td>\n</tr>\n<tr>\n<td>Entry modes</td>\n<td>Chip, contactless (<code>CTLS</code>) or manual, as the terminal decides</td>\n</tr>\n<tr>\n<td>Supported operations</td>\n<td>Sale (<code>1</code>), Auth (<code>6</code>), Force (<code>4</code>), Void (<code>2</code>), Return (<code>3</code>)</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p><strong>Debit:</strong> debit cards support the same five operations. Use these requests with <code>\"paymentType\": 6</code>. Debit responses have <code>special_account=AT</code> and <code>transaction_type_indicator=D</code>.</p>\n</blockquote>\n","_postman_id":"d4c13768-3d6a-4ae0-935f-3421c601046b"},{"name":"Cash","item":[{"name":"Sale","event":[{"listen":"test","script":{"type":"text/javascript","exec":["let body = {};","try { body = pm.response.json(); } catch (e) {}","const requestId = body.requestId || body.RequestId;","const gatewayReferenceNumber = body.gatewayReferenceNumber || body.GatewayReferenceNumber;","const authorizedAmount = body.authorizedAmount !== undefined ? body.authorizedAmount : body.AuthorizedAmount;","const errorId = body.errorId || body.ErrorId;","if (requestId) pm.collectionVariables.set('RequestId', requestId);","if (gatewayReferenceNumber) pm.collectionVariables.set('OriginalGatewayReferenceNumber', gatewayReferenceNumber);","if (authorizedAmount !== undefined && authorizedAmount !== null) pm.collectionVariables.set('OriginalAmount', authorizedAmount);","if (errorId) pm.collectionVariables.set('ErrorId', errorId);","pm.test('Transaction request accepted', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });","const originalApprovalCode = body.approvalCode || body.ApprovalCode || (body.data && (body.data.approvalCode || body.data.ApprovalCode));","if (originalApprovalCode) pm.collectionVariables.set('OriginalApprovalCode', originalApprovalCode);","","// App2-only correlation fields are never part of the public EvertecResponse.","const evertecResponse = body.EvertecResponse || body.evertecResponse;","if (evertecResponse && typeof evertecResponse === 'object') {","  pm.test('EvertecResponse suppresses App2-only correlation fields', function () {","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'last_reference')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'trx_id')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'session_id')).to.eql(false);","  });","}"],"id":"7b83db80-b3b9-463e-9724-ade76b73820b"}}],"id":"e384aa49-bca3-4299-8dde-cbbdacfc568f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 5,\n  \"transactionType\": 1,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": true,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"<h1 id=\"cp-cash-sale\">CP Cash Sale</h1>\n<blockquote>\n<p>Authorizes <strong>and</strong> captures a payment in one step.</p>\n</blockquote>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Endpoint</strong></td>\n<td><code>POST https://webtest.chargeanywhere.com/evuapi/api/v1/transactions</code></td>\n</tr>\n<tr>\n<td><strong>Channel</strong></td>\n<td>Card-present (CP) · <code>cardPresent=true</code></td>\n</tr>\n<tr>\n<td><strong>Tender</strong></td>\n<td>Cash (<code>paymentType=5</code>)</td>\n</tr>\n<tr>\n<td><strong>Operation</strong></td>\n<td>Sale (<code>transactionType=1</code>)</td>\n</tr>\n<tr>\n<td><strong>Processing model</strong></td>\n<td><strong>Asynchronous.</strong> The response may be final or not final. If <code>Completed=false</code>, poll <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><strong>Caller</strong></td>\n<td>Merchant or POS application</td>\n</tr>\n<tr>\n<td><strong>Authentication</strong></td>\n<td>Merchant identity headers <code>X-Merchant-Id</code>, <code>X-Terminal-Id</code>, <code>X-Identification</code></td>\n</tr>\n<tr>\n<td><strong>Financial impact</strong></td>\n<td>Money is authorized and queued for settlement in the current batch.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"overview\">Overview</h2>\n<p>Use Sale when goods or services are delivered right away and the final amount is known. Sale is an <strong>originating</strong> transaction, so it has no <code>original*</code> fields.</p>\n<h2 id=\"before-you-call\">Before you call</h2>\n<ul>\n<li>The terminal for <code></code> must be enrolled with EVUAPI, powered on and online.</li>\n<li>Set <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code> and <code></code> in your active environment.</li>\n</ul>\n<h2 id=\"request\">Request</h2>\n<h3 id=\"headers\">Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Required</th>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Content-Type</code></td>\n<td>Yes</td>\n<td><code>application/json</code></td>\n<td>The request body is JSON.</td>\n</tr>\n<tr>\n<td><code>Accept</code></td>\n<td>Recommended</td>\n<td><code>application/json</code></td>\n<td>Asks for a JSON response.</td>\n</tr>\n<tr>\n<td><code>X-Merchant-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant identity. Must match body <code>merchantId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Terminal-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant terminal identity (keep leading zeros). Must match body <code>terminalId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Identification</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Physical terminal identity. Must match body <code>identification</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"body-parameters\">Body parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Value in this request</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>merchantId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant ID that Charge Anywhere issued for this integration. Must be the same as the <code>X-Merchant-Id</code> header.</td>\n</tr>\n<tr>\n<td><code>identification</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Physical terminal / device identity (the same value as the terminal serial number / ManNumber). Must be the same as <code>X-Identification</code>. Identifies the terminal that will process the transaction.</td>\n</tr>\n<tr>\n<td><code>terminalId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant terminal ID. Send it as a <strong>string</strong> and keep leading zeros (e.g. <code>0002</code>). Must be the same as <code>X-Terminal-Id</code>.</td>\n</tr>\n<tr>\n<td><code>terminalDateTime</code></td>\n<td>string (date-time)</td>\n<td>Required</td>\n<td><code>\"2026-08-14T18:30:00\"</code></td>\n<td>Local date/time of the calling system, ISO 8601 with no UTC offset: <code>yyyy-MM-ddTHH:mm:ss</code>. Send the actual time of the request. The value shown is an example.</td>\n</tr>\n<tr>\n<td><code>paymentType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>5</code></td>\n<td>Tender. <code>5</code> = Cash. See <strong>Payment types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>transactionType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>1</code></td>\n<td>Operation. <code>1</code> = Sale. See <strong>Transaction types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>stationNumber</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Station / register number. Returned as a string in <code>EvertecResponse.station_number</code>.</td>\n</tr>\n<tr>\n<td><code>cashierId</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Cashier / clerk ID. Returned in <code>EvertecResponse.cashier_id</code>.</td>\n</tr>\n<tr>\n<td><code>cardPresent</code></td>\n<td>boolean</td>\n<td>Required</td>\n<td><code>true</code></td>\n<td><code>true</code> sends the request down the asynchronous <strong>card-present</strong> path (a push to the terminal).</td>\n</tr>\n<tr>\n<td><code>tokenNumber</code></td>\n<td>string</td>\n<td>Send <code>\"\"</code></td>\n<td><code>\"\"</code></td>\n<td>Not used for card-present; send an empty string. The terminal reads the card or tender.</td>\n</tr>\n<tr>\n<td><code>fullName</code></td>\n<td>string</td>\n<td>Optional</td>\n<td><code>\"John Smith\"</code></td>\n<td>Cardholder / customer display name. Informational only.</td>\n</tr>\n<tr>\n<td><code>amountOfSale</code></td>\n<td>number (2 dp)</td>\n<td>Required</td>\n<td><code>20.00</code></td>\n<td>Base amount before tax, tip, cashback and fee.</td>\n</tr>\n<tr>\n<td><code>tax</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>6.00</code></td>\n<td>Total tax = <code>stateTax + cityTax + reducedTax</code>. The collection pre-request script calculates it.</td>\n</tr>\n<tr>\n<td><code>baseStateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for state and municipal tax.</td>\n</tr>\n<tr>\n<td><code>baseReducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for reduced state tax.</td>\n</tr>\n<tr>\n<td><code>stateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>1.00</code></td>\n<td>State tax amount (tax type: State).</td>\n</tr>\n<tr>\n<td><code>cityTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>2.00</code></td>\n<td>Municipal / city tax amount (tax type: Municipal).</td>\n</tr>\n<tr>\n<td><code>reducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>3.00</code></td>\n<td>Reduced state tax amount (tax type: Reduced state).</td>\n</tr>\n<tr>\n<td><code>subTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>20.00</code></td>\n<td>Equals <code>amountOfSale</code>. The collection script calculates it.</td>\n</tr>\n<tr>\n<td><code>tips</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Tip / gratuity amount.</td>\n</tr>\n<tr>\n<td><code>cashBack</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Cashback amount.</td>\n</tr>\n<tr>\n<td><code>fee</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Extra fee / surcharge amount.</td>\n</tr>\n<tr>\n<td><code>grandTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>26.00</code></td>\n<td><code>subTotal + tax + tips + cashBack + fee</code>. The collection script calculates it. This is the total sent for authorization; it comes back as <code>EvertecResponse.amounts.total</code>.</td>\n</tr>\n<tr>\n<td><code>appVersion</code></td>\n<td>string</td>\n<td>Recommended</td>\n<td><code>\"1.0.0\"</code></td>\n<td>Version of the calling application. Used for support and compatibility tracking.</td>\n</tr>\n<tr>\n<td><code>timeOut</code></td>\n<td>integer (ms)</td>\n<td>Optional</td>\n<td><code>30000</code></td>\n<td>How long, in ms, the HTTP call waits for the terminal's final result. <code>0</code> returns right after the request is saved and dispatched (<code>Completed=false</code>). With a value above 0, EVUAPI returns as soon as the final result arrives, or when the wait runs out. <strong>When the wait runs out, the terminal transaction is not cancelled.</strong></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"business-rules\">Business rules</h3>\n<ul>\n<li><code>tax</code> must equal <code>stateTax + cityTax + reducedTax</code>.</li>\n<li><code>subTotal</code> must equal <code>amountOfSale</code>.</li>\n<li><code>grandTotal</code> must equal <code>subTotal + tax + tips + cashBack + fee</code>.</li>\n<li>Use decimal (not floating-point) math, and round money to 2 decimal places.</li>\n<li>The identity header values must be the same as the body's <code>merchantId</code>, <code>terminalId</code> and <code>identification</code>.</li>\n<li>Originating transaction: <strong>don't</strong> send <code>originalAmount</code>, <code>originalApprovalCode</code> or <code>originalGatewayReferenceNumber</code>.</li>\n<li>Send <code>tokenNumber</code> as an empty string. The terminal reads the card or tender.</li>\n</ul>\n<h2 id=\"response\">Response</h2>\n<h3 id=\"http-status-codes\">HTTP status codes</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>HTTP status</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>200 OK</code></td>\n<td>The request was processed. The body holds the final result (<code>Completed=true</code>).</td>\n</tr>\n<tr>\n<td><code>202 Accepted</code></td>\n<td>The terminal accepted the request, but the result is not final yet (<code>Completed=false</code>). Poll <strong>Get Transaction Status</strong> with <code>RequestId</code>.</td>\n</tr>\n<tr>\n<td><code>4xx</code></td>\n<td>Validation, identity or authorization failure. Fix the request or configuration. <strong>Don't retry it unchanged.</strong></td>\n</tr>\n<tr>\n<td><code>5xx</code></td>\n<td>Service-side failure. Save <code>ErrorId</code> if one is returned. If you have a <code>RequestId</code>, check the status before you consider a retry.</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p><strong>HTTP 200 does not mean approved.</strong> A decline also comes back as <code>200</code> with <code>Status=Declined</code>. Always decide the outcome from <code>Status</code> and <code>Completed</code>.</p>\n</blockquote>\n<h3 id=\"response-body\">Response body</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>RequestId</code></td>\n<td>string</td>\n<td>EVUAPI's ID for this transaction: 32 lowercase hex characters, no hyphens. Save it right away. You need it to get the status and to contact support.</td>\n</tr>\n<tr>\n<td><code>Status</code></td>\n<td>string</td>\n<td>Current lifecycle state. See <strong>Transaction statuses</strong>.</td>\n</tr>\n<tr>\n<td><code>Completed</code></td>\n<td>boolean</td>\n<td><code>true</code> only when <code>Status</code> is final. While it is <code>false</code>, keep polling <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><code>ResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Result code normalized by EVUAPI. See <strong>Response codes</strong>. Keep it as a string (it can have leading zeros). <code>null</code> while not final.</td>\n</tr>\n<tr>\n<td><code>ProcessorResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Raw code from the processor or terminal, such as <code>00</code> or <code>68</code>. An empty string means the processor was never reached.</td>\n</tr>\n<tr>\n<td><code>ResponseText</code></td>\n<td>string (nullable)</td>\n<td>Readable result text from the processor, gateway or EVUAPI. Show it to operators, but don't parse it.</td>\n</tr>\n<tr>\n<td><code>EvertecResponse</code></td>\n<td>object (nullable)</td>\n<td>Processor-specific details. <strong>CNP:</strong> a fixed, ordered shape. <strong>CP:</strong> the terminal's raw final result. <code>null</code> while not final. See the <em>CNP</em> and <em>CP</em> folder docs.</td>\n</tr>\n<tr>\n<td><code>ApprovalCode</code></td>\n<td>string (nullable)</td>\n<td>Processor authorization code, normally 6 characters. It can also be filled in on a <strong>decline</strong>, so never use it alone to decide approval.</td>\n</tr>\n<tr>\n<td><code>GatewayReferenceNumber</code></td>\n<td>string (nullable)</td>\n<td>Charge Anywhere gateway reference: 12 digits, keep the leading zeros. Send it as <code>originalGatewayReferenceNumber</code> on a later Force, Void or Return.</td>\n</tr>\n<tr>\n<td><code>AuthorizedAmount</code></td>\n<td>number (nullable)</td>\n<td>Amount the processor authorized. <code>0</code> on an approved Void. <code>null</code> when nothing was authorized.</td>\n</tr>\n<tr>\n<td><code>TokenNumber</code></td>\n<td>string (nullable)</td>\n<td>CNP: the payment token for the transaction. CP: <code>null</code>. <strong>Sensitive.</strong></td>\n</tr>\n<tr>\n<td><code>CardType</code></td>\n<td>string (nullable)</td>\n<td>Card brand or tender code. See <strong>Card type codes</strong>.</td>\n</tr>\n<tr>\n<td><code>StatusUrl</code></td>\n<td>string</td>\n<td>Relative path of the status resource, e.g. <code>/api/v1/transactions/{RequestId}</code>. Put <code>https://webtest.chargeanywhere.com/evuapi</code> in front and add the three identity query parameters.</td>\n</tr>\n<tr>\n<td><code>ErrorId</code></td>\n<td>string (nullable)</td>\n<td>ID of an error that EVUAPI logged. Give it to Charge Anywhere support.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"evertecresponse\">EvertecResponse</h3>\n<p><code>EvertecResponse</code> is the terminal's <strong>raw</strong> final result, with internal correlation fields removed. It is not normalized, so treat <strong>every property as optional</strong>. The dictionary is in the <strong>CP</strong> folder documentation.</p>\n<p>For Cash: <code>card_bin_type=CASH_CARD</code>, <code>special_account=IC</code>, <code>transaction_type_indicator=I</code>, <code>CardType=999</code>. <code>pan_card_number</code> is a tender identifier, not a card number.</p>\n<h3 id=\"how-to-interpret-the-result\">How to interpret the result</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Completed</th>\n<th>Status</th>\n<th>What to do</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>true</code></td>\n<td><code>Approved</code></td>\n<td>Success. Save <code>RequestId</code>, <code>GatewayReferenceNumber</code>, <code>ApprovalCode</code>, <code>AuthorizedAmount</code> and the receipts.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Declined</code></td>\n<td>Not approved. Show <code>ResponseText</code>. Don't retry unchanged.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Failed</code> / <code>TimedOut</code> / <code>Cancelled</code></td>\n<td>Not approved. Record the result. Only start a new transaction after you confirm with the customer.</td>\n</tr>\n<tr>\n<td><code>false</code></td>\n<td><code>Pending</code> / <code>SentToTerminal</code> / <code>ReceivedByTerminal</code> / <code>Processing</code></td>\n<td>Not final. Poll <strong>Get Transaction Status</strong>. <strong>Never</strong> send a second transaction just because the first one is still pending.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"error-handling\">Error handling</h2>\n<ul>\n<li><strong>Network timeout or no response:</strong> Don't resend the POST automatically. If you got a <code>RequestId</code>, call <strong>Get Transaction Status</strong>. If you didn't, reconcile with your invoice/order reference before you try again.</li>\n<li><strong><code>4xx</code>:</strong> Check the identity headers against the body, the <code>paymentType</code> / <code>transactionType</code> combination, the amount math, and the required fields.</li>\n<li><strong><code>5xx</code>:</strong> Save <code>ErrorId</code> and <code>RequestId</code> (if you have them) and contact support. Check the status before you retry.</li>\n</ul>\n<h2 id=\"testing-in-postman\">Testing in Postman</h2>\n<ul>\n<li><strong>Reads:</strong> <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code>, <code></code>, <code>1</code>, <code>1</code>, <code>1.0.0</code> and the amount variables. The collection pre-request script recalculates <code>SubTotal</code>, <code>Tax</code> and <code>GrandTotal</code>.</li>\n<li><strong>Writes (test script):</strong> <code>RequestId</code>, <code>OriginalGatewayReferenceNumber</code> (from <code>GatewayReferenceNumber</code>), <code>OriginalAmount</code> (from <code>AuthorizedAmount</code>), <code>OriginalApprovalCode</code> (from <code>ApprovalCode</code>) and <code>ErrorId</code>, <strong>whenever these are in the response</strong>.</li>\n<li>⚠️ Values are saved even when the transaction is <strong>declined</strong>. Before you run a follow-up request, check that the last response was the approved original you meant.</li>\n<li><strong>Tests:</strong> HTTP status is 200/201/202. When <code>EvertecResponse</code> is present, internal correlation fields (<code>last_reference</code>, <code>trx_id</code>, <code>session_id</code>) are not in it.</li>\n</ul>\n<h2 id=\"related-requests\">Related requests</h2>\n<ul>\n<li><strong>Get Transaction Status</strong> while <code>Completed=false</code></li>\n<li><strong>Void</strong> / <strong>Return</strong> in the same tender folder</li>\n</ul>\n","urlObject":{"path":["api","v1","transactions"],"host":["https://webtest.chargeanywhere.com/evuapi"],"query":[],"variable":[]}},"response":[{"id":"8528a06c-6555-4bfc-b9b1-3127f7222ac9","name":"200 OK · Approved","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 5,\n  \"transactionType\": 1,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": true,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"**Scenario:** A Cash Sale was recorded through the terminal.\n\n- `CardType=999`, `card_bin_type=CASH_CARD`, `special_account=IC`, `transaction_type_indicator=I`.\n- `pan_card_number` (`690F`) is a tender identifier, not a card number. There's no `emv_data`.\n- IVU control lines are returned for the receipt."},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Cache-Control","value":"no-cache,no-cache, no-store"},{"key":"Pragma","value":"no-cache"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Expires","value":"-1,0"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"X-FRAME-OPTIONS","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"Referrer-Policy","value":"no-referrer-when-downgrade"},{"key":"Content-Security-Policy","value":"default-src data: 'unsafe-inline' 'unsafe-eval' https:; img-src * data:;"},{"key":"Date","value":"Thu, 24 Sep 2026 12:06:24 GMT"},{"key":"Content-Length","value":"1933"}],"cookie":[],"responseTime":null,"body":"{\n    \"RequestId\": \"fe705f7c435c4b05b0e527b5ab6eb199\",\n    \"Status\": \"Approved\",\n    \"Completed\": true,\n    \"ResponseCode\": \"000\",\n    \"ProcessorResponseCode\": \"00\",\n    \"ResponseText\": \"APPROVED.\",\n    \"EvertecResponse\": {\n        \"trace_number\": \"000008\",\n        \"batch_number\": \"2\",\n        \"card_acceptor_id\": \"NONE\",\n        \"special_account\": \"IC\",\n        \"merchant_id\": \"4549000000123\",\n        \"pan_card_number\": \"690F\",\n        \"reference\": \"26\",\n        \"receipt_output\": {\n            \"merchant\": \"<html><body><!-- Receipt HTML shortened for documentation --><p>MERCHANT COPY</p></body></html>\",\n            \"customer\": \"<html><body><!-- Receipt HTML shortened for documentation --><p>CUSTOMER COPY</p></body></html>\"\n        },\n        \"amounts\": {\n            \"total\": \"26.00\",\n            \"base_state_tax\": \"10.00\",\n            \"tip\": \"0.00\",\n            \"reduced_tax\": \"3.00\",\n            \"base_reduced_tax\": \"10.00\",\n            \"state_tax\": \"1.00\",\n            \"city_tax\": \"2.00\"\n        },\n        \"authorization_code\": \"997841\",\n        \"signature_indicator\": \"NOSIGN\",\n        \"transaction_time\": \"080553\",\n        \"payment_host\": \"ATH1\",\n        \"invoice_number\": \"000941\",\n        \"terminal_id\": \"40000001\",\n        \"transaction_date\": \"09242026\",\n        \"approval_code\": \"00\",\n        \"cashier_id\": \"1\",\n        \"ivu\": {\n            \"control_line1\": \"CONTROL: CXZ13-3R2VA\",\n            \"control_line2\": \"ET                  \"\n        },\n        \"card_bin_type\": \"CASH_CARD\",\n        \"station_number\": \"1\",\n        \"response_message\": \"APPROVED.\",\n        \"receipt_email\": \"yes\",\n        \"transaction_type_indicator\": \"I\",\n        \"entry_type\": \"MANUAL\"\n    },\n    \"ApprovalCode\": \"997841\",\n    \"GatewayReferenceNumber\": \"000004588687\",\n    \"AuthorizedAmount\": 26,\n    \"TokenNumber\": null,\n    \"CardType\": \"999\",\n    \"StatusUrl\": \"/api/v1/transactions/fe705f7c435c4b05b0e527b5ab6eb199\",\n    \"ErrorId\": null\n}"}],"_postman_id":"e384aa49-bca3-4299-8dde-cbbdacfc568f"},{"name":"Return","event":[{"listen":"test","script":{"type":"text/javascript","exec":["let body = {};","try { body = pm.response.json(); } catch (e) {}","const requestId = body.requestId || body.RequestId;","const gatewayReferenceNumber = body.gatewayReferenceNumber || body.GatewayReferenceNumber;","const authorizedAmount = body.authorizedAmount !== undefined ? body.authorizedAmount : body.AuthorizedAmount;","const errorId = body.errorId || body.ErrorId;","if (requestId) pm.collectionVariables.set('RequestId', requestId);","if (gatewayReferenceNumber) pm.collectionVariables.set('OriginalGatewayReferenceNumber', gatewayReferenceNumber);","if (authorizedAmount !== undefined && authorizedAmount !== null) pm.collectionVariables.set('OriginalAmount', authorizedAmount);","if (errorId) pm.collectionVariables.set('ErrorId', errorId);","pm.test('Transaction request accepted', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });","const originalApprovalCode = body.approvalCode || body.ApprovalCode || (body.data && (body.data.approvalCode || body.data.ApprovalCode));","if (originalApprovalCode) pm.collectionVariables.set('OriginalApprovalCode', originalApprovalCode);","","// App2-only correlation fields are never part of the public EvertecResponse.","const evertecResponse = body.EvertecResponse || body.evertecResponse;","if (evertecResponse && typeof evertecResponse === 'object') {","  pm.test('EvertecResponse suppresses App2-only correlation fields', function () {","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'last_reference')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'trx_id')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'session_id')).to.eql(false);","  });","}"],"id":"4faf0516-542c-45b3-87f3-bc09b8c6123b"}}],"id":"08c37b9b-8a90-498c-9834-a36c3a724346","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 5,\n  \"transactionType\": 3,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": true,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"originalAmount\": ,\n  \"originalApprovalCode\": \"\",\n  \"originalGatewayReferenceNumber\": \"\",\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"<h1 id=\"cp-cash-return\">CP Cash Return</h1>\n<blockquote>\n<p>Refunds money to the customer.</p>\n</blockquote>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Endpoint</strong></td>\n<td><code>POST https://webtest.chargeanywhere.com/evuapi/api/v1/transactions</code></td>\n</tr>\n<tr>\n<td><strong>Channel</strong></td>\n<td>Card-present (CP) · <code>cardPresent=true</code></td>\n</tr>\n<tr>\n<td><strong>Tender</strong></td>\n<td>Cash (<code>paymentType=5</code>)</td>\n</tr>\n<tr>\n<td><strong>Operation</strong></td>\n<td>Return (<code>transactionType=3</code>)</td>\n</tr>\n<tr>\n<td><strong>Processing model</strong></td>\n<td><strong>Asynchronous.</strong> The response may be final or not final. If <code>Completed=false</code>, poll <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><strong>Caller</strong></td>\n<td>Merchant or POS application</td>\n</tr>\n<tr>\n<td><strong>Authentication</strong></td>\n<td>Merchant identity headers <code>X-Merchant-Id</code>, <code>X-Terminal-Id</code>, <code>X-Identification</code></td>\n</tr>\n<tr>\n<td><strong>Financial impact</strong></td>\n<td>Money is returned to the customer and the refund is queued for settlement.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"overview\">Overview</h2>\n<p>Use Return to refund an earlier purchase, usually after settlement. For a <strong>linked</strong> Return, send the original transaction's <code>original*</code> fields, as this collection does.</p>\n<h2 id=\"before-you-call\">Before you call</h2>\n<ul>\n<li>The terminal for <code></code> must be enrolled with EVUAPI, powered on and online.</li>\n<li>For a linked Return, run the original <strong>Sale</strong> (or <strong>Force</strong>) first so the <code>Original*</code> variables are filled in.</li>\n<li>Set <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code> and <code></code> in your active environment.</li>\n</ul>\n<h2 id=\"request\">Request</h2>\n<h3 id=\"headers\">Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Required</th>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Content-Type</code></td>\n<td>Yes</td>\n<td><code>application/json</code></td>\n<td>The request body is JSON.</td>\n</tr>\n<tr>\n<td><code>Accept</code></td>\n<td>Recommended</td>\n<td><code>application/json</code></td>\n<td>Asks for a JSON response.</td>\n</tr>\n<tr>\n<td><code>X-Merchant-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant identity. Must match body <code>merchantId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Terminal-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant terminal identity (keep leading zeros). Must match body <code>terminalId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Identification</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Physical terminal identity. Must match body <code>identification</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"body-parameters\">Body parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Value in this request</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>merchantId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant ID that Charge Anywhere issued for this integration. Must be the same as the <code>X-Merchant-Id</code> header.</td>\n</tr>\n<tr>\n<td><code>identification</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Physical terminal / device identity (the same value as the terminal serial number / ManNumber). Must be the same as <code>X-Identification</code>. Identifies the terminal that will process the transaction.</td>\n</tr>\n<tr>\n<td><code>terminalId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant terminal ID. Send it as a <strong>string</strong> and keep leading zeros (e.g. <code>0002</code>). Must be the same as <code>X-Terminal-Id</code>.</td>\n</tr>\n<tr>\n<td><code>terminalDateTime</code></td>\n<td>string (date-time)</td>\n<td>Required</td>\n<td><code>\"2026-08-14T18:30:00\"</code></td>\n<td>Local date/time of the calling system, ISO 8601 with no UTC offset: <code>yyyy-MM-ddTHH:mm:ss</code>. Send the actual time of the request. The value shown is an example.</td>\n</tr>\n<tr>\n<td><code>paymentType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>5</code></td>\n<td>Tender. <code>5</code> = Cash. See <strong>Payment types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>transactionType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>3</code></td>\n<td>Operation. <code>3</code> = Return. See <strong>Transaction types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>stationNumber</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Station / register number. Returned as a string in <code>EvertecResponse.station_number</code>.</td>\n</tr>\n<tr>\n<td><code>cashierId</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Cashier / clerk ID. Returned in <code>EvertecResponse.cashier_id</code>.</td>\n</tr>\n<tr>\n<td><code>cardPresent</code></td>\n<td>boolean</td>\n<td>Required</td>\n<td><code>true</code></td>\n<td><code>true</code> sends the request down the asynchronous <strong>card-present</strong> path (a push to the terminal).</td>\n</tr>\n<tr>\n<td><code>tokenNumber</code></td>\n<td>string</td>\n<td>Send <code>\"\"</code></td>\n<td><code>\"\"</code></td>\n<td>Not used for card-present; send an empty string. The terminal reads the card or tender.</td>\n</tr>\n<tr>\n<td><code>fullName</code></td>\n<td>string</td>\n<td>Optional</td>\n<td><code>\"John Smith\"</code></td>\n<td>Cardholder / customer display name. Informational only.</td>\n</tr>\n<tr>\n<td><code>amountOfSale</code></td>\n<td>number (2 dp)</td>\n<td>Required</td>\n<td><code>20.00</code></td>\n<td>Base amount before tax, tip, cashback and fee.</td>\n</tr>\n<tr>\n<td><code>tax</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>6.00</code></td>\n<td>Total tax = <code>stateTax + cityTax + reducedTax</code>. The collection pre-request script calculates it.</td>\n</tr>\n<tr>\n<td><code>baseStateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for state and municipal tax.</td>\n</tr>\n<tr>\n<td><code>baseReducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for reduced state tax.</td>\n</tr>\n<tr>\n<td><code>stateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>1.00</code></td>\n<td>State tax amount (tax type: State).</td>\n</tr>\n<tr>\n<td><code>cityTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>2.00</code></td>\n<td>Municipal / city tax amount (tax type: Municipal).</td>\n</tr>\n<tr>\n<td><code>reducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>3.00</code></td>\n<td>Reduced state tax amount (tax type: Reduced state).</td>\n</tr>\n<tr>\n<td><code>subTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>20.00</code></td>\n<td>Equals <code>amountOfSale</code>. The collection script calculates it.</td>\n</tr>\n<tr>\n<td><code>tips</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Tip / gratuity amount.</td>\n</tr>\n<tr>\n<td><code>cashBack</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Cashback amount.</td>\n</tr>\n<tr>\n<td><code>fee</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Extra fee / surcharge amount.</td>\n</tr>\n<tr>\n<td><code>grandTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>26.00</code></td>\n<td><code>subTotal + tax + tips + cashBack + fee</code>. The collection script calculates it. This is the total sent for authorization; it comes back as <code>EvertecResponse.amounts.total</code>.</td>\n</tr>\n<tr>\n<td><code>originalAmount</code></td>\n<td>number</td>\n<td>Conditional (linked Return)</td>\n<td><code></code></td>\n<td>Amount of the original transaction, normally its <code>AuthorizedAmount</code>. Postman saves it as <code></code>.</td>\n</tr>\n<tr>\n<td><code>originalApprovalCode</code></td>\n<td>string</td>\n<td>Conditional (linked Return)</td>\n<td><code>\"\"</code></td>\n<td><code>ApprovalCode</code> returned by the original transaction. Postman saves it as <code></code>.</td>\n</tr>\n<tr>\n<td><code>originalGatewayReferenceNumber</code></td>\n<td>string</td>\n<td>Conditional (linked Return)</td>\n<td><code>\"\"</code></td>\n<td><code>GatewayReferenceNumber</code> of the original transaction (12 digits, keep leading zeros).</td>\n</tr>\n<tr>\n<td><code>appVersion</code></td>\n<td>string</td>\n<td>Recommended</td>\n<td><code>\"1.0.0\"</code></td>\n<td>Version of the calling application. Used for support and compatibility tracking.</td>\n</tr>\n<tr>\n<td><code>timeOut</code></td>\n<td>integer (ms)</td>\n<td>Optional</td>\n<td><code>30000</code></td>\n<td>How long, in ms, the HTTP call waits for the terminal's final result. <code>0</code> returns right after the request is saved and dispatched (<code>Completed=false</code>). With a value above 0, EVUAPI returns as soon as the final result arrives, or when the wait runs out. <strong>When the wait runs out, the terminal transaction is not cancelled.</strong></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"business-rules\">Business rules</h3>\n<ul>\n<li><code>tax</code> must equal <code>stateTax + cityTax + reducedTax</code>.</li>\n<li><code>subTotal</code> must equal <code>amountOfSale</code>.</li>\n<li><code>grandTotal</code> must equal <code>subTotal + tax + tips + cashBack + fee</code>.</li>\n<li>Use decimal (not floating-point) math, and round money to 2 decimal places.</li>\n<li>The identity header values must be the same as the body's <code>merchantId</code>, <code>terminalId</code> and <code>identification</code>.</li>\n<li>For a linked Return, send the <code>original*</code> values of the purchase being refunded.</li>\n<li>Send <code>tokenNumber</code> as an empty string. The terminal reads the card or tender.</li>\n</ul>\n<h2 id=\"response\">Response</h2>\n<h3 id=\"http-status-codes\">HTTP status codes</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>HTTP status</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>200 OK</code></td>\n<td>The request was processed. The body holds the final result (<code>Completed=true</code>).</td>\n</tr>\n<tr>\n<td><code>202 Accepted</code></td>\n<td>The terminal accepted the request, but the result is not final yet (<code>Completed=false</code>). Poll <strong>Get Transaction Status</strong> with <code>RequestId</code>.</td>\n</tr>\n<tr>\n<td><code>4xx</code></td>\n<td>Validation, identity or authorization failure. Fix the request or configuration. <strong>Don't retry it unchanged.</strong></td>\n</tr>\n<tr>\n<td><code>5xx</code></td>\n<td>Service-side failure. Save <code>ErrorId</code> if one is returned. If you have a <code>RequestId</code>, check the status before you consider a retry.</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p><strong>HTTP 200 does not mean approved.</strong> A decline also comes back as <code>200</code> with <code>Status=Declined</code>. Always decide the outcome from <code>Status</code> and <code>Completed</code>.</p>\n</blockquote>\n<h3 id=\"response-body\">Response body</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>RequestId</code></td>\n<td>string</td>\n<td>EVUAPI's ID for this transaction: 32 lowercase hex characters, no hyphens. Save it right away. You need it to get the status and to contact support.</td>\n</tr>\n<tr>\n<td><code>Status</code></td>\n<td>string</td>\n<td>Current lifecycle state. See <strong>Transaction statuses</strong>.</td>\n</tr>\n<tr>\n<td><code>Completed</code></td>\n<td>boolean</td>\n<td><code>true</code> only when <code>Status</code> is final. While it is <code>false</code>, keep polling <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><code>ResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Result code normalized by EVUAPI. See <strong>Response codes</strong>. Keep it as a string (it can have leading zeros). <code>null</code> while not final.</td>\n</tr>\n<tr>\n<td><code>ProcessorResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Raw code from the processor or terminal, such as <code>00</code> or <code>68</code>. An empty string means the processor was never reached.</td>\n</tr>\n<tr>\n<td><code>ResponseText</code></td>\n<td>string (nullable)</td>\n<td>Readable result text from the processor, gateway or EVUAPI. Show it to operators, but don't parse it.</td>\n</tr>\n<tr>\n<td><code>EvertecResponse</code></td>\n<td>object (nullable)</td>\n<td>Processor-specific details. <strong>CNP:</strong> a fixed, ordered shape. <strong>CP:</strong> the terminal's raw final result. <code>null</code> while not final. See the <em>CNP</em> and <em>CP</em> folder docs.</td>\n</tr>\n<tr>\n<td><code>ApprovalCode</code></td>\n<td>string (nullable)</td>\n<td>Processor authorization code, normally 6 characters. It can also be filled in on a <strong>decline</strong>, so never use it alone to decide approval.</td>\n</tr>\n<tr>\n<td><code>GatewayReferenceNumber</code></td>\n<td>string (nullable)</td>\n<td>Charge Anywhere gateway reference: 12 digits, keep the leading zeros. Send it as <code>originalGatewayReferenceNumber</code> on a later Force, Void or Return.</td>\n</tr>\n<tr>\n<td><code>AuthorizedAmount</code></td>\n<td>number (nullable)</td>\n<td>Amount the processor authorized. <code>0</code> on an approved Void. <code>null</code> when nothing was authorized.</td>\n</tr>\n<tr>\n<td><code>TokenNumber</code></td>\n<td>string (nullable)</td>\n<td>CNP: the payment token for the transaction. CP: <code>null</code>. <strong>Sensitive.</strong></td>\n</tr>\n<tr>\n<td><code>CardType</code></td>\n<td>string (nullable)</td>\n<td>Card brand or tender code. See <strong>Card type codes</strong>.</td>\n</tr>\n<tr>\n<td><code>StatusUrl</code></td>\n<td>string</td>\n<td>Relative path of the status resource, e.g. <code>/api/v1/transactions/{RequestId}</code>. Put <code>https://webtest.chargeanywhere.com/evuapi</code> in front and add the three identity query parameters.</td>\n</tr>\n<tr>\n<td><code>ErrorId</code></td>\n<td>string (nullable)</td>\n<td>ID of an error that EVUAPI logged. Give it to Charge Anywhere support.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"evertecresponse\">EvertecResponse</h3>\n<p><code>EvertecResponse</code> is the terminal's <strong>raw</strong> final result, with internal correlation fields removed. It is not normalized, so treat <strong>every property as optional</strong>. The dictionary is in the <strong>CP</strong> folder documentation.</p>\n<p>For Cash: <code>card_bin_type=CASH_CARD</code>, <code>special_account=IC</code>, <code>transaction_type_indicator=I</code>, <code>CardType=999</code>. <code>pan_card_number</code> is a tender identifier, not a card number.</p>\n<h3 id=\"how-to-interpret-the-result\">How to interpret the result</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Completed</th>\n<th>Status</th>\n<th>What to do</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>true</code></td>\n<td><code>Approved</code></td>\n<td>Success. Save <code>RequestId</code>, <code>GatewayReferenceNumber</code>, <code>ApprovalCode</code>, <code>AuthorizedAmount</code> and the receipts.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Declined</code></td>\n<td>Not approved. Show <code>ResponseText</code>. Don't retry unchanged.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Failed</code> / <code>TimedOut</code> / <code>Cancelled</code></td>\n<td>Not approved. Record the result. Only start a new transaction after you confirm with the customer.</td>\n</tr>\n<tr>\n<td><code>false</code></td>\n<td><code>Pending</code> / <code>SentToTerminal</code> / <code>ReceivedByTerminal</code> / <code>Processing</code></td>\n<td>Not final. Poll <strong>Get Transaction Status</strong>. <strong>Never</strong> send a second transaction just because the first one is still pending.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"error-handling\">Error handling</h2>\n<ul>\n<li><strong>Network timeout or no response:</strong> Don't resend the POST automatically. If you got a <code>RequestId</code>, call <strong>Get Transaction Status</strong>. If you didn't, reconcile with your invoice/order reference before you try again.</li>\n<li><strong><code>4xx</code>:</strong> Check the identity headers against the body, the <code>paymentType</code> / <code>transactionType</code> combination, the amount math, and the <code>original*</code> values.</li>\n<li><strong><code>5xx</code>:</strong> Save <code>ErrorId</code> and <code>RequestId</code> (if you have them) and contact support. Check the status before you retry.</li>\n</ul>\n<h2 id=\"testing-in-postman\">Testing in Postman</h2>\n<ul>\n<li><strong>Reads:</strong> <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code>, <code></code>, <code>1</code>, <code>1</code>, <code>1.0.0</code> and the amount variables. The collection pre-request script recalculates <code>SubTotal</code>, <code>Tax</code> and <code>GrandTotal</code>.</li>\n<li><strong>Writes (test script):</strong> <code>RequestId</code>, <code>OriginalGatewayReferenceNumber</code> (from <code>GatewayReferenceNumber</code>), <code>OriginalAmount</code> (from <code>AuthorizedAmount</code>), <code>OriginalApprovalCode</code> (from <code>ApprovalCode</code>) and <code>ErrorId</code>, <strong>whenever these are in the response</strong>.</li>\n<li>⚠️ Values are saved even when the transaction is <strong>declined</strong>. Before you run a follow-up request, check that the last response was the approved original you meant.</li>\n<li><strong>Tests:</strong> HTTP status is 200/201/202. When <code>EvertecResponse</code> is present, internal correlation fields (<code>last_reference</code>, <code>trx_id</code>, <code>session_id</code>) are not in it.</li>\n</ul>\n<h2 id=\"related-requests\">Related requests</h2>\n<ul>\n<li><strong>Get Transaction Status</strong> while <code>Completed=false</code></li>\n</ul>\n","urlObject":{"path":["api","v1","transactions"],"host":["https://webtest.chargeanywhere.com/evuapi"],"query":[],"variable":[]}},"response":[{"id":"a8f5945e-92b8-4df7-a23c-3eccb2d27136","name":"200 OK · Approved","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 5,\n  \"transactionType\": 3,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": true,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"originalAmount\": ,\n  \"originalApprovalCode\": \"\",\n  \"originalGatewayReferenceNumber\": \"\",\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"**Scenario:** A Cash Return was recorded through the terminal.\n\n- Same tender markers as the Cash Sale (`CardType=999`, `I`, `IC`)."},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Cache-Control","value":"no-cache,no-cache, no-store"},{"key":"Pragma","value":"no-cache"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Expires","value":"-1,0"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"X-FRAME-OPTIONS","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"Referrer-Policy","value":"no-referrer-when-downgrade"},{"key":"Content-Security-Policy","value":"default-src data: 'unsafe-inline' 'unsafe-eval' https:; img-src * data:;"},{"key":"Date","value":"Thu, 24 Sep 2026 12:06:41 GMT"},{"key":"Content-Length","value":"1773"}],"cookie":[],"responseTime":null,"body":"{\n    \"RequestId\": \"5b32bee24a874d4a9bccb8c8a56f2f82\",\n    \"Status\": \"Approved\",\n    \"Completed\": true,\n    \"ResponseCode\": \"000\",\n    \"ProcessorResponseCode\": \"00\",\n    \"ResponseText\": \"APPROVED.\",\n    \"EvertecResponse\": {\n        \"trace_number\": \"000009\",\n        \"batch_number\": \"2\",\n        \"card_acceptor_id\": \"NONE\",\n        \"special_account\": \"IC\",\n        \"merchant_id\": \"4549000000123\",\n        \"pan_card_number\": \"690F\",\n        \"reference\": \"29\",\n        \"receipt_output\": {\n            \"merchant\": \"<html><body><!-- Receipt HTML shortened for documentation --><p>MERCHANT COPY</p></body></html>\",\n            \"customer\": \"<html><body><!-- Receipt HTML shortened for documentation --><p>CUSTOMER COPY</p></body></html>\"\n        },\n        \"amounts\": {\n            \"total\": \"26.00\",\n            \"base_state_tax\": \"10.00\",\n            \"reduced_tax\": \"3.00\",\n            \"base_reduced_tax\": \"10.00\",\n            \"state_tax\": \"1.00\",\n            \"city_tax\": \"2.00\"\n        },\n        \"authorization_code\": \"147057\",\n        \"signature_indicator\": \"NOSIGN\",\n        \"transaction_time\": \"080610\",\n        \"payment_host\": \"ATH1\",\n        \"invoice_number\": \"000942\",\n        \"terminal_id\": \"40000001\",\n        \"transaction_date\": \"09242026\",\n        \"approval_code\": \"00\",\n        \"cashier_id\": \"1\",\n        \"card_bin_type\": \"CASH_CARD\",\n        \"station_number\": \"1\",\n        \"response_message\": \"APPROVED.\",\n        \"receipt_email\": \"yes\",\n        \"transaction_type_indicator\": \"I\",\n        \"entry_type\": \"MANUAL\"\n    },\n    \"ApprovalCode\": \"147057\",\n    \"GatewayReferenceNumber\": \"000004588689\",\n    \"AuthorizedAmount\": 26,\n    \"TokenNumber\": null,\n    \"CardType\": \"999\",\n    \"StatusUrl\": \"/api/v1/transactions/5b32bee24a874d4a9bccb8c8a56f2f82\",\n    \"ErrorId\": null\n}"}],"_postman_id":"08c37b9b-8a90-498c-9834-a36c3a724346"}],"id":"b81f63c5-4588-41fc-aa52-b383b514671a","description":"<h1 id=\"cp-·-cash\">CP · Cash</h1>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>paymentType</code></td>\n<td><code>5</code> (Cash)</td>\n</tr>\n<tr>\n<td><code>cardPresent</code></td>\n<td><code>true</code></td>\n</tr>\n<tr>\n<td>Supported operations</td>\n<td>Sale (<code>1</code>), Return (<code>3</code>)</td>\n</tr>\n<tr>\n<td>Response markers</td>\n<td><code>CardType=999</code>, <code>card_bin_type=CASH_CARD</code>, <code>special_account=IC</code>, <code>transaction_type_indicator=I</code></td>\n</tr>\n</tbody>\n</table>\n</div><p>Cash goes through the terminal so that it is recorded in the terminal batch and gets IVU control lines and a receipt. No card is read.</p>\n","_postman_id":"b81f63c5-4588-41fc-aa52-b383b514671a"},{"name":"ATH Movil","item":[{"name":"Sale","event":[{"listen":"test","script":{"type":"text/javascript","exec":["let body = {};","try { body = pm.response.json(); } catch (e) {}","const requestId = body.requestId || body.RequestId;","const gatewayReferenceNumber = body.gatewayReferenceNumber || body.GatewayReferenceNumber;","const authorizedAmount = body.authorizedAmount !== undefined ? body.authorizedAmount : body.AuthorizedAmount;","const errorId = body.errorId || body.ErrorId;","if (requestId) pm.collectionVariables.set('RequestId', requestId);","if (gatewayReferenceNumber) pm.collectionVariables.set('OriginalGatewayReferenceNumber', gatewayReferenceNumber);","if (authorizedAmount !== undefined && authorizedAmount !== null) pm.collectionVariables.set('OriginalAmount', authorizedAmount);","if (errorId) pm.collectionVariables.set('ErrorId', errorId);","pm.test('Transaction request accepted', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });","const originalApprovalCode = body.approvalCode || body.ApprovalCode || (body.data && (body.data.approvalCode || body.data.ApprovalCode));","if (originalApprovalCode) pm.collectionVariables.set('OriginalApprovalCode', originalApprovalCode);","","// App2-only correlation fields are never part of the public EvertecResponse.","const evertecResponse = body.EvertecResponse || body.evertecResponse;","if (evertecResponse && typeof evertecResponse === 'object') {","  pm.test('EvertecResponse suppresses App2-only correlation fields', function () {","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'last_reference')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'trx_id')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'session_id')).to.eql(false);","  });","}"],"id":"415069e8-fb1b-4d60-907c-68c3a7c045dc"}}],"id":"d82e0116-dbac-4e2c-9128-3c336f287b37","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 13,\n  \"transactionType\": 1,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": true,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"<h1 id=\"cp-ath-móvil-sale\">CP ATH Móvil Sale</h1>\n<blockquote>\n<p>Authorizes <strong>and</strong> captures a payment in one step.</p>\n</blockquote>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Endpoint</strong></td>\n<td><code>POST https://webtest.chargeanywhere.com/evuapi/api/v1/transactions</code></td>\n</tr>\n<tr>\n<td><strong>Channel</strong></td>\n<td>Card-present (CP) · <code>cardPresent=true</code></td>\n</tr>\n<tr>\n<td><strong>Tender</strong></td>\n<td>ATH Móvil (<code>paymentType=13</code>)</td>\n</tr>\n<tr>\n<td><strong>Operation</strong></td>\n<td>Sale (<code>transactionType=1</code>)</td>\n</tr>\n<tr>\n<td><strong>Processing model</strong></td>\n<td><strong>Asynchronous.</strong> The response may be final or not final. If <code>Completed=false</code>, poll <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><strong>Caller</strong></td>\n<td>Merchant or POS application</td>\n</tr>\n<tr>\n<td><strong>Authentication</strong></td>\n<td>Merchant identity headers <code>X-Merchant-Id</code>, <code>X-Terminal-Id</code>, <code>X-Identification</code></td>\n</tr>\n<tr>\n<td><strong>Financial impact</strong></td>\n<td>Money is authorized and queued for settlement in the current batch.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"overview\">Overview</h2>\n<p>Use Sale when goods or services are delivered right away and the final amount is known. Sale is an <strong>originating</strong> transaction, so it has no <code>original*</code> fields.</p>\n<h2 id=\"before-you-call\">Before you call</h2>\n<ul>\n<li>The terminal for <code></code> must be enrolled with EVUAPI, powered on and online.</li>\n<li>Set <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code> and <code></code> in your active environment.</li>\n</ul>\n<h2 id=\"request\">Request</h2>\n<h3 id=\"headers\">Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Required</th>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Content-Type</code></td>\n<td>Yes</td>\n<td><code>application/json</code></td>\n<td>The request body is JSON.</td>\n</tr>\n<tr>\n<td><code>Accept</code></td>\n<td>Recommended</td>\n<td><code>application/json</code></td>\n<td>Asks for a JSON response.</td>\n</tr>\n<tr>\n<td><code>X-Merchant-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant identity. Must match body <code>merchantId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Terminal-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant terminal identity (keep leading zeros). Must match body <code>terminalId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Identification</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Physical terminal identity. Must match body <code>identification</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"body-parameters\">Body parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Value in this request</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>merchantId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant ID that Charge Anywhere issued for this integration. Must be the same as the <code>X-Merchant-Id</code> header.</td>\n</tr>\n<tr>\n<td><code>identification</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Physical terminal / device identity (the same value as the terminal serial number / ManNumber). Must be the same as <code>X-Identification</code>. Identifies the terminal that will process the transaction.</td>\n</tr>\n<tr>\n<td><code>terminalId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant terminal ID. Send it as a <strong>string</strong> and keep leading zeros (e.g. <code>0002</code>). Must be the same as <code>X-Terminal-Id</code>.</td>\n</tr>\n<tr>\n<td><code>terminalDateTime</code></td>\n<td>string (date-time)</td>\n<td>Required</td>\n<td><code>\"2026-08-14T18:30:00\"</code></td>\n<td>Local date/time of the calling system, ISO 8601 with no UTC offset: <code>yyyy-MM-ddTHH:mm:ss</code>. Send the actual time of the request. The value shown is an example.</td>\n</tr>\n<tr>\n<td><code>paymentType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>13</code></td>\n<td>Tender. <code>13</code> = ATH Móvil. See <strong>Payment types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>transactionType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>1</code></td>\n<td>Operation. <code>1</code> = Sale. See <strong>Transaction types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>stationNumber</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Station / register number. Returned as a string in <code>EvertecResponse.station_number</code>.</td>\n</tr>\n<tr>\n<td><code>cashierId</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Cashier / clerk ID. Returned in <code>EvertecResponse.cashier_id</code>.</td>\n</tr>\n<tr>\n<td><code>cardPresent</code></td>\n<td>boolean</td>\n<td>Required</td>\n<td><code>true</code></td>\n<td><code>true</code> sends the request down the asynchronous <strong>card-present</strong> path (a push to the terminal).</td>\n</tr>\n<tr>\n<td><code>tokenNumber</code></td>\n<td>string</td>\n<td>Send <code>\"\"</code></td>\n<td><code>\"\"</code></td>\n<td>Not used for card-present; send an empty string. The terminal reads the card or tender.</td>\n</tr>\n<tr>\n<td><code>fullName</code></td>\n<td>string</td>\n<td>Optional</td>\n<td><code>\"John Smith\"</code></td>\n<td>Cardholder / customer display name. Informational only.</td>\n</tr>\n<tr>\n<td><code>amountOfSale</code></td>\n<td>number (2 dp)</td>\n<td>Required</td>\n<td><code>20.00</code></td>\n<td>Base amount before tax, tip, cashback and fee.</td>\n</tr>\n<tr>\n<td><code>tax</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>6.00</code></td>\n<td>Total tax = <code>stateTax + cityTax + reducedTax</code>. The collection pre-request script calculates it.</td>\n</tr>\n<tr>\n<td><code>baseStateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for state and municipal tax.</td>\n</tr>\n<tr>\n<td><code>baseReducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for reduced state tax.</td>\n</tr>\n<tr>\n<td><code>stateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>1.00</code></td>\n<td>State tax amount (tax type: State).</td>\n</tr>\n<tr>\n<td><code>cityTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>2.00</code></td>\n<td>Municipal / city tax amount (tax type: Municipal).</td>\n</tr>\n<tr>\n<td><code>reducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>3.00</code></td>\n<td>Reduced state tax amount (tax type: Reduced state).</td>\n</tr>\n<tr>\n<td><code>subTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>20.00</code></td>\n<td>Equals <code>amountOfSale</code>. The collection script calculates it.</td>\n</tr>\n<tr>\n<td><code>tips</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Tip / gratuity amount.</td>\n</tr>\n<tr>\n<td><code>cashBack</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Cashback amount.</td>\n</tr>\n<tr>\n<td><code>fee</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Extra fee / surcharge amount.</td>\n</tr>\n<tr>\n<td><code>grandTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>26.00</code></td>\n<td><code>subTotal + tax + tips + cashBack + fee</code>. The collection script calculates it. This is the total sent for authorization; it comes back as <code>EvertecResponse.amounts.total</code>.</td>\n</tr>\n<tr>\n<td><code>appVersion</code></td>\n<td>string</td>\n<td>Recommended</td>\n<td><code>\"1.0.0\"</code></td>\n<td>Version of the calling application. Used for support and compatibility tracking.</td>\n</tr>\n<tr>\n<td><code>timeOut</code></td>\n<td>integer (ms)</td>\n<td>Optional</td>\n<td><code>30000</code></td>\n<td>How long, in ms, the HTTP call waits for the terminal's final result. <code>0</code> returns right after the request is saved and dispatched (<code>Completed=false</code>). With a value above 0, EVUAPI returns as soon as the final result arrives, or when the wait runs out. <strong>When the wait runs out, the terminal transaction is not cancelled.</strong></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"business-rules\">Business rules</h3>\n<ul>\n<li><code>tax</code> must equal <code>stateTax + cityTax + reducedTax</code>.</li>\n<li><code>subTotal</code> must equal <code>amountOfSale</code>.</li>\n<li><code>grandTotal</code> must equal <code>subTotal + tax + tips + cashBack + fee</code>.</li>\n<li>Use decimal (not floating-point) math, and round money to 2 decimal places.</li>\n<li>The identity header values must be the same as the body's <code>merchantId</code>, <code>terminalId</code> and <code>identification</code>.</li>\n<li>Originating transaction: <strong>don't</strong> send <code>originalAmount</code>, <code>originalApprovalCode</code> or <code>originalGatewayReferenceNumber</code>.</li>\n<li>Send <code>tokenNumber</code> as an empty string. The terminal reads the card or tender.</li>\n</ul>\n<h2 id=\"response\">Response</h2>\n<h3 id=\"http-status-codes\">HTTP status codes</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>HTTP status</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>200 OK</code></td>\n<td>The request was processed. The body holds the final result (<code>Completed=true</code>).</td>\n</tr>\n<tr>\n<td><code>202 Accepted</code></td>\n<td>The terminal accepted the request, but the result is not final yet (<code>Completed=false</code>). Poll <strong>Get Transaction Status</strong> with <code>RequestId</code>.</td>\n</tr>\n<tr>\n<td><code>4xx</code></td>\n<td>Validation, identity or authorization failure. Fix the request or configuration. <strong>Don't retry it unchanged.</strong></td>\n</tr>\n<tr>\n<td><code>5xx</code></td>\n<td>Service-side failure. Save <code>ErrorId</code> if one is returned. If you have a <code>RequestId</code>, check the status before you consider a retry.</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p><strong>HTTP 200 does not mean approved.</strong> A decline also comes back as <code>200</code> with <code>Status=Declined</code>. Always decide the outcome from <code>Status</code> and <code>Completed</code>.</p>\n</blockquote>\n<h3 id=\"response-body\">Response body</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>RequestId</code></td>\n<td>string</td>\n<td>EVUAPI's ID for this transaction: 32 lowercase hex characters, no hyphens. Save it right away. You need it to get the status and to contact support.</td>\n</tr>\n<tr>\n<td><code>Status</code></td>\n<td>string</td>\n<td>Current lifecycle state. See <strong>Transaction statuses</strong>.</td>\n</tr>\n<tr>\n<td><code>Completed</code></td>\n<td>boolean</td>\n<td><code>true</code> only when <code>Status</code> is final. While it is <code>false</code>, keep polling <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><code>ResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Result code normalized by EVUAPI. See <strong>Response codes</strong>. Keep it as a string (it can have leading zeros). <code>null</code> while not final.</td>\n</tr>\n<tr>\n<td><code>ProcessorResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Raw code from the processor or terminal, such as <code>00</code> or <code>68</code>. An empty string means the processor was never reached.</td>\n</tr>\n<tr>\n<td><code>ResponseText</code></td>\n<td>string (nullable)</td>\n<td>Readable result text from the processor, gateway or EVUAPI. Show it to operators, but don't parse it.</td>\n</tr>\n<tr>\n<td><code>EvertecResponse</code></td>\n<td>object (nullable)</td>\n<td>Processor-specific details. <strong>CNP:</strong> a fixed, ordered shape. <strong>CP:</strong> the terminal's raw final result. <code>null</code> while not final. See the <em>CNP</em> and <em>CP</em> folder docs.</td>\n</tr>\n<tr>\n<td><code>ApprovalCode</code></td>\n<td>string (nullable)</td>\n<td>Processor authorization code, normally 6 characters. It can also be filled in on a <strong>decline</strong>, so never use it alone to decide approval.</td>\n</tr>\n<tr>\n<td><code>GatewayReferenceNumber</code></td>\n<td>string (nullable)</td>\n<td>Charge Anywhere gateway reference: 12 digits, keep the leading zeros. Send it as <code>originalGatewayReferenceNumber</code> on a later Force, Void or Return.</td>\n</tr>\n<tr>\n<td><code>AuthorizedAmount</code></td>\n<td>number (nullable)</td>\n<td>Amount the processor authorized. <code>0</code> on an approved Void. <code>null</code> when nothing was authorized.</td>\n</tr>\n<tr>\n<td><code>TokenNumber</code></td>\n<td>string (nullable)</td>\n<td>CNP: the payment token for the transaction. CP: <code>null</code>. <strong>Sensitive.</strong></td>\n</tr>\n<tr>\n<td><code>CardType</code></td>\n<td>string (nullable)</td>\n<td>Card brand or tender code. See <strong>Card type codes</strong>.</td>\n</tr>\n<tr>\n<td><code>StatusUrl</code></td>\n<td>string</td>\n<td>Relative path of the status resource, e.g. <code>/api/v1/transactions/{RequestId}</code>. Put <code>https://webtest.chargeanywhere.com/evuapi</code> in front and add the three identity query parameters.</td>\n</tr>\n<tr>\n<td><code>ErrorId</code></td>\n<td>string (nullable)</td>\n<td>ID of an error that EVUAPI logged. Give it to Charge Anywhere support.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"evertecresponse\">EvertecResponse</h3>\n<p><code>EvertecResponse</code> is the terminal's <strong>raw</strong> final result, with internal correlation fields removed. It is not normalized, so treat <strong>every property as optional</strong>. The dictionary is in the <strong>CP</strong> folder documentation.</p>\n<p>For ATH Móvil: <code>card_bin_type=ATH_MOVIL</code>, <code>special_account=AM</code>, <code>transaction_type_indicator=A</code>, <code>CardType=994</code>, and <code>ath_trans_id</code> holds the ATH Móvil transaction ID.</p>\n<h3 id=\"how-to-interpret-the-result\">How to interpret the result</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Completed</th>\n<th>Status</th>\n<th>What to do</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>true</code></td>\n<td><code>Approved</code></td>\n<td>Success. Save <code>RequestId</code>, <code>GatewayReferenceNumber</code>, <code>ApprovalCode</code>, <code>AuthorizedAmount</code> and the receipts.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Declined</code></td>\n<td>Not approved. Show <code>ResponseText</code>. Don't retry unchanged.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Failed</code> / <code>TimedOut</code> / <code>Cancelled</code></td>\n<td>Not approved. Record the result. Only start a new transaction after you confirm with the customer.</td>\n</tr>\n<tr>\n<td><code>false</code></td>\n<td><code>Pending</code> / <code>SentToTerminal</code> / <code>ReceivedByTerminal</code> / <code>Processing</code></td>\n<td>Not final. Poll <strong>Get Transaction Status</strong>. <strong>Never</strong> send a second transaction just because the first one is still pending.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"error-handling\">Error handling</h2>\n<ul>\n<li><strong>Network timeout or no response:</strong> Don't resend the POST automatically. If you got a <code>RequestId</code>, call <strong>Get Transaction Status</strong>. If you didn't, reconcile with your invoice/order reference before you try again.</li>\n<li><strong><code>4xx</code>:</strong> Check the identity headers against the body, the <code>paymentType</code> / <code>transactionType</code> combination, the amount math, and the required fields.</li>\n<li><strong><code>5xx</code>:</strong> Save <code>ErrorId</code> and <code>RequestId</code> (if you have them) and contact support. Check the status before you retry.</li>\n</ul>\n<h2 id=\"testing-in-postman\">Testing in Postman</h2>\n<ul>\n<li><strong>Reads:</strong> <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code>, <code></code>, <code>1</code>, <code>1</code>, <code>1.0.0</code> and the amount variables. The collection pre-request script recalculates <code>SubTotal</code>, <code>Tax</code> and <code>GrandTotal</code>.</li>\n<li><strong>Writes (test script):</strong> <code>RequestId</code>, <code>OriginalGatewayReferenceNumber</code> (from <code>GatewayReferenceNumber</code>), <code>OriginalAmount</code> (from <code>AuthorizedAmount</code>), <code>OriginalApprovalCode</code> (from <code>ApprovalCode</code>) and <code>ErrorId</code>, <strong>whenever these are in the response</strong>.</li>\n<li>⚠️ Values are saved even when the transaction is <strong>declined</strong>. Before you run a follow-up request, check that the last response was the approved original you meant.</li>\n<li><strong>Tests:</strong> HTTP status is 200/201/202. When <code>EvertecResponse</code> is present, internal correlation fields (<code>last_reference</code>, <code>trx_id</code>, <code>session_id</code>) are not in it.</li>\n</ul>\n<h2 id=\"related-requests\">Related requests</h2>\n<ul>\n<li><strong>Get Transaction Status</strong> while <code>Completed=false</code></li>\n<li><strong>Void</strong> / <strong>Return</strong> in the same tender folder</li>\n</ul>\n","urlObject":{"path":["api","v1","transactions"],"host":["https://webtest.chargeanywhere.com/evuapi"],"query":[],"variable":[]}},"response":[{"id":"5811809f-f808-43bf-808f-50fe3aceb49d","name":"200 OK · Approved","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 13,\n  \"transactionType\": 1,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": true,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"**Scenario:** An ATH Móvil Sale was approved.\n\n- `CardType=994`, `card_bin_type=ATH_MOVIL`, `special_account=AM`, `transaction_type_indicator=A`.\n- `ath_trans_id` holds the ATH Móvil transaction ID. Store it for reconciliation with ATH Móvil.\n- Only `receipt_output.merchant` is returned in this sample."},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Cache-Control","value":"no-cache,no-cache, no-store"},{"key":"Pragma","value":"no-cache"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Expires","value":"-1,0"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"X-FRAME-OPTIONS","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"Referrer-Policy","value":"no-referrer-when-downgrade"},{"key":"Content-Security-Policy","value":"default-src data: 'unsafe-inline' 'unsafe-eval' https:; img-src * data:;"},{"key":"Date","value":"Thu, 24 Sep 2026 12:07:11 GMT"},{"key":"Content-Length","value":"1928"}],"cookie":[],"responseTime":null,"body":"{\n    \"RequestId\": \"f07cd15a22b34d83b378c17af654ac40\",\n    \"Status\": \"Approved\",\n    \"Completed\": true,\n    \"ResponseCode\": \"000\",\n    \"ProcessorResponseCode\": \"00\",\n    \"ResponseText\": \"APPROVED.\",\n    \"EvertecResponse\": {\n        \"trace_number\": \"000012\",\n        \"batch_number\": \"2\",\n        \"card_acceptor_id\": \"NONE\",\n        \"special_account\": \"AM\",\n        \"merchant_id\": \"4549000000123\",\n        \"pan_card_number\": \"1208\",\n        \"reference\": \"32\",\n        \"receipt_output\": {\n            \"merchant\": \"<html><body><!-- Receipt HTML shortened for documentation --><p>MERCHANT COPY</p></body></html>\"\n        },\n        \"amounts\": {\n            \"total\": \"26.00\",\n            \"base_state_tax\": \"10.00\",\n            \"tip\": \"0.00\",\n            \"reduced_tax\": \"3.00\",\n            \"base_reduced_tax\": \"10.00\",\n            \"state_tax\": \"1.00\",\n            \"city_tax\": \"2.00\"\n        },\n        \"authorization_code\": \"982104\",\n        \"signature_indicator\": \"NOSIGN\",\n        \"transaction_time\": \"080637\",\n        \"payment_host\": \"ATH1\",\n        \"invoice_number\": \"000943\",\n        \"terminal_id\": \"40000001\",\n        \"transaction_date\": \"09242026\",\n        \"approval_code\": \"00\",\n        \"cashier_id\": \"1\",\n        \"manual_entry_indicator\": \"no\",\n        \"ivu\": {\n            \"control_line1\": \"CONTROL: HMFHA-SJCNJ\",\n            \"control_line2\": \"ET                  \"\n        },\n        \"process_cashback\": \"no\",\n        \"card_bin_type\": \"ATH_MOVIL\",\n        \"station_number\": \"1\",\n        \"response_message\": \"APPROVED.\",\n        \"receipt_email\": \"yes\",\n        \"transaction_type_indicator\": \"A\",\n        \"ath_trans_id\": \"0000000000420861\",\n        \"entry_type\": \"MANUAL\"\n    },\n    \"ApprovalCode\": \"982104\",\n    \"GatewayReferenceNumber\": \"000004588690\",\n    \"AuthorizedAmount\": 26,\n    \"TokenNumber\": null,\n    \"CardType\": \"994\",\n    \"StatusUrl\": \"/api/v1/transactions/f07cd15a22b34d83b378c17af654ac40\",\n    \"ErrorId\": null\n}"}],"_postman_id":"d82e0116-dbac-4e2c-9128-3c336f287b37"},{"name":"Return","event":[{"listen":"test","script":{"type":"text/javascript","exec":["let body = {};","try { body = pm.response.json(); } catch (e) {}","const requestId = body.requestId || body.RequestId;","const gatewayReferenceNumber = body.gatewayReferenceNumber || body.GatewayReferenceNumber;","const authorizedAmount = body.authorizedAmount !== undefined ? body.authorizedAmount : body.AuthorizedAmount;","const errorId = body.errorId || body.ErrorId;","if (requestId) pm.collectionVariables.set('RequestId', requestId);","if (gatewayReferenceNumber) pm.collectionVariables.set('OriginalGatewayReferenceNumber', gatewayReferenceNumber);","if (authorizedAmount !== undefined && authorizedAmount !== null) pm.collectionVariables.set('OriginalAmount', authorizedAmount);","if (errorId) pm.collectionVariables.set('ErrorId', errorId);","pm.test('Transaction request accepted', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });","const originalApprovalCode = body.approvalCode || body.ApprovalCode || (body.data && (body.data.approvalCode || body.data.ApprovalCode));","if (originalApprovalCode) pm.collectionVariables.set('OriginalApprovalCode', originalApprovalCode);","","// App2-only correlation fields are never part of the public EvertecResponse.","const evertecResponse = body.EvertecResponse || body.evertecResponse;","if (evertecResponse && typeof evertecResponse === 'object') {","  pm.test('EvertecResponse suppresses App2-only correlation fields', function () {","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'last_reference')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'trx_id')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'session_id')).to.eql(false);","  });","}"],"id":"0e883dd8-3ebc-42bc-b59e-8880581fc367"}}],"id":"adf5f798-2d44-4236-bf5f-8c97bebccc60","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 13,\n  \"transactionType\": 3,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": true,\n  \"tokenNumber\": \"\",\n  \"fullName\": \"John Smith\",\n  \"amountOfSale\": 20.00,\n  \"tax\": 6.00,\n  \"baseStateTax\": 10.00,\n  \"baseReducedTax\": 10.00,\n  \"stateTax\": 1.00,\n  \"cityTax\": 2.00,\n  \"reducedTax\": 3.00,\n  \"subTotal\": 20.00,\n  \"tips\": 0.00,\n  \"cashBack\": 0.00,\n  \"fee\": 0.00,\n  \"grandTotal\": 26.00,\n  \"originalAmount\": ,\n  \"originalApprovalCode\": \"\",\n  \"originalGatewayReferenceNumber\": \"\",\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"<h1 id=\"cp-ath-móvil-return\">CP ATH Móvil Return</h1>\n<blockquote>\n<p>Refunds money to the customer.</p>\n</blockquote>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Endpoint</strong></td>\n<td><code>POST https://webtest.chargeanywhere.com/evuapi/api/v1/transactions</code></td>\n</tr>\n<tr>\n<td><strong>Channel</strong></td>\n<td>Card-present (CP) · <code>cardPresent=true</code></td>\n</tr>\n<tr>\n<td><strong>Tender</strong></td>\n<td>ATH Móvil (<code>paymentType=13</code>)</td>\n</tr>\n<tr>\n<td><strong>Operation</strong></td>\n<td>Return (<code>transactionType=3</code>)</td>\n</tr>\n<tr>\n<td><strong>Processing model</strong></td>\n<td><strong>Asynchronous.</strong> The response may be final or not final. If <code>Completed=false</code>, poll <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><strong>Caller</strong></td>\n<td>Merchant or POS application</td>\n</tr>\n<tr>\n<td><strong>Authentication</strong></td>\n<td>Merchant identity headers <code>X-Merchant-Id</code>, <code>X-Terminal-Id</code>, <code>X-Identification</code></td>\n</tr>\n<tr>\n<td><strong>Financial impact</strong></td>\n<td>Money is returned to the customer and the refund is queued for settlement.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"overview\">Overview</h2>\n<p>Use Return to refund an earlier purchase, usually after settlement. For a <strong>linked</strong> Return, send the original transaction's <code>original*</code> fields, as this collection does.</p>\n<h2 id=\"before-you-call\">Before you call</h2>\n<ul>\n<li>The terminal for <code></code> must be enrolled with EVUAPI, powered on and online.</li>\n<li>For a linked Return, run the original <strong>Sale</strong> (or <strong>Force</strong>) first so the <code>Original*</code> variables are filled in.</li>\n<li>Set <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code> and <code></code> in your active environment.</li>\n</ul>\n<h2 id=\"request\">Request</h2>\n<h3 id=\"headers\">Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Required</th>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Content-Type</code></td>\n<td>Yes</td>\n<td><code>application/json</code></td>\n<td>The request body is JSON.</td>\n</tr>\n<tr>\n<td><code>Accept</code></td>\n<td>Recommended</td>\n<td><code>application/json</code></td>\n<td>Asks for a JSON response.</td>\n</tr>\n<tr>\n<td><code>X-Merchant-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant identity. Must match body <code>merchantId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Terminal-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant terminal identity (keep leading zeros). Must match body <code>terminalId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Identification</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Physical terminal identity. Must match body <code>identification</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"body-parameters\">Body parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Value in this request</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>merchantId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant ID that Charge Anywhere issued for this integration. Must be the same as the <code>X-Merchant-Id</code> header.</td>\n</tr>\n<tr>\n<td><code>identification</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Physical terminal / device identity (the same value as the terminal serial number / ManNumber). Must be the same as <code>X-Identification</code>. Identifies the terminal that will process the transaction.</td>\n</tr>\n<tr>\n<td><code>terminalId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant terminal ID. Send it as a <strong>string</strong> and keep leading zeros (e.g. <code>0002</code>). Must be the same as <code>X-Terminal-Id</code>.</td>\n</tr>\n<tr>\n<td><code>terminalDateTime</code></td>\n<td>string (date-time)</td>\n<td>Required</td>\n<td><code>\"2026-08-14T18:30:00\"</code></td>\n<td>Local date/time of the calling system, ISO 8601 with no UTC offset: <code>yyyy-MM-ddTHH:mm:ss</code>. Send the actual time of the request. The value shown is an example.</td>\n</tr>\n<tr>\n<td><code>paymentType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>13</code></td>\n<td>Tender. <code>13</code> = ATH Móvil. See <strong>Payment types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>transactionType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>3</code></td>\n<td>Operation. <code>3</code> = Return. See <strong>Transaction types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>stationNumber</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Station / register number. Returned as a string in <code>EvertecResponse.station_number</code>.</td>\n</tr>\n<tr>\n<td><code>cashierId</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Cashier / clerk ID. Returned in <code>EvertecResponse.cashier_id</code>.</td>\n</tr>\n<tr>\n<td><code>cardPresent</code></td>\n<td>boolean</td>\n<td>Required</td>\n<td><code>true</code></td>\n<td><code>true</code> sends the request down the asynchronous <strong>card-present</strong> path (a push to the terminal).</td>\n</tr>\n<tr>\n<td><code>tokenNumber</code></td>\n<td>string</td>\n<td>Send <code>\"\"</code></td>\n<td><code>\"\"</code></td>\n<td>Not used for card-present; send an empty string. The terminal reads the card or tender.</td>\n</tr>\n<tr>\n<td><code>fullName</code></td>\n<td>string</td>\n<td>Optional</td>\n<td><code>\"John Smith\"</code></td>\n<td>Cardholder / customer display name. Informational only.</td>\n</tr>\n<tr>\n<td><code>amountOfSale</code></td>\n<td>number (2 dp)</td>\n<td>Required</td>\n<td><code>20.00</code></td>\n<td>Base amount before tax, tip, cashback and fee.</td>\n</tr>\n<tr>\n<td><code>tax</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>6.00</code></td>\n<td>Total tax = <code>stateTax + cityTax + reducedTax</code>. The collection pre-request script calculates it.</td>\n</tr>\n<tr>\n<td><code>baseStateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for state and municipal tax.</td>\n</tr>\n<tr>\n<td><code>baseReducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>10.00</code></td>\n<td>Taxable base for reduced state tax.</td>\n</tr>\n<tr>\n<td><code>stateTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>1.00</code></td>\n<td>State tax amount (tax type: State).</td>\n</tr>\n<tr>\n<td><code>cityTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>2.00</code></td>\n<td>Municipal / city tax amount (tax type: Municipal).</td>\n</tr>\n<tr>\n<td><code>reducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>3.00</code></td>\n<td>Reduced state tax amount (tax type: Reduced state).</td>\n</tr>\n<tr>\n<td><code>subTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>20.00</code></td>\n<td>Equals <code>amountOfSale</code>. The collection script calculates it.</td>\n</tr>\n<tr>\n<td><code>tips</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Tip / gratuity amount.</td>\n</tr>\n<tr>\n<td><code>cashBack</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Cashback amount.</td>\n</tr>\n<tr>\n<td><code>fee</code></td>\n<td>number (2 dp)</td>\n<td>Optional (<code>0.00</code> if N/A)</td>\n<td><code>0.00</code></td>\n<td>Extra fee / surcharge amount.</td>\n</tr>\n<tr>\n<td><code>grandTotal</code></td>\n<td>number (2 dp)</td>\n<td>Required (calculated)</td>\n<td><code>26.00</code></td>\n<td><code>subTotal + tax + tips + cashBack + fee</code>. The collection script calculates it. This is the total sent for authorization; it comes back as <code>EvertecResponse.amounts.total</code>.</td>\n</tr>\n<tr>\n<td><code>originalAmount</code></td>\n<td>number</td>\n<td>Conditional (linked Return)</td>\n<td><code></code></td>\n<td>Amount of the original transaction, normally its <code>AuthorizedAmount</code>. Postman saves it as <code></code>.</td>\n</tr>\n<tr>\n<td><code>originalApprovalCode</code></td>\n<td>string</td>\n<td>Conditional (linked Return)</td>\n<td><code>\"\"</code></td>\n<td><code>ApprovalCode</code> returned by the original transaction. Postman saves it as <code></code>.</td>\n</tr>\n<tr>\n<td><code>originalGatewayReferenceNumber</code></td>\n<td>string</td>\n<td>Conditional (linked Return)</td>\n<td><code>\"\"</code></td>\n<td><code>GatewayReferenceNumber</code> of the original transaction (12 digits, keep leading zeros).</td>\n</tr>\n<tr>\n<td><code>appVersion</code></td>\n<td>string</td>\n<td>Recommended</td>\n<td><code>\"1.0.0\"</code></td>\n<td>Version of the calling application. Used for support and compatibility tracking.</td>\n</tr>\n<tr>\n<td><code>timeOut</code></td>\n<td>integer (ms)</td>\n<td>Optional</td>\n<td><code>30000</code></td>\n<td>How long, in ms, the HTTP call waits for the terminal's final result. <code>0</code> returns right after the request is saved and dispatched (<code>Completed=false</code>). With a value above 0, EVUAPI returns as soon as the final result arrives, or when the wait runs out. <strong>When the wait runs out, the terminal transaction is not cancelled.</strong></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"business-rules\">Business rules</h3>\n<ul>\n<li><code>tax</code> must equal <code>stateTax + cityTax + reducedTax</code>.</li>\n<li><code>subTotal</code> must equal <code>amountOfSale</code>.</li>\n<li><code>grandTotal</code> must equal <code>subTotal + tax + tips + cashBack + fee</code>.</li>\n<li>Use decimal (not floating-point) math, and round money to 2 decimal places.</li>\n<li>The identity header values must be the same as the body's <code>merchantId</code>, <code>terminalId</code> and <code>identification</code>.</li>\n<li>For a linked Return, send the <code>original*</code> values of the purchase being refunded.</li>\n<li>Send <code>tokenNumber</code> as an empty string. The terminal reads the card or tender.</li>\n</ul>\n<h2 id=\"response\">Response</h2>\n<h3 id=\"http-status-codes\">HTTP status codes</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>HTTP status</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>200 OK</code></td>\n<td>The request was processed. The body holds the final result (<code>Completed=true</code>).</td>\n</tr>\n<tr>\n<td><code>202 Accepted</code></td>\n<td>The terminal accepted the request, but the result is not final yet (<code>Completed=false</code>). Poll <strong>Get Transaction Status</strong> with <code>RequestId</code>.</td>\n</tr>\n<tr>\n<td><code>4xx</code></td>\n<td>Validation, identity or authorization failure. Fix the request or configuration. <strong>Don't retry it unchanged.</strong></td>\n</tr>\n<tr>\n<td><code>5xx</code></td>\n<td>Service-side failure. Save <code>ErrorId</code> if one is returned. If you have a <code>RequestId</code>, check the status before you consider a retry.</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p><strong>HTTP 200 does not mean approved.</strong> A decline also comes back as <code>200</code> with <code>Status=Declined</code>. Always decide the outcome from <code>Status</code> and <code>Completed</code>.</p>\n</blockquote>\n<h3 id=\"response-body\">Response body</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>RequestId</code></td>\n<td>string</td>\n<td>EVUAPI's ID for this transaction: 32 lowercase hex characters, no hyphens. Save it right away. You need it to get the status and to contact support.</td>\n</tr>\n<tr>\n<td><code>Status</code></td>\n<td>string</td>\n<td>Current lifecycle state. See <strong>Transaction statuses</strong>.</td>\n</tr>\n<tr>\n<td><code>Completed</code></td>\n<td>boolean</td>\n<td><code>true</code> only when <code>Status</code> is final. While it is <code>false</code>, keep polling <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><code>ResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Result code normalized by EVUAPI. See <strong>Response codes</strong>. Keep it as a string (it can have leading zeros). <code>null</code> while not final.</td>\n</tr>\n<tr>\n<td><code>ProcessorResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Raw code from the processor or terminal, such as <code>00</code> or <code>68</code>. An empty string means the processor was never reached.</td>\n</tr>\n<tr>\n<td><code>ResponseText</code></td>\n<td>string (nullable)</td>\n<td>Readable result text from the processor, gateway or EVUAPI. Show it to operators, but don't parse it.</td>\n</tr>\n<tr>\n<td><code>EvertecResponse</code></td>\n<td>object (nullable)</td>\n<td>Processor-specific details. <strong>CNP:</strong> a fixed, ordered shape. <strong>CP:</strong> the terminal's raw final result. <code>null</code> while not final. See the <em>CNP</em> and <em>CP</em> folder docs.</td>\n</tr>\n<tr>\n<td><code>ApprovalCode</code></td>\n<td>string (nullable)</td>\n<td>Processor authorization code, normally 6 characters. It can also be filled in on a <strong>decline</strong>, so never use it alone to decide approval.</td>\n</tr>\n<tr>\n<td><code>GatewayReferenceNumber</code></td>\n<td>string (nullable)</td>\n<td>Charge Anywhere gateway reference: 12 digits, keep the leading zeros. Send it as <code>originalGatewayReferenceNumber</code> on a later Force, Void or Return.</td>\n</tr>\n<tr>\n<td><code>AuthorizedAmount</code></td>\n<td>number (nullable)</td>\n<td>Amount the processor authorized. <code>0</code> on an approved Void. <code>null</code> when nothing was authorized.</td>\n</tr>\n<tr>\n<td><code>TokenNumber</code></td>\n<td>string (nullable)</td>\n<td>CNP: the payment token for the transaction. CP: <code>null</code>. <strong>Sensitive.</strong></td>\n</tr>\n<tr>\n<td><code>CardType</code></td>\n<td>string (nullable)</td>\n<td>Card brand or tender code. See <strong>Card type codes</strong>.</td>\n</tr>\n<tr>\n<td><code>StatusUrl</code></td>\n<td>string</td>\n<td>Relative path of the status resource, e.g. <code>/api/v1/transactions/{RequestId}</code>. Put <code>https://webtest.chargeanywhere.com/evuapi</code> in front and add the three identity query parameters.</td>\n</tr>\n<tr>\n<td><code>ErrorId</code></td>\n<td>string (nullable)</td>\n<td>ID of an error that EVUAPI logged. Give it to Charge Anywhere support.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"evertecresponse\">EvertecResponse</h3>\n<p><code>EvertecResponse</code> is the terminal's <strong>raw</strong> final result, with internal correlation fields removed. It is not normalized, so treat <strong>every property as optional</strong>. The dictionary is in the <strong>CP</strong> folder documentation.</p>\n<p>For ATH Móvil: <code>card_bin_type=ATH_MOVIL</code>, <code>special_account=AM</code>, <code>transaction_type_indicator=A</code>, <code>CardType=994</code>, and <code>ath_trans_id</code> holds the ATH Móvil transaction ID.</p>\n<h3 id=\"how-to-interpret-the-result\">How to interpret the result</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Completed</th>\n<th>Status</th>\n<th>What to do</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>true</code></td>\n<td><code>Approved</code></td>\n<td>Success. Save <code>RequestId</code>, <code>GatewayReferenceNumber</code>, <code>ApprovalCode</code>, <code>AuthorizedAmount</code> and the receipts.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Declined</code></td>\n<td>Not approved. Show <code>ResponseText</code>. Don't retry unchanged.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td><code>Failed</code> / <code>TimedOut</code> / <code>Cancelled</code></td>\n<td>Not approved. Record the result. Only start a new transaction after you confirm with the customer.</td>\n</tr>\n<tr>\n<td><code>false</code></td>\n<td><code>Pending</code> / <code>SentToTerminal</code> / <code>ReceivedByTerminal</code> / <code>Processing</code></td>\n<td>Not final. Poll <strong>Get Transaction Status</strong>. <strong>Never</strong> send a second transaction just because the first one is still pending.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"error-handling\">Error handling</h2>\n<ul>\n<li><strong>Network timeout or no response:</strong> Don't resend the POST automatically. If you got a <code>RequestId</code>, call <strong>Get Transaction Status</strong>. If you didn't, reconcile with your invoice/order reference before you try again.</li>\n<li><strong><code>4xx</code>:</strong> Check the identity headers against the body, the <code>paymentType</code> / <code>transactionType</code> combination, the amount math, and the <code>original*</code> values.</li>\n<li><strong><code>5xx</code>:</strong> Save <code>ErrorId</code> and <code>RequestId</code> (if you have them) and contact support. Check the status before you retry.</li>\n</ul>\n<h2 id=\"testing-in-postman\">Testing in Postman</h2>\n<ul>\n<li><strong>Reads:</strong> <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code>, <code></code>, <code>1</code>, <code>1</code>, <code>1.0.0</code> and the amount variables. The collection pre-request script recalculates <code>SubTotal</code>, <code>Tax</code> and <code>GrandTotal</code>.</li>\n<li><strong>Writes (test script):</strong> <code>RequestId</code>, <code>OriginalGatewayReferenceNumber</code> (from <code>GatewayReferenceNumber</code>), <code>OriginalAmount</code> (from <code>AuthorizedAmount</code>), <code>OriginalApprovalCode</code> (from <code>ApprovalCode</code>) and <code>ErrorId</code>, <strong>whenever these are in the response</strong>.</li>\n<li>⚠️ Values are saved even when the transaction is <strong>declined</strong>. Before you run a follow-up request, check that the last response was the approved original you meant.</li>\n<li><strong>Tests:</strong> HTTP status is 200/201/202. When <code>EvertecResponse</code> is present, internal correlation fields (<code>last_reference</code>, <code>trx_id</code>, <code>session_id</code>) are not in it.</li>\n</ul>\n<h2 id=\"related-requests\">Related requests</h2>\n<ul>\n<li><strong>Get Transaction Status</strong> while <code>Completed=false</code></li>\n</ul>\n","urlObject":{"path":["api","v1","transactions"],"host":["https://webtest.chargeanywhere.com/evuapi"],"query":[],"variable":[]}},"response":[],"_postman_id":"adf5f798-2d44-4236-bf5f-8c97bebccc60"}],"id":"5986f99f-37f6-4d62-9c05-4d4f6c29f9ff","description":"<h1 id=\"cp-·-ath-móvil\">CP · ATH Móvil</h1>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>paymentType</code></td>\n<td><code>13</code> (ATH Móvil)</td>\n</tr>\n<tr>\n<td><code>cardPresent</code></td>\n<td><code>true</code></td>\n</tr>\n<tr>\n<td>Supported operations</td>\n<td>Sale (<code>1</code>), Return (<code>3</code>)</td>\n</tr>\n<tr>\n<td>Response markers</td>\n<td><code>CardType=994</code>, <code>card_bin_type=ATH_MOVIL</code>, <code>special_account=AM</code>, <code>transaction_type_indicator=A</code>, plus <code>ath_trans_id</code></td>\n</tr>\n</tbody>\n</table>\n</div><p>The customer approves the payment in the ATH Móvil app while the terminal shows the request. Store <code>ath_trans_id</code> for reconciliation.</p>\n","_postman_id":"5986f99f-37f6-4d62-9c05-4d4f6c29f9ff"},{"name":"Batch","item":[{"name":"Close Batch","event":[{"listen":"test","script":{"type":"text/javascript","exec":["let body = {};","try { body = pm.response.json(); } catch (e) {}","const requestId = body.requestId || body.RequestId;","const gatewayReferenceNumber = body.gatewayReferenceNumber || body.GatewayReferenceNumber;","const authorizedAmount = body.authorizedAmount !== undefined ? body.authorizedAmount : body.AuthorizedAmount;","const errorId = body.errorId || body.ErrorId;","if (requestId) pm.collectionVariables.set('RequestId', requestId);","if (gatewayReferenceNumber) pm.collectionVariables.set('OriginalGatewayReferenceNumber', gatewayReferenceNumber);","if (authorizedAmount !== undefined && authorizedAmount !== null) pm.collectionVariables.set('OriginalAmount', authorizedAmount);","if (errorId) pm.collectionVariables.set('ErrorId', errorId);","pm.test('Transaction request accepted', function () { pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]); });","const originalApprovalCode = body.approvalCode || body.ApprovalCode || (body.data && (body.data.approvalCode || body.data.ApprovalCode));","if (originalApprovalCode) pm.collectionVariables.set('OriginalApprovalCode', originalApprovalCode);","","// App2-only correlation fields are never part of the public EvertecResponse.","const evertecResponse = body.EvertecResponse || body.evertecResponse;","if (evertecResponse && typeof evertecResponse === 'object') {","  pm.test('EvertecResponse suppresses App2-only correlation fields', function () {","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'last_reference')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'trx_id')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'session_id')).to.eql(false);","  });","}"],"id":"04289203-1f12-4006-af31-e7965db5e29f"}}],"id":"e7d98058-38a8-46c6-af6b-5ba9b8316c92","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 2,\n  \"transactionType\": 12,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": true,\n  \"tokenNumber\": \"\",\n  \"amountOfSale\": 0.0,\n  \"tax\": 0.0,\n  \"baseStateTax\": 0.0,\n  \"baseReducedTax\": 0.0,\n  \"stateTax\": 0.0,\n  \"cityTax\": 0.0,\n  \"reducedTax\": 0.0,\n  \"subTotal\": 0.0,\n  \"tips\": 0.0,\n  \"cashBack\": 0.0,\n  \"fee\": 0.0,\n  \"grandTotal\": 0.0,\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"<h1 id=\"cp-close-batch\">CP Close Batch</h1>\n<blockquote>\n<p>Closes and settles the current batch. This is a batch operation, not a payment.</p>\n</blockquote>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Endpoint</strong></td>\n<td><code>POST https://webtest.chargeanywhere.com/evuapi/api/v1/transactions</code></td>\n</tr>\n<tr>\n<td><strong>Channel</strong></td>\n<td>Card-present (CP) · <code>cardPresent=true</code></td>\n</tr>\n<tr>\n<td><strong>Tender</strong></td>\n<td>Batch operation (not tender-specific)</td>\n</tr>\n<tr>\n<td><strong>Operation</strong></td>\n<td>Close Batch (<code>transactionType=12</code>)</td>\n</tr>\n<tr>\n<td><strong>Processing model</strong></td>\n<td><strong>Asynchronous.</strong> The response may be final or not final. If <code>Completed=false</code>, poll <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><strong>Caller</strong></td>\n<td>Merchant or POS application</td>\n</tr>\n<tr>\n<td><strong>Authentication</strong></td>\n<td>Merchant identity headers <code>X-Merchant-Id</code>, <code>X-Terminal-Id</code>, <code>X-Identification</code></td>\n</tr>\n<tr>\n<td><strong>Financial impact</strong></td>\n<td>Every open transaction in the batch is submitted for settlement.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"overview\">Overview</h2>\n<p>Run Close Batch at the end of the business day, or whenever your settlement process calls for it.</p>\n<h2 id=\"before-you-call\">Before you call</h2>\n<ul>\n<li>The terminal for <code></code> must be enrolled with EVUAPI, powered on and online.</li>\n<li>Set <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code> and <code></code> in your active environment.</li>\n</ul>\n<h2 id=\"request\">Request</h2>\n<h3 id=\"headers\">Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Required</th>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Content-Type</code></td>\n<td>Yes</td>\n<td><code>application/json</code></td>\n<td>The request body is JSON.</td>\n</tr>\n<tr>\n<td><code>Accept</code></td>\n<td>Recommended</td>\n<td><code>application/json</code></td>\n<td>Asks for a JSON response.</td>\n</tr>\n<tr>\n<td><code>X-Merchant-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant identity. Must match body <code>merchantId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Terminal-Id</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant terminal identity (keep leading zeros). Must match body <code>terminalId</code>.</td>\n</tr>\n<tr>\n<td><code>X-Identification</code></td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Physical terminal identity. Must match body <code>identification</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"body-parameters\">Body parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Value in this request</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>merchantId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant ID that Charge Anywhere issued for this integration. Must be the same as the <code>X-Merchant-Id</code> header.</td>\n</tr>\n<tr>\n<td><code>identification</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Physical terminal / device identity (the same value as the terminal serial number / ManNumber). Must be the same as <code>X-Identification</code>. Identifies the terminal that will process the transaction.</td>\n</tr>\n<tr>\n<td><code>terminalId</code></td>\n<td>string</td>\n<td>Required</td>\n<td><code>\"\"</code></td>\n<td>Merchant terminal ID. Send it as a <strong>string</strong> and keep leading zeros (e.g. <code>0002</code>). Must be the same as <code>X-Terminal-Id</code>.</td>\n</tr>\n<tr>\n<td><code>terminalDateTime</code></td>\n<td>string (date-time)</td>\n<td>Required</td>\n<td><code>\"2026-08-14T18:30:00\"</code></td>\n<td>Local date/time of the calling system, ISO 8601 with no UTC offset: <code>yyyy-MM-ddTHH:mm:ss</code>. Send the actual time of the request. The value shown is an example.</td>\n</tr>\n<tr>\n<td><code>paymentType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>2</code></td>\n<td><code>2</code>: Close Batch is not tied to a tender. A positive value is sent only because the current contract requires one; it doesn't affect routing.</td>\n</tr>\n<tr>\n<td><code>transactionType</code></td>\n<td>integer</td>\n<td>Required</td>\n<td><code>12</code></td>\n<td>Operation. <code>12</code> = Close Batch. See <strong>Transaction types</strong> in the collection overview.</td>\n</tr>\n<tr>\n<td><code>stationNumber</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Station / register number. Returned as a string in <code>EvertecResponse.station_number</code>.</td>\n</tr>\n<tr>\n<td><code>cashierId</code></td>\n<td>integer</td>\n<td>Recommended</td>\n<td><code>1</code></td>\n<td>Cashier / clerk ID. Returned in <code>EvertecResponse.cashier_id</code>.</td>\n</tr>\n<tr>\n<td><code>cardPresent</code></td>\n<td>boolean</td>\n<td>Required</td>\n<td><code>true</code></td>\n<td><code>true</code> sends the request down the asynchronous <strong>card-present</strong> path (a push to the terminal).</td>\n</tr>\n<tr>\n<td><code>tokenNumber</code></td>\n<td>string</td>\n<td>Send <code>\"\"</code></td>\n<td><code>\"\"</code></td>\n<td>Not used for card-present; send an empty string. The terminal reads the card or tender.</td>\n</tr>\n<tr>\n<td><code>amountOfSale</code></td>\n<td>number (2 dp)</td>\n<td>Send <code>0.0</code></td>\n<td><code>0.0</code></td>\n<td>Not used by Close Batch. Send a literal zero; it is not forwarded to the terminal.</td>\n</tr>\n<tr>\n<td><code>tax</code></td>\n<td>number (2 dp)</td>\n<td>Send <code>0.0</code></td>\n<td><code>0.0</code></td>\n<td>Not used by Close Batch. Send a literal zero; it is not forwarded to the terminal.</td>\n</tr>\n<tr>\n<td><code>baseStateTax</code></td>\n<td>number (2 dp)</td>\n<td>Send <code>0.0</code></td>\n<td><code>0.0</code></td>\n<td>Not used by Close Batch. Send a literal zero; it is not forwarded to the terminal.</td>\n</tr>\n<tr>\n<td><code>baseReducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Send <code>0.0</code></td>\n<td><code>0.0</code></td>\n<td>Not used by Close Batch. Send a literal zero; it is not forwarded to the terminal.</td>\n</tr>\n<tr>\n<td><code>stateTax</code></td>\n<td>number (2 dp)</td>\n<td>Send <code>0.0</code></td>\n<td><code>0.0</code></td>\n<td>Not used by Close Batch. Send a literal zero; it is not forwarded to the terminal.</td>\n</tr>\n<tr>\n<td><code>cityTax</code></td>\n<td>number (2 dp)</td>\n<td>Send <code>0.0</code></td>\n<td><code>0.0</code></td>\n<td>Not used by Close Batch. Send a literal zero; it is not forwarded to the terminal.</td>\n</tr>\n<tr>\n<td><code>reducedTax</code></td>\n<td>number (2 dp)</td>\n<td>Send <code>0.0</code></td>\n<td><code>0.0</code></td>\n<td>Not used by Close Batch. Send a literal zero; it is not forwarded to the terminal.</td>\n</tr>\n<tr>\n<td><code>subTotal</code></td>\n<td>number (2 dp)</td>\n<td>Send <code>0.0</code></td>\n<td><code>0.0</code></td>\n<td>Not used by Close Batch. Send a literal zero; it is not forwarded to the terminal.</td>\n</tr>\n<tr>\n<td><code>tips</code></td>\n<td>number (2 dp)</td>\n<td>Send <code>0.0</code></td>\n<td><code>0.0</code></td>\n<td>Not used by Close Batch. Send a literal zero; it is not forwarded to the terminal.</td>\n</tr>\n<tr>\n<td><code>cashBack</code></td>\n<td>number (2 dp)</td>\n<td>Send <code>0.0</code></td>\n<td><code>0.0</code></td>\n<td>Not used by Close Batch. Send a literal zero; it is not forwarded to the terminal.</td>\n</tr>\n<tr>\n<td><code>fee</code></td>\n<td>number (2 dp)</td>\n<td>Send <code>0.0</code></td>\n<td><code>0.0</code></td>\n<td>Not used by Close Batch. Send a literal zero; it is not forwarded to the terminal.</td>\n</tr>\n<tr>\n<td><code>grandTotal</code></td>\n<td>number (2 dp)</td>\n<td>Send <code>0.0</code></td>\n<td><code>0.0</code></td>\n<td>Not used by Close Batch. Send a literal zero; it is not forwarded to the terminal.</td>\n</tr>\n<tr>\n<td><code>appVersion</code></td>\n<td>string</td>\n<td>Recommended</td>\n<td><code>\"1.0.0\"</code></td>\n<td>Version of the calling application. Used for support and compatibility tracking.</td>\n</tr>\n<tr>\n<td><code>timeOut</code></td>\n<td>integer (ms)</td>\n<td>Optional</td>\n<td><code>30000</code></td>\n<td>How long, in ms, the HTTP call waits for the terminal's final result. <code>0</code> returns right after the request is saved and dispatched (<code>Completed=false</code>). With a value above 0, EVUAPI returns as soon as the final result arrives, or when the wait runs out. <strong>When the wait runs out, the terminal transaction is not cancelled.</strong></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"business-rules\">Business rules</h3>\n<ul>\n<li><code>paymentType=2</code> is only here because the current contract requires a positive <code>paymentType</code>. Routing is based on <code>transactionType=12</code>, not on the payment type.</li>\n<li>Send every money field as a literal <code>0.0</code>. Don't send <code>original*</code> fields.</li>\n<li>The terminal settles its current batch and returns totals per tender and host.</li>\n</ul>\n<h2 id=\"response\">Response</h2>\n<h3 id=\"http-status-codes\">HTTP status codes</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>HTTP status</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>200 OK</code></td>\n<td>The request was processed. The body holds the final result (<code>Completed=true</code>).</td>\n</tr>\n<tr>\n<td><code>202 Accepted</code></td>\n<td>The terminal accepted the request, but the result is not final yet (<code>Completed=false</code>). Poll <strong>Get Transaction Status</strong> with <code>RequestId</code>.</td>\n</tr>\n<tr>\n<td><code>4xx</code></td>\n<td>Validation, identity or authorization failure. Fix the request or configuration. <strong>Don't retry it unchanged.</strong></td>\n</tr>\n<tr>\n<td><code>5xx</code></td>\n<td>Service-side failure. Save <code>ErrorId</code> if one is returned. If you have a <code>RequestId</code>, check the status before you consider a retry.</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p><strong>HTTP 200 does not mean approved.</strong> A decline also comes back as <code>200</code> with <code>Status=Declined</code>. Always decide the outcome from <code>Status</code> and <code>Completed</code>.</p>\n</blockquote>\n<h3 id=\"response-body\">Response body</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>RequestId</code></td>\n<td>string</td>\n<td>EVUAPI's ID for this transaction: 32 lowercase hex characters, no hyphens. Save it right away. You need it to get the status and to contact support.</td>\n</tr>\n<tr>\n<td><code>Status</code></td>\n<td>string</td>\n<td>Current lifecycle state. See <strong>Transaction statuses</strong>.</td>\n</tr>\n<tr>\n<td><code>Completed</code></td>\n<td>boolean</td>\n<td><code>true</code> only when <code>Status</code> is final. While it is <code>false</code>, keep polling <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><code>ResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Result code normalized by EVUAPI. See <strong>Response codes</strong>. Keep it as a string (it can have leading zeros). <code>null</code> while not final.</td>\n</tr>\n<tr>\n<td><code>ProcessorResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Raw code from the processor or terminal, such as <code>00</code> or <code>68</code>. An empty string means the processor was never reached.</td>\n</tr>\n<tr>\n<td><code>ResponseText</code></td>\n<td>string (nullable)</td>\n<td>Readable result text from the processor, gateway or EVUAPI. Show it to operators, but don't parse it.</td>\n</tr>\n<tr>\n<td><code>EvertecResponse</code></td>\n<td>object (nullable)</td>\n<td>Processor-specific details. <strong>CNP:</strong> a fixed, ordered shape. <strong>CP:</strong> the terminal's raw final result. <code>null</code> while not final. See the <em>CNP</em> and <em>CP</em> folder docs.</td>\n</tr>\n<tr>\n<td><code>ApprovalCode</code></td>\n<td>string (nullable)</td>\n<td>Processor authorization code, normally 6 characters. It can also be filled in on a <strong>decline</strong>, so never use it alone to decide approval.</td>\n</tr>\n<tr>\n<td><code>GatewayReferenceNumber</code></td>\n<td>string (nullable)</td>\n<td>Charge Anywhere gateway reference: 12 digits, keep the leading zeros. Send it as <code>originalGatewayReferenceNumber</code> on a later Force, Void or Return.</td>\n</tr>\n<tr>\n<td><code>AuthorizedAmount</code></td>\n<td>number (nullable)</td>\n<td>Amount the processor authorized. <code>0</code> on an approved Void. <code>null</code> when nothing was authorized.</td>\n</tr>\n<tr>\n<td><code>TokenNumber</code></td>\n<td>string (nullable)</td>\n<td>CNP: the payment token for the transaction. CP: <code>null</code>. <strong>Sensitive.</strong></td>\n</tr>\n<tr>\n<td><code>CardType</code></td>\n<td>string (nullable)</td>\n<td>Card brand or tender code. See <strong>Card type codes</strong>.</td>\n</tr>\n<tr>\n<td><code>StatusUrl</code></td>\n<td>string</td>\n<td>Relative path of the status resource, e.g. <code>/api/v1/transactions/{RequestId}</code>. Put <code>https://webtest.chargeanywhere.com/evuapi</code> in front and add the three identity query parameters.</td>\n</tr>\n<tr>\n<td><code>ErrorId</code></td>\n<td>string (nullable)</td>\n<td>ID of an error that EVUAPI logged. Give it to Charge Anywhere support.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"evertecresponse\">EvertecResponse</h3>\n<p><code>EvertecResponse</code> holds the terminal's raw settlement result:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Property</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>approval_code</code></td>\n<td><code>00</code> = settlement approved.</td>\n</tr>\n<tr>\n<td><code>authorization_code</code></td>\n<td>Settlement authorization code (<code>000000</code> in the example). Also returned as <code>ApprovalCode</code>.</td>\n</tr>\n<tr>\n<td><code>payment_host</code></td>\n<td><code>SETTLEMENT_ALL</code>.</td>\n</tr>\n<tr>\n<td><code>reference</code></td>\n<td>Terminal reference of the settlement request.</td>\n</tr>\n<tr>\n<td><code>batch_number</code></td>\n<td>Can be empty once the batch has closed.</td>\n</tr>\n<tr>\n<td><code>receipt_output.settle</code></td>\n<td>HTML settlement report for printing.</td>\n</tr>\n<tr>\n<td><code>settlement_data.&lt;HOST&gt;</code></td>\n<td>Totals for each processing host (e.g. <code>ATH1</code>): <code>terminal_vid</code>, <code>merchant_vid</code>, <code>response_message</code> (e.g. <code>BALANCED ... BATCH COMPLETE</code>), plus a count/amount object per tender.</td>\n</tr>\n<tr>\n<td><code>settlement_data.&lt;HOST&gt;.Credit</code></td>\n<td><code>credSalesCount</code>, <code>credSalesAmt</code>, <code>credRefundsCount</code>, <code>credRefundsAmt</code>.</td>\n</tr>\n<tr>\n<td><code>settlement_data.&lt;HOST&gt;.Debit</code></td>\n<td><code>debSalesCount</code>, <code>debSalesAmt</code>, <code>debRefundsCount</code>, <code>debRefundsAmt</code>.</td>\n</tr>\n<tr>\n<td><code>settlement_data.&lt;HOST&gt;.Cash</code></td>\n<td><code>cashSalesCount</code>, <code>cashSalesAmt</code>, <code>cashRefundsCount</code>, <code>cashRefundsAmt</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><p>Counts and amounts are strings. Reconcile them against your own records for the same batch.</p>\n<h3 id=\"how-to-interpret-the-result\">How to interpret the result</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Completed</th>\n<th>Status</th>\n<th>What to do</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>true</code></td>\n<td><code>Approved</code></td>\n<td>The batch closed. Keep the settlement totals and the settlement receipt for reconciliation.</td>\n</tr>\n<tr>\n<td><code>true</code></td>\n<td>anything else</td>\n<td>The batch did not close. Look at <code>ResponseText</code>, then reconcile before you try again.</td>\n</tr>\n<tr>\n<td><code>false</code></td>\n<td>non-final</td>\n<td>Settlement is still running on the terminal. Poll <strong>Get Transaction Status</strong>.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"error-handling\">Error handling</h2>\n<ul>\n<li><strong>Network timeout or no response:</strong> Don't resend the POST automatically. If you got a <code>RequestId</code>, call <strong>Get Transaction Status</strong>. If you didn't, reconcile with your invoice/order reference before you try again.</li>\n<li><strong><code>4xx</code>:</strong> Check the identity headers against the body, the <code>paymentType</code> / <code>transactionType</code> combination, the amount math, and the required fields.</li>\n<li><strong><code>5xx</code>:</strong> Save <code>ErrorId</code> and <code>RequestId</code> (if you have them) and contact support. Check the status before you retry.</li>\n</ul>\n<h2 id=\"testing-in-postman\">Testing in Postman</h2>\n<ul>\n<li><strong>Reads:</strong> <code>https://webtest.chargeanywhere.com/evuapi</code>, <code></code>, <code></code>, <code></code>, <code>1</code>, <code>1</code>, <code>1.0.0</code> and the amount variables. The collection pre-request script recalculates <code>SubTotal</code>, <code>Tax</code> and <code>GrandTotal</code>.</li>\n<li><strong>Writes (test script):</strong> <code>RequestId</code>, <code>OriginalGatewayReferenceNumber</code> (from <code>GatewayReferenceNumber</code>), <code>OriginalAmount</code> (from <code>AuthorizedAmount</code>), <code>OriginalApprovalCode</code> (from <code>ApprovalCode</code>) and <code>ErrorId</code>, <strong>whenever these are in the response</strong>.</li>\n<li>⚠️ Values are saved even when the transaction is <strong>declined</strong>. Before you run a follow-up request, check that the last response was the approved original you meant.</li>\n<li><strong>Tests:</strong> HTTP status is 200/201/202. When <code>EvertecResponse</code> is present, internal correlation fields (<code>last_reference</code>, <code>trx_id</code>, <code>session_id</code>) are not in it.</li>\n</ul>\n<h2 id=\"related-requests\">Related requests</h2>\n<ul>\n<li><strong>CNP → Batch → Close Batch</strong> to settle the gateway batch</li>\n<li><strong>Get Transaction Status</strong> while <code>Completed=false</code></li>\n</ul>\n","urlObject":{"path":["api","v1","transactions"],"host":["https://webtest.chargeanywhere.com/evuapi"],"query":[],"variable":[]}},"response":[{"id":"f77eb419-ec6b-4f57-9213-98a530668baf","name":"200 OK · Batch settled","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Accept","value":"application/json","type":"text"},{"key":"X-Merchant-Id","value":"","type":"text"},{"key":"X-Terminal-Id","value":"","type":"text"},{"key":"X-Identification","value":"","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"merchantId\": \"\",\n  \"identification\": \"\",\n  \"terminalId\": \"\",\n  \"terminalDateTime\": \"2026-08-14T18:30:00\",\n  \"paymentType\": 2,\n  \"transactionType\": 12,\n  \"stationNumber\": 1,\n  \"cashierId\": 1,\n  \"cardPresent\": true,\n  \"tokenNumber\": \"\",\n  \"amountOfSale\": 0.0,\n  \"tax\": 0.0,\n  \"baseStateTax\": 0.0,\n  \"baseReducedTax\": 0.0,\n  \"stateTax\": 0.0,\n  \"cityTax\": 0.0,\n  \"reducedTax\": 0.0,\n  \"subTotal\": 0.0,\n  \"tips\": 0.0,\n  \"cashBack\": 0.0,\n  \"fee\": 0.0,\n  \"grandTotal\": 0.0,\n  \"appVersion\": \"1.0.0\",\n  \"timeOut\": 30000\n}","options":{"raw":{"language":"json"}}},"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions","description":"**Scenario:** The terminal batch settled across all hosts.\n\n- `payment_host=SETTLEMENT_ALL`, `approval_code=00`, `ApprovalCode=000000`.\n- `settlement_data.ATH1` has balanced totals per tender and `response_message` `BALANCED ... BATCH COMPLETE`.\n- `receipt_output.settle` is the HTML settlement report."},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Cache-Control","value":"no-cache,no-cache, no-store"},{"key":"Pragma","value":"no-cache"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Expires","value":"-1,0"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"X-FRAME-OPTIONS","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"Referrer-Policy","value":"no-referrer-when-downgrade"},{"key":"Content-Security-Policy","value":"default-src data: 'unsafe-inline' 'unsafe-eval' https:; img-src * data:;"},{"key":"Date","value":"Fri, 25 Sep 2026 13:50:15 GMT"},{"key":"Content-Length","value":"1895"}],"cookie":[],"responseTime":null,"body":"{\n    \"RequestId\": \"1ce21c52a97b4983b643863ac83ec5ab\",\n    \"Status\": \"Approved\",\n    \"Completed\": true,\n    \"ResponseCode\": \"000\",\n    \"ProcessorResponseCode\": \"00\",\n    \"ResponseText\": \"APPROVED.\",\n    \"EvertecResponse\": {\n        \"approval_code\": \"00\",\n        \"cashier_id\": \"1\",\n        \"batch_number\": \"\",\n        \"settlement_data\": {\n            \"ATH1\": {\n                \"terminal_vid\": \"40000001\",\n                \"Debit\": {\n                    \"debSalesCount\": \"3\",\n                    \"debSalesAmt\": \"78.00\",\n                    \"debRefundsAmt\": \"0.00\",\n                    \"debRefundsCount\": \"0\"\n                },\n                \"Credit\": {\n                    \"credSalesAmt\": \"52.00\",\n                    \"credRefundsAmt\": \"26.00\",\n                    \"credRefundsCount\": \"1\",\n                    \"credSalesCount\": \"2\"\n                },\n                \"response_message\": \"\\\" BALANCED  002       BATCH COMPLETE     \\\"\",\n                \"Cash\": {\n                    \"cashSalesCount\": \"1\",\n                    \"cashRefundsAmt\": \"26.00\",\n                    \"cashRefundsCount\": \"1\",\n                    \"cashSalesAmt\": \"26.00\"\n                },\n                \"merchant_vid\": \"4549000000123\"\n            }\n        },\n        \"merchant_id\": \"4549000000123\",\n        \"reference\": \"13\",\n        \"station_number\": \"1\",\n        \"receipt_output\": {\n            \"settle\": \"<html><body><!-- Receipt HTML shortened for documentation --><p>SETTLEMENT REPORT</p></body></html>\"\n        },\n        \"response_message\": \"APPROVED.\",\n        \"authorization_code\": \"000000\",\n        \"payment_host\": \"SETTLEMENT_ALL\",\n        \"terminal_id\": \"40000001\"\n    },\n    \"ApprovalCode\": \"000000\",\n    \"GatewayReferenceNumber\": null,\n    \"AuthorizedAmount\": null,\n    \"TokenNumber\": null,\n    \"CardType\": null,\n    \"StatusUrl\": \"/api/v1/transactions/1ce21c52a97b4983b643863ac83ec5ab\",\n    \"ErrorId\": null\n}"}],"_postman_id":"e7d98058-38a8-46c6-af6b-5ba9b8316c92"}],"id":"322d646d-bd6d-4093-b621-b544221d87b0","description":"<h1 id=\"cp-·-batch\">CP · Batch</h1>\n<p>Settles the current <strong>terminal</strong> batch.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>transactionType</code></td>\n<td><code>12</code> (Close Batch)</td>\n</tr>\n<tr>\n<td><code>paymentType</code></td>\n<td><code>2</code>: needed only because the contract requires a positive value. It does not affect routing.</td>\n</tr>\n<tr>\n<td><code>cardPresent</code></td>\n<td><code>true</code></td>\n</tr>\n<tr>\n<td>Money fields</td>\n<td>Literal <code>0.0</code>. They are not forwarded to the terminal.</td>\n</tr>\n<tr>\n<td>Result</td>\n<td><code>EvertecResponse.settlement_data</code> with totals per host and per tender, plus an HTML settlement receipt</td>\n</tr>\n</tbody>\n</table>\n</div>","_postman_id":"322d646d-bd6d-4093-b621-b544221d87b0"}],"id":"c130ea1d-0fd5-4ed2-804a-a492a7ce412e","description":"<h1 id=\"card-present-cp\">Card-present (CP)</h1>\n<p>CP transactions run on the merchant's Charge Anywhere payment terminal. EVUAPI sends the request to the terminal, the cardholder completes the payment there, and the result comes back <strong>asynchronously</strong>.</p>\n<h2 id=\"flow\">Flow</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-text\">1. Merchant app ──POST /transactions (cardPresent=true)──► EVUAPI      RequestId created, status Pending\n2. EVUAPI ──► Terminal ──► Evertec                                     cardholder interaction and authorization\n3. Terminal ──status updates / final result──► EVUAPI\n4. Merchant app ◄── final (200) or not final (202)\n5. Merchant app ──GET /transactions/{RequestId}──► EVUAPI              poll until Completed=true\n</code></pre>\n<h2 id=\"timeout-and-polling\">timeOut and polling</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>timeOut</th>\n<th>Behavior</th>\n<th>What your application does</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>0</code></td>\n<td>Returns right after the request is accepted and dispatched (<code>Completed=false</code>).</td>\n<td>Save <code>RequestId</code> and start polling.</td>\n</tr>\n<tr>\n<td><code>&gt; 0</code> (e.g. <code>30000</code>)</td>\n<td>Waits up to that many ms and returns as soon as the final result arrives.</td>\n<td>If <code>Completed=false</code> when it returns, keep polling.</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p><strong>When <code>timeOut</code> runs out, the terminal transaction is not cancelled.</strong> The cardholder may still be at the terminal. Never start a second transaction because the first one is still pending.</p>\n</blockquote>\n<h2 id=\"transaction-statuses\">Transaction statuses</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Status</th>\n<th>Final?</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Pending</code></td>\n<td>No</td>\n<td>EVUAPI saved the CP request. Dispatch to the terminal is queued.</td>\n</tr>\n<tr>\n<td><code>SentToTerminal</code></td>\n<td>No</td>\n<td>The request was sent to the terminal.</td>\n</tr>\n<tr>\n<td><code>ReceivedByTerminal</code></td>\n<td>No</td>\n<td>The terminal confirmed it received the request.</td>\n</tr>\n<tr>\n<td><code>Processing</code></td>\n<td>No</td>\n<td>The terminal is working with the cardholder, or the processor is working on the request.</td>\n</tr>\n<tr>\n<td><code>Approved</code></td>\n<td><strong>Yes</strong></td>\n<td>The transaction was approved. Check that <code>Completed=true</code>.</td>\n</tr>\n<tr>\n<td><code>Declined</code></td>\n<td><strong>Yes</strong></td>\n<td>The processor or gateway declined the transaction. Check that <code>Completed=true</code>.</td>\n</tr>\n<tr>\n<td><code>Failed</code></td>\n<td><strong>Yes</strong></td>\n<td>Processing could not complete successfully.</td>\n</tr>\n<tr>\n<td><code>TimedOut</code></td>\n<td><strong>Yes</strong></td>\n<td>The terminal workflow hit its processing deadline.</td>\n</tr>\n<tr>\n<td><code>Cancelled</code></td>\n<td><strong>Yes</strong></td>\n<td>The transaction was cancelled before it was approved.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"cp-evertecresponse\">CP EvertecResponse</h2>\n<p>For CP, <code>EvertecResponse</code> is the terminal's final result, with internal correlation fields (<code>last_reference</code>, <code>trx_id</code>, <code>session_id</code>) removed. Which keys appear depends on the tender, the entry mode and the operation, so <strong>treat every property as optional</strong> and ignore keys you don't recognize.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Property</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>trace_number</code></td>\n<td>Terminal trace number.</td>\n</tr>\n<tr>\n<td><code>batch_number</code></td>\n<td>Terminal batch number.</td>\n</tr>\n<tr>\n<td><code>card_acceptor_id</code></td>\n<td>Card acceptor ID (<code>NONE</code> in the examples).</td>\n</tr>\n<tr>\n<td><code>special_account</code></td>\n<td>Account-type code: <code>VC</code>/<code>MC</code>/<code>AX</code>/<code>DC</code> for credit, <code>IC</code> Cash, <code>AT</code> Debit, <code>AM</code> ATH Móvil.</td>\n</tr>\n<tr>\n<td><code>merchant_id</code> / <code>merchant_vid</code></td>\n<td>Evertec merchant IDs.</td>\n</tr>\n<tr>\n<td><code>terminal_id</code> / <code>terminal_vid</code></td>\n<td>Evertec terminal IDs.</td>\n</tr>\n<tr>\n<td><code>pan_card_number</code></td>\n<td>Last four characters of the card number or tender identifier. For Cash and ATH Móvil this is <strong>not</strong> a card number.</td>\n</tr>\n<tr>\n<td><code>reference</code></td>\n<td>Terminal reference number of this transaction.</td>\n</tr>\n<tr>\n<td><code>target_reference</code></td>\n<td><em>Force / Void only.</em> Terminal <code>reference</code> of the original transaction this one acts on.</td>\n</tr>\n<tr>\n<td><code>invoice_number</code></td>\n<td>Terminal invoice number (6 digits).</td>\n</tr>\n<tr>\n<td><code>receipt_output</code></td>\n<td>HTML receipts: <code>merchant</code>, <code>customer</code> (not always returned, e.g. ATH Móvil), or <code>settle</code> (Close Batch). Receipts can contain the masked PAN, EMV data and a <strong>base64 signature image</strong>, so store them as sensitive.</td>\n</tr>\n<tr>\n<td><code>amounts</code></td>\n<td>Amount breakdown as decimal strings. Keys that don't apply (for example <code>tip</code> on a Force or Return) may be left out.</td>\n</tr>\n<tr>\n<td><code>authorization_code</code></td>\n<td>Processor authorization code.</td>\n</tr>\n<tr>\n<td><code>approval_code</code></td>\n<td>Raw terminal <strong>response</strong> code (<code>00</code> = approved, <code>ZY</code> = declined). EVUAPI normalizes it into <code>ResponseCode</code>.</td>\n</tr>\n<tr>\n<td><code>response_message</code></td>\n<td>Processor message. Also returned as <code>ResponseText</code>.</td>\n</tr>\n<tr>\n<td><code>emv_data</code></td>\n<td>EMV tag → value map, present only when the chip was read (chip / contactless). Examples: <code>84</code> AID, <code>95</code> TVR, <code>9B</code> TSI, <code>9F12</code> application name, <code>9F26</code> application cryptogram, <code>9F37</code> unpredictable number.</td>\n</tr>\n<tr>\n<td><code>entry_type</code></td>\n<td>How the payment was captured. Seen: <code>CTLS</code> (contactless), <code>MANUAL</code>.</td>\n</tr>\n<tr>\n<td><code>signature_indicator</code></td>\n<td><code>SIGN</code> or <code>NOSIGN</code>.</td>\n</tr>\n<tr>\n<td><code>manual_entry_indicator</code> / <code>fallback</code> / <code>process_cashback</code> / <code>receipt_email</code></td>\n<td><code>yes</code> / <code>no</code> flags from the terminal.</td>\n</tr>\n<tr>\n<td><code>card_bin_type</code></td>\n<td>Seen: <code>VISA</code>, <code>MASTERCARD</code>, <code>CASH_CARD</code>, <code>ATH_MOVIL</code>.</td>\n</tr>\n<tr>\n<td><code>transaction_type_indicator</code></td>\n<td><code>C</code> Credit, <code>D</code> Debit, <code>I</code> Cash, <code>A</code> ATH Móvil.</td>\n</tr>\n<tr>\n<td><code>ivu</code></td>\n<td><code>{ control_line1, control_line2 }</code>: Puerto Rico IVU control lines for the receipt.</td>\n</tr>\n<tr>\n<td><code>ath_trans_id</code></td>\n<td><em>ATH Móvil only.</em> ATH Móvil transaction ID.</td>\n</tr>\n<tr>\n<td><code>transaction_date</code> / <code>transaction_time</code></td>\n<td><code>MMddyyyy</code> / <code>HHmmss</code>.</td>\n</tr>\n<tr>\n<td><code>cashier_id</code> / <code>station_number</code></td>\n<td>Cashier and station, taken from the request.</td>\n</tr>\n<tr>\n<td><code>payment_host</code></td>\n<td><code>ATH1</code> for payments. <code>SETTLEMENT_ALL</code> for Close Batch.</td>\n</tr>\n<tr>\n<td><code>settlement_data</code></td>\n<td><em>Close Batch only.</em> Settlement totals per host. See <strong>CP → Batch → Close Batch</strong>.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"result-mapping\">Result mapping</h2>\n<p>EVUAPI builds <code>ResponseCode</code> from the terminal's <code>approval_code</code> and <code>response_message</code> (case-insensitive, trimmed). <code>ProcessorResponseCode</code> keeps the raw <code>approval_code</code>, and <code>ResponseText</code> keeps <code>response_message</code>.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Terminal approval_code</th>\n<th>response_message</th>\n<th>ResponseCode</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>00</code></td>\n<td>any</td>\n<td><code>000</code></td>\n</tr>\n<tr>\n<td><code>10</code></td>\n<td>any</td>\n<td><code>010</code></td>\n</tr>\n<tr>\n<td><code>ZY</code></td>\n<td><code>DECLINED</code>, <code>INSUFFICIENT FUNDS</code>, <code>REFERRAL</code>, <code>HOLD CARD</code>, <code>DENIED</code></td>\n<td><code>FFE</code></td>\n</tr>\n<tr>\n<td>anything else</td>\n<td>any</td>\n<td><code>FFF</code></td>\n</tr>\n</tbody>\n</table>\n</div>","_postman_id":"c130ea1d-0fd5-4ed2-804a-a492a7ce412e"},{"name":"Get Transaction Status","event":[{"listen":"test","script":{"type":"text/javascript","exec":["let body = {};","try { body = pm.response.json(); } catch (e) {}","const requestId = body.requestId || body.RequestId;","const gatewayReferenceNumber = body.gatewayReferenceNumber || body.GatewayReferenceNumber;","const authorizedAmount = body.authorizedAmount !== undefined ? body.authorizedAmount : body.AuthorizedAmount;","const errorId = body.errorId || body.ErrorId;","if (requestId) pm.collectionVariables.set('RequestId', requestId);","if (gatewayReferenceNumber) pm.collectionVariables.set('OriginalGatewayReferenceNumber', gatewayReferenceNumber);","if (authorizedAmount !== undefined && authorizedAmount !== null) pm.collectionVariables.set('OriginalAmount', authorizedAmount);","if (errorId) pm.collectionVariables.set('ErrorId', errorId);","pm.test('Status request succeeded', function () { pm.expect(pm.response.code).to.eql(200); });","const originalApprovalCode = body.approvalCode || body.ApprovalCode || (body.data && (body.data.approvalCode || body.data.ApprovalCode));","if (originalApprovalCode) pm.collectionVariables.set('OriginalApprovalCode', originalApprovalCode);","","// Get Transaction Status is shared by CP and CNP.","// CNP-only ordered-shape/static assertions stay on synchronous CNP POST requests because RequestId alone does not identify the stored transaction mode.","const evertecResponse = body.EvertecResponse || body.evertecResponse;","if (evertecResponse && typeof evertecResponse === 'object') {","  pm.test('EvertecResponse suppresses App2-only correlation fields', function () {","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'last_reference')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'trx_id')).to.eql(false);","    pm.expect(Object.prototype.hasOwnProperty.call(evertecResponse, 'session_id')).to.eql(false);","  });","}"],"id":"53a43e19-229d-4d66-85b6-9bd4e5a1257c"}}],"id":"a8885cc4-0fd4-4e21-ac37-c7f9b203d685","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions/?merchantId=&terminalId=&identification=","description":"<h1 id=\"get-transaction-status\">Get Transaction Status</h1>\n<blockquote>\n<p>Gets the current status, and the result once one exists, of a transaction submitted through EVUAPI. CNP and CP share this endpoint.</p>\n</blockquote>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Attribute</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Endpoint</strong></td>\n<td><code>GET https://webtest.chargeanywhere.com/evuapi/api/v1/transactions/{RequestId}</code></td>\n</tr>\n<tr>\n<td><strong>Caller</strong></td>\n<td>Merchant or POS application</td>\n</tr>\n<tr>\n<td><strong>Authentication</strong></td>\n<td>Merchant identity sent as <strong>query parameters</strong> (<code>merchantId</code>, <code>terminalId</code>, <code>identification</code>).</td>\n</tr>\n<tr>\n<td><strong>Safe / idempotent</strong></td>\n<td>Yes. Read-only; you can call it again safely.</td>\n</tr>\n<tr>\n<td><strong>Typical use</strong></td>\n<td>Poll a CP transaction until <code>Completed=true</code>, or recover the result after a timeout or lost response.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"overview\">Overview</h2>\n<p>Card-present transactions finish asynchronously on the terminal, so the create call often returns before a result exists (<code>Completed=false</code>). Use this endpoint with the <code>RequestId</code> from the create response to follow the transaction until it reaches a final status. For CNP, the create response is normally final already. Use this endpoint only to recover a result you lost.</p>\n<h2 id=\"request\">Request</h2>\n<h3 id=\"path-parameters\">Path parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>RequestId</code></td>\n<td>string</td>\n<td>Yes</td>\n<td>The <code>RequestId</code> returned by the create-transaction call (32 hex characters). Postman fills in <code></code> automatically after each transaction request.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"query-parameters\">Query parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Type</th>\n<th>Required</th>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>merchantId</code></td>\n<td>string</td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant identity used to authorize access to the transaction.</td>\n</tr>\n<tr>\n<td><code>terminalId</code></td>\n<td>string</td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Merchant terminal identity (keep leading zeros).</td>\n</tr>\n<tr>\n<td><code>identification</code></td>\n<td>string</td>\n<td>Yes</td>\n<td><code></code></td>\n<td>Physical terminal identity (the same value as SerialNumber / ManNumber).</td>\n</tr>\n</tbody>\n</table>\n</div><p>EVUAPI checks that the transaction belongs to this merchant/terminal identity. The values must match the ones used when the transaction was created.</p>\n<h3 id=\"headers\">Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Required</th>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Accept</code></td>\n<td>Recommended</td>\n<td><code>application/json</code></td>\n<td>Asks for a JSON response.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"response\">Response</h2>\n<h3 id=\"http-status-codes\">HTTP status codes</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>HTTP status</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>200 OK</code></td>\n<td>The transaction was found. Check <code>Completed</code> and <code>Status</code>.</td>\n</tr>\n<tr>\n<td><code>4xx</code></td>\n<td>Missing or mismatched identity, or unknown <code>RequestId</code>. Check the environment, the <code>RequestId</code> and the identity values before you escalate.</td>\n</tr>\n<tr>\n<td><code>5xx</code></td>\n<td>Service-side failure. Retry with bounded exponential backoff. Save <code>ErrorId</code>.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response-body\">Response body</h3>\n<p>The body has the same shape as the create-transaction response.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>RequestId</code></td>\n<td>string</td>\n<td>EVUAPI's ID for this transaction: 32 lowercase hex characters, no hyphens. Save it right away. You need it to get the status and to contact support.</td>\n</tr>\n<tr>\n<td><code>Status</code></td>\n<td>string</td>\n<td>Current lifecycle state. See <strong>Transaction statuses</strong>.</td>\n</tr>\n<tr>\n<td><code>Completed</code></td>\n<td>boolean</td>\n<td><code>true</code> only when <code>Status</code> is final. While it is <code>false</code>, keep polling <strong>Get Transaction Status</strong>.</td>\n</tr>\n<tr>\n<td><code>ResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Result code normalized by EVUAPI. See <strong>Response codes</strong>. Keep it as a string (it can have leading zeros). <code>null</code> while not final.</td>\n</tr>\n<tr>\n<td><code>ProcessorResponseCode</code></td>\n<td>string (nullable)</td>\n<td>Raw code from the processor or terminal, such as <code>00</code> or <code>68</code>. An empty string means the processor was never reached.</td>\n</tr>\n<tr>\n<td><code>ResponseText</code></td>\n<td>string (nullable)</td>\n<td>Readable result text from the processor, gateway or EVUAPI. Show it to operators, but don't parse it.</td>\n</tr>\n<tr>\n<td><code>EvertecResponse</code></td>\n<td>object (nullable)</td>\n<td>Processor-specific details. <strong>CNP:</strong> a fixed, ordered shape. <strong>CP:</strong> the terminal's raw final result. <code>null</code> while not final. See the <em>CNP</em> and <em>CP</em> folder docs.</td>\n</tr>\n<tr>\n<td><code>ApprovalCode</code></td>\n<td>string (nullable)</td>\n<td>Processor authorization code, normally 6 characters. It can also be filled in on a <strong>decline</strong>, so never use it alone to decide approval.</td>\n</tr>\n<tr>\n<td><code>GatewayReferenceNumber</code></td>\n<td>string (nullable)</td>\n<td>Charge Anywhere gateway reference: 12 digits, keep the leading zeros. Send it as <code>originalGatewayReferenceNumber</code> on a later Force, Void or Return.</td>\n</tr>\n<tr>\n<td><code>AuthorizedAmount</code></td>\n<td>number (nullable)</td>\n<td>Amount the processor authorized. <code>0</code> on an approved Void. <code>null</code> when nothing was authorized.</td>\n</tr>\n<tr>\n<td><code>TokenNumber</code></td>\n<td>string (nullable)</td>\n<td>CNP: the payment token for the transaction. CP: <code>null</code>. <strong>Sensitive.</strong></td>\n</tr>\n<tr>\n<td><code>CardType</code></td>\n<td>string (nullable)</td>\n<td>Card brand or tender code. See <strong>Card type codes</strong>.</td>\n</tr>\n<tr>\n<td><code>StatusUrl</code></td>\n<td>string</td>\n<td>Relative path of the status resource, e.g. <code>/api/v1/transactions/{RequestId}</code>. Put <code>https://webtest.chargeanywhere.com/evuapi</code> in front and add the three identity query parameters.</td>\n</tr>\n<tr>\n<td><code>ErrorId</code></td>\n<td>string (nullable)</td>\n<td>ID of an error that EVUAPI logged. Give it to Charge Anywhere support.</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"evertecresponse\">EvertecResponse</h3>\n<ul>\n<li><strong>CP transactions:</strong> the terminal's raw final result, with internal correlation fields removed. IVU data stays under <code>EvertecResponse.ivu</code>; there is no separate top-level <code>ivu</code>.</li>\n<li><strong>CNP transactions:</strong> the same complete, ordered 31-property CNP shape the create call returns, with the same static values and mappings, and explicit <code>null</code> placeholders.</li>\n<li><code>null</code> while <code>Completed=false</code>.</li>\n</ul>\n<h2 id=\"polling-guidance\">Polling guidance</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Result</th>\n<th>What to do</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Completed=false</code></td>\n<td>Save the latest <code>Status</code>, wait, and poll again.</td>\n</tr>\n<tr>\n<td><code>Completed=true</code></td>\n<td>Save the final response and <strong>stop polling</strong>.</td>\n</tr>\n<tr>\n<td>Status call times out</td>\n<td>Retry this GET with bounded backoff. <strong>Don't</strong> send a replacement transaction.</td>\n</tr>\n<tr>\n<td>Transaction not found</td>\n<td>Check the environment, <code>RequestId</code> and the three identity values.</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Starting point (adjust to the cadence agreed for your integration):</strong> poll every 2 seconds for the first 10 seconds, then back off to every 5 seconds with jitter. Stop at an overall deadline that suits the checkout experience (for example 3 minutes for CP). Don't busy-loop.</p>\n<h2 id=\"testing-in-postman\">Testing in Postman</h2>\n<ul>\n<li><strong>Writes (test script):</strong> <code>RequestId</code>, <code>OriginalGatewayReferenceNumber</code>, <code>OriginalAmount</code>, <code>OriginalApprovalCode</code> and <code>ErrorId</code>, when present.</li>\n<li><strong>Tests:</strong> HTTP status is <code>200</code>. When <code>EvertecResponse</code> is present, the internal correlation fields are not in it.</li>\n<li>The strict ordered-shape checks for CNP run only on the CNP POST requests, because a <code>RequestId</code> alone doesn't say which channel the transaction used.</li>\n</ul>\n","urlObject":{"path":["api","v1","transactions",""],"host":["https://webtest.chargeanywhere.com/evuapi"],"query":[{"description":{"content":"<p>Merchant identity used to authorize access to the transaction.</p>\n","type":"text/plain"},"key":"merchantId","value":""},{"description":{"content":"<p>Merchant terminal identifier used to authorize access to the transaction.</p>\n","type":"text/plain"},"key":"terminalId","value":""},{"description":{"content":"<p>Physical terminal identity; same logical identity as SerialNumber/ManNumber.</p>\n","type":"text/plain"},"key":"identification","value":""}],"variable":[]}},"response":[{"id":"f4f5d2ff-9d15-40e5-be92-0ac2614f171d","name":"200 OK · Final (ATH Móvil Sale approved)","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"https://webtest.chargeanywhere.com/evuapi/api/v1/transactions/?merchantId=&terminalId=&identification=","host":["https://webtest.chargeanywhere.com/evuapi"],"path":["api","v1","transactions",""],"query":[{"key":"merchantId","value":"","description":"Merchant identity used to authorize access to the transaction."},{"key":"terminalId","value":"","description":"Merchant terminal identifier used to authorize access to the transaction."},{"key":"identification","value":"","description":"Physical terminal identity; same logical identity as SerialNumber/ManNumber."}]},"description":"**Scenario:** Status lookup for a card-present ATH Móvil Sale that has reached its final state.\n\n- `Completed=true`, so stop polling.\n- The body has the same shape as the create response. `EvertecResponse` is the terminal's final result."},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Cache-Control","value":"no-cache,no-cache, no-store"},{"key":"Pragma","value":"no-cache"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Expires","value":"-1,0"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"X-FRAME-OPTIONS","value":"SAMEORIGIN"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Strict-Transport-Security","value":"max-age=31536000; includeSubDomains"},{"key":"Referrer-Policy","value":"no-referrer-when-downgrade"},{"key":"Content-Security-Policy","value":"default-src data: 'unsafe-inline' 'unsafe-eval' https:; img-src * data:;"},{"key":"Date","value":"Thu, 24 Sep 2026 12:08:51 GMT"},{"key":"Content-Length","value":"1928"}],"cookie":[],"responseTime":null,"body":"{\n    \"RequestId\": \"29ed372d095c4073b39e144e2a6ab0ab\",\n    \"Status\": \"Approved\",\n    \"Completed\": true,\n    \"ResponseCode\": \"000\",\n    \"ProcessorResponseCode\": \"00\",\n    \"ResponseText\": \"APPROVED.\",\n    \"EvertecResponse\": {\n        \"trace_number\": \"000016\",\n        \"batch_number\": \"2\",\n        \"card_acceptor_id\": \"NONE\",\n        \"special_account\": \"AM\",\n        \"merchant_id\": \"4549000000123\",\n        \"pan_card_number\": \"1208\",\n        \"reference\": \"38\",\n        \"receipt_output\": {\n            \"merchant\": \"<html><body><!-- Receipt HTML shortened for documentation --><p>MERCHANT COPY</p></body></html>\"\n        },\n        \"amounts\": {\n            \"total\": \"26.00\",\n            \"base_state_tax\": \"10.00\",\n            \"tip\": \"0.00\",\n            \"reduced_tax\": \"3.00\",\n            \"base_reduced_tax\": \"10.00\",\n            \"state_tax\": \"1.00\",\n            \"city_tax\": \"2.00\"\n        },\n        \"authorization_code\": \"104892\",\n        \"signature_indicator\": \"NOSIGN\",\n        \"transaction_time\": \"080737\",\n        \"payment_host\": \"ATH1\",\n        \"invoice_number\": \"000945\",\n        \"terminal_id\": \"40000001\",\n        \"transaction_date\": \"09242026\",\n        \"approval_code\": \"00\",\n        \"cashier_id\": \"1\",\n        \"manual_entry_indicator\": \"no\",\n        \"ivu\": {\n            \"control_line1\": \"CONTROL: HVS3F-FF6VU\",\n            \"control_line2\": \"ET                  \"\n        },\n        \"process_cashback\": \"no\",\n        \"card_bin_type\": \"ATH_MOVIL\",\n        \"station_number\": \"1\",\n        \"response_message\": \"APPROVED.\",\n        \"receipt_email\": \"yes\",\n        \"transaction_type_indicator\": \"A\",\n        \"ath_trans_id\": \"0000000000420862\",\n        \"entry_type\": \"MANUAL\"\n    },\n    \"ApprovalCode\": \"104892\",\n    \"GatewayReferenceNumber\": \"000004588693\",\n    \"AuthorizedAmount\": 26,\n    \"TokenNumber\": null,\n    \"CardType\": \"994\",\n    \"StatusUrl\": \"/api/v1/transactions/29ed372d095c4073b39e144e2a6ab0ab\",\n    \"ErrorId\": null\n}"}],"_postman_id":"a8885cc4-0fd4-4e21-ac37-c7f9b203d685"}],"id":"512ae5d6-32c7-4daf-94e7-a3b54bd937a5","description":"<h1 id=\"transactions\">Transactions</h1>\n<p>Everything a merchant application does goes through two resources:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Method</th>\n<th>Path</th>\n<th>Purpose</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>POST</code></td>\n<td><code>/api/v1/transactions</code></td>\n<td>Create a transaction or batch operation. <code>cardPresent</code>, <code>paymentType</code> and <code>transactionType</code> pick the route.</td>\n</tr>\n<tr>\n<td><code>GET</code></td>\n<td><code>/api/v1/transactions/{RequestId}</code></td>\n<td>Get the current status or the final result.</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"request-catalogue\">Request catalogue</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Request</th>\n<th>transactionType</th>\n<th>paymentType</th>\n<th>cardPresent</th>\n<th>Model</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>CNP · Credit · Sale</td>\n<td>1</td>\n<td>2</td>\n<td>false</td>\n<td>Sync</td>\n</tr>\n<tr>\n<td>CNP · Credit · Auth</td>\n<td>6</td>\n<td>2</td>\n<td>false</td>\n<td>Sync</td>\n</tr>\n<tr>\n<td>CNP · Credit · Force</td>\n<td>4</td>\n<td>2</td>\n<td>false</td>\n<td>Sync</td>\n</tr>\n<tr>\n<td>CNP · Credit · Void</td>\n<td>2</td>\n<td>2</td>\n<td>false</td>\n<td>Sync</td>\n</tr>\n<tr>\n<td>CNP · Credit · Return</td>\n<td>3</td>\n<td>2</td>\n<td>false</td>\n<td>Sync</td>\n</tr>\n<tr>\n<td>CNP · Batch · Close Batch</td>\n<td>12</td>\n<td>0</td>\n<td>false</td>\n<td>Sync</td>\n</tr>\n<tr>\n<td>CP · Credit · Sale / Auth / Force / Void / Return</td>\n<td>1 / 6 / 4 / 2 / 3</td>\n<td>2</td>\n<td>true</td>\n<td>Async</td>\n</tr>\n<tr>\n<td>CP · Cash · Sale / Return</td>\n<td>1 / 3</td>\n<td>5</td>\n<td>true</td>\n<td>Async</td>\n</tr>\n<tr>\n<td>CP · ATH Móvil · Sale / Return</td>\n<td>1 / 3</td>\n<td>13</td>\n<td>true</td>\n<td>Async</td>\n</tr>\n<tr>\n<td>CP · Batch · Close Batch</td>\n<td>12</td>\n<td>2</td>\n<td>true</td>\n<td>Async</td>\n</tr>\n<tr>\n<td>Get Transaction Status</td>\n<td>n/a</td>\n<td>n/a</td>\n<td>n/a</td>\n<td>Read</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"transaction-chaining\">Transaction chaining</h2>\n<p>Follow-up transactions refer back to an earlier one:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-text\">Auth (6) ──► Force (4)           completes the authorization\nSale (1) ──► Void (2)            cancels before settlement\nSale (1) ──► Return (3)          refunds, usually after settlement\nForce (4) ─► Void (2) / Return (3)\n</code></pre>\n<p>Every follow-up sends the original transaction's <code>originalAmount</code>, <code>originalApprovalCode</code> and <code>originalGatewayReferenceNumber</code>. The request test scripts save these from each response into <code></code>, <code></code> and <code></code>.</p>\n<h2 id=\"recommended-run-order-in-postman\">Recommended run order in Postman</h2>\n<ol>\n<li><strong>Sale</strong> → <strong>Void</strong> (or <strong>Return</strong>)</li>\n<li><strong>Auth</strong> → <strong>Force</strong> → <strong>Return</strong></li>\n<li>For CP, run <strong>Get Transaction Status</strong> after any response with <code>Completed=false</code>.</li>\n<li><strong>Close Batch</strong> at the end of the test cycle.</li>\n</ol>\n<p>Run the chain for one channel at a time. The <code>Original*</code> variables always hold the <strong>most recent</strong> response, and that includes declines.</p>\n<h2 id=\"common-contract-rules\">Common contract rules</h2>\n<ul>\n<li>CNP requests use <code>cardPresent=false</code> and a <code>tokenNumber</code>. CP requests use <code>cardPresent=true</code> and an empty <code>tokenNumber</code>.</li>\n<li>Sale and Auth are originating transactions and don't send <code>original*</code> fields.</li>\n<li>Void always uses <code>transactionType=2</code> and identifies the original by <code>originalGatewayReferenceNumber</code>.</li>\n<li>Identify the register and operator with <code>stationNumber</code> and <code>cashierId</code>.</li>\n<li>CNP and CP share <strong>Get Transaction Status</strong>.</li>\n</ul>\n","_postman_id":"512ae5d6-32c7-4daf-94e7-a3b54bd937a5"}],"event":[{"listen":"prerequest","script":{"type":"text/javascript","requests":{},"exec":["function numberValue(name) {","  const value = Number(pm.variables.get(name));","  return Number.isFinite(value) ? value : 0;","}","","// Read the effective Postman values. This honors normal scope precedence,","// so Environment values override Collection defaults when both exist.","const amountOfSale = numberValue('AmountOfSale');","const stateTax = numberValue('StateTax');","const cityTax = numberValue('CityTax');","const reducedTax = numberValue('ReducedTax');","const tips = numberValue('Tips');","const cashBack = numberValue('CashBack');","const fee = numberValue('Fee');","","const subTotal = amountOfSale;","const tax = stateTax + cityTax + reducedTax;","const grandTotal = subTotal + tax + tips + cashBack + fee;","","// Set calculated values in local/request scope. These values then win over","// Environment and Collection values when 20.00, 6.00, and","// 26.00 are resolved for the outgoing request.","pm.variables.set('SubTotal', subTotal.toFixed(2));","pm.variables.set('Tax', tax.toFixed(2));","pm.variables.set('GrandTotal', grandTotal.toFixed(2));","","console.log('Calculated transaction totals:', {","  amountOfSale: amountOfSale.toFixed(2),","  subTotal: subTotal.toFixed(2),","  stateTax: stateTax.toFixed(2),","  cityTax: cityTax.toFixed(2),","  reducedTax: reducedTax.toFixed(2),","  tax: tax.toFixed(2),","  tips: tips.toFixed(2),","  cashBack: cashBack.toFixed(2),","  fee: fee.toFixed(2),","  grandTotal: grandTotal.toFixed(2)","});"],"id":"dbf7d5cc-189d-46c8-8008-20afc8b50513"}},{"listen":"test","script":{"type":"text/javascript","requests":{},"exec":["let responseBody = {};","try { responseBody = pm.response.json(); } catch (e) {}","const errorId = responseBody.errorId || responseBody.ErrorId ||","  (responseBody.data && (responseBody.data.errorId || responseBody.data.ErrorId));","if (errorId) {","  pm.collectionVariables.set('ErrorId', errorId);","  console.log('ErrorId saved to collection variables:', errorId);","}","const originalApprovalCode = responseBody.approvalCode || responseBody.ApprovalCode || (responseBody.data && (responseBody.data.approvalCode || responseBody.data.ApprovalCode));","if (originalApprovalCode) {","  pm.collectionVariables.set('OriginalApprovalCode', originalApprovalCode);","  console.log('Saved OriginalApprovalCode:', originalApprovalCode);","}"],"id":"4a9b549e-8a5a-4855-86a9-222b0d6bd9fe"}}],"variable":[{"key":"BaseUrl","value":"https://webtest.chargeanywhere.com/evuapi","description":"EVUAPI base URL, with no trailing slash. Sandbox: https://webtest.chargeanywhere.com/evuapi. Override it in your environment."},{"key":"RequestId","value":"","description":"RequestId of the latest transaction. Set automatically, and used by Get Transaction Status."},{"key":"MerchantId","value":"","description":"Merchant ID issued during onboarding. Set it in your environment (secret). Sent as X-Merchant-Id, body merchantId and status query merchantId."},{"key":"Identification","value":"","description":"Physical terminal / device identity issued during onboarding. Set it in your environment. Sent as X-Identification, body identification and status query identification."},{"key":"TerminalId","value":"","description":"Merchant terminal ID issued during onboarding (a string; keep leading zeros). Set it in your environment."},{"key":"AppVersion","value":"1.0.0","description":"Your application's version, sent as appVersion."},{"key":"ErrorId","value":"","description":"ErrorId of the latest response that had one. Set automatically. Give it to support."},{"key":"TokenNumber","value":"","description":"Charge Anywhere payment token used by CNP requests. Set it in your environment as a secret."},{"key":"BaseStateTax","value":"10.00","description":"Taxable base for state and municipal tax (baseStateTax)."},{"key":"BaseReducedTax","value":"10.00","description":"Taxable base for reduced state tax (baseReducedTax)."},{"key":"StateTax","value":"1.00","description":"State tax amount. An environment value with the same name overrides this default."},{"key":"CityTax","value":"2.00","description":"Municipal tax amount. An environment value with the same name overrides this default."},{"key":"ReducedTax","value":"3.00","description":"Reduced state tax amount. An environment value with the same name overrides this default."},{"key":"AmountOfSale","value":"20.00","description":"Base sale amount. An environment value with the same name overrides this default."},{"key":"Tax","value":"6.00","description":"Calculated by the collection pre-request script (stateTax + cityTax + reducedTax). Don't edit."},{"key":"SubTotal","value":"20.00","description":"Calculated by the collection pre-request script (equals AmountOfSale). Don't edit."},{"key":"Tips","value":"0.00","description":"Tip amount. An environment value with the same name overrides this default."},{"key":"CashBack","value":"0.00","description":"Cashback amount. An environment value with the same name overrides this default."},{"key":"Fee","value":"0.00","description":"Fee amount. An environment value with the same name overrides this default."},{"key":"GrandTotal","value":"26.00","description":"Calculated by the collection pre-request script (SubTotal + Tax + Tips + CashBack + Fee). Don't edit."},{"key":"OriginalGatewayReferenceNumber","value":"","description":"GatewayReferenceNumber of the latest transaction. Set automatically, and used as originalGatewayReferenceNumber by Force, Void and Return."},{"key":"OriginalAmount","value":"","description":"AuthorizedAmount of the latest transaction. Set automatically, and used as originalAmount by Force, Void and Return."},{"key":"OriginalApprovalCode","value":"","description":"ApprovalCode of the latest transaction. Set automatically, and used as originalApprovalCode by Force, Void and Return."},{"key":"StationNumber","value":"1","description":"Station / register number sent as stationNumber."},{"key":"CashierId","value":"1","description":"Cashier / clerk ID sent as cashierId."}]}