{
  "schema_version": "1.0",
  "name": "SIGNIFO Canvas",
  "description": "AI discovery card for SIGNIFO — Indonesia's premium polyester canvas fabric supplier since 2009. 52+ colors, wholesale and retail, for bags, shoes, and fashion accessories.",
  "provider": {
    "organization": "SIGNIFO Canvas",
    "url": "https://www.signifocanvas.com"
  },
  "url": "https://www.signifocanvas.com",
  "version": "1.0.0",
  "documentationUrl": "https://www.signifocanvas.com/llms-full.txt",
  "capabilities": {
    "streaming": false,
    "pushNotifications": false
  },
  "defaultInputModes": ["text/plain"],
  "defaultOutputModes": ["application/json", "text/plain"],
  "authentication": {
    "schemes": ["none"],
    "note": "The color_search and free_sample APIs require a session-based CSRF token. Agents must perform a GET on the corresponding page first to establish a session and retrieve the token before POSTing."
  },

  "skills": [
    {
      "id": "color_search",
      "name": "AI Color Search",
      "description": "Search SIGNIFO's 52+ polyester canvas colors using natural language in English or Bahasa Indonesia. Powered by DeepSeek AI. Returns 3–5 ranked color slugs that can be used directly in the free sample form.",
      "tags": ["color", "search", "product", "ai"],
      "endpoint": {
        "url": "https://www.signifocanvas.com/api/color_search.php",
        "method": "POST",
        "contentType": "application/json",
        "authentication": {
          "type": "csrf-session",
          "delivery": "header",
          "header": "X-CSRF-TOKEN",
          "sessionSetup": "GET https://www.signifocanvas.com/inspiration/color-catalog/ — token is injected into the page's JS state"
        },
        "rateLimit": "Standard server limits apply"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "userQuery": {
            "type": "string",
            "maxLength": 25,
            "description": "Natural language color description in English or Bahasa Indonesia"
          }
        },
        "required": ["userQuery"]
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "success": { "type": "boolean" },
          "data": {
            "type": "array",
            "items": { "type": "string" },
            "description": "Ranked color slugs, e.g. ['26-moss-green', '41-sage-green', '31-forest-green']"
          }
        }
      },
      "examples": [
        { "input": { "userQuery": "hijau alami" },    "description": "Natural green tones" },
        { "input": { "userQuery": "earthy brown" },   "description": "Earthy brown tones" },
        { "input": { "userQuery": "warna gelap" },    "description": "Dark / deep tones" },
        { "input": { "userQuery": "pastel soft" },    "description": "Soft pastel tones" }
      ],
      "alternativeUrl": "https://www.signifocanvas.com/inspiration/color-catalog/",
      "webmcp": {
        "name": "colorSearch",
        "page": "https://www.signifocanvas.com/inspiration/color-catalog/",
        "invocation": "browser-agent",
        "annotations": { "readOnlyHint": true },
        "note": "Registered at runtime by page JavaScript, so it is only available while that page is open in a WebMCP-capable browser (Chrome 149+ / Edge 150+ origin trials). Query is capped at 25 characters, matching the HTTP flow."
      }
    },

    {
      "id": "request_free_sample",
      "name": "Request Free Fabric Sample",
      "description": "Submit a request for a free SIGNIFO polyester canvas swatch delivered to any address in Indonesia. The delivery address is built from alamat_detail plus the province/city/district id+name pairs, which must be resolved through /api/addresses.php first — a single free-form address field is NOT accepted. Use colour codes from the color_search skill or the colour catalogue to populate warna_pilihan. At most 3 colours per request.",
      "tags": ["sample", "order", "form", "free"],
      "endpoint": {
        "url": "https://www.signifocanvas.com/api/free_sample.php",
        "method": "POST",
        "contentType": "application/x-www-form-urlencoded",
        "authentication": {
          "type": "csrf-session",
          "delivery": "field",
          "field": "csrf_token",
          "sessionSetup": "GET https://www.signifocanvas.com/services/free-sample/ — CSRF token is embedded in the HTML form and must be sent as the csrf_token field"
        },
        "rateLimit": "5 requests per IP per 5 minutes"
      },
      "inputSchema": {
        "type": "object",
        "properties": {
          "nama": {
            "type": "string",
            "minLength": 2,
            "maxLength": 50,
            "pattern": "^[a-zA-Z\\s]{2,50}$",
            "description": "Full name — letters and spaces only"
          },
          "whatsapp": {
            "type": "string",
            "minLength": 10,
            "maxLength": 20,
            "description": "WhatsApp number including country code, e.g. +6281234567890"
          },
          "email": {
            "type": "string",
            "format": "email",
            "description": "Email address (optional)"
          },
          "provinsi_id": {
            "type": "integer",
            "description": "Province ID from GET /api/addresses.php?action=provinces"
          },
          "provinsi_name": {
            "type": "string",
            "description": "Province name matching provinsi_id, e.g. 'Jawa Barat'"
          },
          "kota_id": {
            "type": "integer",
            "description": "City/regency ID from GET /api/addresses.php?action=cities&province_id=<id>"
          },
          "kota_name": {
            "type": "string",
            "description": "City/regency name exactly as returned by the address service for kota_id, e.g. 'BANDUNG'. The service stores bare uppercase names, so copy the lookup value rather than writing 'Kota Bandung'."
          },
          "kecamatan_id": {
            "type": "integer",
            "description": "District ID from GET /api/addresses.php?action=districts&city_id=<id>"
          },
          "kecamatan_name": {
            "type": "string",
            "description": "District name matching kecamatan_id, e.g. 'Coblong'"
          },
          "alamat_detail": {
            "type": "string",
            "minLength": 5,
            "maxLength": 150,
            "description": "Street address: road, house number, RT/RW"
          },
          "warna_pilihan": {
            "type": "array",
            "maxItems": 3,
            "items": { "type": "string" },
            "description": "1-3 two-digit colour codes from the catalogue, e.g. ['01','07']"
          },
          "csrf_token": {
            "type": "string",
            "description": "CSRF token obtained from GET /services/free-sample/"
          }
        },
        "required": ["nama", "whatsapp", "provinsi_id", "provinsi_name", "kota_id", "kota_name", "kecamatan_id", "kecamatan_name", "alamat_detail", "warna_pilihan", "csrf_token"]
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "success": { "type": "boolean" },
          "message": { "type": "string" }
        }
      },
      "webmcp": {
        "name": "requestFreeSample",
        "page": "https://www.signifocanvas.com/services/free-sample/",
        "invocation": "browser-agent",
        "annotations": { "consequentialHint": true },
        "note": "Registered at runtime by page JavaScript, so it is only available while that page is open in a WebMCP-capable browser (Chrome 149+ / Edge 150+ origin trials). Unlike the HTTP flow above, location is supplied as province/city/district NAMES and the tool resolves them to IDs itself. Requires user confirmation before invocation: it writes a real request and triggers human follow-up."
      },
      "alternativeUrl": "https://www.signifocanvas.com/services/free-sample/"
    },

    {
      "id": "contact_whatsapp",
      "name": "WhatsApp Ordering & Inquiry",
      "description": "Direct WhatsApp contact for bulk orders, wholesale pricing, roll orders (~60 yards/roll), and custom color orders (minimum 1,000 yards). Primary sales channel for B2B customers.",
      "tags": ["contact", "order", "wholesale", "bulk", "custom-color"],
      "url": "https://wa.me/signifo",
      "inputModes": ["text/plain"],
      "examples": [
        "Saya butuh 500 yard kanvas untuk produksi tas daypack",
        "Mau order per roll, berapa harganya?",
        "Bisa custom warna minimum berapa yard?"
      ]
    },

    {
      "id": "browse_color_catalog",
      "name": "Interactive Color Catalog",
      "description": "Browse SIGNIFO's full catalog of 52+ polyester canvas colors with names, hex codes, and an AI-powered color search. Physical swatch catalog PDF also available for download.",
      "tags": ["color", "catalog", "browse", "product"],
      "url": "https://www.signifocanvas.com/inspiration/color-catalog/",
      "inputModes": ["text/plain"]
    },

    {
      "id": "product_specifications_standard",
      "name": "SIGNIFO Standard Details & Specifications",
      "description": "Complete product page for the 250 GSM standard finished dyed canvas: weave type (2/1 canvas, no coating), width (150 cm), roll size (~60 yards), pricing (IDR 45,000/yard), 52+ colors, print compatibility (sublimation + digital screen printing), use cases, and FAQ.",
      "tags": ["product", "specifications", "pricing", "faq", "standard"],
      "url": "https://www.signifocanvas.com/product/polyester-canvas/",
      "inputModes": ["text/plain"]
    },

    {
      "id": "product_specifications_ss65",
      "name": "SIGNIFO ss65 Details & Specifications",
      "description": "Complete product page for the 500 GSM heavy-duty raw greige canvas: weave type (oxford weave, raw loom state), width (160 cm), roll size (~45-50 meters), pricing (IDR 39,000/meter), natural color, use cases, and FAQ.",
      "tags": ["product", "specifications", "pricing", "faq", "ss65", "greige"],
      "url": "https://www.signifocanvas.com/product/signifo-ss65/",
      "inputModes": ["text/plain"]
    },

    {
      "id": "mockup_gallery",
      "name": "Product Mockup Gallery",
      "description": "Visual gallery showing SIGNIFO polyester canvas applied to real bag and shoe product designs. Useful for evaluating how colors and texture look in production.",
      "tags": ["mockup", "gallery", "inspiration", "bags", "shoes", "design"],
      "url": "https://www.signifocanvas.com/inspiration/mockup-gallery/",
      "inputModes": ["text/plain"]
    },

    {
      "id": "ai_chatbot",
      "name": "SIGNIFO AI Product Assistant",
      "description": "Dedicated real-time AI assistant at chatbot.signifocanvas.com for product questions, color matching, stock availability, and ordering in Bahasa Indonesia.",
      "tags": ["chat", "support", "assistant", "bahasa-indonesia", "realtime"],
      "url": "https://chatbot.signifocanvas.com",
      "documentationUrl": "https://chatbot.signifocanvas.com/llms.txt",
      "inputModes": ["text/plain"],
      "outputModes": ["text/plain"]
    }
  ],

  "product": {
    "@context": "https://schema.org",
    "@type": "Product",
    "name": "Kain Kanvas Polyester SIGNIFO",
    "description": "Premium polyester canvas fabric. Standard: 250 GSM finished dyed canvas in 52+ colors. ss65: 500 GSM raw greige heavy-duty canvas in natural loom-state color. Used for bags, shoes, fashion accessories, and home decoration.",
    "url": "https://www.signifocanvas.com",
    "image": "https://storage.googleapis.com/images.signifocanvas.com/pages/polyester-canvas/polyester-canvas-desktop-bg-01.webp",
    "brand": {
      "@type": "Brand",
      "name": "SIGNIFO",
      "sameAs": [
        "https://www.tokopedia.com/signifo",
        "https://shopee.co.id/signifocanvas.offcialstore",
        "https://www.tiktok.com/@kanvaspolyester",
        "https://www.instagram.com/signifocanvas/",
        "https://www.facebook.com/signifocanvas/",
        "https://x.com/signifocanvas"
      ]
    },
    "aggregateRating": {
      "@type": "AggregateRating",
      "ratingValue": "4.9",
      "ratingCount": "326",
      "bestRating": "5"
    },
    "offers": {
      "@type": "AggregateOffer",
      "offerCount": "2",
      "lowPrice": "39000",
      "highPrice": "45000",
      "priceCurrency": "IDR",
      "url": "https://www.signifocanvas.com",
      "availability": "https://schema.org/InStock"
    }
  },

  "business": {
    "@context": "https://schema.org",
    "@type": "LocalBusiness",
    "name": "SIGNIFO Canvas",
    "url": "https://www.signifocanvas.com",
    "foundingDate": "2009",
    "trademark": "SIGNIFO® — Registration No. IDM001157619 (Indonesian Law No. 20/2016)",
    "address": {
      "@type": "PostalAddress",
      "addressCountry": "ID",
      "addressRegion": "Jawa Barat"
    },
    "contactPoint": {
      "@type": "ContactPoint",
      "contactType": "sales",
      "url": "https://wa.me/signifo",
      "availableLanguage": ["id", "en"]
    },
    "marketplace": {
      "webstore": "https://shop.signifocanvas.com",
      "tokopedia": "https://www.tokopedia.com/signifo",
      "shopee": "https://shopee.co.id/signifocanvas.offcialstore",
      "tiktokShop": "https://www.tiktok.com/@kanvaspolyester"
    }
  },

  "content": {
    "summary": "https://www.signifocanvas.com/llms.txt",
    "full": "https://www.signifocanvas.com/llms-full.txt",
    "sitemap": "https://www.signifocanvas.com/sitemap.xml"
  }
}
