Skip to content

DoCurious API Reference / types / TrackRecord

Interface: TrackRecord

Defined in: types/challenge.types.ts:599

A Track Record documenting a user's completion of a challenge.

Remarks

Track Records are the primary proof-of-completion artifact. They consist of one or more TrackRecordEntry items (text, photos, videos). Once submitted, a 72-hour SLA timer starts for reviewer verification. If the SLA is missed, the TR is automatically escalated. Users have a maximum of 3 verification attempts before the TR is locked as unverified.

Example

ts
const tr: TrackRecord = {
  id: 'tr-001',
  createdAt: '2025-10-05T14:30:00Z',
  updatedAt: '2025-10-06T09:00:00Z',
  userChallengeId: 'uc-101',
  userId: 'usr-042',
  challengeId: 'ch-042',
  status: 'submitted',
  storageUsedBytes: 4_200_000,
  sharingScope: 'communities',
  submittedAt: '2025-10-06T09:00:00Z',
  verificationAttempts: 1,
  escalated: false,
}

Extends

Properties

challenge?

optional challenge: Challenge

Defined in: types/challenge.types.ts:643


challengeId

challengeId: string

Defined in: types/challenge.types.ts:602


coverImageEntryId?

optional coverImageEntryId: string

Defined in: types/challenge.types.ts:607

Entry ID of the image the user selected as the TR cover


coverImageUrl?

optional coverImageUrl: string

Defined in: types/challenge.types.ts:608


createdAt

createdAt: string

Defined in: types/common.types.ts:154

ISO 8601 datetime when the entity was created

Inherited from

BaseEntity.createdAt


entries?

optional entries: TrackRecordEntry[]

Defined in: types/challenge.types.ts:642


escalated

escalated: boolean

Defined in: types/challenge.types.ts:627

Whether this TR was auto-escalated due to a missed SLA deadline


escalatedAt?

optional escalatedAt: string

Defined in: types/challenge.types.ts:628


id

id: string

Defined in: types/common.types.ts:167

Inherited from

BaseEntity.id


rejectionNote?

optional rejectionNote: string

Defined in: types/challenge.types.ts:634

Free-text note from the reviewer explaining the rejection


rejectionReasonId?

optional rejectionReasonId: string

Defined in: types/challenge.types.ts:632

Reference to the RejectionReasonTemplate used when rejecting


reviewerId?

optional reviewerId: string

Defined in: types/challenge.types.ts:637


reviewerRole?

optional reviewerRole: "teacher" | "staff" | "vendor"

Defined in: types/challenge.types.ts:639

Role of the person who reviewed this TR


sharingScope

sharingScope: "public" | "private" | "communities" | "individuals"

Defined in: types/challenge.types.ts:614

Who can view this Track Record


slaDeadline?

optional slaDeadline: string

Defined in: types/challenge.types.ts:623

ISO datetime 72 hours after submission -- the verification SLA deadline


status

status: TrackRecordStatus

Defined in: types/challenge.types.ts:604


storageUsedBytes

storageUsedBytes: number

Defined in: types/challenge.types.ts:611

Total bytes of media stored for this TR


submittedAt?

optional submittedAt: string

Defined in: types/challenge.types.ts:616


submittedForReviewAt?

optional submittedForReviewAt: string

Defined in: types/challenge.types.ts:621

ISO datetime when the TR was submitted for staff/vendor review


updatedAt

updatedAt: string

Defined in: types/common.types.ts:156

ISO 8601 datetime when the entity was last modified

Inherited from

BaseEntity.updatedAt


userChallenge?

optional userChallenge: UserChallenge

Defined in: types/challenge.types.ts:644


userChallengeId

userChallengeId: string

Defined in: types/challenge.types.ts:600


userId

userId: string

Defined in: types/challenge.types.ts:601


verificationAttempts

verificationAttempts: number

Defined in: types/challenge.types.ts:625

Number of review cycles attempted (max 3 before lockout)


verifiedAt?

optional verifiedAt: string

Defined in: types/challenge.types.ts:617

DoCurious Platform Documentation