{"id":351337,"date":"2026-08-22T09:54:48","date_gmt":"2026-08-22T09:54:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/tetapi\/"},"modified":"2026-08-22T14:32:09","modified_gmt":"2026-08-22T14:32:09","slug":"tetapi","status":"publish","type":"plugin","link":"https:\/\/br.wordpress.org\/plugins\/tetapi\/","author":23544435,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.1","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"TETA+PI","header_author":"TETA+PI","header_description":"Connect this site to a TETA+PI verified entity, prove domain ownership, and display a trust badge.","assets_banners_color":"5b48ba","last_updated":"2026-08-22 14:32:09","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/tetapi.dev","header_author_uri":"https:\/\/profiles.wordpress.org\/tetapi\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":53,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"tetapi","date":"2026-08-22 09:54:16"},"1.0.1":{"tag":"1.0.1","author":"tetapi","date":"2026-08-22 11:18:08"},"1.1.0":{"tag":"1.1.0","author":"tetapi","date":"2026-08-22 14:32:09"}},"upgrade_notice":{"1.1.0":"<p>Adds agent-readable JSON-LD + \/.well-known\/agent.json, agent-card.json,\nand \/llms.txt \u2014 real structured data for AI agents, not just a visual\nbadge. No action needed if you&#039;re already connected.<\/p>","1.0.1":"<p>Fixes domain verification (via well-known file) failing on default\npermalink settings. Update if &quot;Check now&quot; kept saying not verified.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3660329,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3660329,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3660329,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","1.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3660760,"resolution":"1","location":"plugin","width":1400,"height":700},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3660760,"resolution":"4","location":"plugin","width":1400,"height":908},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3660760,"resolution":"2","location":"plugin","width":1400,"height":700},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3660760,"resolution":"3","location":"plugin","width":1400,"height":428}},"screenshots":{"1":"Settings &gt; TETA+PI \u2014 connect your entity with a personal API key.","2":"Domain ownership verification status and controls.","3":"The TETA+PI trust badge, rendered via the <code>[tetapi_badge]<\/code> shortcode on a page.","4":"The \"TETA+PI Badge\" widget added to a sidebar."}},"plugin_section":[],"plugin_tags":[246305,2305,244604,42414,712],"plugin_category":[54],"plugin_contributors":[276933],"plugin_business_model":[],"class_list":["post-351337","plugin","type-plugin","status-publish","hentry","plugin_tags-ai-agents","plugin_tags-badge","plugin_tags-llms-txt","plugin_tags-trust","plugin_tags-verification","plugin_category-security-and-spam-protection","plugin_contributors-tetapi","plugin_committers-tetapi"],"banners":{"banner":"https:\/\/ps.w.org\/tetapi\/assets\/banner-772x250.png?rev=3660329","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/tetapi\/assets\/icon-128x128.png?rev=3660329","icon_2x":"https:\/\/ps.w.org\/tetapi\/assets\/icon-256x256.png?rev=3660329","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/tetapi\/trunk\/screenshot-1.png?rev=3660760","caption":"Settings &gt; TETA+PI \u2014 connect your entity with a personal API key."},{"src":"https:\/\/ps.w.org\/tetapi\/trunk\/screenshot-2.png?rev=3660760","caption":"Domain ownership verification status and controls."},{"src":"https:\/\/ps.w.org\/tetapi\/trunk\/screenshot-3.png?rev=3660760","caption":"The TETA+PI trust badge, rendered via the <code>[tetapi_badge]<\/code> shortcode on a page."},{"src":"https:\/\/ps.w.org\/tetapi\/trunk\/screenshot-4.png?rev=3660760","caption":"The \"TETA+PI Badge\" widget added to a sidebar."}],"raw_content":"<!--section=description-->\n<p>TETA+PI is trust infrastructure for digital entities \u2014 verified people,\ncompanies, APIs, AI models, MCP servers and agents, discoverable by AI agents.<\/p>\n\n<p>This plugin lets a site owner:<\/p>\n\n<ul>\n<li>Connect the site to their TETA+PI entity with a personal API key.<\/li>\n<li>Prove domain ownership (DNS TXT record or a well-known file, whichever is\neasier) directly from the WordPress admin.<\/li>\n<li>Display a verified-entity badge anywhere via the <code>[tetapi_badge]<\/code> shortcode\nor the \"TETA+PI Badge\" widget.<\/li>\n<li>Make the site agent-readable: once connected, the plugin adds a\nmachine-readable JSON-LD block to every page's <code>&lt;head&gt;<\/code>, and serves\n  \/.well-known\/agent.json, <code>\/.well-known\/agent-card.json<\/code> and <code>\/llms.txt<\/code>\nfrom your own domain \u2014 so AI agents and crawlers (including ones that\ndon't execute JavaScript) can read your verified-entity data directly,\nnot just see a visual badge.<\/li>\n<\/ul>\n\n<p>This release is 100% free \u2014 every feature above is fully functional with no\npayment required. Two premium modules are planned for later: <strong>Module #1\n($25)<\/strong> \u2014 additional badge styles, automatic placement, multi-entity support,\nWooCommerce integration \u2014 and <strong>Module #2 ($52)<\/strong>, a further tier coming\nafter that. Neither is for sale yet; the settings page shows what's planned\nand has a field to redeem a free code if TetaPi gives you one (e.g. as a\nthank-you for a social-media shoutout).<\/p>\n\n<p>Learn more at <a href=\"https:\/\/tetapi.dev\">tetapi.dev<\/a>.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to <code>api.tetapi.dev<\/code>, the TETA+PI API. It is operated by\nTetaPi GmbH, the same company that develops this plugin, and is required for\nthe plugin's core functionality: connecting your site to your TETA+PI\nentity, proving domain ownership, and displaying your trust badge.<\/p>\n\n<p>What is sent, and when:<\/p>\n\n<ul>\n<li>When you save your Personal API Key under Settings &gt; TETA+PI, that key is\nsent to <code>GET \/businesses<\/code> to list the entities it can access. The key is\nstored encrypted at rest (using your site's own WordPress salts), not in\nplain text.<\/li>\n<li>When you click \"Start verification\" or \"Check now\", your site's domain\n(auto-detected from your site URL) and your chosen entity ID are sent to\n  POST \/businesses\/{id}\/verify\/domain\/start and\n  POST \/businesses\/{id}\/verify\/domain\/check respectively, to prove you\ncontrol the domain.<\/li>\n<li>Whenever the <code>[tetapi_badge]<\/code> shortcode or the \"TETA+PI Badge\" widget is\ndisplayed on any page, your connected entity's slug is sent to the public,\nunauthenticated <code>GET \/businesses\/by-slug\/{slug}\/public<\/code> endpoint to fetch\nyour badge data. This response is cached for 15 minutes (WordPress\ntransient) to limit requests. No visitor-identifying data is sent \u2014 every\nvisitor triggers the same request for the same public entity data.<\/li>\n<li>On every page load (for the JSON-LD block) and whenever\n  \/.well-known\/agent.json, <code>\/.well-known\/agent-card.json<\/code> or <code>\/llms.txt<\/code>\nis requested on your site, your connected entity's ID is sent to the\npublic, unauthenticated <code>GET \/wk\/{entity_id}\/*<\/code> endpoints to fetch\nagent-readable data about your entity. Also cached for 15 minutes. No\nvisitor-identifying data is sent.<\/li>\n<\/ul>\n\n<p>No data is sent to any other third party.<\/p>\n\n<p>Terms of Service: https:\/\/tetapi.dev\/terms\nPrivacy Policy: https:\/\/tetapi.dev\/privacy<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Go to Settings &gt; TETA+PI.<\/li>\n<li>Paste your personal API key from your TETA+PI account and choose the\nentity to connect.<\/li>\n<li>Click \"Start verification\", then \"Check now\" once the DNS record or\nwell-known file is in place.<\/li>\n<li>Add <code>[tetapi_badge]<\/code> to any page or post, or add the \"TETA+PI Badge\"\nwidget to a sidebar.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20send%20any%20data%20to%20third%20parties%3F\"><h3>Does this plugin send any data to third parties?<\/h3><\/dt>\n<dd><p>The plugin only talks to <code>api.tetapi.dev<\/code>, the TETA+PI API, using the API key\nyou provide. No data is sent anywhere else. See \"External services\" below\nfor exactly what is sent and when.<\/p><\/dd>\n<dt id=\"do%20i%20need%20a%20teta%2Bpi%20account%3F\"><h3>Do I need a TETA+PI account?<\/h3><\/dt>\n<dd><p>Yes \u2014 create a free entity at <a href=\"https:\/\/app.tetapi.dev\">app.tetapi.dev<\/a> first,\nthen generate a personal API key from your account settings.<\/p><\/dd>\n<dt id=\"is%20my%20api%20key%20stored%20in%20plain%20text%3F\"><h3>Is my API key stored in plain text?<\/h3><\/dt>\n<dd><p>No, it is encrypted at rest using your site's own WordPress salts.<\/p><\/dd>\n<dt id=\"do%20i%20have%20to%20pay%20for%20anything%3F\"><h3>Do I have to pay for anything?<\/h3><\/dt>\n<dd><p>No. Every feature in this release is free. Two premium modules are planned\nfor later (Module #1 \/ Module #2) but neither is for sale yet.<\/p><\/dd>\n<dt id=\"how%20do%20i%20unlock%20premium%20early%3F\"><h3>How do I unlock Premium early?<\/h3><\/dt>\n<dd><p>Premium isn't for sale yet. TetaPi occasionally gives out free redeemable\ncodes to early users, e.g. as a thank-you for a social-media shoutout. If you\nhave one, enter it under Settings &gt; TETA+PI &gt; Premium to unlock it on your\nsite.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20help%20with%20ai%2Fagent%20discoverability%2C%20not%20just%20a%20visual%20badge%3F\"><h3>Does this plugin help with AI\/agent discoverability, not just a visual badge?<\/h3><\/dt>\n<dd><p>Yes. Once your entity is connected, the plugin adds a <code>schema.org<\/code> JSON-LD\nblock to every page's <code>&lt;head&gt;<\/code>, and serves <code>\/.well-known\/agent.json<\/code>,\n    \/.well-known\/agent-card.json and <code>\/llms.txt<\/code> on your own domain \u2014 real\nstructured data an AI agent can read directly, without needing to parse the\nvisible badge text or execute any JavaScript. Before an entity is connected,\nnone of this is served (no default\/placeholder data \u2014 those URLs 404).<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: agent-readable output. A <code>schema.org<\/code> JSON-LD block is now added to\nevery page's <code>&lt;head&gt;<\/code> once your entity is connected, and the plugin serves\n  \/.well-known\/agent.json, <code>\/.well-known\/agent-card.json<\/code> and <code>\/llms.txt<\/code>\non your own domain, proxied from TETA+PI's agent-readable API and cached\nfor 15 minutes. Nothing is served for a site that hasn't connected an\nentity yet.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fix: domain ownership verification could fail even with a correct\nwell-known file, because WordPress redirects the verification URL to\nadd a trailing slash and the verifier does not follow redirects\n(by design, to prevent SSRF). The plugin no longer lets WordPress\nredirect that one URL.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: settings\/connect page, domain ownership verification,\nbadge shortcode + widget, Premium module teasers + free promo-code redeem.<\/li>\n<\/ul>","raw_excerpt":"Connect your WordPress site to a TETA+PI verified entity, prove domain ownership, and make your site readable by AI agents \u2014 not just human visitors.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/351337","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=351337"}],"author":[{"embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/tetapi"}],"wp:attachment":[{"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=351337"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=351337"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=351337"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=351337"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=351337"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=351337"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}