Skip to main content

Send postcards with the Scribeless API

Use Scribeless as the direct mail layer for workflows that create personalized postcards, cards, letters, QR codes, recipient data, and HTML creative from your own app or AI workflow.

Scribeless handles production and mailing: templates, previews, batching, print, postage, and delivery. Your app handles the upstream logic: selecting recipients, generating copy, creating landing pages, creating QR links, or generating postcard creative.

Common workflow

1. Create a recurring campaign in the Scribeless platform.

2. Keep the campaign in `Pending` while testing.

3. Generate an API key in `Settings > API Keys`.

4. Add recipients with `POST https://platform.scribeless.co/api/recipients`.

5. Pass address fields and template variables in the request body.

6. Review generated previews in Scribeless.

7. Activate the campaign when you are ready to send live mail.

Recipients added to a `Pending` recurring campaign generate previews but are not printed, mailed, or charged. After activation, new recipients may be processed, mailed, and charged.

Authentication

All API requests must include your API key in the X-API-Key header.

X-API-Key: YOUR_API_KEY

You can create an API key in the Scribeless platform under Settings > API Keys.

Keep your API key private. Do not commit it to GitHub, expose it in client-side code, or paste it into public artifacts.

Add one recipient

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

Add multiple recipients

To add multiple recipients in one request, pass an array to 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": "Personalized opening line",
"custom2": "https://example.com/v/joe-blogs"
}
}
]
}

Template variables

Use the variables object to pass dynamic values into your Scribeless campaign template.

The default variable naming convention is:

{
"variables": {
"custom1": "First custom value",
"custom2": "Second custom value"
}
}

Create matching variable fields in your Scribeless template, then pass those values with each recipient.

Common uses:

  • A personalized first line

  • A QR destination URL

  • A private preview URL

  • A product, venue, property, or account name

  • A reviewer quote or short snippet

  • A campaign-specific CTA

HTML postcard workflows

Some workflows generate the full front and/or back artwork as HTML before sending it to Scribeless. Use this when your app or AI workflow creates custom postcard layouts, dynamic copy, QR destinations, hosted images, brand styling, or recipient-specific creative.

HTML content is passed inside variables.html.
​

{
"campaignId": "CAMPAIGN_ID",
"data": [
{
"firstName": "June",
"lastName": "Team",
"company": "June",
"address": {
"address1": "231 Court St",
"city": "Brooklyn",
"state": "NY",
"postalCode": "11201",
"country": "US"
},
"variables": {
"custom1": "I saw Ina mention your seasonal menu.",
"custom2": "https://example.com/v/june",
"html": {
"front": "<main><h1>June</h1><p>I saw Ina mention your seasonal menu.</p></main>",
"back": "<main><p>Scan the QR to view your private preview.</p></main>"
}
}
}
]
}

variables.html must be an object, not a string. front and back are optional strings, and each side is capped at 250 KB.

HTML requirements

When sending HTML creative:

  • Use self-contained HTML for each side.

  • Size the artwork for the postcard or flat-card format you are using.

  • Keep CSS inline or inside the HTML string.

  • Do not rely on JavaScript. JavaScript is disabled during rendering.

  • Do not rely on external stylesheets, scripts, fetch requests, iframes, or form actions.

  • Inline data:image/* images are allowed.

  • External images must use HTTPS, be publicly reachable, and must not redirect.

  • Hosted fonts should use supported font URLs, currently https://fonts.gstatic.com/.

  • Folded card products are not supported for HTML recipient rendering.

  • Test with a Pending campaign before activating live sends.

If your workflow generates an image or PDF instead of HTML, contact the Scribeless team so we can help choose the best setup.

QR and private preview workflows

Automated postcard campaigns often work best when each recipient gets a unique preview URL.

Example workflow:

  1. Your app creates a private preview page.

  2. Your app passes the preview URL as variables.custom2.

  3. Your Scribeless template or HTML creative renders that URL as a QR code or printed link.

  4. When the recipient scans, your app logs the visit and triggers follow-up.

Send yourself a sample

Before sending live mail, send yourself a sample and check print quality, image clarity, QR scan behavior, copy, personalization, address formatting, and landing-page behavior.

Need help?

For API, HTML rendering, QR, image, campaign setup, or implementation issues, contact Scribeless through live chat or email [email protected].

Please include:

  • Your use case

  • Expected monthly volume

  • The mailer format you want to send

  • Whether you are passing template variables, HTML, images, PDFs, or QR URLs

  • The countries you want to mail to

  • A sample payload with API keys removed

Did this answer your question?