# Follow-up policies

Source: https://parasend.com/docs/api/follow-up-policies

Reminder/escalation and notification policies. Escalation steps `{after_days, channel, conditions[], min_score?, requires_approval?}` with channels email | sms | alternate_email | paper.

## Endpoints

- [Create a follow-up policy](https://parasend.com/docs/api/follow-up-policies/create.md): `POST /v1/reminder_policies`
- [List follow-up policies](https://parasend.com/docs/api/follow-up-policies/list.md): `GET /v1/reminder_policies`
- [Retrieve a follow-up policy](https://parasend.com/docs/api/follow-up-policies/retrieve.md): `GET /v1/reminder_policies/{id}`
- [Update a follow-up policy](https://parasend.com/docs/api/follow-up-policies/update.md): `PATCH /v1/reminder_policies/{id}`
- [Delete a follow-up policy](https://parasend.com/docs/api/follow-up-policies/delete.md): `DELETE /v1/reminder_policies/{id}`
- [List a follow-up policy's versions](https://parasend.com/docs/api/follow-up-policies/versions.md): `GET /v1/reminder_policies/{id}/versions`
- [Preview a follow-up step](https://parasend.com/docs/api/follow-up-policies/preview-step.md): `POST /v1/reminder_policies/preview`
- [Duplicate a follow-up policy](https://parasend.com/docs/api/follow-up-policies/duplicate.md): `POST /v1/reminder_policies/{id}/duplicate`
- [Reset one of Parasend's policies](https://parasend.com/docs/api/follow-up-policies/reset.md): `POST /v1/reminder_policies/{id}/reset`

## The ReminderPolicy object

- `name` (string, required): Your name for the policy: 1–100 characters, without control characters; leading and trailing spaces are trimmed.
- `steps` (array of object, required)
  - `steps[].after_days` (integer, required): Days after the first notice when the step is due: a whole number from 1 to 365, never smaller than the step before it. The reminder goes within the send window and at least 24 hours after the delivery's last message.
  - `steps[].channel` (string, required): How the step's reminder goes: `email` or `sms`. A step whose channel the recipient has no contact for is skipped. `alternate_email` and `paper` are refused with `policy_step_invalid` until they are available. One of: `email`, `sms`, `alternate_email`, `paper`.
  - `steps[].conditions` (array of string, optional): What must all hold for the step to go, else it is skipped: `not_delivered` (always included, listed or not); `email_not_opened`, no e-mail to the recipient has been opened (a hint, not proof); `email_bounced`, an e-mail to the recipient bounced or failed. One of: `not_delivered`, `email_not_opened`, `email_bounced`.
  - `steps[].requires_approval` (boolean · nullable, optional): Paper defaults to approval-required.
  - `steps[].available` (boolean, optional): Responses only. False for a step that cannot run yet and is skipped (only the paper step of `rpol_debt_collection`); true otherwise.
  - `steps[].message` (object, optional): The wording a follow-up step's reminder sends. Left out: Parasend's standard reminder. `preset` picks Parasend's wording; `custom` holds your own, by language (Plan 1–3 and Enterprise). A field or language left out comes from the preset.
    - `steps[].message.preset` (string, optional): `standard` is the usual reminder; `firmer` and `final` are Parasend's stronger wordings. One of: `standard`, `firmer`, `final`. Default: `"standard"`.
    - `steps[].message.custom` (object, optional): Your own wording, by language (`is`, `en`); a field or a language left out comes from `preset`. Needs Plan 1–3 or Enterprise; otherwise refused with `theme_knob_plan_gated`.
      - `steps[].message.custom.is` (object, optional): Plain text. An e-mail step takes `subject`, `heading` and `text`; an SMS step `text` only. Variables: {{recipient.name}}, {{recipient.first_name}}, {{sender.name}}, {{delivery.title}}, {{delivery.sent_on}}, {{delivery.expires_on}}, {{files.count}}; an SMS only the two dates. No links, e-mail addresses or phone numbers. An e-mail may hold the gender word {{recipient.gender: male | female | other}}.
      - `steps[].message.custom.en` (object, optional): Plain text. An e-mail step takes `subject`, `heading` and `text`; an SMS step `text` only. Variables: {{recipient.name}}, {{recipient.first_name}}, {{sender.name}}, {{delivery.title}}, {{delivery.sent_on}}, {{delivery.expires_on}}, {{files.count}}; an SMS only the two dates. No links, e-mail addresses or phone numbers. An e-mail may hold the gender word {{recipient.gender: male | female | other}}.
    - `steps[].message.source` (object, optional): The saved wording and version this step's wording was loaded from. A record only: the step keeps its own copy. Not on a saved wording's own message.
      - `steps[].message.source.wording` (string, required)
      - `steps[].message.source.version` (integer, required)
- `stop_on` (string, optional): When the follow-ups stop: `confirmed`, the only value, once the recipient confirms receipt.
- `is_account_default` (boolean, optional): The organisation's pre-fill for new batches and deliveries; never applied by itself. Needs organization.update. Default: `false`.
- `id` (string, optional): The policy's ID. Parasend's own policies are `rpol_default`, `rpol_debt_collection` and `rpol_none`.
- `object` (string, optional): Always `reminder_policy`.
- `system` (boolean, optional): One of Parasend's own policies (`rpol_default`, `rpol_debt_collection`, `rpol_none`). The steps of the first two can be made your organisation's own version (`customized`); none can be renamed or deleted.
- `customized` (boolean, optional): Your organisation's own version of one of Parasend's policies is in use.
- `version` (integer, optional): The version in use in this organisation — for one of Parasend's, its own while customized.
- `version_id` (string, optional): The follow-up policy version's ID, starting `rpv_`.
- `in_use_by_batches` (integer, optional): Open batches (draft or sending) that name the policy.
- `in_use_by_deliveries` (integer, optional): Deliveries that cite the policy and are not yet confirmed or ended.
- `created_at` (string · date-time, optional): When the policy was created, in ISO 8601 (UTC).
- `updated_at` (string · date-time, optional): When the policy last changed (renamed, given a new version, or archived), in ISO 8601 (UTC). For one of Parasend's policies with your own version, when your version last changed.
- `archived_at` (string · date-time · nullable, optional): When the policy was archived with `DELETE /reminder_policies/{id}`, in ISO 8601 (UTC); null while it is in use. Parasend's own policies are never archived.

```json
{
  "id": "rpol_01M6R27T5NK3830GCN9QPS9M95",
  "object": "reminder_policy",
  "name": "Payment reminders",
  "system": false,
  "version": 1,
  "version_id": "rpv_01M6R27T5NB7JTSEZ0XV7BWETG",
  "steps": [
    {
      "channel": "email",
      "after_days": 3,
      "conditions": [
        "not_delivered"
      ],
      "available": true
    },
    {
      "channel": "email",
      "message": {
        "preset": "firmer"
      },
      "after_days": 7,
      "conditions": [
        "not_delivered"
      ],
      "available": true
    },
    {
      "channel": "sms",
      "after_days": 10,
      "conditions": [
        "not_delivered"
      ],
      "available": true
    }
  ],
  "stop_on": "confirmed",
  "customized": false,
  "is_account_default": false,
  "in_use_by_batches": 0,
  "in_use_by_deliveries": 0,
  "created_at": "2026-11-06T09:15:05.781Z",
  "updated_at": "2026-11-06T09:15:05.781Z",
  "archived_at": null
}
```
