POST
/fx/ratesStore a manual exchange-rate override
Store a MANUAL rate override for the tenant.
Request bodyrequired
| Field | Type | Description |
|---|---|---|
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"
}'