diff --git a/independent-publisher-connectors/LegiScan/ConnectorPackage.zip b/independent-publisher-connectors/LegiScan/ConnectorPackage.zip new file mode 100644 index 0000000000..f696f351ac Binary files /dev/null and b/independent-publisher-connectors/LegiScan/ConnectorPackage.zip differ diff --git a/independent-publisher-connectors/LegiScan/README.md b/independent-publisher-connectors/LegiScan/README.md new file mode 100644 index 0000000000..9bd181c192 --- /dev/null +++ b/independent-publisher-connectors/LegiScan/README.md @@ -0,0 +1,71 @@ +# LegiScan (Independent Publisher) + +LegiScan is a legislative tracking and data service that provides real-time information on state and federal legislation. This connector allows users to programmatically access bill information, session data, people profiles, voting records, search results, and monitor states at the local level for all 50 U.S. states and Congress. + +## Publisher: Dan Romano (swolcat) + +## Prerequisites + +You will need a [LegiScan Civic API key](https://legiscan.com/civic_api) to use this connector. Sign up via the LegiScan website to obtain access credentials. + +The connector currently supports the following operations: + +### Sessions & Metadata +- **GetSessionList**: Retrieves a list of all available sessions for each supported state and Congress. +- **GetMasterListRaw**: Returns a raw dictionary of all bills for a given session. +- **GetDatasetList**: Lists datasets of bulk legislative data for all states. +- **GetDataset**: Returns metadata for a specific dataset. +- **GetDatasetRaw**: Retrieves the full dataset contents for bulk processing. + +### Bill Information +- **GetBill**: Returns structured information about a specific bill. +- **GetBillText**: Returns the full text of a specific bill. +- **GetAmendment**: Returns the content of a specific amendment. +- **GetSupplement**: Retrieves a supplement or attachment to a bill. + +### Voting and People +- **GetRollCall**: Returns voting results for a specific roll call. +- **GetPerson**: Retrieves information about a legislator, sponsor, or associated person. +- **GetSessionPeople**: Returns all persons associated with a specific session. +- **GetSponsoredList**: Returns a list of bills sponsored by a person. + +### Search +- **GetSearchResults**: Returns structured search results for a query. +- **GetSearchRawResults**: Returns raw search results suitable for diffing or auditing. + +### Monitoring +- **GetMonitorList**: Returns the structured list of monitored bills. +- **GetMonitorListRaw**: Returns a lightweight version of the monitor list for change detection workflows. +- **SetMonitor**: Sets or updates the list of monitored bills for your account. + +## Obtaining Credentials + +1. Go to [https://legiscan.com/](https://legiscan.com/). +2. Click on "Generate Key!" +3. On the next page, find the "Sign up here" link or visit https://legiscan.com/user/register +4. After approval, you will receive an API key to use in the connector. + +## Getting Started + +1. Obtain an API key from LegiScan. +2. Read the docs: https://legiscan.com/misc/LegiScan_API_User_Manual.pdf + +## Known Issues and Limitations + +- Rate-limited depending on your API subscription tier. +- Full bill text may not be immediately available after introduction. +- Some state-level data may lag or be incomplete depending on legislature update frequency. + +## Frequently Asked Questions + +**Q:** Does this connector support federal legislation? + +**A:** Yes, LegiScan includes U.S. Congress in addition to all 50 states. + +**Q:** Can I track bill progress? + +**A:** Yes, each bill includes a status and history of actions. + +**Q:** Does this connector support state legislation? + +**A:** Yes, LegiScan includes legislation activity for all 50 US states. diff --git a/independent-publisher-connectors/LegiScan/apiDefinition.swagger.json b/independent-publisher-connectors/LegiScan/apiDefinition.swagger.json new file mode 100644 index 0000000000..16a9afedab --- /dev/null +++ b/independent-publisher-connectors/LegiScan/apiDefinition.swagger.json @@ -0,0 +1,2785 @@ +{ + "swagger": "2.0", + "info": { + "title": "LegiScan", + "description": "Access legislative information from all 50 states and Congress using the LegiScan API.", + "version": "1.0", + "contact": { + "name": "Dan Romano", + "url": "https://developments.substack.com", + "email": "dan.romano@swolcat.com" + } + }, + "x-ms-connector-metadata": [ + { + "propertyName": "Website", + "propertyValue": "https://legiscan.com/" + }, + { + "propertyName": "Privacy policy", + "propertyValue": "https://legiscan.com/privacy" + }, + { + "propertyName": "Categories", + "propertyValue": "Data" + } + ], + "host": "api.legiscan.com", + "schemes": [ + "https" + ], + "basePath": "/", + "consumes": [], + "produces": [ + "application/json" + ], + "paths": { + "/getSessionList": { + "get": { + "operationId": "GetSessionList", + "summary": "Get list of available sessions", + "description": "Returns a list of sessions that are available for access in the given state abbreviation, or all sessions if no state is given.", + "parameters": [ + { + "name": "key", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "API Key", + "description": "Your API key for accessing LegiScan." + }, + { + "name": "op", + "in": "query", + "type": "string", + "required": true, + "default": "getSessionList", + "enum": [ + "getSessionList" + ], + "x-ms-summary": "Operation", + "description": "Operation to call" + }, + { + "name": "state", + "in": "query", + "type": "string", + "required": false, + "x-ms-summary": "State Abbreviation", + "description": "Retrieve sessions for this state" + } + ], + "responses": { + "200": { + "description": "Successful response", + "schema": { + "$ref": "#/definitions/GetSessionListResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "429": { + "description": "Too Many Requests (Rate Limit Exceeded)", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + }, + "x-ms-visibility": "important" + } + }, + "/getMasterList": { + "get": { + "operationId": "GetMasterList", + "summary": "Get Master List of Bills", + "description": "Retrieves a master list of summary bill data in the specified session (id) or for the current session in a given state (state).\n", + "x-ms-summary": "Get Master List of Bills", + "parameters": [ + { + "name": "key", + "in": "query", + "required": true, + "type": "string", + "x-ms-summary": "API Key", + "description": "Your LegiScan API key." + }, + { + "name": "op", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "getMasterList" + ], + "default": "getMasterList", + "x-ms-summary": "Operation Name", + "description": "Fixed value of `getMasterList` required by the LegiScan API." + }, + { + "name": "id", + "in": "query", + "type": "integer", + "required": false, + "x-ms-summary": "Session ID", + "description": "The numeric ID of the legislative session" + }, + { + "name": "state", + "in": "query", + "required": true, + "type": "string", + "x-ms-summary": "State Abbreviation", + "description": "Retrieve bill master list for the current session in the given state (use with caution)." + } + ], + "responses": { + "200": { + "description": "Successful response with master list of bills", + "schema": { + "$ref": "#/definitions/MasterListResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "429": { + "description": "Too Many Requests (Rate Limit Exceeded)", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + }, + "x-ms-visibility": "important" + } + }, + "/getMasterListRaw": { + "get": { + "operationId": "GetMasterListRaw", + "summary": "Get raw master list of bills", + "description": "Retrieve master bill list optimized for change_hash detection", + "parameters": [ + { + "name": "key", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "API Key", + "description": "Your API key for accessing LegiScan" + }, + { + "name": "op", + "in": "query", + "type": "string", + "required": true, + "default": "getMasterListRaw", + "enum": [ + "getMasterListRaw" + ], + "x-ms-summary": "Operation", + "description": "The LegiScan operation name" + }, + { + "name": "id", + "in": "query", + "type": "integer", + "required": false, + "x-ms-summary": "Session ID", + "description": "The numeric ID of the legislative session" + }, + { + "name": "state", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "State Abbreviation", + "description": "Two-letter state abbreviation (e.g., 'NY') to filter bills by state" + } + ], + "responses": { + "200": { + "description": "Master List Raw", + "schema": { + "$ref": "#/definitions/MasterListRawResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "429": { + "description": "Too Many Requests (Rate Limit Exceeded)", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + }, + "x-ms-visibility": "important" + } + }, + "/getBill": { + "get": { + "operationId": "GetBill", + "summary": "Get detailed bill information", + "description": "Retrieve bill detail information for a given bill_id", + "parameters": [ + { + "name": "key", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "API Key", + "description": "Your API key for accessing LegiScan." + }, + { + "name": "op", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "Operation", + "description": "The LegiScan operation name", + "default": "getBill", + "enum": [ + "getBill" + ] + }, + { + "name": "id", + "in": "query", + "type": "integer", + "required": true, + "x-ms-summary": "Bill ID", + "description": "Bill identifier" + } + ], + "responses": { + "200": { + "description": "Bill details", + "schema": { + "$ref": "#/definitions/GetBillResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "429": { + "description": "Too Many Requests (Rate Limit Exceeded)", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + }, + "x-ms-visibility": "important" + } + }, + "/getBillText": { + "get": { + "operationId": "GetBillText", + "summary": "Get bill text", + "description": "Retrieve full bill text for a given doc_id", + "parameters": [ + { + "name": "key", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "API Key", + "description": "Your API key for accessing LegiScan." + }, + { + "name": "op", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "Operation", + "description": "The LegiScan operation name", + "default": "getBillText", + "enum": [ + "getBillText" + ] + }, + { + "name": "id", + "in": "query", + "type": "integer", + "required": true, + "x-ms-summary": "Doc ID", + "description": "Document ID" + } + ], + "responses": { + "200": { + "description": "Bill text response", + "schema": { + "$ref": "#/definitions/BillTextResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "429": { + "description": "Too Many Requests (Rate Limit Exceeded)", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + }, + "x-ms-visibility": "important" + } + }, + "/getAmendment": { + "get": { + "operationId": "GetAmendment", + "summary": "Get amendment", + "description": "Retrieve amendment text for a given amendment_id", + "parameters": [ + { + "name": "key", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "API Key", + "description": "Your API key for accessing LegiScan." + }, + { + "name": "op", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "Operation", + "description": "The LegiScan operation name", + "default": "getAmendment", + "enum": [ + "getAmendment" + ] + }, + { + "name": "id", + "in": "query", + "type": "integer", + "required": true, + "x-ms-summary": "Amendment ID", + "description": "Amendment ID" + } + ], + "responses": { + "200": { + "description": "Amendment response", + "schema": { + "$ref": "#/definitions/BillAmendmentResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "429": { + "description": "Too Many Requests (Rate Limit Exceeded)", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + }, + "x-ms-visibility": "important" + } + }, + "/getSupplement": { + "get": { + "operationId": "GetSupplement", + "summary": "Get supplement", + "description": "Retrieve supplemental document for a given supplement_id", + "parameters": [ + { + "name": "key", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "API Key", + "description": "Your API key for accessing LegiScan." + }, + { + "name": "op", + "in": "query", + "type": "string", + "required": true, + "description": "The LegiScan operation name", + "default": "getSupplement", + "enum": [ + "getSupplement" + ], + "x-ms-summary": "Operation" + }, + { + "name": "id", + "in": "query", + "type": "integer", + "required": true, + "x-ms-summary": "Supplement ID", + "description": "Supplement ID" + } + ], + "responses": { + "200": { + "description": "Supplement response", + "schema": { + "$ref": "#/definitions/SupplementResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "429": { + "description": "Too Many Requests (Rate Limit Exceeded)", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + }, + "x-ms-visibility": "important" + } + }, + "/getRollCall": { + "get": { + "operationId": "GetRollCall", + "summary": "Get roll call detail", + "description": "Retrieve roll call vote information for a given roll_call_id", + "parameters": [ + { + "name": "key", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "API Key", + "description": "Your API key for accessing LegiScan." + }, + { + "name": "op", + "in": "query", + "type": "string", + "required": true, + "description": "The LegiScan operation name", + "default": "getRollCall", + "enum": [ + "getRollCall" + ], + "x-ms-summary": "Operation" + }, + { + "name": "id", + "in": "query", + "type": "integer", + "required": true, + "x-ms-summary": "Roll Call ID", + "description": "Roll Call ID" + } + ], + "responses": { + "200": { + "description": "Roll call detail response", + "schema": { + "$ref": "#/definitions/RollCallResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "429": { + "description": "Too Many Requests (Rate Limit Exceeded)", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + }, + "x-ms-visibility": "important" + } + }, + "/getPerson": { + "get": { + "operationId": "GetPerson", + "summary": "Get person (sponsor) information", + "description": "Retrieve basic information for a given people_id", + "parameters": [ + { + "name": "key", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "API Key", + "description": "Your API key for accessing LegiScan." + }, + { + "name": "op", + "in": "query", + "type": "string", + "required": true, + "description": "The LegiScan operation name", + "default": "getPerson", + "enum": [ + "getPerson" + ], + "x-ms-summary": "Operation" + }, + { + "name": "id", + "in": "query", + "type": "integer", + "required": true, + "x-ms-summary": "People ID", + "description": "Person ID" + } + ], + "responses": { + "200": { + "description": "Person detail response", + "schema": { + "$ref": "#/definitions/PersonResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "429": { + "description": "Too Many Requests (Rate Limit Exceeded)", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + }, + "x-ms-visibility": "important" + } + }, + "/getSearch": { + "get": { + "operationId": "GetSearchResults", + "summary": "Search bills by full text", + "description": "Retrieve results from the full text search engine (50 results). Performs a full-text search of legislation using the LegiScan engine. You can search by state abbreviation or session ID. The response includes paginated results and a change_hash to track updates.", + "parameters": [ + { + "name": "key", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "API Key", + "description": "Your API key for accessing LegiScan." + }, + { + "name": "op", + "in": "query", + "type": "string", + "required": true, + "description": "The LegiScan operation name", + "default": "getSearch", + "enum": [ + "getSearch" + ], + "x-ms-summary": "Operation" + }, + { + "name": "state", + "in": "query", + "type": "string", + "required": false, + "x-ms-summary": "State Abbreviation", + "description": "Use state abbreviation (e.g., 'NY') or 'ALL'. Optional if using session ID." + }, + { + "name": "id", + "in": "query", + "type": "integer", + "required": false, + "x-ms-summary": "Session ID", + "description": "Use session_id instead of state to target a specific session." + }, + { + "name": "query", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "Search Query", + "description": "Full-text query string to run against the search engine." + }, + { + "name": "year", + "in": "query", + "type": "integer", + "required": false, + "default": 2, + "x-ms-summary": "Year Filter", + "description": "1 = all, 2 = current, 3 = recent, 4 = prior, or exact year > 1900." + }, + { + "name": "page", + "in": "query", + "type": "integer", + "required": false, + "default": 1, + "x-ms-summary": "Page Number", + "description": "Result page number to return." + } + ], + "responses": { + "200": { + "description": "Paginated search results", + "schema": { + "$ref": "#/definitions/SearchResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "429": { + "description": "Too Many Requests (Rate Limit Exceeded)", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + }, + "x-ms-visibility": "important" + } + }, + "/getSearchRaw": { + "get": { + "operationId": "GetSearchRawResults", + "summary": "Get simplified search results for automated monitoring", + "description": "Retrieve results from the full text search engine. 2000 results. Performs a full-text search with simplified result structure, returning up to 2000 records at a time. This endpoint is optimized for keyword monitoring across states or sessions.", + "parameters": [ + { + "name": "key", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "API Key", + "description": "Your API key for accessing LegiScan." + }, + { + "name": "op", + "in": "query", + "type": "string", + "required": true, + "description": "The LegiScan operation name", + "default": "getSearchRaw", + "enum": [ + "getSearchRaw" + ], + "x-ms-summary": "Operation" + }, + { + "name": "state", + "in": "query", + "type": "string", + "required": false, + "x-ms-summary": "State Abbreviation", + "description": "State abbreviation (e.g. 'TX') or 'ALL' for all states. Optional if session ID is used." + }, + { + "name": "id", + "in": "query", + "type": "integer", + "required": false, + "x-ms-summary": "Session ID", + "description": "Limit search to a specific session_id." + }, + { + "name": "query", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "Search Query", + "description": "Full text query string, URL-encoded." + }, + { + "name": "year", + "in": "query", + "type": "integer", + "required": false, + "default": 2, + "x-ms-summary": "Year Filter", + "description": "1 = all, 2 = current, 3 = recent, 4 = prior, or a year > 1900." + }, + { + "name": "page", + "in": "query", + "type": "integer", + "required": false, + "default": 1, + "x-ms-summary": "Page Number", + "description": "Page of results to return (up to 2000 records per page)." + } + ], + "responses": { + "200": { + "description": "Simplified paginated search results", + "schema": { + "$ref": "#/definitions/SearchRawResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "429": { + "description": "Too Many Requests (Rate Limit Exceeded)", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + }, + "x-ms-visibility": "important" + } + }, + "/getDatasetList": { + "get": { + "operationId": "GetDatasetList", + "summary": "Get list of available session datasets", + "description": "Retrieve list of available dataset snapshots", + "parameters": [ + { + "name": "key", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "API Key", + "description": "Your API key for accessing LegiScan." + }, + { + "name": "op", + "in": "query", + "type": "string", + "required": true, + "description": "The LegiScan operation name", + "default": "getDatasetList", + "enum": [ + "getDatasetList" + ], + "x-ms-summary": "Operation" + }, + { + "name": "state", + "in": "query", + "type": "string", + "required": false, + "x-ms-summary": "State Abbreviation", + "description": "Optional state filter for datasets." + }, + { + "name": "year", + "in": "query", + "type": "integer", + "required": false, + "x-ms-summary": "Year Filter", + "description": "Optional year filter for datasets." + } + ], + "responses": { + "200": { + "description": "List of available datasets", + "schema": { + "$ref": "#/definitions/DatasetListResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "429": { + "description": "Too Many Requests (Rate Limit Exceeded)", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + }, + "x-ms-visibility": "important" + } + }, + "/getDataset": { + "get": { + "operationId": "GetDataset", + "summary": "Get dataset archive for a legislative session", + "description": "Retrieve an individual dataset for a specific session_id", + "parameters": [ + { + "name": "key", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "API Key", + "description": "Your API key for accessing LegiScan." + }, + { + "name": "op", + "in": "query", + "type": "string", + "required": true, + "description": "The LegiScan operation name", + "default": "getDataset", + "enum": [ + "getDataset" + ], + "x-ms-summary": "Operation" + }, + { + "name": "id", + "in": "query", + "type": "integer", + "required": true, + "x-ms-summary": "Session ID", + "description": "The session_id of the dataset to retrieve." + }, + { + "name": "access_key", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "Access Key", + "description": "The access_key from the corresponding getDatasetList response." + }, + { + "name": "format", + "in": "query", + "type": "string", + "required": false, + "default": "json", + "enum": [ + "json", + "csv" + ], + "x-ms-summary": "Format", + "description": "Optional format of the files inside the ZIP archive. Defaults to JSON." + } + ], + "responses": { + "200": { + "description": "ZIP archive response", + "schema": { + "$ref": "#/definitions/DatasetArchiveResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "429": { + "description": "Too Many Requests (Rate Limit Exceeded)", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + }, + "x-ms-visibility": "important" + } + }, + "/getDatasetRaw": { + "get": { + "operationId": "GetDatasetRaw", + "summary": "Get raw ZIP dataset for a session", + "description": "Returns a raw ZIP archive containing all bills, votes, and people data for a specific session. This is a binary stream suitable for file download.\n", + "parameters": [ + { + "name": "key", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "API Key", + "description": "Your API key for accessing LegiScan." + }, + { + "name": "op", + "in": "query", + "type": "string", + "required": true, + "description": "The LegiScan operation name", + "default": "getDatasetRaw", + "enum": [ + "getDatasetRaw" + ], + "x-ms-summary": "Operation" + }, + { + "name": "id", + "in": "query", + "type": "integer", + "required": true, + "x-ms-summary": "Session ID", + "description": "The session_id of the dataset to retrieve." + }, + { + "name": "access_key", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "Access Key", + "description": "The access_key from the corresponding getDatasetList response." + }, + { + "name": "format", + "in": "query", + "type": "string", + "required": false, + "default": "json", + "enum": [ + "json", + "csv" + ], + "x-ms-summary": "Format", + "description": "Optional format for the contents of the ZIP archive (json or csv)." + } + ], + "responses": { + "200": { + "description": "ZIP archive returned as binary stream", + "schema": { + "type": "string", + "format": "binary" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "429": { + "description": "Too Many Requests (Rate Limit Exceeded)", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + }, + "x-ms-visibility": "important" + } + }, + "/getSessionPeople": { + "get": { + "operationId": "GetSessionPeople", + "summary": "Get people records active in a session", + "description": "Retrieve list of people active in a specific session_id", + "parameters": [ + { + "name": "key", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "API Key", + "description": "Your API key for accessing LegiScan." + }, + { + "name": "op", + "in": "query", + "type": "string", + "required": true, + "default": "getSessionPeople", + "enum": [ + "getSessionPeople" + ], + "x-ms-summary": "Operation", + "description": "The LegiScan operation name." + }, + { + "name": "id", + "in": "query", + "type": "integer", + "required": true, + "x-ms-summary": "Session ID", + "description": "The session_id for which to retrieve active people." + } + ], + "responses": { + "200": { + "description": "People records and session info for a given session", + "schema": { + "$ref": "#/definitions/SessionPeopleResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "429": { + "description": "Too Many Requests (Rate Limit Exceeded)", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + }, + "x-ms-visibility": "important" + } + }, + "/getSponsoredList": { + "get": { + "operationId": "GetSponsoredList", + "summary": "Get sponsored bills by legislator", + "description": "Retrieve list of bills sponsored by an individual people_id", + "parameters": [ + { + "name": "key", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "API Key", + "description": "Your API key for accessing LegiScan." + }, + { + "name": "op", + "in": "query", + "type": "string", + "required": true, + "default": "getSponsoredList", + "enum": [ + "getSponsoredList" + ], + "x-ms-summary": "Operation", + "description": "The LegiScan operation name." + }, + { + "name": "id", + "in": "query", + "type": "integer", + "required": true, + "x-ms-summary": "People ID", + "description": "The legislator’s people_id to retrieve sponsored bills for." + } + ], + "responses": { + "200": { + "description": "List of sponsored bills with sponsor and session metadata", + "schema": { + "$ref": "#/definitions/SponsoredListResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "429": { + "description": "Too Many Requests (Rate Limit Exceeded)", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + }, + "x-ms-visibility": "important" + } + }, + "/getMonitorList": { + "get": { + "operationId": "GetMonitorList", + "summary": "Get GAITS monitor list", + "description": "Retrieve bills from GAITS monitor list", + "parameters": [ + { + "name": "key", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "API Key", + "description": "Your API key for accessing LegiScan." + }, + { + "name": "op", + "in": "query", + "type": "string", + "required": true, + "default": "getMonitorList", + "enum": [ + "getMonitorList" + ], + "x-ms-summary": "Operation", + "description": "The LegiScan operation name." + }, + { + "name": "record", + "in": "query", + "type": "string", + "required": false, + "default": "current", + "x-ms-summary": "Record Filter", + "description": "Filter to return current or archived monitors. Values: `current`, `archived`, or year (e.g., `2019`)\n" + } + ], + "responses": { + "200": { + "description": "GAITS monitor list containing bill metadata", + "schema": { + "$ref": "#/definitions/MonitorListResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "429": { + "description": "Too Many Requests (Rate Limit Exceeded)", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + }, + "x-ms-visibility": "important" + } + }, + "/getMonitorListRaw": { + "get": { + "operationId": "GetMonitorListRaw", + "summary": "Get GAITS monitor list (Raw)", + "description": "Retrieve bills from GAITS monitor list for change_hash detection", + "parameters": [ + { + "name": "key", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "API Key", + "description": "Your API key for accessing LegiScan." + }, + { + "name": "op", + "in": "query", + "type": "string", + "required": true, + "default": "getMonitorListRaw", + "enum": [ + "getMonitorListRaw" + ], + "x-ms-summary": "Operation", + "description": "The LegiScan operation name." + }, + { + "name": "record", + "in": "query", + "type": "string", + "required": false, + "default": "current", + "x-ms-summary": "Record Filter", + "description": "Filter to return current or archived monitors. Values: `current`, `archived`, or year (e.g., `2019`)\n" + } + ], + "responses": { + "200": { + "description": "Raw monitor list containing bill change hash data", + "schema": { + "$ref": "#/definitions/MonitorListRawResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "429": { + "description": "Too Many Requests (Rate Limit Exceeded)", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + }, + "x-ms-visibility": "important" + } + }, + "/setMonitor": { + "get": { + "operationId": "SetMonitor", + "summary": "Modify monitor list for specified bills", + "description": "Add or remove bills from monitor/ignore lists. Use monitor, remove, set as action; stance options are watch, support, oppose.", + "parameters": [ + { + "name": "key", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "API Key", + "description": "Your API key for accessing LegiScan." + }, + { + "name": "op", + "in": "query", + "type": "string", + "required": true, + "default": "setMonitor", + "enum": [ + "setMonitor" + ], + "x-ms-summary": "Operation", + "description": "The LegiScan operation name." + }, + { + "name": "action", + "in": "query", + "type": "string", + "required": true, + "enum": [ + "monitor", + "remove", + "set" + ], + "x-ms-summary": "Action", + "description": "The action to perform: `monitor` adds the bills, `remove` deletes them from the list, `set` updates the stance.\n" + }, + { + "name": "list", + "in": "query", + "type": "string", + "required": true, + "x-ms-summary": "Bill ID List", + "description": "Comma-separated list of `bill_id` values to modify." + }, + { + "name": "stance", + "in": "query", + "type": "string", + "required": false, + "enum": [ + "watch", + "support", + "oppose" + ], + "default": "watch", + "x-ms-summary": "Stance", + "description": "Stance to assign to the bills - `watch`, `support`, or `oppose`." + } + ], + "responses": { + "200": { + "description": "Monitor action result per bill", + "schema": { + "$ref": "#/definitions/SetMonitorResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "429": { + "description": "Too Many Requests (Rate Limit Exceeded)", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + } + }, + "definitions": { + "GetSessionListResponse": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "sessions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "session_id": { + "type": "integer", + "format": "int32" + }, + "session_title": { + "type": "string" + }, + "session_name": { + "type": "string" + }, + "year_start": { + "type": "integer", + "format": "int32" + }, + "year_end": { + "type": "integer", + "format": "int32" + }, + "special": { + "type": "integer", + "format": "int32" + }, + "dataset_hash": { + "type": "string" + } + } + } + } + } + }, + "MasterListResponse": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "session": { + "type": "object", + "properties": { + "session_id": { + "type": "integer" + }, + "state_id": { + "type": "integer" + }, + "year_start": { + "type": "integer" + }, + "year_end": { + "type": "integer" + }, + "prefile": { + "type": "integer" + }, + "sine_die": { + "type": "integer" + }, + "prior": { + "type": "integer" + }, + "special": { + "type": "integer" + }, + "session_tag": { + "type": "string" + }, + "session_title": { + "type": "string" + }, + "session_name": { + "type": "string" + } + } + }, + "masterlist": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "bill_id": { + "type": "integer", + "format": "int32" + }, + "number": { + "type": "string" + }, + "change_hash": { + "type": "string" + }, + "url": { + "type": "string" + }, + "status_date": { + "type": "string" + }, + "status": { + "type": "integer" + }, + "last_action_date": { + "type": "string" + }, + "last_action": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + } + } + } + } + } + }, + "MasterListRawResponse": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "masterlist": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "bill_id": { + "type": "integer", + "format": "int32" + }, + "number": { + "type": "string" + }, + "change_hash": { + "type": "string" + } + } + } + } + } + }, + "GetBillResponse": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "bill": { + "type": "object", + "properties": { + "bill_id": { + "type": "integer", + "format": "int32" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "url": { + "type": "string" + }, + "change_hash": { + "type": "string" + } + } + } + } + }, + "BillTextResponse": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "text": { + "type": "object", + "properties": { + "doc_id": { + "type": "integer", + "format": "int32" + }, + "bill_id": { + "type": "integer", + "format": "int32" + }, + "date": { + "type": "string" + }, + "type": { + "type": "string" + }, + "mime": { + "type": "string" + }, + "text_size": { + "type": "integer", + "format": "int32" + }, + "text_hash": { + "type": "string" + }, + "doc": { + "type": "string" + } + } + } + } + }, + "BillAmendmentResponse": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "amendment": { + "type": "object", + "properties": { + "amendment_id": { + "type": "integer", + "format": "int32" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "mime": { + "type": "string" + }, + "amendment_size": { + "type": "integer", + "format": "int32" + }, + "amendment_hash": { + "type": "string" + } + } + } + } + }, + "SupplementResponse": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "supplement": { + "type": "object", + "properties": { + "supplement_id": { + "type": "integer", + "format": "int32" + }, + "bill_id": { + "type": "integer", + "format": "int32" + }, + "date": { + "type": "string" + }, + "type_id": { + "type": "integer", + "format": "int32" + }, + "type": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "mime": { + "type": "string" + }, + "mime_id": { + "type": "integer", + "format": "int32" + }, + "supplement_size": { + "type": "integer", + "format": "int32" + }, + "supplement_hash": { + "type": "string" + } + } + } + } + }, + "RollCallResponse": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "roll_call": { + "type": "object", + "properties": { + "roll_call_id": { + "type": "integer", + "format": "int32" + }, + "bill_id": { + "type": "integer", + "format": "int32" + }, + "date": { + "type": "string" + }, + "desc": { + "type": "string" + }, + "yea": { + "type": "integer", + "format": "int32" + }, + "nay": { + "type": "integer", + "format": "int32" + }, + "nv": { + "type": "integer", + "format": "int32" + }, + "absent": { + "type": "integer", + "format": "int32" + }, + "total": { + "type": "integer", + "format": "int32" + }, + "passed": { + "type": "integer", + "format": "int32" + }, + "chamber": { + "type": "string" + }, + "chamber_id": { + "type": "integer", + "format": "int32" + }, + "votes": { + "type": "array", + "items": { + "type": "object", + "properties": { + "people_id": { + "type": "integer", + "format": "int32" + }, + "vote_id": { + "type": "integer", + "format": "int32" + }, + "vote_text": { + "type": "string" + } + } + } + } + } + } + } + }, + "PersonResponse": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "person": { + "type": "object", + "properties": { + "people_id": { + "type": "integer", + "format": "int32" + }, + "person_hash": { + "type": "string" + }, + "state_id": { + "type": "integer", + "format": "int32" + }, + "party_id": { + "type": "string" + }, + "party": { + "type": "string" + }, + "role_id": { + "type": "integer", + "format": "int32" + }, + "role": { + "type": "string" + }, + "name": { + "type": "string" + }, + "first_name": { + "type": "string" + }, + "middle_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "suffix": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "district": { + "type": "string" + }, + "ftm_eid": { + "type": "integer", + "format": "int32" + }, + "votesmart_id": { + "type": "integer", + "format": "int32" + }, + "opensecrets_id": { + "type": "string" + }, + "knowwho_pid": { + "type": "integer", + "format": "int32" + }, + "ballotpedia": { + "type": "string" + }, + "committee_sponsor": { + "type": "integer", + "format": "int32" + }, + "committee_id": { + "type": "integer", + "format": "int32" + } + } + } + } + }, + "SearchResponse": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "searchresult": { + "type": "object", + "properties": { + "summary": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "range": { + "type": "string" + }, + "relevancy": { + "type": "string" + }, + "count": { + "type": "integer", + "format": "int32" + }, + "page_current": { + "type": "string" + }, + "page_total": { + "type": "integer", + "format": "int32" + } + } + }, + "results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "relevance": { + "type": "integer" + }, + "state": { + "type": "string" + }, + "bill_number": { + "type": "string" + }, + "bill_id": { + "type": "integer", + "format": "int32" + }, + "change_hash": { + "type": "string" + }, + "url": { + "type": "string" + }, + "text_url": { + "type": "string" + }, + "research_url": { + "type": "string" + }, + "last_action_date": { + "type": "string" + }, + "last_action": { + "type": "string" + }, + "title": { + "type": "string" + } + } + } + } + } + } + } + }, + "SearchRawResponse": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "searchresult": { + "type": "object", + "properties": { + "summary": { + "type": "object", + "properties": { + "page": { + "type": "string" + }, + "range": { + "type": "string" + }, + "relevancy": { + "type": "string" + }, + "count": { + "type": "integer", + "format": "int32" + }, + "page_current": { + "type": "string" + }, + "page_total": { + "type": "integer", + "format": "int32" + } + } + }, + "results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "relevance": { + "type": "integer", + "format": "int32" + }, + "bill_id": { + "type": "integer", + "format": "int32" + }, + "change_hash": { + "type": "string" + } + } + } + } + } + } + } + }, + "DatasetListResponse": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "datasetlist": { + "type": "array", + "items": { + "type": "object", + "properties": { + "state_id": { + "type": "integer", + "format": "int32" + }, + "session_id": { + "type": "integer", + "format": "int32" + }, + "special": { + "type": "integer", + "format": "int32" + }, + "year_start": { + "type": "integer", + "format": "int32" + }, + "year_end": { + "type": "integer", + "format": "int32" + }, + "session_name": { + "type": "string" + }, + "session_title": { + "type": "string" + }, + "dataset_hash": { + "type": "string" + }, + "dataset_date": { + "type": "string" + }, + "dataset_size": { + "type": "integer", + "format": "int32" + }, + "access_key": { + "type": "string" + } + } + } + } + } + }, + "DatasetArchiveResponse": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "dataset": { + "type": "object", + "properties": { + "state_id": { + "type": "integer", + "format": "int32" + }, + "session_id": { + "type": "integer", + "format": "int32" + }, + "session_name": { + "type": "string" + }, + "dataset_hash": { + "type": "string" + }, + "dataset_date": { + "type": "string" + }, + "dataset_size": { + "type": "integer", + "format": "int32" + }, + "mime": { + "type": "string", + "example": "application/zip" + }, + "zip": { + "type": "string", + "description": "Base64-encoded ZIP archive content" + } + } + } + } + }, + "SessionPeopleResponse": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "sessionpeople": { + "type": "object", + "properties": { + "session": { + "type": "object", + "properties": { + "session_id": { + "type": "integer", + "format": "int32" + }, + "state_id": { + "type": "integer", + "format": "int32" + }, + "year_start": { + "type": "integer", + "format": "int32" + }, + "year_end": { + "type": "integer", + "format": "int32" + }, + "special": { + "type": "integer", + "format": "int32" + }, + "prefile": { + "type": "integer", + "format": "int32" + }, + "prior": { + "type": "integer", + "format": "int32" + }, + "sine_die": { + "type": "integer", + "format": "int32" + }, + "session_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "dataset_hash": { + "type": "string" + } + } + }, + "people": { + "type": "array", + "items": { + "$ref": "#/definitions/SessionPerson" + } + } + } + } + } + }, + "SessionPerson": { + "type": "object", + "properties": { + "people_id": { + "type": "integer", + "format": "int32" + }, + "person_hash": { + "type": "string" + }, + "state_id": { + "type": "integer", + "format": "int32" + }, + "party_id": { + "type": "string" + }, + "party": { + "type": "string" + }, + "role_id": { + "type": "integer", + "format": "int32" + }, + "role": { + "type": "string" + }, + "name": { + "type": "string" + }, + "first_name": { + "type": "string" + }, + "middle_name": { + "type": "string" + }, + "last_name": { + "type": "string" + }, + "suffix": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "district": { + "type": "string" + }, + "ftm_eid": { + "type": "integer", + "format": "int32" + }, + "votesmart_id": { + "type": "integer", + "format": "int32" + }, + "opensecrets_id": { + "type": "string" + }, + "knowwho_pid": { + "type": "integer", + "format": "int32" + }, + "ballotpedia": { + "type": "string" + }, + "committee_sponsor": { + "type": "integer", + "format": "int32" + }, + "committee_id": { + "type": "integer", + "format": "int32" + } + } + }, + "SponsoredListResponse": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "sponsoredbills": { + "type": "object", + "properties": { + "sponsor": { + "$ref": "#/definitions/SessionPerson" + }, + "sessions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "session_id": { + "type": "integer", + "format": "int32" + }, + "session_name": { + "type": "string" + } + } + } + }, + "bills": { + "type": "array", + "items": { + "type": "object", + "properties": { + "session_id": { + "type": "integer", + "format": "int32" + }, + "bill_id": { + "type": "integer", + "format": "int32" + }, + "number": { + "type": "string" + } + } + } + } + } + } + } + }, + "MonitorListResponse": { + "type": "object", + "properties": { + "monitorlist": { + "type": "array", + "items": { + "type": "object", + "properties": { + "monitor_id": { + "type": "integer" + }, + "state": { + "type": "string" + }, + "bill_id": { + "type": "integer" + }, + "change_hash": { + "type": "string" + }, + "bill": { + "type": "object", + "properties": { + "bill_id": { + "type": "integer", + "format": "int32" + }, + "state": { + "type": "string" + }, + "number": { + "type": "string" + }, + "stance": { + "type": "integer" + }, + "change_hash": { + "type": "string" + }, + "url": { + "type": "string" + }, + "status_date": { + "type": "string", + "format": "date" + }, + "status": { + "type": "integer" + }, + "last_action_date": { + "type": "string", + "format": "date" + }, + "last_action": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + } + } + } + } + } + } + } + }, + "MonitorListRawResponse": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "monitorlist": { + "type": "array", + "items": { + "type": "object", + "properties": { + "bill_id": { + "type": "integer", + "format": "int32" + }, + "number": { + "type": "string" + }, + "state": { + "type": "string" + }, + "status": { + "type": "integer" + }, + "stance": { + "type": "integer" + }, + "change_hash": { + "type": "string" + } + } + } + } + } + }, + "SetMonitorResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "example": "OK" + }, + "return": { + "type": "object", + "additionalProperties": { + "type": "string", + "example": "OK - Bill 1501580 added to monitor list with stance watch" + } + } + } + }, + "ErrorResponse": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "code": { + "type": "string" + } + } + } + }, + "securityDefinitions": {} +} \ No newline at end of file diff --git a/independent-publisher-connectors/LegiScan/apiProperties.json b/independent-publisher-connectors/LegiScan/apiProperties.json new file mode 100644 index 0000000000..d0e7216956 --- /dev/null +++ b/independent-publisher-connectors/LegiScan/apiProperties.json @@ -0,0 +1,9 @@ +{ + "properties": { + "connectionParameters": {}, + "iconBrandColor": "#da3b01", + "capabilities": [], + "publisher": "Dan Romano", + "stackOwner": "LegiScan" + } +} \ No newline at end of file