upload
This commit is contained in:
@@ -0,0 +1,658 @@
|
||||
openapi: 3.1.0
|
||||
info:
|
||||
title: Travel Product Manager API
|
||||
description: 'Synthetic API with multiple linear demo workflows.
|
||||
|
||||
|
||||
Travel workflow:
|
||||
|
||||
1. `GET /users/recent`
|
||||
|
||||
2. `GET /hotels/top`
|
||||
|
||||
3. `POST /segments/hotel`
|
||||
|
||||
4. `POST /assignments/hotels`
|
||||
|
||||
5. `POST /emails/send-offers`
|
||||
|
||||
|
||||
CRM workflow:
|
||||
|
||||
1. `GET /crm/leads/recent`
|
||||
|
||||
2. `POST /crm/leads/qualify`
|
||||
|
||||
3. `POST /crm/offers/prepare`
|
||||
|
||||
4. `POST /crm/offers/send`'
|
||||
version: 1.0.0
|
||||
servers:
|
||||
- url: http://84.201.161.175
|
||||
description: production
|
||||
paths:
|
||||
/users/recent:
|
||||
get:
|
||||
tags:
|
||||
- travel-offer-workflow
|
||||
summary: Get Recent Users
|
||||
operationId: getRecentUsers
|
||||
parameters:
|
||||
- name: last_active_after
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
anyOf:
|
||||
- type: string
|
||||
format: date-time
|
||||
- type: 'null'
|
||||
title: Last Active After
|
||||
- name: limit
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: integer
|
||||
maximum: 100
|
||||
minimum: 1
|
||||
default: 30
|
||||
title: Limit
|
||||
responses:
|
||||
'200':
|
||||
description: Successful Response
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/RecentUsersResponse'
|
||||
'422':
|
||||
description: Validation Error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/HTTPValidationError'
|
||||
/hotels/top:
|
||||
get:
|
||||
tags:
|
||||
- travel-offer-workflow
|
||||
summary: Get Top Hotels
|
||||
operationId: getTopHotels
|
||||
parameters:
|
||||
- name: limit
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: integer
|
||||
maximum: 20
|
||||
minimum: 1
|
||||
default: 5
|
||||
title: Limit
|
||||
- name: city
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
anyOf:
|
||||
- type: string
|
||||
- type: 'null'
|
||||
title: City
|
||||
responses:
|
||||
'200':
|
||||
description: Successful Response
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/TopHotelsResponse'
|
||||
'422':
|
||||
description: Validation Error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/HTTPValidationError'
|
||||
/segments/hotel:
|
||||
post:
|
||||
tags:
|
||||
- travel-offer-workflow
|
||||
summary: Segment Users By Hotel Preferences
|
||||
operationId: segmentUsersByHotelPreferences
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/HotelSegmentsRequest'
|
||||
required: true
|
||||
responses:
|
||||
'200':
|
||||
description: Successful Response
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/HotelSegmentsResponse'
|
||||
'422':
|
||||
description: Validation Error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/HTTPValidationError'
|
||||
/assignments/hotels:
|
||||
post:
|
||||
tags:
|
||||
- travel-offer-workflow
|
||||
summary: Assign Users To Hotels
|
||||
operationId: assignUsersToHotels
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/AssignmentsRequest'
|
||||
required: true
|
||||
responses:
|
||||
'200':
|
||||
description: Successful Response
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/AssignmentsResponse'
|
||||
'422':
|
||||
description: Validation Error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/HTTPValidationError'
|
||||
/emails/send-offers:
|
||||
post:
|
||||
tags:
|
||||
- travel-offer-workflow
|
||||
summary: Send Hotel Offers By Email
|
||||
operationId: sendHotelOffersByEmail
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/EmailOfferRequest'
|
||||
required: true
|
||||
responses:
|
||||
'200':
|
||||
description: Successful Response
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/EmailOfferResponse'
|
||||
'422':
|
||||
description: Validation Error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/HTTPValidationError'
|
||||
/crm/leads/recent:
|
||||
get:
|
||||
tags:
|
||||
- crm-linear-workflow
|
||||
summary: Get Recent Leads
|
||||
operationId: getRecentLeads
|
||||
parameters:
|
||||
- name: limit
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: integer
|
||||
maximum: 50
|
||||
minimum: 1
|
||||
default: 20
|
||||
title: Limit
|
||||
- name: source
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
anyOf:
|
||||
- type: string
|
||||
- type: 'null'
|
||||
title: Source
|
||||
responses:
|
||||
'200':
|
||||
description: Successful Response
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/RecentLeadsResponse'
|
||||
'422':
|
||||
description: Validation Error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/HTTPValidationError'
|
||||
/crm/leads/qualify:
|
||||
post:
|
||||
tags:
|
||||
- crm-linear-workflow
|
||||
summary: Qualify Leads For Offer
|
||||
operationId: qualifyLeadsForOffer
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/QualifyLeadsRequest'
|
||||
required: true
|
||||
responses:
|
||||
'200':
|
||||
description: Successful Response
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/QualifyLeadsResponse'
|
||||
'422':
|
||||
description: Validation Error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/HTTPValidationError'
|
||||
/crm/offers/prepare:
|
||||
post:
|
||||
tags:
|
||||
- crm-linear-workflow
|
||||
summary: Prepare Offers For Leads
|
||||
operationId: prepareOffersForLeads
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/PrepareOffersRequest'
|
||||
required: true
|
||||
responses:
|
||||
'200':
|
||||
description: Successful Response
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/PrepareOffersResponse'
|
||||
'422':
|
||||
description: Validation Error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/HTTPValidationError'
|
||||
/crm/offers/send:
|
||||
post:
|
||||
tags:
|
||||
- crm-linear-workflow
|
||||
summary: Send Prepared Offers
|
||||
operationId: sendPreparedOffers
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/SendOffersRequest'
|
||||
required: true
|
||||
responses:
|
||||
'200':
|
||||
description: Successful Response
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/SendOffersResponse'
|
||||
'422':
|
||||
description: Validation Error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/HTTPValidationError'
|
||||
/health:
|
||||
get:
|
||||
summary: Health
|
||||
operationId: health_health_get
|
||||
responses:
|
||||
'200':
|
||||
description: Successful Response
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
additionalProperties:
|
||||
type: string
|
||||
type: object
|
||||
title: Response Health Health Get
|
||||
components:
|
||||
schemas:
|
||||
Assignment:
|
||||
properties:
|
||||
user_id:
|
||||
type: string
|
||||
title: User Id
|
||||
hotel_id:
|
||||
type: string
|
||||
title: Hotel Id
|
||||
type: object
|
||||
required:
|
||||
- user_id
|
||||
- hotel_id
|
||||
title: Assignment
|
||||
AssignmentsRequest:
|
||||
properties:
|
||||
segments:
|
||||
items:
|
||||
$ref: '#/components/schemas/Segment'
|
||||
type: array
|
||||
title: Segments
|
||||
type: object
|
||||
title: AssignmentsRequest
|
||||
AssignmentsResponse:
|
||||
properties:
|
||||
assignments:
|
||||
items:
|
||||
$ref: '#/components/schemas/Assignment'
|
||||
type: array
|
||||
title: Assignments
|
||||
type: object
|
||||
title: AssignmentsResponse
|
||||
EmailOfferRequest:
|
||||
properties:
|
||||
template_id:
|
||||
type: string
|
||||
title: Template Id
|
||||
assignments:
|
||||
items:
|
||||
$ref: '#/components/schemas/Assignment'
|
||||
type: array
|
||||
title: Assignments
|
||||
type: object
|
||||
required:
|
||||
- template_id
|
||||
title: EmailOfferRequest
|
||||
EmailOfferResponse:
|
||||
properties:
|
||||
sent_count:
|
||||
type: integer
|
||||
title: Sent Count
|
||||
failed_count:
|
||||
type: integer
|
||||
title: Failed Count
|
||||
failed:
|
||||
items:
|
||||
$ref: '#/components/schemas/FailedDelivery'
|
||||
type: array
|
||||
title: Failed
|
||||
type: object
|
||||
required:
|
||||
- sent_count
|
||||
- failed_count
|
||||
title: EmailOfferResponse
|
||||
FailedDelivery:
|
||||
properties:
|
||||
user_id:
|
||||
type: string
|
||||
title: User Id
|
||||
reason:
|
||||
type: string
|
||||
title: Reason
|
||||
type: object
|
||||
required:
|
||||
- user_id
|
||||
- reason
|
||||
title: FailedDelivery
|
||||
FailedLeadDelivery:
|
||||
properties:
|
||||
lead_id:
|
||||
type: string
|
||||
title: Lead Id
|
||||
reason:
|
||||
type: string
|
||||
title: Reason
|
||||
type: object
|
||||
required:
|
||||
- lead_id
|
||||
- reason
|
||||
title: FailedLeadDelivery
|
||||
HTTPValidationError:
|
||||
properties:
|
||||
detail:
|
||||
items:
|
||||
$ref: '#/components/schemas/ValidationError'
|
||||
type: array
|
||||
title: Detail
|
||||
type: object
|
||||
title: HTTPValidationError
|
||||
Hotel:
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
title: Id
|
||||
name:
|
||||
type: string
|
||||
title: Name
|
||||
city:
|
||||
type: string
|
||||
title: City
|
||||
type: object
|
||||
required:
|
||||
- id
|
||||
- name
|
||||
- city
|
||||
title: Hotel
|
||||
HotelSegmentsRequest:
|
||||
properties:
|
||||
users:
|
||||
items:
|
||||
$ref: '#/components/schemas/User'
|
||||
type: array
|
||||
title: Users
|
||||
hotels:
|
||||
items:
|
||||
$ref: '#/components/schemas/Hotel'
|
||||
type: array
|
||||
title: Hotels
|
||||
type: object
|
||||
title: HotelSegmentsRequest
|
||||
HotelSegmentsResponse:
|
||||
properties:
|
||||
segments:
|
||||
items:
|
||||
$ref: '#/components/schemas/Segment'
|
||||
type: array
|
||||
title: Segments
|
||||
type: object
|
||||
title: HotelSegmentsResponse
|
||||
Lead:
|
||||
properties:
|
||||
lead_id:
|
||||
type: string
|
||||
title: Lead Id
|
||||
email:
|
||||
type: string
|
||||
title: Email
|
||||
source:
|
||||
type: string
|
||||
title: Source
|
||||
type: object
|
||||
required:
|
||||
- lead_id
|
||||
- email
|
||||
- source
|
||||
title: Lead
|
||||
PrepareOffersRequest:
|
||||
properties:
|
||||
qualified_leads:
|
||||
items:
|
||||
$ref: '#/components/schemas/QualifiedLead'
|
||||
type: array
|
||||
title: Qualified Leads
|
||||
type: object
|
||||
title: PrepareOffersRequest
|
||||
PrepareOffersResponse:
|
||||
properties:
|
||||
offers:
|
||||
items:
|
||||
$ref: '#/components/schemas/PreparedOffer'
|
||||
type: array
|
||||
title: Offers
|
||||
type: object
|
||||
title: PrepareOffersResponse
|
||||
PreparedOffer:
|
||||
properties:
|
||||
offer_id:
|
||||
type: string
|
||||
title: Offer Id
|
||||
lead_id:
|
||||
type: string
|
||||
title: Lead Id
|
||||
channel:
|
||||
type: string
|
||||
title: Channel
|
||||
message:
|
||||
type: string
|
||||
title: Message
|
||||
type: object
|
||||
required:
|
||||
- offer_id
|
||||
- lead_id
|
||||
- channel
|
||||
- message
|
||||
title: PreparedOffer
|
||||
QualifiedLead:
|
||||
properties:
|
||||
lead_id:
|
||||
type: string
|
||||
title: Lead Id
|
||||
email:
|
||||
type: string
|
||||
title: Email
|
||||
score:
|
||||
type: integer
|
||||
title: Score
|
||||
tier:
|
||||
type: string
|
||||
title: Tier
|
||||
type: object
|
||||
required:
|
||||
- lead_id
|
||||
- email
|
||||
- score
|
||||
- tier
|
||||
title: QualifiedLead
|
||||
QualifyLeadsRequest:
|
||||
properties:
|
||||
leads:
|
||||
items:
|
||||
$ref: '#/components/schemas/Lead'
|
||||
type: array
|
||||
title: Leads
|
||||
type: object
|
||||
title: QualifyLeadsRequest
|
||||
QualifyLeadsResponse:
|
||||
properties:
|
||||
qualified_leads:
|
||||
items:
|
||||
$ref: '#/components/schemas/QualifiedLead'
|
||||
type: array
|
||||
title: Qualified Leads
|
||||
type: object
|
||||
title: QualifyLeadsResponse
|
||||
RecentLeadsResponse:
|
||||
properties:
|
||||
leads:
|
||||
items:
|
||||
$ref: '#/components/schemas/Lead'
|
||||
type: array
|
||||
title: Leads
|
||||
type: object
|
||||
title: RecentLeadsResponse
|
||||
RecentUsersResponse:
|
||||
properties:
|
||||
users:
|
||||
items:
|
||||
$ref: '#/components/schemas/User'
|
||||
type: array
|
||||
title: Users
|
||||
type: object
|
||||
title: RecentUsersResponse
|
||||
Segment:
|
||||
properties:
|
||||
segment_id:
|
||||
type: string
|
||||
title: Segment Id
|
||||
hotel_id:
|
||||
type: string
|
||||
title: Hotel Id
|
||||
user_ids:
|
||||
items:
|
||||
type: string
|
||||
type: array
|
||||
title: User Ids
|
||||
type: object
|
||||
required:
|
||||
- segment_id
|
||||
- hotel_id
|
||||
title: Segment
|
||||
SendOffersRequest:
|
||||
properties:
|
||||
offers:
|
||||
items:
|
||||
$ref: '#/components/schemas/PreparedOffer'
|
||||
type: array
|
||||
title: Offers
|
||||
type: object
|
||||
title: SendOffersRequest
|
||||
SendOffersResponse:
|
||||
properties:
|
||||
sent_count:
|
||||
type: integer
|
||||
title: Sent Count
|
||||
failed_count:
|
||||
type: integer
|
||||
title: Failed Count
|
||||
failed:
|
||||
items:
|
||||
$ref: '#/components/schemas/FailedLeadDelivery'
|
||||
type: array
|
||||
title: Failed
|
||||
type: object
|
||||
required:
|
||||
- sent_count
|
||||
- failed_count
|
||||
title: SendOffersResponse
|
||||
TopHotelsResponse:
|
||||
properties:
|
||||
hotels:
|
||||
items:
|
||||
$ref: '#/components/schemas/Hotel'
|
||||
type: array
|
||||
title: Hotels
|
||||
type: object
|
||||
title: TopHotelsResponse
|
||||
User:
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
title: Id
|
||||
email:
|
||||
type: string
|
||||
title: Email
|
||||
last_active:
|
||||
type: string
|
||||
format: date-time
|
||||
title: Last Active
|
||||
type: object
|
||||
required:
|
||||
- id
|
||||
- email
|
||||
- last_active
|
||||
title: User
|
||||
ValidationError:
|
||||
properties:
|
||||
loc:
|
||||
items:
|
||||
anyOf:
|
||||
- type: string
|
||||
- type: integer
|
||||
type: array
|
||||
title: Location
|
||||
msg:
|
||||
type: string
|
||||
title: Message
|
||||
type:
|
||||
type: string
|
||||
title: Error Type
|
||||
type: object
|
||||
required:
|
||||
- loc
|
||||
- msg
|
||||
- type
|
||||
title: ValidationError
|
||||
servers:
|
||||
- url: http://demo-api:8010
|
||||
- url: http://localhost:8010
|
||||
Reference in New Issue
Block a user