{
    "name": "vaivatta.",
    "description": "The vaivatta. B2B shop as an agent: IT, POS and receipt printing hardware, software and services for businesses in Finland, with prices including VAT, delivery and buying guides. Rule-based and structured: send a JSON data part naming a skill and its fields; missing fields come back as input-required.",
    "supportedInterfaces": [
        {
            "url": "https://vaivatta.fi/a2a",
            "protocolBinding": "JSONRPC",
            "protocolVersion": "1.0"
        }
    ],
    "provider": {
        "organization": "Innovategy Oy",
        "url": "https://vaivatta.fi"
    },
    "version": "1.0.1",
    "documentationUrl": "https://vaivatta.fi/auth.md",
    "capabilities": {
        "streaming": false,
        "pushNotifications": false,
        "extendedAgentCard": false
    },
    "securitySchemes": {
        "vaivatta": {
            "oauth2SecurityScheme": {
                "description": "The shop's OAuth server: the buyer connects their account and chooses what the agent may do. The catalogue skills need no token.",
                "flows": {
                    "authorizationCode": {
                        "authorizationUrl": "https://vaivatta.fi/oauth/authorize",
                        "tokenUrl": "https://vaivatta.fi/oauth/token",
                        "scopes": {
                            "account:read": "Read your name, company, addresses and loyalty points",
                            "orders:read": "List your orders and read their status and invoice link",
                            "cart:write": "Keep a cart of its own: add, change and remove lines",
                            "quotes:write": "Send a quote request in your name",
                            "checkout": "Turn its cart into a payment link that you open and pay"
                        },
                        "pkceRequired": true
                    }
                },
                "oauth2MetadataUrl": "https://vaivatta.fi/.well-known/oauth-authorization-server"
            }
        }
    },
    "defaultInputModes": [
        "application/json",
        "text/plain"
    ],
    "defaultOutputModes": [
        "application/json",
        "text/plain"
    ],
    "skills": [
        {
            "id": "find_products",
            "name": "Find products",
            "description": "Find products by words, brand, model or part number (24 per page), with links, price including VAT and delivery. Read one in full with product_details. Input (JSON data part): {\"type\":\"object\",\"properties\":{\"query\":{\"type\":\"string\",\"description\":\"What to look for, at least 2 characters: words, a brand, a model or a part number.\"},\"page\":{\"type\":\"integer\",\"description\":\"The result page, from 1.\"},\"locale\":{\"type\":\"string\",\"enum\":[\"fi\",\"en\"],\"description\":\"Answer language: fi or en. Links follow the language.\"}},\"required\":[\"query\"]}",
            "tags": [
                "search",
                "products",
                "receipt printers",
                "POS",
                "barcode scanners"
            ],
            "examples": [
                "{\"skill\":\"find_products\",\"query\":\"kuittitulostin 80 mm\",\"locale\":\"fi\"}",
                "{\"skill\":\"find_products\",\"query\":\"Zebra TC22\",\"locale\":\"en\"}"
            ],
            "inputModes": [
                "application/json",
                "text/plain"
            ],
            "outputModes": [
                "application/json",
                "text/plain"
            ]
        },
        {
            "id": "product_details",
            "name": "Product details",
            "description": "One product in full as Markdown: price including and excluding VAT, delivery, identifiers, description, specifications and questions. Input (JSON data part): {\"type\":\"object\",\"properties\":{\"product\":{\"type\":\"string\",\"description\":\"The product: its link on vaivatta.fi, its path or its slug.\"},\"locale\":{\"type\":\"string\",\"enum\":[\"fi\",\"en\"],\"description\":\"Answer language: fi or en. Links follow the language.\"}},\"required\":[\"product\"]}",
            "tags": [
                "product",
                "price",
                "delivery",
                "specifications"
            ],
            "examples": [
                "{\"skill\":\"product_details\",\"product\":\"https://vaivatta.fi/en/epson-tm-t20iii\",\"locale\":\"en\"}"
            ],
            "inputModes": [
                "application/json",
                "text/plain"
            ],
            "outputModes": [
                "application/json",
                "text/plain"
            ]
        },
        {
            "id": "compare_products",
            "name": "Compare products",
            "description": "Two to four products in full as Markdown, in the order given: prices including VAT, delivery, identifiers and specifications, for comparing. Input (JSON data part): {\"type\":\"object\",\"properties\":{\"products\":{\"type\":\"array\",\"description\":\"2 to 4 products: links on vaivatta.fi, paths or slugs.\"},\"locale\":{\"type\":\"string\",\"enum\":[\"fi\",\"en\"],\"description\":\"Answer language: fi or en. Links follow the language.\"}},\"required\":[\"products\"]}",
            "tags": [
                "compare",
                "products",
                "specifications"
            ],
            "examples": [
                "{\"skill\":\"compare_products\",\"products\":[\"epson-tm-t20iii\",\"https://vaivatta.fi/star-tsp143iv\"],\"locale\":\"fi\"}"
            ],
            "inputModes": [
                "application/json",
                "text/plain"
            ],
            "outputModes": [
                "application/json",
                "text/plain"
            ]
        },
        {
            "id": "build_cart",
            "name": "Build the cart",
            "description": "Adds packs of products to this connection's own cart (not the buyer's web cart) and answers the re-priced cart: lines, shipping, fees and totals including and excluding VAT. Without lines it reads the cart. Products sold by quote cannot be added: use request_quote. Input (JSON data part): {\"type\":\"object\",\"properties\":{\"lines\":{\"type\":\"array\",\"description\":\"Up to 20 lines, each {\\\"sku\\\": the SKU from product_details, \\\"qty\\\": packs from 1 to 999}. Leave out to read the cart.\"},\"locale\":{\"type\":\"string\",\"enum\":[\"fi\",\"en\"],\"description\":\"Answer language: fi or en.\"}},\"required\":[]}",
            "tags": [
                "cart",
                "order"
            ],
            "examples": [
                "{\"skill\":\"build_cart\",\"lines\":[{\"sku\":\"jt-tmt20iii\",\"qty\":2}],\"locale\":\"fi\"}"
            ],
            "inputModes": [
                "application/json",
                "text/plain"
            ],
            "outputModes": [
                "application/json",
                "text/plain"
            ],
            "securityRequirements": [
                {
                    "schemes": {
                        "vaivatta": {
                            "list": [
                                "cart:write"
                            ]
                        }
                    }
                }
            ]
        },
        {
            "id": "discount_code",
            "name": "Use a discount code",
            "description": "Puts a discount code on this connection's cart and answers the re-priced cart with the discount on each line and the coupon row, as the shop priced them; without a code it takes the current code off. The shop checks the code and may ask for the person's e-mail (a once-per-buyer code on a connection without an account): pass it as email. Apply the code before prepare_checkout. Input (JSON data part): {\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"string\",\"description\":\"The discount code the person gave, 1 to 64 characters. Leave out to take the current code off the cart.\"},\"email\":{\"type\":\"string\",\"description\":\"The person's e-mail, only when the shop answered that the code needs one.\"},\"locale\":{\"type\":\"string\",\"enum\":[\"fi\",\"en\"],\"description\":\"Answer language: fi or en.\"}},\"required\":[]}",
            "tags": [
                "cart",
                "discount"
            ],
            "examples": [
                "{\"skill\":\"discount_code\",\"code\":\"TERVETULOA\",\"locale\":\"fi\"}",
                "{\"skill\":\"discount_code\"}"
            ],
            "inputModes": [
                "application/json",
                "text/plain"
            ],
            "outputModes": [
                "application/json",
                "text/plain"
            ],
            "securityRequirements": [
                {
                    "schemes": {
                        "vaivatta": {
                            "list": [
                                "cart:write"
                            ]
                        }
                    }
                }
            ]
        },
        {
            "id": "request_quote",
            "name": "Request a quote",
            "description": "Sends a quote request in the buyer's name; the shop replies by e-mail. Company and business id are never required. Input (JSON data part): {\"type\":\"object\",\"properties\":{\"message\":{\"type\":\"string\",\"description\":\"What the buyer wants priced, in their words.\"},\"sku\":{\"type\":\"string\",\"description\":\"Optional. The SKU of one product, from product_details.\"},\"quantity\":{\"type\":\"string\",\"description\":\"Optional. How many, in words or numbers.\"},\"name\":{\"type\":\"string\",\"description\":\"The person's name, needed only when the account has none.\"},\"email\":{\"type\":\"string\",\"description\":\"The person's e-mail, needed only without an account.\"},\"phone\":{\"type\":\"string\",\"description\":\"Optional.\"},\"company\":{\"type\":\"string\",\"description\":\"Optional.\"},\"locale\":{\"type\":\"string\",\"enum\":[\"fi\",\"en\"],\"description\":\"Answer language: fi or en.\"}},\"required\":[\"message\"]}",
            "tags": [
                "quote",
                "pricing"
            ],
            "examples": [
                "{\"skill\":\"request_quote\",\"message\":\"10 receipt printers for a restaurant chain, delivery in November\",\"quantity\":\"10\"}"
            ],
            "inputModes": [
                "application/json",
                "text/plain"
            ],
            "outputModes": [
                "application/json",
                "text/plain"
            ],
            "securityRequirements": [
                {
                    "schemes": {
                        "vaivatta": {
                            "list": [
                                "quotes:write"
                            ]
                        }
                    }
                }
            ]
        },
        {
            "id": "request_price_comparison",
            "name": "Request a price comparison",
            "description": "Requests a detailed price comparison for one product in the buyer's name: where else in Finland it is sold, at what price and delivery time. AI agents and a person prepare it, and the shop sends it by e-mail within 2 working days. Input (JSON data part): {\"type\":\"object\",\"properties\":{\"sku\":{\"type\":\"string\",\"description\":\"The SKU of the product, from find_products or product_details.\"},\"quantity\":{\"type\":\"string\",\"description\":\"Optional. How many, in words or numbers.\"},\"message\":{\"type\":\"string\",\"description\":\"Optional. Anything the buyer wants compared as well.\"},\"name\":{\"type\":\"string\",\"description\":\"The person's name, needed only when the account has none.\"},\"email\":{\"type\":\"string\",\"description\":\"The person's e-mail, needed only without an account.\"},\"phone\":{\"type\":\"string\",\"description\":\"Optional.\"},\"company\":{\"type\":\"string\",\"description\":\"Optional.\"},\"locale\":{\"type\":\"string\",\"enum\":[\"fi\",\"en\"],\"description\":\"Answer language: fi or en.\"}},\"required\":[\"sku\"]}",
            "tags": [
                "pricing",
                "comparison"
            ],
            "examples": [
                "{\"skill\":\"request_price_comparison\",\"sku\":\"C31CH51012\"}"
            ],
            "inputModes": [
                "application/json",
                "text/plain"
            ],
            "outputModes": [
                "application/json",
                "text/plain"
            ],
            "securityRequirements": [
                {
                    "schemes": {
                        "vaivatta": {
                            "list": [
                                "quotes:write"
                            ]
                        }
                    }
                }
            ]
        },
        {
            "id": "prepare_checkout",
            "name": "Prepare the checkout",
            "description": "Makes a link from this connection's cart that the person opens to check the cart, accept the terms of sale and pay. The agent never pays and never accepts terms. Pass payment_method invoice when the person asked to pay by invoice; the page then opens with it chosen, if the shop offers it. Input (JSON data part): {\"type\":\"object\",\"properties\":{\"locale\":{\"type\":\"string\",\"enum\":[\"fi\",\"en\"],\"description\":\"Answer language: fi or en.\"},\"payment_method\":{\"type\":\"string\",\"enum\":[\"card\",\"invoice\"],\"description\":\"How the person said they want to pay: card (default) or invoice (paid ahead, when the shop offers it). A hint for the page; the person chooses there.\"}},\"required\":[]}",
            "tags": [
                "checkout",
                "payment link"
            ],
            "examples": [
                "{\"skill\":\"prepare_checkout\",\"locale\":\"fi\"}",
                "{\"skill\":\"prepare_checkout\",\"payment_method\":\"invoice\"}"
            ],
            "inputModes": [
                "application/json",
                "text/plain"
            ],
            "outputModes": [
                "application/json",
                "text/plain"
            ],
            "securityRequirements": [
                {
                    "schemes": {
                        "vaivatta": {
                            "list": [
                                "checkout"
                            ]
                        }
                    }
                }
            ]
        },
        {
            "id": "my_orders",
            "name": "My orders",
            "description": "The buyer's orders, newest first, or one order in full with its lines, shipping and invoice link when an order number is given. Input (JSON data part): {\"type\":\"object\",\"properties\":{\"order\":{\"type\":\"string\",\"description\":\"Optional. An order number, for example VV-1001, to read in full.\"},\"after\":{\"type\":\"string\",\"description\":\"Optional. next_cursor of the previous answer, for the next page.\"},\"locale\":{\"type\":\"string\",\"enum\":[\"fi\",\"en\"],\"description\":\"Answer language: fi or en.\"}},\"required\":[]}",
            "tags": [
                "orders",
                "account"
            ],
            "examples": [
                "{\"skill\":\"my_orders\"}",
                "{\"skill\":\"my_orders\",\"order\":\"VV-1001\",\"locale\":\"en\"}"
            ],
            "inputModes": [
                "application/json",
                "text/plain"
            ],
            "outputModes": [
                "application/json",
                "text/plain"
            ],
            "securityRequirements": [
                {
                    "schemes": {
                        "vaivatta": {
                            "list": [
                                "orders:read"
                            ]
                        }
                    }
                }
            ]
        }
    ]
}