{"files":{"SKILL.md":"---\nname: bc-geographical-names-web-service-rest-api\ndescription: \"BC Geographical Names Web Service - REST API skill. Use when working with BC Geographical Names Web Service - REST for names, features, featureClasses. Covers 14 endpoints.\"\nversion: 1.0.0\ngenerator: lapsh\n---\n\n# BC Geographical Names Web Service - REST API\nAPI version: 3.x.x\n\n## Auth\nNo authentication required.\n\n## Base URL\nhttps://apps.gov.bc.ca/pub/bcgnws\n\n## Setup\n1. No auth setup needed\n2. GET /names/search -- search by name\n3. Explore available endpoints below\n\n## Endpoints\n14 endpoints across 6 groups. See references/api-spec.lap for full details.\n\n### Names\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /names/search | Search by name |\n| GET | /names/official/search | Search by name, limit to official names only |\n| GET | /names/notOfficial/search | Search by name, limit to unofficial names only |\n| GET | /names/inside | Search in a geographic area |\n| GET | /names/near | Search near to a geographic point |\n| GET | /names/decisions/recent | Search for names affected by recent naming decision |\n| GET | /names/decisions/year | Search for names affected by naming decisions in a given year |\n| GET | /names/changes | Search for names with metadata changes in a given period |\n| GET | /names/{nameId}.{outputFormat} | Get a name by its nameId |\n\n### Features\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /features/{featureId} | Get a feature by its featureId |\n\n### FeatureClasses\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /featureClasses | Get all feature classes |\n\n### FeatureCategories\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /featureCategories | Get all feature categories |\n\n### FeatureTypes\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /featureTypes | Get all feature types |\n\n### NameAuthorities\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /nameAuthorities | Get all name authorities |\n\n## Common Questions\nMatch user requests to endpoints in references/api-spec.lap. Key patterns:\n- \"List all search?\" -> GET /names/search\n- \"List all inside?\" -> GET /names/inside\n- \"List all near?\" -> GET /names/near\n- \"List all recent?\" -> GET /names/decisions/recent\n- \"List all year?\" -> GET /names/decisions/year\n- \"List all changes?\" -> GET /names/changes\n- \"Get name details?\" -> GET /names/{nameId}.{outputFormat}\n- \"Get feature details?\" -> GET /features/{featureId}\n- \"List all featureClasses?\" -> GET /featureClasses\n- \"List all featureCategories?\" -> GET /featureCategories\n- \"List all featureTypes?\" -> GET /featureTypes\n- \"List all nameAuthorities?\" -> GET /nameAuthorities\n\n## Response Tips\n- Check response schemas in references/api-spec.lap for field details\n- Error responses include status codes and descriptions in the spec\n\n## References\n- Full spec: See references/api-spec.lap for complete endpoint details, parameter tables, and response schemas\n\n> Generated from the official API spec by [LAP](https://lap.sh)\n","references/api-spec.lap":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api BC Geographical Names Web Service - REST API\n@base https://apps.gov.bc.ca/pub/bcgnws\n@version 3.x.x\n@endpoints 14\n@toc names(9), features(1), featureClasses(1), featureCategories(1), featureTypes(1), nameAuthorities(1)\n\n@group names\n@endpoint GET /names/search\n@desc Search by name\n@required {outputFormat: str(json/xml/kml/csv)=json # The format of the output., name: str # A filter to search based on the the text of the name itself.  Use the asterisk (*) as a wildcard character.  For example 'vancouv*'}\n@optional {exactSpelling: int(0/1)=0 # If the 'name' parameter is specified, 'exactSpelling' specifies whether to include only names that exactly match the search text (exactSpelling=1), or whether to also include names with similar spellings (exactSpelling=0), featureClass: str=* # A filter to limit the search to names associated with features of a certain 'class'  The value of this parameter should be a 'featureClassCode' value returned by the /featureClasses resource, or an asterisk (*) to request that all feature classes be included., featureCategory: str=* # A filter to limit the search to names associated with features of a certain 'category'  The value of this parameter should be a 'featureCategoryCode' value returned by the /featureCategories resource, or an asterisk (*) to request that all feature categories be included., featureType: str=* # A filter to limit the search to names associated with features of a certain 'type'  The value of this parameter should be a 'featureTypeCode' value returned by the /featureTypes resource, or an asterisk (*) to request that all feature types be included, sortBy: str(relevance/name/featureType/decisionDate)=relevance # The distance to move the accessPoint away from the curb and towards the inside of the parcel (in metres). Ignored if locationDescriptor not set to accessPoint., outputSRS: int(4326/4269/3005/3857/26907/26908/26909/26910/26911)=4326 # The EPSG code of the spatial reference system (SRS) to use for output geometries., embed: int(0/1) # A flag to indicate whether to embed the corresponding 'feature' into each matching name, outputStyle: str(summary/detail)=summary # A flag indicating whether to include with each matching name a succinct list of attributes (summary), or a comprehensive list of attributes (detail), itemsPerPage: int=20 # The number of search results to return (1-200), startIndex: int=1 # The index of the first record to be returned (>= 1)}\n@returns(200) A list of names matching the search criteria\n@errors {400: A required parameter is missing or invalid}\n\n@endpoint GET /names/official/search\n@desc Search by name, limit to official names only\n@required {outputFormat: str(json/xml/kml/csv)=json # The format of the output., name: str # A filter to search based on the the text of the name itself.  Use the asterisk (*) as a wildcard character.  For example 'vancouv*'}\n@optional {exactSpelling: int(0/1)=0 # If the 'name' parameter is specified, 'exactSpelling' specifies whether to include only names that exactly match the search text (exactSpelling=1), or whether to also include names with similar spellings (exactSpelling=0), featureClass: str=* # A filter to limit the search to names associated with features of a certain 'class'  The value of this parameter should be a 'featureClassCode' value returned by the /featureClasses resource, or an asterisk (*) to request that all feature classes be included., featureCategory: str=* # A filter to limit the search to names associated with features of a certain 'category'  The value of this parameter should be a 'featureCategoryCode' value returned by the /featureCategories resource, or an asterisk (*) to request that all feature categories be included., featureType: str=* # A filter to limit the search to names associated with features of a certain 'type'  The value of this parameter should be a 'featureTypeCode' value returned by the /featureTypes resource, or an asterisk (*) to request that all feature types be included, sortBy: str(relevance/name/featureType/decisionDate)=relevance # The distance to move the accessPoint away from the curb and towards the inside of the parcel (in metres). Ignored if locationDescriptor not set to accessPoint., outputSRS: int(4326/4269/3005/3857/26907/26908/26909/26910/26911)=4326 # The EPSG code of the spatial reference system (SRS) to use for output geometries., embed: int(0/1) # A flag to indicate whether to embed the corresponding 'feature' into each matching name, outputStyle: str(summary/detail)=summary # A flag indicating whether to include with each matching name a succinct list of attributes (summary), or a comprehensive list of attributes (detail), itemsPerPage: int=20 # The number of search results to return (1-200), startIndex: int=1 # The index of the first record to be returned (>= 1)}\n@returns(200) A list of names matching the search criteria\n@errors {400: A required parameter is missing or invalid}\n\n@endpoint GET /names/notOfficial/search\n@desc Search by name, limit to unofficial names only\n@required {outputFormat: str(json/xml/kml/csv)=json # The format of the output., name: str # A filter to search based on the the text of the name itself.  Use the asterisk (*) as a wildcard character.  For example 'vancouv*'}\n@optional {exactSpelling: int(0/1)=0 # If the 'name' parameter is specified, 'exactSpelling' specifies whether to include only names that exactly match the search text (exactSpelling=1), or whether to also include names with similar spellings (exactSpelling=0), featureClass: str=* # A filter to limit the search to names associated with features of a certain 'class'  The value of this parameter should be a 'featureClassCode' value returned by the /featureClasses resource, or an asterisk (*) to request that all feature classes be included., featureCategory: str=* # A filter to limit the search to names associated with features of a certain 'category'  The value of this parameter should be a 'featureCategoryCode' value returned by the /featureCategories resource, or an asterisk (*) to request that all feature categories be included., featureType: str=* # A filter to limit the search to names associated with features of a certain 'type'  The value of this parameter should be a 'featureTypeCode' value returned by the /featureTypes resource, or an asterisk (*) to request that all feature types be included, sortBy: str(relevance/name/featureType/decisionDate)=relevance # The distance to move the accessPoint away from the curb and towards the inside of the parcel (in metres). Ignored if locationDescriptor not set to accessPoint., outputSRS: int(4326/4269/3005/3857/26907/26908/26909/26910/26911)=4326 # The EPSG code of the spatial reference system (SRS) to use for output geometries., embed: int(0/1) # A flag to indicate whether to embed the corresponding 'feature' into each matching name, outputStyle: str(summary/detail)=summary # A flag indicating whether to include with each matching name a succinct list of attributes (summary), or a comprehensive list of attributes (detail), itemsPerPage: int=20 # The number of search results to return (1-200), startIndex: int=1 # The index of the first record to be returned (>= 1)}\n@returns(200) A list of names matching the search criteria\n@errors {400: A required parameter is missing or invalid}\n\n@endpoint GET /names/inside\n@desc Search in a geographic area\n@required {outputFormat: str(json/xml/kml/csv)=json # The format of the output., bbox: str # A geographic bounding box defining the search area.  Must be specified as a string of the form 'minLongitude,minLatitude,maxLongitude,maxLatitude' (WGS84). e.g. -119,49,-118,50}\n@optional {featureClass: str=* # A filter to limit the search to names associated with features of a certain 'class'  The value of this parameter should be a 'featureClassCode' value returned by the /featureClasses resource, or an asterisk (*) to request that all feature classes be included., featureCategory: str=* # A filter to limit the search to names associated with features of a certain 'category'  The value of this parameter should be a 'featureCategoryCode' value returned by the /featureCategories resource, or an asterisk (*) to request that all feature categories be included., featureType: str=* # A filter to limit the search to names associated with features of a certain 'type'  The value of this parameter should be a 'featureTypeCode' value returned by the /featureTypes resource, or an asterisk (*) to request that all feature types be included, sortBy: str(name/featureType/decisionDate)=name # The distance to move the accessPoint away from the curb and towards the inside of the parcel (in metres). Ignored if locationDescriptor not set to accessPoint., outputSRS: int(4326/4269/3005/3857/26907/26908/26909/26910/26911)=4326 # The EPSG code of the spatial reference system (SRS) to use for output geometries., embed: int(0/1) # A flag to indicate whether to embed the corresponding 'feature' into each matching name, outputStyle: str(summary/detail)=summary # A flag indicating whether to include with each matching name a succinct list of attributes (summary), or a comprehensive list of attributes (detail), itemsPerPage: int=20 # The number of search results to return (1-200), startIndex: int=1 # The index of the first record to be returned (>= 1)}\n@returns(200) A list of names matching the search criteria\n@errors {400: A required parameter is missing or invalid}\n\n@endpoint GET /names/near\n@desc Search near to a geographic point\n@required {outputFormat: str(json/xml/kml/csv)=json # The format of the output., featurePoint: str # A geographic coordinate specifying the centre point of the search area.  Must be specified as a string of the form 'longitude,latitude' (WGS84).  e.g. -120,51, distance: str # A radius (in kilometres) around the centre point.}\n@optional {featureClass: str=* # A filter to limit the search to names associated with features of a certain 'class'  The value of this parameter should be a 'featureClassCode' value returned by the /featureClasses resource, or an asterisk (*) to request that all feature classes be included., featureCategory: str=* # A filter to limit the search to names associated with features of a certain 'category'  The value of this parameter should be a 'featureCategoryCode' value returned by the /featureCategories resource, or an asterisk (*) to request that all feature categories be included., featureType: str=* # A filter to limit the search to names associated with features of a certain 'type'  The value of this parameter should be a 'featureTypeCode' value returned by the /featureTypes resource, or an asterisk (*) to request that all feature types be included, sortBy: str(name/featureType/decisionDate)=name # The distance to move the accessPoint away from the curb and towards the inside of the parcel (in metres). Ignored if locationDescriptor not set to accessPoint., outputSRS: int(4326/4269/3005/3857/26907/26908/26909/26910/26911)=4326 # The EPSG code of the spatial reference system (SRS) to use for output geometries., embed: int(0/1) # A flag to indicate whether to embed the corresponding 'feature' into each matching name, outputStyle: str(summary/detail)=summary # A flag indicating whether to include with each matching name a succinct list of attributes (summary), or a comprehensive list of attributes (detail), itemsPerPage: int=20 # The number of search results to return (1-200), startIndex: int=1 # The index of the first record to be returned (>= 1)}\n@returns(200) A list of names matching the search criteria\n@errors {400: A required parameter is missing or invalid}\n\n@endpoint GET /names/decisions/recent\n@desc Search for names affected by recent naming decision\n@required {outputFormat: str(json/xml/kml/csv)=json # The format of the output., days: int=30 # The number of days used to define the time window of naming decisions to search.  The number is interpreted as searching for 'names affected by decisions within the last X days'.}\n@optional {featureClass: str=* # A filter to limit the search to names associated with features of a certain 'class'  The value of this parameter should be a 'featureClassCode' value returned by the /featureClasses resource, or an asterisk (*) to request that all feature classes be included., featureCategory: str=* # A filter to limit the search to names associated with features of a certain 'category'  The value of this parameter should be a 'featureCategoryCode' value returned by the /featureCategories resource, or an asterisk (*) to request that all feature categories be included., featureType: str=* # A filter to limit the search to names associated with features of a certain 'type'  The value of this parameter should be a 'featureTypeCode' value returned by the /featureTypes resource, or an asterisk (*) to request that all feature types be included, sortBy: str(name/featureType/decisionDate)=name # The distance to move the accessPoint away from the curb and towards the inside of the parcel (in metres). Ignored if locationDescriptor not set to accessPoint., outputSRS: int(4326/4269/3005/3857/26907/26908/26909/26910/26911)=4326 # The EPSG code of the spatial reference system (SRS) to use for output geometries., embed: int(0/1) # A flag to indicate whether to embed the corresponding 'feature' into each matching name, outputStyle: str(summary/detail)=summary # A flag indicating whether to include with each matching name a succinct list of attributes (summary), or a comprehensive list of attributes (detail), itemsPerPage: int=20 # The number of search results to return (1-200), startIndex: int=1 # The index of the first record to be returned (>= 1)}\n@returns(200) A list of names matching the search criteria\n@errors {400: A required parameter is missing or invalid}\n\n@endpoint GET /names/decisions/year\n@desc Search for names affected by naming decisions in a given year\n@required {outputFormat: str(json/xml/kml/csv)=json # The format of the output., year: int # The year in which to search for names affected by naming decisions'.}\n@optional {featureClass: str=* # A filter to limit the search to names associated with features of a certain 'class'  The value of this parameter should be a 'featureClassCode' value returned by the /featureClasses resource, or an asterisk (*) to request that all feature classes be included., featureCategory: str=* # A filter to limit the search to names associated with features of a certain 'category'  The value of this parameter should be a 'featureCategoryCode' value returned by the /featureCategories resource, or an asterisk (*) to request that all feature categories be included., featureType: str=* # A filter to limit the search to names associated with features of a certain 'type'  The value of this parameter should be a 'featureTypeCode' value returned by the /featureTypes resource, or an asterisk (*) to request that all feature types be included, sortBy: str(name/featureType/decisionDate)=name # The distance to move the accessPoint away from the curb and towards the inside of the parcel (in metres). Ignored if locationDescriptor not set to accessPoint., outputSRS: int(4326/4269/3005/3857/26907/26908/26909/26910/26911)=4326 # The EPSG code of the spatial reference system (SRS) to use for output geometries., embed: int(0/1) # A flag to indicate whether to embed the corresponding 'feature' into each matching name, outputStyle: str(summary/detail)=summary # A flag indicating whether to include with each matching name a succinct list of attributes (summary), or a comprehensive list of attributes (detail), itemsPerPage: int=20 # The number of search results to return (1-200), startIndex: int=1 # The index of the first record to be returned (>= 1)}\n@returns(200) A list of names matching the search criteria\n@errors {400: A required parameter is missing or invalid}\n\n@endpoint GET /names/changes\n@desc Search for names with metadata changes in a given period\n@required {outputFormat: str(json/xml/kml/csv)=json # The format of the output., fromDate: int # Defines the earliest date (YYYY-MM-DD format) of the change time window for the search, toDate: int # Defines the latest date (YYYY-MM-DD format) of the change time window for the search}\n@optional {featureClass: str=* # A filter to limit the search to names associated with features of a certain 'class'  The value of this parameter should be a 'featureClassCode' value returned by the /featureClasses resource, or an asterisk (*) to request that all feature classes be included., featureCategory: str=* # A filter to limit the search to names associated with features of a certain 'category'  The value of this parameter should be a 'featureCategoryCode' value returned by the /featureCategories resource, or an asterisk (*) to request that all feature categories be included., featureType: str=* # A filter to limit the search to names associated with features of a certain 'type'  The value of this parameter should be a 'featureTypeCode' value returned by the /featureTypes resource, or an asterisk (*) to request that all feature types be included, sortBy: str(name/featureType/decisionDate)=name # The distance to move the accessPoint away from the curb and towards the inside of the parcel (in metres). Ignored if locationDescriptor not set to accessPoint., outputSRS: int(4326/4269/3005/3857/26907/26908/26909/26910/26911)=4326 # The EPSG code of the spatial reference system (SRS) to use for output geometries., embed: int(0/1) # A flag to indicate whether to embed the corresponding 'feature' into each matching name, outputStyle: str(summary/detail)=summary # A flag indicating whether to include with each matching name a succinct list of attributes (summary), or a comprehensive list of attributes (detail), itemsPerPage: int=20 # The number of search results to return (1-200), startIndex: int=1 # The index of the first record to be returned (>= 1)}\n@returns(200) A list of names matching the search criteria\n@errors {400: A required parameter is missing or invalid}\n\n@endpoint GET /names/{nameId}.{outputFormat}\n@desc Get a name by its nameId\n@required {nameId: int # The unique identifier for a name, outputFormat: str(json/xml/kml/csv/html)=json # The format of the output.}\n@returns(200) Information about the name with the specified nameId\n@errors {404: The name with the given nameId doesn't exist, or the output format is invalid.}\n\n@endgroup\n\n@group features\n@endpoint GET /features/{featureId}\n@desc Get a feature by its featureId\n@required {featureId: int # The unique identifier for a feature}\n@returns(200) Information about the feature with the specified featureId (XML format only)\n@errors {404: The feature with the given featureId doesn't exist}\n\n@endgroup\n\n@group featureClasses\n@endpoint GET /featureClasses\n@desc Get all feature classes\n@required {outputFormat: str(json/xml)=json # The format of the output.}\n@returns(200) A list of feature classes\n\n@endgroup\n\n@group featureCategories\n@endpoint GET /featureCategories\n@desc Get all feature categories\n@required {outputFormat: str(json/xml)=json # The format of the output.}\n@returns(200) A list of feature categories\n\n@endgroup\n\n@group featureTypes\n@endpoint GET /featureTypes\n@desc Get all feature types\n@required {outputFormat: str(json/xml)=json # The format of the output.}\n@returns(200) A list of feature types\n\n@endgroup\n\n@group nameAuthorities\n@endpoint GET /nameAuthorities\n@desc Get all name authorities\n@required {outputFormat: str(json/xml)=json # The format of the output.}\n@returns(200) A list of name authorities\n\n@endgroup\n\n@end\n"}}