> ## Documentation Index
> Fetch the complete documentation index at: https://docs.iotools.cloud/llms.txt
> Use this file to discover all available pages before exploring further.

# Schema Markup Generator

> Generate schema.org JSON-LD structured data for Article, FAQ, Product, Recipe, Event, Local Business, How-to, Job Posting and more — with a checklist of the properties Google needs for the rich result.

[Try Schema Markup Generator in your browser →](https://iotools.cloud/tool/schema-markup-generator/)



## OpenAPI

````yaml https://api.iotools.cloud/v1/openapi post /v1/tool/schema-markup-generator
openapi: 3.1.0
info:
  title: iotools.cloud API
  version: 1.0.0
  description: >-
    Run any iotools.cloud tool over HTTP.


    Authenticate with `Authorization: Bearer iot_live_…`.


    **Only `POST /v1/tool/{slug}` costs credits.** Every GET here — the catalog,
    a tool's schema, your balance — is free. A tool call is charged its own
    weight or your plan's per-call minimum, whichever is larger;
    `x-iotools-credit-cost` on each operation is quoted at the free-tier
    minimum, and `GET /v1/tools/list` returns the exact figure for your key.
    `GET /v1/me/credits` reports what you have left, and `GET /v1/me/usage`
    reports what it went on.


    Failures are RFC 9457 problem documents — branch on `code`.
servers:
  - url: https://api.iotools.cloud
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Catalog
    description: Find a tool and read its contract. Free.
  - name: Converters
    description: >-
      Convert between formats, encodings, and units — Base64, CSV and JSON,
      timestamps, and more. Fast, free, and processed right in your browser.
  - name: Formatters
    description: >-
      Format, beautify, minify, and validate code and data — JSON, HTML, CSS,
      SQL, and regex. Clean up messy input in one click, with nothing to upload.
  - name: Generators
    description: >-
      Generate exactly what you need and on demand — passwords, UUIDs, QR codes,
      hashes, random numbers, and more. Secure, instant, and free.
  - name: Calculators
    description: >-
      Crunch the numbers fast — from everyday math to specialized conversions
      and unit work. Free online calculators that run entirely in your browser.
  - name: Editors
    description: >-
      Edit and transform text, code, and images with quick, focused editors that
      run entirely in your browser — nothing to install, and no sign-up needed.
  - name: Utilities
    description: >-
      Everyday developer and web utilities — DNS and IP lookups, redirect and
      certificate checkers, and other quick diagnostics. Free and
      privacy-friendly.
  - name: Account
    description: Your key's allowance, limits and usage history.
paths:
  /v1/tool/schema-markup-generator:
    post:
      tags:
        - Generators
      summary: Schema Markup Generator
      description: >-
        Generate schema.org JSON-LD structured data for Article, FAQ, Product,
        Recipe, Event, Local Business, How-to, Job Posting and more — with a
        checklist of the properties Google needs for the rich result.


        [Try Schema Markup Generator in your browser
        →](https://iotools.cloud/tool/schema-markup-generator/)
      operationId: run_schema_markup_generator
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                type:
                  enum:
                    - article
                    - breadcrumb
                    - event
                    - faq
                    - howto
                    - jobposting
                    - localbusiness
                    - organization
                    - person
                    - product
                    - recipe
                    - video
                    - website
                  description: Schema type
                articleType:
                  enum:
                    - Article
                    - NewsArticle
                    - BlogPosting
                  description: Article @type
                headline:
                  type: string
                  description: Headline
                articleUrl:
                  type: string
                  description: Article URL
                articleDescription:
                  type: string
                  description: Description
                articleImage:
                  type: string
                  description: Image URLs
                authorType:
                  enum:
                    - Person
                    - Organization
                  description: Author @type
                authorName:
                  type: string
                  description: Author name
                authorUrl:
                  type: string
                  description: Author URL
                publisherName:
                  type: string
                  description: Publisher name
                publisherLogo:
                  type: string
                  description: Publisher logo URL
                dateModified:
                  type: string
                  description: Date modified
                breadcrumbs:
                  type: string
                  description: Breadcrumb trail
                eventName:
                  type: string
                  description: Event name
                eventDescription:
                  type: string
                  description: Description
                eventImage:
                  type: string
                  description: Image URLs
                eventStart:
                  type: string
                  description: Start date & time
                eventEnd:
                  type: string
                  description: End date & time
                eventStatus:
                  enum:
                    - EventScheduled
                    - EventCancelled
                    - EventPostponed
                    - EventRescheduled
                    - EventMovedOnline
                  description: Event status
                eventAttendance:
                  enum:
                    - OfflineEventAttendanceMode
                    - OnlineEventAttendanceMode
                    - MixedEventAttendanceMode
                  description: Attendance mode
                eventLocationName:
                  type: string
                  description: Venue name
                eventStreamUrl:
                  type: string
                  description: Stream URL
                performerType:
                  enum:
                    - PerformingGroup
                    - Person
                  description: Performer @type
                performerName:
                  type: string
                  description: Performer name
                organizerName:
                  type: string
                  description: Organizer name
                organizerUrl:
                  type: string
                  description: Organizer URL
                offerValidFrom:
                  type: string
                  description: Tickets on sale from
                faq:
                  type: string
                  description: Questions and answers
                howToName:
                  type: string
                  description: How-to title
                howToDescription:
                  type: string
                  description: Description
                howToImage:
                  type: string
                  description: Image URLs
                howToTime:
                  type: string
                  description: Total time
                howToCost:
                  type: number
                  description: Estimated cost
                howToSupplies:
                  type: string
                  description: Supplies
                howToTools:
                  type: string
                  description: Tools
                howToSteps:
                  type: string
                  description: Steps
                jobTitle:
                  type: string
                  description: Job title
                jobDescription:
                  type: string
                  description: Job description
                jobDatePosted:
                  type: string
                  description: Date posted
                jobValidThrough:
                  type: string
                  description: Valid through
                jobEmploymentType:
                  enum:
                    - FULL_TIME
                    - PART_TIME
                    - CONTRACTOR
                    - TEMPORARY
                    - INTERN
                    - VOLUNTEER
                    - PER_DIEM
                    - OTHER
                  description: Employment type
                jobCompanyName:
                  type: string
                  description: Hiring organization
                jobCompanyUrl:
                  type: string
                  description: Organization URL
                jobCompanyLogo:
                  type: string
                  description: Organization logo URL
                jobSalaryMin:
                  type: number
                  description: Salary minimum
                jobSalaryMax:
                  type: number
                  description: Salary maximum
                jobSalaryUnit:
                  enum:
                    - HOUR
                    - DAY
                    - WEEK
                    - MONTH
                    - YEAR
                  description: Salary per
                jobRemote:
                  type: boolean
                  description: Remote (telecommute)
                businessType:
                  enum:
                    - LocalBusiness
                    - AccountingService
                    - AutoRepair
                    - Bakery
                    - BarOrPub
                    - BeautySalon
                    - CafeOrCoffeeShop
                    - ChildCare
                    - Dentist
                    - DryCleaningOrLaundry
                    - Electrician
                    - EmploymentAgency
                    - FinancialService
                    - Florist
                    - FoodEstablishment
                    - GeneralContractor
                    - HairSalon
                    - HealthClub
                    - HomeAndConstructionBusiness
                    - Hotel
                    - InsuranceAgency
                    - LegalService
                    - Locksmith
                    - MedicalBusiness
                    - MovingCompany
                    - Notary
                    - Optician
                    - Physician
                    - Plumber
                    - ProfessionalService
                    - RealEstateAgent
                    - Restaurant
                    - RoofingContractor
                    - SelfStorage
                    - ShoppingCenter
                    - SportsClub
                    - Store
                    - TravelAgency
                    - VeterinaryCare
                  description: Business @type
                businessName:
                  type: string
                  description: Business name
                businessUrl:
                  type: string
                  description: Website URL
                businessImage:
                  type: string
                  description: Image URLs
                businessPhone:
                  type: string
                  description: Telephone
                businessPriceRange:
                  type: string
                  description: Price range
                latitude:
                  type: string
                  description: Latitude
                longitude:
                  type: string
                  description: Longitude
                openingHours:
                  type: string
                  description: Opening hours
                orgType:
                  enum:
                    - Organization
                    - Airline
                    - Consortium
                    - Corporation
                    - EducationalOrganization
                    - GovernmentOrganization
                    - LibrarySystem
                    - MedicalOrganization
                    - NGO
                    - NewsMediaOrganization
                    - PerformingGroup
                    - Project
                    - ResearchOrganization
                    - SportsOrganization
                  description: Organization @type
                orgName:
                  type: string
                  description: Organization name
                orgAlternateName:
                  type: string
                  description: Alternate name
                orgUrl:
                  type: string
                  description: Website URL
                orgLogo:
                  type: string
                  description: Logo URL
                orgPhone:
                  type: string
                  description: Contact telephone
                orgContactType:
                  enum:
                    - customer support
                    - technical support
                    - billing support
                    - sales
                    - reservations
                    - credit card support
                    - emergency
                  description: Contact type
                personName:
                  type: string
                  description: Full name
                personUrl:
                  type: string
                  description: Profile or homepage URL
                personImage:
                  type: string
                  description: Photo URL
                personJobTitle:
                  type: string
                  description: Job title
                personCompany:
                  type: string
                  description: Works for
                productName:
                  type: string
                  description: Product name
                productDescription:
                  type: string
                  description: Description
                productImage:
                  type: string
                  description: Image URLs
                productBrand:
                  type: string
                  description: Brand
                productSku:
                  type: string
                  description: SKU
                productGtin:
                  type: string
                  description: GTIN
                productMpn:
                  type: string
                  description: MPN
                productCondition:
                  enum:
                    - NewCondition
                    - UsedCondition
                    - RefurbishedCondition
                    - DamagedCondition
                  description: Item condition
                priceValidUntil:
                  type: string
                  description: Price valid until
                recipeName:
                  type: string
                  description: Recipe name
                recipeDescription:
                  type: string
                  description: Description
                recipeImage:
                  type: string
                  description: Image URLs
                recipeAuthor:
                  type: string
                  description: Author
                prepTime:
                  type: string
                  description: Prep time
                cookTime:
                  type: string
                  description: Cook time
                recipeYield:
                  type: string
                  description: Yield
                recipeCategory:
                  type: string
                  description: Category
                recipeCuisine:
                  type: string
                  description: Cuisine
                recipeCalories:
                  type: number
                  description: Calories per serving
                ingredients:
                  type: string
                  description: Ingredients
                instructions:
                  type: string
                  description: Instructions
                videoName:
                  type: string
                  description: Video title
                videoDescription:
                  type: string
                  description: Description
                videoThumbnail:
                  type: string
                  description: Thumbnail URLs
                videoDuration:
                  type: string
                  description: Duration
                videoContentUrl:
                  type: string
                  description: Content URL
                videoEmbedUrl:
                  type: string
                  description: Embed URL
                siteName:
                  type: string
                  description: Site name
                siteAlternateName:
                  type: string
                  description: Alternate name
                siteUrl:
                  type: string
                  description: Site URL
                siteSearchUrl:
                  type: string
                  description: Search URL prefix
                datePublished:
                  type: string
                  description: Date published
                street:
                  type: string
                  description: Street address
                city:
                  type: string
                  description: City / locality
                region:
                  type: string
                  description: State / province / region
                postalCode:
                  type: string
                  description: Postal code
                country:
                  type: string
                  description: Country
                offerPrice:
                  type: number
                  description: Price
                currency:
                  type: string
                  description: Currency
                offerAvailability:
                  enum:
                    - InStock
                    - OutOfStock
                    - PreOrder
                    - BackOrder
                    - LimitedAvailability
                    - SoldOut
                    - Discontinued
                  description: Availability
                offerUrl:
                  type: string
                  description: Offer URL
                ratingValue:
                  type: number
                  description: Rating value
                reviewCount:
                  type: number
                  description: Review count
                sameAs:
                  type: string
                  description: Social profiles
              required: []
            examples:
              article:
                summary: Article
                value:
                  type: article
                  articleType: BlogPosting
                  headline: How We Cut Our Build Time in Half
                  articleUrl: https://example.com/blog/faster-builds
                  articleDescription: >-
                    Six changes to our CI pipeline that took a 22-minute build
                    down to 10.
                  articleImage: |-
                    https://example.com/images/builds-16x9.jpg
                    https://example.com/images/builds-1x1.jpg
                  authorType: Person
                  authorName: Dana Okafor
                  authorUrl: https://example.com/authors/dana
                  publisherName: Example Engineering
                  publisherLogo: https://example.com/logo.png
                  datePublished: '2026-03-12'
                  dateModified: '2026-05-04'
              faq_page:
                summary: FAQ page
                value:
                  type: faq
                  faq: >-
                    Do you ship internationally? | Yes, to 40 countries, in 3-6
                    working days.

                    Can I return an order? | Yes, unused items can be returned
                    within 30 days.
              product_with_offer:
                summary: Product with offer
                value:
                  type: product
                  productName: Aeropress Go
                  productDescription: >-
                    A travel-sized immersion coffee maker that brews in under
                    two minutes.
                  productImage: https://example.com/images/aeropress.jpg
                  productBrand: Aeropress
                  productSku: AP-GO-001
                  productCondition: NewCondition
                  offerPrice: '39.95'
                  currency: USD
                  offerAvailability: InStock
                  offerUrl: https://example.com/shop/aeropress-go
                  priceValidUntil: '2026-12-31'
                  ratingValue: '4.7'
                  reviewCount: '312'
              local_business:
                summary: Local business
                value:
                  type: localbusiness
                  businessType: CafeOrCoffeeShop
                  businessName: Kiln & Co
                  businessUrl: https://example.com/
                  businessImage: https://example.com/images/shopfront.jpg
                  businessPhone: +44 20 7946 0000
                  businessPriceRange: ££
                  street: 14 Bridge Street
                  city: London
                  region: Greater London
                  postalCode: SE1 9BG
                  country: GB
                  latitude: '51.5074'
                  longitude: '-0.1278'
                  openingHours: |-
                    Monday-Friday 07:30-17:00
                    Saturday 09:00-16:00
                  sameAs: |-
                    https://x.com/example
                    https://www.instagram.com/example
              breadcrumb_trail:
                summary: Breadcrumb trail
                value:
                  type: breadcrumb
                  breadcrumbs: |-
                    Home | https://example.com/
                    Guides | https://example.com/guides/
                    Sourdough | https://example.com/guides/sourdough/
      responses:
        '200':
          description: Tool output
          content:
            application/json:
              examples:
                article:
                  summary: Article
                  value:
                    tool: schema-markup-generator
                    tool_version: 1.0.1
                    outputs:
                      script: |-
                        <script type="application/ld+json">
                        {
                          "@context": "https://schema.org",
                          "@type": "BlogPosting",
                          "mainEntityOfPage": {
                            "@type": "WebPage",
                            "@id": "https://example.com/blog/faster-builds"
                          },
                          "headline": "How We Cut Our Build Time in Half",
                          "description": "Six changes to our CI pipeline that took a 22-minute build down to 10.",
                          "image": [
                            "https://example.com/images/builds-16x9.jpg",
                            "https://example.com/images/builds-1x1.jpg"
                          ],
                          "author": {
                            "@type": "Person",
                            "name": "Dana Okafor",
                            "url": "https://example.com/authors/dana"
                          },
                          "publisher": {
                            "@type": "Organization",
                            "name": "Example Engineering",
                            "logo": {
                              "@type": "ImageObject",
                              "url": "https://example.com/logo.png"
                            }
                          },
                          "datePublished": "2026-03-12",
                          "dateModified": "2026-05-04"
                        }
                        </script>
                      schema: |-
                        {
                          "@context": "https://schema.org",
                          "@type": "BlogPosting",
                          "mainEntityOfPage": {
                            "@type": "WebPage",
                            "@id": "https://example.com/blog/faster-builds"
                          },
                          "headline": "How We Cut Our Build Time in Half",
                          "description": "Six changes to our CI pipeline that took a 22-minute build down to 10.",
                          "image": [
                            "https://example.com/images/builds-16x9.jpg",
                            "https://example.com/images/builds-1x1.jpg"
                          ],
                          "author": {
                            "@type": "Person",
                            "name": "Dana Okafor",
                            "url": "https://example.com/authors/dana"
                          },
                          "publisher": {
                            "@type": "Organization",
                            "name": "Example Engineering",
                            "logo": {
                              "@type": "ImageObject",
                              "url": "https://example.com/logo.png"
                            }
                          },
                          "datePublished": "2026-03-12",
                          "dateModified": "2026-05-04"
                        }
                      checks:
                        - property: headline
                          requirement: Required
                          status: Present
                        - property: image
                          requirement: Required
                          status: Present
                        - property: datePublished
                          requirement: Required
                          status: Present
                        - property: author.name
                          requirement: Required
                          status: Present
                        - property: dateModified
                          requirement: Recommended
                          status: Present
                        - property: publisher.name
                          requirement: Recommended
                          status: Present
                    credits_used: 3
                    credits_remaining: null
                faq_page:
                  summary: FAQ page
                  value:
                    tool: schema-markup-generator
                    tool_version: 1.0.1
                    outputs:
                      script: |-
                        <script type="application/ld+json">
                        {
                          "@context": "https://schema.org",
                          "@type": "FAQPage",
                          "mainEntity": [
                            {
                              "@type": "Question",
                              "name": "Do you ship internationally?",
                              "acceptedAnswer": {
                                "@type": "Answer",
                                "text": "Yes, to 40 countries, in 3-6 working days."
                              }
                            },
                            {
                              "@type": "Question",
                              "name": "Can I return an order?",
                              "acceptedAnswer": {
                                "@type": "Answer",
                                "text": "Yes, unused items can be returned within 30 days."
                              }
                            }
                          ]
                        }
                        </script>
                      schema: |-
                        {
                          "@context": "https://schema.org",
                          "@type": "FAQPage",
                          "mainEntity": [
                            {
                              "@type": "Question",
                              "name": "Do you ship internationally?",
                              "acceptedAnswer": {
                                "@type": "Answer",
                                "text": "Yes, to 40 countries, in 3-6 working days."
                              }
                            },
                            {
                              "@type": "Question",
                              "name": "Can I return an order?",
                              "acceptedAnswer": {
                                "@type": "Answer",
                                "text": "Yes, unused items can be returned within 30 days."
                              }
                            }
                          ]
                        }
                      checks:
                        - property: mainEntity (question + answer)
                          requirement: Required
                          status: Present
                    credits_used: 3
                    credits_remaining: null
                product_with_offer:
                  summary: Product with offer
                  value:
                    tool: schema-markup-generator
                    tool_version: 1.0.1
                    outputs:
                      script: |-
                        <script type="application/ld+json">
                        {
                          "@context": "https://schema.org",
                          "@type": "Product",
                          "name": "Aeropress Go",
                          "description": "A travel-sized immersion coffee maker that brews in under two minutes.",
                          "image": [
                            "https://example.com/images/aeropress.jpg"
                          ],
                          "brand": {
                            "@type": "Brand",
                            "name": "Aeropress"
                          },
                          "sku": "AP-GO-001",
                          "offers": {
                            "@type": "Offer",
                            "url": "https://example.com/shop/aeropress-go",
                            "price": "39.95",
                            "priceCurrency": "USD",
                            "availability": "https://schema.org/InStock",
                            "priceValidUntil": "2026-12-31",
                            "itemCondition": "https://schema.org/NewCondition"
                          },
                          "aggregateRating": {
                            "@type": "AggregateRating",
                            "ratingValue": "4.7",
                            "reviewCount": "312"
                          }
                        }
                        </script>
                      schema: |-
                        {
                          "@context": "https://schema.org",
                          "@type": "Product",
                          "name": "Aeropress Go",
                          "description": "A travel-sized immersion coffee maker that brews in under two minutes.",
                          "image": [
                            "https://example.com/images/aeropress.jpg"
                          ],
                          "brand": {
                            "@type": "Brand",
                            "name": "Aeropress"
                          },
                          "sku": "AP-GO-001",
                          "offers": {
                            "@type": "Offer",
                            "url": "https://example.com/shop/aeropress-go",
                            "price": "39.95",
                            "priceCurrency": "USD",
                            "availability": "https://schema.org/InStock",
                            "priceValidUntil": "2026-12-31",
                            "itemCondition": "https://schema.org/NewCondition"
                          },
                          "aggregateRating": {
                            "@type": "AggregateRating",
                            "ratingValue": "4.7",
                            "reviewCount": "312"
                          }
                        }
                      checks:
                        - property: name
                          requirement: Required
                          status: Present
                        - property: image
                          requirement: Required
                          status: Present
                        - property: offers.price
                          requirement: Required
                          status: Present
                        - property: offers.priceCurrency
                          requirement: Required
                          status: Present
                        - property: brand.name
                          requirement: Recommended
                          status: Present
                        - property: aggregateRating
                          requirement: Recommended
                          status: Present
                    credits_used: 3
                    credits_remaining: null
                local_business:
                  summary: Local business
                  value:
                    tool: schema-markup-generator
                    tool_version: 1.0.1
                    outputs:
                      script: |-
                        <script type="application/ld+json">
                        {
                          "@context": "https://schema.org",
                          "@type": "CafeOrCoffeeShop",
                          "name": "Kiln & Co",
                          "image": [
                            "https://example.com/images/shopfront.jpg"
                          ],
                          "url": "https://example.com/",
                          "telephone": "+44 20 7946 0000",
                          "priceRange": "££",
                          "address": {
                            "@type": "PostalAddress",
                            "streetAddress": "14 Bridge Street",
                            "addressLocality": "London",
                            "addressRegion": "Greater London",
                            "postalCode": "SE1 9BG",
                            "addressCountry": "GB"
                          },
                          "geo": {
                            "@type": "GeoCoordinates",
                            "latitude": "51.5074",
                            "longitude": "-0.1278"
                          },
                          "openingHoursSpecification": [
                            {
                              "@type": "OpeningHoursSpecification",
                              "dayOfWeek": [
                                "Monday",
                                "Tuesday",
                                "Wednesday",
                                "Thursday",
                                "Friday"
                              ],
                              "opens": "07:30",
                              "closes": "17:00"
                            },
                            {
                              "@type": "OpeningHoursSpecification",
                              "dayOfWeek": [
                                "Saturday"
                              ],
                              "opens": "09:00",
                              "closes": "16:00"
                            }
                          ],
                          "sameAs": [
                            "https://x.com/example",
                            "https://www.instagram.com/example"
                          ]
                        }
                        </script>
                      schema: |-
                        {
                          "@context": "https://schema.org",
                          "@type": "CafeOrCoffeeShop",
                          "name": "Kiln & Co",
                          "image": [
                            "https://example.com/images/shopfront.jpg"
                          ],
                          "url": "https://example.com/",
                          "telephone": "+44 20 7946 0000",
                          "priceRange": "££",
                          "address": {
                            "@type": "PostalAddress",
                            "streetAddress": "14 Bridge Street",
                            "addressLocality": "London",
                            "addressRegion": "Greater London",
                            "postalCode": "SE1 9BG",
                            "addressCountry": "GB"
                          },
                          "geo": {
                            "@type": "GeoCoordinates",
                            "latitude": "51.5074",
                            "longitude": "-0.1278"
                          },
                          "openingHoursSpecification": [
                            {
                              "@type": "OpeningHoursSpecification",
                              "dayOfWeek": [
                                "Monday",
                                "Tuesday",
                                "Wednesday",
                                "Thursday",
                                "Friday"
                              ],
                              "opens": "07:30",
                              "closes": "17:00"
                            },
                            {
                              "@type": "OpeningHoursSpecification",
                              "dayOfWeek": [
                                "Saturday"
                              ],
                              "opens": "09:00",
                              "closes": "16:00"
                            }
                          ],
                          "sameAs": [
                            "https://x.com/example",
                            "https://www.instagram.com/example"
                          ]
                        }
                      checks:
                        - property: name
                          requirement: Required
                          status: Present
                        - property: address
                          requirement: Required
                          status: Present
                        - property: image
                          requirement: Recommended
                          status: Present
                        - property: telephone
                          requirement: Recommended
                          status: Present
                        - property: openingHoursSpecification
                          requirement: Recommended
                          status: Present
                        - property: priceRange
                          requirement: Recommended
                          status: Present
                    credits_used: 3
                    credits_remaining: null
                breadcrumb_trail:
                  summary: Breadcrumb trail
                  value:
                    tool: schema-markup-generator
                    tool_version: 1.0.1
                    outputs:
                      script: |-
                        <script type="application/ld+json">
                        {
                          "@context": "https://schema.org",
                          "@type": "BreadcrumbList",
                          "itemListElement": [
                            {
                              "@type": "ListItem",
                              "position": 1,
                              "name": "Home",
                              "item": "https://example.com/"
                            },
                            {
                              "@type": "ListItem",
                              "position": 2,
                              "name": "Guides",
                              "item": "https://example.com/guides/"
                            },
                            {
                              "@type": "ListItem",
                              "position": 3,
                              "name": "Sourdough",
                              "item": "https://example.com/guides/sourdough/"
                            }
                          ]
                        }
                        </script>
                      schema: |-
                        {
                          "@context": "https://schema.org",
                          "@type": "BreadcrumbList",
                          "itemListElement": [
                            {
                              "@type": "ListItem",
                              "position": 1,
                              "name": "Home",
                              "item": "https://example.com/"
                            },
                            {
                              "@type": "ListItem",
                              "position": 2,
                              "name": "Guides",
                              "item": "https://example.com/guides/"
                            },
                            {
                              "@type": "ListItem",
                              "position": 3,
                              "name": "Sourdough",
                              "item": "https://example.com/guides/sourdough/"
                            }
                          ]
                        }
                      checks:
                        - property: itemListElement (2 or more)
                          requirement: Required
                          status: Present
                    credits_used: 3
                    credits_remaining: null
              schema:
                type: object
                required:
                  - tool
                  - tool_version
                  - outputs
                  - credits_used
                  - credits_remaining
                properties:
                  outputs:
                    type: object
                    properties:
                      script:
                        type: string
                        description: JSON-LD script tag
                      checks:
                        type: array
                        description: Google rich-result checklist
                        items:
                          type: object
                          properties:
                            property:
                              type: string
                              description: Property
                            requirement:
                              type: string
                              description: Requirement
                            status:
                              type: string
                              description: Status
                        x-iotools-columns:
                          - property
                          - requirement
                          - status
                      schema:
                        type: string
                        description: JSON-LD
                  tool:
                    type: string
                    description: The tool's slug, echoing the {slug} in the request path.
                  tool_version:
                    type: string
                    description: Output-contract version for this tool.
                  credits_used:
                    type: integer
                    description: >-
                      Credits this call consumed, after any settlement refund. 0
                      when metering is disabled.
                  credits_remaining:
                    type:
                      - integer
                      - 'null'
                    description: >-
                      Credits left in the current monthly allowance, or null
                      when metering is disabled.
                  request_id:
                    type: string
                    description: Correlation id, also sent as x-request-id.
        '400':
          $ref: '#/components/responses/ValidationError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/InsufficientCredits'
        '403':
          $ref: '#/components/responses/ToolNotAllowed'
        '404':
          $ref: '#/components/responses/ToolNotFound'
        '413':
          $ref: '#/components/responses/PayloadTooLarge'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/ToolFailed'
        '503':
          $ref: '#/components/responses/ToolDisabled'
      security:
        - bearerAuth: []
components:
  responses:
    ValidationError:
      description: Invalid request.
      content:
        application/problem+json:
          schema:
            type: object
            description: >-
              RFC 9457 problem document, served as application/problem+json.
              Branch on `code`; `title` is human prose and may be reworded
              without notice. Some failures add extension members — `fields` on
              validation errors, `retry_after` on 429s,
              `credits_used`/`credits_remaining` on billing-adjacent failures —
              documented on the responses that carry them.
            required:
              - type
              - title
              - status
              - code
            properties:
              type:
                type: string
                format: uri
                description: Stable documentation URI for this failure.
                examples:
                  - https://iotools.cloud/docs/errors/validation_error
              title:
                type: string
                description: Short human-readable summary of the failure.
                examples:
                  - Invalid request
              status:
                type: integer
                description: HTTP status code, matching the response's own status.
              code:
                type: string
                description: >-
                  Stable machine-readable error code — branch on this, not
                  `title`.
                enum:
                  - validation_error
              detail:
                type: string
                description: Human explanation of this occurrence.
              request_id:
                type: string
                description: Correlation id, also sent as x-request-id.
              fields:
                type:
                  - object
                  - string
                additionalProperties:
                  type: string
                description: >-
                  What failed: a map of field name → message. Absent when the
                  body itself is malformed; a single string when the failure
                  isn't tied to one field.
          example:
            type: https://iotools.cloud/docs/errors/validation_error
            title: Invalid request
            status: 400
            code: validation_error
            detail: One or more inputs are invalid — see `fields`.
            request_id: e4042b29-8f1e-4c7a-9b52-6f0d1a3c7e11
            fields:
              inputString: Required
    Unauthorized:
      description: Missing or invalid API key.
      content:
        application/problem+json:
          schema:
            type: object
            description: >-
              RFC 9457 problem document, served as application/problem+json.
              Branch on `code`; `title` is human prose and may be reworded
              without notice. Some failures add extension members — `fields` on
              validation errors, `retry_after` on 429s,
              `credits_used`/`credits_remaining` on billing-adjacent failures —
              documented on the responses that carry them.
            required:
              - type
              - title
              - status
              - code
            properties:
              type:
                type: string
                format: uri
                description: Stable documentation URI for this failure.
                examples:
                  - https://iotools.cloud/docs/errors/invalid_api_key
              title:
                type: string
                description: Short human-readable summary of the failure.
                examples:
                  - Invalid API key
              status:
                type: integer
                description: HTTP status code, matching the response's own status.
              code:
                type: string
                description: >-
                  Stable machine-readable error code — branch on this, not
                  `title`.
                enum:
                  - invalid_api_key
              detail:
                type: string
                description: Human explanation of this occurrence.
              request_id:
                type: string
                description: Correlation id, also sent as x-request-id.
          example:
            type: https://iotools.cloud/docs/errors/invalid_api_key
            title: Invalid API key
            status: 401
            code: invalid_api_key
            detail: 'Provide ''Authorization: Bearer <key>''.'
            request_id: e4042b29-8f1e-4c7a-9b52-6f0d1a3c7e11
    InsufficientCredits:
      description: Monthly credit allowance exhausted.
      content:
        application/problem+json:
          schema:
            type: object
            description: >-
              RFC 9457 problem document, served as application/problem+json.
              Branch on `code`; `title` is human prose and may be reworded
              without notice. Some failures add extension members — `fields` on
              validation errors, `retry_after` on 429s,
              `credits_used`/`credits_remaining` on billing-adjacent failures —
              documented on the responses that carry them.
            required:
              - type
              - title
              - status
              - code
            properties:
              type:
                type: string
                format: uri
                description: Stable documentation URI for this failure.
                examples:
                  - https://iotools.cloud/docs/errors/insufficient_credits
              title:
                type: string
                description: Short human-readable summary of the failure.
                examples:
                  - Insufficient credits
              status:
                type: integer
                description: HTTP status code, matching the response's own status.
              code:
                type: string
                description: >-
                  Stable machine-readable error code — branch on this, not
                  `title`.
                enum:
                  - insufficient_credits
              detail:
                type: string
                description: Human explanation of this occurrence.
              request_id:
                type: string
                description: Correlation id, also sent as x-request-id.
              credits_used:
                type: integer
                description: Always 0 — a refused call charges nothing.
              credits_remaining:
                type: integer
                description: Credits left in the allowance — fewer than this call costs.
          example:
            type: https://iotools.cloud/docs/errors/insufficient_credits
            title: Insufficient credits
            status: 402
            code: insufficient_credits
            detail: This call costs 1 credit and 0 remain in this month's allowance.
            request_id: e4042b29-8f1e-4c7a-9b52-6f0d1a3c7e11
            credits_used: 0
            credits_remaining: 0
    ToolNotAllowed:
      description: Tool exists but has no API surface.
      content:
        application/problem+json:
          schema:
            type: object
            description: >-
              RFC 9457 problem document, served as application/problem+json.
              Branch on `code`; `title` is human prose and may be reworded
              without notice. Some failures add extension members — `fields` on
              validation errors, `retry_after` on 429s,
              `credits_used`/`credits_remaining` on billing-adjacent failures —
              documented on the responses that carry them.
            required:
              - type
              - title
              - status
              - code
            properties:
              type:
                type: string
                format: uri
                description: Stable documentation URI for this failure.
                examples:
                  - https://iotools.cloud/docs/errors/tool_not_allowed
              title:
                type: string
                description: Short human-readable summary of the failure.
                examples:
                  - Tool not available over the API
              status:
                type: integer
                description: HTTP status code, matching the response's own status.
              code:
                type: string
                description: >-
                  Stable machine-readable error code — branch on this, not
                  `title`.
                enum:
                  - tool_not_allowed
              detail:
                type: string
                description: Human explanation of this occurrence.
              request_id:
                type: string
                description: Correlation id, also sent as x-request-id.
          example:
            type: https://iotools.cloud/docs/errors/tool_not_allowed
            title: Tool not available over the API
            status: 403
            code: tool_not_allowed
            detail: >-
              "Background Remover" is available on iotools.cloud but has no API
              endpoint.
            request_id: e4042b29-8f1e-4c7a-9b52-6f0d1a3c7e11
    ToolNotFound:
      description: No such tool.
      content:
        application/problem+json:
          schema:
            type: object
            description: >-
              RFC 9457 problem document, served as application/problem+json.
              Branch on `code`; `title` is human prose and may be reworded
              without notice. Some failures add extension members — `fields` on
              validation errors, `retry_after` on 429s,
              `credits_used`/`credits_remaining` on billing-adjacent failures —
              documented on the responses that carry them.
            required:
              - type
              - title
              - status
              - code
            properties:
              type:
                type: string
                format: uri
                description: Stable documentation URI for this failure.
                examples:
                  - https://iotools.cloud/docs/errors/tool_not_found
              title:
                type: string
                description: Short human-readable summary of the failure.
                examples:
                  - Tool not found
              status:
                type: integer
                description: HTTP status code, matching the response's own status.
              code:
                type: string
                description: >-
                  Stable machine-readable error code — branch on this, not
                  `title`.
                enum:
                  - tool_not_found
              detail:
                type: string
                description: Human explanation of this occurrence.
              request_id:
                type: string
                description: Correlation id, also sent as x-request-id.
          example:
            type: https://iotools.cloud/docs/errors/tool_not_found
            title: Tool not found
            status: 404
            code: tool_not_found
            detail: No tool with that slug. See GET /v1/tools/list.
            request_id: e4042b29-8f1e-4c7a-9b52-6f0d1a3c7e11
    PayloadTooLarge:
      description: Body too large.
      content:
        application/problem+json:
          schema:
            type: object
            description: >-
              RFC 9457 problem document, served as application/problem+json.
              Branch on `code`; `title` is human prose and may be reworded
              without notice. Some failures add extension members — `fields` on
              validation errors, `retry_after` on 429s,
              `credits_used`/`credits_remaining` on billing-adjacent failures —
              documented on the responses that carry them.
            required:
              - type
              - title
              - status
              - code
            properties:
              type:
                type: string
                format: uri
                description: Stable documentation URI for this failure.
                examples:
                  - https://iotools.cloud/docs/errors/payload_too_large
              title:
                type: string
                description: Short human-readable summary of the failure.
                examples:
                  - Payload too large
              status:
                type: integer
                description: HTTP status code, matching the response's own status.
              code:
                type: string
                description: >-
                  Stable machine-readable error code — branch on this, not
                  `title`.
                enum:
                  - payload_too_large
              detail:
                type: string
                description: Human explanation of this occurrence.
              request_id:
                type: string
                description: Correlation id, also sent as x-request-id.
          example:
            type: https://iotools.cloud/docs/errors/payload_too_large
            title: Payload too large
            status: 413
            code: payload_too_large
            detail: Request body exceeds this tool's size limit.
            request_id: e4042b29-8f1e-4c7a-9b52-6f0d1a3c7e11
    RateLimited:
      description: Per-minute rate limit exceeded.
      headers:
        Retry-After:
          description: Seconds to wait before retrying (RFC 9110 delta-seconds).
          schema:
            type: integer
      content:
        application/problem+json:
          schema:
            type: object
            description: >-
              RFC 9457 problem document, served as application/problem+json.
              Branch on `code`; `title` is human prose and may be reworded
              without notice. Some failures add extension members — `fields` on
              validation errors, `retry_after` on 429s,
              `credits_used`/`credits_remaining` on billing-adjacent failures —
              documented on the responses that carry them.
            required:
              - type
              - title
              - status
              - code
            properties:
              type:
                type: string
                format: uri
                description: Stable documentation URI for this failure.
                examples:
                  - https://iotools.cloud/docs/errors/rate_limited
              title:
                type: string
                description: Short human-readable summary of the failure.
                examples:
                  - Rate limit exceeded
              status:
                type: integer
                description: HTTP status code, matching the response's own status.
              code:
                type: string
                description: >-
                  Stable machine-readable error code — branch on this, not
                  `title`.
                enum:
                  - rate_limited
              detail:
                type: string
                description: Human explanation of this occurrence.
              request_id:
                type: string
                description: Correlation id, also sent as x-request-id.
              retry_after:
                type: integer
                description: >-
                  Seconds until the window resets — the same value as the
                  `Retry-After` header.
          example:
            type: https://iotools.cloud/docs/errors/rate_limited
            title: Rate limit exceeded
            status: 429
            code: rate_limited
            detail: Too many requests. Retry in 30s.
            request_id: e4042b29-8f1e-4c7a-9b52-6f0d1a3c7e11
            retry_after: 30
    ToolFailed:
      description: Tool failed to run.
      content:
        application/problem+json:
          schema:
            type: object
            description: >-
              RFC 9457 problem document, served as application/problem+json.
              Branch on `code`; `title` is human prose and may be reworded
              without notice. Some failures add extension members — `fields` on
              validation errors, `retry_after` on 429s,
              `credits_used`/`credits_remaining` on billing-adjacent failures —
              documented on the responses that carry them.
            required:
              - type
              - title
              - status
              - code
            properties:
              type:
                type: string
                format: uri
                description: Stable documentation URI for this failure.
                examples:
                  - https://iotools.cloud/docs/errors/processing_error
                  - https://iotools.cloud/docs/errors/internal_error
              title:
                type: string
                description: Short human-readable summary of the failure.
                examples:
                  - Tool failed to run
                  - Internal error
              status:
                type: integer
                description: HTTP status code, matching the response's own status.
              code:
                type: string
                description: >-
                  Stable machine-readable error code — branch on this, not
                  `title`.
                enum:
                  - processing_error
                  - internal_error
              detail:
                type: string
                description: Human explanation of this occurrence.
              request_id:
                type: string
                description: Correlation id, also sent as x-request-id.
              credits_used:
                type: integer
                description: >-
                  Always 0 on `processing_error` — a failed run is refunded,
                  floor included.
              credits_remaining:
                type: integer
                description: >-
                  Credits left after the refund. Absent when metering is
                  disabled.
          example:
            type: https://iotools.cloud/docs/errors/processing_error
            title: Tool failed to run
            status: 500
            code: processing_error
            detail: The tool failed to run. Please try again.
            request_id: e4042b29-8f1e-4c7a-9b52-6f0d1a3c7e11
            credits_used: 0
    ToolDisabled:
      description: Tool temporarily disabled.
      content:
        application/problem+json:
          schema:
            type: object
            description: >-
              RFC 9457 problem document, served as application/problem+json.
              Branch on `code`; `title` is human prose and may be reworded
              without notice. Some failures add extension members — `fields` on
              validation errors, `retry_after` on 429s,
              `credits_used`/`credits_remaining` on billing-adjacent failures —
              documented on the responses that carry them.
            required:
              - type
              - title
              - status
              - code
            properties:
              type:
                type: string
                format: uri
                description: Stable documentation URI for this failure.
                examples:
                  - https://iotools.cloud/docs/errors/tool_disabled
                  - https://iotools.cloud/docs/errors/api_unconfigured
              title:
                type: string
                description: Short human-readable summary of the failure.
                examples:
                  - Tool temporarily disabled
                  - API not configured
              status:
                type: integer
                description: HTTP status code, matching the response's own status.
              code:
                type: string
                description: >-
                  Stable machine-readable error code — branch on this, not
                  `title`.
                enum:
                  - tool_disabled
                  - api_unconfigured
              detail:
                type: string
                description: Human explanation of this occurrence.
              request_id:
                type: string
                description: Correlation id, also sent as x-request-id.
          example:
            type: https://iotools.cloud/docs/errors/tool_disabled
            title: Tool temporarily disabled
            status: 503
            code: tool_disabled
            detail: This tool is temporarily unavailable. Try again shortly.
            request_id: e4042b29-8f1e-4c7a-9b52-6f0d1a3c7e11
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: iot_live_…

````