skrybe emails
Send email without building a campaign first.
| Command | Description |
|---|---|
emails send | Send or schedule an email to addresses or lists |
emails send-transactional | Send one email to one address immediately |
emails send
skrybe emails send --subject <subject> --from-name <name> --from-email <email> \
--reply-to <email> --html-text <html|file://path> \
(--to <email>... | --list <list-id>...) [options]
Sends an email to up to 250 addresses, or to lists, now or at a scheduled time.
Behind the scenes the API creates a campaign; it appears in the dashboard with
the subject as its title. Without --list, the addresses are added to a new
list and the campaign is sent to that list.
| Flag | Description |
|---|---|
--subject <subject> | Subject line, also used as the campaign title. Required |
--from-name <name> | The From name. Required |
--from-email <email> | The From address. Its domain must be allowed for the brand. Required |
--reply-to <email> | The Reply-To address. Required |
--html-text <html> | HTML body, or file:// and a path to it. Required |
--plain-text <text> | Plain text body, or file:// and a path to it |
--to <email> | Recipient. Repeatable, up to 250 |
--list <list-id> | Send to this list instead. Repeatable |
--recipient-variables <json> | Per-recipient values as JSON, or file:// and a path to a JSON file |
--query-string <query> | Appended to links, e.g. Google Analytics tags |
--track-opens <mode> | 0 off, 1 on, 2 anonymous |
--track-clicks <mode> | 0 off, 1 on, 2 anonymous |
--schedule <date-time> | Schedule it, e.g. "June 15, 2027 6:05pm". Minutes in steps of 5 |
--timezone <tz> | Timezone for --schedule, e.g. America/New_York. Defaults to the brand's timezone |
The CLI requires at least one --to or --list, and refuses more than 250
--to addresses before sending anything. It does not ask for
confirmation.
--recipient-variables is a JSON object keyed by email address. Each key
becomes a value you can use in the body:
{
"ada@example.com": { "first": "Ada" },
"grace@example.com": { "first": "Grace" }
}
skrybe emails send \
--subject 'Your invite' --from-name Acme --from-email hello@acme.test --reply-to hello@acme.test \
--html-text file://invite.html \
--to ada@example.com --to grace@example.com \
--recipient-variables file://vars.json
The CLI checks that the JSON parses and is an object before sending, and fails with a usage error naming the flag if not.
Output: the API's message and the new campaign's ID. Under --output json:
{"message": "...", "campaign_id": "..."}.
The API docs for this endpoint say to is
required even when list_ids is passed, and that list_ids takes numeric list
IDs. The CLI accepts --list without --to. If a list-only send is refused,
add a --to address.
API: api/emails/send.php
emails send-transactional
skrybe emails send-transactional --to <email> --subject <subject> \
(--html-body <html|file://path> | --plain-body <text|file://path>) [options]
Sends one email to one address and delivers it immediately: nothing is queued or scheduled, and no list or campaign is created. Suited to one-time codes, password resets and alerts.
| Flag | Description |
|---|---|
--to <email> | Recipient. Required |
--subject <subject> | Subject line. Required |
--html-body <html> | HTML body, or file:// and a path to it |
--plain-body <text> | Plain text body, or file:// and a path to it |
--from-name <name> | Override the brand's From name |
--from-email <email> | Override the brand's From address |
--reply-to <email> | Override the brand's Reply-To address |
At least one of --html-body and --plain-body is required.
skrybe emails send-transactional \
--to ada@example.com --subject 'Your sign-in code' \
--from-email no-reply@acme.test \
--plain-body 'Your code is 481 516.'
Output: the API's message and the message ID. Under --output json:
{"message": "Email sent successfully.", "message_id": "..."}.
The API docs for this endpoint
say a request without from_email is refused, even though the CLI's help
describes --from-email as an override. Pass --from-email with an address on
one of the brand's allowed domains.