IndyWriters
Enabling newsletter platforms to offer easy and fair cross-promotion to their writers.
To gain access, connect with Ben J. Clarke at LinkedIn.
Enabling newsletter platforms to offer easy and fair cross-promotion to their writers.
To gain access, connect with Ben J. Clarke at LinkedIn.
IndyWriters works on a simple principle - if a newsletter sends a reader to a cross-promotion partner, then that newsletter should receive a new reader in return.
Ordinarily this restricts newsletters to cross-promoting with similar sized peers, greatly reducing the pool of potential partners. IndyWriters solves this problem by allowing newsletters to aggregate their cross-promotion.
Instead of only linking to one cross-promotion partner, newsletters can link to a list of several. Each partner in this list is scored for its likely relevance to the referring newsletter's readers, and the list is calibrated so that partners who contribute the most also receive the most.
Cross-promotion between newsletters is thus converted from a one-to-one relationship to a many-to-many relationship. IndyWriters works in the background to ensure that the give and take, however, is 1:1. If a newsletter sends a new reader, then it receives one in return.
For newsletter platforms, the API documentation below will guide you through the IndyWriter's functionality . Styles and usage may vary depending on how you choose to use the system.
For newsletter writers, cross-promoting with IndyWriters is simple (explainer graphic here) as including a unique link in their posts. The banner (and below code snippet - remember to change the href) are suggested, but you may style things to your own preferences:
<div style="background-color: #04160b; text-align: center; padding: 60px;">
<div style="width: 400px; margin: auto; color: #ffffff; font-family: Fira Sans, Lucida Sans Unicode, Lucida Grande, sans-serif; line-height: 1.2; text-align: center;">
<h1 style="color: #ffffff; font-size: 44px; font-weight: 700; margin-bottom: 10px; margin-top: 0;">Find Other Great Newsletters</h1>
<p style="margin-bottom: 30px;">Brilliant writing should be easy to find</p>
<a href="[newslettter's unique link (given to you upon creation)]" target="_blank" style="display: inline-block;
color:#1e3004;
text-decoration: none;
background-color: #bffb3f; color: #1e3004; font-size: 16px; font-weight: 400; padding: 20px; text-align: center; width: auto; word-break: keep-all;">View cross-promos</a>
</div>
</div>
Indywriters works as a backend API for cross-promotion. Newsletter platforms (members) incorporate it into their systems so that their users can cross-promote with others. This cross-promotion is across all of IndyWriters' members.
Data is created, read, updated and deleted by member platforms. Their newsletter writers do not hold user accounts on IndyWriters, but interact with our system and data via tools that our members build into their systems.
Requests must be made with https, and curl multipart/form-data (as in the examples) is highly recommended - functionality is not tested for any other way.
Although newsletter writers do not hold user accounts, it is necessary for newsletters to be created as objects in the IndyWriters database. These can be created and deleted by member platforms at will.
Upon creation, new newsletters will be reviewed to ensure that they are appropriate - i.e. are not grossly offensive, disreputable, etc.
To create a new newsletter object in IndyWriters use the curl below:
curl -X POST https://indywriters.com/api/newsletters/ \
-H "Username: XXXX" \
-H "API-Key: XXXXXXXX" \
-F "title=Newsletter Title" \
-F "tagline=An awesome newsletter that everybody will love reading" \
-F "url=https://awesomenewsletter.blog" \
-F "logo=@/path/to/resource" \
-F "topic_list=tech, ai" \
-F "external_id=XXXX"
Expected response if POST is successful:
{
"message": "Newsletter created and pending review.",
"newsletter":{
"external_id":"your internal id for the newsletter",
"reference":"1AUqWb4",
"cross_promotion_link": "https://indywriters.com/links/list/1AUqWb4/",
"title":"Newsletter Title",
"tagline":"An awesome newsletter that everybody will love reading.",
"url":"https://awesomenewsletter.blog",
"logo":"URL of image on IndyWriters",
"topics":["tech", "ai"],
"active":false,
"created":"2025-07-14T21:33:22.994548Z"
}
}
Three of these return values should be noted:
All updates are subject to the same review as new objects - a basic check to ensure the system is safe for all users. As such edits are made to a staging model - note the api/newsletter-edits route.
Updating is done via PATCH requests. title, tagline and logo can be changed easily. For the following:
curl -X PATCH https://indywriters.com/api/newsletter-edits/[reference]/ \
-H "Username: XXXX" \
-H "API-Key: XXXXXXXX" \
-F "title=Newsletter Title" \
-F "tagline=An awesome newsletter that everybody will love reading" \
-F "url=https://awesomenewsletter.blog" \
-F "logo=@/path/to/resource" \
-F "topic_list=tech, ai" \
-F "external_id=XXXX"
Expected response if PATCH is successful:
{
"message": "Newsletter edit requested and pending review.",
"newsletter":{
"external_id":"your internal id for the newsletter",
"reference":"1AUqWb4",
"cross_promotion_link": "https://indywriters.com/links/list/1AUqWb4/",
"title":"Newsletter With Edited Title",
"tagline":"An awesome newsletter that everybody will love reading.",
"url":"https://awesomenewsletter.blog",
"logo":"URL of image on IndyWriters",
"topics":["tech", "ai"],
"approved":false,
"created":"2025-07-14T21:33:22.994548Z"
}
}
Newsletter objects that you create on IndyWriters are administered by you. Only in exceptional circumstances - such as abuse of the system - will IndyWriters get involved. As such, you may delete newsletters at will.
Deletion is permanent, unrecoverable, and cascades - data associated with the newsletter will also be deleted.
curl -X DELETE https://indywriters.com/api/newsletters/[reference]/ \
-H "Username: XXXX" \
-H "API-Key: XXXXXXXX"
Expected response if DELETE is successful:
{
"message": "Newsletter deleted.",
"newsletter":{
...
}
}
curl -X GET https://indywriters.com/api/newsletters/ \
-H "Username: XXXX" \
-H "API-Key: XXXXXXXX"
curl -X GET https://indywriters.com/api/newsletters/[reference]/ \
-H "Username: XXXX" \
-H "API-Key: XXXXXXXX"
Newsletter writers will probably like to see evidence that their cross-promotions are working. UTM params are in place to show that referrals have come from IndyWriters (and your platform), but it's useful for you to be able to present data to your users.
The currency of IndyWriters is clicks - i.e. readers of one newsletter clicking through to see that of a cross-promotion partner. You can read click data using the following curl, where the "days" param indicates how many days before present the data should reflect (default=30):
To see clicks for all newsletters you've created, remove the [reference].
curl -X GET https://indywriters.com/api/clicks/[reference]/?days=20/ \
-H "Username: XXXX" \
-H "API-Key: XXXXXXXX"
The expected response will look like the below, where origin is the newsletter that referred and destination is
the newsletter that received. References for origin and destination will only be given if the newsletter is
administered by one of your users:
[
{
"origin_reference":null,
"origin_url":"https://origin_url.com",
"destination_reference":"kDpaqSC",
"destination_url":"https://destination_url.com",
"created":"2025-07-15T09:55:59.633994Z"
}
{
"origin_reference":"JryiRe",
"origin_url":"https://origin_url.com",
"destination_reference":"kDpaqSC",
"destination_url":"https://destination_url.com",
"created":"2025-07-15T09:55:59.633994Z"
}
]