newsletter

Embed
Preview of the card
<a href="https://hermeticor.com/docs/ref-newsletter"><img src="https://hermeticor.com/docs/_api/public/orgs/5fcd8b3c-a27c-4688-972f-de710125592f/spaces/caf5dc05-15f7-4e0c-bdb8-ab29ede6211e/pages/6ddb6b60-e4af-4ab8-9e30-d59475817fd4/social-card.svg?v=3e7ae33eec8b" alt="newsletter" width="600" height="315"></a>
POSThttps://hermeticor.com/v1/newsletter/imports

Import a Substack/Medium zip, a beehiiv CSV, a Ghost JSON or a WordPress WXR file (multipart: file, publicationId, source, attestedBy?). Subscribers in the file are added only when attestedBy names who vouches they opted in

Code samples

cURL
curl -X POST "https://hermeticor.com/v1/newsletter/imports" \
  -H "Authorization: Bearer $HERMETICOR_API_KEY"
TypeScript
Python
Go
PHP
Ruby
Java

Responses

202 Default Response
Example
{
  "id": "string",
  "publicationId": "string",
  "source": "substack",
  "status": "queued",
  "stats": {
    "posts": 0,
    "skipped": 0,
    "redirects": 0,
    "subscribers": 0,
    "errors": []
  },
  "error": "string",
  "createdAt": "2024-01-01T00:00:00Z",
  "updatedAt": "2024-01-01T00:00:00Z"
}
Schema
idstringrequired
publicationIdstringrequired
sourcestringrequired
substack | beehiiv | ghost | wordpress | medium | rss
statusstringrequired
queued | running | completed | failed
statsobjectrequired
Show child parameters
postsintegerrequired
= 0
skippedintegerrequired
= 0
redirectsintegerrequired
= 0
subscribersintegerrequired
= 0
errorsstring[]required
= []
errorstringrequired
createdAtstringrequired
updatedAtstringrequired
4XX Default Response
Example
{
  "error": {
    "code": "string",
    "message": "string",
    "details": {}
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
messagestringrequired
detailsobject
5XX Default Response

Same as 4XX · POST /v1/newsletter/imports

POSThttps://hermeticor.com/v1/newsletter/imports/rss

Import posts from an RSS or Atom feed that carries full content (fetched by the worker, SSRF-guarded)

Request body

application/json
publicationIdstringrequired
urlstringrequired
{
  "publicationId": "string",
  "url": "string"
}

Code samples

cURL
curl -X POST "https://hermeticor.com/v1/newsletter/imports/rss" \
  -H "Authorization: Bearer $HERMETICOR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"publicationId":"string","url":"string"}'
TypeScript
Python
Go
PHP
Ruby
Java

Responses

202 Default Response

Same as 202 · POST /v1/newsletter/imports

4XX Default Response

Same as 4XX · POST /v1/newsletter/imports

5XX Default Response

Same as 4XX · POST /v1/newsletter/imports

GEThttps://hermeticor.com/v1/newsletter/publications/{id}/imports

Parameters

limitintegerquery
Page size; omitted returns the whole list
cursorstringquery
Opaque: the nextCursor of the previous page
idstringpathrequired

Code samples

cURL
curl -X GET "https://hermeticor.com/v1/newsletter/publications/{id}/imports" \
  -H "Authorization: Bearer $HERMETICOR_API_KEY"
TypeScript
Python
Go
PHP
Ruby
Java

Responses

200 Default Response
Example
{
  "items": [
    {
      "id": "string",
      "publicationId": "string",
      "source": "substack",
      "status": "queued",
      "stats": {
        "posts": 0,
        "skipped": 0,
        "redirects": 0,
        "subscribers": 0,
        "errors": []
      },
      "error": "string",
      "createdAt": "2024-01-01T00:00:00Z",
      "updatedAt": "2024-01-01T00:00:00Z"
    }
  ],
  "nextCursor": "string"
}
Schema
itemsPostV1NewsletterImportsResponse[]required
Show child parameters
idstringrequired
publicationIdstringrequired
sourcestringrequired
substack | beehiiv | ghost | wordpress | medium | rss
statusstringrequired
queued | running | completed | failed
statsobjectrequired
Show child parameters
postsintegerrequired
= 0
skippedintegerrequired
= 0
redirectsintegerrequired
= 0
subscribersintegerrequired
= 0
errorsstring[]required
= []
errorstringrequired
createdAtstringrequired
updatedAtstringrequired
nextCursorstringrequired
4XX Default Response

Same as 4XX · POST /v1/newsletter/imports

5XX Default Response

Same as 4XX · POST /v1/newsletter/imports

GEThttps://hermeticor.com/v1/newsletter/imports/{id}

Parameters

idstringpathrequired

Code samples

cURL
curl -X GET "https://hermeticor.com/v1/newsletter/imports/{id}" \
  -H "Authorization: Bearer $HERMETICOR_API_KEY"
TypeScript
Python
Go
PHP
Ruby
Java

Responses

200 Default Response

Same as 202 · POST /v1/newsletter/imports

4XX Default Response

Same as 4XX · POST /v1/newsletter/imports

5XX Default Response

Same as 4XX · POST /v1/newsletter/imports

GEThttps://hermeticor.com/v1/newsletter/stripe

Stripe connection status and the webhook URL to register

Code samples

cURL
curl -X GET "https://hermeticor.com/v1/newsletter/stripe" \
  -H "Authorization: Bearer $HERMETICOR_API_KEY"
TypeScript
Python
Go
PHP
Ruby
Java

Responses

200 Default Response
Example
{
  "connected": true,
  "livemode": true,
  "keyHint": "string",
  "webhookUrl": "string",
  "lastEventAt": "2024-01-01T00:00:00Z"
}
Schema
connectedbooleanrequired
livemodebooleanrequired
keyHintstringrequired
webhookUrlstringrequired
lastEventAtstringrequired
4XX Default Response

Same as 4XX · POST /v1/newsletter/imports

5XX Default Response

Same as 4XX · POST /v1/newsletter/imports

PUThttps://hermeticor.com/v1/newsletter/stripe

Connect the workspace's own Stripe account (keys are sealed and never returned)

Request body

application/json
secretKeystringrequired
webhookSecretstringrequired
{
  "secretKey": "string",
  "webhookSecret": "string"
}

Code samples

cURL
curl -X PUT "https://hermeticor.com/v1/newsletter/stripe" \
  -H "Authorization: Bearer $HERMETICOR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"secretKey":"string","webhookSecret":"string"}'
TypeScript
Python
Go
PHP
Ruby
Java

Responses

200 Default Response

Same as 200 · GET /v1/newsletter/stripe

4XX Default Response

Same as 4XX · POST /v1/newsletter/imports

5XX Default Response

Same as 4XX · POST /v1/newsletter/imports

DELETEhttps://hermeticor.com/v1/newsletter/stripe

Code samples

cURL
curl -X DELETE "https://hermeticor.com/v1/newsletter/stripe" \
  -H "Authorization: Bearer $HERMETICOR_API_KEY"
TypeScript
Python
Go
PHP
Ruby
Java

Responses

200 Default Response
Example
{
  "ok": true
}
Schema
okbooleanrequired
true
4XX Default Response

Same as 4XX · POST /v1/newsletter/imports

5XX Default Response

Same as 4XX · POST /v1/newsletter/imports

GEThttps://hermeticor.com/v1/newsletter/tiers

Parameters

limitintegerquery
Page size; omitted returns the whole list
cursorstringquery
Opaque: the nextCursor of the previous page

Code samples

cURL
curl -X GET "https://hermeticor.com/v1/newsletter/tiers" \
  -H "Authorization: Bearer $HERMETICOR_API_KEY"
TypeScript
Python
Go
PHP
Ruby
Java

Responses

200 Default Response
Example
{
  "items": [
    {
      "id": "string",
      "name": "string",
      "description": "string",
      "benefits": [
        "string"
      ],
      "currency": "string",
      "monthlyMinor": 0,
      "annualMinor": 0,
      "trialDays": 0,
      "isFounding": true,
      "foundingLimit": 0,
      "teamPlan": true,
      "status": "active",
      "position": 0,
      "members": 0
    }
  ],
  "nextCursor": "string"
}
Schema
itemsItemsItem191[]required
Show child parameters
idstringrequired
namestringrequired
descriptionstringrequired
benefitsstring[]required
currencystringrequired
monthlyMinorintegerrequired
annualMinorintegerrequired
trialDaysintegerrequired
isFoundingbooleanrequired
foundingLimitintegerrequired
teamPlanbooleanrequired
statusstringrequired
active | archived
positionintegerrequired
membersinteger
nextCursorstringrequired
4XX Default Response

Same as 4XX · POST /v1/newsletter/imports

5XX Default Response

Same as 4XX · POST /v1/newsletter/imports

POSThttps://hermeticor.com/v1/newsletter/tiers

Request body

application/json
namestringrequired
descriptionstring
benefitsstring[]
= []
currencystring
monthlyMinorinteger
= null
annualMinorinteger
= null
trialDaysinteger
= 0
isFoundingboolean
= false
foundingLimitinteger
= null
teamPlanboolean
= false
{
  "name": "string",
  "description": "string",
  "benefits": [],
  "currency": "string",
  "monthlyMinor": null,
  "annualMinor": null,
  "trialDays": 0,
  "isFounding": false,
  "foundingLimit": null,
  "teamPlan": false
}

Code samples

cURL
curl -X POST "https://hermeticor.com/v1/newsletter/tiers" \
  -H "Authorization: Bearer $HERMETICOR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","description":"string","benefits":[],"currency":"string","monthlyMinor":null,"annualMinor":null,"trialDays":0,"isFounding":false,"foundingLimit":null,"teamPlan":false}'
TypeScript
Python
Go
PHP
Ruby
Java

Responses

200 Default Response
Example
{
  "id": "string",
  "name": "string",
  "description": "string",
  "benefits": [
    "string"
  ],
  "currency": "string",
  "monthlyMinor": 0,
  "annualMinor": 0,
  "trialDays": 0,
  "isFounding": true,
  "foundingLimit": 0,
  "teamPlan": true,
  "status": "active",
  "position": 0,
  "members": 0
}
Schema
idstringrequired
namestringrequired
descriptionstringrequired
benefitsstring[]required
currencystringrequired
monthlyMinorintegerrequired
annualMinorintegerrequired
trialDaysintegerrequired
isFoundingbooleanrequired
foundingLimitintegerrequired
teamPlanbooleanrequired
statusstringrequired
active | archived
positionintegerrequired
membersinteger
4XX Default Response

Same as 4XX · POST /v1/newsletter/imports

5XX Default Response

Same as 4XX · POST /v1/newsletter/imports

Updated