Skip to main content
POST
/
api
/
v1
/
subscribers
/
tags
/
bulk
Add Tags (Bulk)
curl --request POST \
  --url https://api.sequenzy.com/api/v1/subscribers/tags/bulk \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "email": "<string>",
  "externalId": "<string>",
  "tags": [
    "<string>"
  ],
  "customAttributes": {}
}
'
{
  "success": true,
  "subscriber": {
    "id": "sub_abc123",
    "email": "user@example.com",
    "externalId": "user_123",
    "tags": ["customer", "newsletter", "pro-plan"],
    "created": false
  },
  "tags": {
    "added": ["customer", "newsletter", "pro-plan"],
    "created": ["pro-plan"]
  }
}
Add multiple tags to a subscriber in one request. Creates the subscriber and/or tags if they don’t exist.

Request Body

email
string
Subscriber delivery email address. Required when creating a new subscriber.
externalId
string
Your app/customer/user ID for this subscriber. You can add tags with only externalId when the subscriber already exists.
tags
string[]
required
Array of tag names to add
customAttributes
object
Custom attributes to set on the subscriber.
curl -X POST "https://api.sequenzy.com/api/v1/subscribers/tags/bulk" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "user@example.com",
    "externalId": "user_123",
    "tags": ["customer", "newsletter", "pro-plan"]
  }'

Auto-Creation Behavior

This endpoint automatically creates resources if they don’t exist:
ResourceBehavior
SubscriberCreated if email doesn’t exist - active status, or pending confirmation when double opt-in is enabled
TagsEach tag created and normalized if it doesn’t exist

Double Opt-In

When the workspace has double opt-in enabled and this request creates a brand-new subscriber, the subscriber is stored pending confirmation and the confirmation email is queued. The tags are still applied immediately, but tag automations wait at their trigger step until the subscriber confirms. The response then includes an optIn object.

Responses

{
  "success": true,
  "subscriber": {
    "id": "sub_abc123",
    "email": "user@example.com",
    "externalId": "user_123",
    "tags": ["customer", "newsletter", "pro-plan"],
    "created": false
  },
  "tags": {
    "added": ["customer", "newsletter", "pro-plan"],
    "created": ["pro-plan"]
  }
}

Response Fields

FieldDescription
subscriber.createdtrue if subscriber was created by this request
tags.addedAll tags now on the subscriber from this request
tags.createdTags that were newly created (didn’t exist before)
optInPresent when the new subscriber requires double opt-in confirmation before becoming active

Use Cases

New Customer Onboarding

# Tag with multiple attributes at once
curl -X POST "https://api.sequenzy.com/api/v1/subscribers/tags/bulk" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "new-customer@example.com",
    "tags": ["customer", "onboarding", "2024-cohort", "source-organic"],
    "customAttributes": {
      "plan": "pro",
      "signupDate": "2024-01-15"
    }
  }'

Update Segments

# Batch update subscriber segments
curl -X POST "https://api.sequenzy.com/api/v1/subscribers/tags/bulk" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "user@example.com",
    "tags": ["enterprise", "high-value", "priority-support"]
  }'
Tags are normalized (lowercase, hyphens) before being added. The tags.created array shows which tag definitions were newly created by this request.