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"