{
  "openapi": "3.1.0",
  "info": {
    "title": "ParsNegar Agent Utility Fleet",
    "version": "1.1.0",
    "description": "Callable JSON utilities for agents and small teams: text normalisation, data tidying, hashing, summaries and image generation. 76 services, 17 of them priced per call and payable with x402 on Solana (USDC). Rates are per call, no subscription and no API key.",
    "x-guidance": "POST { input: { ...fields } } to /s/{slug}. Free services answer immediately. Paid services answer HTTP 402 with an accepts[] array: pay the exact amount of USDC on Solana mainnet to payTo, retry the same request with the payment in the X-PAYMENT header, and the answer plus the settlement signature come back. Prices are in USD; amountAtomic is the same price in USDC atomic units (6 decimals). Call GET /s/{slug} for a free manifest, or GET /services.json for the whole index.",
    "contact": {
      "email": "senatormalek777@gmail.com"
    }
  },
  "servers": [
    {
      "url": "https://agent-fleet-ppqpwu.camelai.app"
    }
  ],
  "paths": {
    "/s/persian-cleanup": {
      "post": {
        "operationId": "persian-cleanup",
        "summary": "Persian text cleanup",
        "description": "Normalise Persian typography: letterforms, half-space, punctuation, digits, stray characters - with a change log. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "description": "the Persian text to clean"
                      },
                      "digitStyle": {
                        "type": "string",
                        "description": "persian | ascii (default persian)"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "persian-cleanup-manifest",
        "summary": "Manifest for Persian text cleanup",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/digits": {
      "post": {
        "operationId": "digits",
        "summary": "Digit style converter",
        "description": "Convert between Persian, Arabic-Indic and ASCII digits, and read a number out loud in Persian. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "description": "any text with digits"
                      },
                      "to": {
                        "type": "string",
                        "description": "persian | ascii | arabic"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "digits-manifest",
        "summary": "Manifest for Digit style converter",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/slug": {
      "post": {
        "operationId": "slug",
        "summary": "Persian-aware slug maker",
        "description": "Turn Persian or English titles into clean URL slugs and file names. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "title": {
                        "type": "string",
                        "description": "the title"
                      },
                      "separator": {
                        "type": "string",
                        "description": "slug separator, default -"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "slug-manifest",
        "summary": "Manifest for Persian-aware slug maker",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/csv-tidy": {
      "post": {
        "operationId": "csv-tidy",
        "summary": "CSV tidy",
        "description": "Parse a messy CSV, normalise headers, trim cells, drop duplicate rows and report what changed. Paid per call in USDC on Solana.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "csv": {
                        "type": "string",
                        "description": "the CSV text"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result, plus the settled payment signature."
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "x402Version": {
                      "type": "integer"
                    },
                    "accepts": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002"
          },
          "protocols": [
            {
              "x402": {}
            }
          ],
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "amountAtomic": "2000"
        }
      },
      "get": {
        "operationId": "csv-tidy-manifest",
        "summary": "Manifest for CSV tidy",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/csv-to-json": {
      "post": {
        "operationId": "csv-to-json",
        "summary": "CSV to JSON",
        "description": "Turn a CSV table into an array of typed JSON objects. Paid per call in USDC on Solana.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "csv": {
                        "type": "string",
                        "description": "the CSV text"
                      },
                      "guessTypes": {
                        "type": "string",
                        "description": "true | false (default true)"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result, plus the settled payment signature."
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "x402Version": {
                      "type": "integer"
                    },
                    "accepts": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002"
          },
          "protocols": [
            {
              "x402": {}
            }
          ],
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "amountAtomic": "2000"
        }
      },
      "get": {
        "operationId": "csv-to-json-manifest",
        "summary": "Manifest for CSV to JSON",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/json-tidy": {
      "post": {
        "operationId": "json-tidy",
        "summary": "JSON tidy",
        "description": "Validate JSON, sort keys, report size and shape, and return pretty output. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "json": {
                        "type": "string",
                        "description": "the JSON text"
                      },
                      "sortKeys": {
                        "type": "string",
                        "description": "true | false (default true)"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "json-tidy-manifest",
        "summary": "Manifest for JSON tidy",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/date-normalise": {
      "post": {
        "operationId": "date-normalise",
        "summary": "Date normaliser",
        "description": "Read many date shapes (ISO, slashes, dots, unix seconds, Persian digits) and return ISO 8601 plus a relative phrase. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "values": {
                        "type": "string",
                        "description": "array of date strings, or a single string"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "date-normalise-manifest",
        "summary": "Manifest for Date normaliser",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/word-count": {
      "post": {
        "operationId": "word-count",
        "summary": "Reading stats",
        "description": "Word, character and sentence counts with a reading-time estimate that understands Persian text. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "description": "the text"
                      },
                      "wordsPerMinute": {
                        "type": "string",
                        "description": "reading speed, default 220"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "word-count-manifest",
        "summary": "Manifest for Reading stats",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/unit-convert": {
      "post": {
        "operationId": "unit-convert",
        "summary": "Unit converter",
        "description": "Convert length, mass, temperature and data sizes with exact factors. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "value": {
                        "type": "string",
                        "description": "number"
                      },
                      "from": {
                        "type": "string",
                        "description": "unit"
                      },
                      "to": {
                        "type": "string",
                        "description": "unit"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "unit-convert-manifest",
        "summary": "Manifest for Unit converter",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/palette": {
      "post": {
        "operationId": "palette",
        "summary": "Palette builder",
        "description": "Build a five colour palette from one seed colour with contrast checks against white and black. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "hex": {
                        "type": "string",
                        "description": "seed colour, e.g. #E74079"
                      },
                      "scheme": {
                        "type": "string",
                        "description": "analogous | complement | triad | mono"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "palette-manifest",
        "summary": "Manifest for Palette builder",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/regex-from-examples": {
      "post": {
        "operationId": "regex-from-examples",
        "summary": "Regex from examples",
        "description": "Build a first-draft regular expression and a test result table from a list of strings that should match. Paid per call in USDC on Solana.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "examples": {
                        "type": "string",
                        "description": "array of strings that must match"
                      },
                      "anchors": {
                        "type": "string",
                        "description": "true | false (default true)"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result, plus the settled payment signature."
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "x402Version": {
                      "type": "integer"
                    },
                    "accepts": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002"
          },
          "protocols": [
            {
              "x402": {}
            }
          ],
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "amountAtomic": "2000"
        }
      },
      "get": {
        "operationId": "regex-from-examples-manifest",
        "summary": "Manifest for Regex from examples",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/markdown-toc": {
      "post": {
        "operationId": "markdown-toc",
        "summary": "Markdown table of contents",
        "description": "Build a nested table of contents and heading outline from Markdown, with GitHub-style anchors. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "markdown": {
                        "type": "string",
                        "description": "the markdown text"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "markdown-toc-manifest",
        "summary": "Manifest for Markdown table of contents",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/hash": {
      "post": {
        "operationId": "hash",
        "summary": "Hash and fingerprint",
        "description": "SHA-256, SHA-1 and base64/base64url fingerprints of any text, for receipts and deduplication. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "description": "the text to hash"
                      },
                      "algorithms": {
                        "type": "string",
                        "description": "array, default sha-256"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "hash-manifest",
        "summary": "Manifest for Hash and fingerprint",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/summarise": {
      "post": {
        "operationId": "summarise",
        "summary": "Summariser",
        "description": "Three-sentence summary plus five key points, in the same language as the input. Free, no wallet needed.",
        "tags": [
          "model"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "description": "the text to summarise"
                      },
                      "language": {
                        "type": "string",
                        "description": "optional, e.g. Persian"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "summarise-manifest",
        "summary": "Manifest for Summariser",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/taglines": {
      "post": {
        "operationId": "taglines",
        "summary": "Tagline writer",
        "description": "Five taglines and one strapline for a product, each with the angle it takes. Free, no wallet needed.",
        "tags": [
          "model"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "product": {
                        "type": "string",
                        "description": "what the product is"
                      },
                      "audience": {
                        "type": "string",
                        "description": "who it is for"
                      },
                      "tone": {
                        "type": "string",
                        "description": "optional"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "taglines-manifest",
        "summary": "Manifest for Tagline writer",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/names": {
      "post": {
        "operationId": "names",
        "summary": "Name brewer",
        "description": "Ten candidate names with a short reason for each, plus domain-style variants. Free, no wallet needed.",
        "tags": [
          "model"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "subject": {
                        "type": "string",
                        "description": "what needs a name"
                      },
                      "style": {
                        "type": "string",
                        "description": "optional, e.g. playful, classic"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "names-manifest",
        "summary": "Manifest for Name brewer",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/explain": {
      "post": {
        "operationId": "explain",
        "summary": "Plain-language explainer",
        "description": "Explain any term in two sentences for a named reader, then give one example. Free, no wallet needed.",
        "tags": [
          "model"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "term": {
                        "type": "string",
                        "description": "what to explain"
                      },
                      "reader": {
                        "type": "string",
                        "description": "who is reading, e.g. a junior developer"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "explain-manifest",
        "summary": "Manifest for Plain-language explainer",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/polish": {
      "post": {
        "operationId": "polish",
        "summary": "Copy polisher",
        "description": "Tighten a paragraph: fix grammar, cut filler, keep the voice, and list what was changed. Free, no wallet needed.",
        "tags": [
          "model"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "description": "the copy"
                      },
                      "voice": {
                        "type": "string",
                        "description": "optional, e.g. formal, friendly"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "polish-manifest",
        "summary": "Manifest for Copy polisher",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/keywords": {
      "post": {
        "operationId": "keywords",
        "summary": "Keyword extractor",
        "description": "Pull the terms a page should rank for, with rough frequency and intent labels. Free, no wallet needed.",
        "tags": [
          "model"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "description": "page text or topic"
                      },
                      "count": {
                        "type": "string",
                        "description": "how many keywords, default 12"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "keywords-manifest",
        "summary": "Manifest for Keyword extractor",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/image": {
      "post": {
        "operationId": "image",
        "summary": "Image generator",
        "description": "Generate one square image from a prompt with a free keyless model and return a direct image URL. Paid per call in USDC on Solana.",
        "tags": [
          "image"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "prompt": {
                        "type": "string",
                        "description": "what to draw"
                      },
                      "width": {
                        "type": "string",
                        "description": "optional, default 1024"
                      },
                      "height": {
                        "type": "string",
                        "description": "optional, default 1024"
                      },
                      "seed": {
                        "type": "string",
                        "description": "optional integer for a repeatable result"
                      },
                      "model": {
                        "type": "string",
                        "description": "optional, default flux"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result, plus the settled payment signature."
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "x402Version": {
                      "type": "integer"
                    },
                    "accepts": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010"
          },
          "protocols": [
            {
              "x402": {}
            }
          ],
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "amountAtomic": "10000"
        }
      },
      "get": {
        "operationId": "image-manifest",
        "summary": "Manifest for Image generator",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/image-variations": {
      "post": {
        "operationId": "image-variations",
        "summary": "Image variation set",
        "description": "Turn one prompt into three distinct candidate images so a caller can pick the best one. Paid per call in USDC on Solana.",
        "tags": [
          "image"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "prompt": {
                        "type": "string",
                        "description": "what to draw"
                      },
                      "width": {
                        "type": "string",
                        "description": "optional, default 1024"
                      },
                      "height": {
                        "type": "string",
                        "description": "optional, default 1024"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result, plus the settled payment signature."
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "x402Version": {
                      "type": "integer"
                    },
                    "accepts": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.020"
          },
          "protocols": [
            {
              "x402": {}
            }
          ],
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "amountAtomic": "20000"
        }
      },
      "get": {
        "operationId": "image-variations-manifest",
        "summary": "Manifest for Image variation set",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/csv-stats": {
      "post": {
        "operationId": "csv-stats",
        "summary": "CSV statistics",
        "description": "Profile every column of a CSV: type guess, blanks, unique count, and min, mean and max for numeric columns. Paid per call in USDC on Solana.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "csv": {
                        "type": "string",
                        "description": "the CSV text, first row is the header"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result, plus the settled payment signature."
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "x402Version": {
                      "type": "integer"
                    },
                    "accepts": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002"
          },
          "protocols": [
            {
              "x402": {}
            }
          ],
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "amountAtomic": "2000"
        }
      },
      "get": {
        "operationId": "csv-stats-manifest",
        "summary": "Manifest for CSV statistics",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/csv-to-sql": {
      "post": {
        "operationId": "csv-to-sql",
        "summary": "CSV to SQL",
        "description": "Turn a CSV into a CREATE TABLE statement plus INSERT rows, with column types inferred and values escaped. Paid per call in USDC on Solana.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "csv": {
                        "type": "string",
                        "description": "the CSV text"
                      },
                      "table": {
                        "type": "string",
                        "description": "optional table name, default data"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result, plus the settled payment signature."
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "x402Version": {
                      "type": "integer"
                    },
                    "accepts": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002"
          },
          "protocols": [
            {
              "x402": {}
            }
          ],
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "amountAtomic": "2000"
        }
      },
      "get": {
        "operationId": "csv-to-sql-manifest",
        "summary": "Manifest for CSV to SQL",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/text-diff": {
      "post": {
        "operationId": "text-diff",
        "summary": "Text diff",
        "description": "Compare two versions of a text and report the added, removed and unchanged lines. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "before": {
                        "type": "string",
                        "description": "the old text"
                      },
                      "after": {
                        "type": "string",
                        "description": "the new text"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "text-diff-manifest",
        "summary": "Manifest for Text diff",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/extract": {
      "post": {
        "operationId": "extract",
        "summary": "Extract fields",
        "description": "Pull emails, links, numbers, hashtags and mentions out of a block of text. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "description": "any text to scan"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "extract-manifest",
        "summary": "Manifest for Extract fields",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/token-count": {
      "post": {
        "operationId": "token-count",
        "summary": "Token and cost estimate",
        "description": "Estimate how many model tokens a text costs and what that means in dollars for common price tiers. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "description": "the prompt or document to measure"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "token-count-manifest",
        "summary": "Manifest for Token and cost estimate",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/cron-explain": {
      "post": {
        "operationId": "cron-explain",
        "summary": "Explain a cron schedule",
        "description": "Turn a five-field cron expression into plain words. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "cron": {
                        "type": "string",
                        "description": "five fields: minute hour day month weekday"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "cron-explain-manifest",
        "summary": "Manifest for Explain a cron schedule",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/jalali": {
      "post": {
        "operationId": "jalali",
        "summary": "Jalali and Gregorian dates",
        "description": "Convert between the Iranian Jalali (Shamsi) calendar and the Gregorian calendar, both directions, with the Persian month name. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "gregorian": {
                        "type": "string",
                        "description": "YYYY-MM-DD to convert to Jalali, or"
                      },
                      "jalali": {
                        "type": "string",
                        "description": "YYYY-MM-DD (Shamsi) to convert to Gregorian"
                      },
                      "format": {
                        "type": "string",
                        "description": "optional: iso or long"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "jalali-manifest",
        "summary": "Manifest for Jalali and Gregorian dates",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/persian-numbers": {
      "post": {
        "operationId": "persian-numbers",
        "summary": "Numbers in Persian words",
        "description": "Write a number out in Persian words, the form used on invoices and cheques, with digit and separator choices. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "number": {
                        "type": "string",
                        "description": "the number to spell out"
                      },
                      "digits": {
                        "type": "string",
                        "description": "optional: western or persian"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "persian-numbers-manifest",
        "summary": "Manifest for Numbers in Persian words",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/persian-sort": {
      "post": {
        "operationId": "persian-sort",
        "summary": "Sort Persian lines",
        "description": "Sort a list of Persian or mixed lines in proper Persian alphabetical order, with normalisation first. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "lines": {
                        "type": "string",
                        "description": "the lines to sort, newline separated"
                      },
                      "direction": {
                        "type": "string",
                        "description": "optional: asc or desc"
                      },
                      "unique": {
                        "type": "string",
                        "description": "optional: true to drop duplicates"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "persian-sort-manifest",
        "summary": "Manifest for Sort Persian lines",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/job-data-pack": {
      "post": {
        "operationId": "job-data-pack",
        "summary": "Job: clean a data file end to end",
        "description": "One call, one price: take a messy CSV and return cleaned rows, JSON, column statistics, SQL DDL plus inserts, and a receipt. The bundle agents ask for instead of four separate calls. Paid per call in USDC on Solana.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "csv": {
                        "type": "string",
                        "description": "the messy CSV text"
                      },
                      "table": {
                        "type": "string",
                        "description": "optional table name for the SQL"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result, plus the settled payment signature."
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "x402Version": {
                      "type": "integer"
                    },
                    "accepts": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.020"
          },
          "protocols": [
            {
              "x402": {}
            }
          ],
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "amountAtomic": "20000"
        }
      },
      "get": {
        "operationId": "job-data-pack-manifest",
        "summary": "Manifest for Job: clean a data file end to end",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/job-persian-publish": {
      "post": {
        "operationId": "job-persian-publish",
        "summary": "Job: prepare Persian text for publishing",
        "description": "One call: normalise Persian text, measure it, produce a URL slug, an excerpt, keywords and hashtags, ready to publish. Paid per call in USDC on Solana.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "description": "the Persian text"
                      },
                      "title": {
                        "type": "string",
                        "description": "optional title used for the slug"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result, plus the settled payment signature."
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "x402Version": {
                      "type": "integer"
                    },
                    "accepts": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.020"
          },
          "protocols": [
            {
              "x402": {}
            }
          ],
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "amountAtomic": "20000"
        }
      },
      "get": {
        "operationId": "job-persian-publish-manifest",
        "summary": "Manifest for Job: prepare Persian text for publishing",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/iran-national-id": {
      "post": {
        "operationId": "iran-national-id",
        "summary": "Check an Iranian national ID",
        "description": "Validate a ten digit Iranian national code with its check digit, and explain why a number fails. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "code": {
                        "type": "string",
                        "description": "the ten digit national code, Persian or western digits"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "iran-national-id-manifest",
        "summary": "Manifest for Check an Iranian national ID",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/iran-card": {
      "post": {
        "operationId": "iran-card",
        "summary": "Check an Iranian bank card number",
        "description": "Validate a sixteen digit Iranian bank card number with the Luhn check and report whether a well known bank prefix is recognised. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "card": {
                        "type": "string",
                        "description": "the card number, with or without separators"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "iran-card-manifest",
        "summary": "Manifest for Check an Iranian bank card number",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/iran-iban": {
      "post": {
        "operationId": "iran-iban",
        "summary": "Check an Iranian IBAN (Sheba)",
        "description": "Validate an Iranian Sheba number with the mod 97 check and return the normalised IR form. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "iban": {
                        "type": "string",
                        "description": "the Sheba number, with or without IR and separators"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "iran-iban-manifest",
        "summary": "Manifest for Check an Iranian IBAN (Sheba)",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/iran-mobile": {
      "post": {
        "operationId": "iran-mobile",
        "summary": "Normalise an Iranian mobile number",
        "description": "Clean an Iranian mobile number into +98 form and report the operator its prefix belongs to. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "number": {
                        "type": "string",
                        "description": "any form of the number, with spaces, dashes or Persian digits"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "iran-mobile-manifest",
        "summary": "Manifest for Normalise an Iranian mobile number",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/tehran-time": {
      "post": {
        "operationId": "tehran-time",
        "summary": "Tehran time conversions",
        "description": "Convert between an instant and Tehran time in both directions, with the weekday, using the Asia/Tehran calendar, which has had no summer time since 2022. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "instant": {
                        "type": "string",
                        "description": "an ISO instant such as 2026-03-21T12:00:00Z"
                      },
                      "iso": {
                        "type": "string",
                        "description": "or a Tehran wall clock such as 2026-03-21T15:30"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "tehran-time-manifest",
        "summary": "Manifest for Tehran time conversions",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/jalali-business-days": {
      "post": {
        "operationId": "jalali-business-days",
        "summary": "Add working days in the Iranian week",
        "description": "Add or subtract working days from a Jalali or Gregorian date, skipping Thursday and Friday, the Iranian weekend. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "date": {
                        "type": "string",
                        "description": "YYYY-MM-DD, Jalali or Gregorian"
                      },
                      "days": {
                        "type": "string",
                        "description": "how many working days to add, negative to go back"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "jalali-business-days-manifest",
        "summary": "Manifest for Add working days in the Iranian week",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/json-schema": {
      "post": {
        "operationId": "json-schema",
        "summary": "Infer a JSON Schema",
        "description": "Give a sample JSON value and get a JSON Schema draft-07 description of it, with required keys, types and nested objects or arrays. Paid per call in USDC on Solana.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "sample": {
                        "type": "string",
                        "description": "the sample value, a JSON object or array"
                      },
                      "title": {
                        "type": "string",
                        "description": "optional schema title"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result, plus the settled payment signature."
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "x402Version": {
                      "type": "integer"
                    },
                    "accepts": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002"
          },
          "protocols": [
            {
              "x402": {}
            }
          ],
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "amountAtomic": "2000"
        }
      },
      "get": {
        "operationId": "json-schema-manifest",
        "summary": "Manifest for Infer a JSON Schema",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/wcag-contrast": {
      "post": {
        "operationId": "wcag-contrast",
        "summary": "WCAG contrast check",
        "description": "Give two colours and get their contrast ratio with the AA and AAA verdicts for body text, large text and interface components. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "foreground": {
                        "type": "string",
                        "description": "a hex colour such as #10542E"
                      },
                      "background": {
                        "type": "string",
                        "description": "a hex colour such as #F6F1E4"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "wcag-contrast-manifest",
        "summary": "Manifest for WCAG contrast check",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/cron-next": {
      "post": {
        "operationId": "cron-next",
        "summary": "Next cron runs",
        "description": "Given a five field cron expression, list the next run times from now, honouring lists, ranges and step values. Paid per call in USDC on Solana.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "cron": {
                        "type": "string",
                        "description": "five fields: minute hour day month weekday"
                      },
                      "count": {
                        "type": "string",
                        "description": "optional, how many runs to list, default 5, maximum 20"
                      },
                      "from": {
                        "type": "string",
                        "description": "optional ISO start instant, default now"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result, plus the settled payment signature."
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "x402Version": {
                      "type": "integer"
                    },
                    "accepts": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002"
          },
          "protocols": [
            {
              "x402": {}
            }
          ],
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "amountAtomic": "2000"
        }
      },
      "get": {
        "operationId": "cron-next-manifest",
        "summary": "Manifest for Next cron runs",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/persian-tokenize": {
      "post": {
        "operationId": "persian-tokenize",
        "summary": "Tokenise Persian text",
        "description": "Split Persian text into sentences and words the way Persian is actually written, keeping the zero width non-joiner inside words and reporting the counts. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "description": "the Persian text to segment"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "persian-tokenize-manifest",
        "summary": "Manifest for Tokenise Persian text",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/persian-transliterate": {
      "post": {
        "operationId": "persian-transliterate",
        "summary": "Transliterate Persian to Latin letters",
        "description": "Write Persian text in Latin letters, letter by letter, for slugs, file names and search, with an option for a simple readable style. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "description": "the Persian text"
                      },
                      "style": {
                        "type": "string",
                        "description": "optional: letters (default) or simple"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "persian-transliterate-manifest",
        "summary": "Manifest for Transliterate Persian to Latin letters",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/persian-bidi-check": {
      "post": {
        "operationId": "persian-bidi-check",
        "summary": "Check right to left text safety",
        "description": "Find invisible direction control characters and risky left-to-right runs inside right to left text, the cause of scrambled Persian and Arabic layouts. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "description": "the text to inspect"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "persian-bidi-check-manifest",
        "summary": "Manifest for Check right to left text safety",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/iran-postal-code": {
      "post": {
        "operationId": "iran-postal-code",
        "summary": "Check an Iranian postal code",
        "description": "Validate a ten digit Iranian postal code, and report whether the format is one the post company issues. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "code": {
                        "type": "string",
                        "description": "the ten digit postal code"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "iran-postal-code-manifest",
        "summary": "Manifest for Check an Iranian postal code",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/jwt-decode": {
      "post": {
        "operationId": "jwt-decode",
        "summary": "Decode a JSON web token",
        "description": "Read the header and payload of a JSON web token without verifying it, with the expiry and issued at times in plain words. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "token": {
                        "type": "string",
                        "description": "the token, or just the payload segment"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "jwt-decode-manifest",
        "summary": "Manifest for Decode a JSON web token",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/uuid": {
      "post": {
        "operationId": "uuid",
        "summary": "Generate identifiers",
        "description": "Make random version four identifiers, sortable time based identifiers and short codes, in the quantity you ask for. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "count": {
                        "type": "string",
                        "description": "optional, how many, default 5, maximum 50"
                      },
                      "idempotencyKey": {
                        "type": "string",
                        "description": "optional, any text to turn into a stable identifier"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "uuid-manifest",
        "summary": "Manifest for Generate identifiers",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/base64": {
      "post": {
        "operationId": "base64",
        "summary": "Base64 encode and decode",
        "description": "Turn text into base64 or back, with an option for the url safe alphabet that tokens and file names use. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "description": "the text to encode"
                      },
                      "base64": {
                        "type": "string",
                        "description": "or the base64 text to decode"
                      },
                      "urlSafe": {
                        "type": "string",
                        "description": "optional: true for the url safe alphabet"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "base64-manifest",
        "summary": "Manifest for Base64 encode and decode",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/regex-test": {
      "post": {
        "operationId": "regex-test",
        "summary": "Test a regular expression",
        "description": "Run a pattern against text and get every match with its groups and position, or the reason the pattern is invalid. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "pattern": {
                        "type": "string",
                        "description": "the regular expression without slashes"
                      },
                      "flags": {
                        "type": "string",
                        "description": "optional, for example gi"
                      },
                      "text": {
                        "type": "string",
                        "description": "the text to search"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "regex-test-manifest",
        "summary": "Manifest for Test a regular expression",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/diff-json": {
      "post": {
        "operationId": "diff-json",
        "summary": "Compare two JSON values",
        "description": "Give two JSON values and get every added, removed and changed path, with the old and new values, for auditing a payload change. Paid per call in USDC on Solana.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "before": {
                        "type": "string",
                        "description": "the earlier value"
                      },
                      "after": {
                        "type": "string",
                        "description": "the later value"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result, plus the settled payment signature."
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "x402Version": {
                      "type": "integer"
                    },
                    "accepts": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002"
          },
          "protocols": [
            {
              "x402": {}
            }
          ],
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "amountAtomic": "2000"
        }
      },
      "get": {
        "operationId": "diff-json-manifest",
        "summary": "Manifest for Compare two JSON values",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/markdown-table": {
      "post": {
        "operationId": "markdown-table",
        "summary": "Build a Markdown table",
        "description": "Turn CSV text or a JSON array of rows into a clean Markdown table with a column alignment you choose. Paid per call in USDC on Solana.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "csv": {
                        "type": "string",
                        "description": "CSV text with a header row"
                      },
                      "rows": {
                        "type": "string",
                        "description": "or a JSON array of objects"
                      },
                      "align": {
                        "type": "string",
                        "description": "optional: left, right or centre"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result, plus the settled payment signature."
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "x402Version": {
                      "type": "integer"
                    },
                    "accepts": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002"
          },
          "protocols": [
            {
              "x402": {}
            }
          ],
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "amountAtomic": "2000"
        }
      },
      "get": {
        "operationId": "markdown-table-manifest",
        "summary": "Manifest for Build a Markdown table",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/html-to-text": {
      "post": {
        "operationId": "html-to-text",
        "summary": "HTML to readable text",
        "description": "Turn an HTML fragment into readable text, keeping link addresses, list bullets and paragraph breaks, and decoding entities. Paid per call in USDC on Solana.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "html": {
                        "type": "string",
                        "description": "the HTML fragment"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result, plus the settled payment signature."
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "x402Version": {
                      "type": "integer"
                    },
                    "accepts": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002"
          },
          "protocols": [
            {
              "x402": {}
            }
          ],
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "amountAtomic": "2000"
        }
      },
      "get": {
        "operationId": "html-to-text-manifest",
        "summary": "Manifest for HTML to readable text",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/semver-compare": {
      "post": {
        "operationId": "semver-compare",
        "summary": "Compare version numbers",
        "description": "Compare two version numbers, sort a list of them, and check whether a version satisfies a range such as ^1.2.0 or ~1.2.3 or >=2. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "a": {
                        "type": "string",
                        "description": "the first version"
                      },
                      "b": {
                        "type": "string",
                        "description": "optional, the second version"
                      },
                      "list": {
                        "type": "string",
                        "description": "optional, versions comma separated to sort"
                      },
                      "range": {
                        "type": "string",
                        "description": "optional, a range to test the first version against"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "semver-compare-manifest",
        "summary": "Manifest for Compare version numbers",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/islamic-date": {
      "post": {
        "operationId": "islamic-date",
        "summary": "Gregorian to Hijri date",
        "description": "Convert a Gregorian date to the Hijri calendar and back with the tabular method, giving the month name, the weekday and the day of the Hijri year. Paid per call in USDC on Solana.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "date": {
                        "type": "string",
                        "description": "a Gregorian date such as 2026-03-21"
                      },
                      "hijri": {
                        "type": "string",
                        "description": "or a Hijri date such as 1447-09-13 to convert the other way"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result, plus the settled payment signature."
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "x402Version": {
                      "type": "integer"
                    },
                    "accepts": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002"
          },
          "protocols": [
            {
              "x402": {}
            }
          ],
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "amountAtomic": "2000"
        }
      },
      "get": {
        "operationId": "islamic-date-manifest",
        "summary": "Manifest for Gregorian to Hijri date",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/calendar-bridge": {
      "post": {
        "operationId": "calendar-bridge",
        "summary": "One date in all three calendars",
        "description": "Give a date in any of the Gregorian, Solar Hijri (Jalali) or lunar Hijri calendar and get the same day in all three, with weekday and Persian month name. Paid per call in USDC on Solana.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "date": {
                        "type": "string",
                        "description": "a date, gregorian 2026-03-21 or jalali 1405-01-01 or hijri 1447-09-13"
                      },
                      "calendar": {
                        "type": "string",
                        "description": "optional: which calendar the date is in, otherwise it is guessed"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result, plus the settled payment signature."
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "x402Version": {
                      "type": "integer"
                    },
                    "accepts": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.003"
          },
          "protocols": [
            {
              "x402": {}
            }
          ],
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "amountAtomic": "3000"
        }
      },
      "get": {
        "operationId": "calendar-bridge-manifest",
        "summary": "Manifest for One date in all three calendars",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/iran-phone-geo": {
      "post": {
        "operationId": "iran-phone-geo",
        "summary": "Iran phone numbers and their city",
        "description": "Turn an Iranian landline number into its province and city, and list the landline area codes of the country. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "number": {
                        "type": "string",
                        "description": "optional, a landline number such as 02188776655 or 05138400000"
                      },
                      "list": {
                        "type": "string",
                        "description": "optional: true to return the whole area code table"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "iran-phone-geo-manifest",
        "summary": "Manifest for Iran phone numbers and their city",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/rtl-fix": {
      "post": {
        "operationId": "rtl-fix",
        "summary": "Make mixed right to left text render safely",
        "description": "Wrap the left to right runs, numbers and punctuation inside right to left text so the line stops scrambling in reports, invoices and order lines. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "description": "the mixed text"
                      },
                      "mode": {
                        "type": "string",
                        "description": "optional: isolate (default), marks or strip"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "rtl-fix-manifest",
        "summary": "Manifest for Make mixed right to left text render safely",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/iran-holidays": {
      "post": {
        "operationId": "iran-holidays",
        "summary": "Iranian official holidays of a year",
        "description": "List the fixed official holidays of an Iranian year in Jalali and Gregorian with the weekday, and say plainly which holidays move and are not included. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "jy": {
                        "type": "string",
                        "description": "optional Jalali year such as 1405"
                      },
                      "gy": {
                        "type": "string",
                        "description": "optional Gregorian year such as 2026"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "iran-holidays-manifest",
        "summary": "Manifest for Iranian official holidays of a year",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/keyboard-layout-fix": {
      "post": {
        "operationId": "keyboard-layout-fix",
        "summary": "Fix text typed on the wrong keyboard layout",
        "description": "Take text typed with the Persian layout while the English layout was active, or the other way round, and return what was meant, mapping every key. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "description": "the mistyped text"
                      },
                      "direction": {
                        "type": "string",
                        "description": "optional: auto (default), en-to-fa or fa-to-en"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "keyboard-layout-fix-manifest",
        "summary": "Manifest for Fix text typed on the wrong keyboard layout",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/persian-halfspace": {
      "post": {
        "operationId": "persian-halfspace",
        "summary": "Half space, the zero width non-joiner",
        "description": "Add or remove the Persian half space around the common prefixes and suffixes, and report exactly which words changed. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "description": "the Persian text"
                      },
                      "mode": {
                        "type": "string",
                        "description": "optional: add (default), remove or report"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "persian-halfspace-manifest",
        "summary": "Manifest for Half space, the zero width non-joiner",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/jalali-age": {
      "post": {
        "operationId": "jalali-age",
        "summary": "Age in Jalali dates",
        "description": "Work out an age from a birth date in Jalali or Gregorian, with the next birthday in both calendars and the date an age is reached. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "birth": {
                        "type": "string",
                        "description": "the birth date, Gregorian 1990-05-01 or Jalali 1369-02-11"
                      },
                      "at": {
                        "type": "string",
                        "description": "optional date to measure at, default today"
                      },
                      "age": {
                        "type": "string",
                        "description": "optional, instead give an age to find the birth year"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "jalali-age-manifest",
        "summary": "Manifest for Age in Jalali dates",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/iran-bank-bin": {
      "post": {
        "operationId": "iran-bank-bin",
        "summary": "Iranian card number to its bank",
        "description": "Turn the first six digits of an Iranian bank card into the name of the issuing bank, from a published prefix list. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "card": {
                        "type": "string",
                        "description": "the card number or its first six digits"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "iran-bank-bin-manifest",
        "summary": "Manifest for Iranian card number to its bank",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/regex-explain": {
      "post": {
        "operationId": "regex-explain",
        "summary": "Explain a regular expression",
        "description": "Read a regular expression token by token and say in plain words what each part does, with the constructs it uses and the traps to watch. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "pattern": {
                        "type": "string",
                        "description": "the regex without slashes"
                      },
                      "text": {
                        "type": "string",
                        "description": "optional sample text to test it on"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "regex-explain-manifest",
        "summary": "Manifest for Explain a regular expression",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/schema-jsonld": {
      "post": {
        "operationId": "schema-jsonld",
        "summary": "Build JSON-LD schema markup",
        "description": "Turn plain fields into valid JSON-LD structured data for an article, product, FAQ, breadcrumb, organisation or local business, ready to paste into a page. Paid per call in USDC on Solana.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "description": "article, product, faq, breadcrumb, organization or localbusiness"
                      },
                      "title": {
                        "type": "string",
                        "description": "the name or headline"
                      },
                      "url": {
                        "type": "string",
                        "description": "the canonical url"
                      },
                      "description": {
                        "type": "string",
                        "description": "optional"
                      },
                      "price": {
                        "type": "string",
                        "description": "optional, for a product"
                      },
                      "extra": {
                        "type": "string",
                        "description": "optional object of any further fields such as author, currency, telephone, address, datePublished, items"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result, plus the settled payment signature."
          },
          "402": {
            "description": "Payment Required",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "x402Version": {
                      "type": "integer"
                    },
                    "accepts": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.002"
          },
          "protocols": [
            {
              "x402": {}
            }
          ],
          "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
          "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
          "amountAtomic": "2000"
        }
      },
      "get": {
        "operationId": "schema-jsonld-manifest",
        "summary": "Manifest for Build JSON-LD schema markup",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/ssh-key-inspect": {
      "post": {
        "operationId": "ssh-key-inspect",
        "summary": "Inspect an SSH public key",
        "description": "Read an SSH public key: its type, its size in bits, the curve for elliptic keys, and the SHA-256 fingerprint, and warn you if you have pasted a private key by mistake. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "key": {
                        "type": "string",
                        "description": "the public key line, for example ssh-ed25519 AAAA... comment"
                      },
                      "passphrase": {
                        "type": "string",
                        "description": "optional, set true to also report the ssh-keygen fingerprint command"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "ssh-key-inspect-manifest",
        "summary": "Manifest for Inspect an SSH public key",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/fa-en-glossary": {
      "post": {
        "operationId": "fa-en-glossary",
        "summary": "Persian and English shop and interface glossary",
        "description": "Look up common interface, shop and support terms between Persian and English from a fixed glossary, and mark the words it does not cover instead of inventing a translation. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "terms": {
                        "type": "string",
                        "description": "the words or phrases, separated by commas or new lines, or set text to translate a sentence term by term"
                      },
                      "text": {
                        "type": "string",
                        "description": "optional, a sentence to annotate term by term"
                      },
                      "direction": {
                        "type": "string",
                        "description": "optional: fa-en (default) or en-fa"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "fa-en-glossary-manifest",
        "summary": "Manifest for Persian and English shop and interface glossary",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/mrz-check": {
      "post": {
        "operationId": "mrz-check",
        "summary": "Check a passport machine readable zone",
        "description": "Read the two line machine readable zone of a passport or identity card, verify its check digits and return the name, number, nationality, dates and sex. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "mrz": {
                        "type": "string",
                        "description": "the two MRZ lines of a TD3 passport, or the three lines of a TD1 card"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "mrz-check-manifest",
        "summary": "Manifest for Check a passport machine readable zone",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/isbn-issn": {
      "post": {
        "operationId": "isbn-issn",
        "summary": "Check ISBN and ISSN numbers",
        "description": "Validate an ISBN-10 or ISBN-13 and an ISSN by their check digit, normalise them into the hyphenated form and generate the check digit for a prefix. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "isbn": {
                        "type": "string",
                        "description": "the ISBN, with or without hyphens"
                      },
                      "issn": {
                        "type": "string",
                        "description": "or the ISSN"
                      },
                      "prefix": {
                        "type": "string",
                        "description": "optional, the first digits of an ISBN-13 to complete"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "isbn-issn-manifest",
        "summary": "Manifest for Check ISBN and ISSN numbers",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/vcard": {
      "post": {
        "operationId": "vcard",
        "summary": "Build or read a vCard",
        "description": "Turn contact fields into a vCard 4.0 text block, or read a vCard back into clean JSON fields including phone numbers, email and address. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string",
                        "description": "full name, used when building"
                      },
                      "email": {
                        "type": "string",
                        "description": "optional"
                      },
                      "phone": {
                        "type": "string",
                        "description": "optional"
                      },
                      "organization": {
                        "type": "string",
                        "description": "optional"
                      },
                      "title": {
                        "type": "string",
                        "description": "optional"
                      },
                      "address": {
                        "type": "string",
                        "description": "optional"
                      },
                      "url": {
                        "type": "string",
                        "description": "optional"
                      },
                      "vcard": {
                        "type": "string",
                        "description": "or paste a vCard to read it"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "vcard-manifest",
        "summary": "Manifest for Build or read a vCard",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/dotenv-parse": {
      "post": {
        "operationId": "dotenv-parse",
        "summary": "Read a dotenv file",
        "description": "Turn a dotenv file into JSON, honouring comments, quotes, escapes, export prefixes and multi line values, or write JSON back out as a dotenv file. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "text": {
                        "type": "string",
                        "description": "the dotenv text"
                      },
                      "json": {
                        "type": "string",
                        "description": "or an object to write out as dotenv lines"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "dotenv-parse-manifest",
        "summary": "Manifest for Read a dotenv file",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/id-codes": {
      "post": {
        "operationId": "id-codes",
        "summary": "Generate ULID, Nano ID and short codes",
        "description": "Make sortable ULIDs, short Nano IDs base62, prefixed ticketing codes and checksums, in the quantity you ask for. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "count": {
                        "type": "string",
                        "description": "optional, how many, default 5, maximum 50"
                      },
                      "prefix": {
                        "type": "string",
                        "description": "optional, for example ORD or INV"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "id-codes-manifest",
        "summary": "Manifest for Generate ULID, Nano ID and short codes",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/e164-phone": {
      "post": {
        "operationId": "e164-phone",
        "summary": "Normalise an international phone number",
        "description": "Clean any written phone number into the E.164 form with the country code separated, using a country table, and say which part looks wrong. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "number": {
                        "type": "string",
                        "description": "the number, any punctuation"
                      },
                      "country": {
                        "type": "string",
                        "description": "optional, the country the number is written in, for example IR or GB"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "e164-phone-manifest",
        "summary": "Manifest for Normalise an international phone number",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/swift-bic": {
      "post": {
        "operationId": "swift-bic",
        "summary": "Read a SWIFT BIC code",
        "description": "Check a BIC or SWIFT code for banks, break it into institution, country, location and branch, and explain what each part means. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "bic": {
                        "type": "string",
                        "description": "the code, eight or eleven characters"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "swift-bic-manifest",
        "summary": "Manifest for Read a SWIFT BIC code",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/toml-json": {
      "post": {
        "operationId": "toml-json",
        "summary": "Convert TOML to JSON",
        "description": "Read a TOML configuration into JSON, including tables, arrays of tables, inline tables, arrays, numbers, booleans and dates, and report what it could not parse. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "toml": {
                        "type": "string",
                        "description": "the TOML text"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "toml-json-manifest",
        "summary": "Manifest for Convert TOML to JSON",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/unified-diff": {
      "post": {
        "operationId": "unified-diff",
        "summary": "Diff two texts",
        "description": "Compare two texts line by line and return a unified diff with change counts, plus a summary of which lines were added, removed or edited. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "before": {
                        "type": "string",
                        "description": "the earlier text"
                      },
                      "after": {
                        "type": "string",
                        "description": "the later text"
                      },
                      "context": {
                        "type": "string",
                        "description": "optional, lines of context, default 3"
                      },
                      "name": {
                        "type": "string",
                        "description": "optional file name for the header"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "unified-diff-manifest",
        "summary": "Manifest for Diff two texts",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    },
    "/s/currency-format": {
      "post": {
        "operationId": "currency-format",
        "summary": "Format money amounts",
        "description": "Format an amount with the right symbol, grouping and decimals for a currency and a locale, parse an amount written with symbols back into a number, and list the currencies it knows. Free, no wallet needed.",
        "tags": [
          "deterministic"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "input": {
                    "type": "object",
                    "properties": {
                      "amount": {
                        "type": "string",
                        "description": "the number to format"
                      },
                      "currency": {
                        "type": "string",
                        "description": "optional, default USD"
                      },
                      "locale": {
                        "type": "string",
                        "description": "optional, default en-US"
                      },
                      "parse": {
                        "type": "string",
                        "description": "optional, an amount written with a symbol to read back"
                      },
                      "persianDigits": {
                        "type": "string",
                        "description": "optional, true to write the digits in Persian"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "required": [
                  "input"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Result with a receipt fingerprint."
          }
        }
      },
      "get": {
        "operationId": "currency-format-manifest",
        "summary": "Manifest for Format money amounts",
        "description": "Free description of the service, its inputs and its price.",
        "responses": {
          "200": {
            "description": "Service manifest"
          }
        }
      }
    }
  }
}