Back to Documentation

Regional Compliance Guide

Understanding convenience fee regulations across different states and regions.

Overview

Convenience fee regulations vary significantly by state in the United States. Some states allow fees with specific restrictions, while others prohibit them entirely. Sir Chargly automatically handles compliance checking to keep you within legal boundaries.


Key Concepts

What is a Convenience Fee?

A convenience fee is a charge added to a transaction when a customer chooses to pay with a credit card instead of a standard payment method. These fees help merchants offset the cost of credit card processing.

Legal Requirements

To charge a convenience fee, you typically must:

  • Disclose the fee clearly before the transaction
  • Offer an alternative payment method without a fee
  • Stay within state-mandated limits
  • Apply fees uniformly - same fee structure for all customers
  • Surcharge vs Convenience Fee

    Surcharge:

  • Added to credit card transactions as a percentage
  • Must match actual processing cost
  • Subject to different regulations
  • Convenience Fee:

  • Flat fee for using a specific payment channel
  • Can be higher than processing cost
  • Subject to state-specific rules
  • Sir Chargly focuses on convenience fees.


    State-by-State Guide

    States That Allow Convenience Fees

    California (US-CA)

    Status: ✅ Allowed

    Rules:

  • Maximum 4% on credit cards
  • Must disclose fee before transaction
  • Alternative payment method required
  • Fee must be clearly labeled
  • Example:

    const estimate = await client.estimates.create({
      amount: 10000,
      currency: 'USD',
      region: 'US-CA',
      cardType: 'credit'
    });
    // convenienceFee: up to 400 cents (4%)
    

    Texas (US-TX)

    Status: ✅ Allowed

    Rules:

  • Must post notice of convenience fee
  • Alternative payment method required
  • Fee must be disclosed before transaction
  • No specific percentage cap
  • Example:

    const estimate = await client.estimates.create({
      amount: 10000,
      currency: 'USD',
      region: 'US-TX'
    });
    

    Florida (US-FL)

    Status: ✅ Allowed

    Rules:

  • Must disclose fee
  • Alternative payment method required
  • Must not exceed actual cost of acceptance
  • Colorado (US-CO)

    Status: ✅ Allowed with restrictions

    Rules:

  • Maximum 2% on credit cards
  • Must post notice at point of sale
  • Alternative payment method required

  • States That Prohibit Convenience Fees

    New York (US-NY)

    Status: ❌ Prohibited

    Rules:

  • Convenience fees are not allowed
  • Surcharges on credit cards are also banned
  • Violations subject to penalties
  • Example:

    const estimate = await client.estimates.create({
      amount: 10000,
      currency: 'USD',
      region: 'US-NY'
    });
    // compliant: false
    // reason: "Convenience fees are not allowed in US-NY"
    

    Connecticut (US-CT)

    Status: ❌ Prohibited

    Rules:

  • Cannot charge extra for credit card use
  • No convenience fees allowed
  • Massachusetts (US-MA)

    Status: ❌ Prohibited

    Rules:

  • Credit card surcharges prohibited
  • Convenience fees also restricted

  • States with Special Rules

    Maine (US-ME)

    Status: ⚠️ Restricted

    Rules:

  • Allowed only for government and utility payments
  • Commercial transactions generally prohibited
  • Kansas (US-KS)

    Status: ⚠️ Restricted

    Rules:

  • Allowed only for online/phone transactions
  • In-person transactions may be restricted

  • Canadian Provinces

    Ontario (CA-ON)

    Status: ✅ Allowed

    Rules:

  • Must be reasonable and disclosed
  • Alternative payment method required
  • Quebec (CA-QC)

    Status: ❌ Restricted

    Rules:

  • Generally not allowed
  • Special rules for specific industries
  • British Columbia (CA-BC)

    Status: ✅ Allowed

    Rules:

  • Must disclose fee
  • Fee must be reasonable

  • Using Regional Compliance

    Check Compliance Before Charging

    Always verify compliance before adding fees:

    // Method 1: Use estimate with region
    const estimate = await client.estimates.create({
      amount: 10000,
      currency: 'USD',
      region: 'US-CA' // Check California compliance
    });
    
    if (estimate.compliant) {
      // Safe to proceed
      proceedWithPayment(estimate.totalAmount);
    } else {
      // Don't add fee
      proceedWithPayment(estimate.baseAmount);
    }
    

    Explicit Compliance Check

    Use the dedicated compliance check endpoint:

    const compliance = await client.regions.checkCompliance({
      region: 'US-NY',
      percentage: 2.9,
      flatFee: 0.30,
      cardType: 'credit'
    });
    
    console.log(compliance);
    // {
    //   compliant: false,
    //   reason: "Convenience fees are not allowed in US-NY"
    // }
    

    Get Region Information

    Retrieve detailed rules for a region:

    const region = await client.regions.retrieve('US-CA');
    
    console.log(region);
    // {
    //   regionCode: "US-CA",
    //   country: "US",
    //   state: "California",
    //   allowedCardTypes: ["credit"],
    //   maxPercentage: 4.0,
    //   requiresDisclosure: true,
    //   restrictions: "Maximum 4% on credit cards"
    // }
    

    Implementation Patterns

    Pattern 1: Always Check Compliance

    async function processPayment(amount, region, customerId) {
      // 1. Check compliance first
      const estimate = await client.estimates.create({
        amount,
        currency: 'USD',
        region
      });
    
      // 2. Show customer the right amount
      const chargeAmount = estimate.compliant
        ? estimate.totalAmount
        : estimate.baseAmount;
    
      // 3. Display breakdown
      showPaymentBreakdown({
        subtotal: estimate.baseAmount,
        convenienceFee: estimate.compliant ? estimate.convenienceFee : 0,
        total: chargeAmount,
        feeAllowed: estimate.compliant
      });
    
      // 4. Create charge
      const charge = await client.charges.create({
        amount,
        currency: 'USD',
        customer: customerId
      });
    
      return charge;
    }
    

    Pattern 2: Regional Fee Configuration

    // Configure different fees by region
    const regionalFees = {
      'US-CA': { allowed: true, max: 4.0 },
      'US-TX': { allowed: true, max: null },
      'US-NY': { allowed: false, max: 0 },
      'US-FL': { allowed: true, max: 3.5 }
    };
    
    function canChargeFee(region) {
      return regionalFees[region]?.allowed || false;
    }
    
    function getMaxFee(region, amount) {
      const config = regionalFees[region];
      if (!config?.allowed) return 0;
    
      const calculated = amount * 0.029 + 30; // 2.9% + $0.30
      const max = config.max ? amount * (config.max / 100) : Infinity;
    
      return Math.min(calculated, max);
    }
    

    Pattern 3: Graceful Degradation

    async function createChargeWithFee(amount, region) {
      try {
        // Try with fee first
        const estimate = await client.estimates.create({
          amount,
          currency: 'USD',
          region
        });
    
        if (estimate.compliant) {
          return await client.charges.create({
            amount,
            currency: 'USD'
          });
        }
      } catch (error) {
        console.warn('Fee check failed, proceeding without fee:', error);
      }
    
      // Fall back to charge without fee
      return await client.charges.create({
        amount,
        currency: 'USD'
      });
    }
    

    Disclosure Requirements

    Required Disclosures

    Most states require clear disclosure before charging a fee:

    Minimum Requirements

  • Amount of fee - Show exact dollar amount or percentage
  • Reason for fee - Explain it's a convenience fee
  • Alternative option - Offer payment method without fee
  • Total cost - Display final amount including fee
  • Example Disclosure

    Payment Method: Credit Card
    
    Subtotal:               $100.00
    Convenience Fee (2.9%):   $2.90
    ────────────────────────────────
    Total:                  $102.90
    
    Note: This is a convenience fee for credit card payments.
    You may avoid this fee by paying with ACH or check.
    

    Implementation Example

    function displayPaymentBreakdown(estimate) {
      return `
        <div class="payment-breakdown">
          <div class="line-item">
            <span>Subtotal:</span>
            <span>$${(estimate.baseAmount / 100).toFixed(2)}</span>
          </div>
    
          ${estimate.compliant ? `
            <div class="line-item fee">
              <span>Convenience Fee (${estimate.feeStructure.percentage}%):</span>
              <span>$${(estimate.convenienceFee / 100).toFixed(2)}</span>
            </div>
    
            <div class="disclosure">
              This is a convenience fee for credit card payments.
              You may avoid this fee by selecting an alternative payment method.
            </div>
          ` : ''}
    
          <div class="line-item total">
            <span>Total:</span>
            <span>$${(estimate.totalAmount / 100).toFixed(2)}</span>
          </div>
        </div>
      `;
    }
    

    Compliance Monitoring

    Automatic Checks

    Sir Chargly automatically monitors compliance:

  • Real-time validation - Every estimate/charge is validated
  • Regional updates - We track regulation changes
  • Alerts - Notified if your configuration becomes non-compliant
  • Best Practices

  • Always pass region - Include customer's region in API calls
  • Respect compliance flags - Don't override compliance checks
  • Monitor changes - Subscribe to regulatory update notifications
  • Test thoroughly - Test with different regions before going live
  • Keep records - Save compliance check results for auditing

  • Common Questions

    Q: What if I don't know the customer's region?

    A: Without a region, we'll calculate the fee but can't guarantee compliance. Options:

  • Collect billing address during checkout
  • Use IP geolocation (less reliable)
  • Ask customer to select their location
  • Default to most restrictive rules (no fee)
  • Q: Can I charge different fees in different regions?

    A: Yes, but you must configure this in your merchant settings. Contact support to enable regional fee configurations.

    Q: What happens if a customer moves to a restricted state?

    A: If you're charging recurring fees:

  • Check compliance before each charge
  • Don't add fee if region is non-compliant
  • Notify customer of the change
  • Q: How often do regulations change?

    A: Convenience fee regulations change occasionally. We monitor all jurisdictions and update our compliance rules automatically. You'll receive notifications of any changes affecting your account.

    Q: Can I charge fees on debit cards?

    A: Debit card rules are generally more restrictive than credit cards. Many states that allow credit card fees prohibit or limit debit card fees. Always specify cardType: 'debit' when checking compliance.


    Support & Updates

    Regulatory Updates

    We monitor convenience fee regulations across all jurisdictions and update our compliance rules automatically. Major changes are communicated via:

  • Email notifications
  • Dashboard alerts
  • API deprecation warnings
  • Getting Help

    If you have questions about compliance:

  • Email: compliance@sirchargly.com
  • Dashboard: Live chat support
  • Documentation: docs.sirchargly.com
  • Legal Disclaimer

    This guide is for informational purposes only and does not constitute legal advice. Convenience fee regulations are complex and subject to change. Consult with legal counsel to ensure compliance with applicable laws in your jurisdiction.


    Additional Resources

  • API Reference - Complete API documentation
  • Getting Started - Quick start guide
  • SDK Reference - SDK documentation
  • Card Brand Rules - Visa/Mastercard policies
  • For the most up-to-date compliance information, always check our API's compliance endpoints or contact our compliance team.

    Ready to start charging convenience fees?

    Create your account and complete onboarding in minutes.

    No credit card required • 5-minute setup