{
  "openapi": "3.1.0",
  "info": {
    "title": "Stories API",
    "version": "1.0.0",
    "summary": "Named customers of data, cloud and AI vendors from public case studies, keynotes, press releases, earnings calls and US federal contracts, with renewals and migrations, each linked to its source",
    "description": "Named customers of data, cloud and AI vendors from public case studies, keynotes, press releases, earnings calls and US federal contracts, with renewals and migrations, each linked to its source. Updated every Saturday at 10:00 UTC. Free to read; please cite \"Stories (stories.fru.dev)\" with a link. Responses are cached at the edge; keep to about 60 requests a minute. Guide: https://stories.fru.dev/agents",
    "contact": {
      "name": "fru.dev",
      "url": "https://fru.dev",
      "email": "fru.dev3@gmail.com"
    }
  },
  "externalDocs": {
    "description": "For AI agents",
    "url": "https://stories.fru.dev/agents"
  },
  "servers": [
    {
      "url": "https://stories.fru.dev"
    }
  ],
  "paths": {
    "/api/stories": {
      "get": {
        "operationId": "list_stories",
        "summary": "Public stories, newest first, filtered by customer, vendor or relationship event",
        "description": "Public stories, newest first, filtered by customer, vendor or relationship event. Returns stories with customer, vendor, products, use case, stated outcome, event, the vendor left (migrations), source URL, publisher and date.",
        "parameters": [
          {
            "name": "customer",
            "in": "query",
            "required": false,
            "description": "Customer slug, e.g. medtronic",
            "schema": {
              "type": "string"
            },
            "example": "medtronic"
          },
          {
            "name": "vendor",
            "in": "query",
            "required": false,
            "description": "Vendor slug, e.g. snowflake",
            "schema": {
              "type": "string"
            },
            "example": "snowflake"
          },
          {
            "name": "event",
            "in": "query",
            "required": false,
            "description": "Relationship event",
            "schema": {
              "type": "string",
              "enum": [
                "adopted",
                "expanded",
                "renewed",
                "migrated",
                "consolidated"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Items per page, 1 to 200",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 200
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Items to skip, for the next page",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "stories with customer, vendor, products, use case, stated outcome, event, the vendor left (migrations), source URL, publisher and date",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "items": [
                    {
                      "id": 1,
                      "customer": "medtronic",
                      "vendor": "snowflake",
                      "products": [
                        "Snowflake"
                      ],
                      "useCase": "Great Lakes program moving the enterprise data warehouse from on-premises systems to Snowflake",
                      "outcome": "",
                      "event": "migrated",
                      "fromVendor": "",
                      "fromLabel": "on-premises data warehouse",
                      "sourceKind": "customer_blog",
                      "sourceUrl": "https://www.snowflake.com/en/blog/medtronic-using-snowflake-for-digital-transformation/",
                      "sourceTitle": "How Medtronic is Using Snowflake for Digital Transformation",
                      "publisher": "snowflake.com",
                      "date": "2022-06-21"
                    },
                    {
                      "id": 24,
                      "customer": "siemens",
                      "vendor": "snowflake",
                      "products": [
                        "Snowflake"
                      ],
                      "useCase": "Siemens Data Cloud: enterprise data mesh replacing an on-prem SAP HANA data lake",
                      "outcome": "600+ projects running across business divisions",
                      "event": "migrated",
                      "fromVendor": "sap",
                      "fromLabel": "on-premises SAP HANA data lake",
                      "sourceKind": "vendor_case_study",
                      "sourceUrl": "https://www.snowflake.com/en/customers/all-customers/case-study/siemens-1/",
                      "sourceTitle": "Siemens Builds an Enterprise-Wide Data Mesh Platform to Accelerate Innovation",
                      "publisher": "snowflake.com",
                      "date": ""
                    }
                  ],
                  "limit": 2,
                  "offset": 0,
                  "next": "/api/stories?vendor=snowflake&limit=2&offset=2"
                }
              }
            }
          }
        }
      }
    },
    "/api/companies/{slug}": {
      "get": {
        "operationId": "get_company",
        "summary": "One company's tech stack (as a customer) or named customers (as a vendor)",
        "description": "One company's tech stack (as a customer) or named customers (as a vendor). Returns the company, the vendors it uses and moved away from, the customers it has, and every story behind them.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Company slug, e.g. medtronic or databricks",
            "schema": {
              "type": "string"
            },
            "example": "medtronic"
          }
        ],
        "responses": {
          "200": {
            "description": "the company, the vendors it uses and moved away from, the customers it has, and every story behind them",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "company": {
                    "slug": "medtronic",
                    "name": "Medtronic",
                    "domain": "medtronic.com",
                    "role": "customer",
                    "industry": "healthcare",
                    "category": "",
                    "blurb": ""
                  },
                  "url": "https://stories.fru.dev/customers/medtronic",
                  "uses": [
                    {
                      "slug": "mongodb",
                      "name": "MongoDB",
                      "stories": 1,
                      "event": "adopted",
                      "first": "",
                      "last": ""
                    },
                    {
                      "slug": "aws",
                      "name": "Amazon Web Services",
                      "stories": 1,
                      "event": "adopted",
                      "first": "2022-03-10",
                      "last": "2022-03-10"
                    }
                  ],
                  "movedAwayFrom": [],
                  "customers": [],
                  "customersLost": [],
                  "stories": [
                    {
                      "id": 1,
                      "customer": "medtronic",
                      "vendor": "snowflake",
                      "products": [
                        "Snowflake"
                      ],
                      "useCase": "Great Lakes program moving the enterprise data warehouse from on-premises systems to Snowflake",
                      "outcome": "",
                      "event": "migrated",
                      "fromVendor": "",
                      "fromLabel": "on-premises data warehouse",
                      "sourceKind": "customer_blog",
                      "sourceUrl": "https://www.snowflake.com/en/blog/medtronic-using-snowflake-for-digital-transformation/",
                      "sourceTitle": "How Medtronic is Using Snowflake for Digital Transformation",
                      "publisher": "snowflake.com",
                      "date": "2022-06-21"
                    },
                    {
                      "id": 2,
                      "customer": "medtronic",
                      "vendor": "aws",
                      "products": [
                        "AWS",
                        "AI/ML services"
                      ],
                      "useCase": "Scalable infrastructure and AI to turn around PillCam colon cancer screening results",
                      "outcome": "",
                      "event": "adopted",
                      "fromVendor": "",
                      "fromLabel": "",
                      "sourceKind": "vendor_case_study",
                      "sourceUrl": "https://www.youtube.com/watch?v=-KsHbNO9X4A",
                      "sourceTitle": "Medtronic Increases Accessibility to Colorectal Cancer Screening with AWS",
                      "publisher": "youtube.com",
                      "date": "2022-03-10"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not found"
          }
        }
      }
    },
    "/api/companies": {
      "get": {
        "operationId": "list_companies",
        "summary": "Every customer and vendor with at least one story",
        "description": "Every customer and vendor with at least one story. Returns companies with slug, name, domain, role, industry, vendor category and story counts.",
        "parameters": [
          {
            "name": "role",
            "in": "query",
            "required": false,
            "description": "customer or vendor",
            "schema": {
              "type": "string",
              "enum": [
                "customer",
                "vendor"
              ]
            }
          },
          {
            "name": "industry",
            "in": "query",
            "required": false,
            "description": "Customer industry, e.g. healthcare",
            "schema": {
              "type": "string"
            },
            "example": "healthcare"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Items per page, 1 to 200",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 200
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Items to skip, for the next page",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "companies with slug, name, domain, role, industry, vendor category and story counts",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "items": [
                    {
                      "slug": "aws",
                      "name": "Amazon Web Services",
                      "domain": "aws.amazon.com",
                      "role": "vendor",
                      "industry": "",
                      "category": "cloud",
                      "vendors": 0,
                      "customers": 8,
                      "stories": 9,
                      "url": "https://stories.fru.dev/vendors/aws"
                    },
                    {
                      "slug": "confluent",
                      "name": "Confluent",
                      "domain": "confluent.io",
                      "role": "vendor",
                      "industry": "",
                      "category": "streaming",
                      "vendors": 0,
                      "customers": 3,
                      "stories": 3,
                      "url": "https://stories.fru.dev/vendors/confluent"
                    }
                  ],
                  "total": 11,
                  "limit": 3,
                  "offset": 0,
                  "next": "/api/companies?role=vendor&limit=3&offset=3"
                }
              }
            }
          }
        }
      }
    },
    "/api/graph": {
      "get": {
        "operationId": "get_graph",
        "summary": "The whole customer and vendor graph in one call",
        "description": "The whole customer and vendor graph in one call. Returns companies and edges (customer, vendor, story count, strongest event, moved away).",
        "parameters": [],
        "responses": {
          "200": {
            "description": "companies and edges (customer, vendor, story count, strongest event, moved away)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "companies": [
                    {
                      "slug": "adobe",
                      "name": "Adobe",
                      "domain": "adobe.com",
                      "role": "customer",
                      "industry": "technology",
                      "category": "",
                      "blurb": ""
                    },
                    {
                      "slug": "albertsons",
                      "name": "Albertsons Companies",
                      "domain": "albertsons.com",
                      "role": "customer",
                      "industry": "retail",
                      "category": "",
                      "blurb": ""
                    }
                  ],
                  "pairs": [
                    {
                      "c": "medtronic",
                      "v": "mongodb",
                      "lost": false,
                      "n": 1,
                      "ev": "adopted",
                      "first": "",
                      "last": "",
                      "u": false
                    },
                    {
                      "c": "at-and-t",
                      "v": "snowflake",
                      "lost": false,
                      "n": 1,
                      "ev": "migrated",
                      "first": "",
                      "last": "",
                      "u": false
                    }
                  ],
                  "stories": 50,
                  "updated": null,
                  "note": "pairs: c = customer slug, v = vendor slug, n = stories, ev = strongest event, lost = customer moved away from v"
                }
              }
            }
          }
        }
      }
    },
    "/api/search": {
      "get": {
        "operationId": "search",
        "summary": "Search customers, vendors, customer and vendor pairs, and pages",
        "description": "Search customers, vendors, customer and vendor pairs, and pages. Returns up to 20 ranked results with title, link and one line.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "description": "Company, vendor or words",
            "schema": {
              "type": "string"
            },
            "example": "snowflake"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Results, 1 to 20",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 20
            }
          }
        ],
        "responses": {
          "200": {
            "description": "up to 20 ranked results with title, link and one line",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "q": "snowflake",
                  "results": [
                    {
                      "id": "co:snowflake",
                      "group": "companies",
                      "title": "Snowflake",
                      "subtitle": "Data cloud vendor · 7 named customers",
                      "href": "/vendors/snowflake",
                      "keywords": [
                        "snowflake",
                        "snowflake.com"
                      ],
                      "logo": "https://img.logo.dev/snowflake.com?token=...&retina=true&format=png&theme=light&size=64&fallback=404",
                      "boost": 14,
                      "score": 1064
                    },
                    {
                      "id": "pair:at-and-t:snowflake",
                      "group": "items",
                      "title": "AT&T uses Snowflake",
                      "subtitle": "1 story · Moved to",
                      "href": "/pairs/at-and-t-snowflake",
                      "keywords": [
                        "AT&T Snowflake",
                        "AT&T uses Snowflake"
                      ],
                      "icon": "link",
                      "boost": 1,
                      "score": 626
                    }
                  ]
                }
              }
            }
          }
        }
      }
    }
  }
}