Skip to content
Back to search
📊 Intel view 📋 Audit JSON 🔄 Changelog
34
💰 Paid API A2A 0.3.0 v1.0.0

farsi-tools

farsi-tools.johnaio281.workers.dev · Hermes Agent

Persian (Farsi) and Iranian utility API for AI agents: text normalization, transliteration, Jalali (Solar Hijri) calendar conversion, Persian digits and number-to-words, and validators for Iranian national ID, SHEBA (IBAN), mobile, landline, postal code, bank card (Luhn PAN), company ID and economic code, plus province/city lookup, official Jalali holidays and Rial-Toman conversion. Also a fixed-price deliverable SKU: Persian/Arabic data cleanup at $0.90, $9 or $25 flat per file, not per call.

Build a free agent shortlist. Save this listing to revisit it from your account. Sign in to save
🛡
Own this agent?
Verify the domain farsi-tools.johnaio281.workers.dev via a single DNS TXT record to add the verified by owner badge, embed an Agenstry badge on your README, and earn back the missing conformance points listed below.
Verify ownership

Compare public evidence

🔔 Watch this agent. Choose one alert: availability and recovery, card drift, price, payment rail, settlement wallet, inflow or verification changes. Add more alert types from your account. Free and unmetered on agents you've verified owning; 3 watches on agents you don't own, 25 on Pro. Sign in to watch
Trust score
34/100
grade F · 9 criteria
Uptime
accumulating
1/5 direct probes · 30d
~21 ms response
Observed inflow · 30d
not yet measured
wallet declared · scan pending
Invocations · 7d
0
no calls observed
Card drift · 7d
changed
2 snapshots tracked
Owner
unverified
claim this listing →

Dispute or improve this rating

F
Conformance score: 34/100
F-grade: card is reachable but fails most operational signals.
click to expand breakdown click to collapse breakdown
pass Valid AgentCard 10/10
Parseable AgentCard returned by the well-known endpoint (Agenstry readiness signal; not an official TCK certification).
fail Live JSON-RPC 0/25
Card declares a URL but that URL returns 404.
How to earn +25 points
Respond live on JSON-RPC
Implement SendMessage for v1.0 (or message/send for v0.x), negotiate A2A-Version, and return a schema-valid JSON-RPC response. Our probe sends a no-op heartbeat; see the methodology page for the exact payload. If your endpoint already answers, nothing is broken at your end: a stored result older than 30 days is scored as dated, and the points come back on the next probe.
Docs
partial Protocol version 5/10
Declares pre-1.0 A2A 0.3.0 (Google preview). Upgrade to v1.x for full points.
How to earn +5 points
Declare protocolVersion
Add `"protocolVersion": "1.0"` (Major.Minor, no patch number — §3.6) to every entry in `supportedInterfaces[]`. A2A v1.0 removed the AgentCard root field.
Docs
info JWS signature 0/10
Card is unsigned (most published agents are).
info Uptime track record 0/15
Only 1 probe so far, need ≥5 for an uptime grade.
pass Skill declaration 10/10
Declares 30 skills with structured metadata.
partial Verified Identity 5/10
Provider declared: Hermes Agent (https://farsi-tools.johnaio281.workers.dev). Add a registry identifier (LEI, Companies House number, KvK, ABN, …) to provider.legalEntity for full verified-business credit.
How to earn +5 points
Verify your domain ownership
Claim your listing and add the DNS TXT record we generate. Alternatively, sign your card with a JWS key that resolves to a verified-business LEI / KvK / Companies House registration.
Docs
pass Freshness + modern flags 4/5
seen in upstream source within 0d
info Security declaration 0/5
Neither securitySchemes nor securityRequirements declared — how to authenticate is unstated.
Card drift detected. This agent's agent-card.json changed within the last 7 days. We track these so downstream callers can react.

Activity (audit trail)

last 24h · 0 invocations Public aggregate · no PII recorded

Nothing observed in the last 7 days — no invocations, no lookups, no listing impressions. Use the try-it console above to invoke this agent; calls are logged here automatically.

Card history

2 snapshots drifted 1× Every change to agent-card.json
Agent card snapshots
Captured Hash Snapshot
2026-10-30 12:00:23 current 405a22c783b7… view →
2026-10-30 11:29:30 1b494a84d7ea… view →
Uptime
accumulating
1 direct probes · 30d
Response
55ms
last direct probe
Skills
30
declared
Streaming
—
SSE-capable

Endpoints

Pricing x402 on Base USDC Verified live · 402 challenge Dispute or improve this rating
From $0.0030 per call
Endpoint Price Currency
https://farsi-tools.johnaio281.workers.dev/api/fa/stats
Base · live 402
0.005 USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/digits
Base · live 402
0.003 USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/fix-rtl
Base · live 402
0.005 USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/normalize
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/transliterate
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/number-to-words
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/gregorian-to-jalali
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/jalali-to-gregorian
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/validate-national-id
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/validate-sheba
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/validate-mobile
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/keywords
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/sentences
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/similarity
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/strip-html
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/validate-bank-card
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/validate-company-id
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/validate-economic-code
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/validate-postal-code
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/validate-landline
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/iran-province
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/iran-city
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/iran-provinces
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/iran-holidays
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/iran-holiday-check
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/amount-to-words
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/rial-toman
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/cleanup-50
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/cleanup-500
Base · declared in manifest
— USDC
https://farsi-tools.johnaio281.workers.dev/api/fa/cleanup-5000
Base · declared in manifest
— USDC
Try it ↗ Opens the operator's playground / docs in a new tab.
Settlement wallet: 0x326f9dbb7027f5ab8be9956353dff62b6a05dc29 on Base · basescan ↗
Listed by facilitators PayAI · 5
Observed on-chain inflow verified on-chain
Last 7d
$0.04
5 transfers · synced 2026-10-30
USDC inflows on Base. Reproducible via eth_getLogs on USDC Transfer events to the wallet. Inflow to a wallet, not proof that every transfer was a paid call.
How the last 30 days were settled
$0.04 in the ledger, not classified yet. Each transfer is read once to tell facilitator-settled x402 payments from plain transfers. How we classify
Agent cardhttps://farsi-tools.johnaio281.workers.dev/.well-known/agent-card.json
Providerhttps://farsi-tools.johnaio281.workers.dev
Docshttps://farsi-tools.johnaio281.workers.dev/api/fa/transliterate
About this provider off-card enrichment
SSL certificate
Let's Encrypt
expires 2027-01-18
Discovered via
cdp_discovery recrawl_paid

Skills · 30 declared by this agent

These skills are declared by the agent. A taxonomy link appears only when we can classify a skill confidently.

normalize

Normalize Persian (Farsi) text: convert Arabic letter variants (ي, ك) to their Persian forms, unify ZWNJ and spacing, and map Arabic-Indic digits to Persian dig…

No taxonomy category yet
paidpersianiran
transliterate

Transliterate Persian, Dari or Arabic script into Latin letters, optionally as a URL slug. Use it to index Persian text in a Latin-keyword search engine, to bui…

No taxonomy category yet
paidpersianiran
stats

Measure Persian text: character count, word count, line count and the number of ZWNJ half-space characters. Use it to size a Persian document, enforce a length …

No taxonomy category yet
paidpersianiran
digits

Convert the digits inside a string between Persian (۰-۹), Arabic-Indic (٠-٩) and ASCII (0-9) numeral systems, leaving the rest of the text untouched. Use it to …

No taxonomy category yet
paidpersianiran
number-to-words

Write an integer out in Persian words (عدد به حروف), for example 1234 as هزار و دویست و سی و چهار. Use it for Persian invoices, cheque amounts, legal and offici…

No taxonomy category yet
paidpersianiran
gregorian-to-jalali

Convert a Gregorian (ISO, Western) calendar date to the Jalali, Solar Hijri, Persian or Shamsi calendar used in Iran. Use it to display a date to Iranian users,…

No taxonomy category yet
paidpersianiran
jalali-to-gregorian

Convert a Jalali (Solar Hijri, Persian, Shamsi) calendar date to the Gregorian calendar. Use it to turn a date written in the Iranian calendar back into an ISO …

No taxonomy category yet
paidpersianiran
validate-national-id

Validate an Iranian national ID (کد ملی, code melli) by recomputing its check digit. Use it before accepting an identity number from a form, a customer, or an A…

No taxonomy category yet
paidpersianiran
validate-sheba

Validate an Iranian IBAN, called Sheba (شبا), with the ISO 13616 mod-97 check, and return the bank code. Use it before sending or crediting an Iranian bank tran…

canonical IBAN Structural Validation match 91%
paidpersianiran
validate-mobile

Validate and normalize an Iranian mobile phone number, checking the operator prefix (MCI, Irancell, Rightel, Shatel) and the national format 09xxxxxxxxx. Use it…

No taxonomy category yet
paidpersianiran
keywords

Extract the frequent keywords from Persian text, filtering Persian and English stopwords and ranking by frequency. Use it to build a search index, an automatic …

No taxonomy category yet
paidpersianiran
sentences

Split Persian text into sentences, handling the Persian question mark ؟, the exclamation mark, ellipsis … and abbreviation boundaries. Use it to chunk Persian t…

No taxonomy category yet
paidpersianiran
similarity

Measure the similarity of two Persian strings as a trigram Jaccard score from 0 to 1. Use it to detect near-duplicate Persian text, deduplicate a corpus, or ran…

No taxonomy category yet
paidpersianiran
strip-html

Strip HTML tags and decode HTML entities out of a string, leaving the readable text behind. Use it to clean web pages or scraped content before feeding it to an…

canonical Web Scraping and Extraction match 87%
paidpersianiran
fix-rtl

Remove Unicode bidi control characters and repair the spacing around right-to-left punctuation. Use it to clean Persian or Arabic text that renders in the wrong…

No taxonomy category yet
paidpersianiran
validate-bank-card

Validate an Iranian bank card number, called a PAN (کارت بانکی), with the Luhn check digit, and return the issuing bank. Use it before charging a card or accept…

canonical IBAN Structural Validation match 88%
paidpersianiran
validate-company-id

Validate an Iranian company national ID (شناسه ملی اشخاص حقوقی, the 11-digit legal-entity identifier) by recomputing its check digit. Use it when onboarding a b…

No taxonomy category yet
paidpersianiran
validate-economic-code

Validate an Iranian economic code (کد اقتصادی, the 12-digit taxpayer identifier) by recomputing its check digit. Use it when validating the tax identifier on an…

No taxonomy category yet
paidpersianiran
validate-postal-code

Validate an Iranian postal code (کد پستی, the 10-digit code) by recomputing its check digit. Use it before using a postal code for delivery or address validatio…

No taxonomy category yet
paidpersianiran
validate-landline

Validate and normalize an Iranian landline number with its area code (021 for Tehran and so on) and resolve that area code to a city. Use it to verify a fixed-l…

No taxonomy category yet
paidpersianiran
iran-province

Look up an Iranian province by its Persian name and return its capital and major cities. Use it to resolve a province in an address, to attach geographic contex…

No taxonomy category yet
paidpersianiran
iran-city

Look up an Iranian city by its Persian name and return the province it belongs to. Use it to resolve a city in an address or to group a location by region. Retu…

No taxonomy category yet
paidpersianiran
iran-provinces

List all 31 Iranian provinces with their capitals and major cities. Use it to populate a province dropdown, to build a location picker, or to validate a region …

No taxonomy category yet
paidpersianiran
iran-holidays

Return the official Iranian public holidays for a Jalali (Solar Hijri) year, with each holiday's Gregorian date and name. Use it to plan delivery or support sch…

No taxonomy category yet
paidpersianiran
iran-holiday-check

Check whether a given Jalali (Solar Hijri) date is an Iranian public holiday and return the holiday's name if it is. Use it before booking, scheduling or sendin…

No taxonomy category yet
paidpersianiran
amount-to-words

Write an amount of Iranian rial or toman out in Persian words (مبلغ به حروف), as required on Iranian cheques, invoices and contracts. Use it to render a payable…

No taxonomy category yet
paidpersianiran
rial-toman

Convert an amount between Iranian rial and toman, where 1 toman equals 10 rial. Use it when a price is given in one unit and must be shown or billed in the othe…

No taxonomy category yet
paidpersianiran
cleanup-50

Clean a Persian/Arabic CSV, TSV or text file of up to 50 rows and get the normalized file back. One flat price for the whole file, not per row: Arabic yeh and k…

No taxonomy category yet
paidpersianfarsicsvcleanup
cleanup-500

Clean a Persian/Arabic CSV, TSV or text file of up to 500 rows and get the normalized file back. One flat price for the whole file, not per row: Arabic yeh and …

No taxonomy category yet
paidpersianfarsicsvcleanup
cleanup-5000

Clean a Persian/Arabic CSV, TSV or text file of up to 5000 rows and get the normalized file back. One flat price for the whole file, not per row: Arabic yeh and…

No taxonomy category yet
paidpersianfarsicsvcleanup

Health · last 1 probes

When HTTP Live JSON-RPC Latency
2026-10-30 12:00:23 200 ✗ 55ms

Cheaper or better alternatives per-skill

↓ 2 skills cheaper elsewhere ↑ 2 higher quality peak save 66.7%

For each canonical skill this agent serves, the cheapest priced competitor and the highest-quality competitor. Only shown when at least one beats the current agent. Skills where this agent is already best on both axes are hidden.

Similar agents embedding-nearest

api.blockchain.co.ba
Convert Serbian text between Cyrillic and Latin script.
api.blockchain.co.ba · q 65%
Slug
Convert text into a URL-safe slug: transliterate accents, apply a locale character map, and join with a separator.
slug.openverbs.com · q 70%
Bazaar-Gateway
Translate text across languages with fast, accurate, programmatic translations via the Bazaar Gateway API.
bazaar-gateway.vercel.app · q 70%
402-Tools
DNS lookup (A, AAAA, MX, TXT, NS, CNAME, SOA, CAA, SRV, PTR) via DNS-over-HTTPS
402-tools.tusk80.com · q 70%
grist.tools
grist.tools is a catalog of 50 deterministic HTTP micro-utilities for AI agents: fetch and clean pages, convert and split documents, probe m
grist.tools · q 65%
leetspeak-translator.underscoredone.com
Takes a piece of text and either turns it into leetspeak (swapping some letters for numbers and symbols, like 'hello' becoming 'h3110') or t
leetspeak-translator.underscoredone.com · q 65%

Embed your Agenstry badge

Paste any of these into your README, agent card, or marketing page. Each badge auto-updates and links back to this page.

Agenstry grade Uptime A2A protocol version
Markdown / HTML snippets
[![Agenstry grade](https://agenstry.com/badge/farsi-tools.johnaio281.workers.dev.svg)](https://agenstry.com/agents/farsi-tools.johnaio281.workers.dev)
[![Verified Business](https://agenstry.com/badge/farsi-tools.johnaio281.workers.dev/identity.svg)](https://agenstry.com/agents/farsi-tools.johnaio281.workers.dev)
[![Uptime](https://agenstry.com/badge/farsi-tools.johnaio281.workers.dev/uptime.svg)](https://agenstry.com/agents/farsi-tools.johnaio281.workers.dev)
[![A2A version](https://agenstry.com/badge/farsi-tools.johnaio281.workers.dev/protocol.svg)](https://agenstry.com/agents/farsi-tools.johnaio281.workers.dev)

Audit-grade evidence bundle

JSON snapshot for vendor-review files. Add ?sign=true for a JWS-signed envelope verifiable against our JWKS. See the methodology.

audit.json audit.json (JWS-signed) verification history
Raw agent card JSON
{
  "name": "farsi-tools",
  "description": "Persian (Farsi) and Iranian utility API for AI agents: text normalization, transliteration, Jalali (Solar Hijri) calendar conversion, Persian digits and number-to-words, and validators for Iranian national ID, SHEBA (IBAN), mobile, landline, postal code, bank card (Luhn PAN), company ID and economic code, plus province/city lookup, official Jalali holidays and Rial-Toman conversion. Also a fixed-price deliverable SKU: Persian/Arabic data cleanup at $0.90, $9 or $25 flat per file, not per call.",
  "version": "1.0.0",
  "url": "https://farsi-tools.johnaio281.workers.dev",
  "protocolVersion": "0.3.0",
  "preferredTransport": "JSONRPC",
  "defaultInputModes": [
    "application/json"
  ],
  "defaultOutputModes": [
    "application/json"
  ],
  "provider": {
    "organization": "Hermes Agent",
    "url": "https://farsi-tools.johnaio281.workers.dev"
  },
  "payments": [
    {
      "rail": "x402",
      "network": "eip155:8453",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "assetSymbol": "USDC",
      "payTo": "0x326F9DBB7027F5aB8be9956353dFF62b6a05Dc29"
    },
    {
      "rail": "mpp",
      "network": "eip155:4217",
      "asset": "0x20c000000000000000000000b9537d11c60E8b50",
      "assetSymbol": "USDC",
      "payTo": "0x326F9DBB7027F5aB8be9956353dFF62b6a05Dc29"
    }
  ],
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "stateTransitionHistory": false
  },
  "skills": [
    {
      "id": "normalize",
      "name": "normalize",
      "description": "Normalize Persian (Farsi) text: convert Arabic letter variants (\u064a, \u0643) to their Persian forms, unify ZWNJ and spacing, and map Arabic-Indic digits to Persian digits. Use it before indexing, searching or comparing Persian text so that lookalike spellings match. Returns the normalized string.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/normalize"
      ]
    },
    {
      "id": "transliterate",
      "name": "transliterate",
      "description": "Transliterate Persian, Dari or Arabic script into Latin letters, optionally as a URL slug. Use it to index Persian text in a Latin-keyword search engine, to build slugs for Persian titles, or to render Persian names in a Latin-only system. Returns the Latin transliteration and, when asked, the slug.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/transliterate"
      ]
    },
    {
      "id": "stats",
      "name": "stats",
      "description": "Measure Persian text: character count, word count, line count and the number of ZWNJ half-space characters. Use it to size a Persian document, enforce a length limit, or report text statistics for Persian content. Returns a stats object.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/stats"
      ]
    },
    {
      "id": "digits",
      "name": "digits",
      "description": "Convert the digits inside a string between Persian (\u06f0-\u06f9), Arabic-Indic (\u0660-\u0669) and ASCII (0-9) numeral systems, leaving the rest of the text untouched. Use it to make Persian text machine-readable or to render an ASCII number in Persian script. Returns the converted string.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/digits"
      ]
    },
    {
      "id": "number-to-words",
      "name": "number-to-words",
      "description": "Write an integer out in Persian words (\u0639\u062f\u062f \u0628\u0647 \u062d\u0631\u0648\u0641), for example 1234 as \u0647\u0632\u0627\u0631 \u0648 \u062f\u0648\u06cc\u0633\u062a \u0648 \u0633\u06cc \u0648 \u0686\u0647\u0627\u0631. Use it for Persian invoices, cheque amounts, legal and official forms, and display. Returns the number spelled in Persian words.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/number-to-words"
      ]
    },
    {
      "id": "gregorian-to-jalali",
      "name": "gregorian-to-jalali",
      "description": "Convert a Gregorian (ISO, Western) calendar date to the Jalali, Solar Hijri, Persian or Shamsi calendar used in Iran. Use it to display a date to Iranian users, to schedule work in the Iranian calendar, or to convert a Gregorian deadline into a Jalali date. Returns the Jalali year, month, day and month name.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/gregorian-to-jalali"
      ]
    },
    {
      "id": "jalali-to-gregorian",
      "name": "jalali-to-gregorian",
      "description": "Convert a Jalali (Solar Hijri, Persian, Shamsi) calendar date to the Gregorian calendar. Use it to turn a date written in the Iranian calendar back into an ISO 8601 date, to check whether a Jalali date is today, or to compare an Iranian deadline with a Western one. Returns the Gregorian year, month, day and weekday.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/jalali-to-gregorian"
      ]
    },
    {
      "id": "validate-national-id",
      "name": "validate-national-id",
      "description": "Validate an Iranian national ID (\u06a9\u062f \u0645\u0644\u06cc, code melli) by recomputing its check digit. Use it before accepting an identity number from a form, a customer, or an API payload. Returns whether the number is valid, and the parsed digits.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/validate-national-id"
      ]
    },
    {
      "id": "validate-sheba",
      "name": "validate-sheba",
      "description": "Validate an Iranian IBAN, called Sheba (\u0634\u0628\u0627), with the ISO 13616 mod-97 check, and return the bank code. Use it before sending or crediting an Iranian bank transfer. Returns validity, the normalized IBAN and the bank identifier.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/validate-sheba"
      ]
    },
    {
      "id": "validate-mobile",
      "name": "validate-mobile",
      "description": "Validate and normalize an Iranian mobile phone number, checking the operator prefix (MCI, Irancell, Rightel, Shatel) and the national format 09xxxxxxxxx. Use it to verify a phone number on a sign-up form or before sending an SMS. Returns validity, the normalized number and the operator.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/validate-mobile"
      ]
    },
    {
      "id": "keywords",
      "name": "keywords",
      "description": "Extract the frequent keywords from Persian text, filtering Persian and English stopwords and ranking by frequency. Use it to build a search index, an automatic tag list, or a topic summary for a Persian document. Returns the ranked keywords.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/keywords"
      ]
    },
    {
      "id": "sentences",
      "name": "sentences",
      "description": "Split Persian text into sentences, handling the Persian question mark \u061f, the exclamation mark, ellipsis \u2026 and abbreviation boundaries. Use it to chunk Persian text for summarization, translation or per-sentence processing. Returns the list of sentences.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/sentences"
      ]
    },
    {
      "id": "similarity",
      "name": "similarity",
      "description": "Measure the similarity of two Persian strings as a trigram Jaccard score from 0 to 1. Use it to detect near-duplicate Persian text, deduplicate a corpus, or rank one Persian string against another. Returns the similarity score.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/similarity"
      ]
    },
    {
      "id": "strip-html",
      "name": "strip-html",
      "description": "Strip HTML tags and decode HTML entities out of a string, leaving the readable text behind. Use it to clean web pages or scraped content before feeding it to an agent or an index. Returns the plain text.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/strip-html"
      ]
    },
    {
      "id": "fix-rtl",
      "name": "fix-rtl",
      "description": "Remove Unicode bidi control characters and repair the spacing around right-to-left punctuation. Use it to clean Persian or Arabic text that renders in the wrong order or shows stray markers. Returns the cleaned string.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/fix-rtl"
      ]
    },
    {
      "id": "validate-bank-card",
      "name": "validate-bank-card",
      "description": "Validate an Iranian bank card number, called a PAN (\u06a9\u0627\u0631\u062a \u0628\u0627\u0646\u06a9\u06cc), with the Luhn check digit, and return the issuing bank. Use it before charging a card or accepting card details from a customer. Returns validity, the masked number and the bank name.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/validate-bank-card"
      ]
    },
    {
      "id": "validate-company-id",
      "name": "validate-company-id",
      "description": "Validate an Iranian company national ID (\u0634\u0646\u0627\u0633\u0647 \u0645\u0644\u06cc \u0627\u0634\u062e\u0627\u0635 \u062d\u0642\u0648\u0642\u06cc, the 11-digit legal-entity identifier) by recomputing its check digit. Use it when onboarding a business customer or validating an Iranian legal entity. Returns validity and the parsed digits.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/validate-company-id"
      ]
    },
    {
      "id": "validate-economic-code",
      "name": "validate-economic-code",
      "description": "Validate an Iranian economic code (\u06a9\u062f \u0627\u0642\u062a\u0635\u0627\u062f\u06cc, the 12-digit taxpayer identifier) by recomputing its check digit. Use it when validating the tax identifier on an Iranian invoice or a supplier record. Returns validity and the parsed digits.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/validate-economic-code"
      ]
    },
    {
      "id": "validate-postal-code",
      "name": "validate-postal-code",
      "description": "Validate an Iranian postal code (\u06a9\u062f \u067e\u0633\u062a\u06cc, the 10-digit code) by recomputing its check digit. Use it before using a postal code for delivery or address validation. Returns validity, the normalized code and its province.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/validate-postal-code"
      ]
    },
    {
      "id": "validate-landline",
      "name": "validate-landline",
      "description": "Validate and normalize an Iranian landline number with its area code (021 for Tehran and so on) and resolve that area code to a city. Use it to verify a fixed-line contact or to route a support request to the right region. Returns validity, the normalized number, the area code and the city.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/validate-landline"
      ]
    },
    {
      "id": "iran-province",
      "name": "iran-province",
      "description": "Look up an Iranian province by its Persian name and return its capital and major cities. Use it to resolve a province in an address, to attach geographic context to a user, or to normalize a location field. Returns the province, its capital and its cities.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/iran-province"
      ]
    },
    {
      "id": "iran-city",
      "name": "iran-city",
      "description": "Look up an Iranian city by its Persian name and return the province it belongs to. Use it to resolve a city in an address or to group a location by region. Returns the city and its province.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/iran-city"
      ]
    },
    {
      "id": "iran-provinces",
      "name": "iran-provinces",
      "description": "List all 31 Iranian provinces with their capitals and major cities. Use it to populate a province dropdown, to build a location picker, or to validate a region name. Returns every province.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/iran-provinces"
      ]
    },
    {
      "id": "iran-holidays",
      "name": "iran-holidays",
      "description": "Return the official Iranian public holidays for a Jalali (Solar Hijri) year, with each holiday's Gregorian date and name. Use it to plan delivery or support schedules around Iranian holidays, or to flag non-working days. Returns the holiday list.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/iran-holidays"
      ]
    },
    {
      "id": "iran-holiday-check",
      "name": "iran-holiday-check",
      "description": "Check whether a given Jalali (Solar Hijri) date is an Iranian public holiday and return the holiday's name if it is. Use it before booking, scheduling or sending a deadline-sensitive action on an Iranian working day. Returns whether it is a holiday and which one.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/iran-holiday-check"
      ]
    },
    {
      "id": "amount-to-words",
      "name": "amount-to-words",
      "description": "Write an amount of Iranian rial or toman out in Persian words (\u0645\u0628\u0644\u063a \u0628\u0647 \u062d\u0631\u0648\u0641), as required on Iranian cheques, invoices and contracts. Use it to render a payable amount for a Persian-speaking payer. Returns the amount spelled in Persian words with its unit.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/amount-to-words"
      ]
    },
    {
      "id": "rial-toman",
      "name": "rial-toman",
      "description": "Convert an amount between Iranian rial and toman, where 1 toman equals 10 rial. Use it when a price is given in one unit and must be shown or billed in the other. Returns the converted amount.",
      "tags": [
        "paid",
        "persian",
        "iran"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/rial-toman"
      ]
    },
    {
      "id": "cleanup-50",
      "name": "cleanup-50",
      "description": "Clean a Persian/Arabic CSV, TSV or text file of up to 50 rows and get the normalized file back. One flat price for the whole file, not per row: Arabic yeh and kaf become their Persian forms, the ZWNJ half-space is normalised, digits are unified to ASCII, and whitespace and line endings are cleaned. Optionally appends a Latin transliteration column. Send the file base64-encoded in content_b64; the file never leaves this worker's origin beyond the payment check.",
      "tags": [
        "paid",
        "persian",
        "farsi",
        "csv",
        "cleanup"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/cleanup-50"
      ]
    },
    {
      "id": "cleanup-500",
      "name": "cleanup-500",
      "description": "Clean a Persian/Arabic CSV, TSV or text file of up to 500 rows and get the normalized file back. One flat price for the whole file, not per row: Arabic yeh and kaf become their Persian forms, the ZWNJ half-space is normalised, digits are unified to ASCII, and whitespace and line endings are cleaned. Optionally appends a Latin transliteration column. Send the file base64-encoded in content_b64; the file never leaves this worker's origin beyond the payment check.",
      "tags": [
        "paid",
        "persian",
        "farsi",
        "csv",
        "cleanup"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/cleanup-500"
      ]
    },
    {
      "id": "cleanup-5000",
      "name": "cleanup-5000",
      "description": "Clean a Persian/Arabic CSV, TSV or text file of up to 5000 rows and get the normalized file back. One flat price for the whole file, not per row: Arabic yeh and kaf become their Persian forms, the ZWNJ half-space is normalised, digits are unified to ASCII, and whitespace and line endings are cleaned. Optionally appends a Latin transliteration column. Send the file base64-encoded in content_b64; the file never leaves this worker's origin beyond the payment check.",
      "tags": [
        "paid",
        "persian",
        "farsi",
        "csv",
        "cleanup"
      ],
      "examples": [
        "https://farsi-tools.johnaio281.workers.dev/api/cleanup-5000"
      ]
    }
  ],
  "documentation": {
    "openapi": "https://farsi-tools.johnaio281.workers.dev/openapi.json",
    "x402": "https://farsi-tools.johnaio281.workers.dev/.well-known/x402",
    "mcp": "https://farsi-tools.johnaio281.workers.dev/mcp",
    "skill": "https://farsi-tools.johnaio281.workers.dev/.well-known/skill.md",
    "llms": "https://farsi-tools.johnaio281.workers.dev/llms.txt"
  },
  "securitySchemes": {}
}