Files
prod-end-2026/demo-backend/openapi/crm_linear_pipeline.yaml
T
2026-03-17 18:32:44 +03:00

215 lines
4.9 KiB
YAML

openapi: 3.0.3
info:
title: CRM Linear Demo API
version: 1.0.0
description: |
Demo OpenAPI for a strict linear CRM scenario:
1) get recent leads,
2) qualify leads,
3) prepare offers,
4) send offers.
servers:
- url: http://demo-api:8010
- url: http://localhost:8010
paths:
/crm/leads/recent:
get:
operationId: getRecentLeads
tags: [crm-linear-workflow]
summary: Get recent leads
parameters:
- in: query
name: limit
required: false
schema:
type: integer
minimum: 1
maximum: 50
default: 20
- in: query
name: source
required: false
schema:
type: string
responses:
"200":
description: Leads list
content:
application/json:
schema:
$ref: "#/components/schemas/RecentLeadsResponse"
/crm/leads/qualify:
post:
operationId: qualifyLeadsForOffer
tags: [crm-linear-workflow]
summary: Qualify leads
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/QualifyLeadsRequest"
responses:
"200":
description: Qualified leads
content:
application/json:
schema:
$ref: "#/components/schemas/QualifyLeadsResponse"
/crm/offers/prepare:
post:
operationId: prepareOffersForLeads
tags: [crm-linear-workflow]
summary: Prepare offers from qualified leads
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/PrepareOffersRequest"
responses:
"200":
description: Prepared offers
content:
application/json:
schema:
$ref: "#/components/schemas/PrepareOffersResponse"
/crm/offers/send:
post:
operationId: sendPreparedOffers
tags: [crm-linear-workflow]
summary: Send prepared offers
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/SendOffersRequest"
responses:
"200":
description: Send summary
content:
application/json:
schema:
$ref: "#/components/schemas/SendOffersResponse"
components:
schemas:
Lead:
type: object
required: [lead_id, email, source]
properties:
lead_id:
type: string
email:
type: string
format: email
source:
type: string
QualifiedLead:
type: object
required: [lead_id, email, score, tier]
properties:
lead_id:
type: string
email:
type: string
format: email
score:
type: integer
tier:
type: string
PreparedOffer:
type: object
required: [offer_id, lead_id, channel, message]
properties:
offer_id:
type: string
lead_id:
type: string
channel:
type: string
message:
type: string
RecentLeadsResponse:
type: object
required: [leads]
properties:
leads:
type: array
items:
$ref: "#/components/schemas/Lead"
QualifyLeadsRequest:
type: object
required: [leads]
properties:
leads:
type: array
items:
$ref: "#/components/schemas/Lead"
QualifyLeadsResponse:
type: object
required: [qualified_leads]
properties:
qualified_leads:
type: array
items:
$ref: "#/components/schemas/QualifiedLead"
PrepareOffersRequest:
type: object
required: [qualified_leads]
properties:
qualified_leads:
type: array
items:
$ref: "#/components/schemas/QualifiedLead"
PrepareOffersResponse:
type: object
required: [offers]
properties:
offers:
type: array
items:
$ref: "#/components/schemas/PreparedOffer"
SendOffersRequest:
type: object
required: [offers]
properties:
offers:
type: array
items:
$ref: "#/components/schemas/PreparedOffer"
FailedLeadDelivery:
type: object
required: [lead_id, reason]
properties:
lead_id:
type: string
reason:
type: string
SendOffersResponse:
type: object
required: [sent_count, failed_count, failed]
properties:
sent_count:
type: integer
failed_count:
type: integer
failed:
type: array
items:
$ref: "#/components/schemas/FailedLeadDelivery"