Skip to main content

Create signal

POST 

/api/v1/signals

Create a new trading signal. Accepts JWT (web UI) or API Key with signals:write scope (automation).

The executeMode field controls processing behaviour:

  • immediate: signal is processed and order placed right away.
  • scheduled: signal is queued and processed at scheduledProcessAt. Requires scheduledProcessAt and timezone.

UTM is a translation layer. The caller owns intent and dedup. UTM refuses only signals the broker would reject. A same-direction signal for an (account, strategy, symbol, action) that already has a live (queued, processing, transmitted) signal is rejected with HTTP 409 and code DUPLICATE_INTENT (response details carries conflictingSignalId). See docs/developer/decisions.md.

Cross-field validation rules:

  • scheduledProcessAt is required when executeMode is "scheduled".
  • timezone is required when scheduledProcessAt or validUntil is set.
  • limitPrice is required for limit and stopLimit orders.
  • stopPrice is required for stop and stopLimit orders.
  • exitTriggerMinutes is required when exitTriggerType is minutesAfterEntry or minutesBeforeClose.
  • exitTriggerTime is required when exitTriggerType is atClockTime.
  • MOC exit orders require exitTimeInForce: cls and a 15-minute minimum when paired with minutesBeforeClose.

Request

Responses

Signal created. Status depends on executeMode and broker response.