Transaction Errors
Every diagnosed webhook failure is tagged with a stable code. Codes never change once issued - only new ones are added. Codes appear in two places at runtime:
- On the
Transaction.Messagecolumn for failed rows, prefixed in square brackets (for example[DSWBHK020] Status code: 502.). See the Errors page. - In NLog / Application Insights logs as
errorCode={ErrorCode}on the structured log line.
Retried codes are picked up automatically by the retry job (3 attempts, exponential backoff with jitter, then the row stays Failed for the next pass). Fix configuration codes need a connector or partner setup change first - the in-pipeline policy does not retry them, but the DB-retry job picks Failed rows up on the next pass. Undiagnosed failure shapes should be sent to support so a rule can be added.
Each section pairs 💡 (what it means) with 🛠️ (what to do).
Quick lookup
| Code | Goes to | Status | Retry |
|---|---|---|---|
DSWBHK001 | Webhook not allowed | BackOfficeNotAllowed | fix config |
DSWBHK002 | Empty or malformed URL | WrongUrl | fix config |
DSWBHK003 | Wrong connector type | InvalidBackOfficeType | fix config |
DSWBHK010 | Partner endpoint timeout | Failed | retried |
DSWBHK020 | Partner HTTP failure | Failed | retried |
DSWBHK030 | Circuit breaker open | Failed | retried |
DSUNK001 | Undiagnosed | Failed | undiagnosed |
Webhook not allowed
DSWBHK001fix configurationEmpty or malformed URL
DSWBHK002fix configurationhttps://... URL for the webhook endpoint in the connector settings.Wrong connector type
DSWBHK003fix configurationWebhook - typically a stale row from an older connector definition.Partner endpoint timeout
DSWBHK010retried automaticallyTimeoutException).Failed rows after the configured TTL.Partner HTTP failure
DSWBHK020retried automaticallyCircuit breaker open
DSWBHK030retried automaticallyFailed rows. No action needed unless the underlying partner endpoint is still unavailable.Undiagnosed
DSUNK001undiagnosederrorCode=DSUNK001 so it can be triaged into a new rule.Cross-cutting codes
These are emitted by the shared connector layer and may also surface on webhook transactions when the failure happens before the delivery code runs. Their definitions live with the Business Central transaction errors:
DSCFG001-BackOfficeNotAllowed(shared, mirrorsDSWBHK001semantics).DSCFG002-DSCFG008- connector-configuration validation failures (argument, null reference, invalid system cast, malformed URL, rejected credentials).DSHTTP001- generic HTTP transient (the shared transient rule before it's specialised intoDSWBHK020).DSDB001-DSDB004- database / persistence transients during transaction-row writes.