/api/v1; for the Ruut-hosted application this is https://convert.ruut.chat/api/v1. If your organisation uses another deployment, replace the origin in every example.messages:write. Copy the key when it is displayed and store it on your server. Connect and confirm the sending channel; test mode still validates required sender/channel options.test: true for the single-message API. This validates the recipient, channel, template, and required options without sending, creating a recipient status record, or charging the wallet. It is not a substitute for a controlled live deliverability test.1234567891011export CONVERT_BASE_URL="https://convert.ruut.chat" export CONVERT_API_KEY="YOUR_API_KEY" IDEMPOTENCY_KEY="$(uuidgen)" curl --fail-with-body "$CONVERT_BASE_URL/api/v1/messages" -H "Authorization: Bearer $CONVERT_API_KEY" -H "Idempotency-Key: $IDEMPOTENCY_KEY" -H "Content-Type: application/json" -d '{ "to": "[email protected]", "channel": "email", "subject": "Order update", "message": "Hi Ada, your order has shipped.", "test": true }'
201, success: true, channel: "email", status: "validated", and cost: 0. The provider message ID can be absent because no message was submitted.test or set it to false only when you intend delivery. Generate a new idempotency key because changing the payload creates a new request. Use the intended recipient and an active confirmed sender; review the wallet or plan allowance first.POST /api/v1/messages.POST /api/v1/messages/batch, then inspect the batch ID.