Integration model
What is the difference between GNet Connect and GNet Platform?
What is the difference between GNet Connect and GNet Platform?
Are we a requester, a provider, or both?
Are we a requester, a provider, or both?
We are a multi-tenant dispatch platform. Does each tenant need its own GNet account?
We are a multi-tenant dispatch platform. Does each tenant need its own GNet account?
How do we route an incoming trip to the right tenant?
How do we route an incoming trip to the right tenant?
affiliateReservation.providerId — the GRiDD ID of the operator the trip is for. You expose one adapter URL for the whole platform and route on that field.On the send side the same pair identifies the tenant: set requesterId to the operator you are sending on behalf of, and providerId to the receiving affiliate.Can we manage tenant signup and partnerships inside our own product?
Can we manage tenant signup and partnerships inside our own product?
- Signup registers a new company from your own UI.
- Manage Partners lets a tenant view, accept, or reject incoming partnership requests.
- Get Partners lists a tenant’s existing partners.
Access and environments
What are the test and production endpoints?
What are the test and production endpoints?
gtest.grdd.net/platform.svc/help. The current API version is V1 — every endpoint takes a version parameter of V1.How do we get test credentials, and is there a sandbox?
How do we get test credentials, and is there a sandbox?
gnettest account and cancelled afterwards.What you get instead is a test account to develop against, provisioned by the GNet team — contact us with your company details and intended direction (Farm In, Farm Out, or both).To rehearse before certification, use the GNet Robot in the Connect dashboard. It runs the same exchanges certification does, on demand, and tells you exactly which status call it is waiting for at each step. See Certification.Our test trips never reach our adapter. Why?
Our test trips never reach our adapter. Why?
Authentication
How does authentication work?
How does authentication work?
getToken2 with your uid and pw, then send the token on every subsequent call:api_key and api_secret we issue alongside your credentials:How long do tokens last?
How long do tokens last?
releaseToken at the end of a session to invalidate it.The implication matters: a leaked token remains valid indefinitely until released. Treat tokens as secrets, keep them server-side, and never hard-code credentials.How often should we fetch a token?
How often should we fetch a token?
401.Webhooks
How many endpoints do we need to expose?
How many endpoints do we need to expose?
Farm In listener
affiliateReservation.action (NEW, UPDATE, CANCEL) to decide what to do.Status callback listener
How do we register or change our webhook URLs?
How do we register or change our webhook URLs?
How are callbacks delivered? Can we rely on ordering?
How are callbacks delivered? Can we rely on ordering?
- Never move a trip’s state backwards on a late callback.
- If you suspect you missed one, reconcile with Get Reservation by Transaction ID — as a one-off reconciliation, not on a timer.
FAILED and notifies the sender, who can resubmit.How do we decline a trip we cannot cover?
How do we decline a trip we cannot cover?
success: false and a clear message explaining why. An explicit decline is a valid, expected answer — a trip that is acknowledged but never acted on is not.QUOTE requests are answered synchronously back to the sender the same way.Do you call from a fixed IP range we can allowlist?
Do you call from a fixed IP range we can allowlist?
What does our Farm In endpoint have to return?
What does our Farm In endpoint have to return?
GET with {"success": true} for our health check, accept Content-Type: application/json, and be reachable over public HTTPS.Sending trips
What fields are required for sendTrip?
What fields are required for sendTrip?
How are dates and times formatted?
How are dates and times formatted?
YYYY-MM-DDTHH:mm:ss, for example 2026-08-08T19:00:00.Pickup, drop-off and stop times are local to the pickup location and carry no timezone. Do not convert to UTC and do not append an offset.How do we format airport trips?
How do we format airport trips?
locationType to AIRPORT and use IATA codes — without them, airport trips cannot be interpreted.- 3-character IATA airport code goes in the
addressfield - 2-character IATA airline code goes in
airlineCode - Put the real flight number in
flightNumber, or leave it empty. Never sendTBDor a placeholder. - For an FBO, set
FBOtoTrueon that leg. Airline code00is also an FBO indicator.
How do we make our integration idempotent?
How do we make our integration idempotent?
transactionId. It is assigned by GNet and stays the same through UPDATE and CANCEL for the life of the trip.- If a
NEWarrives carrying atransactionIdyou already hold, return the existingreservationIdrather than creating a second booking. - On the send side,
sendTripkeeps one reservation perrequesterResNoper sender, so a resentNEWreturns the same transaction instead of booking twice.
What is the difference between runType and preferredVehicleType?
What is the difference between runType and preferredVehicleType?
preferredVehicleType is the vehicle — see Vehicle Types. runType is the service: TRANSPORT, AIRPORT or HOURLY.For an hourly trip, also set totalTripDuration in minutes.How should vehicle types be mapped?
How should vehicle types be mapped?
preferredVehicleType. GNet performs the mapping into the target system. You do not need to know what the receiving system calls its vehicles.Farming in. Configure the mapping in the GNet portal, per company, per GRiDD ID — each GNet vehicle type maps to the vehicle type you use internally. By the time a payload reaches your system, the vehicle type has already been mapped.Quotes and bidding
How do we request a price without booking?
How do we request a price without booking?
reservationType: "QUOTE" on the same endpoint. On the receiving side, return the price but do not create a reservation record — a quote is a price check, and the requester may never follow up.What if we do not want to price quotes at all?
What if we do not want to price quotes at all?
totalAmount and do not create a record.Our quotes return a result but the rate never comes through.
Our quotes return a result but the rate never comes through.
totalAmountmust be a JSON string —"101.47", not101.47feesmust be present as an array, even when empty- Do not include a
messagefield in a success response — it breaks response parsing transactionIdmust echo the exact value from the request
We quoted several partners and picked a winner. Do we cancel the losers?
We quoted several partners and picked a winner. Do we cancel the losers?
Tracking
How do we get driver location?
How do we get driver location?
We are the provider — how do we push GPS to GNet?
We are the provider — how do we push GPS to GNet?
saveGPScache, or batch several drivers into one call with GPSgrab.token header only — do not add a Basic Auth header.403 on saveGPScache usually means a bad internalBookingId, not a permissions problem. Send the booking ID from the GNet payload, not your own internal reference.The first GPS call comes back empty.
The first GPS call comes back empty.
Why is GPS available for some trips and not others?
Why is GPS available for some trips and not others?
Troubleshooting
A trip failed to deliver. What now?
A trip failed to deliver. What now?
affiliateReservation.status is set to FAILED and affiliateReservation.notes carries the reason. Alert on that combination.Transactions can fail for infrastructure reasons unrelated to your payload — a target gateway down for maintenance, for example. Use Retry Transaction rather than resubmitting as a new trip, which would create a duplicate.We got "Invalid Affiliate Integration."
We got "Invalid Affiliate Integration."
Are amounts final at CLOSE?
Are amounts final at CLOSE?
CLOSE, but be able to accept a correction — a provider can resend CLOSE with revised amounts.Note also that FAILED is not a trip state. It marks a failed transmission between systems; the trip itself is unaffected.Should we poll for reservation status?
Should we poll for reservation status?
Migrating an existing member
A member is moving to our platform from another dispatch system. Do they need a new GNet account?
A member is moving to our platform from another dispatch system. Do they need a new GNet account?