Skip to content

Before you go live

7 min read

Prior to transitioning into the live production environment, your system must satisfy acceptance criteria covering connectivity, business workflow verification, data integrity safeguards, and operational monitoring. This page provides a concise, actionable checklist to evaluate your launch readiness before enabling live partner traffic.

The four gates must be cleared in order. Subsequent gates depend strictly on previous ones: connectivity is required to test business flows, understanding flows is required to design safeguards, and monitoring only proves useful once safeguards are active.

The diagram below shows the four sequential acceptance gates before putting the system into production:

flowchart LR
K["Gate 1 — Connection"] --> K1["Live key stored only in secrets manager"]
K --> K2["Base URL confirmed in writing"]
K1 --> N["Gate 2 — Business flows"]
K2 --> N
N --> N1["Execute 1 real order on UAT"]
N --> N2["Identify automated ticketing operators"]
N1 --> C["Gate 3 — Safeguards"]
N2 --> C
C --> C1["Block duplicate creation locally"]
C --> C2["Check state on timeout"]
C1 --> G["Gate 4 — Monitoring"]
C2 --> G
G --> G1["Daily scheduled reconciliation"]
G --> G2["Abnormal silence alerts"]
  • Secret key protection: The live API key is stored exclusively in a secure secrets manager or protected environment variables, never hardcoded in source code or included in client-side builds.
  • Base URL confirmation: The production Base URL has been officially verified in writing by Ferry representatives, not assumed from documentation.
  • Environment separation: UAT and Production credentials are distinctly labelled in your configuration to avoid crossing environments.
  • Key rotation drill: You have rehearsed the key rotation sequence (provision new key, load into system, verify traffic runs cleanly, and then request revocation of the retired key).

Keys have no expiry and no advance revocation warning. Revocation is immediate and irreversible; agree on a key-incident contact before opening sales.

Gate 2 — Business flows and ferry operators

Section titled “Gate 2 — Business flows and ferry operators”
  • End-to-end UAT order: You have exercised a complete booking lifecycle, including a controlled failure, and confirmed the real ticket on the tested operator’s system.
  • Identify automated ticketing operators: You know which ferry operators support automated API ticketing versus those requiring custom operational handling.
  • Partial ticketing handling: Your system properly manages scenarios where a round-trip or multi-leg booking succeeds on only one leg.
  • Price formula verification: You have cross-checked customer retail prices and agency NET prices, ensuring calculations align across both systems.
  • Local duplicate prevention: You have submitted twice in succession and verified that only one booking exists, rather than only checking that the button becomes disabled.
  • Safe timeout recovery: If an order creation call encounters a network timeout, your system queries order status before deciding whether to resubmit.
  • Webhook deduplication: Your webhook ingestion pipeline deduplicates events by resource identifier and event type.
  • Safe handling of empty lists: Your system does not interpret empty API list responses as justification to delete or cancel local records.
  • Scheduled reconciliation active: An automated background job compares order statuses and financial ledgers between both systems daily.
  • Webhook receiver verified: Your webhook receiving URL runs HTTPS, responds with HTTP 200 in under 2 seconds, and has verified live event ingestion.
  • Abnormal silence alerts: Monitoring alerts trigger when no events or orders arrive within an unexpectedly wide timeframe.
  • Trace ID logging: Log trace IDs, order IDs, and error codes for every failed call; retain them for at least one month for investigations.
  • Unexpected empty-list alerts: Alert when a query that normally returns data suddenly returns empty, even with HTTP 200.

Four operational signals partners must monitor continuously:

  1. Order status is the authoritative truth: Webhooks serve as event signals; API polling provides the ground truth. Scheduled reconciliation tasks automatically backfill any dropped webhook events.
  2. Orders transition status without partner calls: Background sweep tasks automatically reconcile paid bookings with ferry operators. A booking may transition to issued status several minutes later without any API invocation from your side.
  3. Ticketing confirmation latency: Issuing tickets with certain ferry operator gateways can take several minutes. Ensure client request timeouts accommodate this duration and monitor latency to detect slow upstream gateways.
  4. Balance and business error rates: Track your organization’s available deposit balance and error code frequencies to replenish funds before orders fail due to balance shortages.

The global rate limit counts by IP address; there is no separate quota per API key or organization. Track both HTTP 429 and business error codes. Confirmation can take 5–8 minutes with some operators; do not treat a timeout as proof that the booking failed.

ItemUAT environmentProduction environmentAction required when switching
Base URLTypically api.ferryvn.netapi.ferry.vnUpdate configuration based on written confirmation from Ferry
Operator connectivity11 operators blocked from logging in on UATThis login block list is not appliedTest required operators; arrange temporary UAT access with Ferry before launch if needed
Debt healing tasksTest mode only, no live ledger entriesRuns live and reconciles ledgersEnable scheduled reconciliation before launch to catch drift
API keyUAT key (shares ferry_ prefix)Production key (shares ferry_ prefix)Distinctly isolate credentials in secret storage

The 11 operators blocked from logging in on UAT are mailinhexpress, superdong, phuquocexpress, lightning68, hoabinhship, phuquyexpress, greenlines, cangsaky, hangchautourist, chankhaluxury, and saigonwatergo. This login block list is distinct from the list of operators without automated ticket issuance.

MisconceptionRealityConsequence
UAT is a mocked sandboxUAT issues real tickets on operator portalsFlawed tests expend real agency balances
Going live only requires changing the Base URLMore operators are live on Production than UATGateway-specific errors only surface live if unverified
Waiting for Ferry to provide idempotency keysFerry does not provide idempotency for order creationRetrying on timeout creates duplicate orders and double charges
Webhooks are the sole source of truthWebhooks do not retry and time out after 2 secondsStuck orders go unnoticed if webhooks drop
API keys do not expire so rotation is unneededCompromised keys remain usable without automated alertsUnmonitored security exposure over time

The API reference at https://api.ferry.vn/docs is your final verification tool before going live. Call a read-only endpoint using your production credentials on the live domain:

Verification targetGroup in API reference
Read-only call to verify live API key validityVoyage
Query booking state for reconciliationBookings
Inspect order detail structures during reconciliationOrder
Transaction history to reconcile balances and paymentsPayment
Organization profile tied to your API keyOrganizations
PageWhen to read
OverviewReview full functional boundaries and API scope
EnvironmentsCompare technical details between UAT and Production
AuthenticationLearn key rotation procedures and permission sets
ConventionsReview data formats, paging cursors, and duplicate handling
Errors and how to handle themInspect business error codes and retry rules
Rate limitsConfigure throughput thresholds and monitor 429 errors
WebhooksSet up event receivers and asynchronous ingestion
Booking flowReview complete booking lifecycles before final sign-off
  • Service Level Agreements (SLA): Ferry has not published formal commitments regarding platform uptime or incident turnaround times. Partners should establish emergency contact channels and support availability hours prior to opening live sales.
  • Official Base URL confirmation: The production Base URL should be formally verified in writing with Ferry engineering before routing live customer traffic.
  • Silence alert threshold: The threshold of X minutes depends on individual partner transaction volume; configure alert thresholds flexibly to account for peak and off-peak travel seasons.