Scribeless
Recipients

Create recipients

Create one or more recipients for a Scribeless campaign.

Create one or more recipients for an existing Scribeless campaign.

POST https://platform.scribeless.co/api/recipients

You must create the campaign first. Use the campaign ID as campaignId in the request body.

Headers

Content-Type: application/json
X-API-Key: YOUR_API_KEY

Request body

FieldTypeDescription
campaignIdstringExisting Scribeless campaign ID.
dataobject or arrayOne recipient object, or an array of recipient objects.
data.titlestringOptional recipient title.
data.firstNamestringRecipient first name.
data.lastNamestringRecipient last name.
data.companystringOptional company name.
data.addressobjectRecipient postal address.
data.variablesobjectOptional custom variables for campaign personalization.
data.variables.externalIdstring or numberOptional external system ID for this recipient.

Address fields

Send recipient addresses as a nested address object:

FieldRequiredDescription
address.address1Usually yesFirst address line. Required for mailed campaigns.
address.address2NoSecond address line.
address.address3NoThird address line.
address.cityUsually yesCity, town, or locality.
address.stateConditionalState or region. Required for countries such as the US and Canada.
address.postalCodeConditionalPostal or ZIP code, where used by the destination country.
address.countryUsually yesTwo-letter country code, for example GB or US.

Campaign configuration determines which fields are required. For mailed campaigns, provide a complete postal address. Names and campaign variables still need to match the campaign setup.

Variables and custom fields

Use variables for campaign personalization values that are not standard name, company, or address fields.

{
  "variables": {
    "custom1": "This is a personalized first sentence",
    "custom2": "www.scribeless.co",
    "voucherCode": "SPRING-25"
  }
}

Keep variable names consistent with the campaign template. Send strings for values that will be rendered into handwritten copy.

External IDs

If your integration has its own stable ID for the recipient, customer, order, lead, or source record, send it as variables.externalId.

{
  "variables": {
    "externalId": "order_12345",
    "custom1": "This is a personalized first sentence"
  }
}

externalId is stored with the recipient and returned when you fetch the recipient later. It must be sent inside variables; a top-level externalId field is ignored.

For teams with external ID upsert enabled, Scribeless can use variables.externalId to update an existing ready recipient in the same ready recurring campaign instead of creating a duplicate. This behaviour depends on your account and campaign setup, so treat externalId as an external reference unless Scribeless has confirmed upsert is enabled for your workflow.

Create one recipient

curl --request POST 'https://platform.scribeless.co/api/recipients' \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: YOUR_API_KEY' \
  --data '{
    "campaignId": "CAMPAIGN_ID",
    "data": {
      "title": "Mr",
      "firstName": "Joe",
      "lastName": "Blogs",
      "company": "Blogs Inc.",
      "address": {
        "address1": "123 Blogs St",
        "address2": "Unit 4",
        "address3": "",
        "city": "Bristol",
        "state": "Bristol",
        "postalCode": "AB123CD",
        "country": "GB"
      },
      "variables": {
        "custom1": "This is a personalized first sentence",
        "custom2": "www.scribeless.co"
      }
    }
  }'

Create multiple recipients

curl --request POST 'https://platform.scribeless.co/api/recipients' \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: YOUR_API_KEY' \
  --data '{
    "campaignId": "CAMPAIGN_ID",
    "data": [
      {
        "title": "Mr",
        "firstName": "Joe",
        "lastName": "Blogs",
        "company": "Blogs Inc.",
        "address": {
          "address1": "123 Blogs St",
          "city": "Bristol",
          "state": "Bristol",
          "postalCode": "AB123CD",
          "country": "GB"
        },
        "variables": {
          "custom1": "Thanks for being with us for one year"
        }
      },
      {
        "title": "Mrs",
        "firstName": "Janet",
        "lastName": "Blogs",
        "company": "Blogs Inc.",
        "address": {
          "address1": "123 Blogs St",
          "city": "San Francisco",
          "state": "CA",
          "postalCode": "12345",
          "country": "US"
        },
        "variables": {
          "custom1": "Your order has shipped"
        }
      }
    ]
  }'

Successful response

Successful requests return an array of the created or updated recipient records.

[
  {
    "id": "RECIPIENT_ID",
    "title": "Mr",
    "first_name": "Joe",
    "last_name": "Blogs",
    "company": "Blogs Inc.",
    "address1": "123 Blogs St",
    "address2": "Unit 4",
    "address3": "",
    "city": "Bristol",
    "state": "Bristol",
    "postal_code": "AB123CD",
    "country": "GB",
    "region": null,
    "variables": {
      "custom1": "This is a personalized first sentence",
      "custom2": "www.scribeless.co"
    },
    "created_at": "2026-01-01T10:00:00.000000+00:00",
    "updated_at": "2026-01-01T10:00:00.000000+00:00",
    "team_id": "TEAM_ID",
    "campaign_id": "CAMPAIGN_ID",
    "status": "pending"
  }
]

Treat any non-2xx response as failed and inspect the response body for message and any structured data.

You can fetch an individual recipient later with GET /api/recipients/{recipientId}. Once Scribeless has rendered the recipient, use GET /api/recipients/{recipientId}/preview to download a PNG preview.

For approved partner invoice-billed one-time campaigns, call POST /api/recipients/checkout after creating recipients. If a one-time campaign has already been paid or finalized, create a new campaign for the next send instead of adding more recipients.

Error examples

Missing or invalid API key:

{
  "error": true,
  "url": "https://platform.scribeless.co/api/recipients",
  "statusCode": 401,
  "statusMessage": "Server Error",
  "message": "Invalid authentication token."
}

Invalid recipient field:

{
  "error": true,
  "url": "https://platform.scribeless.co/api/recipients",
  "statusCode": 400,
  "statusMessage": "Server Error",
  "message": "Validation error",
  "data": {
    "_errors": [],
    "data": {
      "_errors": [
        "Expected array, received object",
        "Expected array, received object"
      ],
      "address": {
        "_errors": [
          "Required",
          "Required"
        ]
      },
      "firstName": {
        "_errors": [
          "Required"
        ]
      }
    }
  }
}

Invalid campaign state:

{
  "error": true,
  "url": "https://platform.scribeless.co/api/recipients",
  "statusCode": 400,
  "statusMessage": "Server Error",
  "message": "Failed to create recipients"
}

Status codes

Common status codes:

StatusMeaning
2xxRecipient request accepted.
400Missing or invalid request data.
401Missing, malformed, invalid, or unauthorized API key or campaign/recipient action.
503Temporary service issue. Retry later or contact support if it persists.

Testing and billing

Use a testing campaign and one non-sensitive recipient before turning on an automation. Testing recipients should not be treated as live mail. Live recipient creation can create billable usage according to the campaign product and delivery settings.

Copyright © 2026