{
  "openapi": "3.1.0",
  "info": {
    "title": "CryptoMemeCoin Public Read API",
    "version": "1.1.0",
    "description": "Machine-readable discovery and public read endpoints for CryptoMemeCoin."
  },
  "servers": [
    {
      "url": "https://cryptomemecoin.com"
    }
  ],
  "paths": {
    "/memecoins-index.json": {
      "get": {
        "summary": "Memecoin discovery catalog",
        "description": "Static discovery index for public memecoin pages and JSON detail records.",
        "responses": {
          "200": {
            "description": "Memecoin discovery catalog",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MemecoinCatalog"
                }
              }
            }
          }
        }
      }
    },
    "/blog-index.json": {
      "get": {
        "summary": "Blog discovery catalog",
        "description": "Static discovery index for editorial blog posts.",
        "responses": {
          "200": {
            "description": "Blog discovery catalog",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BlogCatalog"
                }
              }
            }
          }
        }
      }
    },
    "/blog.rss.xml": {
      "get": {
        "summary": "Blog RSS feed",
        "description": "RSS feed for the public CryptoMemeCoin editorial blog.",
        "responses": {
          "200": {
            "description": "Blog RSS feed",
            "content": {
              "application/rss+xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/schemas/memecoin.schema.json": {
      "get": {
        "summary": "Memecoin JSON schema",
        "description": "JSON Schema that describes the memecoin detail document format.",
        "responses": {
          "200": {
            "description": "Memecoin JSON Schema",
            "content": {
              "application/schema+json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          }
        }
      }
    },
    "/api/memecoins": {
      "get": {
        "summary": "List public memecoins",
        "description": "Paginated public memecoin listing with discovery URLs.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 20
            }
          },
          {
            "name": "search",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Paginated memecoin list",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MemecoinListResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/memecoins/{id}": {
      "get": {
        "summary": "Get one memecoin document",
        "description": "Returns the full memecoin JSON document. Validate against /schemas/memecoin.schema.json.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Memecoin detail document",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MemecoinDocumentResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/blog": {
      "get": {
        "summary": "List editorial blog posts",
        "description": "Returns the public blog catalog from Mongo-backed articles first, with legacy MDX posts included as fallback.",
        "responses": {
          "200": {
            "description": "Blog post catalog",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BlogCatalogResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/blog/{id}": {
      "get": {
        "summary": "Get one editorial blog post",
        "description": "Returns one public editorial blog post, resolving Mongo-backed articles first and falling back to legacy MDX when needed.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Blog post detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BlogPostResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/posts": {
      "get": {
        "summary": "List human-facing homepage listing cards",
        "description": "Returns the public listing-card feed used by the human homepage and post contexts.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 24
            }
          },
          {
            "name": "query",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Homepage listing-card feed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostsListResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "MemecoinCatalog": {
        "type": "object",
        "properties": {
          "schemaVersion": {
            "type": "string"
          },
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "siteUrl": {
            "type": "string",
            "format": "uri"
          },
          "itemCount": {
            "type": "integer"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MemecoinCatalogItem"
            }
          }
        },
        "example": {
          "schemaVersion": "1.0.0",
          "generatedAt": "2026-07-21T07:29:23.774Z",
          "siteUrl": "https://cryptomemecoin.com",
          "itemCount": 49,
          "items": [
            {
              "id": "world-xyz",
              "title": "world.xyz (WORLD)",
              "category": "Memecoins",
              "summary": "world.xyz is a Solana onchain prediction market, live inside Phantom since July 1, 2026 and settling Chainlink-resolved markets in Phantom's CASH stablecoin.",
              "canonicalUrl": "https://cryptomemecoin.com/memecoins/world-xyz",
              "pageUrl": "https://cryptomemecoin.com/memecoins/world-xyz",
              "jsonUrl": "https://cryptomemecoin.com/memecoins/world-xyz.json",
              "apiUrl": "https://cryptomemecoin.com/api/memecoins/world-xyz",
              "schemaUrl": "https://cryptomemecoin.com/schemas/memecoin.schema.json",
              "image": "https://cdn.dexscreener.com/cms/images/xJc5jA3Ech8TdeZ2?width=800&height=800&quality=95&format=auto",
              "bannerImage": "https://cdn.dexscreener.com/cms/images/RGAxTl0dY1gDJEfg?width=1500&height=500&quality=95&format=auto",
              "contractAddress": "FMqh9mqR6drPZqqW6wPqLHxX4rqNDWGhYLaMfoaJpump",
              "pairAddress": "R88hawBDy3CTiX7F7woKgMJAXbed7f5H38qR4FB2eav",
              "website": null,
              "twitter": null,
              "telegram": null,
              "discord": null,
              "datePublished": "2026-06-25T00:00:00.000Z",
              "dateModified": "2026-07-19T17:09:32.101Z",
              "sectionTypes": [
                "about",
                "history",
                "faq",
                "community",
                "risk",
                "chart",
                "swap"
              ],
              "sectionCount": 7
            }
          ]
        }
      },
      "MemecoinCatalogItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "canonicalUrl": {
            "type": "string",
            "format": "uri"
          },
          "pageUrl": {
            "type": "string",
            "format": "uri"
          },
          "jsonUrl": {
            "type": "string",
            "format": "uri"
          },
          "apiUrl": {
            "type": "string",
            "format": "uri"
          },
          "schemaUrl": {
            "type": "string",
            "format": "uri"
          },
          "image": {
            "type": [
              "string",
              "null"
            ]
          },
          "contractAddress": {
            "type": [
              "string",
              "null"
            ]
          },
          "pairAddress": {
            "type": [
              "string",
              "null"
            ]
          },
          "website": {
            "type": [
              "string",
              "null"
            ]
          },
          "twitter": {
            "type": [
              "string",
              "null"
            ]
          },
          "telegram": {
            "type": [
              "string",
              "null"
            ]
          },
          "discord": {
            "type": [
              "string",
              "null"
            ]
          },
          "datePublished": {
            "type": [
              "string",
              "null"
            ]
          },
          "dateModified": {
            "type": [
              "string",
              "null"
            ]
          },
          "sectionTypes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "BlogCatalog": {
        "type": "object",
        "properties": {
          "schemaVersion": {
            "type": "string"
          },
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "siteUrl": {
            "type": "string",
            "format": "uri"
          },
          "itemCount": {
            "type": "integer"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BlogCatalogItem"
            }
          }
        },
        "example": {
          "schemaVersion": "1.0.0",
          "generatedAt": "2026-07-21T07:29:23.726Z",
          "siteUrl": "https://cryptomemecoin.com",
          "itemCount": 5,
          "items": [
            {
              "id": "axiom-vs-photon",
              "title": "Axiom vs Photon (2026): Fees, Speed & Which Solana Terminal Wins",
              "category": "Trading Tools",
              "summary": "Axiom Trade or Photon for Solana memecoin trading in 2026? We compare discovery, fees, custody, and workflow — and explain why many active traders end up running both.",
              "pageUrl": "https://cryptomemecoin.com/blog/axiom-vs-photon",
              "apiUrl": "https://cryptomemecoin.com/api/blog/axiom-vs-photon",
              "image": "/images/axiom-vs-photon-og.webp",
              "canonicalUrl": "https://cryptomemecoin.com/blog/axiom-vs-photon",
              "datePublished": "2026-07-19",
              "dateModified": "2026-07-20"
            }
          ]
        }
      },
      "BlogCatalogItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "pageUrl": {
            "type": "string",
            "format": "uri"
          },
          "apiUrl": {
            "type": "string",
            "format": "uri"
          },
          "image": {
            "type": [
              "string",
              "null"
            ]
          },
          "canonicalUrl": {
            "type": "string",
            "format": "uri"
          },
          "datePublished": {
            "type": [
              "string",
              "null"
            ]
          },
          "dateModified": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "MemecoinListResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "schemaVersion": {
            "type": "string"
          },
          "data": {
            "type": "object",
            "properties": {
              "items": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/MemecoinCatalogItem"
                }
              },
              "memecoins": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/MemecoinCatalogItem"
                }
              },
              "total": {
                "type": "integer"
              },
              "page": {
                "type": "integer"
              },
              "totalPages": {
                "type": "integer"
              }
            }
          },
          "meta": {
            "type": "object",
            "properties": {
              "total": {
                "type": "integer"
              },
              "page": {
                "type": "integer"
              },
              "limit": {
                "type": "integer"
              },
              "totalPages": {
                "type": "integer"
              }
            }
          }
        }
      },
      "MemecoinDocumentResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "schemaVersion": {
            "type": "string"
          },
          "data": {
            "type": "object",
            "description": "Full memecoin document. Validate against /schemas/memecoin.schema.json.",
            "additionalProperties": true
          }
        }
      },
      "BlogCatalogResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "schemaVersion": {
            "type": "string"
          },
          "data": {
            "type": "object",
            "properties": {
              "items": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/BlogCatalogItem"
                }
              },
              "generatedAt": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              },
              "siteUrl": {
                "type": "string",
                "format": "uri"
              },
              "itemCount": {
                "type": "integer"
              }
            }
          }
        }
      },
      "BlogPostResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "schemaVersion": {
            "type": "string"
          },
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "title": {
                "type": "string"
              },
              "category": {
                "type": "string"
              },
              "description": {
                "type": "string"
              },
              "contentHtml": {
                "type": "string"
              },
              "canonical": {
                "type": "string",
                "format": "uri"
              },
              "datePublished": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "dateModified": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "image": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "additionalProperties": true
          }
        }
      },
      "PostsListResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "schemaVersion": {
            "type": "string"
          },
          "data": {
            "type": "object",
            "properties": {
              "items": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "posts": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "meta": {
            "type": "object",
            "properties": {
              "total": {
                "type": "integer"
              },
              "page": {
                "type": "integer"
              },
              "limit": {
                "type": "integer"
              },
              "totalPages": {
                "type": "integer"
              }
            }
          }
        }
      },
      "ErrorResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "error": {
            "type": "string"
          }
        }
      }
    }
  }
}
