Tradesmen Technologies Tradesmen Technologies

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
    {
      "companyId": "uuid",
      "jobReminderDays": [7, 3, 1],
      "estimateReminderDays": [3, 7, 14],
      "invoiceReminderDays": [3, 7, 14],
      "updatedAt": "2026-02-25T12:00:00.000Z"
    }
    
    Note: If no config exists, returns empty arrays for all day fields.

Update Reminder Config

  • Method: PUT

  • Path: /prod/reminders/config

  • Headers: 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 startDateTime set.
  • 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 (expiresAt in 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 (expiresAt in 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).