# Use Narrareach with Make

Use Make's HTTP module to send approved content into the same Narrareach publishing queue used by the dashboard and MCP connector.

## Before you start

- Create a scoped automation token in Narrareach Settings → Integrations → REST API & webhooks.
- Grant only the scopes required by the scenario.
- Store the token in a Make connection or another secret field. Do not place it in scenario notes, URLs, or shared exports.
- Review the public request contract at https://www.narrareach.com/openapi.json.

## Configure the HTTP module

1. Choose **HTTP → Make a request**.
2. Select the public endpoint from the OpenAPI contract.
3. Add `Authorization: Bearer NARRAREACH_API_TOKEN`.
4. For JSON requests, add `Content-Type: application/json`.
5. For Notes, send the key as the `Idempotency-Key: STABLE_SOURCE_RECORD_ID` header or as `idempotencyKey` in the JSON body; if you send both, they must match. For articles, send `idempotencyKey` in the JSON body. Replace the example key with a stable, unique source-record identifier.
6. Map approved content, destination, schedule time, and timezone from the source module.
7. Store the returned Narrareach identifier before continuing the scenario.

## Recommended scenario shape

`Trigger → validate required fields → editorial approval → Narrareach request → store returned ID → check status → notify`

## Safe retry pattern

- Reuse the same idempotency key when Make retries the same source record.
- After a timeout, query status if you received an operation or content id. If no id was received, retry the identical request with the same idempotency key; do not create a new key to bypass uncertainty.
- Route 401 and 403 responses to credential review rather than repeated retries.
- Route validation errors to a review queue with the public error code and resolution.
- Use bounded backoff for temporary server errors.

## Useful public endpoints

- Validate a token: `GET https://www.narrareach.com/api/v1/auth/check`
- Create or schedule Notes: `POST https://www.narrareach.com/api/v1/notes`
  - A scheduled Note going to X with more than one cashtag ($SYMBOL) is accepted with a `warnings` entry (`code: "X_CASHTAG_LIMIT"`). X accepts one cashtag per post and may refuse the Note; edit it before it is due.
- Read, update, or delete a Note: `GET`, `PATCH`, or `DELETE https://www.narrareach.com/api/v1/notes/{id}`
- Read a Note operation: `GET https://www.narrareach.com/api/v1/operations/{id}`
- Schedule an article: `POST https://www.narrareach.com/api/v1/articles`
- Read, reschedule, or cancel an article schedule: `GET`, `PATCH`, or `DELETE https://www.narrareach.com/api/v1/article-schedules/{id}`
- List LinkedIn Note destinations: `GET https://www.narrareach.com/api/v1/linkedin/destinations`
- List Instagram Note destinations: `GET https://www.narrareach.com/api/v1/instagram/destinations`
- List Threads, Facebook, TikTok, Pinterest and X accounts for Notes: `GET https://www.narrareach.com/api/v1/social-accounts`
- Send a scheduled Note from a different connected account: `POST https://www.narrareach.com/api/v1/notes/{id}/social-account`
- List LinkedIn article destinations: `GET https://www.narrareach.com/api/v1/linkedin/article-destinations`
- List Medium publications: `GET https://www.narrareach.com/api/v1/medium/publications`
- List reader activity: `GET https://www.narrareach.com/api/v1/reader-activities`
- Move reader activity between Inbox and History: `PATCH https://www.narrareach.com/api/v1/reader-activities/{id}`
- Reply to a Substack comment: `POST https://www.narrareach.com/api/v1/reader-activities/{id}/replies`
- Read Stats outcomes: `GET https://www.narrareach.com/api/v1/stats/outcomes`

## Start a scenario when a Note publishes or fails

1. In Make, add **Webhooks → Custom webhook** as the scenario trigger and copy its address.
2. In Narrareach, open Settings → Integrations → REST API & webhooks, paste the address under Webhooks, and choose **Add webhook**. Copy the signing secret now; it is shown once.
3. Choose **Test** to confirm Make receives requests. The test body only carries `data.message`, so to map Note fields, set the webhook's data structure from the sample payload below, or let Make redetermine the structure while a real Note event arrives.
4. Filter on `event` (`note.published` or `note.failed`) and map `data.note` fields into the next module.

### Webhook events

- `note.published` — a Note was published. `data.note.postUrl` holds the platform URL when the platform returns one.
- `note.failed` — a Note could not be published. `data.note.error` holds the reason.
- `webhook.test` — sent only by **Test**.

Scheduled Notes send events for Substack, LinkedIn, X, Threads, Instagram, Facebook, TikTok, and Pinterest. Notes posted right away through `POST /api/v1/notes` send events for every platform. Articles do not send webhook events yet, and scheduled Bluesky Notes may not send them; use the status endpoints for those.

Each Note platform sends its own event. The JSON body looks like this:

```json
{
  "id": "stable event id",
  "event": "note.published",
  "createdAt": "2026-10-07T13:00:05.000Z",
  "data": {
    "note": {
      "id": "note id",
      "draftId": null,
      "platform": "SUBSTACK",
      "content": "Note text",
      "status": "POSTED",
      "scheduledFor": "2026-10-07T13:00:00.000Z",
      "postedAt": "2026-10-07T13:00:04.000Z",
      "postUrl": "https://...",
      "externalPostId": "platform post id",
      "imageUrls": [],
      "attachments": [],
      "error": null
    },
    "source": { "product": "narrareach" }
  }
}
```

### Verify and handle deliveries

- Headers: `X-Narrareach-Event`, `X-Narrareach-Delivery`, `X-Narrareach-Timestamp`, and `X-Narrareach-Signature` in the form `t=TIMESTAMP,v1=SIGNATURE`.
- To verify, compute an HMAC-SHA256 hex digest of `TIMESTAMP.RAW_BODY` using the signing secret and compare it with `v1`. Use the raw request body, not re-serialized JSON, and reject old timestamps.
- Respond with any 2xx status within 8 seconds. Other responses and timeouts are retried with increasing delays, up to 5 attempts in total.
- The same event can arrive more than once. Use the body's `id` to ignore duplicates.
- Deliveries are sent within about a minute of the event.


See https://www.narrareach.com/api-docs.md for authentication, platform guidance, errors, and complete workflow context.

REST automation tokens currently act on the account that created them. Do not add MCP workspace selectors to REST requests unless the OpenAPI operation declares those fields.
