# Spirit Airlines Mobile API

Extracted from `com.spirit.customerapp` v4.7.0 (build 1340)

## Base URL

| Environment | URL |
|-------------|-----|
| **Production** | `https://api.spirit.com/customermobileprod/2.8.0/` |
| QA1 | `https://apiqa.spirit.com/qa01-customermobileapi/` |
| QA2 | `https://apiqa.spirit.com/qa02-customermobileapi/` |
| Dev1 | `https://apiqa.spirit.com/dev01-customermobileapi/` |
| Dev2 | `https://apiqa.spirit.com/dev02-customermobileapi/` |
| Stage | `https://api.spirit.com/stage-customermobileapi/` |
| CMS | `https://content.spirit.com/api/content/` |

## Standby / Board of Availability (BOA)

Spirit uses "BOA" (Board of Availability) as their standby system:

```
GET  https://api.spirit.com/customermobileprod/2.8.0/v1/getboaparameters
POST https://api.spirit.com/customermobileprod/2.8.0/v1/getboastatus
```

### BOA Status Request
- **Method:** POST
- **Body:** `BoaStatusRequestDto` (JSON)
- **Response:** `BoaStatusResponseDto` containing `BoaStatus` objects

### BOA Data Model
- `BoaStatusInfo` — status of standby position
- `boaStatusChecker` — polls for status updates using a `boaUniqueSessionToken`
- `isStandby` — boolean flag on trip/flight objects
- `standby` — standby details on trip segments

### BOA Flow
1. Call `v1/getboaparameters` to get BOA config
2. Call `v1/getboastatus` with flight/booking details
3. Poll using `boaStatusChecker` with session token for updates

## All API Endpoints

### Authentication
| Method | Path | Description |
|--------|------|-------------|
| POST | `v2/Token` | Fetch auth token |
| POST | `v3/Token` | Fetch v3 auth token |
| PUT | `v3/Token` | Refresh v3 token |

### Init & Config
| Method | Path | Description |
|--------|------|-------------|
| GET | `v1/init` | App initialization |
| GET | `v1/stations` | Airport station list |
| GET | `v1/OnD/Countries` | Country reference data |

### Flight Search & Status
| Method | Path | Description |
|--------|------|-------------|
| POST | `v5/Flight/Search` | Search flights |
| POST | `v3/GetFlightInfoBI` | Flight info |
| POST | `v1/booking/flightdetails` | Flight details |
| POST | `v1/calendar/availabledates` | Available dates calendar |

### Booking
| Method | Path | Description |
|--------|------|-------------|
| GET | `v1/booking/retrieve` | Retrieve booking (params: RecordLocator, LastName) |
| GET | `v1/booking` | Get booking state |
| GET | `v1/booking?screenType=ReviewTempStay` | Booking review |
| PUT | `v2/booking` | Update booking |
| POST | `v1/booking/book` | Confirm booking |
| POST | `v1/trip/sell` | Sell trip |
| POST | `v2/ValidateBookingRequest` | Validate booking |

### Standby / BOA
| Method | Path | Description |
|--------|------|-------------|
| **GET** | **`v1/getboaparameters`** | **Get BOA (standby) parameters** |
| **POST** | **`v1/getboastatus`** | **Get standby status** |

### Check-in & Boarding
| Method | Path | Description |
|--------|------|-------------|
| POST | `v1/booking/checkin/journey` | Check in for journey |
| POST | `v2/booking/boardingpasses/journey` | Get boarding passes |

### Trip Management
| Method | Path | Description |
|--------|------|-------------|
| POST | `v1/managetrip` | Manage trip |
| POST | `v2/tripdetails` | Get trip details |
| POST | `v3/mytrips` | Get my trips |
| POST | `v1/booking/passengers/passengerreturndates` | Passenger return dates |

### Seats
| Method | Path | Description |
|--------|------|-------------|
| GET | `v1/booking/seatmap` | Get seat map |
| GET | `v4/booking/seatmaps/` | Get seat maps v4 |
| POST | `v4/booking/passengers/{passengerKey}/seats/{unitKey}` | Assign seat |

### Bags
| Method | Path | Description |
|--------|------|-------------|
| POST | `v1/bags` | Get bags |
| PUT | `v1/bags/update` | Update bags |

### Bundles & Upsell
| Method | Path | Description |
|--------|------|-------------|
| GET | `v3/options` | Get options |
| PUT | `v1/options/update` | Update options |
| POST | `v1/bundle/UpsellAvailability` | Upsell availability |
| POST | `v3/bundle/ssrs` | Bundle SSRs |
| POST | `v4/bundle/ssrs` | Bundle SSRs v4 |
| POST | `v2/cart` | Manage cart |

### Payments
| Method | Path | Description |
|--------|------|-------------|
| POST | `v1/booking/payments/fetchredemptiondetail` | Fetch redemption |
| POST | `v1/booking/payments/redeem` | Redeem points |
| DELETE | `V3/User/Person/StoredPayments/{key}` | Delete stored payment |

### Account
| Method | Path | Description |
|--------|------|-------------|
| POST | `v1/FreeSpirit/CreateAccount` | Create Free Spirit account |
| POST | `v1/FreeSpirit/Booking/CreateAccount` | Create account during booking |
| GET | `v1/User/Person` | Get user profile |
| POST | `v1/account/password/reset` | Reset password |
| POST | `v1/account/updateexpiredpassword` | Update expired password |
| POST | `v1/account/points` | Account points |
| POST | `v1/points` | Points |
| POST | `v1/MemberInfo/ValidateFSNumber` | Validate Free Spirit number |
| POST | `v1/registerForPromotion` | Register for promotion |

### Documents & SSR
| Method | Path | Description |
|--------|------|-------------|
| POST | `v1/booking/passengers/{key}/documents` | Add travel doc |
| PUT | `v1/booking/passengers/{key}/documents/{docKey}` | Update travel doc |
| POST | `v1/booking/passengers/{key}/infant/documents` | Add infant doc |
| POST | `v1/document/validate` | Validate document |
| POST | `v1/booking/ssrs/add/acia` | Add SSR |
| POST | `v2/trip/specialassistance` | Special assistance |
| POST | `v3/ssrs/health-ack/accept` | Accept health acknowledgment |
| POST | `v3/ssrs/health-ack/decline` | Decline health acknowledgment |

### Other
| Method | Path | Description |
|--------|------|-------------|
| GET | `v1/GetContent/help` | Help content |
| POST | `v1/getdynamiccontent` | Dynamic content |
| POST | `v1/booking/touristtax` | Tourist tax |
| POST | `v1/booking/passengers/temporarystay/address` | Temp stay address |
| POST | `v1/travelguard/getquote` | Travel insurance quote |

## Security Notes

- **No SSL pinning** in network_security_config.xml
- **No PairIP or anti-tamper** protection
- Uses Retrofit2 for HTTP
- Auth via token-based system (`v2/Token`, `v3/Token`)
- `libakamaibmp.so` present — Akamai Bot Manager for bot detection
- App runs fine on emulators

## CMS Endpoints

| Path | Description |
|------|-------------|
| `en-US?path=mobile/book/paxtravelingui` | Passenger traveling UI content |
| `en-US?path=mobile/localnotification` | Local notification content |
| `en-US?path=mobile/mytripui` | My trips UI content |
