Skip to main content

Overview

The Forerunner API uses conventional HTTP status codes to indicate the success or failure of requests. This guide helps you understand error responses and resolve common issues.

HTTP Status Codes

Success Codes

Client Error Codes

Server Error Codes


Error Response Format

All error responses follow a consistent JSON structure with an errors array:
Error responses also include endpoint-specific fields (like file, sisd, property, properties) set to null or empty arrays.

Example Error Responses


Common Errors

Authentication Errors (401 Unauthorized)

Cause: API key is malformed, missing, or invalidSolution:
  • Verify API key is correctly formatted
  • Ensure Bearer prefix is included in Authorization header
  • Check for extra whitespace in API key value
  • Add Authorization header to all requests
  • Contact your Customer Success Manager for a new API key if expired

Request Blocked by WAF (403 Forbidden)

Cause: Forerunner’s web application firewall (WAF) blocks requests with common HTTP client User-Agent headers to prevent automated web scraping. This returns a 403 Forbidden response even when your API key is valid.Solution:
  • Remove or clear the User-Agent header in your HTTP client before sending requests
  • In Postman: Go to Headers, find User-Agent, and either delete it or set it to an empty value
  • In Insomnia: Go to Headers and remove the User-Agent entry
  • cURL does not typically trigger this issue, but if it does, pass an empty User-Agent:

Validation Errors

Cause: Required parameter not provided in requestError example:
Solution:
  • Check API documentation for required fields
  • Ensure all required fields are included in request body
Cause: Date provided in incorrect formatError example:
Solution:
  • Use MM/DD/YYYY format for date fields
  • Ensure leading zeros for single-digit months/days
Cause: Unsupported or incorrect file type specifiedError example:
Solution:
  • Use valid file types provided by your account configuration
  • Check for typos in fileType parameter
  • Common types include: elevation_certificate, permit, map, photo, letter
Cause: Malformed GeoJSON coordinates or geometrySolution:
  • Ensure GeoJSON follows standard format
  • Verify longitude comes before latitude: [longitude, latitude]
  • Validate GeoJSON structure with type and coordinates
Cause: Resource ID is not a valid UUIDError example:
Solution:
  • Ensure resource IDs are valid UUIDs
  • Verify you’re using the correct ID from previous API responses

Resource Errors

Cause: Requested resource does not existSolution:
  • Verify resource ID is correct
  • Ensure resource hasn’t been deleted
  • Check you’re querying the correct environment (staging vs production)
Cause: Could not match address or parcel to a propertyError example:
Solution:
  • Verify address format and spelling
  • Ensure property exists in your organization’s database
  • Try using parcel ID or coordinates if address matching fails
  • Provide multiple identifiers for better matching
Cause: Attempted to modify address, parcelId, or coordinates on existing recordSolution:
  • Geospatial information cannot be changed after record creation
  • Delete the record and create a new one with correct location
  • Or keep existing record and update only non-geospatial fields
Cause: Resource with the same external system ID already existsError example:
Solution:
  • Use a unique external system ID for each resource
  • Update the existing resource instead of creating a new one
  • Or omit the externalSystemId if not needed

File Upload Errors

Cause: Uploaded file exceeds size limitSolution:
  • Compress or resize files before upload
  • Split large documents into smaller files
  • Contact support if you need higher limits
Cause: File format is not supported for the specified document typeError example:
Solution:
  • Convert to supported format (PDF for elevation certificates, etc.)
  • Check file extension matches actual file type
  • Verify MIME type is allowed for your document type
Cause: File upload not sent as multipart/form-dataSolution:
  • Set Content-Type header to multipart/form-data
  • Use proper file upload mechanism with FormData

Implementing Error Handling

Basic Error Handling

Exponential Backoff for Retries

Implement exponential backoff for transient errors (500, 502, 503, 504):

Best Practices

Don’t just handle successful responses. Plan for and gracefully handle all possible error scenarios.
For 5xx errors and timeouts, use exponential backoff with jitter to avoid overwhelming the server.
Include timestamps, request details, and full error responses in your logs for easier debugging.
4xx errors indicate issues with your request. Retrying won’t help - fix the request instead.
Track error rates and response times to detect issues early.
Validate data client-side before making API requests to catch issues early and reduce unnecessary requests.

Debugging

Log all requests and responses to diagnose issues:

Getting Help

If you’re experiencing issues not covered in this guide:
1

Check API status

Verify there are no ongoing incidents or maintenance
2

Review your request

  • Confirm all required parameters are included
  • Verify data types and formats match documentation
  • Check authentication header is correct
3

Gather debugging information

  • Request ID from error response
  • Full error message and status code
  • Example request that reproduces the issue
  • Timestamp when error occurred
4

Contact support

Email engineering@withforerunner.com with your debugging information