Skip to main content

skrybe subscribers

Add, remove and inspect the subscribers on a list. subs is an alias: skrybe subs add ... works the same.

Every subcommand takes --list <list-id>, the encrypted list ID that skrybe lists prints. It is required.

CommandDescription
subscribers lsA list's subscribers, oldest first
subscribers addAdd a subscriber, or update one already on the list
subscribers statusOne address's state on a list
subscribers unsubscribeUnsubscribe an address, keeping its record
subscribers deleteRemove an address from a list outright

subscribers ls​

skrybe subscribers ls --list <list-id> [--status <status>] [--page <n>] [--limit <n>] [--all]

Shows a list's subscribers, oldest first. list is an alias for ls. There is no bare skrybe subscribers listing; use ls.

FlagDescription
--list <list-id>The list. Required
--status <status>Only subscribers in this state: active, unconfirmed, unsubscribed, bounced or complained
--page <n>Page to show. Default 1
--limit <n>Subscribers per page, 1 to 1000. Default 100
--allFetch every page. Cannot be combined with --page or --limit

Each subscriber is in exactly one state. active is who a campaign sends to.

skrybe subscribers ls --list l7763lkC1Ld892Ty4p3pvxw --status active
Showing 1-100 of 1,204. Use --page, or --all.
EMAIL NAME STATUS JOINED
ada@example.com Ada Lovelace active 2026-08-31 10:18
grace@example.com Grace Hopper active 2026-09-02 14:40

The Showing ... line goes to stderr, and only under table. Join times are shown in your local timezone (joined_at in JSON is Unix seconds).

--output text prints the same four columns, tab-separated, with no header. --output json prints an array of subscribers that also carries each one's custom fields by name, with dates as YYYY-MM-DD and empty values as null:

[
{
"email": "ada@example.com",
"name": "Ada Lovelace",
"status": "active",
"joined_at": 1788167880,
"custom_fields": { "City": "Lagos", "Birthday": "1990-01-01" }
}
]

API: api/subscribers/get-subscribers.php

subscribers add​

skrybe subscribers add <email> --list <list-id> [options]

Adds an address to a list. If the address is already on the list, its name and custom fields are updated instead, and the command still exits 0, so a script can be re-run safely.

FlagDescription
--list <list-id>The list. Required
--name <name>The subscriber's name
--field <Name=value>A custom field, by its personalization tag name. Repeatable
--country <code>Two-letter ISO country code, e.g. NG
--ip-address <ip>IP address the signup came from
--referrer <url>URL the signup came from
--gdprRecord GDPR consent, for an EU signup. Required by lists that ask for consent
--silentOn a double opt-in list, add the subscriber without sending the confirmation email

Custom fields are named by their personalization tag: Birthday for a field whose tag is [Birthday,fallback=]. Run skrybe lists fields to see a list's fields. The value is split on the first =, so values may contain =. Spaces in a field name are removed before sending (Favourite colour is sent as Favouritecolour), which is how the API matches them.

skrybe subscribers add ada@example.com --list l7763lkC1Ld892Ty4p3pvxw \
--name 'Ada Lovelace' --field Birthday=1990-01-01 --field City=Lagos
✓ ada@example.com subscribed.

--output json reports which happened, subscribed or already_subscribed:

{ "email": "ada@example.com", "list_id": "l7763lkC1Ld892Ty4p3pvxw", "outcome": "already_subscribed" }

Common errors: invalid_email, bounced_email, suppressed_email, consent_not_given (pass --gdpr), invalid_country, and recaptcha_failed when the list has reCAPTCHA turned on for its subscribe form, which an API call cannot pass.

API: subscribe

subscribers status​

skrybe subscribers status <email> --list <list-id>

Prints the address's state on the list as the API reports it: for example Subscribed, Unsubscribed, Unconfirmed, Bounced, Soft bounced or Complained. Under table and text it is the bare word, so it can be tested:

if skrybe subscribers status ada@example.com --list "$LIST" | grep -q '^Subscribed$'; then
echo "still subscribed"
fi

Under --output json: {"email": "...", "list_id": "...", "status": "Subscribed"}.

An address that is not on the list fails with subscriber_not_found (exit code 1).

API: api/subscribers/subscription-status.php

subscribers unsubscribe​

skrybe subscribers unsubscribe <email> --list <list-id>

Marks the address as unsubscribed. The record stays on the list, so it will not be emailed again and its history is kept.

Under --output json: {"email": "...", "list_id": "...", "outcome": "unsubscribed"}.

API: unsubscribe

subscribers delete​

skrybe subscribers delete <email> --list <list-id>
skrybe subscribers rm <email> --list <list-id>

Removes the subscriber's record from the list outright. This does not ask for confirmation.

Under --output json: {"email": "...", "list_id": "...", "outcome": "deleted"}.

API: api/subscribers/delete.php