openapi: 3.0.0 info: title: Appealable Issues Messaging API version: v0 contact: name: developer.va.gov description: "The Appealable Issues API lets you retrieve a list of a claimant’s appealable issues and any chains of preceding issues. Appealable issues are issues from claims about which VA has made a decision that may be eligible for appeal. Not all appealable issues are guaranteed to be eligible for appeal; for example, claimants may have another appeal in progress for an issue.\n\nTo check the status of all decision reviews and appeals for a specified individual, use the [Appeals Status API](https://developer.va.gov/explore/api/appeals-status/docs).\n\nTo file an appeal or decision review, use one of these APIs: \n* [Higher-Level Reviews API](https://developer.va.gov/explore/api/higher-level-reviews/docs)\n* [Notice of Disagreements API](https://developer.va.gov/explore/api/notice-of-disagreements/docs)\n* [Supplemental Claims API](https://developer.va.gov/explore/api/supplemental-claims/docs)\n\n## Technical overview\nThe Appealable Issues API pulls data from Caseflow, a case management system. It provides decision review and appeal data that can be used for submitting a Higher Level Review, Notice of Disagreement, or Supplemental Claim.\n\n### Authorization and Access\nThe authentication model for the Appealable Issues API uses OAuth 2.0/OpenID Connect. The following authorization models are supported:\n* [Authorization code flow](https://developer.va.gov/explore/api/appealable-issues/authorization-code)\n* [Client Credentials Grant (CCG)](https://developer.va.gov/explore/api/appealable-issues/client-credentials)\n\n**Important:** To get production access using client credentials grant, you must either work for VA or have specific VA agreements in place. If you have questions, [contact us](https://developer.va.gov/support/contact-us).\n\n### Test data\n\nOur sandbox environment is populated with [Veteran test data](https://github.com/department-of-veterans-affairs/vets-api-clients/blob/master/test_accounts/appealable_issues_test_accounts.md) that can be used to test various response scenarios. This sandbox data contains no PII or PHI, but mimics real Veteran account information.\n" servers: - url: https://sandbox-api.va.gov/services/appeals/appealable-issues/{version} description: VA.gov API sandbox environment variables: version: default: v0 - url: https://api.va.gov/services/appeals/appealable-issues/{version} description: VA.gov API production environment variables: version: default: v0 tags: - name: Messaging paths: /v1/messaging/folders: get: description: List available secure messaging folders operationId: get_folders responses: '200': content: application/json: schema: $ref: ./schemas/SecureMessagingFolders.yml description: OK '401': content: application/json: schema: $ref: ./schemas/Errors.yml description: Unauthorized '403': content: application/json: schema: $ref: ./schemas/Errors.yml description: Not authorized for access to secure messages summary: /v1/messaging/folders tags: - Messaging /v1/messaging/folders/{id}: get: description: Get a secure messaging folder operationId: get_folder responses: '200': content: application/json: schema: $ref: ./schemas/SecureMessagingFolder.yml description: OK '401': content: application/json: schema: $ref: ./schemas/Errors.yml description: Unauthorized '403': content: application/json: schema: $ref: ./schemas/Errors.yml description: Not authorized for access to secure messages summary: /v1/messaging/folders/{id} tags: - Messaging put: description: Rename an existing folder operationId: post_rename_folder requestBody: content: application/json: schema: example: name: New Name for Folder type: object required: true responses: '201': content: application/json: schema: $ref: ./schemas/SecureMessagingFolder.yml description: OK '401': content: application/json: schema: $ref: ./schemas/Errors.yml description: Unauthorized '403': content: application/json: schema: $ref: ./schemas/Errors.yml description: Not authorized for access to secure messages summary: /v1/messaging/folders/{id} tags: - Messaging /v1/messaging/folders/{id}/threads: get: description: List threads in a secure messaging folder. operationId: get_folder_threads parameters: - description: The id of the folder that threads are being retrieved from in: path name: folderId required: true schema: type: string - description: The size of the pagination you want in: query name: pageSize, required: true schema: type: string - description: The page number to get based on your page size in: query name: pageNumber, required: true schema: type: string - description: The field to sort the results by in: query name: sortField, required: true schema: type: string enum: - SENDER_NAME - RECIPIENT_NAME - SENT_DATE - DRAFT_DATE - description: The order to sort the results by in: query name: sortOrder, required: true schema: type: string enum: - ASC - DESC - $ref: '#/components/parameters/InflectionHeader' responses: '200': content: application/json: schema: $ref: ./schemas/SecureMessageThreadList.yml description: OK '401': content: application/json: schema: $ref: ./schemas/Errors.yml description: Unauthorized '403': content: application/json: schema: $ref: ./schemas/Errors.yml description: Not authorized for access to secure messages summary: /v1/messaging/folders/{id}/threads tags: - Messaging /v1/messaging/folders/{id}/search: post: description: 'Search messages in a secure messaging folder. If multiple search criteria are specified, each returned search result will match ALL criteria. Pagination is supported and is handled by the upstream MHV server. When listing messages, the response for each message will include most but not all of the message attributes. Specifically, the message body and attachment information is not included. Those attributes can be obtained by getting the specific message resource. ' operationId: search_folder parameters: - description: The page of results to be returned (passed through to MHV API) in: query name: page required: false schema: type: integer default: 1 - description: The number of results per page (passed through to MHV API) in: query name: per_page, required: false schema: type: integer default: 250 - $ref: '#/components/parameters/InflectionHeader' requestBody: content: application/json: schema: $ref: ./schemas/SecureMessageSearchRequest.yml required: true responses: '200': content: application/json: schema: $ref: ./schemas/SecureMessageSearch.yml description: OK '401': content: application/json: schema: $ref: ./schemas/Errors.yml description: Unauthorized '403': content: application/json: schema: $ref: ./schemas/Errors.yml description: Not authorized for access to secure messages summary: /v1/messaging/folders/{id}/search tags: - Messaging /v1/messaging/message_drafts: post: description: Save a new draft message operationId: post_create_message_draft requestBody: content: application/json: schema: $ref: ./schemas/SecureMessageNewMessageRequest.yml required: true responses: '201': content: application/json: schema: $ref: ./schemas/SecureMessageNewMessageRequest.yml description: Created '401': content: application/json: schema: $ref: ./schemas/Errors.yml description: Unauthorized '403': content: application/json: schema: $ref: ./schemas/Errors.yml description: Not authorized for access to secure messages summary: /v1/messaging/message_drafts parameters: - $ref: '#/components/parameters/InflectionHeader' tags: - Messaging /v1/messaging/message_drafts/{id}: put: description: Update an existing draft message operationId: post_create_message_draft parameters: - description: The id of the draft that is to be updated in: path name: id required: true schema: type: string - $ref: '#/components/parameters/InflectionHeader' requestBody: content: application/json: schema: example: body: the updated message type: object required: true responses: '204': description: No Content '401': content: application/json: schema: $ref: ./schemas/Errors.yml description: Unauthorized '403': content: application/json: schema: $ref: ./schemas/Errors.yml description: Not authorized for access to secure messages summary: /v1/messaging/message_drafts/{id} tags: - Messaging /v1/messaging/message_drafts/{reply_id}/replydraft: post: description: Save a new draft message as a reply to an existing message operationId: post_create_message_draft_reply parameters: - description: The id of the message that will be replied to in: path name: reply_id required: true schema: type: string - $ref: '#/components/parameters/InflectionHeader' requestBody: content: application/json: schema: $ref: ./schemas/SecureMessageNewMessageRequest.yml required: true responses: '201': content: application/json: schema: $ref: ./schemas/SecureMessageNewMessageRequest.yml description: Created '401': content: application/json: schema: $ref: ./schemas/Errors.yml description: Unauthorized '403': content: application/json: schema: $ref: ./schemas/Errors.yml description: Not authorized for access to secure messages summary: /v1/messaging/message_drafts/{reply_id}/replydraft tags: - Messaging /v1/messaging/message_drafts/{reply_id}/replydraft/{draft_id}: post: description: Edit a draft message that was a reply to an existing message operationId: post_create_message_draft_reply parameters: - description: The id of the message that will be replied to in: path name: reply_id required: true schema: type: string - description: The id of the draft that is to be updated in: path name: draft_id required: true schema: type: string - $ref: '#/components/parameters/InflectionHeader' requestBody: content: application/json: schema: example: body: the updated message type: object required: true responses: '204': description: No Content '401': content: application/json: schema: $ref: ./schemas/Errors.yml description: Unauthorized '403': content: application/json: schema: $ref: ./schemas/Errors.yml description: Not authorized for access to secure messages summary: /v1/messaging/message_drafts/{reply_id}/replydraft/{draft_id} tags: - Messaging /v1/messaging/messages: post: description: 'Send a new secure message. When `prescription_id` is included in the request body, the message is routed to the upstream MHV `POST message/renewal` endpoint for prescription renewal messages. ' operationId: post_create_message parameters: - description: Indicates if this message is for an OH triage group (allows larger attachments) in: query name: is_oh_triage_group required: false schema: type: boolean - $ref: '#/components/parameters/InflectionHeader' requestBody: content: application/json: schema: $ref: ./schemas/SecureMessageNewMessageRequest.yml multipart/form-data: schema: properties: message: description: Stringified JSON with same parameters as if this was an application/json request (e.g. '{"category":"OTHER","recipient_id":1763526,"body":"test message"}') type: string uploads[]: description: 'One or more message attachments. NOTES: ' items: format: binary type: string type: array type: object description: "New message body.\n\nNOTES:\n\n" required: true responses: '200': content: application/json: schema: $ref: ./schemas/SecureMessageDetail.yml description: OK '400': content: application/json: schema: $ref: ./schemas/Errors.yml description: 'Bad Request - Oracle Health message send failed. This can occur when: - Message status polling returns FAILED or INVALID status - Error code SM98 will be returned in the response' '401': content: application/json: schema: $ref: ./schemas/Errors.yml description: Unauthorized '403': content: application/json: schema: $ref: ./schemas/Errors.yml description: Not authorized for access to secure messages '422': content: application/json: schema: $ref: ./schemas/Errors.yml description: 'Unprocessable Entity - Validation failed for one or more message fields (for example, missing or empty `body`), as defined by the request schema. ' summary: /v1/messaging/messages tags: - Messaging /v1/messaging/messages/categories: get: description: List available message categories operationId: get_categories responses: '200': content: application/json: schema: $ref: ./schemas/SecureMessageCategories.yml description: OK '401': content: application/json: schema: $ref: ./schemas/Errors.yml description: Unauthorized '403': content: application/json: schema: $ref: ./schemas/Errors.yml description: Not authorized for access to secure messages summary: /v1/messaging/messages/categories parameters: - $ref: '#/components/parameters/InflectionHeader' tags: - Messaging /v1/messaging/messages/oh_sync_status: get: description: Get the Oracle Health sync status operationId: get_oh_sync_status responses: '200': content: application/json: schema: $ref: ./schemas/OhSyncStatus.yml description: OK '401': content: application/json: schema: $ref: ./schemas/Errors.yml description: Unauthorized '403': content: application/json: schema: $ref: ./schemas/Errors.yml description: Not authorized for access to secure messages '502': content: application/json: schema: $ref: ./schemas/Errors.yml description: Bad Gateway - upstream service error summary: /v1/messaging/messages/oh_sync_status parameters: - $ref: '#/components/parameters/InflectionHeader' tags: - Messaging /v1/messaging/messages/{id}: delete: description: Moves a secure message to the "Deleted" folder operationId: delete_message parameters: - description: The id of the message that is to be deleted in: path name: id required: true schema: type: string - $ref: '#/components/parameters/InflectionHeader' responses: '204': description: The message was deleted successfully '400': content: application/json: example: errors: - code: SM114 detail: Unable to move message status: '400' title: Operation failed schema: $ref: ./schemas/Errors.yml description: Bad Request '401': content: application/json: example: errors: - code: '401' detail: IAM user session is inactive status: '401' title: Not authorized schema: $ref: ./schemas/Errors.yml description: Unauthorized '403': content: application/json: example: errors: - code: '403' detail: You do not have access to messaging status: '403' title: Forbidden schema: $ref: ./schemas/Errors.yml description: Not authorized for access to secure messages summary: /v1/messaging/messages/{id} tags: - Messaging get: description: "Get a secure message and mark the message as read.\n\nNOTES:\n\n" operationId: get_message responses: '200': content: application/json: schema: $ref: ./schemas/SecureMessageDetail.yml description: OK '401': content: application/json: schema: $ref: ./schemas/Errors.yml description: Unauthorized '403': content: application/json: schema: $ref: ./schemas/Errors.yml description: Not authorized for access to secure messages summary: /v1/messaging/messages/{id} parameters: - $ref: '#/components/parameters/InflectionHeader' tags: - Messaging patch: description: Moves a secure message to a specified folder operationId: post_move_message parameters: - description: The id of the message that is to be moved in: path name: id required: true schema: type: string - description: The id of the folder that the message is to be moved to in: query name: folder_id, required: true schema: type: string - $ref: '#/components/parameters/InflectionHeader' responses: '204': description: The message was moved successfully '401': content: application/json: schema: $ref: ./schemas/Errors.yml description: Unauthorized '403': content: application/json: schema: $ref: ./schemas/Errors.yml description: Not authorized for access to secure messages summary: /v1/messaging/messages/{id}/move tags: - Messaging /v1/messaging/messages/{id}/attachments/{attachment_id}: get: description: 'Get a secure message attachment content as a direct binary download. Secure messaging supports the following file types/extensions: doc, docx, gif, jpg, pdf, png, rtf, txt, xls, xlsx. ' operationId: get_attachment parameters: - description: ID of the message that we are retrieving attachments of in: path name: id required: true schema: type: integer - $ref: '#/components/parameters/InflectionHeader' responses: '200': content: application/octet-stream: schema: format: binary type: string description: OK headers: Content-Disposition: description: 'This header will have the value of "attachment", and a "filename" parameter containing the original filename of the attached content. ' schema: type: string '401': content: application/json: schema: $ref: ./schemas/Errors.yml description: Unauthorized '403': content: application/json: schema: $ref: ./schemas/Errors.yml description: Not authorized for access to secure messages summary: /v1/messaging/messages/{id}/attachments/{attachment_id} tags: - Messaging /v1/messaging/messages/{id}/reply: post: description: "Send reply to a secure message\n\nNOTE: If including file attachments, this request must be sent as multipart/form-data\n\nFile attachment restrictions (as imposed by MHV):\n\n" operationId: post_create_message_reply parameters: - description: ID of the message that is being replied to in: path name: id required: true schema: type: integer - description: Indicates if this message is for an OH triage group (allows larger attachments) in: query name: is_oh_triage_group required: false schema: type: boolean - $ref: '#/components/parameters/InflectionHeader' requestBody: content: application/json: schema: $ref: ./schemas/SecureMessageReplyRequest.yml multipart/form-data: schema: properties: message: description: Stringified JSON with same parameters as if this was an application/json request (e.g. '{"body":"test body with attachment"}') type: string uploads[]: description: 'One or more message attachments. NOTES: ' items: format: binary type: string type: array type: object description: Reply message body required: true responses: '200': content: application/json: schema: $ref: ./schemas/SecureMessageDetail.yml description: OK '400': content: application/json: schema: $ref: ./schemas/Errors.yml description: "Bad Request - Oracle Health message send failed. This can occur when:\n\n" '401': content: application/json: schema: $ref: ./schemas/Errors.yml description: Unauthorized '403': content: application/json: schema: $ref: ./schemas/Errors.yml description: Not authorized for access to secure messages '422': content: application/json: schema: $ref: ./schemas/Errors.yml description: 'Unprocessable Entity - Validation failed for one or more message fields (for example, missing or empty `body`), as defined by the request schema. ' summary: /v1/messaging/messages/{id}/reply tags: - Messaging /v1/messaging/messages/{id}/thread: get: description: 'Gets a list of message summaries that are related to the message of the passed id. ' operationId: get_messages_for_thread responses: '200': content: application/json: schema: oneOf: - $ref: ./schemas/SecureMessageListInThread.yml - $ref: ./schemas/SecureMessageListInThreadWithFullBody.yml description: OK '401': content: application/json: schema: $ref: ./schemas/Errors.yml description: Unauthorized '403': content: application/json: schema: $ref: ./schemas/Errors.yml description: Not authorized for access to secure messages summary: /v1/messaging/messages/{id}/thread parameters: - name: full_body in: query description: Include the full body of the messages and attachments meta in the response required: false schema: type: boolean - $ref: '#/components/parameters/InflectionHeader' tags: - Messaging /v1/messaging/recipients: get: description: List available recipients to which messages may be sent operationId: get_triage_teams responses: '200': content: application/json: schema: $ref: ./schemas/SecureMessagingRecipients.yml description: OK '401': content: application/json: schema: $ref: ./schemas/Errors.yml description: Unauthorized '403': content: application/json: schema: $ref: ./schemas/Errors.yml description: Not authorized for access to secure messages summary: /v1/messaging/recipients parameters: - $ref: '#/components/parameters/InflectionHeader' tags: - Messaging /v1/messaging/allrecipients: get: description: List available recipients to which messages may be sent with advanced attributes operationId: get_all_triage_teams responses: '200': content: application/json: schema: $ref: ./schemas/SecureMessagingAllRecipients.yml description: OK '401': content: application/json: schema: $ref: ./schemas/Errors.yml description: Unauthorized '403': content: application/json: schema: $ref: ./schemas/Errors.yml description: Not authorized for access to secure messages summary: /v1/messaging/allrecipients tags: - Messaging /v1/messaging/threads/{id}/move: patch: description: Moves all received messages in a secure message thread to a specified folder. Sent messages, draft messages, and deleted messages will not be moved. operationId: post_move_thread parameters: - description: The id of the thread that is to be moved in: path name: id required: true schema: type: string - description: The id of the folder that the message is to be moved to in: query name: folder_id, required: true schema: type: string - $ref: '#/components/parameters/InflectionHeader' responses: '204': description: The message thread was moved successfully '401': content: application/json: schema: $ref: ./schemas/Errors.yml description: Unauthorized '403': content: application/json: schema: $ref: ./schemas/Errors.yml description: Not authorized for access to secure messages summary: /v1/messaging/threads/{id}/move tags: - Messaging /v1/messaging/preferences/recipients: post: description: Update recipients `preferredTeam` value operationId: update_triage_team_preferences requestBody: required: true content: application/json: schema: $ref: ./schemas/SecureMessagingUpdateTriageTeamRequest.yml responses: '200': description: Success content: application/json: type: string example: Success '401': content: application/json: schema: $ref: ./schemas/Errors.yml description: Unauthorized '403': content: application/json: schema: $ref: ./schemas/Errors.yml description: Not authorized for access to secure messages summary: /v1/messaging/preferences/recipients tags: - Messaging /v1/messaging/preferences/signature: get: description: Gets user message signature preferences operationId: get_signature responses: '200': content: application/json: schema: $ref: ./schemas/SecureMessageSignature.yml description: OK '401': content: application/json: schema: $ref: ./schemas/Errors.yml description: Unauthorized '403': content: application/json: schema: $ref: ./schemas/Errors.yml description: Not authorized for access to secure messages summary: /v1/messaging/preferences/signature parameters: - $ref: '#/components/parameters/InflectionHeader' tags: - Messaging post: description: Update user message signature preferences operationId: update_signature requestBody: required: true content: application/json: schema: $ref: ./schemas/SecureMessageSignatureUpdateRequest.yml responses: '200': description: Success content: application/json: schema: $ref: ./schemas/SecureMessageSignature.yml '401': content: application/json: schema: $ref: ./schemas/Errors.yml description: Unauthorized '403': content: application/json: schema: $ref: ./schemas/Errors.yml description: Not authorized for access to secure messages summary: /v1/messaging/preferences/signature parameters: - $ref: '#/components/parameters/InflectionHeader' tags: - Messaging components: parameters: InflectionHeader: in: header name: X-Key-Inflection required: false schema: type: string enum: - camel - snake description: Instructs the API to return camelCase keys rather than snake_case securitySchemes: bearer_token: type: http scheme: bearer bearerFormat: JWT productionOauth: type: oauth2 description: 'The authentication model for the Appealable Issues API uses OAuth 2.0/OpenID Connect. The following authorization models are supported: [Authorization code flow](https://developer.va.gov/explore/api/appealable-issues/authorization-code) and [Client Credentials Grant (CCG)](https://developer.va.gov/explore/api/appealable-issues/client-credentials).' flows: authorizationCode: authorizationUrl: https://api.va.gov/oauth2/appeals/v1/authorization tokenUrl: https://api.va.gov/oauth2/appeals/v1/token scopes: veteran/AppealableIssues.read: Appealable issues info veteran/appeals.read: Appeals info representative/AppealableIssues.read: Appealable issues info representative/appeals.read: Appeals info clientCredentials: tokenUrl: To get production access, you must either work for VA or have specific VA agreements in place. If you have questions, [contact us](https://developer.va.gov/support/contact-us). scopes: system/AppealableIssues.read: Appealable issues info system/appeals.read: Appeals info sandboxOauth: type: oauth2 description: 'The authentication model for the Appealable Issues API uses OAuth 2.0/OpenID Connect. The following authorization models are supported: [Authorization code flow](https://developer.va.gov/explore/api/appealable-issues/authorization-code) and [Client Credentials Grant (CCG)](https://developer.va.gov/explore/api/appealable-issues/client-credentials).' flows: authorizationCode: authorizationUrl: https://sandbox-api.va.gov/oauth2/appeals/v1/authorization tokenUrl: https://sandbox-api.va.gov/oauth2/appeals/v1/token scopes: veteran/AppealableIssues.read: Appealable issues info veteran/appeals.read: Appeals info representative/AppealableIssues.read: Appealable issues info representative/appeals.read: Appeals info clientCredentials: tokenUrl: https://deptva-eval.okta.com/oauth2/auskff5o6xsoQVngk2p7/v1/token scopes: system/AppealableIssues.read: Appealable issues info system/appeals.read: Appeals info