Postman Collections — ALPA Mobile

Updated: 2026-09-02 17:29 ET · Audited: 2026-06-26

This folder contains a Postman v2.1 collection and three environments covering the HTTP endpoints the MAUI client calls directly via HttpClient in ALPAMobile/Services/RestService.cs.

Endpoints reached through the NSwag-generated NuGet clients (ALPA.Services.FTDT.ApiClientNet7_0, Jumpseat.ApiClient, PilotComms.ApiClient.Net8, MobileMenu.ApiClient) are not included — those are owned by the backend team and should be exercised against their own OpenAPI/Swagger specs.

Files

FilePurpose
ALPAMobile.postman_collection.jsonAll endpoints, grouped by API surface
ALPAMobile-QA.postman_environment.jsonDevEnv = true endpoints since PR 2181 / AB#2575 (gatewayapiqa / authapi) — what the app hits in Development mode
ALPAMobile-Dev.postman_environment.jsonPre-AB#2575 dev gateway (gatewayapi / authapi); still the hardcoded host of DynamicContentApiClient
ALPAMobile-Prod.postman_environment.jsonProduction endpoints (gateway / authsvc2)

Import

  1. Open Postman → Import → drop all four JSON files.
  2. Top-right environment picker → choose ALPA Mobile (QA), ALPA Mobile (Dev) or ALPA Mobile (Prod).
  3. Run Auth ▸ AuthenticateUserViaJWT — its test script writes access_token into the bearerToken environment variable, so every other request picks it up via the collection-level Authorization: Bearer {{bearerToken}} header.

Variables

VariableDev valueProd value
baseUrlhttps://gatewayapi.alpa.orghttps://gateway.alpa.org
baseUrlV2https://gatewayapi.alpa.org/v2https://gateway.alpa.org/v2
baseAuthUrlhttps://authapi.alpa.orghttps://authsvc2.alpa.org
baseWebUrlhttps://alpa.orghttps://alpa.org
bearerToken(set by Auth request)(set by Auth request)
AlpaId, passwordlogin credentialslogin credentials
alpaIdpath-param placeholder for member/carrier/national requestssame
emailfor Member.GetAlpaNoByEmailfor Member.GetAlpaNoByEmail
docSource, docPathcapture from a successful Doc.GetDocuments responsesame
Postman variable syntax: Path placeholders must use double braces ({{var}}). Single braces ({var}) are sent to the server literally and produce errors like "The value '{airlineId}' is not valid." All URLs in this collection have been normalized to {{...}} — follow the same convention if you add a request.

Notes

Authentication Policy

The collection sets Authorization: Bearer {{bearerToken}} at the collection level, so every request inherits it. The following requests override that with auth: noauth because the mobile app calls them before login:

RequestWhy it's anonymous
Auth ▸ AuthenticateUserViaJWTIssues the token; can't require one
App / Member / Misc ▸ Member.GetAlpaNoByEmailResolves email → AlpaId on the login screen, pre-token
App / Member / Misc ▸ AppConfig.GetReleaseRuns from DataManager 2.5s after app launch, before any login
App / Member / Misc ▸ Settings ListPublic app-settings endpoint
App / Member / Misc ▸ PageBanner List (anonymous)Server returns the public banner subset without a token

Every other request requires a valid bearer. If a request returns 401, run AuthenticateUserViaJWT first to refresh {{bearerToken}}.

PageBanner List is duplicated: the (authenticated) variant mirrors what the mobile client sends post-login (full personalized banner set), and the (anonymous) variant exercises the public path.

Known Failures (Last Full-Collection Run)

Treat the items below as expected failures until the underlying server work lands — they are not caused by the collection itself.

Backend 500s (escalate to API team with the trace ID from the response)

404 — Data Not Present in Dev

Bodies You Still Need to Populate

All POST/PUT bodies in the collection are pre-filled with schema-correct shapes derived from ALPALogEvent.cs and the flight-search models. Replace the placeholder values (sample dates, IDs, payload strings) with realistic data before sending mutating requests.

Runner Threshold

The collection-level test asserts Response time < 10s. Slow endpoints (AppConfig.GetRelease, anonymous PageBanner List) fail this assertion in addition to returning 500. Raising the threshold would mask real regressions — leave it as-is and fix the upstream services.