Dry-run dispatch — tests a single (integration config, address) tuple through the full sender pipeline without requiring a persisted participant.
Drives the participant dialog's "Try this address" affordance so the operator confirms a Telegram chat_id / Slack channel id / phone number actually works *before* saving the row. The address is validated against the integration's `AddressFormat` descriptor (Phase 4a) first; format mismatches surface as 400 with the descriptor's hint. A real provider call follows on valid addresses — the operator should send a brief test message. No audit row is written (no participant id to attach it to) and no agent binding gate applies — this is purely a dispatch smoke test.
Authorization
Bearer JWT Authorization header using the Bearer scheme. Enter 'Bearer' [space] and then your token.
In: header
Path Parameters
The tenant identifier
The TenantIntegrationConfig to send through (decrypted server-side).
uuidThe provider-native destination address (chat_id, channel id, phone, …).
1 <= length <= 4000Text to dispatch. Required — a dry-run still hits the provider. Keep it short and obviously a test so a real chat doesn't surface a stray "fruxon test" message in production conversations.
1 <= length <= 4000Response Body
curl -X POST "https://api.fruxon.com/v1/tenants/string/participants:dryRunSend" \ -H "Content-Type: application/json" \ -d '{ "integrationConfigId": "928c9032-93b2-49a3-82db-be1a31402d0e", "address": "string", "message": "string" }'{
"outcome": "NO_CHANNEL",
"providerMessageId": "string",
"errorCode": "string",
"errorMessage": "string"
}{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"property1": null,
"property2": null
}{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"property1": null,
"property2": null
}Soft-pauses the participant
Sets the participant's `DisabledAt` timestamp. While disabled: inbound resolution skips them (the message will fall through to the connector-level policy / not match an agent), and outbound dispatch returns `DispatchOutcome.Disabled` distinct from the misconfig- flavored `NoChannel`. Agent bindings and channels are preserved so enabling restores the prior state without re-wiring. Returns 404 when the participant does not exist; re-disabling is a no-op (the original timestamp is kept).
Re-activates a previously paused participant
Clears the participant's `DisabledAt`. Channel-level `Disabled` flags are preserved — to clear those, send a PATCH with a modified channel list. Re-enabling an already-enabled participant is a no-op.