Skip to main content

Quick Troubleshooting Checklist

Before diving into specific issues, verify these basics:
  • ✅ Your API key is valid and hasn’t been revoked
  • ✅ You’re using the correct base URL: https://api.upwell.com
  • ✅ All required headers are included
  • ✅ Request format follows the API specification
  • ✅ You have sufficient permissions for the operation

Common Issues and Solutions

Authentication Problems

Symptoms: Getting 401 Unauthorized errorsSolutions:
  1. Verify the header format The key is an opaque string — send it exactly as issued, bare or with a Bearer prefix (both are accepted):
    Watch for copy-paste issues: whitespace, quotes, or a truncated key.
  2. Confirm the key wasn’t revoked
    • Log into your Upwell dashboard
    • Navigate to Account → API keys
    • Confirm the key still appears in the list. Keys don’t expire, but a revoked key stops working immediately.
  3. Rotate the key
    • Create a new key (Add API Key), update your application with it, then revoke the old one. The key value is shown only once at creation.
    • See Authentication for the full flow.
Symptoms: Getting 403 Forbidden errorsSolutions:
  1. Check User Permissions
    • Verify your user account has the necessary permissions
    • Contact your administrator to update permissions
  2. Check which organization the key belongs to
    • An API key is scoped to the one Upwell organization it was created in — it cannot read or write another organization’s data
    • If you work with multiple Upwell organizations, confirm you’re using the right organization’s key
  3. Resource Access Rights
    • Ensure you have access to the specific customer/carrier data
    • Verify organization-level permissions

Data Integration Issues

Symptoms: Invoices not processing correctlySolutions:
  1. Use the right upload path for the file
    • The inline base64 document endpoints reject payloads past a few MB — use the two-step presigned upload for anything larger.
    • For carrier-invoice documents, the presigned flow is the only path that runs AI classification — a PDF sent through a base64 endpoint is filed but never classified or parsed.
  2. Verify Email Ingestion
    • Emailed invoices must go to your organization’s dedicated inbound address — find or configure it under Email Settings in the dashboard (see the quickstart), and confirm senders are forwarding to exactly that address.
  3. Check classification status
Symptoms: Shipment data not syncingSolutions:
  1. Connection Testing
  2. Data Format Validation
    • Ensure shipment IDs match between systems
    • Verify date formats are ISO 8601 compliant
    • Check required fields are populated
  3. Webhook Configuration
    • Verify webhook URLs are accessible
    • Check SSL certificate validity
    • Confirm webhook authentication is configured
Symptoms: Payments not applying to invoicesSolutions:
  1. Check the payment’s line items
    • A payment applies to invoices through its line items — each line item must carry the target invoiceId and an integer-cents totalAmount. A payment with no line items applies to nothing. See Customer payments.
  2. Verify the application amount
    • A linked line item automatically recalculates the target invoice’s balance and payment status in the standard API-managed model. If totalAmountWithFees is present, it takes precedence over totalAmount; make sure it contains only the principal applied to the invoice.
  3. Correct reversals on the original line item
    • Changing only a payment or line-item status does not unapply the amount. Update or delete the original line item and confirm the invoice reopens as expected.
  4. Manual Payment Application

Performance and Rate Limiting

Symptoms: API calls taking longer than expectedSolutions:
  1. Optimize Query Parameters
  2. Filter server-side with the search endpoints
  3. Use Bulk Operations — where a bulk endpoint exists Only some resources have a bulk-* create endpoint (bulk-customers, bulk-carriers, bulk-bills, bulk-carrier-invoices, bulk-customer-payments, bulk-customer-payment-line-items, bulk-carrier-payment-line-items). Invoices have no bulk endpoint — there is no /api/rest/bulk-invoices; loop individual POST/PUT calls to /api/rest/invoices instead.
The Upwell API does not currently enforce rate limits — it never returns 429 and sends no X-RateLimit-* or Retry-After headers. A 429 you observe is coming from infrastructure on your side (a corporate proxy, API gateway, or serverless platform limit), so debug it there.Keep your client polite anyway — bound your concurrency, and retry only server-side failures:
See Error handling for what is and isn’t safe to retry.

Data Quality and Validation

Symptoms: Getting 400 Bad Request responsesThe error body is a flat message string that names the problem — match on it:Validate before sending:
The full message-to-fix table lives in Error handling.
Symptoms: A record you expect isn’t coming backSolutions:
  1. Check the body, not the status code
    • A lookup for a missing record does not return 404: the single-resource GETs return 200 with a null resource ({ "customer": null }), and lists return empty arrays. A real 404 means the URL path itself is wrong.
  2. Verify Resource IDs
    • Upwell ids are prefixed strings (cus_…, inv_…, cari_…) — check for truncation or a stripped prefix
    • Confirm the record wasn’t deleted, and that your API key belongs to the organization that owns it
  3. Search by your own keys instead

Testing and Debugging

API Testing Tools

Basic Request Testing:
Setting Up Postman:
  1. Import the Upwell OpenAPI specification
  2. Configure environment variables:
  3. Set up authentication in the Authorization tab
  4. Use the Collection Runner for batch testing

Logging and Monitoring

Essential Logging Information:
Key Metrics to Track:
  • Response times by endpoint
  • Error rates by status code and error message
  • Success/failure ratios

Getting Additional Help

Support Channels

Technical Support

For API and integration issues

API Documentation

Complete endpoint reference

Error Handling Reference

Real error shapes, messages, and retry rules

Implementation Guide

Step-by-step setup instructions

When Contacting Support

Include the following information in your support request:
  1. Error Details
    • Complete error message and code
    • Request timestamp
    • Endpoint being called
  2. Request Information
    • HTTP method and URL
    • Request headers (excluding API key)
    • Request body (if applicable)
  3. Environment Details
    • Programming language and version
    • Library/SDK versions
    • Network configuration (if relevant)
  4. Steps to Reproduce
    • Detailed steps that led to the issue
    • Expected vs. actual behavior
    • Frequency of occurrence

Best Practices for Smooth Operation

  1. Keep API Keys Secure
    • Never commit keys to version control
    • Use environment variables
    • Rotate keys regularly
  2. Implement Proper Error Handling
    • Handle all HTTP status codes appropriately
    • Implement retry logic for transient errors
    • Log errors for debugging
  3. Monitor API Usage
    • Track request volumes and patterns
    • Set up alerts for unusual activity
  4. Test Thoroughly
    • Test error scenarios in addition to success cases
    • Use staging environment for integration testing
    • Validate data before sending to API
  5. Stay Updated
    • Watch the changelog for API and platform changes — or subscribe to its RSS feed to get them pushed to Slack, email, or a feed reader
    • Review documentation updates
    • Test new features in staging first