{
  "openapi": "3.1.0",
  "info": {
    "title": "GitHub Releases Intelligence Provider",
    "version": "0.1.0",
    "description": "Structured GitHub Releases metadata for agents. The service is metadata-only: it does not return release body, release notes, markdown changelogs, raw GitHub API responses, tokens, cookies, authorization headers, or asset manifests. The HTTPS API is live; latest and batch endpoints require MPP payment and paid responses report payment_status=paid.",
    "contact": {
      "name": "Agent Signals support",
      "email": "f5547ssdf@gmail.com"
    }
  },
  "servers": [
    {
      "url": "https://mpp.agent-signals.com",
      "description": "Public HTTPS service endpoint."
    }
  ],
  "tags": [
    {
      "name": "Discovery",
      "description": "Service metadata and agent-readable documentation."
    },
    {
      "name": "GitHub Releases",
      "description": "Sanitized GitHub Releases metadata endpoints."
    }
  ],
  "x-service-info": {
    "id": "github-releases-intelligence",
    "name": "GitHub Releases Intelligence",
    "provider": "Agent Signals",
    "service_version": "0.1.0",
    "service_url": "https://mpp.agent-signals.com",
    "realm": "mpp.agent-signals.com",
    "status": "marketplace_ready_paid_prototype_candidate",
    "marketplace_status": "submission_package_preparation",
    "pricing_version": "2026-07-06",
    "categories": [
      "developer-tools",
      "data"
    ],
    "tags": [
      "github",
      "releases",
      "developer-tools",
      "monitoring",
      "metadata",
      "agents"
    ],
    "support": {
      "contact": "Agent Signals support",
      "note": "Private beta and Marketplace support: email Agent Signals support.",
      "public_email": "f5547ssdf@gmail.com",
      "issue_url": null
    },
    "changelog": {
      "location": "README Changelog section",
      "public_url": null,
      "latest": {
        "version": "0.1.0",
        "date": "2026-07-06",
        "note": "Marked service as Marketplace-ready paid prototype candidate after feePayer paid acceptance success."
      }
    },
    "operations": {
      "uptime_statement": "Best-effort public paid prototype; no formal SLA yet.",
      "status_page": null,
      "formal_sla": false,
      "rate_limit_policy": "Basic public abuse controls are enabled at the reverse proxy. GitHub API availability and rate limits may affect freshness.",
      "cache_ttl_seconds": 900
    },
    "docs": {
      "landing": "https://mpp.agent-signals.com/",
      "mpp_manifest": "https://mpp.agent-signals.com/.well-known/mpp",
      "llms_txt": "https://mpp.agent-signals.com/llms.txt",
      "openapi": "https://mpp.agent-signals.com/openapi.json"
    },
    "safety_policy": {
      "metadata_only": true,
      "no_release_body": true,
      "no_release_notes": true,
      "no_raw_upstream_response": true,
      "no_tokens_or_authorization_headers": true,
      "no_asset_manifests": true
    },
    "payment_plan": {
      "status": "enabled",
      "method": "tempo_mpp",
      "payment_intent": "charge",
      "billing_unit": "repo_check",
      "price_per_repo_check": "0.015",
      "currency_symbol": "USDC.e",
      "currency_address": "0x20C000000000000000000000b9537d11c60E8b50",
      "quote_endpoint_free": true,
      "free_endpoints": [
        "GET /",
        "GET /.well-known/mpp",
        "GET /health",
        "GET /openapi.json",
        "GET /llms.txt",
        "POST /github/releases/quote",
        "POST /github/releases/latest/quote"
      ],
      "future_paid_endpoints": [],
      "paid_endpoints": [
        "POST /github/releases/latest",
        "POST /github/releases/batch"
      ],
      "fee_sponsorship": {
        "enabled": true,
        "mode": "fee_payer_url",
        "user_chain_fee": "sponsored_by_provider_fee_payer",
        "expected_user_wallet_delta": "provider_charge_only",
        "provider_charge_includes_sponsored_fee_buffer": true,
        "policy": {
          "max_gas": "500000",
          "max_fee_per_gas": "60000000000",
          "max_priority_fee_per_gas": "20000000000",
          "max_total_fee_decimal": "0.01",
          "max_validity_window_seconds": 600
        },
        "acceptance": {
          "status": "feePayer_paid_acceptance_success",
          "date": "2026-07-06",
          "evidence": "raw_snapshots/2026-07-06_agent_signals_github_releases_latest_fee_payer_test_rerun3_result.md",
          "result": "payer_delta_matched_provider_charge",
          "provider_charge": "0.015",
          "expected_user_wallet_delta": "provider_charge_only"
        },
        "note": "Fee sponsorship improves payer UX by having the provider sponsor Tempo chain fees up to policy limits. The chain fee does not disappear; it is paid by the fee payer. With fee sponsorship enabled, the expected payer wallet delta is the provider charge only."
      }
    }
  },
  "paths": {
    "/": {
      "get": {
        "tags": [
          "Discovery"
        ],
        "operationId": "getServiceLanding",
        "summary": "Agent-first service landing document",
        "description": "Returns service identity, pricing, quote flow, and client examples.",
        "x-payment-info": {
          "status": "free",
          "payment_required": false,
          "billing_unit": null,
          "payment_intent": null,
          "reason": "Agent-first service landing endpoint."
        },
        "responses": {
          "200": {
            "description": "Service landing document."
          }
        }
      }
    },
    "/.well-known/mpp": {
      "get": {
        "tags": [
          "Discovery"
        ],
        "operationId": "getMppManifest",
        "summary": "MPP service manifest",
        "description": "Returns machine-readable MPP service metadata, pricing, workflow, and safety policy.",
        "x-payment-info": {
          "status": "free",
          "payment_required": false,
          "billing_unit": null,
          "payment_intent": null,
          "reason": "Machine-readable service manifest endpoint."
        },
        "responses": {
          "200": {
            "description": "MPP service manifest."
          }
        }
      }
    },
    "/health": {
      "get": {
        "tags": [
          "Discovery"
        ],
        "operationId": "getHealth",
        "summary": "Health check",
        "description": "Returns service health and current payment readiness state. This endpoint does not call GitHub.",
        "x-payment-info": {
          "status": "free",
          "payment_required": false,
          "billing_unit": null,
          "payment_intent": null,
          "reason": "Discovery endpoint. Does not call GitHub."
        },
        "responses": {
          "200": {
            "description": "Service is healthy.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "string",
                      "const": "ok"
                    },
                    "service": {
                      "type": "string"
                    },
                    "version": {
                      "type": "string"
                    },
                    "metadata_only": {
                      "type": "boolean"
                    },
                    "payment_status": {
                      "type": "string"
                    },
                    "runtime_cache": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "status",
                    "service",
                    "version",
                    "metadata_only",
                    "payment_status",
                    "runtime_cache"
                  ],
                  "additionalProperties": false
                }
              }
            }
          }
        }
      }
    },
    "/openapi.json": {
      "get": {
        "tags": [
          "Discovery"
        ],
        "operationId": "getOpenApi",
        "summary": "OpenAPI discovery document",
        "description": "Returns this OpenAPI document.",
        "x-payment-info": {
          "status": "free",
          "payment_required": false,
          "billing_unit": null,
          "payment_intent": null,
          "reason": "Catalog and API discovery endpoint."
        },
        "responses": {
          "200": {
            "description": "OpenAPI document."
          }
        }
      }
    },
    "/llms.txt": {
      "get": {
        "tags": [
          "Discovery"
        ],
        "operationId": "getLlmsTxt",
        "summary": "Agent-readable service documentation",
        "description": "Returns concise plain-text instructions for agents.",
        "x-payment-info": {
          "status": "free",
          "payment_required": false,
          "billing_unit": null,
          "payment_intent": null,
          "reason": "Agent-readable service description endpoint."
        },
        "responses": {
          "200": {
            "description": "Plain-text agent documentation."
          }
        }
      }
    },
    "/github/releases/latest": {
      "post": {
        "tags": [
          "GitHub Releases"
        ],
        "operationId": "getGitHubReleaseLatest",
        "summary": "Return sanitized GitHub Releases metadata for one repository.",
        "description": "Checks one GitHub repository and returns sanitized release metadata only. The service may use cache unless force_refresh=true.",
        "x-payment-info": {
          "status": "enabled",
          "payment_required": true,
          "method": "tempo_mpp",
          "payment_intent": "charge",
          "billing_unit": "repo_check",
          "price_per_repo_check": "0.015",
          "currency_symbol": "USDC.e",
          "currency_address": "0x20C000000000000000000000b9537d11c60E8b50",
          "quote_endpoint": "/github/releases/quote",
          "note": "Payment is verified before upstream GitHub work. Paid JSON responses include charged_amount, payment_status, and billing_unit; receipts are attached via HTTP Payment-Receipt."
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "owner": {
                    "type": "string",
                    "description": "GitHub owner or organization."
                  },
                  "repo": {
                    "type": "string",
                    "description": "GitHub repository name without .git."
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 20,
                    "default": 10,
                    "description": "Maximum number of sanitized releases to return."
                  },
                  "since": {
                    "type": "string",
                    "description": "Optional ISO-8601 timestamp. Return releases published at or after this time when available."
                  },
                  "include_prerelease": {
                    "type": "boolean",
                    "default": true,
                    "description": "Include GitHub prereleases."
                  },
                  "include_draft": {
                    "type": "boolean",
                    "default": false,
                    "description": "Include draft releases if visible to the caller. Public unauthenticated calls should not rely on draft visibility."
                  },
                  "force_refresh": {
                    "type": "boolean",
                    "default": false,
                    "description": "Bypass local cache and refresh from the configured source."
                  }
                },
                "required": [
                  "owner",
                  "repo"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response."
          },
          "400": {
            "description": "Validation or JSON parsing error."
          },
          "402": {
            "description": "Payment required. Response body includes readable pricing fields; WWW-Authenticate header carries the MPP challenge."
          },
          "404": {
            "description": "Repository or route not found."
          },
          "5XX": {
            "description": "Upstream or internal error."
          }
        }
      }
    },
    "/github/releases/latest/quote": {
      "post": {
        "tags": [
          "GitHub Releases"
        ],
        "operationId": "quoteGitHubReleaseLatest",
        "summary": "Quote one GitHub Releases latest check using the same body as the paid latest endpoint.",
        "description": "Free quote endpoint for /github/releases/latest. Accepts { owner, repo, limit, force_refresh } and does not call GitHub.",
        "x-payment-info": {
          "status": "free",
          "payment_required": false,
          "billing_unit": null,
          "payment_intent": null,
          "reason": "Quote endpoint does not execute the paid source call path."
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "owner": {
                    "type": "string",
                    "description": "GitHub owner or organization."
                  },
                  "repo": {
                    "type": "string",
                    "description": "GitHub repository name without .git."
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 20,
                    "default": 10,
                    "description": "Maximum number of sanitized releases to return."
                  },
                  "since": {
                    "type": "string",
                    "description": "Optional ISO-8601 timestamp. Return releases published at or after this time when available."
                  },
                  "include_prerelease": {
                    "type": "boolean",
                    "default": true,
                    "description": "Include GitHub prereleases."
                  },
                  "include_draft": {
                    "type": "boolean",
                    "default": false,
                    "description": "Include draft releases if visible to the caller. Public unauthenticated calls should not rely on draft visibility."
                  },
                  "force_refresh": {
                    "type": "boolean",
                    "default": false,
                    "description": "Bypass local cache and refresh from the configured source."
                  }
                },
                "required": [
                  "owner",
                  "repo"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response."
          },
          "400": {
            "description": "Validation or JSON parsing error."
          },
          "404": {
            "description": "Repository or route not found."
          },
          "5XX": {
            "description": "Upstream or internal error."
          }
        }
      }
    },
    "/github/releases/batch": {
      "post": {
        "tags": [
          "GitHub Releases"
        ],
        "operationId": "checkGitHubReleaseBatch",
        "summary": "Check sanitized GitHub Releases metadata for multiple repositories.",
        "description": "Checks up to 20 GitHub repositories in a serialized batch. One repository failure is returned in that repository result and does not fail the whole batch.",
        "x-payment-info": {
          "status": "enabled",
          "payment_required": true,
          "method": "tempo_mpp",
          "payment_intent": "charge",
          "billing_unit": "repo_check",
          "price_per_repo_check": "0.015",
          "currency_symbol": "USDC.e",
          "currency_address": "0x20C000000000000000000000b9537d11c60E8b50",
          "quote_endpoint": "/github/releases/quote",
          "note": "Payment is verified before upstream GitHub work. Paid JSON responses include charged_amount, payment_status, and billing_unit; receipts are attached via HTTP Payment-Receipt."
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "repositories": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 20,
                    "items": {
                      "type": "object",
                      "properties": {
                        "owner": {
                          "type": "string",
                          "description": "GitHub owner or organization."
                        },
                        "repo": {
                          "type": "string",
                          "description": "GitHub repository name without .git."
                        }
                      },
                      "required": [
                        "owner",
                        "repo"
                      ],
                      "additionalProperties": false
                    },
                    "description": "Repositories to check in a serialized batch."
                  },
                  "since": {
                    "type": "string",
                    "description": "Optional ISO-8601 timestamp. Return releases published at or after this time when available."
                  },
                  "limit_per_repo": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 20,
                    "default": 5,
                    "description": "Maximum releases to fetch per repository."
                  },
                  "include_prerelease": {
                    "type": "boolean",
                    "default": true,
                    "description": "Include GitHub prereleases."
                  },
                  "force_refresh": {
                    "type": "boolean",
                    "default": false,
                    "description": "Bypass local cache where possible and refresh each repository."
                  }
                },
                "required": [
                  "repositories"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response."
          },
          "400": {
            "description": "Validation or JSON parsing error."
          },
          "402": {
            "description": "Payment required. Response body includes readable pricing fields; WWW-Authenticate header carries the MPP challenge."
          },
          "404": {
            "description": "Repository or route not found."
          },
          "5XX": {
            "description": "Upstream or internal error."
          }
        }
      }
    },
    "/github/releases/quote": {
      "post": {
        "tags": [
          "GitHub Releases"
        ],
        "operationId": "quoteGitHubReleaseBatch",
        "summary": "Estimate source calls and cache hits without calling GitHub API.",
        "description": "Free quote endpoint. It reads local cache state and estimates whether execution is required. It does not call GitHub.",
        "x-payment-info": {
          "status": "free",
          "payment_required": false,
          "billing_unit": null,
          "payment_intent": null,
          "reason": "Quote endpoint does not execute the paid source call path."
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "repositories": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 20,
                    "items": {
                      "type": "object",
                      "properties": {
                        "owner": {
                          "type": "string",
                          "description": "GitHub owner or organization."
                        },
                        "repo": {
                          "type": "string",
                          "description": "GitHub repository name without .git."
                        }
                      },
                      "required": [
                        "owner",
                        "repo"
                      ],
                      "additionalProperties": false
                    },
                    "description": "Repositories to check in a serialized batch."
                  },
                  "limit_per_repo": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 20,
                    "default": 5,
                    "description": "Maximum releases to fetch per repository."
                  },
                  "force_refresh": {
                    "type": "boolean",
                    "default": false,
                    "description": "Bypass local cache where possible and refresh each repository."
                  }
                },
                "required": [
                  "repositories"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response."
          },
          "400": {
            "description": "Validation or JSON parsing error."
          },
          "404": {
            "description": "Repository or route not found."
          },
          "5XX": {
            "description": "Upstream or internal error."
          }
        }
      }
    }
  }
}
