Download OpenAPI specification:
Unofficial, community-maintained description of the public Scouting America API at api.scouting.org. Not affiliated with or endorsed by Scouting America. The MIT license applies to this description and repository only, not to the API or its data.
Some list endpoints cache responses without regard to the query string. On those endpoints, send Cache-Control: no-cache or query filters may be ignored.
Returns merit badges. Pass a badge's id to the requirements endpoint to get its requirements. Filters combine with AND. A filter value that matches nothing returns an empty list.
| id | string Examples: id=3 Return only the merit badge with this |
| version | string Examples: version=2019 Return only requirements versions from this year. Badges with no matching version are left out. |
| status | string Enum: "active" "inactive" Which requirements versions to put in |
| Cache-Control | string Examples: no-cache Send |
{- "meritBadges": [
- {
- "id": "3",
- "categoryId": "3",
- "category": "Business and Industry",
- "bsaNumber": "15",
- "name": "American Business",
- "shortName": "Amer. Business",
- "description": "",
- "image": "15_150.png",
- "eagleRequired": "False",
- "centennial": "False",
- "dateCreated": "",
- "dateDiscontinued": "",
- "lastUpdated": "2014-08-20",
- "adminNotes": "",
- "worksheetDOC": "",
- "bsaPamphletNumber": "35850",
- "bsaPamphletEdition": "2002",
- "bsaPamphletImage": "3.jpg",
- "bsaEmblemNumber": "",
- "bsaEmblemImage": "",
- "pageURL": "american-business-merit-badge-requirements.asp",
- "searchKeywords": "American Business Merit Badge Requirements",
- "sku": "659930",
- "price": "3.99",
- "priceLastUpdated": "2026-09-16",
- "versions": [
- {
- "versionId": "282",
- "version": "2019",
- "versionEffectiveDt": "2019-01-01",
- "versionExpiryDt": "",
- "expiredDate": ""
}
]
}
]
}Returns the current requirements version for a merit badge. Requirements are a flat list; nest them using parentRequirementId and order them by sortOrder.
| meritBadgeId required | integer >= 1 Examples: 3 Merit badge |
{- "meritBadgeId": "3",
- "meritBadgeName": "American Business",
- "version": "2019",
- "versionId": "282",
- "versionEffectiveDt": "2019-01-01",
- "versionExpiryDt": "",
- "eagleRequired": "False",
- "requirements": [
- {
- "id": "8386",
- "name": "Do the following:",
- "listNumber": "1.",
- "requirementNumber": "",
- "sortOrder": "1",
- "childrenRequired": "5",
- "required": "False",
- "parentRequirementId": "",
- "daysRequired": "",
- "counselorApproval": "False",
- "footer": ""
}, - {
- "id": "8387",
- "name": "Explain four features of the free enterprise system in the United States. ...",
- "listNumber": "(a)",
- "requirementNumber": "1a",
- "sortOrder": "1.1",
- "childrenRequired": "",
- "required": "True",
- "parentRequirementId": "8386",
- "daysRequired": "",
- "counselorApproval": "False",
- "footer": ""
}
]
}Returns ranks across all programs, one item per requirements version. A rank with several versions appears once per version, sharing id but with different versionId. Filters combine with AND. A filter value that matches nothing returns an empty list.
| id | string Examples: id=1 Return only versions of the rank with this |
| programId | string Examples: programId=2 Return only ranks in this program |
| version | string Examples: version=2022 Return only requirements versions from this year |
| status | string Enum: "active" "inactive"
|
| Cache-Control | string Examples: no-cache Send |
{- "ranks": [
- {
- "id": "20",
- "name": "Discovery",
- "short": "Discovery",
- "reallyShort": "Discovery",
- "level": "2",
- "image": "discovery.png",
- "programId": "4",
- "program": "Venturing",
- "searchKeywords": "Venturer Rank Award Requirements",
- "lds": "False",
- "sku": "620502",
- "price": "2.99",
- "priceLastUpdated": "2026-09-16",
- "scoutNet": "RV12",
- "versionId": "62",
- "version": "2020",
- "header": "",
- "footer": "",
- "adminNotes": "",
- "proofReadDate": "",
- "active": "True",
- "expiredDate": "",
- "disabledOnQuickEntry": "False",
}
]
}Returns one requirements version of a rank: the newest by default, or the one given by versionId. Requirements are a flat list; nest them using parentRequirementId. Some old versions have no requirements.
| rankId required | integer >= 1 Examples: 1 Rank |
| versionId | integer >= 1 Examples: versionId=38 A |
{- "rankInformation": {
- "rankId": "19",
- "name": "Venturing",
- "version": "2020",
- "short": "Venturing",
- "reallyShort": "Venturing",
- "level": "1",
- "image": "venturing.png",
- "programId": "4",
- "searchKeywords": "Venturer Rank Award Requirements",
- "lds": "False",
- "sku": "620501",
- "price": "2.99",
- "priceLastUpdated": "2026-09-16",
- "scoutNet": "RV11",
- "header": "",
- "footer": "",
- "adminNotes": "",
- "proofReadDate": "",
- "active": "True",
- "disabledOnQuickEntry": "False"
}, - "requirements": [
- {
- "id": "1246",
- "versionId": "61",
- "name": "Participate in a crew activity outside of a crew meeting.",
- "short": "",
- "listNumber": "1",
- "requirementNumber": "1",
- "sortOrder": "1",
- "footer": "",
- "childrenRequired": "",
- "required": "True",
- "parentRequirementId": "",
- "videoExternalURLId": "",
- "previousRankRequired": "False",
- "monthsSinceLastRankRequired": "",
- "eagleMBRequired": "",
- "totalMBRequired": "",
- "serviceHoursRequired": "",
- "disabledOnQuickEntry": "False",
- "linkedAdventureId": "",
- "linkedAwardId": ""
}
]
}Returns all countries as an array sorted by short. With id, returns that one country as an object instead of an array.
| id | integer Examples: id=616 Return only the country with this |
[- {
- "name": "Africa",
- "short": "AB",
- "id": "388"
}, - {
- "name": "Ascension Island",
- "short": "AC",
- "id": "389"
}
]Returns all US states, DC, territories, and military (APO) codes as an array sorted by short. With id, returns that one state as an object instead of an array.
| id | integer Examples: id=55 Return only the state with this |
[- {
- "name": "AA-APO AA",
- "short": "AA",
- "id": "1"
}, - {
- "name": "AE-APO AE",
- "short": "AE",
- "id": "2"
}
]Returns all activity categories, including expired ones, as an array sorted by id.
[- {
- "id": 7,
- "name": "Veterans",
- "description": "Veterans",
- "actTypeId": 1,
- "effectiveDt": "1910-01-01",
- "expiryDt": ""
}, - {
- "id": 17,
- "name": "Building/construction",
- "description": "Building/construction",
- "actTypeId": 5,
- "effectiveDt": "1910-01-01",
- "expiryDt": "2022-10-19"
}
][- {
- "id": 1,
- "description": "ServiceProjects"
}, - {
- "id": 2,
- "description": "Camping"
}, - {
- "id": 3,
- "description": "Hikes"
}, - {
- "id": 4,
- "description": "Long Cruise"
}, - {
- "id": 5,
- "description": "Eagle Service Project"
}
]Returns all calendar event types, including expired ones, as an array sorted by id.
[- {
- "id": 4,
- "name": "Campout",
- "shortCode": "COT",
- "pack": false,
- "den": false,
- "troop": true,
- "patrol": true,
- "crew": true,
- "ship": true,
- "post": true,
- "club": true,
- "lab": true,
- "effectiveDt": "2014-01-01",
- "expiryDt": null
}, - {
- "id": 26,
- "name": "None",
- "shortCode": "NNE",
- "pack": true,
- "den": true,
- "troop": true,
- "patrol": true,
- "crew": true,
- "ship": true,
- "post": true,
- "club": true,
- "lab": true,
- "effectiveDt": "2014-01-01",
- "expiryDt": "2022-11-30"
}
][- {
- "id": "1",
- "name": "Scoutmaster",
- "minAge": "21",
- "maxAge": "",
- "isAdultPosition": "True",
- "isLeadershipPosition": "True",
- "positionCode": "SM",
- "isUnitPosition": "True",
- "isDistrictPosition": "False",
- "isCouncilPosition": "False",
- "isTerritoryPosition": null,
- "isNationalPosition": "False",
- "isRetired": "False",
- "akelaSkPositionCd": "SM",
- "akelaPositionId": "482",
- "isKey3": "True",
- "unitTypes": [
- {
- "image": "scoutmaster200.png",
- "unitTypeId": "2"
}
]
}
]Returns all swimming classifications as an array sorted by id.
[- {
- "id": 1899,
- "name": "Does not know how to swim",
- "short": "Nonswimmer",
- "effectiveDt": "2010-01-01",
- "expiryDt": null
}, - {
- "id": 1900,
- "name": "Beginner level swimming skills",
- "short": "Beginner",
- "effectiveDt": "2010-01-01",
- "expiryDt": null
}, - {
- "id": 1901,
- "name": "Knows how to swim",
- "short": "Swimmer",
- "effectiveDt": "2010-01-01",
- "expiryDt": null
}
][- {
- "timezoneCode": "Pacific/Honolulu"
}, - {
- "timezoneCode": "America/Anchorage"
}, - {
- "timezoneCode": "America/Los_Angeles"
}, - {
- "timezoneCode": "America/Denver"
}, - {
- "timezoneCode": "America/Chicago"
}, - {
- "timezoneCode": "America/New_York"
}
][- {
- "id": "2",
- "name": "Scouts BSA Troop",
- "short": "Troop",
- "minAge": "10",
- "maxAge": "99",
- "subUnitType": "Patrol",
- "unitCode": "S"
}, - {
- "id": "8",
- "name": "Exploring STEM Lab",
- "short": "Lab",
- "minAge": "",
- "maxAge": "99",
- "subUnitType": "",
- "unitCode": ""
}
]Returns youth leadership positions as an array sorted by id. These are a subset of the positions list, sharing its id values, but with native JSON types: numbers and booleans instead of strings, and null where the positions list has an empty string.
| unitTypeId | integer >= 1 Examples: unitTypeId=2 Return only positions for this unit type, with each position's |
[- {
- "id": 3,
- "name": "Senior Patrol Leader",
- "minAge": null,
- "maxAge": null,
- "positionCode": null,
- "isUnitPosition": true,
- "isDistrictPosition": false,
- "isCouncilPosition": false,
- "isTerritoryPosition": false,
- "isNationalPosition": false,
- "akelaSkPositionCd": null,
- "akelaPositionId": 501,
- "isKey3": false,
- "unitTypes": [
- {
- "image": "seniorpatrolleader200.png",
- "unitTypeId": 2
}
]
}
]Returns the groups communication types fall into, such as phone and email, as an array sorted by id.
[- {
- "id": "1",
- "name": "Phone"
}, - {
- "id": "2",
- "name": "Web"
}, - {
- "id": "3",
- "name": "Email"
}, - {
- "id": "4",
- "name": "Social Media"
}
]Returns the kinds of contact entry a person can have, such as a home email or mobile phone, as an array sorted by id.
[- {
- "id": "1",
- "classificationId": "3",
- "name": "Home Email",
- "short": "EMAL",
- "doNotDisplay": "False"
}, - {
- "id": "4",
- "classificationId": "1",
- "name": "Mobile ",
- "short": "M",
- "doNotDisplay": "False"
}, - {
- "id": "15",
- "classificationId": "4",
- "name": "Facebook",
- "short": "FB",
- "doNotDisplay": "True"
}
][- {
- "id": 1878,
- "name": "AT&T",
- "short": "AT&T",
- "effectiveDt": "2010-01-01",
- "expiryDt": null
}, - {
- "id": 1892,
- "name": "T-Mobile",
- "short": "T-Mobile",
- "effectiveDt": "2010-01-01",
- "expiryDt": null
}, - {
- "id": 1895,
- "name": "Verizon",
- "short": "Verizon",
- "effectiveDt": "2010-01-01",
- "expiryDt": null
}
]Returns all country calling codes for phone numbers as an array sorted by id.
[- {
- "name": "Not Provided",
- "short": "~~",
- "id": "635"
}, - {
- "name": "USA",
- "short": "001",
- "id": "636"
}, - {
- "name": "Canada",
- "short": "01",
- "id": "637"
}, - {
- "name": "Iran",
- "short": "98 ",
- "id": "854"
}
]Returns the person positions that have not expired, as an array sorted by positionId, with fields renamed and IDs as numbers. Fields match the person position list, except that isKey3 and isPlus3 can be null where that list has false.
| organizationType | integer Enum: 1 2 3 4 5 6 7 Examples: organizationType=4 Organization type |
[- {
- "positionId": 482,
- "positionShort": "SM V",
- "positionLong": "Scoutmaster",
- "isPaidRegistration": true,
- "relationshipType": "U",
- "skPositionTypeCd": "V",
- "isKey3": true,
- "isPlus3": false,
- "skPositionCd": "SM",
- "functionalPosition": false,
- "relationshipTypeId": 6,
- "isDirectContact": true,
- "isAdult": true,
- "isYouth": false,
- "isCBCRequired": true,
- "isDisplayed": true,
- "isExtendedAccess": "N"
}
][- {
- "id": "3",
- "name": "Area"
}, - {
- "id": "4",
- "name": "Council"
}, - {
- "id": "5",
- "name": "CouncilEntity"
}, - {
- "id": "8",
- "name": "CouncilServiceTerritory"
}, - {
- "id": "7",
- "name": "Group"
}, - {
- "id": "1",
- "name": "National"
}, - {
- "id": "2",
- "name": "Region"
}, - {
- "id": "6",
- "name": "Unit"
}
]Returns all school grades as an array sorted by id. Sort by displayOrder to get grade order, since Kindergarten has id 14.
[- {
- "id": 1,
- "gradeName": "First Grade",
- "displayOrder": 2
}, - {
- "id": 12,
- "gradeName": "Twelfth Grade",
- "displayOrder": 13
}, - {
- "id": 13,
- "gradeName": "Graduated High School",
- "displayOrder": 14
}, - {
- "id": 14,
- "gradeName": "Kindergarten / Grade Prior to the First Grade",
- "displayOrder": 1
}, - {
- "id": 15,
- "gradeName": "Other",
- "displayOrder": 15
}
][- {
- "id": "875",
- "name": "Junior",
- "short": "Jr."
}, - {
- "id": "876",
- "name": "Senior",
- "short": "Sr."
}, - {
- "id": "879",
- "name": "III",
- "short": "III"
}, - {
- "id": "1909",
- "name": "XII",
- "short": "XII"
}
]Returns all person positions, including expired ones, as an array sorted by id. These IDs are separate from the positions list's; that list and the youth leadership positions list link here through akelaPositionId, and the organization position list through positionId.
[- {
- "id": "482",
- "name": "Scoutmaster",
- "short": "SM V",
- "code": "SM",
- "typeCode": "V",
- "key3": true,
- "plus3": false,
- "organizationTypeId": "6",
- "organizationType": "Unit",
- "packPosition": false,
- "troopPosition": true,
- "teamPosition": false,
- "crewPosition": false,
- "shipPosition": false,
- "explorerPosition": false,
- "stemPosition": false,
- "paidRegistrationRequired": true,
- "isAdult": true,
- "cbcRequired": true,
- "extendedAccessEligible": "N",
- "directContact": true,
- "effectiveDate": "1911-01-01",
- "expiryDate": "",
- "functionalPositionFlag": false
}, - {
- "id": "501",
- "name": "Senior Patrol Leader",
- "short": "PTRL SLDR",
- "code": "F213",
- "typeCode": "F",
- "key3": false,
- "plus3": false,
- "organizationTypeId": "6",
- "organizationType": "Unit",
- "packPosition": false,
- "troopPosition": false,
- "teamPosition": false,
- "crewPosition": false,
- "shipPosition": false,
- "explorerPosition": false,
- "stemPosition": false,
- "paidRegistrationRequired": false,
- "isAdult": true,
- "cbcRequired": false,
- "extendedAccessEligible": "N",
- "directContact": false,
- "effectiveDate": "2013-05-05",
- "expiryDate": "",
- "functionalPositionFlag": true
}, - {
- "id": "660",
- "name": "Lion Coordinator",
- "short": "LC V",
- "code": "LC",
- "typeCode": "V",
- "key3": false,
- "plus3": true,
- "organizationTypeId": "",
- "organizationType": "",
- "packPosition": false,
- "troopPosition": false,
- "teamPosition": false,
- "crewPosition": false,
- "shipPosition": false,
- "explorerPosition": false,
- "stemPosition": false,
- "paidRegistrationRequired": true,
- "isAdult": true,
- "cbcRequired": true,
- "extendedAccessEligible": "N",
- "directContact": false,
- "effectiveDate": "2016-06-01",
- "expiryDate": "2025-05-31",
- "functionalPositionFlag": false
}
]Returns schools whose name matches name, as an array sorted by name. Filters combine with AND, and a search that matches nothing returns an empty list. At most 100,000 schools are returned.
| name required | string [ 2 .. 50 ] characters Examples: name=lincoln Case-insensitive search for schools whose |
| state | string >= 2 characters Examples: state=MI Return only schools whose |
| city | string [ 3 .. 50 ] characters Examples: city=ionia Return only schools whose |
| zip | string [ 3 .. 5 ] characters Examples: zip=48846 Return only schools whose |
[- {
- "zip": "48846",
- "address": "380 EAST TUTTLE RD",
- "city": "IONIA",
- "phone": null,
- "district": null,
- "name": "AA RATHER SCHOOL",
- "typeId": 8,
- "stateCode": "MI ",
- "id": 36294
}, - {
- "zip": "85042",
- "address": "7050 S. 24TH STREET",
- "city": "PHOENIX",
- "phone": "6022438004",
- "district": "ARIZONA AGRIBUSINESS & EQUINE CENTER INC",
- "name": "AAEC - SMCC CAMPUS",
- "typeId": 1,
- "stateCode": "AZ",
- "id": 7870
}
][- {
- "id": "889",
- "name": "Dr",
- "short": "DR"
}, - {
- "id": "890",
- "name": "Mr",
- "short": "MR"
}, - {
- "id": "891",
- "name": "Mrs",
- "short": "MRS"
}, - {
- "id": "892",
- "name": "Ms",
- "short": "MS"
}, - {
- "id": "893",
- "name": "Rev",
- "short": "REV"
}
]Returns all reasons a member can give for not renewing their registration, as an array sorted by id.
[- {
- "id": 1,
- "name": "Moved",
- "description": "Moved",
- "effectiveDt": "2023-08-01",
- "expiryDt": null,
- "createdBy": "NETBSA\\bsayapan",
- "createdDt": "2023-05-16T18:34:12",
- "lastModifiedBy": null,
- "lastModifiedDt": null
}, - {
- "id": 6,
- "name": "Not participating after registration expires",
- "description": "Not participating after registration expires",
- "effectiveDt": "2025-05-29",
- "expiryDt": null,
- "createdBy": "NETBSA\\bsasql2",
- "createdDt": "2025-05-29T08:42:08",
- "lastModifiedBy": null,
- "lastModifiedDt": null
}
]