Create Race Registration

Submit a new race registration to the HIQOR ingestion platform. This endpoint handles structured validation, idempotent duplicate detection, and unified UUID tracking in real time.

Endpoint

POSThttps://tdpudkswxg.execute-api.us-west-2.amazonaws.com/registration/createRaceRegistration

Headers

Authorization: Bearer <jwt_token>
Content-Type: application/json

Request Body

{
  "assessmentType": "Race Registration",
  "funnelID": "<authorized_funnel_slug>",
  "clientId": "<partner_client_id>",
  "firstName": "John",
  "lastName": "Doe",
  "email": "john@example.com",
  "phone": "2105551234",
  "eventName": "Terrain Race | Oklahoma City 2026",
  "eventDate": "2026-07-31",
  "registrationDate": "2026-02-24",
  "ageRange": "25–34 Core Participants",
  "birthdate": "1994-05-10",
  "city": "Charlotte",
  "state": "NC",
  "zip": "28211",
  "policyNumber": "TRO2026-WAIVER-45892",
  "policyLink": "https://policies.terrainrace.com/okc-2026/waiver",
  "consentURL": "https://example.com/marketing-consent",
  "eventConsentOptIn": "yes",
  "mutualLeadGenConsent": "yes",
  "IPAddress": "192.168.1.1"
}

Field Requirements

Required Fields

  • funnelID
  • email
  • Authorization (request header)
  • phone (required if mutualLeadGenConsent = "yes")
  • consentURL
  • firstName
  • lastName
  • city
  • state
  • zip
  • eventConsentOptIn
  • mutualLeadGenConsent

Optional Fields

  • assessmentType (defaults to "Race Registration")
  • clientId
  • policyNumber
  • policyLink
  • IPAddress
  • ageRange
  • eventDate
  • registrationDate
  • birthdate

Age Handling for Compliance

Partners may provide age in one of two ways:

  • birthdate (exact DOB), or
  • ageRange (privacy-preserving alternative)

If birthdate cannot be shared for compliance or privacy reasons, partners may optionally send ageRange instead. The platform will accept and store either field, or both, if provided.

Recommended ageRange values:

  • "Under 18 Youth"
  • "18–24 College / Entry"
  • "25–34 Core Participants"
  • "35–44 Family Builders"
  • "45–54 Established"
  • "55+ Active Seniors"

If neither birthdate nor ageRange is provided, the registration can still be created, but age segmentation for analytics may be unavailable.

Example cURL Request

curl -X POST https://tdpudkswxg.execute-api.us-west-2.amazonaws.com/registration/createRaceRegistration \
  -H "Authorization: Bearer <jwt_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "assessmentType": "Race Registration",
    "funnelID": "<authorized_funnel_slug>",
    "clientId": "<client_id>",
    "firstName": "John",
    "lastName": "Doe",
    "email": "john@example.com",
    "phone": "2105551234",
    "eventName": "Terrain Race | Oklahoma City 2026",
    "eventDate": "2026-07-31",
    "registrationDate": "2026-02-24",
    "ageRange": "25–34 Core Participants",
    "birthdate": "1994-05-10",
    "city": "Charlotte",
    "state": "NC",
    "zip": "28211",
    "policyNumber": "TRO2026-WAIVER-45892",
    "policyLink": "https://policies.terrainrace.com/okc-2026/waiver",
    "consentURL": "https://example.com/marketing-consent",
    "eventConsentOptIn": "yes",
    "mutualLeadGenConsent": "yes",
    "IPAddress": "192.168.1.1"
  }'

Success Response

{
  "message": "Race Registration created",
  "patientUUID": "<generated_uuid>"
}

Idempotent Duplicate Handling

The endpoint uses a hardened identity resolution model to determine uniqueness. A registration is considered a duplicate only when all three of the following fields match an existing record:

  • firstName
  • lastName
  • email

When all three match, the existing hiqorUUID is reused and no duplicate record is created. If any of the three fields differ, a new hiqorUUID is generated. This prevents UUID collisions caused by shared household emails and ensures accurate downstream record association.

When a duplicate is detected, the API returns the following response:

{
  "message": "Race Registration already exists (idempotent). Not re-sent."
}

Validation Errors

Missing Required Fields

{
  "message": "Missing required fields (email or funnelID)"
}

Conditional Requirement

{
  "message": "Missing required field (phone)"
}

Invalid Funnel

{
  "message": "Race Registration is not enabled for this funnel"
}

Rate Limiting

The following limits apply per credential set:

  • 100 requests per minute
  • 1,000 requests per hour