Ledga
POST/fx/rates

Store a manual exchange-rate override

Store a MANUAL rate override for the tenant.

Request bodyrequired

FieldTypeDescription
base_currencyrequired string
quote_currencyrequired string
raterequired string 1 base = rate quote (positive decimal). The inverse is derived.
effective_at string
date-time · nullable
Defaults to now.
expires_at string
date-time · nullable

Responses

201Rate stored
{
  "success": true,
  "data": {
    "id": "01997c1e-4d2a-7c3e-9a1b-2f0e8c6d4b5a",
    "base_currency": "EUR",
    "quote_currency": "USD",
    "rate": "1.081000000000000000",
    "inverse_rate": "0.925069380203515263",
    "source": "manual",
    "effective_at": "2026-01-15T10:30:00Z",
    "created_at": "2026-01-15T10:30:00Z"
  }
}
401Unauthenticated
{
  "success": false,
  "message": "Validation failed",
  "code": "VALIDATION_ERROR"
}
409A rate already exists for this pair at that effective time
{
  "success": false,
  "message": "Validation failed",
  "code": "VALIDATION_ERROR"
}
422Validation error
{
  "success": false,
  "message": "Validation failed",
  "code": "VALIDATION_ERROR"
}

Examples

curl -X POST https://ledga.io/api/v1/fx/rates \
  -H "Authorization: Bearer sk_xxxxxxxx_your_secret" \
  -H "Content-Type: application/json" \
  -d '{
  "base_currency": "EUR",
  "quote_currency": "USD",
  "rate": "1.081"
}'

← All endpoints