Event Flows

Ollie participates in FloatMe’s request flow in one primary way: it receives inbound API requests from mobile clients and internal services and drives a synchronous enrichment pipeline through external services before creating a ticket in Zendesk.

Ticket Creation Flow

The POST /{user_id}/ollie/tickets endpoint orchestrates a series of service calls to enrich the ticket with user context before submission.

Client sends POST /{user_id}/ollie/tickets
        │
        ▼
API Gateway (prod-ollie, AWS IAM)
  Validates SigV4 signature
        │
        ▼
prod-ollie-api Lambda invoked
  Parse and validate request body
  (subject, description, reason, tags, optional attachment)
        │
        ▼
User Service
  Fetch user profile: first name, last name, email, membership tier
        │
        ▼
Zendesk
  Look up user by email
  Not found ──► create Zendesk user record
  Found     ──► continue with existing requester ID
        │
        ▼
Underwriting Service
  Check float eligibility
  Eligible ──► apply float-related tags
        │
        ▼
LOC Service
  Check for active installment loan
  Eligible    ──► apply `installment_loan` tag
  Active loan ──► apply `has_active_installment_loan` tag
        │
        ▼
Build final tag set
  Caller-supplied tags + derived tags (premium_member, income, loan tags)
        │
        ▼
Attachment present?
  Yes ──► Upload base64-decoded file to Zendesk
          Receive upload token
  No  ──► continue
        │
        ▼
Zendesk
  Create ticket with:
    Custom fields: first name, last name, email, user ID, reason
    Tags: full assembled tag set
    Attachment token (if present)
        │
        ▼
Emit Datadog metric: floatme.ollie.ticket.created
Return ticket response to caller

Tag Enrichment

Tags are assembled from caller-supplied values and context derived from upstream services.

Tag Source Applied when

Caller-supplied tags

Request body tags array

Always — passed through as-is

premium_member

User Service (membership tier)

User holds a premium membership

income

User Service (membership tier)

User has income verification on their account

installment_loan

LOC Service

User is eligible for an installment loan

has_active_installment_loan

LOC Service

User currently has an active installment loan

ollie_skipped

Ollie API (internal)

Ticket is being escalated to a human agent rather than handled automatically

Tag enrichment failures for individual upstream services do not block ticket creation — the ticket is submitted with the tags that were successfully resolved.

Zendesk Macros

Ollie applies pre-defined Zendesk macros to handle common cancellation scenarios automatically. Macros are selected based on the user’s float status at the time of the request.

Macro ID Scenario

MacroManualCancel

13970893004951

Standard account cancellation with no active float complications

MacroCancelWithActiveFloat

13970657740439

Cancellation requested while user has an active float

MacroCancelWithDefaultedFloat

11760573801751

Cancellation requested while user has a defaulted float

MacroCancelWithRetryFloat

14788222345879

Cancellation requested while user’s float is in retry collection

Ticket Categories Flow

GET /{user_id}/ollie/ticket-categories is a lightweight read from Zendesk with no enrichment pipeline.

Client sends GET /{user_id}/ollie/ticket-categories
        │
        ▼
API Gateway (prod-ollie, AWS IAM)
  Validates SigV4 signature
        │
        ▼
prod-ollie-api Lambda invoked
        │
        ▼
Zendesk
  Fetch custom field ID 360051067473
  Return predefined option values
        │
        ▼
Return name-value pairs to caller
  (used for category dropdown in mobile UI)