swagger: "2.0" info: version: "1.0.2" title: NEMT Member API description: | RESTful API for NEMT Member App Repo: nemt-portal-api Use the lockpad icon on the right side of a route to authorize the route. contact: name: Carlos Andrioli email: carlos@brighterdevelopment.com basePath: /v1 schemes: - http consumes: - application/json produces: - application/json securityDefinitions: AppKey: type: apiKey in: header name: App description: Application Key (use "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx") only used to authenticate the application AppToken: type: apiKey in: header name: Token description: The App Bearer token. Need to make a get request to the address "/v1/authenticate" with the "App" header and the log in body tags: - name: auth description: Endpoints for system and users authentication. - name: member description: Endpoints for members of a participating payer. - name: visits description: Endpoints for visits to participating providers by members of a participating payer. - name: notifications description: Endpoints for notifications related to members, visits, providers and system state. - name: rides description: Endpoints for rides to participating providers for members of participating payers. - name: providers description: Endpoints for participating providers related to a member of a participating payer - name: messages description: Endpoints for (tbd) message types. paths: /authenticate/: post: tags: - auth summary: Authorize the application use description: Authorizes the application routes returning a JWT token for authentication operationId: authenticateApp security: - AppKey: [] parameters: - name: data in: body description: Member authentication data required: true schema: $ref: '#/definitions/AuthRequest' responses: 200: description: Get the token for application authorization schema: $ref: '#/definitions/AuthResponse' 401: description: Unauthorized access schema: $ref: '#/definitions/DefaultErrorResponse' 422: description: Validation error schema: $ref: '#/definitions/DefaultErrorResponse' 503: description: Service Unavailable schema: $ref: '#/definitions/DefaultErrorResponse' /nemt/visits/: get: tags: - visits - member summary: Get a filtered list of member-visits to participating providers description: Get a list of visits operationId: listVisits security: - AppToken: [] parameters: - name: page in: query description: Pagination page number default: 1 required: false type: integer format: int64 - name: quantity in: query description: Pagination quantity per page default: 10 type: integer format: int64 responses: 200: description: Visits paginated list schema: $ref: '#/definitions/VisitsPaginatedResponse' 401: description: Unauthorized access schema: $ref: '#/definitions/DefaultErrorResponse' 422: description: Validation error schema: $ref: '#/definitions/DefaultErrorResponse' 503: description: Service Unavailable schema: $ref: '#/definitions/DefaultErrorResponse' post: tags: - visits - member summary: Create a visit to a participating provider for an eligible member. description: Reserves a pre-defined or arbitrary visit time range operationId: addVisit security: - AppToken: [] parameters: - name: data in: body description: Visit data required: true schema: $ref: '#/definitions/Visit' responses: 200: description: Visit object with all the ID and remanescent parameters filled schema: $ref: '#/definitions/Visit' 401: description: Unauthorized access schema: $ref: '#/definitions/DefaultErrorResponse' 422: description: Validation error schema: $ref: '#/definitions/DefaultErrorResponse' 503: description: Service Unavailable schema: $ref: '#/definitions/DefaultErrorResponse' /nemt/visits/{visit_uuid}/: get: tags: - visits - member summary: Get details of a single member-visit to a participating provider. description: Get details of a single member-provider visit operationId: getVisitDetail security: - AppToken: [] parameters: - name: visit_uuid in: path description: Visit unique identifier type: string required: true responses: 200: description: Visit Details schema: $ref: '#/definitions/Visit' 401: description: Unauthorized access schema: $ref: '#/definitions/DefaultErrorResponse' 422: description: Validation error schema: $ref: '#/definitions/DefaultErrorResponse' 503: description: Service Unavailable schema: $ref: '#/definitions/DefaultErrorResponse' put: tags: - visits - member summary: Update a single member-visit to a participating provider. description: Get the member visit operationId: updatemember security: - AppToken: [] parameters: - name: visit_uuid in: path description: Visit unique identifier type: string required: true - name: data in: body description: Visit data required: true schema: $ref: '#/definitions/Visit' responses: 200: description: Visit detail schema: $ref: '#/definitions/Visit' 401: description: Unauthorized access schema: $ref: '#/definitions/DefaultErrorResponse' 422: description: Validation error schema: $ref: '#/definitions/DefaultErrorResponse' 503: description: Service Unavailable schema: $ref: '#/definitions/DefaultErrorResponse' delete: tags: - visits - member summary: Delete a single member-visit to a participating provider. description: Cancel a member appointment operationId: deletemember security: - AppToken: [] parameters: - name: visit_uuid in: path description: Visit unique identifier type: string required: true responses: 204: description: No return if everything works 401: description: Unauthorized access schema: $ref: '#/definitions/DefaultErrorResponse' 422: description: Validation error schema: $ref: '#/definitions/DefaultErrorResponse' 503: description: Service Unavailable schema: $ref: '#/definitions/DefaultErrorResponse' /nemt/members/: get: tags: - member summary: Get a filtered list of members description: Get a list of members operationId: listmembers security: - AppToken: [] parameters: - name: page in: query description: Pagination page number default: 1 required: false type: integer format: int64 - name: quantity in: query description: Pagination quantity per page default: 10 type: integer format: int64 responses: 200: description: members paginated list schema: $ref: '#/definitions/MembersPaginatedResponse' 401: description: Unauthorized access schema: $ref: '#/definitions/DefaultErrorResponse' 422: description: Validation error schema: $ref: '#/definitions/DefaultErrorResponse' 503: description: Service Unavailable schema: $ref: '#/definitions/DefaultErrorResponse' /nemt/members/{member_uuid}/: get: tags: - member summary: member detail description: Get a member's detail data operationId: getmemberDetail security: - AppToken: [] parameters: - name: member_uuid in: path description: member unique identifier type: string required: true responses: 200: description: member detail schema: $ref: '#/definitions/Member' 401: description: Unauthorized access schema: $ref: '#/definitions/DefaultErrorResponse' 422: description: Validation error schema: $ref: '#/definitions/DefaultErrorResponse' 503: description: Service Unavailable schema: $ref: '#/definitions/DefaultErrorResponse' /nemt/notifications/: get: tags: - notifications - member summary: Get a list of notifications for a single member. description: Get a list of notifications for a single member. operationId: listNotifications security: - AppToken: [] parameters: - name: page in: query description: Pagination page number default: 1 required: false type: integer format: int64 - name: quantity in: query description: Pagination quantity per page default: 10 type: integer format: int64 responses: 200: description: Notification paginated list schema: $ref: '#/definitions/NotificationPaginatedResponse' 401: description: Unauthorized access schema: $ref: '#/definitions/DefaultErrorResponse' 422: description: Validation error schema: $ref: '#/definitions/DefaultErrorResponse' 503: description: Service Unavailable schema: $ref: '#/definitions/DefaultErrorResponse' /nemt/notifications/{notification_uuid}/: get: tags: - notifications - member summary: Get the member's notification description: Get a specific notification operationId: getNotification security: - AppToken: [] parameters: - name: notification_uuid in: path description: Notification unique identifier type: string required: true responses: 200: description: Notification detail schema: $ref: '#/definitions/Notification' 401: description: Unauthorized access schema: $ref: '#/definitions/DefaultErrorResponse' 422: description: Validation error schema: $ref: '#/definitions/DefaultErrorResponse' 503: description: Service Unavailable schema: $ref: '#/definitions/DefaultErrorResponse' /nemt/rides/: get: tags: - rides - visits - member summary: Get a filtered list of rides for a single member. description: Get a filtered list of rides for a single member. operationId: listRides security: - AppToken: [] parameters: - name: page in: query description: Pagination page number default: 1 required: false type: integer format: int64 - name: quantity in: query description: Pagination quantity per page default: 10 type: integer format: int64 responses: 200: description: Rides paginated list schema: $ref: '#/definitions/RidePaginatedResponse' 401: description: Unauthorized access schema: $ref: '#/definitions/DefaultErrorResponse' 422: description: Validation error schema: $ref: '#/definitions/DefaultErrorResponse' 503: description: Service Unavailable schema: $ref: '#/definitions/DefaultErrorResponse' post: tags: - rides - visits - member summary: Create a ride to a participating provider for an eligible member. description: Get the ride operationId: addRide security: - AppToken: [] parameters: - name: data in: body description: Book a scheduled ride with at lease one ride_segment. required: true schema: $ref: '#/definitions/RideRequest' responses: 200: description: Ride object with all the ID and remanescent parameters filled schema: $ref: '#/definitions/Ride' 401: description: Unauthorized access schema: $ref: '#/definitions/DefaultErrorResponse' 422: description: Validation error schema: $ref: '#/definitions/DefaultErrorResponse' 503: description: Service Unavailable schema: $ref: '#/definitions/DefaultErrorResponse' /nemt/rides/{ride_uuid}/: get: tags: - rides - visits - member summary: Ride detail description: Get a member's specific ride data operationId: getRideDetail security: - AppToken: [] parameters: - name: ride_uuid in: path description: Ride unique identifier type: string required: true responses: 200: description: Ride detail schema: $ref: '#/definitions/Ride' 401: description: Unauthorized access schema: $ref: '#/definitions/DefaultErrorResponse' 422: description: Validation error schema: $ref: '#/definitions/DefaultErrorResponse' 503: description: Service Unavailable schema: $ref: '#/definitions/DefaultErrorResponse' put: tags: - rides - visits - member summary: Update member ride description: Get the member ride operationId: updateRides security: - AppToken: [] parameters: - name: ride_uuid in: path description: Ride unique identifier type: string required: true - name: data in: body description: Ride data required: true schema: $ref: '#/definitions/Ride' responses: 200: description: Ride detail schema: $ref: '#/definitions/Ride' 401: description: Unauthorized access schema: $ref: '#/definitions/DefaultErrorResponse' 422: description: Validation error schema: $ref: '#/definitions/DefaultErrorResponse' 503: description: Service Unavailable schema: $ref: '#/definitions/DefaultErrorResponse' /nemt/rides/{ride_uuid}/cancel: post: tags: - rides - visits - member summary: Cancel ride description: Cancel a specific ride for a member operationId: cancelRide security: - AppToken: [] parameters: - name: ride_uuid in: path description: Ride unique identifier type: string required: true responses: 204: description: Empty response means that the cancel was aceppted 401: description: Unauthorized access schema: $ref: '#/definitions/DefaultErrorResponse' 422: description: Validation error schema: $ref: '#/definitions/DefaultErrorResponse' 503: description: Service Unavailable schema: $ref: '#/definitions/DefaultErrorResponse' /nemt/rides/{ride_uuid}/destination: put: tags: - rides - visits - member summary: Change the ride destination description: Change the ride destination operationId: changeRideDestination security: - AppToken: [] parameters: - name: ride_uuid in: path description: Ride unique identifier type: string required: true - name: data in: body description: Destination data required: true schema: $ref: '#/definitions/Location' responses: 200: description: Location confirmation schema: $ref: '#/definitions/Location' 401: description: Unauthorized access schema: $ref: '#/definitions/DefaultErrorResponse' 422: description: Validation error schema: $ref: '#/definitions/DefaultErrorResponse' 503: description: Service Unavailable schema: $ref: '#/definitions/DefaultErrorResponse' /nemt/ridetypes: get: tags: - rides security: - AppToken: [] operationId: getRideTypes summary: List the ride types description: List the ride types from the database parameters: - name: lat in: query description: latitude type: number format: float required: true - name: lng in: query description: longitude type: number format: float required: true responses: 200: description: Ride Type list schema: $ref: '#/definitions/RideTypeResponse' 401: description: Unauthorized access schema: $ref: '#/definitions/DefaultErrorResponse' 422: description: Validation error schema: $ref: '#/definitions/DefaultErrorResponse' 503: description: Service Unavailable schema: $ref: '#/definitions/DefaultErrorResponse' /nemt/rideseta: get: tags: - rides security: - AppToken: [] operationId: getRideEta summary: Get the ETA of the Ride description: Get the ETA of the types parameters: - name: lat in: query description: latitude type: number format: float required: true - name: lng in: query description: longitude type: number format: float required: true - name: dest_lat in: query description: destination latitude type: number format: float required: true - name: dest_lng in: query description: destination longitude type: number format: float required: true - name: ride_type_uuid in: query description: ride type UUID type: string responses: 200: description: Ride ETA list schema: $ref: '#/definitions/RideETAResponse' 401: description: Unauthorized access schema: $ref: '#/definitions/DefaultErrorResponse' 422: description: Validation error schema: $ref: '#/definitions/DefaultErrorResponse' 503: description: Service Unavailable schema: $ref: '#/definitions/DefaultErrorResponse' /nemt/ridedrivers: get: tags: - rides security: - AppToken: [] operationId: getRideDrivers summary: Get the Drivers close to the location description: Get the Drivers close to the location parameters: - name: lat in: query description: latitude type: number format: float required: true - name: lng in: query description: longitude type: number format: float required: true - name: ride_type_uuid in: query description: ride type UUID type: string responses: 200: description: Ride Drivers list schema: $ref: '#/definitions/RideDriverResponse' 401: description: Unauthorized access schema: $ref: '#/definitions/DefaultErrorResponse' 422: description: Validation error schema: $ref: '#/definitions/DefaultErrorResponse' 503: description: Service Unavailable schema: $ref: '#/definitions/DefaultErrorResponse' /nemt/providers/: get: tags: - rides - providers - member summary: Get providers description: Get a list of providers operationId: getProviders security: - AppToken: [] parameters: - name: page in: query description: Pagination page number default: 1 required: false type: integer format: int64 - name: quantity in: query description: Pagination quantity per page default: 10 type: integer format: int64 responses: 200: description: Provider list schema: $ref: '#/definitions/ProviderPaginatedResponse' 401: description: Unauthorized access schema: $ref: '#/definitions/DefaultErrorResponse' 422: description: Validation error schema: $ref: '#/definitions/DefaultErrorResponse' 503: description: Service Unavailable schema: $ref: '#/definitions/DefaultErrorResponse' /nemt/providers/{lat}/{lng}/: get: tags: - rides - providers - member summary: Provider by Location description: Get a list of providers for a current location operationId: getProvidersByLocation security: - AppToken: [] parameters: - name: lat in: path description: latitude type: number format: float required: true - name: lng in: path description: longitude type: number format: float required: true - name: page in: query description: Pagination page number default: 1 required: false type: integer format: int64 - name: quantity in: query description: Pagination quantity per page default: 10 type: integer format: int64 responses: 200: description: Provider list schema: $ref: '#/definitions/ProviderPaginatedResponse' 401: description: Unauthorized access schema: $ref: '#/definitions/DefaultErrorResponse' 422: description: Validation error schema: $ref: '#/definitions/DefaultErrorResponse' 503: description: Service Unavailable schema: $ref: '#/definitions/DefaultErrorResponse' definitions: DefaultErrorResponse: type: object description: Default error response data properties: error: type: boolean description: Indicates if the response is an error message: type: string description: Detailed response message AuthRequest: type: object description: Request from application authrization properties: email: type: string description: Member e-mail password: type: string description: Base64 encoded password AuthResponse: type: object description: Response from application authrization properties: token: type: string description: The token string for app authorization valid_time: type: integer format: int64 description: Token expiration time in Unix time format server_time: type: integer format: int64 description: Server time in Unix time format PaginatedResponse: type: object description: Paginated response data properties: pagination: type: object description: Pagination data properties: total_records: type: integer format: int64 description: Total result count records_per_page: type: integer format: int64 description: Max records per page total_pages: type: integer format: int64 description: Total page count current_page: type: integer format: int64 description: Current page number data: type: array items: type: object description: Paginaged data Member: type: object description: member data properties: member_uuid: type: string description: member unique ID name: type: string description: Name phone_number: type: string description: Phone number MembersPaginatedResponse: type: object description: members paginated response data allOf: - $ref: '#/definitions/PaginatedResponse' - properties: data: type: array items: $ref: '#/definitions/Member' Driver: type: object description: Driver data properties: driver_uuid: type: string description: Driver unique ID name: type: string description: Name phone_number: type: string description: Phone number vehicle: type: object description: Driver car description $ref: '#/definitions/Vehicle' Vehicle: type: object description: Veicule data properties: vehicle_uuid: type: string description: Vehicle unique ID make: type: string description: Car brand model: type: string description: Car model plate: type: string description: Car plate color: type: string description: Car color Visit: type: object description: Visit data (Still TBD by the Data Model) properties: visit_uuid: type: string description: Visit unique ID VisitsPaginatedResponse: type: object description: Visits paginated response data allOf: - $ref: '#/definitions/PaginatedResponse' - properties: data: type: array items: $ref: '#/definitions/Visit' Notification: type: object description: Notification data properties: notification_uuid: type: string description: Notification unique ID notification: type: string description: Notification message is_read: type: boolean description: Verify if the message was read NotificationPaginatedResponse: type: object description: Notification paginated response data allOf: - $ref: '#/definitions/PaginatedResponse' - properties: data: type: array items: $ref: '#/definitions/Notification' RideRequest: type: object description: Visit data properties: ride_type: type: object description: Ride type $ref: '#/definitions/RideType' schedule_date: type: string format: datetime description: Request date coordinates: type: object description: Coordinates information $ref: '#/definitions/RideCoordinates' Ride: type: object description: Visit data properties: ride_uuid: type: string description: Ride unique ID ride_type: type: object description: Ride type $ref: '#/definitions/RideType' ride_status: type: object description: Ride status $ref: '#/definitions/RideStatus' request_at: type: string format: datetime description: Request date driver: type: object description: Driver information $ref: '#/definitions/Driver' coordinates: type: object description: Coordinates information $ref: '#/definitions/RideCoordinates' RideCoordinates: type: object description: Ride coordinates properties properties: pickup: type: object description: Pickup information $ref: '#/definitions/Location' dropoff: type: object description: Dropoff information $ref: '#/definitions/Location' location: type: object description: Location information $ref: '#/definitions/Location' destination: type: object description: Destination information $ref: '#/definitions/Location' Location: type: object description: Location property properties: lat: type: number format: float description: Latitude lng: type: number format: float description: Longitude address: type: string description: Address time: type: string format: datetime description: Time RidePaginatedResponse: type: object description: Ride paginated response data allOf: - $ref: '#/definitions/PaginatedResponse' - properties: data: type: array items: $ref: '#/definitions/Ride' Provider: type: object description: Provide data properties: provider_uuid: type: string description: Provider unique ID npi_id: type: integer description: National Provider ID provider_name: type: string description: Provider name address: type: string description: Provider Address lat: type: number format: float description: Latitude lng: type: number format: float description: Longitude ProviderPaginatedResponse: type: object description: Provider paginated response data allOf: - $ref: '#/definitions/PaginatedResponse' - properties: data: type: array items: $ref: '#/definitions/Provider' RideType: properties: ride_type_uuid: type: string description: Internal UUID of the ride type ride_type: type: string description: Internal type of the ride type display_name: type: string description: Ride type RideStatus: properties: ride_status_uuid: type: string description: Internal UUID of the ride status ride_status: type: string description: Internal type of the ride status display_name: type: string description: Ride type RideTypeResponse: type: array description: List of the Ride Types items: $ref: '#/definitions/RideType' RideETA: properties: ride_type_uuid: type: string description: Internal UUID of the ride type ride_type: type: string description: Internal type of the ride type display_name: type: string description: Ride type eta_seconds: type: number description: ETA RideETAResponse: type: array description: List of the Ride ETA's items: $ref: '#/definitions/RideETA' RideDriver: properties: ride_type_uuid: type: string description: Internal UUID of the ride type ride_type: type: string description: Internal type of the ride type display_name: type: string description: Ride type drivers: type: array description: Drivers location items: $ref: '#/definitions/Location' RideDriverResponse: type: array description: List the Ride Drivers by type items: $ref: '#/definitions/RideDriver'