Payment Provider Research — Ecuador
Context
VoxQuote needs a payment provider for Premium subscriptions (monthly recurring). Target market: Ecuador. Initial plan: manual activation via /admin/users/{id}/subscription while evaluating providers. Decision deferred until post-launch.
Candidates
1. PayPal
Setup requirements - Personal or business PayPal account (business preferred for invoicing) - No RUC required to receive payments - Verified email required
Subscription support - Native recurring billing via Subscriptions API (Plans + Subscriptions) - Monthly billing cycles supported out of the box
Fees (Ecuador → receiver) - ~4.4% + $0.30 USD per transaction (international standard rate) - No monthly fee for basic integration
Webhook reliability
- Mature webhook system (BILLING.SUBSCRIPTION.RENEWED, etc.)
- Occasional delays reported; idempotency via BILLING-SUBSCRIPTION-ID header recommended
Refund mechanics - Full/partial refunds via dashboard or API - Refunds credited within 5 business days
USD pricing - Native USD support ✓
Notes
- Widely trusted in Ecuador
- Easy for users to pay with credit card even without a PayPal account
- SDK: paypalrestsdk (Python) or direct REST API
2. PlaceToPay (Everteam / Redpos)
Setup requirements - Ecuadorian legal entity (company or natural person with RUC) - Contract with PlaceToPay / local reseller - Integration approval process (takes ~2 weeks)
Subscription support - Tokenized card billing supported (stored-card recurring) - Requires PCI-compliant token vault setup
Fees - ~2.5–3.5% per transaction (negotiated; varies by volume) - Monthly platform fee (~$30–60 USD/month depending on tier)
Webhook reliability - REST notifications; fairly reliable within Ecuador's banking ecosystem - Supports Banco del Pacífico, Produbanco, Banco Pichincha, etc. natively
Refund mechanics - Refund via dashboard or API; local bank processing time applies (2–5 days)
USD pricing - Native USD ✓ (Ecuador is USD-dollarized)
Notes - Stronger for local card acceptance (SRI-compliant invoicing possible) - Higher setup friction than PayPal - Better long-term fit if user base is primarily Ecuadorian professionals
3. PayPhone
Setup requirements - Ecuadorian RUC required - Account activation via PayPhone portal (24–48h approval) - No paper contract needed
Subscription support - One-time payment buttons and payment links natively - Recurring billing: manual charge via token (card tokenization available) - Less mature than PayPal's subscription API
Fees - ~3.5% per transaction - No monthly platform fee
Webhook reliability - Simple webhook callbacks; less documentation than PayPal - Mainly used for one-time e-commerce in Ecuador
Refund mechanics - Via dashboard (no refund API documented as of 2026-Q1)
USD pricing - Native USD ✓
Notes - Quickest to onboard among Ecuadorian options - Good for one-time payments; subscriptions require custom implementation - Limited English documentation
Comparison Matrix
| Criteria | PayPal | PlaceToPay | PayPhone |
|---|---|---|---|
| Setup time | Hours | 2+ weeks | 24–48h |
| RUC required | No | Yes | Yes |
| Native subscriptions | ✓ Yes | Partial | Manual |
| Fees | ~4.4% + $0.30 | ~2.5–3.5% + flat | ~3.5% |
| USD | ✓ | ✓ | ✓ |
| Local card acceptance | Limited | Best | Good |
| Webhook quality | Mature | Good | Basic |
| Refund API | ✓ | ✓ | Dashboard only |
Recommendation
Launch phase (manual): Use /admin/users/{id}/subscription endpoint. Collect payment via PayPal transfer, Bancolombia, or Banco del Pacífico. Mark user as premium manually. Acceptable until ~50 paying users.
Phase 2 (automated): Integrate PayPal first — zero friction, no RUC, mature subscription API, widely accepted in Ecuador. The payment_service.py stub interface is provider-agnostic so swapping to PlaceToPay later requires only replacing the implementation, not the caller interface.
Future consideration: PlaceToPay if user base grows and local card acceptance becomes a friction point (Visa/MC issued by Ecuadorian banks sometimes block PayPal transactions).
Next Steps
- Create PayPal developer account at developer.paypal.com
- Set up sandbox subscription plan matching Premium tier price
- Implement
payment_service.pywithcreate_checkout+handle_webhook - Add
/billing/checkoutand/billing/webhookendpoints - Wire Flutter to open in-app browser with checkout URL