{
  "openapi": "3.1.0",
  "info": {
    "title": "Funkii Studio",
    "version": "1.0.0",
    "description": "Brand kits for agents: 5-color palette + CSS variables, sanitized SVG logo, or a full starter brand kit — one call each, paid in USDC."
  },
  "servers": [
    {
      "url": "https://funkii-ai.vercel.app"
    }
  ],
  "paths": {
    "/palette": {
      "post": {
        "operationId": "palette",
        "summary": "5-color brand palette from a mood: named hex colors, ready-to-paste CSS variables, and a Google Fonts pairing.",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$schema": "https://json-schema.org/draft/2020-12/schema",
                  "type": "object",
                  "properties": {
                    "palette": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string"
                          },
                          "hex": {
                            "type": "string",
                            "format": "color"
                          }
                        },
                        "required": [
                          "name",
                          "hex"
                        ],
                        "additionalProperties": false
                      },
                      "description": "5 named brand colors"
                    },
                    "cssVariables": {
                      "type": "string",
                      "contentMediaType": "text/css"
                    },
                    "fonts": {
                      "type": "object",
                      "properties": {
                        "heading": {
                          "type": "string"
                        },
                        "body": {
                          "type": "string"
                        },
                        "why": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "heading",
                        "body",
                        "why"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "palette",
                    "cssVariables",
                    "fonts"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "402": {
            "description": "Payment required — the body carries an x402 accepts[] envelope (scheme \"exact\", network sui). Sign it and retry with the X-PAYMENT header."
          },
          "422": {
            "description": "Invalid request body — never charged"
          }
        },
        "x-payment-info": {
          "pricingMode": "fixed",
          "price": "0.02",
          "currency": "USDC",
          "protocols": [
            "mpp",
            "x402"
          ],
          "x402": {
            "scheme": "exact",
            "network": "sui:mainnet",
            "asset": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
            "payTo": "0x7f2059fb1c395f4800809b4b97ed8e661535c8c55f89b1379b6b9d0208d2f6dc"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "mood": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 120,
                    "description": "The feeling the brand should give, e.g. \"calm, premium, technical\""
                  },
                  "industry": {
                    "description": "What the brand does, e.g. \"AI agents\"",
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 80
                  }
                },
                "required": [
                  "mood"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/logo": {
      "post": {
        "operationId": "logo",
        "summary": "SVG logo (code-drawn mark + wordmark, sanitized, renders standalone) plus the palette it uses.",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$schema": "https://json-schema.org/draft/2020-12/schema",
                  "type": "object",
                  "properties": {
                    "svg": {
                      "type": "string",
                      "contentMediaType": "image/svg+xml"
                    },
                    "palette": {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "format": "color"
                      }
                    },
                    "rationale": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "svg",
                    "palette",
                    "rationale"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "402": {
            "description": "Payment required — the body carries an x402 accepts[] envelope (scheme \"exact\", network sui). Sign it and retry with the X-PAYMENT header."
          },
          "422": {
            "description": "Invalid request body — never charged"
          }
        },
        "x-payment-info": {
          "pricingMode": "fixed",
          "price": "0.05",
          "currency": "USDC",
          "protocols": [
            "mpp",
            "x402"
          ],
          "x402": {
            "scheme": "exact",
            "network": "sui:mainnet",
            "asset": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
            "payTo": "0x7f2059fb1c395f4800809b4b97ed8e661535c8c55f89b1379b6b9d0208d2f6dc"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 60,
                    "description": "Brand name for the logo"
                  },
                  "mood": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 120,
                    "description": "The feeling, e.g. \"playful, retro\""
                  },
                  "style": {
                    "description": "Optional style notes, e.g. \"monogram\"",
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 120
                  }
                },
                "required": [
                  "name",
                  "mood"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/brand-kit": {
      "post": {
        "operationId": "brand_kit",
        "summary": "Full starter brand kit in one call: SVG logo, 5-color palette + CSS variables, font pairing, tagline, 3 social captions, banner brief.",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$schema": "https://json-schema.org/draft/2020-12/schema",
                  "type": "object",
                  "properties": {
                    "logoSvg": {
                      "type": "string",
                      "contentMediaType": "image/svg+xml"
                    },
                    "palette": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string"
                          },
                          "hex": {
                            "type": "string",
                            "format": "color"
                          }
                        },
                        "required": [
                          "name",
                          "hex"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "typography": {
                      "type": "object",
                      "properties": {
                        "heading": {
                          "type": "string"
                        },
                        "body": {
                          "type": "string"
                        },
                        "why": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "heading",
                        "body",
                        "why"
                      ],
                      "additionalProperties": false
                    },
                    "tagline": {
                      "type": "string"
                    },
                    "captions": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "bannerBrief": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "logoSvg",
                    "palette",
                    "typography",
                    "tagline",
                    "captions",
                    "bannerBrief"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "402": {
            "description": "Payment required — the body carries an x402 accepts[] envelope (scheme \"exact\", network sui). Sign it and retry with the X-PAYMENT header."
          },
          "422": {
            "description": "Invalid request body — never charged"
          }
        },
        "x-payment-info": {
          "pricingMode": "fixed",
          "price": "0.25",
          "currency": "USDC",
          "protocols": [
            "mpp",
            "x402"
          ],
          "x402": {
            "scheme": "exact",
            "network": "sui:mainnet",
            "asset": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
            "payTo": "0x7f2059fb1c395f4800809b4b97ed8e661535c8c55f89b1379b6b9d0208d2f6dc"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 60,
                    "description": "Brand name"
                  },
                  "industry": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 80,
                    "description": "What the brand does, e.g. \"AI agents\""
                  },
                  "mood": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 120,
                    "description": "The feeling, e.g. \"bold, technical, friendly\""
                  },
                  "style": {
                    "description": "Optional style notes",
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 120
                  }
                },
                "required": [
                  "name",
                  "industry",
                  "mood"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    }
  }
}