PaymentsIn-Person PaymentsGo live

Go live

Everything to check before you start taking real card-present payments with VINR.

View as MarkdownInstall skills

Work through each section in this checklist in order before processing your first live card-present transaction. Skipping steps — particularly the compliance and integration checks — can result in declined payments, settlement holds, or PCI audit findings that are costly to remediate after go-live.

Live card-present processing must be explicitly enabled on your account. Contact your VINR account manager to turn on live mode before completing this checklist — attempting to process real cards without live mode enabled will result in hard declines on every terminal.

Account and complianceAsk

Confirm every item before touching a terminal.

Prop

Type

VINR terminals are PCI PTS 5.x certified and participate in a P2PE solution — encryption keys are injected at the factory and are never accessible to you or your staff. This materially reduces your PCI scope, but does not eliminate it. See PCI DSS for the full scope reduction details.

Terminal setupAsk

Complete this section for every terminal in your deployment.

Prop

Type

Supported terminal models and their printer and connectivity capabilities:

ModelForm factorPrinterConnectivity
Nexgo N92Android handheldBuilt-in4G / WiFi / Bluetooth
Nexgo N86ProAndroid handheld (large screen)None4G / WiFi / Bluetooth
Nexgo CT20Desktop countertopBuilt-inEthernet / WiFi
Nexgo CT20PDesktop countertop with PIN padBuilt-inEthernet / WiFi
Ciontek CM30Compact Android mPOSNoneBluetooth / WiFi

All five models support contactless (NFC), chip+PIN, and magnetic stripe.

Integration (skip for standalone)Ask

Complete this section only if your terminals are connected to a backend via the Terminal API. If you are running in standalone mode — configuring everything from the dashboard with no custom code — skip to Feature verification.

Prop

Type

import { Vinr } from '@vinr/sdk';

const vinr = new Vinr({ secretKey: process.env.VINR_SECRET_KEY });

const terminalPayment = await vinr.terminal.payments.create({
  terminalId: 'term_01HZ5QXYZ',
  amount: 2500,
  currency: 'USD',
  reference: 'order_8821',
});

Confirm process.env.VINR_SECRET_KEY resolves to a sk_live_… key in your production environment before deploying.

import { Vinr } from '@vinr/sdk';

const vinr = new Vinr({ secretKey: process.env.VINR_SECRET_KEY });

export async function POST(request: Request) {
  const rawBody = await request.text();
  const signature = request.headers.get('vinr-signature') ?? '';

  const event = vinr.webhooks.constructEvent(
    rawBody,
    signature,
    process.env.VINR_WEBHOOK_SECRET,
  );

  if (event.type === 'payment.completed') {
    await fulfillOrder(event.data.reference, event.data.amountCaptured);
  }

  if (event.type === 'payment.failed') {
    await notifyStaff(event.data.reference, event.data.declineCode);
  }

  return new Response(null, { status: 200 });
}

Always call vinr.webhooks.constructEvent and verify the signature before acting on a payload. See Webhooks for retry behaviour and failure handling.

Feature verificationAsk

For each optional feature you have enabled, run the test described below on a live terminal before opening to customers. Features not in your acquiring agreement do not need to be verified.

Prop

Type

Test transactionsAsk

Run this sequence on each terminal model in your deployment before going live.

Insert a test card and process a small live transaction

Use a real, low-value card (or a dedicated test card issued by your bank) to process a transaction of the smallest denomination that clears on your acquiring account — typically the equivalent of $0.01 to $1.00. Perform this on each distinct terminal model: Nexgo N92, Nexgo N86Pro, Nexgo CT20, Nexgo CT20P, and Ciontek CM30 as applicable.

Verify the receipt

Confirm a receipt is produced — printed on devices with a built-in printer (N92, CT20, CT20P), or delivered digitally on devices without one (N86Pro, CM30). Check that the merchant name, amount, card last four, and a transaction reference are all present.

Confirm in the dashboard

Open Dashboard → Payments and locate the transaction. Verify the status is completed, the amount matches, and the terminal ID is correct. If your integration attaches metadata or a reference, confirm those fields are populated.

Issue a test refund

Initiate a refund against the transaction — either via the terminal app, the dashboard, or your integration using vinr.refunds.create. Confirm the refund appears under the original payment with status succeeded and that a refund receipt is delivered.

Do not process test transactions above the minimum required to verify the flow. These are real authorizations against a live acquiring account and will appear on the cardholder's statement.

MonitoringAsk

Set up alerting before your first live shift so that issues surface immediately rather than at end-of-day reconciliation.

Prop

Type

See Monitoring and alerts for the full alert configuration reference and webhook event schema.

You're liveAsk

Your terminals are ready to accept real payments. For day-to-day operations, refer to Accept a payment for the payment session flow, and Reconciliation for end-of-day settlement and reporting.

Next stepsAsk

Was this page helpful?
Edit on GitHub

Last updated on

On this page