Skip to content

docs: add Panya.health to partner directory#231

Open
SantoraReplica wants to merge 2 commits into
google-agentic-commerce:mainfrom
SantoraReplica:add-panya-health-partner
Open

docs: add Panya.health to partner directory#231
SantoraReplica wants to merge 2 commits into
google-agentic-commerce:mainfrom
SantoraReplica:add-panya-health-partner

Conversation

@SantoraReplica
Copy link
Copy Markdown

Add Panya.health to partner directory

Panya.health is a trust-first peptide guidance and vendor-matching platform. Adding to the partner directory per AP2's open partner-listing process.

Integration summary

  • AP2 v0.1 CartMandate issuance — every product entry in our ACP feed at /api/acp/products.json ships a fresh signed CartMandate per request with 10-minute TTL.
  • Discovery/.well-known/ap2.json (issuer metadata) and /.well-known/ap2-jwks.json (RFC 7517 JWKS, Ed25519 public key, kid: panya-ap2-v1).
  • VerificationPOST /api/ap2/verify accepts a CartMandate and returns a structured verify result (signature, iss, sub, exp, iat, cart_hash).
  • MCP server/api/mcp exposes three tools that any AP2-compatible agent can call to discover and cite vendors (panya.match_vendor, panya.list_protocols, panya.cite).

Test endpoints (live)

  • curl https://panya.health/.well-known/ap2.json → issuer metadata
  • curl https://panya.health/.well-known/ap2-jwks.json → public JWKS
  • curl https://panya.health/api/acp/products.json → ACP feed with signed CartMandates (3 products)
  • curl -X POST https://panya.health/api/ap2/verify -H 'content-type: application/json' -d @cart-mandate.json → returns valid: true, key_status: production, cart_hash_matches: true

Key choices, in case useful for spec discussion

  • Ed25519 over RSA / ECDSA P-256 — Node native, short keys, deterministic signatures, performance.
  • JWS compact serialization — standard AP2 transport.
  • Canonical JSON via sort-key stringify — RFC 8785 not referenced in AP2 v0.1 spec; happy to switch if the spec adopts a canonical form.
  • /.well-known/ap2.json discovery path — Panya-internal convention. AP2 spec section 9 lists discovery as an open problem. We'd realign to whatever convention AP2 picks.

Happy to adjust formatting, copy, or section placement to match the existing directory style. Thanks for the work on AP2.

@SantoraReplica SantoraReplica requested a review from a team as a code owner April 26, 2026 03:27
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request adds Panya.health to the partners list in docs/partners.md. I have no feedback to provide.

@SantoraReplica SantoraReplica changed the title Add Panya.health to partner directory docs: add Panya.health to partner directory Apr 26, 2026
Ectsang added a commit to Ectsang/AP2 that referenced this pull request May 11, 2026
…decision

Aligns the cross-merchant budget enforcement sample with the canonical
budget_authority verb set being crosswalked across AP2, Cycles, and APS
in aeoess/agent-governance-vocabulary.

Verbs:
- authorize() -> reserve()
- refund() -> release() (pre-commit return of unspent reservation)
- query() -> query_budget() (budget snapshot)

Decision shape:
- approved: bool -> decision: Decision (ALLOW / ALLOW_WITH_CAPS / DENY)
- This retail sample emits ALLOW or DENY only. ALLOW_WITH_CAPS is
  canonical for divisible / metered budgets (Cycles, runcycles.io).
  Callers that cannot accept partial fulfillment MUST treat
  ALLOW_WITH_CAPS as DENY (safe default).

Types renamed for consistency: Hold -> Reservation, AuthorizeResult ->
ReserveResult, HoldStatus -> ReservationStatus (REFUNDED -> RELEASED).

Demo behavior preserved: Merchant A reserves \$60 (ALLOW), Merchant B
denied at \$60 (budget exceeded), Merchant B retries at \$35 (ALLOW).
Final state: \$95 spent of \$100 budget.

References:
- ACP google-agentic-commerce#231 three-layer model (passport / budget authority / rail)
- Cycles (runcycles.io) - independent reserve/commit/release impl
- aeoess/agent-governance-vocabulary - crosswalk in progress (AAIF
  donation trajectory documented)
Ectsang added a commit to Ectsang/AP2 that referenced this pull request May 19, 2026
…dget reservation

Adds a colocated specification document defining the protocol pattern
that cross_merchant_budget.py implements:

- 9 sections covering scope, definitions, MUST/SHOULD requirements
  for Budget Authority, Verifying Parties, and Shopping Agents
- Six canonical verbs (reserve/commit/release/refund/query_budget/
  query_reservation) with the four-verb subset implemented here
- Three-value Decision shape (ALLOW/ALLOW_WITH_CAPS/DENY) with safe
  default rule (treat ALLOW_WITH_CAPS as DENY unless partial-
  fulfillment-capable)
- Registration as Mandate Constraint type "budget_reservation_v1"
  via AP2 specification.md §371 extension point
- Six open questions listed honestly (discovery/trust, dispute
  integration, cross-rail composition, multi-asset budgets,
  reservation expiry, signed reservation attestations)

Sits alongside the Python sample. Does not modify AP2 wire format,
JWT claims, or Mandate signature scheme. MUSTs apply to deployments
that opt into the budget_reservation_v1 Constraint type.

Vocabulary aligns with crosswalk/budget_reservation.yaml in
aeoess/agent-governance-vocabulary. Cycles cited as independent
production implementation with ALLOW_WITH_CAPS exercised.

Refs google-agentic-commerce#207, google-agentic-commerce#252, ACP google-agentic-commerce#231.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant