Skip to content

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.

  1. 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.
  2. 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.
  3. 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.
  4. Open a field's advanced settings to edit its stable name and text byte limits. The supported field types are string, select, number, integer, and boolean. 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.
  5. 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.
  6. 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.
  7. 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-empty method. provider is still required as the route code; manual is a conventional value, not a special server enum. Transactions created through manual execution are identified as manual by their source = 1, regardless of the configured provider string.
  • Supported form field types are string, select, number, integer, and boolean.
  • required, options, depends_on, options_by, min_length, and max_length are enforced by the server when a manual deposit or withdrawal is created. Select options and dependent option values are strings.
  • For manual deposits, submitted details are included in the transaction's metadata_json; the response's payment.instructions_json contains the serialized public settings_json instructions.
  • Config is applied to Cashier cache immediately.
  • SQLite synchronization is queued through the Cashier DB strand.
  • If enabled is 1 and execution_mode is 0, Cashier copies the matching provider .so to var/sttrader/payments under 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.