How RivetOptimize Works

RivetOptimize adds a real-time optimization step before your payment data reaches your gateway or processor. Your application sends Rivet a tokenized transaction payload, RivetOptimize enriches the payload with processor-ready payment details, and your application submits the optimized payload through your existing payment flow.

This lets you improve transaction qualification, reduce avoidable interchange downgrades, and keep your gateway integration intact.

Payment flow

Without RivetOptimize, your server sends transaction data directly to your payment gateway.

Before RivetOptimize


flowchart LR
A[Consumer makes purchase] --> B[Your API Server]
B --> C[Payment Gateway]
C --> D[Credit Card Networks]

With RivetOptimize, your server calls Rivet before sending the transaction to your gateway. Rivet returns an optimized payload that your server can pass along to the processor.

With RivetOptimize


flowchart LR
A[Consumer makes purchase] --> B[Your API Server]
B -- OPTIMIZE_SALE Request --> X[RivetOptimize API]
X -- Optimized Payload --> B
B --> C[Payment Gateway]
C --> D[Credit Card Networks]

Optimization request

To optimize a payment, send your transaction payload data to Rivet's API with the OPTIMIZE_SALE action. See the Submit Transaction Payload reference for the full endpoint details.

API request example
curl \
    https://ASSIGNED_RIVET_API_HOSTNAME/v1/transaction_payloads \
    --request POST \
    --header 'Authorization: Token 53084bad-c316-448c-bccf-9c323efd1916' \
    --header 'Content-Type: application/json' \
    --data-raw '{
  "action": "OPTIMIZE_SALE",
  "payload": {
    "com_ind": "ecomm",
    "account_token": "tok_XXXXXXXXXXXX",
    "mid": "449330391",
    "amount": 12289,
    "expiration": "1228",
    "account_zip": "97123",
    "cvv": "tok_XXXXXXXXXXXX",
    "currency": "USD",
    "capture": "Y",
    "name": "George Jetson",
    "company_name": "Jetson Family",
    "address1": "123 Skypad Apartments",
    "address2": "Apt 7",
    "city": "Orbit City",
    "region": "CA",
    "country": "US",
    "phone": "5555551234",
    "email": "george.jetson@spacely.com"
  },
  "payload_metadata": {
    "item_purchased": "Sprocket Widget A",
    "invoice_id": "INV-2026-040601",
    "shipping_method": "UPS_GROUND_DOMESTIC"
  }
}'

Rivet returns an optimized_payload together with a _metadata object that indicates whether optimizations were applied. Your application can use the optimized payload with your existing payment processor integration.

API response example
{
  "_metadata": {
    "success_flag": true,
    "error_message": null,
    "error_code": 200,
    "error_key": null,
    "processing_time_ms": 45,
    "optimization_applied_flag": true,
    "optimization_applied": {
      "line_items_data_enrichment": true,
      "shipping_data_enrichment": true,
      "tax_data_enrichment": true
    }
  },
  "data": {
    "optimized_payload": {...}
  }
}

Implementation pattern

A typical RivetOptimize integration adds one server-side API call before your existing payment processor call:

  1. Build your tokenized payment payload. Use the payment data your server already prepares for the gateway.
  2. Send the payload to RivetOptimize. Call Rivet with the OPTIMIZE_SALE action.
  3. Use the optimized payload. If Rivet returns an optimized payload, send that payload to your payment processor.
  4. Process the transaction normally. Your gateway remains the system that authorizes and captures the payment.
Node.js example
const rivet = require('rivet');
const paymentProcessor = require('your-payment-processor');

// Your tokenized payment data from your payment processor
let payload = {...};

// Step 1: Send to RivetOptimize
const optimizedResult = await rivet.optimize({
  action: 'OPTIMIZE_SALE',
  payload: payload
});

// Step 2: Use the optimized payload when one is returned
if (optimizedResult._metadata.success_flag) {
  payload = optimizedResult.data.optimized_payload;
}

// Step 3: Execute the payment with your payment processor
const transaction = await paymentProcessor.processPayment(payload);

Next steps

Start with Authentication, then review the Submit Transaction Payload API reference.

Top