TimeTriggers API

v1.0.0

Schedule HTTP requests to fire at a specific time or on a recurring cron. Every endpoint except `/keys` accepts a `ttr-api-key` header (or `Authorization: Bearer ttr_…`), scoped to the key's project. `/jobs`, `/executions`, `/tag-policies` and `/project/*` also accept the dashboard's session cookie (issued by `/auth/*`); `/keys` is session-only. This document is served at `/openapi/json`.

Generated from the live `HttpApi` definition. Reflects the current shape of the backend at build time.

triggers

delete
/canceltriggers.cancel

Headers

  • ttr-api-keystringrequired
  • ttr-trigger-idany
  • ttr-custom-keyany

Responses

204<No Content>
400BadRequest
BadRequest
401Unauthorized
Unauthorized
404NotFound
NotFound
410Gone
Gone
getpostputpatchdelete
/scheduletriggers.schedule

Headers

  • ttr-api-keystringrequired
  • ttr-urlstringrequired
  • ttr-scheduled-atany
  • ttr-trigger-idany
  • ttr-custom-keyany
  • ttr-titleany
  • ttr-tagsany
  • ttr-run-missedany
  • ttr-retry-strategyany
  • ttr-retry-max-attemptsany
  • ttr-retry-initial-delayany
  • ttr-retry-max-delayany
  • ttr-retry-jitterany
  • ttr-retry-onany

Responses

200ScheduleResult
ScheduleResult
400BadRequest
BadRequest
401Unauthorized
Unauthorized
402QuotaExceeded
QuotaExceeded
404NotFound
NotFound
410Gone
Gone

keys

delete
/keys/{id}keys.deleteKey

Path parameters

  • idstringrequired

Responses

200OkResponse
OkResponse
400BadRequest
401Unauthorized
Unauthorized
404NotFound
NotFound

jobs

get
/executionsjobs.listExecutions

Headers

  • ttr-api-keyany
  • authorizationany

Query parameters

  • jobIdany
  • customKeyany
  • jobStatusany
  • executionStatusany
  • httpStatusany
  • deadLetterOnlyany
  • limitany
  • offsetany

Responses

200ListDashboardExecutionsResponse
ListDashboardExecutionsResponse
400BadRequest
401Unauthorized
Unauthorized
get
/jobsjobs.listJobs

Headers

  • ttr-api-keyany
  • authorizationany

Query parameters

  • statusany
  • limitany
  • offsetany
  • idany
  • titleany
  • customKeyany
  • tagany

Responses

200ListJobsResponse
ListJobsResponse
400BadRequest
401Unauthorized
Unauthorized
get
/jobs/{id}/executionsjobs.listJobExecutions

Headers

  • ttr-api-keyany
  • authorizationany

Path parameters

  • idstringrequired

Responses

200ListExecutionsResponse
ListExecutionsResponse
400BadRequest
401Unauthorized
Unauthorized
404NotFound
NotFound
post
/jobs/{id}/executionsjobs.replayJob

Headers

  • ttr-api-keyany
  • authorizationany

Path parameters

  • idstringrequired

Request body

  • triggeredBy?:
    one of: "replay" | "retry"
    | null

Responses

200OkResponse
OkResponse
400BadRequest
BadRequest
401Unauthorized
Unauthorized
404NotFound
NotFound

tagPolicies

get
/tag-policiestagPolicies.listTagPolicies

Headers

  • ttr-api-keyany
  • authorizationany

Responses

200ListTagPoliciesResponse
ListTagPoliciesResponse
400BadRequest
401Unauthorized
Unauthorized
post
/tag-policiestagPolicies.createTagPolicy

Headers

  • ttr-api-keyany
  • authorizationany

Request body

  • tag*:string
  • throughput?:object | null | null
  • maxConcurrent?:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
    | null
  • requestTimeoutSeconds?:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
    | null
  • retryMaxAttempts?:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
    | null
  • retryStrategy?:
    one of: "none" | "fixed" | "exponential"
    | null
  • retryInitialDelaySeconds?:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
    | null
  • retryMaxDelaySeconds?:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
    | null
  • retryJitter?:boolean | null
  • retryOn?:
    one of: "network_only" | "5xx_and_network" | "non_2xx"
    | null

Responses

200CreateTagPolicyResponse
CreateTagPolicyResponse
400BadRequest
BadRequest
401Unauthorized
Unauthorized
put
/tag-policies/{id}tagPolicies.updateTagPolicy

Headers

  • ttr-api-keyany
  • authorizationany

Path parameters

  • idstringrequired

Request body

  • tag?:string | null
  • throughput?:object | null | null
  • maxConcurrent?:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
    | null
  • requestTimeoutSeconds?:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
    | null
  • retryMaxAttempts?:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
    | null
  • retryStrategy?:
    one of: "none" | "fixed" | "exponential"
    | null
  • retryInitialDelaySeconds?:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
    | null
  • retryMaxDelaySeconds?:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
    | null
  • retryJitter?:boolean | null
  • retryOn?:
    one of: "network_only" | "5xx_and_network" | "non_2xx"
    | null

Responses

200UpdateTagPolicyResponse
UpdateTagPolicyResponse
400BadRequest
BadRequest
401Unauthorized
Unauthorized
404NotFound
NotFound
delete
/tag-policies/{id}tagPolicies.deleteTagPolicy

Headers

  • ttr-api-keyany
  • authorizationany

Path parameters

  • idstringrequired

Responses

200OkResponse
OkResponse
400BadRequest
401Unauthorized
Unauthorized
404NotFound
NotFound

project

get
/project/retry-policyproject.getProjectRetryPolicy

Headers

  • ttr-api-keyany
  • authorizationany

Responses

200ProjectRetryPolicyResponse
ProjectRetryPolicyResponse
400BadRequest
401Unauthorized
Unauthorized
put
/project/retry-policyproject.updateProjectRetryPolicy

Headers

  • ttr-api-keyany
  • authorizationany

Request body

  • retryStrategy?:
    one of: "none" | "fixed" | "exponential"
    | null
  • retryMaxAttempts?:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
    | null
  • retryInitialDelaySeconds?:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
    | null
  • retryMaxDelaySeconds?:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
    | null
  • retryJitter?:boolean | null
  • retryOn?:
    one of: "network_only" | "5xx_and_network" | "non_2xx"
    | null

Responses

200ProjectRetryPolicyResponse
ProjectRetryPolicyResponse
400BadRequest
BadRequest
401Unauthorized
Unauthorized

Schemas

ScheduleResult

  • triggerId*:string
  • scheduledAt*:string
  • operation*:
    one of: "schedule" | "reschedule"
  • kind*:
    one of: "job" | "generator"
  • monthQuotaRemaining*:
    one of: number | "NaN" | "Infinity" | "-Infinity"

BadRequest

  • _tag*:"BadRequest"
  • message*:string

Unauthorized

  • _tag*:"Unauthorized"
  • message*:string

NotFound

  • _tag*:"NotFound"
  • message*:string

QuotaExceeded

  • _tag*:"QuotaExceeded"
  • message*:string

Gone

  • _tag*:"Gone"
  • message*:string

JobDeclaration

  • customKey?:string | null
  • title?:string | null
  • scheduledAt?:string | null
  • url*:string
  • method?:string | null
  • headers?:object | null
  • body?:
    one of:
    • _tag*:"base64"
    • value*:string
    |
    • _tag*:"text"
    • value*:string
    | any
    | null
  • tags?:string[] | null
  • retry?:
    • strategy?:
      one of: "none" | "fixed" | "exponential"
      | null
    • maxAttempts?:
      one of: number | "NaN" | "Infinity" | "-Infinity"
      | null
      | null
    • initialDelaySeconds?:
      one of: number | "NaN" | "Infinity" | "-Infinity"
      | null
    • maxDelaySeconds?:
      one of: number | "NaN" | "Infinity" | "-Infinity"
      | null
      | null
    • jitter?:boolean | null
    • retryOn?:
      one of: "network_only" | "5xx_and_network" | "non_2xx"
      | null
    | null

DeclareRequest

DeclareSummary

  • unchanged*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
  • added*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
  • skipped*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
  • updated*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
  • cancelled*:
    one of: number | "NaN" | "Infinity" | "-Infinity"

DeclareOperationResult

  • operation*:
    one of: "unchanged" | "added" | "skipped" | "updated" | "cancelled"
  • customKey*:string | null
  • kind*:
    one of: "job" | "generator"
  • id*:string
  • changedFields?:string[] | null

DeclareResponse

BulkRequest

  • runMissed?:boolean | null
  • upserts?:JobDeclaration[] | null
  • cancels?:
    one of: string |
    • customKey*:string
    |
    • id*:string
    |
    • tag*:string
    []
    | null

BulkResponse

ApiKey

  • id*:string
  • projectId*:string
  • name*:string
  • keyValue*:string
  • createdAt*:string

ListKeysResponse

CreateKeyResponse

OkResponse

  • ok*:boolean

DashboardJob

  • id*:string
  • projectId*:string
  • projectSlug*:string
  • customKey*:string | null
  • title*:string | null
  • status*:
    one of: "registered" | "queued" | "running" | "completed" | "cancelled" | "skipped" | "retrying"
  • scheduledAt*:string
  • httpUrl*:string
  • httpMethod*:string
  • httpHeaders*:object
  • registeredAt*:string
  • cancelledAt*:string | null
  • httpBodyPreview*:string | null
  • httpBodySize*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
  • queuedAt*:string | null
  • startedAt*:string | null
  • completedAt*:string | null
  • responseStatus*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
  • errorMessage*:string | null
  • errorKind*:
    one of: "dns" | "connect_timeout" | "connection_refused" | "unreachable" | "tls" | "connection_reset" | "timeout" | "protocol" | "body_read" | "invalid_request" | "unknown"
    | null
  • rateLimitedAt*:string | null
  • rateLimitedUntil*:string | null
  • rateLimitedTags*:string[]
  • attemptNumber*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
  • lastActivityAt*:string
  • generatorId*:string | null
  • generatorCustomKey*:string | null
  • generatorStatus*:string | null
  • tags*:string[]

ListJobsResponse

  • jobs*:DashboardJob[]
  • total*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
  • limit*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
  • offset*:
    one of: number | "NaN" | "Infinity" | "-Infinity"

Execution

  • id*:string
  • jobId*:string
  • attemptNumber*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
  • triggeredBy*:
    one of: "scheduler" | "retry" | "replay"
  • status*:
    one of: "planned" | "started" | "complete" | "cancelled"
  • plannedAt*:string
  • startedAt*:string | null
  • completedAt*:string | null
  • responseStatus*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
  • responseHeaders*:object | null
  • responseBody*:string | null
  • responseSize*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
  • errorMessage*:string | null
  • errorKind*:
    one of: "dns" | "connect_timeout" | "connection_refused" | "unreachable" | "tls" | "connection_reset" | "timeout" | "protocol" | "body_read" | "invalid_request" | "unknown"
    | null
  • errorCode*:string | null
  • timeoutSeconds*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
  • connectTimeoutSeconds*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
  • rateLimitedAt*:string | null
  • rateLimitedUntil*:string | null
  • rateLimitedTags*:string[]
  • isDeadLetter*:boolean

ListExecutionsResponse

DashboardExecution

  • id*:string
  • jobId*:string
  • attemptNumber*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
  • triggeredBy*:
    one of: "scheduler" | "retry" | "replay"
  • status*:
    one of: "planned" | "started" | "complete" | "cancelled"
  • plannedAt*:string
  • startedAt*:string | null
  • completedAt*:string | null
  • responseStatus*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
  • responseSize*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
  • errorMessage*:string | null
  • errorKind*:
    one of: "dns" | "connect_timeout" | "connection_refused" | "unreachable" | "tls" | "connection_reset" | "timeout" | "protocol" | "body_read" | "invalid_request" | "unknown"
    | null
  • errorCode*:string | null
  • timeoutSeconds*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
  • connectTimeoutSeconds*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
  • rateLimitedAt*:string | null
  • rateLimitedUntil*:string | null
  • rateLimitedTags*:string[]
  • isDeadLetter*:boolean
  • lastActivityAt*:string
  • jobCustomKey*:string | null
  • jobTitle*:string | null
  • jobStatus*:
    one of: "registered" | "queued" | "running" | "completed" | "cancelled" | "skipped" | "retrying"
  • jobHttpUrl*:string
  • jobHttpMethod*:string
  • projectSlug*:string

ListDashboardExecutionsResponse

  • executions*:DashboardExecution[]
  • total*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
  • limit*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
  • offset*:
    one of: number | "NaN" | "Infinity" | "-Infinity"

TagPolicy

  • id*:string
  • projectId*:string
  • tag*:string
  • throughput*:object | null
  • maxConcurrent*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
  • requestTimeoutSeconds*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
  • retryMaxAttempts*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
  • retryStrategy*:
    one of: "none" | "fixed" | "exponential"
  • retryInitialDelaySeconds*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
  • retryMaxDelaySeconds*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
  • retryJitter*:boolean
  • retryOn*:
    one of: "network_only" | "5xx_and_network" | "non_2xx"
  • createdAt*:string
  • updatedAt*:string

ListTagPoliciesResponse

CreateTagPolicyResponse

UpdateTagPolicyResponse

RetryPolicy

  • retryStrategy*:
    one of: "none" | "fixed" | "exponential"
  • retryMaxAttempts*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
  • retryInitialDelaySeconds*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
  • retryMaxDelaySeconds*:
    one of: number | "NaN" | "Infinity" | "-Infinity"
    | null
  • retryJitter*:boolean
  • retryOn*:
    one of: "network_only" | "5xx_and_network" | "non_2xx"

ProjectRetryPolicyResponse