Skip to main content

Troubleshooting

Payment Issues

Payment Stuck in “Pending”

Symptoms: Transaction created but status never changes to success/failed Common causes:
  1. Mobile money delays: MMOs can take 1-5 minutes
  2. Webhook delivery failure: Provider sent webhook but we didn’t receive it
  3. Provider API error: Provider accepted payment but network error on response
Solution:
If webhook never delivered: 1) Check provider dashboard for successful payment 2) Contact provider support 3) Manually update transaction status as workaround. Next steps:
  • Wait 5-10 minutes for MMO confirmation
  • Check provider dashboard for payment status
  • Check CrediBill webhook logs for delivery attempts
  • If payment confirmed in provider but not in CrediBill, contact support

Payment Declined

Symptoms: Payment fails immediately with “declined” status Common causes:
  1. Insufficient funds: Customer doesn’t have balance
  2. Invalid payment method: Phone number or card incorrect
  3. Account blocked: Account frozen by provider
  4. Daily limit reached: Customer exceeded daily transaction limit
Solution:
Common failure codes include: INSUFFICIENT_FUNDS, INVALID_ACCOUNT, DECLINED, DAILY_LIMIT, ACCOUNT_BLOCKED. Customer actions:
  • Ensure sufficient funds in mobile money wallet
  • Verify correct phone number
  • Check account not blocked by provider
  • Retry with different payment method

Multiple Charges for Single Payment

Symptoms: Customer charged multiple times for one subscription Causes:
  1. Missing idempotency: Payment initiated multiple times
  2. Client-side double submission: Form submitted twice
  3. Webhook retry processing: Same webhook processed multiple times
Solution:

Webhook Issues

Webhooks Not Received

Symptoms: Webhook endpoint configured but never receives calls Checklist:
  • Webhook URL is public (not localhost)
  • HTTPS certificate is valid
  • Firewall allows CrediBill IPs
  • Endpoint returns 200 OK
  • Endpoint responds within 10 seconds
  • Correct provider webhook secret configured
Solution:

Webhook Signature Verification Fails

Symptoms: All webhooks rejected with “Invalid signature” error Checklist:
  • Using raw body (not parsed JSON)
  • Webhook secret is correct
  • Using timing-safe comparison
  • Timestamp header present
  • Not modifying body before verification
Solution:
Debug signature mismatch:

Duplicate Webhooks

Symptoms: Same event processed multiple times Cause: Network timeout causing CrediBill to retry webhook Solution:

Credential & Configuration Issues

”Invalid Credentials” Error

Symptoms: Provider connection test fails immediately Checklist:
  • Credentials copied correctly (no extra spaces)
  • Using correct credentials (test vs. live)
  • Credentials still valid in provider dashboard
  • Not using URL-encoded credentials
Solution:

Provider Connection Keeps Failing

Symptoms: Test connection fails repeatedly Checklist:
  • Credentials are current (not expired)
  • Provider account active (not suspended)
  • Network connectivity working
  • Firewall allows outbound to provider
  • Provider API not down
Solution:
// 3. Check provider status page // Flutterwave: https://status.flutterwave.com/ // PawaPay: Check their status // Pesapal: https://status.pesapal.com/ // DPO: Check their status // 4. Contact provider support with: // - Error message // - Credentials (masked) // - Time of failure // - Your account ID
Server-side check (Next.js App Router example)

Troubleshooting tips

  • Ensure the secret key is set in server environment variables, not in frontend code.
  • Use cURL or a server-side route to test keys.
  • Verify the key prefix is sk_ (secret keys) not pk_ (publishable keys). console.error(“3. Key matches environment”); } }

Frequently Asked Questions

Billing & Pricing

Q: How much does CrediBill cost? A: See pricing page. Typically a percentage of transaction amount plus per-transaction fee. Q: Do you charge for failed payments? A: No. We only charge for successful transactions. Q: Can you help with invoicing? A: Yes, CrediBill generates and sends invoices automatically. You can customize templates in dashboard.

Technical

Q: What happens if a provider API is down? A: CrediBill failsover to backup provider if configured. Payment marked as pending and retried later. Q: How long do payment retries continue? A: Up to 3 automatic retries with exponential backoff. After 3 failures, subscription marked PAST_DUE. Q: Can I use multiple providers simultaneously? A: Yes. Configure primary and backup. Can also route by customer country/payment method. Q: What happens if my webhook endpoint is down? A: CrediBill retries webhooks up to 3 times with backoff. After 3 failures, marked as failed. Check webhook logs to manually retry. Q: How long does a mobile money payment take? A: Instant to 5 minutes typical. Some edge cases up to 30 minutes. Check provider dashboard.

Security

Q: Are my credentials encrypted? A: Yes. AES-256-GCM encryption with per-app keys. In transit uses HTTPS/TLS 1.2+. Q: Do you store card numbers? A: No. We never handle raw card data. Providers handle PCI compliance. Q: How do you prevent fraud? A: Signature verification, replay attack prevention, rate limiting, anomaly detection. For high-risk transactions, may request additional verification. Q: Can I get an audit trail? A: Yes. View all transactions, webhooks, and configuration changes in dashboard. Export available for compliance.

Integration

Q: How long does integration take? A: 2-4 hours with CrediBill docs. Additional time for provider setup. Q: Do you have SDKs? A: Yes, for Node.js, Python, Go, Ruby. REST API for any language. Q: Can I test before going live? A: Yes. All providers have test mode. Use test credentials and payment numbers. Q: How do I handle different currencies? A: Each provider supports specific currencies. Configure per provider. Automatic currency conversion available. Q: Can I customize invoice templates? A: Yes. Dashboard has template editor. Can add logo, colors, custom fields.

Support & Troubleshooting

Q: How do I contact support? A: Email support@credibill.tech or use in-app chat. Response time < 2 hours for critical issues. Q: What’s your SLA? A: 99.95% uptime SLA. Check our status page for incidents. Q: Can you help debug payment issues? A: Yes. We can check logs on our side. Provide transaction ID and time. Q: What if I lose webhook logs? A: Logs retained for 90 days. Older logs available by contacting support. Q: How do I cancel my account? A: Go to Settings → Account → Delete Account. All data deleted within 30 days per GDPR.

Still Need Help?