Replace rule
Full replacement — all fields must be provided.
Authorization
BearerAuth HTTP bearer JWT from the Corebanq auth service.
Authorization is enforced with RBAC (record-level permissions), not ad-hoc OAuth-style scopes in this spec. See each tag description and operation summaries for which record grants apply.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PUT "https://example.com/v1/products/rules/8f2a1c3d-4e5b-6f7a-8b9c-0d1e2f3a4b5c" \ -H "Content-Type: application/json" \ -d '{ "allowed": true, "priority": 170, "active": true }'{
"product_code": "OFR",
"customer_type": "SMALL_BUSINESS",
"source_account_type": "crypto",
"source_currency": "USDT",
"source_channel": "SEPA",
"source_ownership": "own",
"dest_account_type": "fiat",
"dest_currency": null,
"dest_channel": "SEPA",
"dest_ownership": "own",
"source_account_scope": null,
"dest_account_scope": null,
"amount_range_start": null,
"amount_range_end": null,
"amount_range_currency": "EUR",
"allowed": true,
"min_amount": null,
"max_amount": null,
"limit_currency": null,
"priority": 170,
"valid_from": null,
"valid_to": null,
"active": true,
"comment": "OFR – Off-Ramp: crypto→fiat between own accounts (SMALL_BUSINESS)",
"metadata": {},
"id": "8f2a1c3d-4e5b-6f7a-8b9c-0d1e2f3a4b5c",
"tenant_id": "8f2a1c3d-4e5b-6f7a-8b9c-0d1e2f3a4b5c",
"created_at": "2019-08-24T14:15:22Z",
"created_by": "8f2a1c3d-4e5b-6f7a-8b9c-0d1e2f3a4b5c",
"modified_at": "2019-08-24T14:15:22Z",
"modified_by": "8f2a1c3d-4e5b-6f7a-8b9c-0d1e2f3a4b5c"
}{
"status": 400,
"code": "validation_error",
"message": "At least one of product_ids, source_account_id, destination_account_id, or destination_counterparty_id is required.",
"details": [
{
"field": "amount",
"rule": "gt",
"param": "0",
"message": "amount must be greater than 0"
}
],
"class": "validation",
"retryable": false
}{
"status": 400,
"code": "validation_error",
"message": "At least one of product_ids, source_account_id, destination_account_id, or destination_counterparty_id is required.",
"details": [
{
"field": "amount",
"rule": "gt",
"param": "0",
"message": "amount must be greater than 0"
}
],
"class": "validation",
"retryable": false
}{
"status": 400,
"code": "validation_error",
"message": "At least one of product_ids, source_account_id, destination_account_id, or destination_counterparty_id is required.",
"details": [
{
"field": "amount",
"rule": "gt",
"param": "0",
"message": "amount must be greater than 0"
}
],
"class": "validation",
"retryable": false
}{
"status": 400,
"code": "validation_error",
"message": "At least one of product_ids, source_account_id, destination_account_id, or destination_counterparty_id is required.",
"details": [
{
"field": "amount",
"rule": "gt",
"param": "0",
"message": "amount must be greater than 0"
}
],
"class": "validation",
"retryable": false
}{
"status": 429,
"message": "Rate limit exceeded",
"code": "rate_limits_m.exceeded",
"class": "temporary",
"retryable": true
}{
"status": 500,
"message": "Database error",
"code": "common.database_error",
"class": "business"
}{
"status": 503,
"message": "Internal server error",
"code": "auth_m.internal_server_error",
"class": "temporary",
"retryable": true
}