SearchAtlas V2 vs V1 - Capability Deep Dive

Internal CF Access Gated Marc-Only

SearchAtlas V2 vs V1 - Capability Deep Dive, EGP Tool Migration Impact, and Cut-Over Plan

Document: SEARCHATLAS-V2-VS-V1-DEEP-DIVE_v1 Owner: Irma (GEO Score Leader, SA-V2 migration owner) with Vesta (PPMO-KC) and Hakeem (PanCom integrity) Reports to: Vadi (CMO) Date: 2026-06-24 Classification: Internal - CF Access gated - Marc-only Source key state: .env carries both SEARCHATLAS_API_V2_KEY (new, primary going forward) and SEARCHATLAS_API_V1_LEGACY_KEY (legacy, on borrowed time). The legacy variable SEARCHATLAS_API_KEY is still referenced by 6 EGP tools and must be migrated.


1. Executive Summary

Three decision drivers for the CDAIO 30-second read:

  1. V1 is being decommissioned and we have measurable code exposure. Six EGP tools reference the legacy SEARCHATLAS_API_KEY variable today; every one of them must either rotate to SEARCHATLAS_API_V2_KEY or be retired before SA's sunset date. The biggest blast radius is tools/searchatlas_dashboard_agents.py (Irma's primary playbook executor, 24 playbooks registered) and tools/searchatlas_rotate_credentials.py (credential lifecycle).
  2. V2 is a platform shift, not a version bump. Public probes against api.searchatlas.com show the Django-served Dashboard login at root, an unreachable /api/v2/ namespace without authenticated session, and no public OpenAPI surface. That pattern (login-gated docs plus dual-keyed transition) is consistent with SA promoting MCP-server + agent-style endpoints to first-class status and demoting the legacy management-only V1 REST surface. The V2 key is the access ticket to the new playbook, OTTO/HyperDrive, GBP, and knowledge-graph endpoints.
  3. Migration is low-risk if we sequence it. No tool today executes paid HyperDrive credits on autopilot (every credit-spending playbook in searchatlas_dashboard_agents.py has a Marc-approval gate). Cutting over the auth header and base path in a single PR per tool, behind a feature flag that prefers V2 and falls back to V1 during the parallel-run window, gets us to zero V1 dependency within one sprint without disrupting daily ops.

Recommendation: Adopt a six-phase migration (Discover, Wrap, Migrate, Verify, Cutover, Decommission) with hard gates at each phase. Target full V2 cutover by 2026-07-22 and full V1 key removal from .env by 2026-07-29, regardless of SA's announced sunset (which is [NEEDS SA DOCS]).


2. Side-by-Side Feature Matrix (V1 vs V2)

Cells marked [NEEDS SA DOCS] could not be confirmed because the SA documentation portal (docs.searchatlas.com, help.searchatlas.com/en/collections/api-mcp-server, dashboard.searchatlas.com/api/docs/) is behind login and public probes returned 404. Confirmation owed by Irma after authenticated dashboard sweep.
DimensionV1 (legacy)V2 (current)
Env variableSEARCHATLAS_API_KEY (today) / SEARCHATLAS_API_V1_LEGACY_KEY (new canonical)SEARCHATLAS_API_V2_KEY
Base URLhttps://api.searchatlas.com/api/v2/ (note: existing code paths used /api/v2 but with V1 key, which worked because SA accepted legacy keys at the V2 management path during overlap)https://api.searchatlas.com/api/v2/ (same base path, key class differs) [NEEDS SA DOCS] to confirm whether V2 also exposes new /api/v3/ or MCP path
Auth header shapeAuthorization: Api-Key <key> (used by searchatlas_dashboard_agents.py)Authorization: Api-Key <key> likely retained, Bearer and Token schemes also probed [NEEDS SA DOCS] - must be confirmed by hitting an authenticated endpoint with the V2 key
Endpoint catalogCustomer profile, auth, projects, playbooks (limited), GBP agent, link prospectingAdds OTTO autopilot, HyperDrive playbooks, MCP server resources, AI Overview tracking, AEO/GEO citability scores [NEEDS SA DOCS] - confirmed inferentially from playbook IDs already wired into searchatlas_dashboard_agents.py
Rate limitsLoose, undocumented; observed throttling around 60 req/min in EGP usage[NEEDS SA DOCS] - V2 likely tiered by plan; HyperDrive credits act as a soft rate limit on heavy playbooks
PaginationCursor-based on most list endpoints[NEEDS SA DOCS] - assume same until verified
WebhooksNone canonical[NEEDS SA DOCS] - V2 likely adds webhooks for playbook completion, OTTO actions, ranking changes; this is the single biggest reason to migrate
Response schemaFlat JSON, snake_case[NEEDS SA DOCS] - assume snake_case retained; verify any envelope changes ({data: ..., meta: ...})
MCP server supportNoneYes (V2 introduces MCP-server-style tool resources for agentic consumption) [NEEDS SA DOCS]
Credit accountingPer-call meterPer-call meter plus HyperDrive credit pool (15 credits per cloud-stack playbook observed in registry)
Pricing impactExisting plan[NEEDS SA DOCS] - confirm whether V2 features add line items
SDKsNone (raw requests)[NEEDS SA DOCS] - check for official Python SDK on V2
Sunset dateActive but decommissioning[NEEDS SA DOCS] - Marc-question for the queue

3. Capability Gains (What V2 Unlocks)

The following gains are inferred from the playbook IDs already registered in tools/searchatlas_dashboard_agents.py, the presence of the OTTO and HyperDrive agents in the registry, and the public posture of SA's product surface. Each item carries a confidence tag.

  1. MCP server resources for agentic consumption (HIGH confidence). SA help center surfaces an "API and MCP Server" collection with 40 articles. V2 is the API class that exposes tool-style resources our agent fleet (Irma, Octavio, Oliver) can register as first-class tools without scraping. This is the single most strategically important gain because it lets Irma drive playbooks from inside agent workflows rather than out-of-band cron jobs.
  2. OTTO autopilot endpoints (HIGH confidence). The playbook registry already references agent: "otto" and agent: "otto_ppc". OTTO is SA's autopilot for technical SEO, schema injection, internal linking, and on-page rewrites. V2 exposes the autopilot APIs directly; V1 required dashboard-driven kicks.
  3. HyperDrive cloud-stack playbooks (HIGH confidence). Deploy Single Cloud Stack Authority Order is registered with credits: 15 and a HARD-FAIL Marc-approval gate. HyperDrive playbooks live on V2 and are the highest-leverage authority-building tool in the SA suite.
  4. AI Overview and AEO citability scoring (MEDIUM confidence). V2 is the natural home for AI Overview tracking, ChatGPT/Perplexity citation monitoring, and AEO/GEO scores - exactly the metrics Irma needs to drive enroutegrowthplatform.io from 39/100 to 80+. [NEEDS SA DOCS] to confirm endpoint paths.
  5. GBP automation depth (HIGH confidence). Playbooks Improve Local Map Rankings and Calls, Weekly GBP Posting Engine, and Automated GBP Review Response & Amplification are V2-class playbooks already wired with IDs. V1 exposed GBP read; V2 adds write actions.
  6. Webhook delivery (MEDIUM confidence). V2 platform shifts typically add webhook delivery for completion events. [NEEDS SA DOCS] to confirm. If present, we should retire the polling loops in searchatlas_dashboard_agents.py and subscribe instead.
  7. Knowledge graph and entity reconciliation (MEDIUM confidence). SA has been building entity-graph features in 2026; V2 is the surface. [NEEDS SA DOCS].
  8. Tighter credit accounting and quota visibility (MEDIUM confidence). V2 likely surfaces per-key credit usage in real time. Today tools/egp_credit_usage_tracker.py has SA listed but with no working usage endpoint. V2 should give us that endpoint.

4. Capability Losses (What V1 Has That V2 May Not)

  1. Free-form management calls under the legacy key. Today the V1 legacy key works against /api/v2/customer/profile/ and similar management endpoints. V2 may scope the new key more tightly (per-project, per-scope). Workaround: keep the legacy key alive for management until SA confirms V2 covers the same surface.
  2. Backwards-compatible response envelopes. If V2 introduces a {data: ..., meta: ...} envelope, every existing response parser in our tools breaks. Workaround: a thin response normalizer in tools/lib/_egp_searchatlas_v2_client.py (to be built).
  3. Looser rate limits. V1 was effectively unlimited for our scale. V2 may meter aggressively at the HyperDrive tier. Workaround: per-tool budget guards.
  4. Implicit auth via session cookie. Some V1-era flows piggybacked on the dashboard session (SEARCHATLAS_TOKEN_REFRESH). [NEEDS SA DOCS] whether V2 still supports refresh-token flows or moves to pure API key.

5. EGP Tool Migration Impact List

Six tools touch SA today. Migration impact per tool:

#ToolWhat it doesV2 migration deltaRisk tier
1tools/searchatlas_dashboard_agents.pyExecutes 24 SA playbooks across Local, Authority, OTTO, GBPSwap SEARCHATLAS_API_KEY to SEARCHATLAS_API_V2_KEY. Verify each playbook ID still resolves on V2. Add webhook subscriber if V2 supports.HIGH (primary execution surface)
2tools/searchatlas_rotate_credentials.pyCredential rotation lifecycleRewrite auth endpoints to V2 paths. Confirm /auth/api-key/regenerate/ survives. Add rotation for SEARCHATLAS_API_V2_KEY itself.HIGH (security-critical)
3tools/egp_credit_usage_tracker.pyTracks credit usage across vendorsPoint SA entry to V2 usage endpoint once known. [NEEDS SA DOCS] for the path.MEDIUM
4tools/egp_tech_stack_detector.pyDetects SA/OTTO presence on competitor sites (string match only, no API call)No API change needed; documentation comment refresh only.LOW
5tools/egp_ecosystem_topography_updater.pyRegistry of vendor env varsAdd SEARCHATLAS_API_V2_KEY to the registry alongside legacy.LOW
6tools/egp_live_status_registry.pyLive status dashboard for keysUpdate SA entry from KEY_PRESENT_NO_CLIENT to V2_CLIENT_LIVE once client lib lands.LOW

Two additional non-API SA-adjacent tools (tools/competitor_monthly_crawl.py, tools/egp_research_paper_scanner.py, tools/searchatlas_paper_archiver.py) only scrape searchatlas.com public pages and are unaffected by API version.

Net tool changes: 3 HIGH/MEDIUM-risk edits, 3 LOW-risk edits, plus one new shared client library tools/lib/_egp_searchatlas_v2_client.py. Total estimated build: 12 to 16 hours.


6. Decommission Timeline and Parallel-Run Window

[NEEDS SA DOCS] for SA's announced sunset date. Until SA confirms, EGP plans for the conservative window:

If SA announces a sunset earlier than 2026-07-29, all dates compress proportionally with the Cutover phase taking priority.


7. Migration Plan (Phased)

Phase 1: Discover (this week). Owner: Irma. Authenticated dashboard sweep to capture V2 OpenAPI, confirm auth header, enumerate webhooks, capture rate limits, fill every [NEEDS SA DOCS] flag in this document. Output: revised v2 of this deep-dive.

Phase 2: Wrap. Owner: Vesta. Build tools/lib/_egp_searchatlas_v2_client.py with: dual-key support (V2 preferred, V1 fallback when SA_FORCE_V1=1), response envelope normalizer, retry-with-backoff, credit accounting hook, webhook subscriber stub. Build tools/_egp_searchatlas_v2_client_lint.py HARD-WARN on raw requests to api.searchatlas.com outside the client.

Phase 3: Migrate. Owner: Vesta plus Hakeem for review. Per tool in priority order: rotate (1) searchatlas_dashboard_agents.py, (2) searchatlas_rotate_credentials.py, (3) egp_credit_usage_tracker.py, (4) the three LOW-risk tools. Each rotation lands in its own PR with a passing dry-run.

Phase 4: Verify. Owner: Hakeem. Run the full playbook smoke suite under V2 against the EGP project (ID 27387). Confirm: GBP read, GBP write (dry), Authority backlink read, OTTO read. Block on any non-200 that returned 200 under V1.

Phase 5: Cutover. Owner: Irma. Flip SA_PREFER_V2=1 to global default in .env. Monitor for 24 hours. Roll back if any P1 surface lights up.

Phase 6: Decommission. Owner: Vesta. Remove V1 references from active code paths. Update egp_live_status_registry.py to mark SA as V2-only. Notify CDAIO of completion.


8. Risk Register

RiskLikelihoodImpactMitigation
V2 introduces breaking response envelopeMEDIUMHIGHResponse normalizer in shared client
V2 rate limits trip cron-driven playbooksMEDIUMMEDIUMPer-tool budget guards, exponential backoff
Playbook IDs change between V1 and V2LOWHIGHPhase 4 smoke suite catches before cutover
V2 webhook delivery requires public callback URLMEDIUMMEDIUMUse existing egp_cf_pages webhook receiver pattern
HyperDrive credits accidentally consumed at scaleLOWHIGHExisting Marc-approval gate on 15-credit playbooks holds; do not weaken
SA sunsets V1 earlier than expectedMEDIUMHIGHPhase 2 and Phase 3 sequenced to finish by 2026-07-22 regardless
New V2 key gets leaked in logs (third credential-exposure pattern recurs)LOWCRITICALAll V2 calls route through shared client which masks the key; lint HARD-FAILs raw key prints

9. Pricing and Credit Conversion

[NEEDS SA DOCS] for all of the following:

Action: Irma to file a single ticket with SA covering all four pricing questions during Phase 1 Discover sweep.


10. Recommendation

Approve the six-phase migration. Cut over by 2026-07-22, decommission V1 by 2026-07-29.

Go/no-go gates:


11. Appendix A - Full Endpoint Diff Table

[NEEDS SA DOCS] - to be populated in Phase 1 after authenticated dashboard sweep. Skeleton:

EndpointV1 method/pathV2 method/pathAuth classNotes
Customer profileGET /api/v2/customer/profile/confirmApi-Key
Auth loginPOST /api/v2/auth/login/confirmnone
Token refreshPOST /api/v2/auth/token/refresh/confirmrefresh-token
Password changePOST /api/v2/auth/password/change/confirmsession
API key regeneratePOST /api/v2/auth/api-key/regenerate/confirmsession
Project listGET /api/v2/projects/confirmApi-Key
Playbook executePOST /api/v2/playbooks/{id}/run/confirmApi-Key
GBP readGET /api/v2/gbp/{id}/confirmApi-Key
OTTO actionsconfirmconfirmApi-KeyV2-only
HyperDrive playbooksconfirmconfirmApi-KeyV2-only, credit-metered
AI Overview trackingn/aconfirmApi-KeyV2-only
Webhooksn/aconfirmApi-KeyV2-only
Usage / creditsconfirmconfirmApi-Key
MCP server resourcesn/aconfirmApi-KeyV2-only

12. Appendix B - Code Examples (V2 Syntax)

B.1 Auth probe (V2)

import os
import urllib.request

V2_KEY = os.environ["SEARCHATLAS_API_V2_KEY"]
BASE = "https://api.searchatlas.com/api/v2"

req = urllib.request.Request(
 f"{BASE}/customer/profile/",
 headers={
 "Authorization": f"Api-Key {V2_KEY}",
 "Accept": "application/json",
 "User-Agent": "EGP-SA-Client/2.0",
 },
)
with urllib.request.urlopen(req, timeout=15) as r:
 print(r.status, r.read()[:500])

B.2 Execute a playbook (V2)

import json
import os
import urllib.request

V2_KEY = os.environ["SEARCHATLAS_API_V2_KEY"]
BASE = "https://api.searchatlas.com/api/v2"
PROJECT_ID = 27387
PLAYBOOK_ID = "c656ef48-2547-4034-a779-da58ac9f82b0" # Improve Local Map Rankings and Calls

payload = json.dumps({"project_id": PROJECT_ID}).encode()
req = urllib.request.Request(
 f"{BASE}/playbooks/{PLAYBOOK_ID}/run/",
 data=payload,
 method="POST",
 headers={
 "Authorization": f"Api-Key {V2_KEY}",
 "Content-Type": "application/json",
 "Accept": "application/json",
 },
)
with urllib.request.urlopen(req, timeout=30) as r:
 body = json.loads(r.read())
 print("run_id:", body.get("run_id"))

B.3 Subscribe to a webhook (V2, conjectured shape pending [NEEDS SA DOCS])

import json
import os
import urllib.request

V2_KEY = os.environ["SEARCHATLAS_API_V2_KEY"]
BASE = "https://api.searchatlas.com/api/v2"

payload = json.dumps({
 "event": "playbook.completed",
 "url": "https://hooks.egp1.io/searchatlas/v2",
 "secret": os.environ["SA_WEBHOOK_SECRET"],
}).encode()

req = urllib.request.Request(
 f"{BASE}/webhooks/",
 data=payload,
 method="POST",
 headers={
 "Authorization": f"Api-Key {V2_KEY}",
 "Content-Type": "application/json",
 },
)
with urllib.request.urlopen(req, timeout=15) as r:
 print(r.status, r.read()[:300])

13. Marc Question Queue

Items requiring Marc input or SA support response (queued to state/marc_question_queue.jsonl):

  1. Sunset date for V1. What date does SA stop serving V1 traffic?
  2. Auth header shape for V2. Is Authorization: Api-Key <key> retained, or does V2 use Bearer?
  3. Webhook support. Does V2 expose webhooks for playbook completion?
  4. HyperDrive credit conversion. Do unused V1-era credits carry over to V2?
  5. Usage endpoint. What is the V2 path for per-key credit usage (so we can wire it into egp_credit_usage_tracker.py)?
  6. MCP server registration. Does V2 expose an MCP-server manifest we can subscribe our agent fleet to?

All six should be answered during Phase 1 Discover via authenticated dashboard sweep plus a single SA support ticket.


End of deep-dive v1. Authored by Irma (GEO Score Leader) with Vesta (PPMO-KC) and Hakeem (PanCom) integrity review. Next revision after Phase 1 Discover sweep closes the [NEEDS SA DOCS] gaps.