Skip to main content

Overview

Digital wallets provide instant, mobile-first payment experiences. Popular in Latin America for their ease of use and accessibility.

Processing

Instant confirmation

Mobile First

Optimized for phones

No Card Needed

Wallet balance only

Available Wallets

Nequi

Users: 14M+ in ColombiaBank: BancolombiaFeatures:
  • QR code payments
  • P2P transfers
  • Bill payments
Max: 3,000,000 COP per transaction

Daviplata

Users: 10M+ in ColombiaBank: DaviviendaFeatures:
  • Mobile wallet
  • No bank account required
  • Instant transfers
Max: 2,000,000 COP per transaction

How It Works

88Pay integration flow diagram

Create Wallet Payment

Nequi Example

curl -X POST "https://api-sandbox.88pay.io/api/transactions/charges" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "x-session-id: YOUR_SESSION" \
  -H "Content-Type: application/json" \
  -d '{
    "flow": "PAYIN",
    "method_code": "NEQUI",
    "method_category": "WALLET",
    "amount": 50000,
    "currency": "COP",
    "country": "COL",
    "description": "Order #12345",
    "customer_id": "user_001",
    "notification_url": "https://yoursite.com/webhook",
    "return_url": "https://yoursite.com/success"
  }'

Response

{
  "status": "Success",
  "code": 200,
  "data": {
    "urlCheckout": "https://link.88pay.io/nequi/ABC123",
    "reference": "IP9BD7CJES6",
    "amount": 50000,
    "currency": "COP"
  }
}

Method Codes

Walletmethod_codecurrencyCountries
NequiNEQUICOP🇨🇴 Colombia
DaviplataDAVIPLATACOP🇨🇴 Colombia
PayPalPAYPALUSD, EUR, etc.Global
Mercado PagoMERCADOPAGOLocal currencyLATAM

Customer Experience

1

Redirect

Customer redirected to wallet page
2

Push Notification

Notification sent to customer’s phone“Approve payment in Nequi app”
3

Open App

Customer opens wallet app
4

Review

Sees payment details:
  • Merchant name
  • Amount
  • Description
5

Authenticate

Enters PIN or uses biometric
6

Confirm

Payment processed instantly
7

Return

Redirected back to your site
Time: 30 seconds to 2 minutes

Mobile Optimization

Wallets work best on mobile devices:

Deep Linking

// Detect mobile and use deep link
function redirectToWallet(urlCheckout) {
  const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
  
  if (isMobile) {
    // Deep link opens wallet app directly
    const deepLink = urlCheckout.replace('https://', 'nequi://');
    
    // Try deep link first
    window.location.href = deepLink;
    
    // Fallback to web if app not installed
    setTimeout(() => {
      window.location.href = urlCheckout;
    }, 2000);
  } else {
    // Desktop: show QR code
    displayQRCode(urlCheckout);
  }
}

QR Code for Desktop

function WalletPayment({ urlCheckout }) {
  const isMobile = useIsMobile();
  
  if (isMobile) {
    // Redirect to wallet
    return <Redirect to={urlCheckout} />;
  }
  
  // Desktop: show QR
  return (
    <div className="qr-payment">
      <h3>Scan with your phone</h3>
      <QRCode value={urlCheckout} size={256} />
      <p>Open Nequi app and scan this code</p>
    </div>
  );
}

Transaction Limits

WalletMinMax Per TransactionDaily Limit
Nequi1,000 COP3,000,000 COP6,000,000 COP
Daviplata1,000 COP2,000,000 COP4,000,000 COP
PayPal$1 USD$10,000 USD$60,000 USD
Mercado PagoVariesVariesVaries

Webhook Notifications

    {
      "transaction_status": "COMPLETED",
      "transaction_reference": "IP9BD7CJES6",
      "transaction_amount": "50000",
      "transaction_payment_method": "NEQUI"
    }
Action: Fulfill order immediately

Best Practices

Display recognizable wallet logos in checkout
    <button onClick={() => payWithNequi()}>
      <img src="/logos/nequi.png" alt="Nequi" />
      Pay with Nequi
    </button>
    
    <button onClick={() => payWithDaviplata()}>
      <img src="/logos/daviplata.png" alt="Daviplata" />
      Pay with Daviplata
    </button>
Optimize checkout for mobile devices
  • Large touch targets (min 44x44px)
  • Simple, fast flow
  • Deep linking to apps
  • QR codes for desktop
Wallet payments can timeout if customer takes too long
    // Set 10-minute timeout
    const WALLET_TIMEOUT = 10 * 60 * 1000;
    
    setTimeout(() => {
      if (paymentStatus === 'PENDING') {
        showTimeoutMessage();
        offerToRetry();
      }
    }, WALLET_TIMEOUT);
Provide helpful message if wallet has insufficient funds
    {error.code === 'INSUFFICIENT_BALANCE' && (
      <div className="error">
        <p>Insufficient balance in your Nequi wallet</p>
        <ul>
          <li>Add funds to your Nequi account</li>
          <li>Try another payment method</li>
        </ul>
      </div>
    )}

Testing

Sandbox Behavior

  1. Redirects to mock wallet page
  2. Click “Approve” to complete
  3. Click “Reject” to decline
  4. Instant webhook sent
No real wallet account needed

Common Issues

Causes:
  • Notifications disabled
  • App not updated
  • Phone offline
Solutions:
  • Show manual link to open app
  • Display QR code as fallback
  • Offer alternative payment method
Normal for:
  • Customer hasn’t approved yet
  • Phone is offline
  • Network issues
Action:
  • Wait up to 10 minutes
  • Send reminder notification
  • Allow customer to cancel and retry

Next Steps