Error Codes

Complete list of API error codes and troubleshooting guidance.

Error Response Format

{
  "error": {
    "code": "validation_error",
    "message": "Human-readable error description",
    "field": "budget.max",
    "doc_url": "https://soft.house/docs/api/errors#validation_error"
  },
  "meta": {
    "request_id": "req_abc123"
  }
}

HTTP Status Codes

StatusMeaning
200Success
201Created
204No Content (successful delete)
400Bad Request
401Unauthorized
403Forbidden
404Not Found
409Conflict
422Unprocessable Entity
429Rate Limited
500Internal Server Error

Error Codes

Authentication Errors

CodeStatusDescription
invalid_api_key401API key is invalid or expired
missing_authorization401No Authorization header provided
insufficient_scope403Key lacks required permissions

Validation Errors

CodeStatusDescription
validation_error400Request body validation failed
invalid_parameter400Query parameter is invalid
missing_required_field400Required field not provided

Resource Errors

CodeStatusDescription
not_found404Resource does not exist
already_exists409Resource with this ID exists
mandate_expired410Mandate has expired

Payment Errors

CodeStatusDescription
payment_failed402Payment could not be processed
insufficient_funds402Card has insufficient funds
amount_exceeds_mandate400Amount exceeds mandate limit
duplicate_payment409Idempotency key already used

Rate Limiting

CodeStatusDescription
rate_limited429Too many requests

When rate limited, check the Retry-After header for the number of seconds to wait.

Troubleshooting

”invalid_api_key”

  1. Verify you’re using the correct key (test vs live)
  2. Check that the key hasn’t been revoked
  3. Ensure the Authorization header format is Bearer sk_test_...

”rate_limited”

  1. Implement exponential backoff
  2. Cache responses where possible
  3. Contact us to increase your rate limits

”mandate_expired”

  1. Create a new mandate before retrying
  2. Consider using longer TTL values
  3. Implement mandate renewal logic in your application