{"openapi":"3.1.0","info":{"title":"Wall Ball API","version":"1.0.0","summary":"Read-only facts about Wall Ball, lacrosse club management software, and a fee calculator.","description":"Wall Ball runs youth lacrosse clubs: registration, payments, schedules, team chat and an assistant that answers parents from the club's own records. This API answers questions about the product: what it costs, what a club would pay on a given registration, what it does, and how it compares. It needs no key and holds no club or family data. Responses are cached; there is no hard rate limit, but please stay under 60 requests a minute.","contact":{"name":"Valor Thread Company","email":"sales@valorthreadcompany.com","url":"https://wallball.team/contact"},"termsOfService":"https://wallball.team/terms"},"servers":[{"url":"https://wallball.team/api/v1","description":"Production"}],"externalDocs":{"description":"Wall Ball API guide","url":"https://wallball.team/docs"},"tags":[{"name":"Product","description":"What Wall Ball is and costs"}],"paths":{"/":{"get":{"operationId":"listResources","tags":["Product"],"summary":"List the API's resources","description":"Returns every resource of this API with a one-line summary. Start here.","responses":{"200":{"description":"The resources.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Index"}}}}}}},"/pricing":{"get":{"operationId":"getPricing","tags":["Product"],"summary":"Get what Wall Ball charges","description":"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.","responses":{"200":{"description":"The price.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Pricing"}}}}}}},"/quote":{"get":{"operationId":"getFeeQuote","tags":["Product"],"summary":"Work out the fees on one card payment","description":"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.","parameters":[{"name":"amount","in":"query","required":true,"description":"The price the club set, in US dollars, such as 500 or 249.50.","schema":{"type":"number","minimum":1,"maximum":50000},"example":500},{"name":"team_store","in":"query","required":false,"description":"True if Valor Thread Company hosts the club's team store, which lowers Wall Ball's share from 3% to 1%.","schema":{"type":"boolean","default":false}},{"name":"fees_paid_by","in":"query","required":false,"description":"Who carries the fees: the club, out of what it receives, or the family, as a fee added at checkout.","schema":{"type":"string","enum":["club","family"],"default":"club"}}],"responses":{"200":{"description":"The fee breakdown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Quote"}}}},"400":{"description":"The request could not be answered.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/features":{"get":{"operationId":"listFeatures","tags":["Product"],"summary":"List what the app does","description":"Returns every feature, grouped by who it is for, and the list of things Wall Ball does not do yet.","parameters":[{"name":"group","in":"query","required":false,"description":"Return one group only.","schema":{"type":"string","enum":["families","ask","chat","coaches","club"]}}],"responses":{"200":{"description":"The features.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Features"}}}},"400":{"description":"The request could not be answered.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/faq":{"get":{"operationId":"listFaq","tags":["Product"],"summary":"List common questions and answers","description":"Returns the questions clubs ask before signing up, each with its answer.","responses":{"200":{"description":"The questions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Faq"}}}}}}},"/comparisons":{"get":{"operationId":"listComparisons","tags":["Product"],"summary":"Compare Wall Ball with other club software","description":"Returns Wall Ball beside each other product on price and terms, with where each is stronger, the sources and the date they were checked.","responses":{"200":{"description":"The comparisons.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Comparisons"}}}}}}},"/comparisons/{id}":{"get":{"operationId":"getComparison","tags":["Product"],"summary":"Compare Wall Ball with one product","description":"Returns the comparison with one product.","parameters":[{"name":"id","in":"path","required":true,"description":"The product to compare with.","schema":{"type":"string","enum":["teamsnap","sportsengine","second-slide","leagueapps"]}}],"responses":{"200":{"description":"The comparison.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Comparison"}}}},"404":{"description":"The request could not be answered.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Error":{"type":"object","description":"Every error has this shape.","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution","docs"],"properties":{"code":{"type":"string","description":"A stable, machine-readable code, such as invalid_amount."},"message":{"type":"string","description":"What went wrong, in words."},"resolution":{"type":"string","description":"What to do about it."},"docs":{"type":"string","description":"Where the API is documented."}}}}},"Index":{"type":"object","required":["name","version","resources"],"properties":{"name":{"type":"string","description":"The API's name."},"version":{"type":"string","description":"The API's version."},"description":{"type":"string","description":"What the API is for."},"docs":{"type":"string","description":"The guide."},"openapi":{"type":"string","description":"This document."},"resources":{"type":"array","description":"Each resource.","items":{"type":"object","required":["url","summary"],"properties":{"url":{"type":"string","description":"Where it is."},"summary":{"type":"string","description":"What it returns."}}}}}},"Pricing":{"type":"object","required":["currency","summary","wall_ball_rate_percent","card_processing"],"properties":{"currency":{"type":"string","description":"Always USD."},"summary":{"type":"string","description":"The price in one sentence."},"wall_ball_rate_percent":{"type":"object","description":"Wall Ball's share of a card payment, in percent.","required":["with_hosted_team_store","without"],"properties":{"with_hosted_team_store":{"type":"number","description":"With a team store hosted by Valor Thread Company."},"without":{"type":"number","description":"Without one."}}},"applies_to":{"type":"string","description":"What the share is taken from."},"card_processing":{"type":"object","description":"The card processor's own fee.","required":["percent","fixed_cents","processor"],"properties":{"percent":{"type":"number","description":"Percent of the charge."},"fixed_cents":{"type":"number","description":"Cents per charge."},"processor":{"type":"string","description":"Who charges it."}}},"fees_paid_by":{"type":"array","description":"Who can carry the fees. The club chooses.","items":{"type":"string"}},"subscription":{"type":"number","description":"Always 0."},"setup_fee":{"type":"number","description":"Always 0."},"per_player_fee":{"type":"number","description":"Always 0."},"minimum":{"type":"number","description":"Always 0."},"contract":{"type":"boolean","description":"Always false."},"ads":{"type":"boolean","description":"Always false."},"rules":{"type":"array","description":"The pricing rules, in words.","items":{"type":"string"}},"quote":{"type":"string","description":"An example call to the quote resource."}}},"Quote":{"type":"object","required":["currency","price","family_is_charged","wall_ball_fee","card_processing_fee","total_fees","club_receives"],"properties":{"currency":{"type":"string","description":"Always USD."},"price":{"type":"number","description":"The price the club set."},"team_store":{"type":"boolean","description":"Whether a hosted team store was assumed."},"fees_paid_by":{"type":"string","enum":["club","family"],"description":"Who carries the fees."},"wall_ball_rate_percent":{"type":"number","description":"Wall Ball's share, in percent."},"family_is_charged":{"type":"number","description":"What the card is charged."},"online_payment_fee_added_for_family":{"type":"number","description":"The fee line added at checkout. 0 when the club carries the fees."},"wall_ball_fee":{"type":"number","description":"Wall Ball's share, in dollars."},"card_processing_fee":{"type":"number","description":"The card processor's fee, in dollars."},"total_fees":{"type":"number","description":"Both fees together."},"club_receives":{"type":"number","description":"What reaches the club."},"notes":{"type":"array","description":"Things to know about this quote.","items":{"type":"string"}}}},"Feature":{"type":"object","required":["title","body"],"properties":{"title":{"type":"string","description":"The feature."},"body":{"type":"string","description":"What it does."}}},"Features":{"type":"object","required":["groups","not_built_yet"],"properties":{"groups":{"type":"array","description":"Features by audience.","items":{"type":"object","required":["id","title","features"],"properties":{"id":{"type":"string","description":"The group's id."},"title":{"type":"string","description":"The group's name."},"for":{"type":"string","description":"Who it is for."},"summary":{"type":"string","description":"The group in one sentence."},"features":{"type":"array","description":"The features.","items":{"$ref":"#/components/schemas/Feature"}}}}},"not_built_yet":{"type":"array","description":"What Wall Ball does not do yet.","items":{"type":"string"}},"coming_soon":{"type":"array","description":"What is announced but not built.","items":{"type":"object","required":["id","title","summary","status"],"properties":{"id":{"type":"string","description":"Its id."},"title":{"type":"string","description":"Its name."},"summary":{"type":"string","description":"What it will do."},"status":{"type":"string","description":"Where it stands."}}}}}},"Faq":{"type":"object","required":["questions"],"properties":{"questions":{"type":"array","description":"Each question.","items":{"type":"object","required":["question","answer"],"properties":{"question":{"type":"string","description":"The question."},"answer":{"type":"string","description":"The answer."}}}}}},"Comparison":{"type":"object","required":["id","name","rows","sources","checked_on"],"properties":{"id":{"type":"string","description":"The product's id."},"name":{"type":"string","description":"The product's name."},"what_it_is":{"type":"string","description":"The product in one sentence."},"url":{"type":"string","description":"The comparison page."},"rows":{"type":"array","description":"One row per question.","items":{"type":"object","required":["question","wall_ball","other"],"properties":{"question":{"type":"string","description":"What is compared."},"wall_ball":{"type":"string","description":"Wall Ball's answer."},"other":{"type":"string","description":"The other product's answer."}}}},"where_it_is_stronger":{"type":"array","description":"Where the other product is the better choice.","items":{"type":"string"}},"where_wall_ball_is_stronger":{"type":"array","description":"Where Wall Ball is.","items":{"type":"string"}},"sources":{"type":"array","description":"Where the other product's facts come from.","items":{"type":"object","required":["label","url"],"properties":{"label":{"type":"string","description":"What the source is."},"url":{"type":"string","description":"Its address."}}}},"checked_on":{"type":"string","description":"When the facts were last checked."}}},"Comparisons":{"type":"object","required":["checked_on","comparisons"],"properties":{"checked_on":{"type":"string","description":"When the facts were last checked."},"comparisons":{"type":"array","description":"Each comparison.","items":{"$ref":"#/components/schemas/Comparison"}}}}}}}