{
  "openapi": "3.1.0",
  "info": {
    "title": "Phantom absence index (research demonstrator)",
    "version": "0.2.1",
    "description": "Read-only measurements, served over JSON-RPC. One resource is priced at $0.01 or €0.01 — payable in USDC or EURC, the client's choice — and a free sample of it is served unauthenticated; a payment credential is VERIFIED before the paid resource returns anything, so an unverifiable one receives the same challenge. Payable on a TEST network only: since 2026-10-06 the x402 manifest names a real receive-only Base Sepolia address. A credential is verified and then settled through an x402 facilitator before the paid resource returns anything, and the settlement response is returned in a response header. Base Sepolia TESTNET: settlement is real and on-chain, but it moves TEST USDC, which has no monetary value. There is no mainnet route and this host holds no funds. Do not send mainnet funds. Until 2026-10-06 this document described two endpoints that did not exist and returned 404 to everyone who followed it. Every path below was checked against the running server before publication. Literal paths are deliberately kept out of this prose so that a coherence checker reading the document cannot mistake a historical note for an advertisement.",
    "contact": {
      "url": "https://atlas.geosensor.tech/"
    }
  },
  "x-mpp": {
    "version": 2,
    "settles": false,
    "payable": false,
    "note": "no payable resource is advertised; see /.well-known/x402"
  },
  "servers": [
    {
      "url": "https://atlas.geosensor.tech",
      "description": "research demonstrator"
    }
  ],
  "paths": {
    "/mcp": {
      "post": {
        "summary": "Model Context Protocol endpoint (Streamable HTTP, JSON-RPC 2.0)",
        "description": "Protocol version 2025-06-18. Supports initialize, tools/list and tools/call. Tools: absence_rate, host_report, bulk_export. A GET returns 405 with an Allow header, which is correct for this transport and is not an error.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "jsonrpc",
                  "method"
                ],
                "properties": {
                  "jsonrpc": {
                    "const": "2.0"
                  },
                  "id": {
                    "type": [
                      "string",
                      "integer",
                      "null"
                    ]
                  },
                  "method": {
                    "type": "string"
                  },
                  "params": {
                    "type": "object"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "JSON-RPC result or error envelope",
            "headers": {
              "MCP-Protocol-Version": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "202": {
            "description": "Accepted with no body (notification only)"
          },
          "400": {
            "description": "Parse error (JSON-RPC -32700)"
          }
        }
      }
    },
    "/a2a": {
      "post": {
        "summary": "Agent2Agent endpoint (JSON-RPC 2.0)",
        "description": "Accepts message/send and tasks/get, in both the REST-binding and proto-binding spellings. A method this server does not implement returns a JSON-RPC MethodNotFound error, not an HTTP error.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "jsonrpc",
                  "method"
                ],
                "properties": {
                  "jsonrpc": {
                    "const": "2.0"
                  },
                  "id": {
                    "type": [
                      "string",
                      "integer",
                      "null"
                    ]
                  },
                  "method": {
                    "type": "string"
                  },
                  "params": {
                    "type": "object"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "JSON-RPC result or error envelope",
            "headers": {
              "A2A-Protocol-Version": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parse error (JSON-RPC -32700)"
          }
        }
      }
    },
    "/oauth/token": {
      "post": {
        "summary": "OAuth 2.0 token endpoint (client_credentials, open issuance)",
        "description": "Advertised by /.well-known/oauth-authorization-server. Issuance is open and the documentation says so: an advertised token endpoint that issued nothing would be the defect this project documents.",
        "requestBody": {
          "required": true,
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "type": "object",
                "required": [
                  "grant_type"
                ],
                "properties": {
                  "grant_type": {
                    "const": "client_credentials"
                  },
                  "client_id": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Access token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "unsupported_grant_type"
          }
        }
      }
    },
    "/free/curve": {
      "get": {
        "summary": "AI-stance adoption series, free and unauthenticated",
        "description": "21 Common-Crawl epochs re-derived from an append-only signed chain, vantage held constant at bulk:commoncrawl. The document carries its own caveats: it is the brochure population not the machine-facing one, the live cross-section is reported separately and must not be appended to the series, undersampled epochs are withheld into their own field, and the fall-2023 onset is prior art (arXiv 2407.14933). Read `caveats` before quoting a number.",
        "responses": {
          "200": {
            "description": "Series with caveats",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "series",
                    "caveats",
                    "vantage",
                    "live_cross_section"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/free/sample": {
      "get": {
        "summary": "Free sample of the paid export, unauthenticated",
        "description": "Names every section of the paid export with its size, and shows two of its per-class numerator cells in full from one of five peer-group segments. Deliberately small: the signed attestation, the survival curves, the directive lineage, the declaration growth and the auth-discovery conformance detail are withheld. Exists so the contents of the priced export can be judged before paying, and because an honest refusal should still be useful — the 402 on the payable resource points here.",
        "responses": {
          "200": {
            "description": "The sample, with what it withholds stated in-band",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "what",
                    "price_of_the_full_export",
                    "how_to_buy",
                    "the_full_export_contains",
                    "sample_of_class_detail",
                    "sample_is_limited_to"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/paid/gap-lookup": {
      "get": {
        "summary": "Aggregate absence record, behind a test-network payment challenge",
        "description": "The one resource the x402 manifest advertises. Without a payment header it answers 402 with the challenge below, and the same challenge base64-encoded in the `payment-required` response header. With a payment header it returns the AGGREGATE measurement record. Per-host findings about named third parties are not served, by published policy, so a request body naming a domain is answered with the aggregate and an explicit refusal field rather than silently ignored. GET and POST behave identically: an x402 client retries its original request with the credential attached, and this route answered 404 to POST until 2026-10-07 for exactly that reason.",
        "parameters": [
          {
            "name": "x-payment",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Payment credential. Any value reaches the body: this is a demonstrator and verifies nothing."
          }
        ],
        "responses": {
          "200": {
            "description": "Aggregate record (test network; nothing was settled and no payment was verified)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "note",
                    "record"
                  ]
                }
              }
            }
          },
          "402": {
            "description": "Payment required, on a TEST network",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "x402Version",
                    "accepts"
                  ],
                  "properties": {
                    "x402Version": {
                      "type": "integer",
                      "example": 2
                    },
                    "error": {
                      "type": "string",
                      "example": "payment required"
                    },
                    "accepts": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "scheme",
                          "price",
                          "network",
                          "payTo"
                        ],
                        "properties": {
                          "scheme": {
                            "type": "string",
                            "example": "exact"
                          },
                          "price": {
                            "type": "string",
                            "example": "$0.01"
                          },
                          "network": {
                            "type": "string",
                            "example": "eip155:84532"
                          },
                          "payTo": {
                            "type": "string",
                            "description": "Receive-only test-network address."
                          },
                          "description": {
                            "type": "string"
                          },
                          "mimeType": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Payment route disabled because no receive-only address is configured. A challenge naming no recipient would be unpayable while appearing payable, so the route refuses and says so."
          }
        }
      },
      "post": {
        "summary": "Aggregate absence record, behind a test-network payment challenge",
        "description": "The one resource the x402 manifest advertises. Without a payment header it answers 402 with the challenge below, and the same challenge base64-encoded in the `payment-required` response header. With a payment header it returns the AGGREGATE measurement record. Per-host findings about named third parties are not served, by published policy, so a request body naming a domain is answered with the aggregate and an explicit refusal field rather than silently ignored. GET and POST behave identically: an x402 client retries its original request with the credential attached, and this route answered 404 to POST until 2026-10-07 for exactly that reason.",
        "parameters": [
          {
            "name": "x-payment",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Payment credential. Any value reaches the body: this is a demonstrator and verifies nothing."
          }
        ],
        "responses": {
          "200": {
            "description": "Aggregate record (test network; nothing was settled and no payment was verified)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "note",
                    "record"
                  ]
                }
              }
            }
          },
          "402": {
            "description": "Payment required, on a TEST network",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "x402Version",
                    "accepts"
                  ],
                  "properties": {
                    "x402Version": {
                      "type": "integer",
                      "example": 2
                    },
                    "error": {
                      "type": "string",
                      "example": "payment required"
                    },
                    "accepts": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "scheme",
                          "price",
                          "network",
                          "payTo"
                        ],
                        "properties": {
                          "scheme": {
                            "type": "string",
                            "example": "exact"
                          },
                          "price": {
                            "type": "string",
                            "example": "$0.01"
                          },
                          "network": {
                            "type": "string",
                            "example": "eip155:84532"
                          },
                          "payTo": {
                            "type": "string",
                            "description": "Receive-only test-network address."
                          },
                          "description": {
                            "type": "string"
                          },
                          "mimeType": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Payment route disabled because no receive-only address is configured. A challenge naming no recipient would be unpayable while appearing payable, so the route refuses and says so."
          }
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "domain": {
                    "type": "string",
                    "description": "Optional. Named-domain findings are NOT published; supplying this returns the aggregate plus a `domain_request_refused` field."
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
