@lap v0.3
# Machine-readable API spec. Each @endpoint block is one API call.
@api Bills API
@version v1
@endpoints 21
@hint download_for_search
@toc api(21)

@endpoint GET /api/v1/Bills/{billId}/Stages/{billStageId}/Amendments
@required {billId: int(int32), billStageId: int(int32)}
@optional {SearchTerm: str, AmendmentNumber: str, Decision: str, MemberId: int(int32), Skip: int(int32), Take: int(int32)}
@returns(200) {items: [map]?, totalResults: int(int32), itemsPerPage: int(int32)}
@errors {400, 404}

@endpoint GET /api/v1/Bills/{billId}/Stages/{billStageId}/Amendments/{amendmentId}
@required {billId: int(int32), billStageId: int(int32), amendmentId: int(int32)}
@returns(200) {id: int(int32), billId: int(int32), billStageId: int(int32), statusIndicator: str?, decision: str, decisionExplanation: str?, sponsors: [map]?, amendmentId: int(int32), amendmentType: str, clause: int(int32)?, schedule: int(int32)?, pageNumber: int(int32)?, lineNumber: int(int32)?, amendmentPosition: str?, marshalledListText: str?, dNum: str?, amendmentLines: [map]?, explanatoryTextPrefix: str?, explanatoryText: str?, amendmentNote: str?, amendmentLocation: str?, mainHeader: str?}
@errors {400, 404}

@endpoint GET /api/v1/Bills/{billId}/NewsArticles
@required {billId: int(int32)}
@optional {Skip: int(int32), Take: int(int32)}
@returns(200) {items: [map]?, totalResults: int(int32), itemsPerPage: int(int32)}
@errors {400, 404}

@endpoint GET /api/v1/BillTypes
@optional {Category: str, Skip: int(int32), Take: int(int32)}
@returns(200) {items: [map]?, totalResults: int(int32), itemsPerPage: int(int32)}
@errors {400}

@endpoint GET /api/v1/Bills
@optional {SearchTerm: str, Session: int(int32), CurrentHouse: str, OriginatingHouse: str, MemberId: int(int32), DepartmentId: int(int32), BillStage: [int(int32)], BillStagesExcluded: [int(int32)], IsDefeated: bool, IsWithdrawn: bool, BillType: [int(int32)], SortOrder: str, BillIds: [int(int32)], IsInAmendableStage: bool, Skip: int(int32), Take: int(int32)}
@returns(200) {items: [map]?, totalResults: int(int32), itemsPerPage: int(int32)}
@errors {400}

@endpoint GET /api/v1/Bills/{billId}
@required {billId: int(int32)}
@returns(200) {billId: int(int32), shortTitle: str?, formerShortTitle: str?, currentHouse: str, originatingHouse: str, lastUpdate: str(date-time), billWithdrawn: str(date-time)?, isDefeated: bool, billTypeId: int(int32), introducedSessionId: int(int32), includedSessionIds: [int(int32)]?, isAct: bool, currentStage: map{id: int(int32), stageId: int(int32), sessionId: int(int32), description: str?, abbreviation: str?, house: str, stageSittings: [map]?, sortOrder: int(int32)}, longTitle: str?, summary: str?, sponsors: [map]?, promoters: [map]?, petitioningPeriod: str?, petitionInformation: str?, agent: map{name: str?, address: str?, phoneNo: str?, email: str?, website: str?}}
@errors {400, 404}

@endpoint GET /api/v1/Bills/{billId}/Stages/{billStageId}
@required {billId: int(int32), billStageId: int(int32)}
@returns(200) {id: int(int32), stageId: int(int32), sessionId: int(int32), description: str?, abbreviation: str?, house: str, stageSittings: [map]?, sortOrder: int(int32), committee: map{id: int(int32), name: str?, category: str?, house: str, url: str?}, nextStageBillStageId: int(int32)?, previousStageBillStageId: int(int32)?, lastUpdate: str(date-time), hasMotions: bool}
@errors {400, 404}

@endpoint GET /api/v1/Bills/{billId}/Stages
@required {billId: int(int32)}
@optional {Skip: int(int32), Take: int(int32)}
@returns(200) {items: [map]?, totalResults: int(int32), itemsPerPage: int(int32)}
@errors {400, 404}

@endpoint GET /api/v1/Publications/{publicationId}/Documents/{documentId}
@required {publicationId: int(int32), documentId: int(int32)}
@returns(200) {id: int(int32), filename: str?, contentType: str?, contentLength: int(int32)}
@errors {400, 404}

@endpoint GET /api/v1/Publications/{publicationId}/Documents/{documentId}/Download
@required {publicationId: int(int32), documentId: int(int32)}
@returns(200)
@errors {400, 404}

@endpoint GET /api/v1/Bills/{billId}/Stages/{billStageId}/PingPongItems
@required {billId: int(int32), billStageId: int(int32)}
@optional {SearchTerm: str, AmendmentNumber: str, Decision: str, MemberId: int(int32), Skip: int(int32), Take: int(int32)}
@returns(200) {items: [map]?, totalResults: int(int32), itemsPerPage: int(int32)}
@errors {400, 404}

@endpoint GET /api/v1/Bills/{billId}/Stages/{billStageId}/PingPongItems/{pingPongItemId}
@required {billId: int(int32), billStageId: int(int32), pingPongItemId: int(int32)}
@returns(200) {type: str, amendment: map{id: int(int32), billId: int(int32), billStageId: int(int32), statusIndicator: str?, decision: str, decisionExplanation: str?, sponsors: [map]?, type: str, number: str?, summary: str?, amendmentGroups: [map]?}, motion: map{id: int(int32), billId: int(int32), billStageId: int(int32), statusIndicator: str?, decision: str, decisionExplanation: str?, sponsors: [map]?, type: str, number: str?, summary: str?, motionGroups: [map]?}}
@errors {400, 404}

@endpoint GET /api/v1/PublicationTypes
@optional {Skip: int(int32), Take: int(int32)}
@returns(200) {items: [map]?, totalResults: int(int32), itemsPerPage: int(int32)}
@errors {400}

@endpoint GET /api/v1/Bills/{billId}/Publications
@required {billId: int(int32)}
@returns(200) {billId: int(int32), publications: [map]?}
@errors {400, 404}

@endpoint GET /api/v1/Bills/{billId}/Stages/{stageId}/Publications
@required {billId: int(int32), stageId: int(int32)}
@returns(200) {billStageId: int(int32), publications: [map]?, sittings: [map]?}
@errors {400, 404}

@endpoint GET /api/v1/Rss/allbills.rss
@returns(200)

@endpoint GET /api/v1/Rss/publicbills.rss
@returns(200)

@endpoint GET /api/v1/Rss/privatebills.rss
@returns(200)

@endpoint GET /api/v1/Rss/Bills/{id}.rss
@required {id: int(int32)}
@returns(200)
@errors {400, 404}

@endpoint GET /api/v1/Sittings
@optional {House: str, DateFrom: str(date-time), DateTo: str(date-time), Skip: int(int32), Take: int(int32)}
@returns(200) {items: [map]?, totalResults: int(int32), itemsPerPage: int(int32)}
@errors {400}

@endpoint GET /api/v1/Stages
@optional {Skip: int(int32), Take: int(int32)}
@returns(200) {items: [map]?, totalResults: int(int32), itemsPerPage: int(int32)}
@errors {400}

@end
