Preview an automation
/api/v1/automations/{automation}/dry-runWalks the current draft for up to three real contacts with the checks made for real and the waits skipped, and — where the start can be counted in advance — how many people would enter today. Sends nothing and writes nothing.
Pass deliver_to_sandbox: true to also put each email those contacts would receive into your Sandbox, built exactly as a real run builds it, so you can open the actual message. Nothing is delivered, no run is recorded and no credits are used; sandbox_messages in the response lists what landed. Refused with 422 when the Sandbox is not available.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
automationrequired | path | string | The automation identifier. |
Request body
deliver_to_sandboxbooleanAlso submit the sample contacts' emails to your Sandbox.
Request
/api/v1/automations/{automation}/dry-runcurl -X POST 'https://app.mailyte.com/api/v1/automations/01JBT8XQ2M9WYC3K4F6R7S8T9V/dry-run' \
-H 'Authorization: Bearer mk_live_YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"deliver_to_sandbox": true
}'const response = await fetch('https://app.mailyte.com/api/v1/automations/01JBT8XQ2M9WYC3K4F6R7S8T9V/dry-run', {
method: 'POST',
headers: {
Authorization: 'Bearer mk_live_YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"deliver_to_sandbox": true
}),
});
const { data } = await response.json();import requests
response = requests.post(
"https://app.mailyte.com/api/v1/automations/01JBT8XQ2M9WYC3K4F6R7S8T9V/dry-run",
headers={"Authorization": "Bearer mk_live_YOUR_API_KEY"},
json={
"deliver_to_sandbox": true
},
)
data = response.json()["data"]<?php
$response = Http::withToken('mk_live_YOUR_API_KEY')
->post('https://app.mailyte.com/api/v1/automations/01JBT8XQ2M9WYC3K4F6R7S8T9V/dry-run', [
'deliver_to_sandbox' => true,
]);
$data = $response->json('data');require "net/http"
require "json"
uri = URI("https://app.mailyte.com/api/v1/automations/01JBT8XQ2M9WYC3K4F6R7S8T9V/dry-run")
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer mk_live_YOUR_API_KEY"
request["Content-Type"] = "application/json"
request.body = {
"deliver_to_sandbox": true
}.to_json
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(request) }Response
Success.
dataobjecttriggerobjectmatching_todayintegerContacts who match the trigger today. Null when the trigger has no audience to count (an event nobody has sent yet).
unsubscribedintegernot_mailableintegerUnsubscribed, bounced, complained or unconfirmed.
would_be_cappedintegersamplesarray<object>contactobjectidstringemailstringnamestring
timelinearray<object>node_idstringtypestringsummarystringbranchstring
sandbox_messagesarray<object>Present only when the request asked for `deliver_to_sandbox`: one entry per email a sample contact reached, in walk order.
contactobjectidstringemailstringnamestring
node_idstringsandbox_message_idstringOpen it with GET /sandbox/messages/{id}. Null when this email could not be built; see `error`.
errorstring
Returned inside the standard envelope.
Errors
| Status | When |
|---|---|
401 | The API key is missing, unknown, revoked or expired. All four answer identically, on purpose: distinguishing them would confirm which keys exist. |
403 | The key is valid but may not do this: it lacks the required scope, its IP allowlist does not include you, or this endpoint does not accept API keys. |
404 | No such resource in this organization. |
422 | The request was understood but the values were not acceptable. |
429 | Too many requests, or the organization has spent its sending allowance. `Retry-After` says how long to wait. |
Every status, with what causes it and what to do, is on the error reference.