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.
| Command | Description |
|---|---|
subscribers ls | A list's subscribers, oldest first |
subscribers add | Add a subscriber, or update one already on the list |
subscribers status | One address's state on a list |
subscribers unsubscribe | Unsubscribe an address, keeping its record |
subscribers delete | Remove 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.
| Flag | Description |
|---|---|
--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 |
--all | Fetch 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.
| Flag | Description |
|---|---|
--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 |
--gdpr | Record GDPR consent, for an EU signup. Required by lists that ask for consent |
--silent | On 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"}.