MngAddCashierProviderConfig¶
Creates a brand-level payment provider configuration. Set transaction_type
to select deposit, withdrawal, or both, and execution_mode to select an
automatic provider module or a manual review flow.
Cashier uses normalized fields for routing and eligibility (provider,
brand, method, currency, country, limits, enabled). Provider-specific
credentials and behavior are stored in config_json and passed to the loaded
payment module when the provider instance is created. Manual configs use
execution_mode = 1 and do not require a payment module. For manual deposits,
settings_json contains the public receiving instructions returned to the
customer after the request is created; it must encode a JSON object. For
manual withdrawals, form_schema describes the payout details the customer
must submit.
Access¶
SESSION_MANAGER, SESSION_ADMIN, SESSION_DEALER,
SESSION_CRM_MANAGER, SESSION_CRM_ADMIN.
Requires set_finance. Provider config brand must be inside manager brand scope.
Manual method selection in CRM¶
For manual configs, CRM displays a Payment method selector with readable
choices: Bank transfer (bank_transfer), Cryptocurrency (crypto),
and Other method (other). Select a method explicitly. When editing a
config with a different saved method, CRM retains that method as an option
and sends its original value.
These choices are CRM form conventions; the server's method remains a string,
not a fixed enum. Automatic module configs retain their method text input.
Selecting a manual method does not replace the saved customer form schema or
receiving instructions; apply a customer-detail preset explicitly when needed.
CRM field help¶
Hover over a field's help icon or focus it with the keyboard to read the explanation. Form hints appear above the dialog in a separate overlay, wrap long text and preserve line breaks. Their placement follows the visible screen area rather than the dialog width. Press Escape to dismiss a hint. Cashier hints distinguish deposit receiving details from customer-supplied withdrawal recipient fields.
Build a manual method in CRM¶
On wide screens, provider settings and the customer form editor occupy the left column. Terminal preview starts at the top of the right column and stays visible while scrolling. Narrow windows stack these sections vertically.
- Set Processing to Manual approval, then choose Deposit, Withdrawal, or Deposit and withdrawal under Direction. Manual methods do not need a payment module. The customer form schema is shared when both directions are enabled.
- Choose a Payment method, then enter its customer-facing name and description, currency, and amount limits. The method choice is a CRM convenience; the server stores it as a string. Existing custom values remain available when editing a manual config.
- Build the customer form in Customer form. Add field cards, then set each field's label, input type, required state, and placeholder. Move fields up or down to control their order, or remove them. Choose Choice list as the input type to enter choices one per line; existing text fields with saved choices remain editable. A dependent choice field can name a parent field and define choices for each parent value. Start with a template previews an empty, bank, crypto, or payer form; press Apply template to replace the saved customer fields with that template. Selecting a template alone does not change the saved form. After editing a card field, leave its input to apply the change and refresh the preview.
- Open a field's advanced settings to edit its stable
nameand text byte limits. The supported field types arestring,select,number,integer, andboolean. Choice lists and dependent choices contain string values. The terminal uses this same form schema, so only the documented supported fields should be used for customer input. - For deposits or a config that supports both directions, set Receiving instructions for deposits and the receiving details separately from the customer form. These public settings are returned to the customer after submitting a manual deposit. They are not the bank or wallet details the customer enters for a withdrawal. Choose a suggested detail name or enter a custom customer-visible caption and value. Other saved receiving JSON, including nested values, is retained in the advanced settings.
- Use Terminal preview to try the form with sample account and amount values. Preview request only simulates the pending-review screen; it sends no Cashier request and does not affect a real account. For a config supporting both directions, choose which flow to preview.
- If a saved schema cannot be edited visually, the editor shows a fallback; inspect or edit it in Advanced configuration. Server-valid schemas can still be saved there with other config changes. Visual edits preserve unknown root and field properties, and receiving-setting edits preserve unrepresented nested values.
The editor stores the schema in form_schema_json and receiving instructions
in settings_json; these are the same config fields used by the request below.
Automatic configs keep their payment-module selection and settings workflow.
Request Parameters¶
| Name | Type | Required | Description |
|---|---|---|---|
provider |
string | Yes | Provider route code; module-backed configs use a code returned by the payment module, while manual configs may use manual |
brand |
string | Yes | Brand code |
method |
string | No | Payment method marker, for example card |
country |
string | No | Country filter. Empty means all countries |
currency |
string | No | Currency filter. Empty means all currencies |
transaction_type |
int | No | 0 deposit (default), 1 withdrawal, 2 both |
execution_mode |
int | No | 0 module (default), 1 manual execution |
payment_mode |
string | No | Client UI mode, normally redirect or details |
display_name |
string | No | Customer-facing method name |
description |
string | No | Customer-facing method description |
form_schema |
object | No | Dynamic details form schema; preferred object form |
form_schema_json |
string | No | Same schema encoded as JSON; do not send together with form_schema |
settings_json |
string | No | Settings JSON string; for manual deposits, a JSON object of public receiving instructions returned to the customer |
config_json |
string | No | Provider-specific configuration JSON string |
min_amount |
double | No | Minimum payment amount |
max_amount |
double | No | Maximum payment amount. 0 means no limit |
sandbox |
int | No | 1 sandbox, 0 production |
enabled |
int | No | 1 enabled, 0 disabled |
sort_index |
int | No | Sorting priority |
Provider-specific values such as merchant ids, API keys, webhook secrets,
terminal ids, and URLs must be stored inside config_json.
Request Example¶
{
"command": "MngAddCashierProviderConfig",
"extID": "1",
"data": {
"provider": "praxis",
"brand": "ion4",
"method": "card",
"country": "",
"currency": "USD",
"settings_json": "{}",
"config_json": "{\"merchant_id\":\"merchant-id\",\"application_key\":\"application-key\",\"secret_key\":\"merchant-secret\",\"webhook_secret\":\"webhook-secret\",\"api_base_url\":\"https://api.praxis.example\",\"cashier_base_url\":\"https://cashier.praxis.example\",\"api_version\":\"1.3\",\"locale\":\"en\"}",
"min_amount": 10.0,
"max_amount": 5000.0,
"sandbox": 0,
"enabled": 1,
"sort_index": 100
}
}
Manual crypto withdrawal example¶
{
"command": "MngAddCashierProviderConfig",
"extID": "manual-crypto-1",
"data": {
"provider": "manual",
"brand": "ion4",
"method": "crypto",
"country": "",
"currency": "USD",
"transaction_type": 1,
"execution_mode": 1,
"payment_mode": "details",
"display_name": "Cryptocurrency",
"description": "Manual cryptocurrency withdrawal",
"form_schema": {
"fields": [
{"name":"asset","type":"select","required":true,"options":["USDT","BTC"]},
{"name":"network","type":"select","required":true,"depends_on":"asset","options_by":{"USDT":["TRC20","ERC20"],"BTC":["Bitcoin"]}},
{"name":"address","type":"string","required":true,"min_length":10,"max_length":256},
{"name":"memo","type":"string","required":false,"max_length":128}
]
},
"min_amount": 50.0,
"max_amount": 10000.0,
"enabled": 1,
"sort_index": 10
}
}
Manual bank deposit example¶
{
"command": "MngAddCashierProviderConfig",
"extID": "manual-bank-deposit-1",
"data": {
"provider": "manual",
"brand": "ion4",
"method": "bank_transfer",
"country": "",
"currency": "USD",
"transaction_type": 0,
"execution_mode": 1,
"payment_mode": "details",
"display_name": "Bank transfer",
"description": "Send a bank transfer and include the payment reference",
"form_schema": {
"fields": [
{"name":"payer_name","type":"string","required":true,"max_length":128},
{"name":"payment_reference","type":"string","required":true,"max_length":64}
]
},
"settings_json": "{\"beneficiary\":\"Example Trading Ltd\",\"iban\":\"GB00EXAMPLE00000000000000\",\"bank_name\":\"Example Bank\",\"reference\":\"Use the reference returned with your request\"}",
"min_amount": 10.0,
"max_amount": 10000.0,
"enabled": 1,
"sort_index": 20
}
}
Response¶
Returns the created provider config. Sensitive fields, including config_json,
are hidden in the response.
The complete provider object uses the response fields defined in
MngGetCashierProviderConfigsByFilter,
including the generated id, parsed form_schema, and created_time /
updated_time timestamps. config_json is an empty string in the response.
{
"provider": {
"id": 1,
"provider": "praxis",
"brand": "ion4",
"method": "card",
"country": "",
"currency": "USD",
"transaction_type": 0,
"execution_mode": 0,
"payment_mode": "",
"display_name": "",
"description": "",
"form_schema_json": "{}",
"form_schema": {},
"settings_json": "{}",
"config_json": "",
"min_amount": 10.0,
"max_amount": 5000.0,
"sandbox": 0,
"enabled": 1,
"sort_index": 100,
"created_time": 1779270000,
"updated_time": 1779270000
}
}
Notes¶
- Module configs (
execution_mode = 0) require a matching loaded runtime payment module. - Manual configs (
execution_mode = 1) do not load or require a module and must have a non-emptymethod.provideris still required as the route code;manualis a conventional value, not a special server enum. Transactions created through manual execution are identified as manual by theirsource = 1, regardless of the configured provider string. - Supported form field types are
string,select,number,integer, andboolean. required,options,depends_on,options_by,min_length, andmax_lengthare enforced by the server when a manual deposit or withdrawal is created. Select options and dependent option values are strings.- For manual deposits, submitted
detailsare included in the transaction'smetadata_json; the response'spayment.instructions_jsoncontains the serialized publicsettings_jsoninstructions. - Config is applied to Cashier cache immediately.
- SQLite synchronization is queued through the Cashier DB strand.
- If
enabledis1andexecution_modeis0, Cashier copies the matching provider.sotovar/sttrader/paymentsunder a unique runtime name and creates a dedicated provider instance with this config. - One payment module can have multiple configs for different brands, methods, currencies, countries, or sandbox/prod routes.