Skip to the page
For developers and agents

Wall Ball API

A public, read-only API about Wall Ball itself: what it costs, what a club would pay on a given registration, what the app does and how it compares. It needs no key and holds no club or family data.

Resources

Every resource answers GET with JSON and can be called from a browser. There are 6 of them.

  • GET /api/v1listResources

    Returns every resource of this API with a one-line summary. Start here.

  • GET /api/v1/pricinggetPricing

    Returns Wall Ball's whole price: the share of card payments with and without a hosted team store, the card processing fee, and what is never charged.

  • GET /api/v1/quotegetFeeQuote

    Given a price, returns what the family is charged, each fee, and what the club receives. Use it to answer what a club would pay on a registration of a given size.

    • amount (required): The price the club set, in US dollars, such as 500 or 249.50.
    • team_store: True if Valor Thread Company hosts the club's team store, which lowers Wall Ball's share from 3% to 1%.
    • fees_paid_by: Who carries the fees: the club, out of what it receives, or the family, as a fee added at checkout.
  • GET /api/v1/featureslistFeatures

    Returns every feature, grouped by who it is for, and the list of things Wall Ball does not do yet.

    • group: Return one group only.
  • GET /api/v1/faqlistFaq

    Returns the questions clubs ask before signing up, each with its answer.

  • GET /api/v1/comparisonslistComparisons

    Returns Wall Ball beside each other product on price and terms, with where each is stronger, the sources and the date they were checked.

  • GET /api/v1/comparisons/{id}getComparison

    Returns the comparison with one product.

    • id (required): The product to compare with.

An example

What comes out of a $500 registration for a club with a hosted team store that carries the fees itself:

curl "https://wallball.team/api/v1/quote?amount=500&team_store=true&fees_paid_by=club"
{
  "currency": "USD",
  "price": 500,
  "team_store": true,
  "fees_paid_by": "club",
  "wall_ball_rate_percent": 1,
  "family_is_charged": 500,
  "online_payment_fee_added_for_family": 0,
  "wall_ball_fee": 5,
  "card_processing_fee": 14.8,
  "total_fees": 19.8,
  "club_receives": 480.2,
  "notes": [
    "Card processing is Stripe's 2.9% plus 30 cents, estimated for a US card.",
    "Check and cash payments have no fee.",
    "There is no subscription, setup fee, per-player fee or minimum."
  ]
}

Errors

Every error is JSON with the same shape: a stable code, a message in words, and a resolution saying what to do. An address that does not exist answers 404 the same way.

{
  "error": {
    "code": "invalid_amount",
    "message": "amount is required and must be a price in US dollars, such as 500 or 249.50.",
    "resolution": "Pass amount as a plain number with at most two decimals, for example ?amount=500.",
    "docs": "https://wallball.team/docs"
  }
}

Wall Ball MCP server

The same answers as tools, for agents that speak the Model Context Protocol. Streamable HTTP, no key: point your client at https://wallball.team/mcp. The tools are get_pricing, get_fee_quote, list_features, list_faq and compare (teamsnap, sportsengine, second-slide, leagueapps).

This site in Markdown

Ask for any page of this site with Accept: text/markdown, or add .md to its address, and you get Markdown instead of HTML. An address that does not exist answers with a 404 in Markdown that links to what does.

curl -H "Accept: text/markdown" https://wallball.team/pricing

There is no API for a club's data

Schedules, rosters, registrations and payments belong to each club and its families. They are reached by signing in to the app, not through this API. Responses here are cached and there is no hard rate limit; please stay under 60 requests a minute.

Free until a family pays you by card

Start your club.

Creating a club takes a few minutes and no card. The first sitting, with your waivers, Stripe, fields and first program, takes about half an hour.