"openapi": "3.1.0"
"info":
  "title": "LargitData Public Content API"
  "version": "1.0.0"
  "summary": "Read-only access to the LargitData product catalog, knowledge base and blog."
  "description": "The LargitData Public Content API exposes the same catalog that www.largitdata.com publishes as HTML: products and services, the knowledge / solutions / use-case / comparison / case-study page index, and the blog. It is read-only and needs no credentials.\n\nLargitData also operates two commercial, key-gated data services — the Social Media API and the Cross-border Ecommerce Data API. Those are not part of this document; see the \"Commercial APIs\" tag for how to request access.\n\nErrors follow RFC 9457 and are served as `application/problem+json` with a stable `code` field and a `hint` describing how to recover."
  "termsOfService": "https://www.largitdata.com/policy/"
  "contact":
    "name": "LargitData (大數軟體股份有限公司)"
    "url": "https://www.largitdata.com/developers/"
    "email": "david@largitdata.com"
  "license":
    "name": "LargitData Website Content Terms"
    "url": "https://www.largitdata.com/policy/"
"servers":
  - "url": "https://www.largitdata.com"
    "description": "Production"
"externalDocs":
  "description": "LargitData developer portal"
  "url": "https://www.largitdata.com/developers/"
"tags":
  - "name": "Service"
    "description": "Service discovery and capability listing."
  - "name": "Catalog"
    "description": "Products, services and published site content."
  - "name": "Commercial APIs"
    "description": "The Social Media API and the Cross-border Ecommerce Data API are commercial services delivered on a per-contract basis. Endpoints, fields, quotas and hosts are agreed during onboarding and authenticated with an `X-API-Key` header, so they are described here rather than specified as callable operations. Request a trial key at https://www.largitdata.com/developers/#commercial-apis."
    "externalDocs":
      "description": "Commercial API overview"
      "url": "https://www.largitdata.com/developers/#commercial-apis"
"security": []
"paths":
  "/api/v1/":
    "get":
      "operationId": "getServiceIndex"
      "summary": "Service index"
      "description": "Lists the available endpoints, supported languages and the error contract."
      "tags":
        - "Service"
      "security": []
      "responses":
        "200":
          "description": "Service index."
          "content":
            "application/json":
              "schema":
                "$ref": "#/components/schemas/ServiceIndex"
        "405":
          "description": "Write methods are not supported."
          "content":
            "application/problem+json":
              "schema":
                "$ref": "#/components/schemas/Problem"
  "/api/v1/products":
    "get":
      "operationId": "listProducts"
      "summary": "List products"
      "description": "The LargitData product and service catalog, with the canonical URL of each product page in every supported language."
      "tags":
        - "Catalog"
      "security": []
      "parameters":
        - "name": "lang"
          "in": "query"
          "required": false
          "description": "Language of the returned titles and descriptions."
          "schema":
            "type": "string"
            "enum":
              - "zh-tw"
              - "en"
              - "ja"
            "default": "zh-tw"
        - "name": "page"
          "in": "query"
          "required": false
          "description": "1-based page number."
          "schema":
            "type": "integer"
            "minimum": 1
            "default": 1
        - "name": "page_size"
          "in": "query"
          "required": false
          "description": "Items per page."
          "schema":
            "type": "integer"
            "minimum": 1
            "maximum": 100
            "default": 50
      "responses":
        "200":
          "description": "List products"
          "content":
            "application/json":
              "schema":
                "type": "object"
                "required":
                  - "data"
                  - "meta"
                  - "links"
                "properties":
                  "data":
                    "type": "array"
                    "items":
                      "$ref": "#/components/schemas/Product"
                  "meta":
                    "$ref": "#/components/schemas/PaginationMeta"
                  "links":
                    "$ref": "#/components/schemas/Links"
        "400":
          "description": "A query parameter was invalid."
          "content":
            "application/problem+json":
              "schema":
                "$ref": "#/components/schemas/Problem"
        "405":
          "description": "Write methods are not supported."
          "content":
            "application/problem+json":
              "schema":
                "$ref": "#/components/schemas/Problem"
  "/api/v1/products/{product_id}":
    "get":
      "operationId": "getProduct"
      "summary": "Get one product"
      "description": "Look up a single product by its stable id, for example `infominer`."
      "tags":
        - "Catalog"
      "security": []
      "parameters":
        - "name": "product_id"
          "in": "path"
          "required": true
          "description": "Stable product identifier."
          "schema":
            "type": "string"
            "enum":
              - "infominer"
              - "ragi"
              - "qubicx"
              - "aimochi"
              - "social-media-api"
              - "ecommerce-data-api"
              - "ai-content-analysis"
              - "ocr"
              - "asr"
        - "name": "lang"
          "in": "query"
          "required": false
          "description": "Language of the returned titles and descriptions."
          "schema":
            "type": "string"
            "enum":
              - "zh-tw"
              - "en"
              - "ja"
            "default": "zh-tw"
      "responses":
        "200":
          "description": "Get one product"
          "content":
            "application/json":
              "schema":
                "type": "object"
                "required":
                  - "data"
                "properties":
                  "data":
                    "$ref": "#/components/schemas/Product"
                  "links":
                    "$ref": "#/components/schemas/Links"
        "400":
          "description": "A query parameter was invalid."
          "content":
            "application/problem+json":
              "schema":
                "$ref": "#/components/schemas/Problem"
        "404":
          "description": "No such resource."
          "content":
            "application/problem+json":
              "schema":
                "$ref": "#/components/schemas/Problem"
        "405":
          "description": "Write methods are not supported."
          "content":
            "application/problem+json":
              "schema":
                "$ref": "#/components/schemas/Problem"
  "/api/v1/pages":
    "get":
      "operationId": "listPages"
      "summary": "List content pages"
      "description": "The knowledge, solutions, use-case, comparison, case-study, about and resources pages published on the site."
      "tags":
        - "Catalog"
      "security": []
      "parameters":
        - "name": "lang"
          "in": "query"
          "required": false
          "description": "Language of the returned titles and descriptions."
          "schema":
            "type": "string"
            "enum":
              - "zh-tw"
              - "en"
              - "ja"
            "default": "zh-tw"
        - "name": "page"
          "in": "query"
          "required": false
          "description": "1-based page number."
          "schema":
            "type": "integer"
            "minimum": 1
            "default": 1
        - "name": "page_size"
          "in": "query"
          "required": false
          "description": "Items per page."
          "schema":
            "type": "integer"
            "minimum": 1
            "maximum": 100
            "default": 50
        - "name": "section"
          "in": "query"
          "required": false
          "description": "Restrict results to one section, for example `knowledge`."
          "schema":
            "type": "string"
      "responses":
        "200":
          "description": "List content pages"
          "content":
            "application/json":
              "schema":
                "type": "object"
                "required":
                  - "data"
                  - "meta"
                  - "links"
                "properties":
                  "data":
                    "type": "array"
                    "items":
                      "$ref": "#/components/schemas/Page"
                  "meta":
                    "$ref": "#/components/schemas/PaginationMeta"
                  "links":
                    "$ref": "#/components/schemas/Links"
        "400":
          "description": "A query parameter was invalid."
          "content":
            "application/problem+json":
              "schema":
                "$ref": "#/components/schemas/Problem"
        "405":
          "description": "Write methods are not supported."
          "content":
            "application/problem+json":
              "schema":
                "$ref": "#/components/schemas/Problem"
  "/api/v1/pages/{page_key}":
    "get":
      "operationId": "getPage"
      "summary": "Get one content page"
      "description": "Look up a single page by its key, for example `knowledge/what-is-rag`."
      "tags":
        - "Catalog"
      "security": []
      "parameters":
        - "name": "page_key"
          "in": "path"
          "required": true
          "description": "Page key, i.e. the site path without leading or trailing slashes."
          "schema":
            "type": "string"
        - "name": "lang"
          "in": "query"
          "required": false
          "description": "Language of the returned titles and descriptions."
          "schema":
            "type": "string"
            "enum":
              - "zh-tw"
              - "en"
              - "ja"
            "default": "zh-tw"
      "responses":
        "200":
          "description": "Get one content page"
          "content":
            "application/json":
              "schema":
                "type": "object"
                "required":
                  - "data"
                "properties":
                  "data":
                    "$ref": "#/components/schemas/Page"
                  "links":
                    "$ref": "#/components/schemas/Links"
        "400":
          "description": "A query parameter was invalid."
          "content":
            "application/problem+json":
              "schema":
                "$ref": "#/components/schemas/Problem"
        "404":
          "description": "No such resource."
          "content":
            "application/problem+json":
              "schema":
                "$ref": "#/components/schemas/Problem"
        "405":
          "description": "Write methods are not supported."
          "content":
            "application/problem+json":
              "schema":
                "$ref": "#/components/schemas/Problem"
  "/api/v1/posts":
    "get":
      "operationId": "listPosts"
      "summary": "List blog posts"
      "description": "Blog posts ordered newest first. The HTML body is omitted from the list; fetch a single post to get it."
      "tags":
        - "Catalog"
      "security": []
      "parameters":
        - "name": "lang"
          "in": "query"
          "required": false
          "description": "Language of the returned titles and descriptions."
          "schema":
            "type": "string"
            "enum":
              - "zh-tw"
              - "en"
              - "ja"
            "default": "zh-tw"
        - "name": "page"
          "in": "query"
          "required": false
          "description": "1-based page number."
          "schema":
            "type": "integer"
            "minimum": 1
            "default": 1
        - "name": "page_size"
          "in": "query"
          "required": false
          "description": "Items per page."
          "schema":
            "type": "integer"
            "minimum": 1
            "maximum": 100
            "default": 50
      "responses":
        "200":
          "description": "List blog posts"
          "content":
            "application/json":
              "schema":
                "type": "object"
                "required":
                  - "data"
                  - "meta"
                  - "links"
                "properties":
                  "data":
                    "type": "array"
                    "items":
                      "$ref": "#/components/schemas/PostSummary"
                  "meta":
                    "$ref": "#/components/schemas/PaginationMeta"
                  "links":
                    "$ref": "#/components/schemas/Links"
        "400":
          "description": "A query parameter was invalid."
          "content":
            "application/problem+json":
              "schema":
                "$ref": "#/components/schemas/Problem"
        "405":
          "description": "Write methods are not supported."
          "content":
            "application/problem+json":
              "schema":
                "$ref": "#/components/schemas/Problem"
  "/api/v1/posts/{slug}":
    "get":
      "operationId": "getPost"
      "summary": "Get one blog post"
      "description": "A single blog post including its HTML body."
      "tags":
        - "Catalog"
      "security": []
      "parameters":
        - "name": "slug"
          "in": "path"
          "required": true
          "description": "Blog post slug."
          "schema":
            "type": "string"
        - "name": "lang"
          "in": "query"
          "required": false
          "description": "Language of the returned titles and descriptions."
          "schema":
            "type": "string"
            "enum":
              - "zh-tw"
              - "en"
              - "ja"
            "default": "zh-tw"
      "responses":
        "200":
          "description": "Get one blog post"
          "content":
            "application/json":
              "schema":
                "type": "object"
                "required":
                  - "data"
                "properties":
                  "data":
                    "$ref": "#/components/schemas/Post"
                  "links":
                    "$ref": "#/components/schemas/Links"
        "400":
          "description": "A query parameter was invalid."
          "content":
            "application/problem+json":
              "schema":
                "$ref": "#/components/schemas/Problem"
        "404":
          "description": "No such resource."
          "content":
            "application/problem+json":
              "schema":
                "$ref": "#/components/schemas/Problem"
        "405":
          "description": "Write methods are not supported."
          "content":
            "application/problem+json":
              "schema":
                "$ref": "#/components/schemas/Problem"
"components":
  "securitySchemes":
    "ApiKeyAuth":
      "type": "apiKey"
      "in": "header"
      "name": "X-API-Key"
      "description": "Used by the commercial Social Media API and Cross-border Ecommerce Data API. The public content API in this document requires no credentials."
  "schemas":
    "Problem":
      "type": "object"
      "description": "RFC 9457 problem document. Every error from this API uses this shape."
      "required":
        - "type"
        - "title"
        - "status"
        - "code"
        - "detail"
        - "hint"
      "properties":
        "type":
          "type": "string"
          "format": "uri"
          "description": "Link to the documented error code."
        "title":
          "type": "string"
          "description": "Short, human-readable summary."
        "status":
          "type": "integer"
          "description": "HTTP status code."
        "code":
          "type": "string"
          "description": "Stable machine-readable error code."
          "enum":
            - "invalid_parameter"
            - "method_not_allowed"
            - "not_found"
            - "page_not_found"
            - "post_not_found"
            - "product_not_found"
            - "server_error"
        "detail":
          "type": "string"
          "description": "What went wrong with this specific request."
        "instance":
          "type": "string"
          "description": "Path of the failing request."
        "hint":
          "type": "string"
          "description": "How to recover."
        "documentation_url":
          "type": "string"
          "format": "uri"
        "parameter":
          "type": "string"
          "description": "Offending query parameter, when applicable."
        "allowed_methods":
          "type": "array"
          "items":
            "type": "string"
    "PaginationMeta":
      "type": "object"
      "required":
        - "total"
        - "page"
        - "page_size"
        - "total_pages"
      "properties":
        "total":
          "type": "integer"
        "page":
          "type": "integer"
        "page_size":
          "type": "integer"
        "total_pages":
          "type": "integer"
        "lang":
          "type":
            - "string"
            - "null"
        "section":
          "type":
            - "string"
            - "null"
    "Links":
      "type": "object"
      "properties":
        "self":
          "type":
            - "string"
            - "null"
          "format": "uri"
        "next":
          "type":
            - "string"
            - "null"
          "format": "uri"
        "prev":
          "type":
            - "string"
            - "null"
          "format": "uri"
        "documentation":
          "type": "string"
          "format": "uri"
    "ServiceIndex":
      "type": "object"
      "required":
        - "service"
        - "version"
        - "endpoints"
      "properties":
        "service":
          "type": "string"
        "version":
          "type": "string"
        "description":
          "type": "string"
        "documentation":
          "type": "string"
          "format": "uri"
        "openapi":
          "type": "string"
          "format": "uri"
        "terms_of_service":
          "type": "string"
          "format": "uri"
        "contact":
          "type": "object"
          "additionalProperties":
            "type": "string"
        "languages":
          "type": "array"
          "items":
            "type": "string"
        "endpoints":
          "type": "array"
          "items":
            "type": "object"
        "errors":
          "type": "object"
    "Product":
      "type": "object"
      "required":
        - "id"
        - "name"
        - "description"
        - "url"
        - "urls"
      "properties":
        "id":
          "type": "string"
        "name":
          "type": "string"
        "category":
          "type": "string"
          "enum":
            - "platform"
            - "data-api"
            - "service"
        "description":
          "type": "string"
        "commercial_api":
          "type": "boolean"
          "description": "True when the product is a key-gated commercial data service."
        "lang":
          "type": "string"
        "url":
          "type": "string"
          "format": "uri"
        "urls":
          "type": "object"
          "description": "The same value in each supported language, keyed by language code."
          "additionalProperties":
            "type": "string"
    "Page":
      "type": "object"
      "required":
        - "key"
        - "section"
        - "title"
        - "url"
      "properties":
        "key":
          "type": "string"
        "section":
          "type": "string"
        "lang":
          "type": "string"
        "title":
          "type":
            - "string"
            - "null"
        "description":
          "type":
            - "string"
            - "null"
        "keywords":
          "type": "array"
          "items":
            "type": "string"
        "type":
          "type": "string"
          "description": "schema.org type of the page."
        "is_index":
          "type": "boolean"
        "published_at":
          "type":
            - "string"
            - "null"
        "updated_at":
          "type":
            - "string"
            - "null"
        "url":
          "type": "string"
          "format": "uri"
        "urls":
          "type": "object"
          "description": "The same value in each supported language, keyed by language code."
          "additionalProperties":
            "type": "string"
    "PostSummary":
      "type": "object"
      "required":
        - "slug"
        - "title"
        - "url"
      "properties":
        "slug":
          "type": "string"
        "title":
          "type": "string"
        "author":
          "type":
            - "string"
            - "null"
        "lang":
          "type":
            - "string"
            - "null"
        "summary":
          "type":
            - "string"
            - "null"
        "keywords":
          "type": "array"
          "items":
            "type": "string"
        "image":
          "type":
            - "string"
            - "null"
        "published_at":
          "type":
            - "string"
            - "null"
        "updated_at":
          "type":
            - "string"
            - "null"
        "url":
          "type": "string"
          "format": "uri"
    "Post":
      "allOf":
        - "$ref": "#/components/schemas/PostSummary"
        - "type": "object"
          "properties":
            "answer_summary":
              "type":
                - "string"
                - "null"
              "description": "Self-contained plain-text answer block written for citation by AI assistants."
            "content_html":
              "type":
                - "string"
                - "null"
