Developers · Changelog

tinyRelay changelog

Changes to the tinyRelay API and webhook payloads that can affect your code. Each entry says what changed, why it matters and what to do.

ChangedWebhooksrequestTime
// before: a 16-digit counter, not a wall-clock time
"requestTime": "9748919598886666"
// now: epoch milliseconds (UTC), 13 digits
"requestTime": "1700000000000"
Read the entry →
Docs noteWebhookseventTime
// int64, ms since the Unix epoch (UTC)
"eventTime": 1700000000000
// arrived without a time of its own
"eventTime": null
Read the entry →

Timestamp values illustrative

The entries below are the changes the current docs describe, in their own words.
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
  1. ChangedWebhooksrequestTime

    requestTime is now a 13-digit epoch-millisecond timestamp

    The requestTime field on webhook events used to carry a nanosecond counter: a 16-digit value such as 9748919598886666. It was not a wall-clock time and could not be converted to one. It now carries the time the event occurred, in milliseconds since the Unix epoch (UTC), as a 13-digit string.

    It is always present. If an event reached tinyRelay without a time of its own, requestTime falls back to the time it was processed, so it is never empty but is not always the moment the event happened.

    What to do: if you parse requestTime, check the value length before treating it as a timestamp.

    Parsing requestTime safely · illustrativeCopy
    // requestTime arrives as a string
    const t = event.requestTime;
    if (t.length === 13) {
      const at = new Date(Number(t));  // epoch milliseconds, UTC
    } else {
      // the older 16-digit counter: not a wall-clock time, do not convert
    }
  2. Docs noteWebhookseventTime

    eventTime: when the event actually happened

    eventTime is an int64 in milliseconds since the Unix epoch (UTC): the time the event happened, not the time the webhook was delivered. Delivery is asynchronous and retried, so the time your endpoint receives a request is not a reliable substitute.

    Unlike requestTime it does not fall back to processing time. It is null on the rare event that reached tinyRelay without a time of its own, and that null is the signal that the occurrence time is unknown.

    The docs note that eventTime is sent on every event type, that the interactive request builder on the webhook page does not list it yet, and that the schema is authoritative.

    What to do: order and timestamp events by eventTime, and handle null as "time unknown".

    Reading eventTime · illustrativeCopy
    // eventTime is an int64 (ms since the Unix epoch, UTC) or null
    const at = event.eventTime === null
      ? null                     // time unknown
      : new Date(event.eventTime);

No entry matches that filter. Try "webhooks" or a field name.

Get started

Send transactional email with a service that reports back.

SMTP relay or REST API, standalone or alongside tinyEmail. Tell us what you send and our team sets you up.