swagger: '2.0' info: description: | The Internal API is a RESTful API that enables the Customer application for MilMove. All endpoints are located under `/internal`. version: 0.0.1 title: MilMove Internal API contact: email: ppp@truss.works license: name: MIT url: https://opensource.org/licenses/MIT basePath: /internal consumes: - application/json produces: - application/json tags: - name: responses - name: orders - name: certification - name: moves - name: office - name: documents - name: uploads - name: service_members - name: backup_contacts - name: duty_locations - name: transportation_offices - name: queues - name: entitlements - name: calendar - name: move_docs - name: ppm - name: postal_codes - name: addresses - name: mtoShipment - name: featureFlags - name: okta_profile - name: application_parameters definitions: ApplicationParameters: type: object properties: validationCode: type: string format: string x-nullable: true parameterName: type: string format: string x-nullable: true parameterValue: type: string format: string x-nullable: true OktaUserProfileData: type: object properties: sub: type: string format: string example: 1duekdue9ekrjghf login: type: string format: x-email example: user@email.com pattern: ^[a-zA-Z0-9.%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ email: type: string format: x-email example: user@email.com pattern: ^[a-zA-Z0-9.%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ firstName: type: string example: John lastName: type: string example: Doe cac_edipi: type: string example: '1234567890' maxLength: 10 x-nullable: true UpdateOktaUserProfileData: type: object properties: profile: $ref: '#/definitions/OktaUserProfileData' Privilege: type: object properties: id: type: string format: uuid example: c56a4780-65aa-42ec-a945-5fd87dec0538 privilegeType: type: string example: supervisor privilegeName: type: string example: Supervisor createdAt: type: string format: date-time readOnly: true updatedAt: type: string format: date-time readOnly: true LoggedInUserPayload: type: object properties: id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 email: type: string format: x-email pattern: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ example: john_bob@example.com readOnly: true first_name: type: string example: John readOnly: true service_member: $ref: '#/definitions/ServiceMemberPayload' office_user: $ref: '#/definitions/OfficeUser' roles: type: array items: $ref: '#/definitions/Role' x-nullable: true permissions: type: array items: type: string privileges: type: array items: $ref: '#/definitions/Privilege' required: - id DutyLocationsPayload: type: array items: $ref: '#/definitions/DutyLocationPayload' SubmitMoveForApprovalPayload: type: object properties: certificate: $ref: '#/definitions/CreateSignedCertificationPayload' PPMEstimateRange: type: object properties: range_min: type: integer title: Low estimate range_max: type: integer title: High estimate required: - range_min - range_max MovePayload: type: object properties: id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 orders_id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 service_member_id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 readOnly: true locator: type: string example: '12432' status: $ref: '#/definitions/MoveStatus' created_at: type: string format: date-time updated_at: type: string format: date-time submitted_at: type: string format: date-time x-nullable: true mto_shipments: $ref: '#/definitions/MTOShipments' closeout_office: $ref: '#/definitions/TransportationOffice' cancel_reason: type: string example: Change of orders x-nullable: true eTag: type: string primeCounselingCompletedAt: format: date-time type: string readOnly: true additionalDocuments: $ref: '#/definitions/Document' required: - id - orders_id - locator - created_at - updated_at - eTag CancelMove: type: object properties: cancel_reason: type: string example: Change of orders x-nullable: true required: - cancel_reason PatchMovePayload: type: object properties: closeoutOfficeId: type: string format: uuid description: >- The transportation office that will handle the PPM shipment's closeout approvals for Army and Air Force service members required: - closeoutOfficeId IndexMovesPayload: type: array items: $ref: '#/definitions/MovePayload' MoveDocuments: type: array items: $ref: '#/definitions/MoveDocumentPayload' WeightTicketSetType: type: string x-nullable: true title: Select weight ticket type enum: - CAR - CAR_TRAILER - BOX_TRUCK - PRO_GEAR x-display-value: CAR: Car CAR_TRAILER: Car + Trailer BOX_TRUCK: Box truck PRO_GEAR: Pro-gear UpdateProGearWeightTicket: type: object properties: belongsToSelf: description: >- Indicates if this information is for the customer's own pro-gear, otherwise, it's the spouse's. type: boolean description: description: Describes the pro-gear that was moved. type: string hasWeightTickets: description: >- Indicates if the user has a weight ticket for their pro-gear, otherwise they have a constructed weight. type: boolean weight: description: Weight of the vehicle not including the pro-gear. type: integer minimum: 0 MoveDocumentPayload: type: object properties: id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 move_id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 personally_procured_move_id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 x-nullable: true document: $ref: '#/definitions/Document' title: type: string example: very_useful_document.pdf title: Document title move_document_type: $ref: '#/definitions/MoveDocumentType' status: $ref: '#/definitions/MoveDocumentStatus' notes: type: string example: This document is good to go! x-nullable: true title: Notes moving_expense_type: $ref: '#/definitions/MovingExpenseType' requested_amount_cents: type: integer format: cents minimum: 1 title: Requested Amount description: unit is cents payment_method: type: string title: Payment Method enum: - OTHER - GTCC x-display-value: OTHER: Other account GTCC: GTCC receipt_missing: title: missing expense receipt type: boolean x-nullable: true weight_ticket_set_type: $ref: '#/definitions/WeightTicketSetType' vehicle_nickname: type: string title: Nickname (ex. "15-foot truck") x-nullable: true vehicle_make: type: string title: Vehicle make x-nullable: true vehicle_model: type: string title: Vehicle model x-nullable: true empty_weight: title: Empty weight type: integer minimum: 0 x-nullable: true x-formatting: weight empty_weight_ticket_missing: title: missing empty weight ticket type: boolean x-nullable: true full_weight: title: Full weight type: integer minimum: 0 x-nullable: true x-formatting: weight full_weight_ticket_missing: title: missing full weight ticket type: boolean x-nullable: true weight_ticket_date: title: Weight ticket date type: string example: '2018-04-26' format: date x-nullable: true trailer_ownership_missing: title: missing trailer ownership documentation type: boolean x-nullable: true storage_start_date: type: string format: date title: Start date of storage for storage expenses example: '2018-04-26' x-nullable: true storage_end_date: type: string format: date title: End date of storage for storage expenses example: '2018-04-26' x-nullable: true required: - id - move_id - document - title - move_document_type - status CreateGenericMoveDocumentPayload: type: object properties: personally_procured_move_id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 x-nullable: true upload_ids: type: array items: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 title: type: string example: very_useful_document.pdf move_document_type: $ref: '#/definitions/MoveDocumentType' notes: type: string example: This document is good to go! x-nullable: true title: Notes required: - upload_ids - title - move_document_type MoveDocumentType: type: string title: Document type example: EXPENSE enum: - OTHER - WEIGHT_TICKET - STORAGE_EXPENSE - SHIPMENT_SUMMARY - EXPENSE - WEIGHT_TICKET_SET x-display-value: OTHER: Other document type WEIGHT_TICKET: Weight ticket STORAGE_EXPENSE: Storage expense receipt SHIPMENT_SUMMARY: Shipment summary EXPENSE: Expense WEIGHT_TICKET_SET: Weight ticket set UpdateMovingExpense: type: object properties: movingExpenseType: $ref: '#/definitions/MovingExpenseType' description: description: A brief description of the expense type: string paidWithGTCC: description: >- Indicates if the service member used their government issued card to pay for the expense type: boolean amount: description: The total amount of the expense as indicated on the receipt type: integer missingReceipt: description: Indicates if the customer is missing the receipt for their expense. type: boolean sitStartDate: description: >- The date the shipment entered storage, applicable for the `STORAGE` movingExpenseType only type: string format: date sitEndDate: description: >- The date the shipment exited storage, applicable for the `STORAGE` movingExpenseType only type: string format: date weightStored: description: The total weight stored in PPM SIT type: integer sitLocation: allOf: - $ref: '#/definitions/SITLocationType' - x-nullable: true sitReimburseableAmount: description: The amount of SIT that will be reimbursed type: integer x-nullable: true required: - movingExpenseType - description - paidWithGTCC - amount - missingReceipt MoveDocumentStatus: type: string title: Document status enum: - AWAITING_REVIEW - OK - HAS_ISSUE - EXCLUDE_FROM_CALCULATION x-display-value: AWAITING_REVIEW: Awaiting review OK: OK HAS_ISSUE: Has issue EXCLUDE_FROM_CALCULATION: Exclude from calculation CreateWeightTicketDocumentsPayload: type: object properties: personally_procured_move_id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 upload_ids: type: array items: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 weight_ticket_set_type: $ref: '#/definitions/WeightTicketSetType' vehicle_nickname: type: string title: Vehicle nickname (ex. 'Large box truck') x-nullable: true vehicle_make: type: string title: Vehicle make x-nullable: true vehicle_model: type: string title: Vehicle model x-nullable: true empty_weight_ticket_missing: title: missing empty weight ticket type: boolean empty_weight: title: empty weight ticket recorded weight type: integer minimum: 0 full_weight_ticket_missing: title: missing full weight ticket type: boolean full_weight: title: full weight ticket recorded weight type: integer minimum: 0 weight_ticket_date: title: Full Weight Ticket Date type: string example: '2018-04-26' format: date x-nullable: true trailer_ownership_missing: title: missing trailer ownership documentation type: boolean required: - personally_procured_move_id - weight_ticket_set_type - full_weight_ticket_missing - empty_weight_ticket_missing - trailer_ownership_missing UpdateWeightTicket: type: object properties: vehicleDescription: description: >- Description of the vehicle used for the trip. E.g. make/model, type of truck/van, etc. type: string emptyWeight: description: Weight of the vehicle when empty. type: integer minimum: 0 missingEmptyWeightTicket: description: >- Indicates if the customer is missing a weight ticket for the vehicle weight when empty. type: boolean fullWeight: description: The weight of the vehicle when full. type: integer minimum: 0 missingFullWeightTicket: description: >- Indicates if the customer is missing a weight ticket for the vehicle weight when full. type: boolean ownsTrailer: description: Indicates if the customer used a trailer they own for the move. type: boolean trailerMeetsCriteria: description: >- Indicates if the trailer that the customer used meets all the criteria to be claimable. type: boolean adjustedNetWeight: description: Indicates the adjusted net weight of the vehicle type: integer minimum: 0 netWeightRemarks: description: Remarks explaining any edits made to the net weight type: string allowableWeight: description: Indicates the maximum reimbursable weight of the shipment type: integer minimum: 0 TransportationOffices: type: array items: $ref: '#/definitions/TransportationOffice' OfficeUser: type: object properties: id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 user_id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 first_name: type: string example: John x-nullable: true title: First name middle_name: type: string example: L. x-nullable: true title: Middle name last_name: type: string example: Donut x-nullable: true title: Last name email: type: string format: x-email pattern: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ example: john_bob@example.com x-nullable: true title: Personal Email Address telephone: type: string format: telephone pattern: ^[2-9]\d{2}-\d{3}-\d{4}$ example: 212-555-5555 x-nullable: true title: Best contact phone transportation_office: $ref: '#/definitions/TransportationOffice' created_at: type: string format: date-time updated_at: type: string format: date-time ServiceMemberPayload: type: object properties: id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 user_id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 edipi: type: string format: edipi example: '5789345789' pattern: ^\d{10}$ minLength: 10 maxLength: 10 x-nullable: true title: DoD ID number emplid: type: string pattern: ^\d{7}$ minLength: 7 maxLength: 7 example: '5789345' x-nullable: true title: USCG EMPLID orders: type: array items: $ref: '#/definitions/Orders' affiliation: $ref: '#/definitions/Affiliation' title: Branch grade: $ref: '#/definitions/OrderPayGrade' title: Grade first_name: type: string example: John x-nullable: true title: First name middle_name: type: string example: L. x-nullable: true title: Middle name last_name: type: string example: Donut x-nullable: true title: Last name suffix: type: string example: Jr. x-nullable: true title: Suffix telephone: type: string format: telephone pattern: ^[2-9]\d{2}-\d{3}-\d{4}$ example: 212-555-5555 x-nullable: true title: Best contact phone secondary_telephone: type: string format: telephone pattern: ^[2-9]\d{2}-\d{3}-\d{4}$ example: 212-555-5555 x-nullable: true title: Secondary Phone personal_email: type: string format: x-email pattern: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ example: john_bob@example.com x-nullable: true title: Personal Email Address phone_is_preferred: type: boolean x-nullable: true title: Telephone email_is_preferred: type: boolean x-nullable: true title: Email residential_address: $ref: '#/definitions/Address' title: Residential Address backup_mailing_address: $ref: '#/definitions/Address' backup_contacts: $ref: '#/definitions/IndexServiceMemberBackupContactsPayload' is_profile_complete: type: boolean cac_validated: type: boolean created_at: type: string format: date-time updated_at: type: string format: date-time weight_allotment: $ref: '#/definitions/WeightAllotment' required: - id - user_id - is_profile_complete - created_at - updated_at CreateServiceMemberPayload: type: object properties: user_id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 edipi: type: string format: edipi pattern: ^\d{10}$ minLength: 10 maxLength: 10 example: '5789345789' x-nullable: true title: DoD ID number affiliation: $ref: '#/definitions/Affiliation' grade: $ref: '#/definitions/OrderPayGrade' first_name: type: string example: John x-nullable: true title: First name middle_name: type: string example: L. x-nullable: true title: Middle name last_name: type: string example: Donut x-nullable: true title: Last name suffix: type: string example: Jr. x-nullable: true title: Suffix telephone: type: string format: telephone pattern: ^[2-9]\d{2}-\d{3}-\d{4}$ example: 212-555-5555 x-nullable: true title: Best contact phone secondary_telephone: type: string format: telephone pattern: ^[2-9]\d{2}-\d{3}-\d{4}$ example: 212-555-5555 x-nullable: true title: Alternate phone personal_email: type: string format: x-email pattern: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ example: john_bob@example.com x-nullable: true title: Personal email phone_is_preferred: type: boolean x-nullable: true title: Phone email_is_preferred: type: boolean x-nullable: true title: Email current_location_id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 x-nullable: true residential_address: $ref: '#/definitions/Address' backup_mailing_address: $ref: '#/definitions/Address' PatchServiceMemberPayload: type: object properties: user_id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 edipi: type: string format: edipi pattern: ^\d{10}$ minLength: 10 maxLength: 10 example: '5789345789' x-nullable: true title: DoD ID number emplid: type: string pattern: ^\d{7}$ minLength: 7 maxLength: 7 example: '5789345' x-nullable: true title: USCG EMPLID affiliation: $ref: '#/definitions/Affiliation' first_name: type: string example: John x-nullable: true title: First name middle_name: type: string example: L. x-nullable: true title: Middle name last_name: type: string example: Donut x-nullable: true title: Last name suffix: type: string example: Jr. x-nullable: true title: Suffix telephone: type: string format: telephone pattern: ^[2-9]\d{2}-\d{3}-\d{4}$ example: 212-555-5555 x-nullable: true title: Best Contact Phone secondary_telephone: type: string format: telephone pattern: ^[2-9]\d{2}-\d{3}-\d{4}$ example: 212-555-5555 x-nullable: true title: Alternate Phone personal_email: type: string format: x-email pattern: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ example: john_bob@example.com x-nullable: true title: Personal Email phone_is_preferred: type: boolean x-nullable: true title: Phone email_is_preferred: type: boolean x-nullable: true title: Email current_location_id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 x-nullable: true residential_address: $ref: '#/definitions/Address' backup_mailing_address: $ref: '#/definitions/Address' ServiceMemberBackupContactPayload: type: object properties: id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 service_member_id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 readOnly: true name: type: string example: Susan Smith x-nullable: true title: Name telephone: type: string format: telephone pattern: ^[2-9]\d{2}-\d{3}-\d{4}$ example: 212-555-5555 x-nullable: true title: Phone email: type: string format: x-email pattern: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ example: john_bob@example.com x-nullable: true title: Email permission: $ref: '#/definitions/BackupContactPermission' created_at: type: string format: date-time updated_at: type: string format: date-time required: - id - created_at - updated_at - name - email - permission BackupContactPermission: type: string enum: - NONE - VIEW - EDIT title: Permissions x-display-value: NONE: Contact Only VIEW: View all move details EDIT: View and edit all move details CreateServiceMemberBackupContactPayload: type: object properties: name: type: string example: Susan Smith x-nullable: true title: Name telephone: type: string format: telephone pattern: ^[2-9]\d{2}-\d{3}-\d{4}$ example: 212-555-5555 x-nullable: true title: Phone email: type: string format: x-email pattern: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ example: john_bob@exmaple.com x-nullable: true title: Email permission: $ref: '#/definitions/BackupContactPermission' required: - name - email - permission UpdateServiceMemberBackupContactPayload: type: object properties: name: type: string example: Susan Smith x-nullable: true telephone: type: string format: telephone pattern: ^[2-9]\d{2}-\d{3}-\d{4}$ example: 212-555-5555 x-nullable: true email: type: string format: x-email pattern: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ example: john_bob@example.com x-nullable: true title: email address permission: $ref: '#/definitions/BackupContactPermission' required: - name - email - permission IndexServiceMemberBackupContactsPayload: type: array items: $ref: '#/definitions/ServiceMemberBackupContactPayload' SignedCertificationPayload: type: object properties: id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 created_at: type: string format: date-time updated_at: type: string format: date-time date: type: string format: date-time title: Date signature: type: string title: Signature certification_text: type: string move_id: type: string format: uuid personally_procured_move_id: type: string format: uuid x-nullable: true ppm_id: $ref: '#/definitions/PpmID' certification_type: $ref: '#/definitions/NullableSignedCertificationType' required: - id - move_id - created_at - updated_at - date - signature - certification_text CreateSignedCertificationPayload: type: object properties: date: type: string format: date-time title: Date signature: type: string title: Signature certification_text: type: string personally_procured_move_id: type: string format: uuid x-nullable: true ppm_id: $ref: '#/definitions/PpmID' certification_type: $ref: '#/definitions/SignedCertificationTypeCreate' required: - date - signature - certification_text SavePPMShipmentSignedCertification: type: object properties: certification_text: description: Text that the customer is agreeing to and signing. type: string signature: description: Customer signature type: string date: description: Date of signature type: string format: date required: - certification_text - signature - date SignedCertifications: type: array items: $ref: '#/definitions/SignedCertificationPayload' NullableSignedCertificationType: type: string enum: - PPM_PAYMENT - SHIPMENT - PPM - HHG x-nullable: true SignedCertificationTypeCreate: type: string enum: - PPM_PAYMENT - SHIPMENT - PRE_CLOSEOUT_REVIEWED_PPM_PAYMENT - CLOSEOUT_REVIEWED_PPM_PAYMENT x-nullable: true PostDocumentPayload: type: object properties: service_member_id: type: string format: uuid title: The service member this document belongs to OrderPayGrade: type: string x-nullable: true title: Grade enum: - E_1 - E_2 - E_3 - E_4 - E_5 - E_6 - E_7 - E_8 - E_9 - E_9_SPECIAL_SENIOR_ENLISTED - O_1_ACADEMY_GRADUATE - O_2 - O_3 - O_4 - O_5 - O_6 - O_7 - O_8 - O_9 - O_10 - W_1 - W_2 - W_3 - W_4 - W_5 - AVIATION_CADET - CIVILIAN_EMPLOYEE - ACADEMY_CADET - MIDSHIPMAN x-display-value: E_1: E-1 E_2: E-2 E_3: E-3 E_4: E-4 E_5: E-5 E_6: E-6 E_7: E-7 E_8: E-8 E_9: E-9 E_9_SPECIAL_SENIOR_ENLISTED: E-9 (Special Senior Enlisted) O_1_ACADEMY_GRADUATE: O-1 or Service Academy Graduate O_2: O-2 O_3: O-3 O_4: O-4 O_5: O-5 O_6: O-6 O_7: O-7 O_8: O-8 O_9: O-9 O_10: O-10 W_1: W-1 W_2: W-2 W_3: W-3 W_4: W-4 W_5: W-5 AVIATION_CADET: Aviation Cadet CIVILIAN_EMPLOYEE: Civilian Employee ACADEMY_CADET: Service Academy Cadet MIDSHIPMAN: Midshipman DeptIndicator: type: string x-nullable: true title: Dept. indicator enum: - NAVY_AND_MARINES - ARMY - ARMY_CORPS_OF_ENGINEERS - AIR_AND_SPACE_FORCE - COAST_GUARD - OFFICE_OF_SECRETARY_OF_DEFENSE x-display-value: NAVY_AND_MARINES: 17 Navy and Marine Corps ARMY: 21 Army ARMY_CORPS_OF_ENGINEERS: 96 Army Corps of Engineers AIR_AND_SPACE_FORCE: 57 Air Force and Space Force COAST_GUARD: 70 Coast Guard OFFICE_OF_SECRETARY_OF_DEFENSE: 97 Office of the Secretary of Defense Reimbursement: type: object x-nullable: true properties: id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 requested_amount: type: integer format: cents minimum: 1 title: Requested Amount description: unit is cents method_of_receipt: $ref: '#/definitions/MethodOfReceipt' status: $ref: '#/definitions/ReimbursementStatus' requested_date: x-nullable: true type: string example: '2018-04-26' format: date title: Requested Date required: - requested_amount - method_of_receipt ReimbursementStatus: x-nullable: true type: string title: Reimbursement enum: - DRAFT - REQUESTED - APPROVED - REJECTED - PAID MethodOfReceipt: x-nullable: true type: string title: Method of Receipt enum: - MIL_PAY - OTHER_DD - GTCC x-display-value: MIL_PAY: MilPay OTHER_DD: Other account GTCC: GTCC MoveStatus: type: string title: Move status enum: - DRAFT - SUBMITTED - APPROVED - CANCELED - NEEDS SERVICE COUNSELING - APPROVALS REQUESTED x-display-value: DRAFT: Draft SUBMITTED: Submitted APPROVED: Approved CANCELED: Canceled OrdersStatus: type: string title: Move status enum: - DRAFT - SUBMITTED - APPROVED - CANCELED x-display-value: DRAFT: Draft SUBMITTED: Submitted APPROVED: Approved CANCELED: Canceled OrdersTypeDetail: type: string title: Orders type detail enum: - HHG_PERMITTED - PCS_TDY - HHG_RESTRICTED_PROHIBITED - HHG_RESTRICTED_AREA - INSTRUCTION_20_WEEKS - HHG_PROHIBITED_20_WEEKS - DELAYED_APPROVAL x-display-value: HHG_PERMITTED: Shipment of HHG Permitted PCS_TDY: PCS with TDY Enroute HHG_RESTRICTED_PROHIBITED: Shipment of HHG Restricted or Prohibited HHG_RESTRICTED_AREA: HHG Restricted Area-HHG Prohibited INSTRUCTION_20_WEEKS: Course of Instruction 20 Weeks or More HHG_PROHIBITED_20_WEEKS: Shipment of HHG Prohibited but Authorized within 20 weeks DELAYED_APPROVAL: Delayed Approval 20 Weeks or More x-nullable: true Orders: type: object properties: id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 service_member_id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 grade: $ref: '#/definitions/OrderPayGrade' issue_date: type: string description: The date and time that these orders were cut. format: date example: '2018-04-26' title: Date issued report_by_date: type: string description: Report By Date format: date example: '2018-04-26' title: Report by status: $ref: '#/definitions/OrdersStatus' orders_type: $ref: '#/definitions/OrdersType' orders_type_detail: $ref: '#/definitions/OrdersTypeDetail' has_dependents: type: boolean title: Are dependents included in your orders? spouse_has_pro_gear: type: boolean title: >- Do you have a spouse who will need to move items related to their occupation (also known as spouse pro-gear)? origin_duty_location: $ref: '#/definitions/DutyLocationPayload' x-nullable: true originDutyLocationGbloc: type: string title: From what GBLOC do your orders originate? x-nullable: true new_duty_location: $ref: '#/definitions/DutyLocationPayload' uploaded_orders: $ref: '#/definitions/Document' uploaded_amended_orders: $ref: '#/definitions/Document' uploaded_amended_orders_id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 moves: $ref: '#/definitions/IndexMovesPayload' orders_number: type: string title: Orders Number x-nullable: true example: 030-00362 created_at: type: string format: date-time updated_at: type: string format: date-time tac: type: string title: TAC example: F8J1 x-nullable: true sac: type: string title: SAC example: N002214CSW32Y9 x-nullable: true department_indicator: $ref: '#/definitions/DeptIndicator' authorizedWeight: type: integer example: 7000 x-nullable: true entitlement: $ref: '#/definitions/Entitlement' providesServicesCounseling: type: boolean x-omitempty: false required: - id - service_member_id - issue_date - report_by_date - orders_type - has_dependents - spouse_has_pro_gear - new_duty_location - uploaded_orders - created_at - updated_at Entitlement: type: object properties: proGear: type: integer example: 2000 x-nullable: true description: > Pro-gear weight limit as set by an Office user, distinct from the service member's default weight allotment determined by pay grade proGearSpouse: type: integer example: 500 x-nullable: true description: > Spouse's pro-gear weight limit as set by an Office user, distinct from the service member's default weight allotment determined by pay grade CreateUpdateOrders: type: object properties: service_member_id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 issue_date: type: string description: The date and time that these orders were cut. format: date example: '2018-04-26' title: Orders date report_by_date: type: string description: Report By Date format: date example: '2018-04-26' title: Report-by date orders_type: $ref: '#/definitions/OrdersType' orders_type_detail: $ref: '#/definitions/OrdersTypeDetail' has_dependents: type: boolean title: Are dependents included in your orders? spouse_has_pro_gear: type: boolean title: >- Do you have a spouse who will need to move items related to their occupation (also known as spouse pro-gear)? new_duty_location_id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 orders_number: type: string title: Orders Number x-nullable: true example: 030-00362 tac: type: string title: TAC example: F8J1 x-nullable: true sac: type: string title: SAC example: N002214CSW32Y9 x-nullable: true department_indicator: $ref: '#/definitions/DeptIndicator' grade: $ref: '#/definitions/OrderPayGrade' origin_duty_location_id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 required: - service_member_id - issue_date - report_by_date - orders_type - has_dependents - spouse_has_pro_gear - new_duty_location_id InvalidRequestResponsePayload: type: object properties: errors: type: object additionalProperties: type: string MoveQueueItem: type: object properties: id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 status: type: string example: APPROVED ppm_status: type: string example: PAYMENT_REQUESTED x-nullable: true hhg_status: type: string example: ACCEPTED x-nullable: true locator: type: string example: '12432' gbl_number: type: string example: LNK12345 title: GBL Number x-nullable: true customer_name: type: string example: Thedog, Nino title: Customer Name edipi: type: string format: edipi pattern: ^\d{10}$ minLength: 10 maxLength: 10 example: '5789345789' title: 'DoD ID #' grade: $ref: '#/definitions/OrderPayGrade' orders_type: type: string title: Move Type enum: - PCS - OCONUS - PCS - CONUS - PCS + TDY - OCONUS - PCS + TDY - CONUS move_date: type: string format: date example: '2018-04-25' x-nullable: true submitted_date: type: string format: date-time example: '2018-04-25' x-nullable: true last_modified_date: type: string format: date-time example: '2017-07-21T17:32:28Z' created_at: type: string format: date-time origin_duty_location_name: type: string example: Dover AFB title: Origin x-nullable: true destination_duty_location_name: type: string example: Dover AFB title: Destination x-nullable: true pm_survey_conducted_date: type: string format: date-time example: '2017-07-21T17:32:28Z' x-nullable: true origin_gbloc: type: string example: LKNQ title: Origin GBLOC x-nullable: true destination_gbloc: type: string example: LKNQ title: Destination GBLOC x-nullable: true delivered_date: type: string format: date-time example: '2017-07-21T17:32:28Z' x-nullable: true invoice_approved_date: type: string format: date-time example: '2017-07-21T17:32:28Z' x-nullable: true weight_allotment: $ref: '#/definitions/WeightAllotment' branch_of_service: type: string actual_move_date: type: string format: date example: '2018-04-25' x-nullable: true original_move_date: type: string format: date example: '2018-04-25' x-nullable: true required: - id - status - locator - customer_name - edipi - grade - orders_type - branch_of_service - last_modified_date - created_at AvailableMoveDates: type: object properties: start_date: type: string format: date example: '2018-09-25' available: type: array items: type: string format: date example: '2018-09-25' required: - start_date - available WeightAllotment: type: object properties: total_weight_self: type: integer example: 18000 total_weight_self_plus_dependents: type: integer example: 18000 pro_gear_weight: type: integer example: 2000 pro_gear_weight_spouse: type: integer example: 500 required: - total_weight_self - total_weight_self_plus_dependents - pro_gear_weight - pro_gear_weight_spouse IndexEntitlements: type: object additionalProperties: $ref: '#/definitions/WeightAllotment' RateEnginePostalCodePayload: type: object properties: valid: type: boolean example: false postal_code: type: string description: zip code, international allowed format: zip title: ZIP example: '''90210'' or ''N15 3NL''' postal_code_type: type: string enum: - origin - destination required: - valid - postal_code - postal_code_type Role: type: object properties: id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 roleType: type: string example: customer createdAt: type: string format: date-time updatedAt: type: string format: date-time required: - id - roleType - createdAt - updatedAt MTOAgentType: type: string title: MTO Agent Type example: RELEASING_AGENT enum: - RELEASING_AGENT - RECEIVING_AGENT MTOAgent: properties: id: example: 1f2270c7-7166-40ae-981e-b200ebdf3054 format: uuid type: string mtoShipmentID: example: 1f2270c7-7166-40ae-981e-b200ebdf3054 format: uuid type: string readOnly: true createdAt: format: date-time type: string readOnly: true updatedAt: format: date-time type: string readOnly: true firstName: type: string x-nullable: true lastName: type: string x-nullable: true email: type: string format: x-email pattern: (^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$)|(^$) x-nullable: true phone: type: string format: telephone pattern: (^[2-9]\d{2}-\d{3}-\d{4}$)|(^$) x-nullable: true agentType: $ref: '#/definitions/MTOAgentType' type: object MTOAgents: items: $ref: '#/definitions/MTOAgent' type: array MTOShipmentType: type: string title: Shipment Type example: HHG enum: - HHG - HHG_INTO_NTS_DOMESTIC - HHG_OUTOF_NTS_DOMESTIC - PPM - BOAT_HAUL_AWAY - BOAT_TOW_AWAY - MOBILE_HOME x-display-value: HHG: HHG INTERNATIONAL_HHG: International HHG INTERNATIONAL_UB: International UB PPM: PPM BOAT_HAUL_AWAY: Boat Haul-Away BOAT_TOW_AWAY: Boat Tow-Away MOBILE_HOME: Mobile Home MTOShipment: properties: moveTaskOrderID: example: 1f2270c7-7166-40ae-981e-b200ebdf3054 format: uuid type: string readOnly: true id: example: 1f2270c7-7166-40ae-981e-b200ebdf3054 format: uuid type: string readOnly: true createdAt: format: date-time type: string readOnly: true updatedAt: format: date-time type: string readOnly: true requestedPickupDate: format: date type: string readOnly: true x-nullable: true requestedDeliveryDate: format: date type: string readOnly: true x-nullable: true agents: $ref: '#/definitions/MTOAgents' customerRemarks: type: string readOnly: true example: handle with care x-nullable: true ppmShipment: $ref: '#/definitions/PPMShipment' boatShipment: $ref: '#/definitions/BoatShipment' mobileHomeShipment: $ref: '#/definitions/MobileHome' shipmentType: $ref: '#/definitions/MTOShipmentType' status: $ref: '#/definitions/MTOShipmentStatus' pickupAddress: $ref: '#/definitions/Address' destinationAddress: $ref: '#/definitions/Address' secondaryPickupAddress: $ref: '#/definitions/Address' hasSecondaryPickupAddress: type: boolean x-omitempty: false x-nullable: true tertiaryPickupAddress: $ref: '#/definitions/Address' hasTertiaryPickupAddress: type: boolean x-omitempty: false x-nullable: true secondaryDeliveryAddress: $ref: '#/definitions/Address' hasSecondaryDeliveryAddress: type: boolean x-omitempty: false x-nullable: true tertiaryDeliveryAddress: $ref: '#/definitions/Address' hasTertiaryDeliveryAddress: type: boolean x-omitempty: false x-nullable: true actualProGearWeight: type: integer x-nullable: true x-omitempty: false actualSpouseProGearWeight: type: integer x-nullable: true x-omitempty: false eTag: type: string shipmentLocator: type: string x-nullable: true readOnly: true example: 1K43AR-01 MTOShipments: items: $ref: '#/definitions/MTOShipment' type: array MTOShipmentStatus: type: string readOnly: true enum: - DRAFT - APPROVED - SUBMITTED - REJECTED CreateShipment: type: object properties: moveTaskOrderID: example: 1f2270c7-7166-40ae-981e-b200ebdf3054 format: uuid type: string shipmentType: $ref: '#/definitions/MTOShipmentType' ppmShipment: $ref: '#/definitions/CreatePPMShipment' boatShipment: $ref: '#/definitions/CreateBoatShipment' mobileHomeShipment: $ref: '#/definitions/CreateMobileHomeShipment' requestedPickupDate: format: date type: string requestedDeliveryDate: format: date type: string customerRemarks: type: string example: handle with care x-nullable: true pickupAddress: $ref: '#/definitions/Address' secondaryPickupAddress: $ref: '#/definitions/Address' tertiaryPickupAddress: $ref: '#/definitions/Address' destinationAddress: $ref: '#/definitions/Address' secondaryDeliveryAddress: $ref: '#/definitions/Address' tertiaryDeliveryAddress: $ref: '#/definitions/Address' agents: $ref: '#/definitions/MTOAgents' required: - moveTaskOrderID - shipmentType CreatePPMShipment: description: >- A personally procured move is a type of shipment that a service members moves themselves. properties: expectedDepartureDate: description: | Date the customer expects to move. format: date type: string pickupAddress: $ref: '#/definitions/Address' secondaryPickupAddress: $ref: '#/definitions/Address' destinationAddress: $ref: '#/definitions/Address' secondaryDestinationAddress: $ref: '#/definitions/Address' tertiaryDestinationAddress: $ref: '#/definitions/Address' tertiaryPickupAddress: $ref: '#/definitions/Address' hasTertiaryPickupAddress: type: boolean x-nullable: true x-omitempty: false hasTertiaryDestinationAddress: type: boolean x-nullable: true x-omitempty: false sitExpected: type: boolean required: - expectedDepartureDate - pickupAddress - destinationAddress - sitExpected UpdatePPMShipment: type: object properties: expectedDepartureDate: description: | Date the customer expects to move. format: date type: string x-nullable: true actualMoveDate: format: date type: string x-nullable: true pickupAddress: $ref: '#/definitions/Address' secondaryPickupAddress: $ref: '#/definitions/Address' hasSecondaryPickupAddress: type: boolean x-omitempty: false x-nullable: true tertiaryPickupAddress: $ref: '#/definitions/Address' hasTertiaryPickupAddress: type: boolean x-omitempty: false x-nullable: true actualPickupPostalCode: description: > The actual postal code where the PPM shipment started. To be filled once the customer has moved the shipment. format: zip type: string title: ZIP example: '90210' pattern: ^(\d{5})$ x-nullable: true destinationAddress: $ref: '#/definitions/Address' secondaryDestinationAddress: $ref: '#/definitions/Address' hasSecondaryDestinationAddress: type: boolean x-omitempty: false x-nullable: true tertiaryDestinationAddress: $ref: '#/definitions/Address' hasTertiaryDestinationAddress: type: boolean x-omitempty: false x-nullable: true actualDestinationPostalCode: description: > The actual postal code where the PPM shipment ended. To be filled once the customer has moved the shipment. format: zip type: string title: ZIP example: '90210' pattern: ^(\d{5})$ x-nullable: true w2Address: x-nullable: true $ref: '#/definitions/Address' finalIncentive: description: > The final calculated incentive for the PPM shipment. This does not include **SIT** as it is a reimbursement. type: integer format: cents x-nullable: true x-omitempty: false readOnly: true sitExpected: type: boolean x-nullable: true estimatedWeight: type: integer example: 4200 x-nullable: true hasProGear: description: | Indicates whether PPM shipment has pro gear. type: boolean x-nullable: true proGearWeight: type: integer x-nullable: true spouseProGearWeight: type: integer x-nullable: true hasRequestedAdvance: description: | Indicates whether an advance has been requested for the PPM shipment. type: boolean x-nullable: true advanceAmountRequested: description: > The amount requested for an advance, or null if no advance is requested type: integer format: cents x-nullable: true hasReceivedAdvance: description: | Indicates whether an advance was received for the PPM shipment. type: boolean x-nullable: true advanceAmountReceived: description: | The amount received for an advance, or null if no advance is received. type: integer format: cents x-nullable: true CreateBoatShipment: description: Boat shipment information for the move. properties: type: type: string enum: - HAUL_AWAY - TOW_AWAY year: type: integer description: Year of the Boat make: type: string description: Make of the Boat model: type: string description: Model of the Boat lengthInInches: type: integer description: Length of the Boat in inches widthInInches: type: integer description: Width of the Boat in inches heightInInches: type: integer description: Height of the Boat in inches hasTrailer: type: boolean description: Does the boat have a trailer isRoadworthy: type: boolean description: Is the trailer roadworthy x-nullable: true required: - type - year - make - model - lengthInInches - widthInInches - heightInInches - hasTrailer UpdateBoatShipment: type: object properties: type: type: string enum: - HAUL_AWAY - TOW_AWAY x-nullable: true year: type: integer description: Year of the Boat x-nullable: true make: type: string description: Make of the Boat x-nullable: true model: type: string description: Model of the Boat x-nullable: true lengthInInches: type: integer description: Length of the Boat in inches x-nullable: true widthInInches: type: integer description: Width of the Boat in inches x-nullable: true heightInInches: type: integer description: Height of the Boat in inches x-nullable: true hasTrailer: type: boolean description: Does the boat have a trailer x-nullable: true isRoadworthy: type: boolean description: Is the trailer roadworthy x-nullable: true CreateMobileHomeShipment: description: A mobile home shipment that the prime moves for a service member. properties: make: type: string description: Make of the Mobile Home model: type: string description: Model of the Mobile Home year: type: integer description: Year of the Mobile Home lengthInInches: type: integer description: Length of the Mobile Home in inches heightInInches: type: integer description: Height of the Mobile Home in inches widthInInches: type: integer description: Width of the Mobile Home in inches required: - make - model - year - lengthInInches - heightInInches - widthInInches UpdateMobileHomeShipment: properties: make: type: string description: Make of the Mobile Home x-nullable: true model: type: string description: Model of the Mobile Home x-nullable: true year: type: integer description: Year of the Mobile Home x-nullable: true lengthInInches: type: integer description: Length of the Mobile Home in inches x-nullable: true heightInInches: type: integer description: Height of the Mobile Home in inches x-nullable: true widthInInches: type: integer description: Width of the Mobile Home in inches x-nullable: true UpdateShipment: type: object properties: status: $ref: '#/definitions/MTOShipmentStatus' shipmentType: $ref: '#/definitions/MTOShipmentType' ppmShipment: $ref: '#/definitions/UpdatePPMShipment' boatShipment: $ref: '#/definitions/UpdateBoatShipment' mobileHomeShipment: $ref: '#/definitions/UpdateMobileHomeShipment' requestedPickupDate: format: date type: string x-nullable: true requestedDeliveryDate: format: date type: string x-nullable: true customerRemarks: type: string example: handle with care x-nullable: true pickupAddress: $ref: '#/definitions/Address' secondaryPickupAddress: $ref: '#/definitions/Address' hasSecondaryPickupAddress: type: boolean x-nullable: true x-omitempty: false tertiaryPickupAddress: $ref: '#/definitions/Address' hasTertiaryPickupAddress: type: boolean x-nullable: true x-omitempty: false destinationAddress: $ref: '#/definitions/Address' secondaryDeliveryAddress: $ref: '#/definitions/Address' hasSecondaryDeliveryAddress: type: boolean x-nullable: true x-omitempty: false tertiaryDeliveryAddress: $ref: '#/definitions/Address' hasTertiaryDeliveryAddress: type: boolean x-nullable: true x-omitempty: false actualProGearWeight: type: integer x-nullable: true x-omitempty: false actualSpouseProGearWeight: type: integer x-nullable: true x-omitempty: false agents: $ref: '#/definitions/MTOAgents' ClientError: type: object properties: title: type: string detail: type: string instance: type: string format: uuid required: - title - detail - instance ValidationError: allOf: - $ref: '#/definitions/ClientError' - type: object properties: invalidFields: type: object additionalProperties: description: List of errors for the field type: array items: type: string required: - invalidFields Error: properties: title: type: string detail: type: string instance: type: string format: uuid required: - title - detail type: object MovesList: type: object properties: currentMove: type: array items: $ref: '#/definitions/InternalMove' previousMoves: type: array items: $ref: '#/definitions/InternalMove' InternalMove: type: object properties: id: example: a502b4f1-b9c4-4faf-8bdd-68292501bf26 format: uuid type: string moveCode: type: string example: HYXFJF readOnly: true createdAt: format: date-time type: string readOnly: true orderID: example: c56a4180-65aa-42ec-a945-5fd21dec0538 format: uuid type: string orders: type: object status: type: string readOnly: true updatedAt: format: date-time type: string readOnly: true submittedAt: format: date-time type: string readOnly: true x-nullable: true mtoShipments: $ref: '#/definitions/MTOShipments' closeoutOffice: $ref: '#/definitions/TransportationOffice' eTag: type: string readOnly: true primeCounselingCompletedAt: format: date-time type: string readOnly: true IsDateWeekendHolidayInfo: type: object properties: country_code: type: string country_name: type: string date: type: string format: date example: '2018-09-25' is_weekend: type: boolean is_holiday: type: boolean details: type: string required: - country_code - country_name - date - is_weekend - is_holiday CounselingOffices: type: array items: $ref: '#/definitions/CounselingOffice' CounselingOffice: type: object properties: id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 name: type: string example: Fort Bragg North Station required: - id - name FeatureFlagBoolean: description: A feature flag type: object properties: entity: type: string example: 11111111-1111-1111-1111-111111111111 key: type: string example: flag match: type: boolean example: true namespace: type: string example: test required: - entity - key - match - namespace FeatureFlagVariant: description: A feature flag type: object properties: entity: type: string example: 11111111-1111-1111-1111-111111111111 key: type: string example: flag match: type: boolean example: true variant: type: string example: myval namespace: type: string example: test required: - entity - key - match - variant - namespace OrdersType: type: string title: Orders type enum: - PERMANENT_CHANGE_OF_STATION - LOCAL_MOVE - RETIREMENT - SEPARATION - WOUNDED_WARRIOR - BLUEBARK - SAFETY x-display-value: PERMANENT_CHANGE_OF_STATION: Permanent Change Of Station LOCAL_MOVE: Local Move RETIREMENT: Retirement SEPARATION: Separation WOUNDED_WARRIOR: Wounded Warrior BLUEBARK: BLUEBARK SAFETY: Safety Address: description: A postal address type: object properties: id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 streetAddress1: type: string example: 123 Main Ave title: Street address 1 streetAddress2: type: string example: Apartment 9000 x-nullable: true title: Street address 2 streetAddress3: type: string example: Montmârtre x-nullable: true title: Address Line 3 city: type: string example: Anytown title: City eTag: type: string readOnly: true state: title: State type: string x-display-value: AL: AL AK: AK AR: AR AZ: AZ CA: CA CO: CO CT: CT DC: DC DE: DE FL: FL GA: GA HI: HI IA: IA ID: ID IL: IL IN: IN KS: KS KY: KY LA: LA MA: MA MD: MD ME: ME MI: MI MN: MN MO: MO MS: MS MT: MT NC: NC ND: ND NE: NE NH: NH NJ: NJ NM: NM NV: NV NY: NY OH: OH OK: OK OR: OR PA: PA RI: RI SC: SC SD: SD TN: TN TX: TX UT: UT VA: VA VT: VT WA: WA WI: WI WV: WV WY: WY enum: - AL - AK - AR - AZ - CA - CO - CT - DC - DE - FL - GA - HI - IA - ID - IL - IN - KS - KY - LA - MA - MD - ME - MI - MN - MO - MS - MT - NC - ND - NE - NH - NJ - NM - NV - NY - OH - OK - OR - PA - RI - SC - SD - TN - TX - UT - VA - VT - WA - WI - WV - WY postalCode: type: string format: zip title: ZIP example: '90210' pattern: ^(\d{5}([\-]\d{4})?)$ country: type: string title: Country x-nullable: true example: USA default: USA county: type: string title: County x-nullable: true example: LOS ANGELES required: - streetAddress1 - city - state - postalCode Affiliation: type: string x-nullable: true title: Branch of service description: Military branch of service enum: - ARMY - NAVY - MARINES - AIR_FORCE - COAST_GUARD - SPACE_FORCE - NAVY_AND_MARINES - AIR_AND_SPACE_FORCE - OTHER x-display-value: ARMY: Army NAVY: Navy MARINES: Marine Corps AIR_FORCE: Air Force COAST_GUARD: Coast Guard SPACE_FORCE: Space Force OTHER: OTHER TransportationOffice: type: object properties: id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 name: type: string example: Fort Bragg North Station address: $ref: '#/definitions/Address' phone_lines: type: array items: type: string format: telephone pattern: ^[2-9]\d{2}-\d{3}-\d{4}$ example: 212-555-5555 gbloc: type: string pattern: ^[A-Z]{4}$ example: JENQ latitude: type: number format: float example: 29.382973 longitude: type: number format: float example: -98.62759 created_at: type: string format: date-time updated_at: type: string format: date-time required: - id - name - address - created_at - updated_at DutyLocationPayload: type: object properties: id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 name: type: string example: Fort Bragg North Station address: $ref: '#/definitions/Address' address_id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 affiliation: $ref: '#/definitions/Affiliation' transportation_office_id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 x-nullable: true transportation_office: $ref: '#/definitions/TransportationOffice' created_at: type: string format: date-time updated_at: type: string format: date-time required: - id - name - address_id - affiliation - created_at - updated_at Upload: description: An uploaded file. type: object properties: id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 readOnly: true url: type: string format: uri example: https://uploads.domain.test/dir/c56a4180-65aa-42ec-a945-5fd21dec0538 readOnly: true filename: type: string example: filename.pdf readOnly: true contentType: type: string format: mime-type example: application/pdf readOnly: true bytes: type: integer readOnly: true rotation: type: integer readOnly: false example: 2 status: type: string enum: - INFECTED - CLEAN - PROCESSING readOnly: true createdAt: type: string format: date-time readOnly: true updatedAt: type: string format: date-time readOnly: true deletedAt: type: string format: date-time x-nullable: true readOnly: true isWeightTicket: type: boolean uploadType: type: string example: OFFICE enum: - USER - PRIME - OFFICE readOnly: true required: - id - url - filename - contentType - bytes - createdAt - updatedAt Document: type: object properties: id: type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 service_member_id: type: string format: uuid title: The service member this document belongs to uploads: type: array items: $ref: '#/definitions/Upload' required: - id - service_member_id - uploads PPMShipmentStatus: description: | Status of the PPM Shipment: * **DRAFT**: The customer has created the PPM shipment but has not yet submitted their move for counseling. * **SUBMITTED**: The shipment belongs to a move that has been submitted by the customer or has been created by a Service Counselor or Prime Contractor for a submitted move. * **WAITING_ON_CUSTOMER**: The PPM shipment has been approved and the customer may now provide their actual move closeout information and documentation required to get paid. * **NEEDS_ADVANCE_APPROVAL**: The shipment was counseled by the Prime Contractor and approved but an advance was requested so will need further financial approval from the government. * **NEEDS_CLOSEOUT**: The customer has provided their closeout weight tickets, receipts, and expenses and certified it for the Service Counselor to approve, exclude or reject. * **CLOSEOUT_COMPLETE**: The Service Counselor has reviewed all of the customer's PPM closeout documentation and authorizes the customer can download and submit their finalized SSW packet. type: string readOnly: true enum: - DRAFT - SUBMITTED - WAITING_ON_CUSTOMER - NEEDS_ADVANCE_APPROVAL - NEEDS_CLOSEOUT - CLOSEOUT_COMPLETE PPMAdvanceStatus: type: string title: PPM Advance Status description: >- Indicates whether an advance status has been accepted, rejected, or edited, or a prime counseled PPM has been received or not received x-nullable: true enum: - APPROVED - REJECTED - EDITED - RECEIVED - NOT_RECEIVED SITLocationType: description: The list of SIT location types. type: string enum: - ORIGIN - DESTINATION OmittablePPMDocumentStatus: description: Status of the PPM document. type: string enum: - APPROVED - EXCLUDED - REJECTED x-display-value: APPROVED: Approved EXCLUDED: Excluded REJECTED: Rejected x-nullable: true x-omitempty: false PPMDocumentStatusReason: description: The reason the services counselor has excluded or rejected the item. type: string x-nullable: true x-omitempty: false WeightTicket: description: >- Vehicle and optional trailer information and weight documents used to move this PPM shipment. type: object properties: id: description: ID of this set of weight tickets. type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 readOnly: true ppmShipmentId: description: The ID of the PPM shipment that this set of weight tickets is for. type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 readOnly: true createdAt: type: string format: date-time readOnly: true updatedAt: type: string format: date-time readOnly: true vehicleDescription: description: >- Description of the vehicle used for the trip. E.g. make/model, type of truck/van, etc. type: string x-nullable: true x-omitempty: false emptyWeight: description: Weight of the vehicle when empty. type: integer minimum: 0 x-nullable: true x-omitempty: false submittedEmptyWeight: description: Customer submitted weight of the vehicle when empty. type: integer minimum: 0 x-nullable: true x-omitempty: false missingEmptyWeightTicket: description: >- Indicates if the customer is missing a weight ticket for the vehicle weight when empty. type: boolean x-nullable: true x-omitempty: false emptyDocumentId: description: >- ID of the document that is associated with the user uploads containing the vehicle weight when empty. type: string format: uuid readOnly: true emptyDocument: allOf: - description: >- Document that is associated with the user uploads containing the vehicle weight when empty. - $ref: '#/definitions/Document' fullWeight: description: The weight of the vehicle when full. type: integer minimum: 0 x-nullable: true x-omitempty: false submittedFullWeight: description: Customer submitted weight of the vehicle when full. type: integer minimum: 0 x-nullable: true x-omitempty: false missingFullWeightTicket: description: >- Indicates if the customer is missing a weight ticket for the vehicle weight when full. type: boolean x-nullable: true x-omitempty: false fullDocumentId: description: >- ID of the document that is associated with the user uploads containing the vehicle weight when full. type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 readOnly: true fullDocument: allOf: - description: >- Document that is associated with the user uploads containing the vehicle weight when full. - $ref: '#/definitions/Document' ownsTrailer: description: Indicates if the customer used a trailer they own for the move. type: boolean x-nullable: true x-omitempty: false submittedOwnsTrailer: description: Indicates if the customer used a trailer they own for the move. type: boolean x-nullable: true x-omitempty: false trailerMeetsCriteria: description: >- Indicates if the trailer that the customer used meets all the criteria to be claimable. type: boolean x-nullable: true x-omitempty: false submittedTrailerMeetsCriteria: description: >- Indicates if the trailer that the customer used meets all the criteria to be claimable. type: boolean x-nullable: true x-omitempty: false proofOfTrailerOwnershipDocumentId: description: >- ID of the document that is associated with the user uploads containing the proof of trailer ownership. type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 readOnly: true proofOfTrailerOwnershipDocument: allOf: - description: >- Document that is associated with the user uploads containing the proof of trailer ownership. - $ref: '#/definitions/Document' status: $ref: '#/definitions/OmittablePPMDocumentStatus' reason: $ref: '#/definitions/PPMDocumentStatusReason' adjustedNetWeight: description: Indicates the adjusted net weight of the vehicle type: integer minimum: 0 x-nullable: true x-omitempty: false netWeightRemarks: description: Remarks explaining any edits made to the net weight type: string x-nullable: true x-omitempty: false eTag: description: A hash that should be used as the "If-Match" header for any updates. type: string readOnly: true allowableWeight: description: Maximum reimbursable weight. type: integer minimum: 0 x-nullable: true x-omitempty: false required: - ppmShipmentId - createdAt - updatedAt - emptyDocumentId - emptyDocument - fullDocument - fullDocumentId - proofOfTrailerOwnershipDocument - proofOfTrailerOwnershipDocumentId WeightTickets: description: All weight tickets associated with a PPM shipment. type: array items: $ref: '#/definitions/WeightTicket' x-omitempty: false OmittableMovingExpenseType: type: string description: Moving Expense Type enum: - CONTRACTED_EXPENSE - GAS - OIL - OTHER - PACKING_MATERIALS - RENTAL_EQUIPMENT - STORAGE - TOLLS - WEIGHING_FEE x-display-value: CONTRACTED_EXPENSE: Contracted expense GAS: Gas OIL: Oil OTHER: Other PACKING_MATERIALS: Packing materials STORAGE: Storage RENTAL_EQUIPMENT: Rental equipment TOLLS: Tolls WEIGHING_FEE: Weighing fee x-nullable: true x-omitempty: false SubmittedMovingExpenseType: type: string description: Customer Submitted Moving Expense Type enum: - CONTRACTED_EXPENSE - GAS - OIL - OTHER - PACKING_MATERIALS - RENTAL_EQUIPMENT - STORAGE - TOLLS - WEIGHING_FEE x-display-value: CONTRACTED_EXPENSE: Contracted expense GAS: Gas OIL: Oil OTHER: Other PACKING_MATERIALS: Packing materials STORAGE: Storage RENTAL_EQUIPMENT: Rental equipment TOLLS: Tolls WEIGHING_FEE: Weighing fee x-nullable: true x-omitempty: false MovingExpense: description: >- Expense information and receipts of costs incurred that can be reimbursed while moving a PPM shipment. type: object properties: id: description: Unique primary identifier of the Moving Expense object type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 readOnly: true ppmShipmentId: description: The PPM Shipment id that this moving expense belongs to type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 readOnly: true documentId: description: The id of the Document that contains all file uploads for this expense type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 readOnly: true document: allOf: - description: >- The Document object that contains all file uploads for this expense - $ref: '#/definitions/Document' movingExpenseType: $ref: '#/definitions/OmittableMovingExpenseType' submittedMovingExpenseType: $ref: '#/definitions/SubmittedMovingExpenseType' description: description: A brief description of the expense type: string x-nullable: true x-omitempty: false submittedDescription: description: Customer submitted description of the expense type: string x-nullable: true x-omitempty: false paidWithGtcc: description: >- Indicates if the service member used their government issued card to pay for the expense type: boolean x-nullable: true x-omitempty: false amount: description: The total amount of the expense as indicated on the receipt type: integer x-nullable: true x-omitempty: false submittedAmount: description: >- Customer submitted total amount of the expense as indicated on the receipt type: integer x-nullable: true x-omitempty: false missingReceipt: description: >- Indicates if the service member is missing the receipt with the proof of expense amount type: boolean x-nullable: true x-omitempty: false status: $ref: '#/definitions/OmittablePPMDocumentStatus' reason: $ref: '#/definitions/PPMDocumentStatusReason' sitStartDate: description: >- The date the shipment entered storage, applicable for the `STORAGE` movingExpenseType only type: string example: '2022-04-26' format: date x-nullable: true x-omitempty: false submittedSitStartDate: description: >- Customer submitted date the shipment entered storage, applicable for the `STORAGE` movingExpenseType only type: string example: '2022-04-26' format: date x-nullable: true x-omitempty: false sitEndDate: description: >- The date the shipment exited storage, applicable for the `STORAGE` movingExpenseType only type: string example: '2018-05-26' format: date x-nullable: true x-omitempty: false submittedSitEndDate: description: >- Customer submitted date the shipment exited storage, applicable for the `STORAGE` movingExpenseType only type: string example: '2018-05-26' format: date x-nullable: true x-omitempty: false createdAt: description: >- Timestamp the moving expense object was initially created in the system (UTC) type: string format: date-time readOnly: true updatedAt: description: >- Timestamp when a property of this moving expense object was last modified (UTC) type: string format: date-time readOnly: true eTag: description: A hash that should be used as the "If-Match" header for any updates. type: string readOnly: true weightStored: description: The total weight stored in PPM SIT type: integer x-nullable: true x-omitempty: false sitLocation: allOf: - $ref: '#/definitions/SITLocationType' - x-nullable: true - x-omitempty: false sitEstimatedCost: description: >- The estimated amount that the government will pay the service member to put their goods into storage. This estimated storage cost is separate from the estimated incentive. type: integer format: cents x-nullable: true x-omitempty: false sitReimburseableAmount: description: The amount of SIT that will be reimbursed type: integer x-nullable: true x-omitempty: false required: - id - createdAt - updatedAt - ppmShipmentId - documentId - document ProGearWeightTicket: description: Pro-gear associated information and weight docs for a PPM shipment type: object properties: id: description: The ID of the pro-gear weight ticket. type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 readOnly: true ppmShipmentId: description: >- The ID of the PPM shipment that this pro-gear weight ticket is associated with. type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 readOnly: true updatedAt: type: string format: date-time readOnly: true createdAt: type: string format: date-time readOnly: true belongsToSelf: description: >- Indicates if this information is for the customer's own pro-gear, otherwise, it's the spouse's. type: boolean x-nullable: true x-omitempty: false submittedBelongsToSelf: description: >- Indicates if this information is for the customer's own pro-gear, otherwise, it's the spouse's. type: boolean x-nullable: true x-omitempty: false description: description: Describes the pro-gear that was moved. type: string x-nullable: true x-omitempty: false hasWeightTickets: description: >- Indicates if the user has a weight ticket for their pro-gear, otherwise they have a constructed weight. type: boolean x-nullable: true x-omitempty: false submittedHasWeightTickets: description: >- Indicates if the user has a weight ticket for their pro-gear, otherwise they have a constructed weight. type: boolean x-nullable: true x-omitempty: false weight: description: Weight of the pro-gear. type: integer minimum: 0 x-nullable: true x-omitempty: false submittedWeight: description: Customer submitted weight of the pro-gear. type: integer minimum: 0 x-nullable: true x-omitempty: false documentId: description: >- The ID of the document that is associated with the user uploads containing the pro-gear weight. type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 readOnly: true document: allOf: - description: >- Document that is associated with the user uploads containing the pro-gear weight. - $ref: '#/definitions/Document' status: $ref: '#/definitions/OmittablePPMDocumentStatus' reason: $ref: '#/definitions/PPMDocumentStatusReason' eTag: description: A hash that should be used as the "If-Match" header for any updates. type: string readOnly: true required: - ppmShipmentId - createdAt - updatedAt - documentId - document SignedCertificationType: description: | The type of signed certification: - PPM_PAYMENT: This is used when the customer has a PPM shipment that they have uploaded their documents for and are ready to submit their documentation for review. When they submit, they will be asked to sign certifying the information is correct. - SHIPMENT: This is used when a customer submits their move with their shipments to be reviewed by office users. - PRE_CLOSEOUT_REVIEWED_PPM_PAYMENT: This is used when a move has a PPM shipment and is set to service-counseling-completed "Submit move details" by service counselor. - CLOSEOUT_REVIEWED_PPM_PAYMENT: This is used when a PPM shipment is reviewed by counselor in close out queue. type: string enum: - PPM_PAYMENT - SHIPMENT - PRE_CLOSEOUT_REVIEWED_PPM_PAYMENT - CLOSEOUT_REVIEWED_PPM_PAYMENT readOnly: true SignedCertification: description: Signed certification type: object properties: id: description: The ID of the signed certification. type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 readOnly: true submittingUserId: description: The ID of the user that signed. type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 readOnly: true moveId: description: The ID of the move associated with this signed certification. type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 readOnly: true ppmId: description: >- The ID of the PPM shipment associated with this signed certification, if any. type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 readOnly: true x-nullable: true x-omitempty: false certificationType: $ref: '#/definitions/SignedCertificationType' certificationText: description: Full text that the customer agreed to and signed. type: string signature: description: The signature that the customer provided. type: string date: description: Date that the customer signed the certification. type: string format: date createdAt: type: string format: date-time readOnly: true updatedAt: type: string format: date-time readOnly: true eTag: description: A hash that should be used as the "If-Match" header for any updates. type: string readOnly: true required: - id - submittingUserId - moveId - certificationType - certificationText - signature - date - createdAt - updatedAt - eTag PPMShipment: description: >- A personally procured move is a type of shipment that a service member moves themselves. x-nullable: true properties: id: description: Primary auto-generated unique identifier of the PPM shipment object example: 1f2270c7-7166-40ae-981e-b200ebdf3054 format: uuid type: string readOnly: true shipmentId: description: The id of the parent MTOShipment object example: 1f2270c7-7166-40ae-981e-b200ebdf3054 format: uuid type: string readOnly: true createdAt: description: Timestamp of when the PPM Shipment was initially created (UTC) format: date-time type: string readOnly: true updatedAt: description: Timestamp of when a property of this object was last updated (UTC) format: date-time type: string readOnly: true status: $ref: '#/definitions/PPMShipmentStatus' w2Address: x-nullable: true $ref: '#/definitions/Address' advanceStatus: $ref: '#/definitions/PPMAdvanceStatus' expectedDepartureDate: description: | Date the customer expects to begin their move. format: date type: string actualMoveDate: description: The actual start date of when the PPM shipment left the origin. format: date type: string x-nullable: true x-omitempty: false submittedAt: description: >- The timestamp of when the customer submitted their PPM documentation to the counselor for review. format: date-time type: string x-nullable: true x-omitempty: false reviewedAt: description: >- The timestamp of when the Service Counselor has reviewed all of the closeout documents. format: date-time type: string x-nullable: true x-omitempty: false approvedAt: description: >- The timestamp of when the shipment was approved and the service member can begin their move. format: date-time type: string x-nullable: true x-omitempty: false pickupAddress: $ref: '#/definitions/Address' secondaryPickupAddress: allOf: - $ref: '#/definitions/Address' - x-nullable: true - x-omitempty: false hasSecondaryPickupAddress: type: boolean x-omitempty: false x-nullable: true tertiaryPickupAddress: allOf: - $ref: '#/definitions/Address' - x-nullable: true - x-omitempty: false hasTertiaryPickupAddress: type: boolean x-omitempty: false x-nullable: true actualPickupPostalCode: description: > The actual postal code where the PPM shipment started. To be filled once the customer has moved the shipment. format: zip type: string title: ZIP example: '90210' pattern: ^(\d{5})$ x-nullable: true x-omitempty: false destinationAddress: $ref: '#/definitions/Address' secondaryDestinationAddress: allOf: - $ref: '#/definitions/Address' - x-nullable: true - x-omitempty: false hasSecondaryDestinationAddress: type: boolean x-omitempty: false x-nullable: true tertiaryDestinationAddress: allOf: - $ref: '#/definitions/Address' - x-nullable: true - x-omitempty: false hasTertiaryDestinationAddress: type: boolean x-omitempty: false x-nullable: true actualDestinationPostalCode: description: > The actual postal code where the PPM shipment ended. To be filled once the customer has moved the shipment. format: zip type: string title: ZIP example: '90210' pattern: ^(\d{5})$ x-nullable: true x-omitempty: false sitExpected: description: > Captures whether some or all of the PPM shipment will require temporary storage at the origin or destination. Must be set to `true` when providing `sitLocation`, `sitEstimatedWeight`, `sitEstimatedEntryDate`, and `sitEstimatedDepartureDate` values to calculate the `sitEstimatedCost`. type: boolean estimatedWeight: description: The estimated weight of the PPM shipment goods being moved. type: integer example: 4200 x-nullable: true x-omitempty: false hasProGear: description: > Indicates whether PPM shipment has pro gear for themselves or their spouse. type: boolean x-nullable: true x-omitempty: false proGearWeight: description: >- The estimated weight of the pro-gear being moved belonging to the service member. type: integer x-nullable: true x-omitempty: false spouseProGearWeight: description: >- The estimated weight of the pro-gear being moved belonging to a spouse. type: integer x-nullable: true x-omitempty: false estimatedIncentive: description: >- The estimated amount the government will pay the service member to move their belongings based on the moving date, locations, and shipment weight. type: integer format: cents x-nullable: true x-omitempty: false finalIncentive: description: > The final calculated incentive for the PPM shipment. This does not include **SIT** as it is a reimbursement. type: integer format: cents x-nullable: true x-omitempty: false readOnly: true hasRequestedAdvance: description: | Indicates whether an advance has been requested for the PPM shipment. type: boolean x-nullable: true x-omitempty: false advanceAmountRequested: description: > The amount requested as an advance by the service member up to a maximum percentage of the estimated incentive. type: integer format: cents x-nullable: true x-omitempty: false hasReceivedAdvance: description: | Indicates whether an advance was received for the PPM shipment. type: boolean x-nullable: true x-omitempty: false advanceAmountReceived: description: | The amount received for an advance, or null if no advance is received. type: integer format: cents x-nullable: true x-omitempty: false sitLocation: allOf: - $ref: '#/definitions/SITLocationType' - x-nullable: true - x-omitempty: false sitEstimatedWeight: description: The estimated weight of the goods being put into storage. type: integer example: 2000 x-nullable: true x-omitempty: false sitEstimatedEntryDate: description: The date that goods will first enter the storage location. format: date type: string x-nullable: true x-omitempty: false sitEstimatedDepartureDate: description: The date that goods will exit the storage location. format: date type: string x-nullable: true x-omitempty: false sitEstimatedCost: description: >- The estimated amount that the government will pay the service member to put their goods into storage. This estimated storage cost is separate from the estimated incentive. type: integer format: cents x-nullable: true x-omitempty: false weightTickets: $ref: '#/definitions/WeightTickets' movingExpenses: description: All expense documentation receipt records of this PPM shipment. items: $ref: '#/definitions/MovingExpense' type: array proGearWeightTickets: description: >- All pro-gear weight ticket documentation records for this PPM shipment. type: array items: $ref: '#/definitions/ProGearWeightTicket' signedCertification: $ref: '#/definitions/SignedCertification' eTag: description: >- A hash unique to this shipment that should be used as the "If-Match" header for any updates. type: string readOnly: true required: - id - shipmentId - createdAt - status - expectedDepartureDate - sitExpected - eTag BoatShipment: x-nullable: true properties: id: description: Primary auto-generated unique identifier of the Boat shipment object example: 1f2270c7-7166-40ae-981e-b200ebdf3054 format: uuid type: string readOnly: true shipmentId: description: The id of the parent MTOShipment object example: 1f2270c7-7166-40ae-981e-b200ebdf3054 format: uuid type: string readOnly: true createdAt: description: Timestamp of when the Boat Shipment was initially created (UTC) format: date-time type: string readOnly: true updatedAt: description: Timestamp of when a property of this object was last updated (UTC) format: date-time type: string readOnly: true type: type: string enum: - HAUL_AWAY - TOW_AWAY year: type: integer description: Year of the Boat make: type: string description: Make of the Boat model: type: string description: Model of the Boat lengthInInches: type: integer description: Length of the Boat in inches widthInInches: type: integer description: Width of the Boat in inches heightInInches: type: integer description: Height of the Boat in inches hasTrailer: type: boolean description: Does the boat have a trailer isRoadworthy: type: boolean description: Is the trailer roadworthy x-nullable: true eTag: description: >- A hash unique to this shipment that should be used as the "If-Match" header for any updates. type: string readOnly: true required: - id - shipmentId - createdAt - type - year - make - model - lengthInInches - widthInInches - heightInInches - hasTrailer - eTag MobileHome: description: >- A mobile home is a type of shipment that a service member moves a mobile home. x-nullable: true properties: id: description: Primary auto-generated unique identifier of the Mobile Home object example: 1f2270c7-7166-40ae-981e-b200ebdf3054 format: uuid type: string readOnly: true shipmentId: description: The id of the parent MTOShipment object example: 1f2270c7-7166-40ae-981e-b200ebdf3054 format: uuid type: string readOnly: true make: description: The make of the mobile home type: string model: description: The model of the mobile home. type: string year: description: The year the mobile home was made. type: integer lengthInInches: type: integer widthInInches: type: integer heightInInches: type: integer updatedAt: description: Timestamp of when a property of this object was last updated (UTC) format: date-time type: string readOnly: true createdAt: description: Timestamp of when a property of this object was created (UTC) format: date-time type: string readOnly: true eTag: description: >- A hash unique to this shipment that should be used as the "If-Match" header for any updates. type: string readOnly: true PpmID: description: | The PPM Shipment ID to associate with the assigned certificate. type: string format: uuid example: c56a4180-65aa-42ec-a945-5fd21dec0538 x-nullable: true MovingExpenseType: type: string description: Moving Expense Type enum: - CONTRACTED_EXPENSE - GAS - OIL - OTHER - PACKING_MATERIALS - RENTAL_EQUIPMENT - STORAGE - TOLLS - WEIGHING_FEE x-display-value: CONTRACTED_EXPENSE: Contracted expense GAS: Gas OIL: Oil OTHER: Other PACKING_MATERIALS: Packing materials STORAGE: Storage RENTAL_EQUIPMENT: Rental equipment TOLLS: Tolls WEIGHING_FEE: Weighing fee paths: /feature-flags/user-boolean/{key}: post: summary: Determines if a user has a feature flag enabled description: >- Determines if a user has a feature flag enabled. The flagContext contains context used to determine if this flag applies to the logged in user. operationId: booleanFeatureFlagForUser tags: - featureFlags consumes: - application/json parameters: - in: path name: key type: string required: true description: Feature Flag Key - in: body name: flagContext required: true description: context for the feature flag request schema: type: object additionalProperties: type: string produces: - application/json responses: '200': description: Boolean Feature Flag Status schema: $ref: '#/definitions/FeatureFlagBoolean' '400': description: invalid request '401': description: request requires user authentication '500': description: internal server error /feature-flags/user-variant/{key}: post: summary: Determines if a user has a feature flag enabled description: >- Determines if a user has a feature flag enabled. The flagContext contains context used to determine if this flag applies to the logged in user. operationId: variantFeatureFlagForUser tags: - featureFlags consumes: - application/json parameters: - in: path name: key type: string required: true description: Feature Flag Key - in: body name: flagContext required: true description: context for the feature flag request schema: type: object additionalProperties: type: string produces: - application/json responses: '200': description: Variant Feature Flag Status schema: $ref: '#/definitions/FeatureFlagVariant' '400': description: invalid request '401': description: request requires user authentication '500': description: internal server error /users/logged_in: get: summary: Returns the user info for the currently logged in user description: Returns the user info for the currently logged in user operationId: showLoggedInUser tags: - users responses: '200': description: Currently logged in user schema: $ref: '#/definitions/LoggedInUserPayload' '400': description: invalid request '401': description: request requires user authentication '500': description: server error /users/is_logged_in: get: summary: Returns boolean as to whether the user is logged in description: Returns boolean as to whether the user is logged in operationId: isLoggedInUser tags: - users responses: '200': description: Currently logged in user schema: type: object required: - isLoggedIn properties: isLoggedIn: type: boolean '400': description: invalid request '500': description: server error /application_parameters: post: summary: >- Searches for an application parameter by name and value, returns nil if not found description: >- Searches for an application parameter by name and value, returns nil if not found operationId: validate tags: - application_parameters parameters: - in: body name: body required: true schema: $ref: '#/definitions/ApplicationParameters' responses: '200': description: Application Parameters schema: $ref: '#/definitions/ApplicationParameters' '400': description: invalid request '401': description: request requires user authentication '500': description: server error /orders: post: summary: Creates an orders model for a logged-in user description: Creates an instance of orders tied to a service member operationId: createOrders tags: - orders parameters: - in: body name: createOrders required: true schema: $ref: '#/definitions/CreateUpdateOrders' responses: '201': description: created instance of orders schema: $ref: '#/definitions/Orders' '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized '500': description: internal server error /orders/{ordersId}: put: summary: Updates orders description: All fields sent in this request will be set on the orders referenced operationId: updateOrders tags: - orders parameters: - in: path name: ordersId type: string format: uuid required: true description: UUID of the orders model - in: body name: updateOrders required: true schema: $ref: '#/definitions/CreateUpdateOrders' responses: '200': description: updated instance of orders schema: $ref: '#/definitions/Orders' '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized '404': description: orders not found '500': description: internal server error get: summary: Returns the given order description: Returns the given order operationId: showOrders tags: - orders parameters: - in: path name: ordersId type: string format: uuid required: true description: UUID of the order responses: '200': description: the instance of the order schema: $ref: '#/definitions/Orders' '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized '404': description: order is not found '500': description: internal server error /orders/{ordersId}/upload_amended_orders: patch: summary: Patch the amended orders for a given order description: Patch the amended orders for a given order operationId: uploadAmendedOrders tags: - orders consumes: - multipart/form-data parameters: - in: path name: ordersId type: string format: uuid required: true description: UUID of the order - in: formData name: file type: file description: The file to upload. required: true responses: '201': description: created upload schema: $ref: '#/definitions/Upload' '400': description: invalid request schema: $ref: '#/definitions/InvalidRequestResponsePayload' '403': description: not authorized '404': description: not found '413': description: payload is too large '500': description: server error /allmoves/{serviceMemberId}: get: summary: Return the current and previous moves of a service member description: > This endpoint gets all moves that belongs to the serviceMember by using the service members id. In a previous moves array and the current move in the current move array. The current move is the move with the latest CreatedAt date. All other moves will go into the previous move array. operationId: getAllMoves tags: - moves produces: - application/json parameters: - in: path name: serviceMemberId type: string format: uuid required: true description: UUID of the service member responses: '200': description: >- Successfully retrieved moves. A successful fetch might still return zero moves. schema: $ref: '#/definitions/MovesList' '401': $ref: '#/responses/PermissionDenied' '403': $ref: '#/responses/PermissionDenied' '500': $ref: '#/responses/ServerError' /moves/{moveId}: patch: summary: Patches the move description: Any fields sent in this request will be set on the move referenced operationId: patchMove tags: - moves parameters: - in: path name: moveId type: string format: uuid required: true description: UUID of the move - $ref: '#/parameters/ifMatch' - in: body name: patchMovePayload required: true schema: $ref: '#/definitions/PatchMovePayload' responses: '200': description: updated instance of move schema: $ref: '#/definitions/MovePayload' '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized '404': description: move or closeout office is not found '412': description: precondition failed '422': description: unprocessable entity '500': description: internal server error get: summary: Returns the given move description: Returns the given move operationId: showMove tags: - moves parameters: - in: path name: moveId type: string format: uuid required: true description: UUID of the move responses: '200': description: the instance of the move schema: $ref: '#/definitions/MovePayload' '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized '404': description: move is not found '500': description: internal server error /moves/{moveId}/signed_certifications: post: summary: Submits signed certification for the given move ID description: Create an instance of signed_certification tied to the move ID operationId: createSignedCertification tags: - certification parameters: - in: path name: moveId type: string format: uuid required: true description: UUID of the move being signed for - in: body name: createSignedCertificationPayload required: true schema: $ref: '#/definitions/CreateSignedCertificationPayload' responses: '201': description: created instance of signed_certification schema: $ref: '#/definitions/SignedCertificationPayload' '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized to sign for this move '404': description: move not found '500': description: internal server error get: summary: gets the signed certifications for the given move ID description: returns a list of all signed_certifications associated with the move ID operationId: indexSignedCertification tags: - certification parameters: - in: path name: moveId type: string format: uuid required: true responses: '200': description: returns a list of signed certifications schema: $ref: '#/definitions/SignedCertifications' '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized '404': description: move not found '500': description: internal server error /reimbursement/{reimbursementId}/approve: post: summary: Approves the reimbursement description: Sets the status of the reimbursement to APPROVED. operationId: approveReimbursement tags: - office parameters: - in: path name: reimbursementId type: string format: uuid required: true description: UUID of the reimbursement being approved responses: '200': description: updated instance of reimbursement schema: $ref: '#/definitions/Reimbursement' '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized '500': description: internal server error /moves/{moveId}/orders: get: summary: Returns orders information for a move for office use description: Returns orders information for a move for office use operationId: showOfficeOrders tags: - office parameters: - in: path name: moveId type: string format: uuid required: true description: UUID of the move responses: '200': description: the orders information for a move for office use schema: $ref: '#/definitions/Orders' '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized '404': description: move not found '500': description: internal server error /moves/{moveId}/move_documents: get: summary: Returns a list of all Move Documents associated with this move description: Returns a list of all Move Documents associated with this move operationId: indexMoveDocuments tags: - move_docs parameters: - in: path name: moveId type: string format: uuid required: true description: UUID of the move responses: '200': description: returns list of move douments schema: $ref: '#/definitions/MoveDocuments' '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized post: summary: Creates a move document description: Created a move document with the given information operationId: createGenericMoveDocument tags: - move_docs parameters: - name: moveId in: path type: string format: uuid required: true description: UUID of the move - in: body name: createGenericMoveDocumentPayload required: true schema: $ref: '#/definitions/CreateGenericMoveDocumentPayload' responses: '200': description: returns new move document object schema: $ref: '#/definitions/MoveDocumentPayload' '400': description: invalid request '401': description: must be authenticated to use this endpoint '403': description: not authorized to modify this move '500': description: server error /move_documents/{moveDocumentId}: put: summary: Updates a move document description: Update a move document with the given information operationId: updateMoveDocument tags: - move_docs parameters: - in: path name: moveDocumentId type: string format: uuid required: true description: UUID of the move document model - in: body name: updateMoveDocument required: true schema: $ref: '#/definitions/MoveDocumentPayload' responses: '200': description: updated instance of move document schema: $ref: '#/definitions/MoveDocumentPayload' '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized '404': description: move document not found '500': description: internal server error delete: summary: Deletes a move document description: Deletes a move document with the given information operationId: deleteMoveDocument tags: - move_docs parameters: - in: path name: moveDocumentId type: string format: uuid required: true description: UUID of the move document model responses: '204': description: deleted '400': description: invalid request schema: $ref: '#/definitions/InvalidRequestResponsePayload' '403': description: not authorized '404': description: not found '500': description: server error /moves/{moveId}/approve: post: summary: Approves a move to proceed description: >- Approves the basic details of a move. The status of the move will be updated to APPROVED operationId: approveMove tags: - office parameters: - name: moveId in: path type: string format: uuid required: true description: UUID of the move responses: '200': description: returns updated (approved) move object schema: $ref: '#/definitions/MovePayload' '400': description: invalid request '401': description: must be authenticated to use this endpoint '403': description: not authorized to approve this move '409': description: the move is not in a state to be approved schema: $ref: '#/definitions/MovePayload' '500': description: server error /moves/{moveId}/submit: post: summary: Submits a move for approval description: >- Submits a move for approval by the office. The status of the move will be updated to SUBMITTED operationId: submitMoveForApproval tags: - moves parameters: - name: moveId in: path type: string format: uuid required: true description: UUID of the move - name: submitMoveForApprovalPayload in: body required: true schema: $ref: '#/definitions/SubmitMoveForApprovalPayload' responses: '200': description: returns updated (submitted) move object schema: $ref: '#/definitions/MovePayload' '400': description: invalid request '401': description: must be authenticated to use this endpoint '403': description: not authorized to approve this move '409': description: the move is not in a state to be approved schema: $ref: '#/definitions/MovePayload' '500': description: server error /moves/{moveId}/cancel: post: summary: Cancels a move description: >- Cancels the basic details of a move. The status of the move will be updated to CANCELED operationId: cancelMove tags: - office parameters: - name: moveId in: path type: string format: uuid required: true description: UUID of the move - in: body name: cancelMove required: true schema: $ref: '#/definitions/CancelMove' responses: '200': description: returns updated (canceled) move object schema: $ref: '#/definitions/MovePayload' '400': description: invalid request '401': description: must be authenticated to use this endpoint '403': description: not authorized to cancel this move '409': description: the move is not in a state to be canceled schema: $ref: '#/definitions/MovePayload' '500': description: server error /moves/{moveId}/submit_amended_orders: post: summary: Submits amended orders for review description: >- Submits amended orders for review by the office. The status of the move will be updated to an appropriate status depending on whether it needs services counseling or not. operationId: submitAmendedOrders tags: - moves parameters: - name: moveId in: path type: string format: uuid required: true description: UUID of the move responses: '200': description: returns updated (submitted) move object schema: $ref: '#/definitions/MovePayload' '400': description: invalid request '401': description: must be authenticated to use this endpoint '403': description: not authorized to approve this move '409': description: the move is not in a state to be approved schema: $ref: '#/definitions/MovePayload' '500': description: server error /ppm-shipments/{ppmShipmentId}/aoa-packet: parameters: - description: the id for the ppmshipment with aoa to be downloaded in: path name: ppmShipmentId required: true type: string get: summary: Downloads AOA Packet form PPMShipment as a PDF description: > ### Functionality This endpoint downloads all uploaded move order documentation combined with the Shipment Summary Worksheet into a single PDF. ### Errors * The PPMShipment must have requested an AOA. * The PPMShipment AOA Request must have been approved. operationId: showAOAPacket tags: - ppm produces: - application/pdf responses: '200': headers: Content-Disposition: type: string description: File name to download description: AOA PDF schema: format: binary type: file '400': $ref: '#/responses/InvalidRequest' '403': $ref: '#/responses/PermissionDenied' '404': $ref: '#/responses/NotFound' '422': $ref: '#/responses/UnprocessableEntity' '500': $ref: '#/responses/ServerError' /ppm-shipments/{ppmShipmentId}/payment-packet: get: summary: Returns PPM payment packet description: >- Generates a PDF containing all user uploaded documentations for PPM. Contains SSW form, orders, weight and expense documentations. operationId: showPaymentPacket tags: - ppm parameters: - in: path name: ppmShipmentId type: string format: uuid required: true description: UUID of the ppmShipment produces: - application/pdf responses: '200': headers: Content-Disposition: type: string description: File name to download description: PPM Payment Packet PDF schema: format: binary type: file '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized '404': description: ppm not found '500': description: internal server error /documents: post: summary: Create a new document description: >- Documents represent a physical artifact such as a scanned document or a PDF file operationId: createDocument tags: - documents parameters: - in: body name: documentPayload required: true schema: $ref: '#/definitions/PostDocumentPayload' responses: '201': description: created document schema: $ref: '#/definitions/Document' '400': description: invalid request '500': description: server error /documents/{documentId}: get: summary: Returns a document description: Returns a document and its uploads operationId: showDocument tags: - documents parameters: - in: path name: documentId type: string format: uuid required: true description: UUID of the document to return responses: '200': description: the requested document schema: $ref: '#/definitions/Document' '400': description: invalid request schema: $ref: '#/definitions/InvalidRequestResponsePayload' '403': description: not authorized '404': description: not found '500': description: server error /uploads/{uploadId}: delete: summary: Deletes an upload description: Uploads represent a single digital file, such as a JPEG or PDF. operationId: deleteUpload tags: - uploads parameters: - in: path name: uploadId type: string format: uuid required: true description: UUID of the upload to be deleted - in: query name: orderId type: string format: uuid description: ID of the order that the upload belongs to - in: query name: moveId type: string format: uuid description: Optional ID of the move that the upload belongs to - in: query name: ppmId type: string format: uuid description: Optional PPM shipment ID related to the upload responses: '204': description: deleted '400': description: invalid request schema: $ref: '#/definitions/InvalidRequestResponsePayload' '403': description: not authorized '404': description: not found '500': description: server error /uploads: post: summary: Create a new upload description: Uploads represent a single digital file, such as a JPEG or PDF. operationId: createUpload tags: - uploads consumes: - multipart/form-data parameters: - in: query name: documentId type: string format: uuid required: false description: UUID of the document to add an upload to - in: formData name: file type: file description: The file to upload. required: true responses: '201': description: created upload schema: $ref: '#/definitions/Upload' '400': description: invalid request schema: $ref: '#/definitions/InvalidRequestResponsePayload' '403': description: not authorized '404': description: not found '413': description: payload is too large '500': description: server error delete: summary: Deletes a collection of uploads description: Uploads represent a single digital file, such as a JPEG or PDF. operationId: deleteUploads tags: - uploads parameters: - in: query name: uploadIds type: array items: type: string format: uuid required: true description: Array of UUIDs to be deleted responses: '204': description: deleted '400': description: invalid request schema: $ref: '#/definitions/InvalidRequestResponsePayload' '403': description: not authorized '404': description: not found '500': description: server error /service_members: post: summary: Creates service member for a logged-in user description: Creates an instance of a service member tied to a user operationId: createServiceMember tags: - service_members parameters: - in: body name: createServiceMemberPayload required: true schema: $ref: '#/definitions/CreateServiceMemberPayload' responses: '201': description: created instance of service member schema: $ref: '#/definitions/ServiceMemberPayload' '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized '404': description: service member not found '500': description: internal server error /service_members/{serviceMemberId}: get: summary: Returns the given service member description: Returns the given service member operationId: showServiceMember tags: - service_members parameters: - in: path name: serviceMemberId type: string format: uuid required: true description: UUID of the service member responses: '200': description: the instance of the service member schema: $ref: '#/definitions/ServiceMemberPayload' '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized '404': description: service member not found '500': description: internal server error patch: summary: Patches the service member description: >- Any fields sent in this request will be set on the service member referenced operationId: patchServiceMember tags: - service_members parameters: - in: path name: serviceMemberId type: string format: uuid required: true description: UUID of the service member - in: body name: patchServiceMemberPayload required: true schema: $ref: '#/definitions/PatchServiceMemberPayload' responses: '200': description: updated instance of service member schema: $ref: '#/definitions/ServiceMemberPayload' '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized '404': description: service member not found '500': description: internal server error /service_members/{serviceMemberId}/current_orders: get: summary: Returns the latest orders for a given service member description: Returns orders operationId: showServiceMemberOrders tags: - service_members parameters: - in: path name: serviceMemberId type: string format: uuid required: true description: UUID of the service member responses: '200': description: the instance of the service member schema: $ref: '#/definitions/Orders' '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized '404': description: service member not found '500': description: internal server error /service_members/{serviceMemberId}/backup_contacts: post: summary: Submits backup contact for a logged-in user description: Creates an instance of a backup contact tied to a service member user operationId: createServiceMemberBackupContact tags: - backup_contacts parameters: - in: body name: createBackupContactPayload required: true schema: $ref: '#/definitions/CreateServiceMemberBackupContactPayload' - in: path name: serviceMemberId type: string format: uuid required: true description: UUID of the service member responses: '201': description: created instance of service member backup contact schema: $ref: '#/definitions/ServiceMemberBackupContactPayload' '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized to create this backup contact '404': description: contact not found '500': description: internal server error get: summary: List all service member backup contacts description: List all service member backup contacts operationId: indexServiceMemberBackupContacts tags: - backup_contacts parameters: - in: path name: serviceMemberId type: string format: uuid required: true description: UUID of the service member responses: '200': description: list of service member backup contacts schema: $ref: '#/definitions/IndexServiceMemberBackupContactsPayload' '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized to see this backup contact '404': description: contact not found '500': description: internal server error /backup_contacts/{backupContactId}: get: summary: Returns the given service member backup contact description: Returns the given service member backup contact operationId: showServiceMemberBackupContact tags: - backup_contacts parameters: - in: path name: backupContactId type: string format: uuid required: true description: UUID of the service member backup contact responses: '200': description: the instance of the service member backup contact schema: $ref: '#/definitions/ServiceMemberBackupContactPayload' '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized '404': description: backup contact not found '500': description: internal server error put: summary: Updates a service member backup contact description: >- Any fields sent in this request will be set on the backup contact referenced operationId: updateServiceMemberBackupContact tags: - backup_contacts parameters: - in: body name: updateServiceMemberBackupContactPayload required: true schema: $ref: '#/definitions/UpdateServiceMemberBackupContactPayload' - in: path name: backupContactId type: string format: uuid required: true description: UUID of the service member backup contact responses: '201': description: updated instance of backup contact schema: $ref: '#/definitions/ServiceMemberBackupContactPayload' '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized '404': description: backup contact not found '500': description: internal server error /duty_locations: get: summary: Returns the duty locations matching the search query description: Returns the duty locations matching the search query operationId: searchDutyLocations tags: - duty_locations parameters: - in: query name: search type: string required: true description: Search string for duty locations responses: '200': description: the instance of the duty location schema: $ref: '#/definitions/DutyLocationsPayload' '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized '404': description: matching duty location not found '500': description: internal server error /transportation_offices/{dutyLocationId}/counseling_offices: get: summary: Returns the counseling locations in the GBLOC matching the duty location description: >- Returns the counseling locations matching the GBLOC from the selected duty location operationId: showCounselingOffices tags: - transportation_offices parameters: - in: path name: dutyLocationId format: uuid type: string required: true description: UUID of the duty location produces: - application/json responses: '200': description: the instance of the counseling office for a duty location schema: $ref: '#/definitions/CounselingOffices' '500': description: internal server error /duty_locations/{dutyLocationId}/transportation_office: get: summary: Returns the transportation office for a given duty location description: Returns the given duty location's transportation office operationId: showDutyLocationTransportationOffice tags: - transportation_offices parameters: - in: path name: dutyLocationId type: string format: uuid required: true description: UUID of the duty location responses: '200': description: the instance of the transportation office for a duty location schema: $ref: '#/definitions/TransportationOffice' '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized '404': description: transportation office not found '500': description: internal server error /transportation-offices: get: produces: - application/json summary: Returns the transportation offices matching the search query description: Returns the transportation offices matching the search query operationId: getTransportationOffices tags: - transportation_offices parameters: - in: query name: search type: string required: true minLength: 2 description: Search string for transportation offices responses: '200': description: Successfully retrieved transportation offices schema: $ref: '#/definitions/TransportationOffices' '400': $ref: '#/responses/InvalidRequest' '401': $ref: '#/responses/PermissionDenied' '403': $ref: '#/responses/PermissionDenied' '404': $ref: '#/responses/NotFound' '500': $ref: '#/responses/ServerError' /queues/{queueType}: get: summary: Show all moves in a queue description: Show all moves in a queue operationId: showQueue tags: - queues parameters: - in: path name: queueType type: string enum: - new - ppm_payment_requested - all - ppm_approved - ppm_completed required: true description: Queue type to show responses: '200': description: list all moves in the specified queue schema: type: array items: $ref: '#/definitions/MoveQueueItem' '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized to access this queue '404': description: move queue item is not found /entitlements: get: summary: List weight weights allotted by entitlement description: List weight weights allotted by entitlement operationId: indexEntitlements tags: - entitlements responses: '200': description: List of weights allotted entitlement schema: $ref: '#/definitions/IndexEntitlements' /calendar/available_move_dates: get: summary: Returns available dates for the move calendar description: Returns available dates for the move calendar operationId: showAvailableMoveDates tags: - calendar parameters: - in: query name: startDate type: string format: date required: true description: >- Look for future available dates starting from (and including) this date responses: '200': description: List of available dates schema: $ref: '#/definitions/AvailableMoveDates' '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized '500': description: internal server error /moves/{moveId}/weight_ticket: post: summary: Creates a weight ticket document description: Created a weight ticket document with the given information operationId: createWeightTicketDocument tags: - move_docs parameters: - name: moveId in: path type: string format: uuid required: true description: UUID of the move - in: body name: createWeightTicketDocument required: true schema: $ref: '#/definitions/CreateWeightTicketDocumentsPayload' responses: '200': description: returns new weight ticket document object schema: $ref: '#/definitions/MoveDocumentPayload' '400': description: invalid request '401': description: must be authenticated to use this endpoint '403': description: not authorized to modify this move '500': description: server error /ppm-shipments/{ppmShipmentId}/pro-gear-weight-tickets: parameters: - $ref: '#/parameters/ppmShipmentId' post: summary: Creates a pro-gear weight ticket description: > Creates a PPM shipment's pro-gear weight ticket. This will only contain the minimum necessary fields for a pro-gear weight ticket. Data should be filled in using the patch endpoint. operationId: createProGearWeightTicket tags: - ppm consumes: - application/json produces: - application/json responses: '201': description: returns a new pro-gear weight ticket object schema: $ref: '#/definitions/ProGearWeightTicket' '400': $ref: '#/responses/InvalidRequest' '401': $ref: '#/responses/PermissionDenied' '403': $ref: '#/responses/PermissionDenied' '404': $ref: '#/responses/NotFound' '412': $ref: '#/responses/PreconditionFailed' '422': $ref: '#/responses/UnprocessableEntity' '500': $ref: '#/responses/ServerError' /ppm-shipments/{ppmShipmentId}/pro-gear-weight-tickets/{proGearWeightTicketId}: patch: summary: Updates a pro-gear weight ticket description: > Updates a PPM shipment's pro-gear weight ticket with new information. Only some of the fields are editable because some have to be set by the customer, e.g. the description. operationId: updateProGearWeightTicket tags: - ppm consumes: - application/json produces: - application/json parameters: - $ref: '#/parameters/ifMatch' - $ref: '#/parameters/ppmShipmentId' - $ref: '#/parameters/proGearWeightTicketId' - in: body name: updateProGearWeightTicket required: true schema: $ref: '#/definitions/UpdateProGearWeightTicket' responses: '200': description: returns an updated pro-gear weight ticket object schema: $ref: '#/definitions/ProGearWeightTicket' '400': $ref: '#/responses/InvalidRequest' '401': $ref: '#/responses/PermissionDenied' '403': $ref: '#/responses/PermissionDenied' '404': $ref: '#/responses/NotFound' '412': $ref: '#/responses/PreconditionFailed' '422': $ref: '#/responses/UnprocessableEntity' '500': $ref: '#/responses/ServerError' delete: summary: Soft deletes a pro-gear weight line item by ID description: > Removes a single pro-gear weight ticket set from the closeout line items for a PPM shipment. Soft deleted records are not visible in milmove, but are kept in the database. operationId: deleteProGearWeightTicket tags: - ppm produces: - application/json parameters: - $ref: '#/parameters/ppmShipmentId' - description: ID of the pro-gear weight ticket to be deleted in: path name: proGearWeightTicketId required: true format: uuid type: string responses: '204': description: Successfully soft deleted the pro-gear weight ticket '400': $ref: '#/responses/InvalidRequest' '401': $ref: '#/responses/PermissionDenied' '403': $ref: '#/responses/PermissionDenied' '404': $ref: '#/responses/NotFound' '409': $ref: '#/responses/Conflict' '422': $ref: '#/responses/UnprocessableEntity' '500': $ref: '#/responses/ServerError' /moves/{moveId}/uploadAdditionalDocuments: patch: summary: Patch the additional documents for a given move description: >- Customers will on occaision need the ability to upload additional supporting documents, for a variety of reasons. This does not include amended order. operationId: uploadAdditionalDocuments tags: - moves consumes: - multipart/form-data parameters: - in: path name: moveId type: string format: uuid required: true description: UUID of the order - in: formData name: file type: file description: The file to upload. required: true responses: '201': description: created upload schema: $ref: '#/definitions/Upload' '400': description: invalid request schema: $ref: '#/definitions/InvalidRequestResponsePayload' '403': description: not authorized '404': description: not found '413': description: payload is too large '500': description: server error /ppm-shipments/{ppmShipmentId}/moving-expenses: post: summary: Creates moving expense document description: Creates a moving expense document for the PPM shipment operationId: createMovingExpense tags: - ppm parameters: - $ref: '#/parameters/ppmShipmentId' responses: '201': description: returns new moving expense object schema: $ref: '#/definitions/MovingExpense' '400': $ref: '#/responses/InvalidRequest' '401': $ref: '#/responses/PermissionDenied' '403': $ref: '#/responses/PermissionDenied' '404': $ref: '#/responses/NotFound' '422': $ref: '#/responses/UnprocessableEntity' '500': $ref: '#/responses/ServerError' /ppm-shipments/{ppmShipmentId}/moving-expenses/{movingExpenseId}: patch: summary: Updates the moving expense description: >- Any fields sent in this request will be set on the moving expense referenced operationId: updateMovingExpense tags: - ppm parameters: - $ref: '#/parameters/ppmShipmentId' - $ref: '#/parameters/movingExpenseId' - $ref: '#/parameters/ifMatch' - in: body name: updateMovingExpense required: true schema: $ref: '#/definitions/UpdateMovingExpense' responses: '200': description: returns an updated moving expense object schema: $ref: '#/definitions/MovingExpense' '400': $ref: '#/responses/InvalidRequest' '401': $ref: '#/responses/PermissionDenied' '403': $ref: '#/responses/PermissionDenied' '404': $ref: '#/responses/NotFound' '412': $ref: '#/responses/PreconditionFailed' '422': $ref: '#/responses/UnprocessableEntity' '500': $ref: '#/responses/ServerError' delete: summary: Soft deletes a moving expense by ID description: > Removes a single moving expense receipt from the closeout line items for a PPM shipment. Soft deleted records are not visible in milmove, but are kept in the database. operationId: deleteMovingExpense tags: - ppm produces: - application/json parameters: - $ref: '#/parameters/ppmShipmentId' - description: ID of the moving expense to be deleted in: path name: movingExpenseId required: true format: uuid type: string responses: '204': description: Successfully soft deleted the moving expense '400': $ref: '#/responses/InvalidRequest' '401': $ref: '#/responses/PermissionDenied' '403': $ref: '#/responses/PermissionDenied' '404': $ref: '#/responses/NotFound' '409': $ref: '#/responses/Conflict' '422': $ref: '#/responses/UnprocessableEntity' '500': $ref: '#/responses/ServerError' /ppm-shipments/{ppmShipmentId}/weight-ticket: post: summary: Creates a weight ticket document description: Created a weight ticket document with the given information operationId: createWeightTicket tags: - ppm parameters: - $ref: '#/parameters/ppmShipmentId' responses: '200': description: returns new weight ticket object schema: $ref: '#/definitions/WeightTicket' '400': $ref: '#/responses/InvalidRequest' '401': $ref: '#/responses/PermissionDenied' '403': $ref: '#/responses/PermissionDenied' '404': $ref: '#/responses/NotFound' '422': $ref: '#/responses/UnprocessableEntity' '500': $ref: '#/responses/ServerError' /ppm-shipments/{ppmShipmentId}/weight-ticket/{weightTicketId}: patch: summary: Updates a weight ticket document description: Updates a weight ticket document with the new information operationId: updateWeightTicket tags: - ppm parameters: - $ref: '#/parameters/ppmShipmentId' - $ref: '#/parameters/weightTicketId' - $ref: '#/parameters/ifMatch' - in: body name: updateWeightTicketPayload required: true schema: $ref: '#/definitions/UpdateWeightTicket' responses: '200': description: returns an updated weight ticket object schema: $ref: '#/definitions/WeightTicket' '400': $ref: '#/responses/InvalidRequest' '401': $ref: '#/responses/PermissionDenied' '403': $ref: '#/responses/PermissionDenied' '404': $ref: '#/responses/NotFound' '412': $ref: '#/responses/PreconditionFailed' '422': $ref: '#/responses/UnprocessableEntity' '500': $ref: '#/responses/ServerError' delete: summary: Soft deletes a weight ticket by ID description: > Removes a single weight ticket from the closeout line items for a PPM shipment. Soft deleted records are not visible in milmove, but are kept in the database. This may change the PPM shipment's final incentive. operationId: deleteWeightTicket tags: - ppm produces: - application/json parameters: - $ref: '#/parameters/ppmShipmentId' - description: ID of the weight ticket to be deleted in: path name: weightTicketId required: true format: uuid type: string responses: '204': description: Successfully soft deleted the weight ticket '400': $ref: '#/responses/InvalidRequest' '401': $ref: '#/responses/PermissionDenied' '403': $ref: '#/responses/PermissionDenied' '404': $ref: '#/responses/NotFound' '409': $ref: '#/responses/Conflict' '422': $ref: '#/responses/UnprocessableEntity' '500': $ref: '#/responses/ServerError' /ppm-shipments/{ppmShipmentId}/uploads: post: summary: >- Create a new upload for a PPM weight ticket, pro-gear, or moving expense document description: >- Uploads represent a single digital file, such as a PNG, JPEG, PDF, or spreadsheet. operationId: createPPMUpload tags: - ppm consumes: - multipart/form-data parameters: - in: path name: ppmShipmentId type: string format: uuid required: true description: UUID of the ppm shipment - in: query name: documentId type: string format: uuid required: true description: UUID of the document to add an upload to - in: formData name: file type: file description: The file to upload. required: true - in: query name: weightReceipt type: boolean description: If the upload is a Weight Receipt required: true responses: '201': description: created upload schema: $ref: '#/definitions/Upload' '400': description: invalid request schema: $ref: '#/definitions/InvalidRequestResponsePayload' '403': $ref: '#/responses/PermissionDenied' '404': $ref: '#/responses/NotFound' '413': description: payload is too large '422': $ref: '#/responses/UnprocessableEntity' '500': $ref: '#/responses/ServerError' /ppm-shipments/{ppmShipmentId}/submit-ppm-shipment-documentation: parameters: - $ref: '#/parameters/ppmShipmentId' post: summary: Saves signature and routes PPM shipment to service counselor description: > Saves customer signature along with the text they agreed to, and then routes the PPM shipment to the service counselor queue for review. operationId: submitPPMShipmentDocumentation tags: - ppm consumes: - application/json produces: - application/json parameters: - in: body name: savePPMShipmentSignedCertificationPayload required: true schema: $ref: '#/definitions/SavePPMShipmentSignedCertification' responses: '200': description: Returns the updated PPM shipment schema: $ref: '#/definitions/PPMShipment' '400': $ref: '#/responses/InvalidRequest' '401': $ref: '#/responses/PermissionDenied' '403': $ref: '#/responses/PermissionDenied' '404': $ref: '#/responses/NotFound' '409': $ref: '#/responses/Conflict' '422': $ref: '#/responses/UnprocessableEntity' '500': $ref: '#/responses/ServerError' /ppm-shipments/{ppmShipmentId}/resubmit-ppm-shipment-documentation/{signedCertificationId}: parameters: - $ref: '#/parameters/ppmShipmentId' put: summary: Updates signature and routes PPM shipment to service counselor description: > Updates customer signature along with the text they agreed to, and then routes the PPM shipment to the service counselor queue for review. operationId: resubmitPPMShipmentDocumentation tags: - ppm consumes: - application/json produces: - application/json parameters: - in: path name: signedCertificationId description: UUID of the signed certification type: string format: uuid required: true - $ref: '#/parameters/ifMatch' - in: body name: savePPMShipmentSignedCertificationPayload required: true schema: $ref: '#/definitions/SavePPMShipmentSignedCertification' responses: '200': description: Returns the updated PPM shipment schema: $ref: '#/definitions/PPMShipment' '400': $ref: '#/responses/InvalidRequest' '401': $ref: '#/responses/PermissionDenied' '403': $ref: '#/responses/PermissionDenied' '404': $ref: '#/responses/NotFound' '409': $ref: '#/responses/Conflict' '412': $ref: '#/responses/PreconditionFailed' '422': $ref: '#/responses/UnprocessableEntity' '500': $ref: '#/responses/ServerError' /rate_engine_postal_codes/{postal_code}: get: summary: >- Validate if a zipcode is valid for origin or destination location for a move. description: >- Verifies if a zipcode is valid for origin or destination location for a move. operationId: validatePostalCodeWithRateData tags: - postal_codes parameters: - in: path name: postal_code type: string required: true format: zip pattern: ^(\d{5}?)$ - in: query name: postal_code_type type: string required: true enum: - origin - destination responses: '200': description: postal_code is valid or invalid schema: $ref: '#/definitions/RateEnginePostalCodePayload' '400': description: invalid request '401': description: must be authenticated to use this endpoint '403': description: user is not authorized '500': description: server error /addresses/{addressId}: get: summary: Returns an address description: >- Find by API using address ID that returns an address json object containing address 1, address 2, address 3, city and postal code. operationId: showAddress tags: - addresses parameters: - in: path name: addressId type: string format: uuid required: true description: UUID of the address to return responses: '200': description: the requested address schema: $ref: '#/definitions/Address' '400': description: invalid request '403': description: not authorized '404': description: not found '500': description: server error /mto_shipments: post: summary: createMTOShipment description: | Creates a MTO shipment for the specified Move Task Order. Required fields include: * Shipment Type * Customer requested pick-up date * Pick-up Address * Delivery Address Optional fields include: * Customer Remarks * Releasing / Receiving agents consumes: - application/json produces: - application/json operationId: createMTOShipment tags: - mtoShipment parameters: - in: body name: body schema: $ref: '#/definitions/CreateShipment' responses: '200': description: Successfully created a MTO shipment. schema: $ref: '#/definitions/MTOShipment' '400': $ref: '#/responses/InvalidRequest' '401': $ref: '#/responses/PermissionDenied' '403': $ref: '#/responses/PermissionDenied' '404': $ref: '#/responses/NotFound' '422': $ref: '#/responses/UnprocessableEntity' '500': $ref: '#/responses/ServerError' /mto-shipments/{mtoShipmentId}: patch: summary: updateMTOShipment description: | Updates a specified MTO shipment. Required fields include: * MTO Shipment ID required in path * If-Match required in headers * Shipment type is required in body Optional fields include: * New shipment status type * Customer requested pick-up date * Pick-up Address * Delivery Address * Customer Remarks * Releasing / Receiving agents * Actual Pro Gear Weight * Actual Spouse Pro Gear Weight consumes: - application/json produces: - application/json operationId: updateMTOShipment tags: - mtoShipment parameters: - in: path name: mtoShipmentId type: string format: uuid required: true description: UUID of the MTO Shipment to update - in: header name: If-Match type: string required: true description: > Optimistic locking is implemented via the `If-Match` header. If the ETag header does not match the value of the resource on the server, the server rejects the change with a `412 Precondition Failed` error. - in: body name: body schema: $ref: '#/definitions/UpdateShipment' responses: '200': description: Successfully updated the specified MTO shipment. schema: $ref: '#/definitions/MTOShipment' '400': $ref: '#/responses/InvalidRequest' '401': $ref: '#/responses/PermissionDenied' '403': $ref: '#/responses/PermissionDenied' '404': $ref: '#/responses/NotFound' '412': $ref: '#/responses/PreconditionFailed' '422': $ref: '#/responses/UnprocessableEntity' '500': $ref: '#/responses/ServerError' delete: summary: Soft deletes a shipment by ID description: Soft deletes a shipment by ID operationId: deleteShipment tags: - mtoShipment produces: - application/json parameters: - description: ID of the shipment to be deleted in: path name: mtoShipmentId required: true format: uuid type: string responses: '204': description: Successfully soft deleted the shipment '400': $ref: '#/responses/InvalidRequest' '403': $ref: '#/responses/PermissionDenied' '404': $ref: '#/responses/NotFound' '409': $ref: '#/responses/Conflict' '422': $ref: '#/responses/UnprocessableEntity' '500': $ref: '#/responses/ServerError' /moves/{moveTaskOrderID}/mto_shipments: get: summary: Gets all shipments for a move task order description: | Gets all MTO shipments for the specified Move Task Order. produces: - application/json operationId: listMTOShipments tags: - mtoShipment parameters: - description: ID of move task order for mto shipment to use in: path name: moveTaskOrderID required: true format: uuid type: string responses: '200': description: Successfully retrieved all mto shipments for a move task order. schema: $ref: '#/definitions/MTOShipments' '400': $ref: '#/responses/InvalidRequest' '401': $ref: '#/responses/PermissionDenied' '404': $ref: '#/responses/NotFound' '500': $ref: '#/responses/ServerError' /okta-profile: get: summary: Returns Okta profile values from Okta's Users API description: >- Calls a GET request to Okta's Users API and returns profile values that includes Okta data that the user provided upon registration or most recent profile update. operationId: showOktaInfo tags: - okta_profile produces: - application/json responses: '200': description: okta profile for user schema: $ref: '#/definitions/OktaUserProfileData' '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized '404': description: service member not found '500': description: internal server error post: summary: >- Update the user's okta profile with primary data, returns Okta profile values from the Okta's Users API reflecting updated values. description: >- Update the user's okta profile with primary data, returns Okta profile values from the Okta's Users API reflecting updated values. operationId: updateOktaInfo tags: - okta_profile parameters: - in: body name: updateOktaUserProfileData required: true schema: $ref: '#/definitions/UpdateOktaUserProfileData' consumes: - application/json produces: - application/json responses: '200': description: okta profile for user schema: $ref: '#/definitions/OktaUserProfileData' '400': description: invalid request '401': description: request requires user authentication '403': description: user is not authorized '422': description: validation error schema: $ref: '#/responses/UnprocessableEntity' '500': description: internal server error /calendar/{countryCode}/is-weekend-holiday/{date}: get: summary: Validate move date selection description: | Utility API to determine if input date falls on weekend and/or holiday. produces: - application/json operationId: isDateWeekendHoliday tags: - calendar parameters: - description: country code for context of date in: path name: countryCode required: true type: string enum: - US - description: input date to determine if weekend/holiday for given country. in: path name: date required: true type: string format: date responses: '200': description: >- Successfully determine if given date is weekend and/or holiday for given country. schema: $ref: '#/definitions/IsDateWeekendHolidayInfo' '400': $ref: '#/responses/InvalidRequest' '401': $ref: '#/responses/PermissionDenied' '404': $ref: '#/responses/NotFound' '500': $ref: '#/responses/ServerError' responses: InvalidRequest: description: The request payload is invalid. schema: $ref: '#/definitions/ClientError' NotFound: description: The requested resource wasn't found. schema: $ref: '#/definitions/ClientError' Conflict: description: >- The request could not be processed because of conflict in the current state of the resource. schema: $ref: '#/definitions/ClientError' PermissionDenied: description: The request was denied. schema: $ref: '#/definitions/ClientError' ServerError: description: A server error occurred. schema: $ref: '#/definitions/Error' PreconditionFailed: description: >- Precondition failed, likely due to a stale eTag (If-Match). Fetch the request again to get the updated eTag value. schema: $ref: '#/definitions/ClientError' UnprocessableEntity: description: The payload was unprocessable. schema: $ref: '#/definitions/ValidationError' parameters: ifMatch: in: header name: If-Match type: string required: true description: > Optimistic locking is implemented via the `If-Match` header. If the ETag header does not match the value of the resource on the server, the server rejects the change with a `412 Precondition Failed` error. ppmShipmentId: name: ppmShipmentId in: path type: string format: uuid required: true description: UUID of the PPM shipment proGearWeightTicketId: name: proGearWeightTicketId in: path type: string format: uuid required: true description: UUID of the pro-gear weight ticket movingExpenseId: name: movingExpenseId in: path type: string format: uuid required: true description: UUID of the moving expense weightTicketId: name: weightTicketId in: path type: string format: uuid required: true description: UUID of the weight ticket