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:
Surcharge vs Convenience Fee
Surcharge:
Convenience Fee:
Sir Chargly focuses on convenience fees.
State-by-State Guide
States That Allow Convenience Fees
California (US-CA)
Status: ✅ Allowed
Rules:
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:
Example:
const estimate = await client.estimates.create({
amount: 10000,
currency: 'USD',
region: 'US-TX'
});
Florida (US-FL)
Status: ✅ Allowed
Rules:
Colorado (US-CO)
Status: ✅ Allowed with restrictions
Rules:
States That Prohibit Convenience Fees
New York (US-NY)
Status: ❌ Prohibited
Rules:
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:
Massachusetts (US-MA)
Status: ❌ Prohibited
Rules:
States with Special Rules
Maine (US-ME)
Status: ⚠️ Restricted
Rules:
Kansas (US-KS)
Status: ⚠️ Restricted
Rules:
Canadian Provinces
Ontario (CA-ON)
Status: ✅ Allowed
Rules:
Quebec (CA-QC)
Status: ❌ Restricted
Rules:
British Columbia (CA-BC)
Status: ✅ Allowed
Rules:
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
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:
Best Practices
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:
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:
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:
Getting Help
If you have questions about compliance:
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
For the most up-to-date compliance information, always check our API's compliance endpoints or contact our compliance team.