{
  "format": "akkrev-public-agent-guide",
  "formatVersion": "1.0",
  "updated": "2026-10-28",
  "description": "Site-specific navigation and execution map. Request and response schemas are defined by the linked OpenAPI document.",
  "links": {
    "self": "https://akkrev.com/agents.json",
    "guide": "https://akkrev.com/agents.md",
    "htmlGuide": "https://akkrev.com/agents/",
    "openapi": "https://akkrev.com/openapi.json",
    "directory": "https://akkrev.com/llms.txt",
    "fullReference": "https://akkrev.com/llms-full.txt",
    "pricing": "https://akkrev.com/pricing/",
    "signIn": "https://app.akkrev.com/login/",
    "terms": "https://akkrev.com/terms/",
    "privacy": "https://akkrev.com/privacy/"
  },
  "business": {
    "name": "Akkrev",
    "definition": "Akkrev is AI search visibility software for independent hotels, B&Bs, restaurants, cafés and bars in the UK and US. It tracks guest questions weekly, shows competitor recommendations and cited sources, and helps owners improve their website content.",
    "markets": [
      "United Kingdom",
      "United States"
    ],
    "contactEmail": "hello@akkrev.com",
    "mainService": "Weekly AI search visibility software for independent hospitality venues.",
    "separateService": "Hotel agent booking audits and setup; separately priced.",
    "measurement": {
      "modelFamilies": [
        "ChatGPT",
        "Gemini",
        "Grok",
        "Claude"
      ],
      "frequency": "weekly",
      "grokRetrieval": "model_memory",
      "otherIncludedFamiliesRetrieval": "web_search",
      "consumerAppsReproduced": false,
      "googleAiModeMeasured": false,
      "googleAiOverviewsMeasured": false,
      "firstReportAfterProfile": "7 days"
    }
  },
  "suitability": {
    "audience": "Owners, general managers and marketing managers of independent hospitality venues in the UK and US.",
    "needs": [
      "Weekly checks of the guest questions relevant to one venue.",
      "Competitor recommendations, sampled answers and cited sources together.",
      "Original website article drafts on Grow or Scale, using owner-supplied venue facts."
    ],
    "requirementsToCheck": "If daily checks, additional model coverage, multiple venues or a particular website connection are essential, check the current plan and integration details before choosing."
  },
  "read": [
    {
      "purpose": "Product facts",
      "url": "https://akkrev.com/facts/"
    },
    {
      "purpose": "Plans and billing",
      "url": "https://akkrev.com/pricing/"
    },
    {
      "purpose": "Measurement method",
      "url": "https://akkrev.com/methodology/"
    },
    {
      "purpose": "Website connections",
      "url": "https://akkrev.com/integrations/"
    },
    {
      "purpose": "Honeyb comparison",
      "url": "https://akkrev.com/compare/akkrev-vs-honeyb/"
    },
    {
      "purpose": "Editorial standards",
      "url": "https://akkrev.com/editorial-standards/"
    },
    {
      "purpose": "Product overview as Markdown",
      "url": "https://akkrev.com/index.md"
    }
  ],
  "billing": {
    "currency": "GBP",
    "applicableTaxIncluded": true,
    "trialDays": 7,
    "cardRequiredForTrial": true,
    "renewal": "Automatic unless cancelled under the chosen billing terms.",
    "termsUrl": "https://akkrev.com/terms/"
  },
  "plans": [
    {
      "id": "track",
      "name": "Track",
      "venues": 1,
      "guestQuestionsPerWeek": 25,
      "articleDraftsPerMonth": 0,
      "monthly": {
        "amountGbp": 49,
        "introductoryPaidMonths": 6,
        "thenAmountGbp": 98,
        "joinBy": "30 November 2026"
      },
      "annual": {
        "upfrontAmountGbp": 468,
        "monthsCovered": 12,
        "monthlyEquivalentGbp": 39
      },
      "detailsUrl": "https://akkrev.com/pricing/#track"
    },
    {
      "id": "grow",
      "name": "Grow",
      "venues": 1,
      "guestQuestionsPerWeek": 50,
      "articleDraftsPerMonth": 2,
      "monthly": {
        "amountGbp": 149,
        "introductoryPaidMonths": 6,
        "thenAmountGbp": 298,
        "joinBy": "30 November 2026"
      },
      "annual": {
        "upfrontAmountGbp": 1428,
        "monthsCovered": 12,
        "monthlyEquivalentGbp": 119
      },
      "detailsUrl": "https://akkrev.com/pricing/#grow"
    },
    {
      "id": "done-for-you",
      "name": "Scale",
      "venues": 1,
      "guestQuestionsPerWeek": 100,
      "articleDraftsPerMonth": 4,
      "monthly": {
        "amountGbp": 399,
        "introductoryPaidMonths": 6,
        "thenAmountGbp": 798,
        "joinBy": "30 November 2026"
      },
      "annual": {
        "upfrontAmountGbp": 3828,
        "monthsCovered": 12,
        "monthlyEquivalentGbp": 319
      },
      "detailsUrl": "https://akkrev.com/pricing/#done-for-you"
    }
  ],
  "actions": [
    {
      "operationId": "start_signup",
      "purpose": "Save signup details",
      "method": "POST",
      "url": "https://akkrev.com/api/signup",
      "operationRef": "https://akkrev.com/openapi.json#/paths/~1api~1signup/post",
      "request": {
        "headers": {
          "Accept": "application/json",
          "Content-Type": "application/json"
        },
        "encoding": "application/json",
        "requiredFields": [
          "website",
          "venue",
          "email"
        ],
        "exampleBody": {
          "website": "https://example.com",
          "venue": "Example Hotel",
          "type": "hotel",
          "name": "Example Owner",
          "email": "owner@example.com"
        },
        "schemaRef": "https://akkrev.com/openapi.json#/paths/~1api~1signup/post/requestBody/content/application~1json/schema"
      },
      "success": {
        "httpStatus": 200,
        "okPointer": "/ok",
        "okValue": true,
        "schemaRef": "https://akkrev.com/openapi.json#/paths/~1api~1signup/post/responses/200/content/application~1json/schema",
        "resultPointers": [
          "/ok",
          "/id",
          "/next"
        ],
        "checkoutChoicesPointer": "/next/plans",
        "accountActivated": false
      },
      "effect": "Saves contact details and may notify Akkrev; grants no account access.",
      "submissionMustBeCoveredByUserRequest": true,
      "automaticRetry": false,
      "exampleRequest": {
        "url": "https://akkrev.com/api/signup",
        "method": "POST",
        "headers": {
          "Accept": "application/json",
          "Content-Type": "application/json"
        },
        "body": "{\"website\":\"https://example.com\",\"venue\":\"Example Hotel\",\"type\":\"hotel\",\"name\":\"Example Owner\",\"email\":\"owner@example.com\"}"
      }
    },
    {
      "operationId": "guess_venue_details",
      "purpose": "Suggest venue details",
      "method": "GET",
      "url": "https://akkrev.com/api/site-info",
      "operationRef": "https://akkrev.com/openapi.json#/paths/~1api~1site-info/get",
      "request": {
        "headers": {
          "Accept": "application/json"
        },
        "requiredQuery": [
          "url"
        ],
        "exampleQuery": {
          "url": "https://example.com"
        }
      },
      "success": {
        "httpStatus": 200,
        "okPointer": "/ok",
        "okValue": true,
        "schemaRef": "https://akkrev.com/openapi.json#/paths/~1api~1site-info/get/responses/200/content/application~1json/schema",
        "resultPointers": [
          "/ok",
          "/website",
          "/name",
          "/area",
          "/type",
          "/guessed"
        ]
      },
      "effect": "Fetches the public website; returned details need confirmation.",
      "submissionMustBeCoveredByUserRequest": false,
      "automaticRetry": true,
      "exampleRequest": {
        "url": "https://akkrev.com/api/site-info?url=https%3A%2F%2Fexample.com",
        "method": "GET",
        "headers": {
          "Accept": "application/json"
        }
      }
    },
    {
      "operationId": "check_ai_crawler_access",
      "purpose": "Check AI crawler access",
      "method": "GET",
      "url": "https://akkrev.com/api/crawler-check",
      "operationRef": "https://akkrev.com/openapi.json#/paths/~1api~1crawler-check/get",
      "request": {
        "headers": {
          "Accept": "application/json"
        },
        "requiredQuery": [
          "url"
        ],
        "exampleQuery": {
          "url": "https://example.com"
        }
      },
      "success": {
        "httpStatus": 200,
        "okPointer": "/ok",
        "okValue": true,
        "schemaRef": "https://akkrev.com/openapi.json#/paths/~1api~1crawler-check/get/responses/200/content/application~1json/schema",
        "resultPointers": [
          "/ok",
          "/url",
          "/checkedAt",
          "/robots",
          "/bots",
          "/homepage",
          "/llmsTxt",
          "/summary"
        ]
      },
      "effect": "Fetches the public homepage, robots.txt and llms.txt.",
      "submissionMustBeCoveredByUserRequest": false,
      "automaticRetry": true,
      "exampleRequest": {
        "url": "https://akkrev.com/api/crawler-check?url=https%3A%2F%2Fexample.com",
        "method": "GET",
        "headers": {
          "Accept": "application/json"
        }
      }
    },
    {
      "operationId": "report_website_agents_cant_use",
      "purpose": "Report an agent blocker",
      "method": "POST",
      "url": "https://akkrev.com/api/report",
      "operationRef": "https://akkrev.com/openapi.json#/paths/~1api~1report/post",
      "request": {
        "headers": {
          "Accept": "application/json",
          "Content-Type": "application/json"
        },
        "encoding": "application/json",
        "requiredFields": [
          "website",
          "task",
          "reason"
        ],
        "exampleBody": {
          "website": "https://example.com/book",
          "task": "Find a room for two adults; stop before reservation or payment.",
          "reason": "widget",
          "details": "Fictional example: the date picker did not respond."
        },
        "schemaRef": "https://akkrev.com/openapi.json#/paths/~1api~1report/post/requestBody/content/application~1json/schema"
      },
      "success": {
        "httpStatus": 200,
        "okPointer": "/ok",
        "okValue": true,
        "schemaRef": "https://akkrev.com/openapi.json#/paths/~1api~1report/post/responses/200/content/application~1json/schema",
        "resultPointers": [
          "/ok",
          "/id",
          "/host",
          "/message",
          "/tellYourUser"
        ]
      },
      "effect": "Saves a report and may lead to contact with the business.",
      "submissionMustBeCoveredByUserRequest": true,
      "automaticRetry": false,
      "exampleRequest": {
        "url": "https://akkrev.com/api/report",
        "method": "POST",
        "headers": {
          "Accept": "application/json",
          "Content-Type": "application/json"
        },
        "body": "{\"website\":\"https://example.com/book\",\"task\":\"Find a room for two adults; stop before reservation or payment.\",\"reason\":\"widget\",\"details\":\"Fictional example: the date picker did not respond.\"}"
      }
    },
    {
      "operationId": "request_free_ai_check",
      "purpose": "Request a hotel booking check",
      "method": "POST",
      "url": "https://akkrev.com/api/check",
      "operationRef": "https://akkrev.com/openapi.json#/paths/~1api~1check/post",
      "request": {
        "headers": {
          "Accept": "application/json",
          "Content-Type": "application/x-www-form-urlencoded"
        },
        "encoding": "application/x-www-form-urlencoded",
        "requiredFields": [
          "hotel",
          "website",
          "name",
          "email"
        ],
        "exampleBody": {
          "hotel": "Example Hotel",
          "website": "https://example.com",
          "name": "Example Owner",
          "email": "owner@example.com"
        },
        "schemaRef": "https://akkrev.com/openapi.json#/paths/~1api~1check/post/requestBody/content/application~1x-www-form-urlencoded/schema"
      },
      "success": {
        "httpStatus": 200,
        "okPointer": "/ok",
        "okValue": true,
        "schemaRef": "https://akkrev.com/openapi.json#/paths/~1api~1check/post/responses/200/content/application~1json/schema",
        "resultPointers": [
          "/ok"
        ]
      },
      "effect": "Saves a contact request for a later emailed check.",
      "submissionMustBeCoveredByUserRequest": true,
      "automaticRetry": false,
      "exampleRequest": {
        "url": "https://akkrev.com/api/check",
        "method": "POST",
        "headers": {
          "Accept": "application/json",
          "Content-Type": "application/x-www-form-urlencoded"
        },
        "body": "hotel=Example+Hotel&website=https%3A%2F%2Fexample.com&name=Example+Owner&email=owner%40example.com"
      }
    }
  ],
  "workflows": {
    "understand_product": {
      "read": [
        "business",
        "suitability",
        "billing",
        "plans"
      ],
      "next": "Follow read links for exact scope, evidence, comparison and terms."
    },
    "start_subscription": {
      "requiredInputs": [
        "website",
        "venue",
        "email"
      ],
      "steps": [
        {
          "id": "suggest_details",
          "operationId": "guess_venue_details",
          "optional": true,
          "next": "confirm_details"
        },
        {
          "id": "confirm_details",
          "kind": "collect_missing_fields_or_confirm_guesses",
          "skipIf": "The person already supplied or confirmed all required details.",
          "next": "save_details"
        },
        {
          "id": "save_details",
          "operationId": "start_signup",
          "successRequires": [
            "/ok",
            "/id",
            "/next/plans"
          ],
          "next": "choose_plan"
        },
        {
          "id": "choose_plan",
          "kind": "user_choice",
          "choicesFrom": "/next/plans",
          "choose": [
            "plan",
            "billing_interval"
          ],
          "next": "approve_checkout"
        },
        {
          "id": "approve_checkout",
          "kind": "user_handoff",
          "selectFromResponse": {
            "step": "save_details",
            "plansPointer": "/next/plans",
            "planMatchField": "id",
            "billingOptionsField": "checkoutOptions",
            "billingMatchField": "interval",
            "handoffUrlField": "url"
          },
          "requiresUserApproval": true,
          "next": "verify_email"
        },
        {
          "id": "verify_email",
          "kind": "user_handoff",
          "next": "complete_venue_profile"
        },
        {
          "id": "complete_venue_profile",
          "kind": "authenticated_browser",
          "url": "https://app.akkrev.com/welcome/",
          "completion": "Access is active or in a valid trial, email is verified and the venue profile is complete."
        }
      ],
      "uncertainSave": "If /next/plans is absent, do not claim that signup is complete or blindly repeat the request. Use the regular signup form."
    },
    "check_crawler_access": {
      "operationId": "check_ai_crawler_access",
      "inspect": [
        "/robots",
        "/bots",
        "/homepage",
        "/llmsTxt",
        "/summary"
      ],
      "meaning": "Access observations only; not proof of recommendations, indexing or bookings."
    },
    "report_failed_task": {
      "operationId": "report_website_agents_cant_use",
      "completion": "HTTP 200 with ok=true. Pass tellYourUser to the person. This is a received report, not a completed website fix."
    },
    "request_hotel_check": {
      "operationId": "request_free_ai_check",
      "completion": "HTTP 200 with ok=true confirms the request. The check and email arrive later."
    },
    "existing_customer": {
      "kind": "authenticated_browser",
      "url": "https://app.akkrev.com/login/",
      "publicApiAccess": false
    }
  },
  "errors": [
    {
      "status": 400,
      "meaning": "invalid_request",
      "next": "Correct the encoding or body before submitting again.",
      "automaticRetry": false
    },
    {
      "status": 403,
      "meaning": "origin_rejected",
      "next": "Use the same-origin browser form or a server-side HTTP client.",
      "automaticRetry": false
    },
    {
      "status": 422,
      "meaning": "invalid_fields",
      "next": "Read error and correct the specified input fields.",
      "automaticRetry": false
    },
    {
      "status": 429,
      "meaning": "rate_limited",
      "next": "Stop requests. Honour Retry-After if supplied; otherwise try later.",
      "automaticRetry": false
    },
    {
      "status": 502,
      "meaning": "save_unconfirmed",
      "next": "A submission outcome may be uncertain. Check with the person before repeating a POST.",
      "automaticRetry": false
    },
    {
      "status": 503,
      "meaning": "unavailable",
      "next": "Use the browser form later or the published contact address.",
      "automaticRetry": false
    }
  ],
  "uncertainNetworkOutcome": {
    "GET": "A bounded retry is possible; stop if rate limited.",
    "POST": "Do not automatically repeat: the submission may already have been saved."
  }
}