API reference Reminders
Reminders Service API Endpoints
The production API base URL is https://api.tradesmentechnologies.com/.
Authentication
All endpoints require a Bearer token in the Authorization header:
Authorization: Bearer <your_token>
Mutating requests may carry an Idempotency-Key header so a retry never acts twice — see Idempotent Retries in the Accounts API documentation.
Base Path
/prod/reminders
Endpoints
Get Reminder Config
- Method: GET
- Path:
/prod/reminders/config - Headers:
Authorization: Bearer <token> - Success Response:
200 OK
Note: If no config exists, returns empty arrays for all day fields.{ "companyId": "uuid", "jobReminderDays": [7, 3, 1], "estimateReminderDays": [3, 7, 14], "invoiceReminderDays": [3, 7, 14], "updatedAt": "2026-02-25T12:00:00.000Z" }
Update Reminder Config
Method: PUT
Path:
/prod/reminders/configHeaders:
Authorization: Bearer <token>Request Body:
{ "jobReminderDays": [7, 3, 1], "estimateReminderDays": [3, 7, 14], "invoiceReminderDays": [3, 7, 14] }Note: All three arrays are required. Each must contain positive integers representing the number of days for reminders. Empty arrays are allowed to disable a reminder type.
jobReminderDays: Days before a job's start date to send a reminder.estimateReminderDays: Days after an estimate was sent to send a follow-up.invoiceReminderDays: Days after an invoice was sent to send a reminder.
Success Response:
200 OK{ "message": "Reminder config updated successfully", "companyId": "uuid", "jobReminderDays": [7, 3, 1], "estimateReminderDays": [3, 7, 14], "invoiceReminderDays": [3, 7, 14], "updatedAt": "2026-02-25T12:00:00.000Z" }
Validation Errors
| Status | Condition |
|---|---|
400 |
Missing request body |
400 |
Invalid JSON in request body |
400 |
Any day array is not an array of positive integers |
401 |
Missing, invalid, or expired auth token |
Automated Processing
A scheduled process runs daily at 13:00 UTC (8:00 AM ET) to process reminders for all companies with configurations.
Job Reminders
- Sent X days before a job's
startDateTime. - Only for active jobs (not COMPLETED, PAID, or CANCELLED).
- Only for jobs with a
startDateTimeset. - Email subject:
{companyName} - Upcoming Job Reminder
Estimate Reminders
- Sent X days after an estimate was sent.
- Only for estimates in SENT status.
- Skipped when the estimate is hidden (
hidden: true) or expired (expiresAtin the past). - Email subject:
{companyName} - Estimate Follow-Up
Invoice Reminders
- Sent X days after an invoice was sent.
- Only for invoices in SENT status.
- Skipped when the invoice is hidden (
hidden: true) or expired (expiresAtin the past). - Email subject:
{companyName} - Invoice Reminder
Recipients
Every reminder goes to the job's / document's customer email on file. A customer without an email, one flagged emailUnsubscribed, one whose address is on the shared unsubscribe list (see customers-endpoints.md, Email deliverability flags), or one with an @example.com address is skipped. Every reminder email carries an unsubscribe link.
Deduplication
Each reminder is tracked on the job/document record (jobRemindersSent / documentRemindersSent arrays). A reminder for a given day value is only sent once per record (enforced atomically on the server).