> ## Documentation Index
> Fetch the complete documentation index at: https://docs.grdd.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Fleet Search

> Search for available fleet vehicles by type and location across all GNet operators.

## Fleet Search API

The **Fleet Search API** lets you discover available vehicles from all GNet operators near a given location. Search by vehicle type (e.g., sedan, SUV) and specify a location using airport codes or GPS coordinates. Results include vehicle details, photos, capacity, and the operator's GPS position.

***

## **Endpoint**

`GET https://core.grdd.net/api/search/fleet`

`Authorization: Bearer <your_token>`

***

## **Query Parameters**

| Parameter  | Type   | Description                                                                                                                                                                      | Required    |
| ---------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| airports   | string | Comma-separated IATA airport codes (e.g. `LAX,SNA`). At least one of `airports` or `lat`+`lon` is required.                                                                      | Conditional |
| lat        | number | Latitude of the search center (e.g. `33.9425`). Must be paired with `lon`.                                                                                                       | Conditional |
| lon        | number | Longitude of the search center (e.g. `-118.408`). Must be paired with `lat`.                                                                                                     | Conditional |
| types      | string | Comma-separated vehicle types to filter by (e.g. `sedan,suv`). Case-insensitive. Omit to return all types.                                                                       | No          |
| q          | string | Keyword search. Every word must appear (case-insensitive) in at least one of the vehicle's `name`, `description`, `model`, or `type`. Omit or leave blank to return all results. | No          |
| radius\_km | number | Search radius in kilometers. Defaults to `50` when omitted.                                                                                                                      | No          |
| limit      | number | Maximum number of results to return per page. Defaults to `20`, max `100`.                                                                                                       | No          |
| offset     | number | Number of results to skip (for pagination). Defaults to `0`.                                                                                                                     | No          |

**Location requirement:** Provide at least one of `airports` or `lat`+`lon`. Both can be combined — operators near any of the given locations are included.

***

## **Example Requests**

### Search by airport code

```
GET https://core.grdd.net/api/search/fleet?airports=LAX&types=sedan,suv&limit=20&offset=0
Authorization: Bearer <your_token>
```

### Search by GPS coordinates

```
GET https://core.grdd.net/api/search/fleet?lat=33.9425&lon=-118.408&types=sedan
Authorization: Bearer <your_token>
```

### Multi-airport search with custom radius

```
GET https://core.grdd.net/api/search/fleet?airports=LAX,SNA&radius_km=30
Authorization: Bearer <your_token>
```

### Keyword search

```
GET https://core.grdd.net/api/search/fleet?airports=LAX&q=rolls+royce
Authorization: Bearer <your_token>
```

Returns only fleet records where both "rolls" and "royce" appear across the name, description, model, or type fields. Combine with `types` to further narrow results.

***

## **Success Response**

### **200 - OK**

Returns a list of fleet vehicles matching the search criteria. The list is cross-operator — vehicles from all GNet operators serving the requested location(s) are included.

```json theme={null}
{
  "success": true,
  "data": {
    "items": [
      {
        "griddid": "acme-limo",
        "type": "sedan",
        "name": "Business Class Sedan",
        "description": "Mercedes-Benz E-Class or similar.",
        "imageUrl": "https://asset.grdd.dev/profile/acme-limo/business-class-sedan.png",
        "maxPassengers": 4,
        "maxLuggage": 2,
        "lat": 33.9425,
        "lon": -118.408,
        "distanceKm": 1.23,
        "score": 82,
        "minimum_rate": 200,
        "hourly_rate": 150,
        "slug": "s500-latest"
      },
      {
        "griddid": "premier-rides",
        "type": "suv",
        "name": "Luxury SUV",
        "description": "Cadillac Escalade or similar.",
        "imageUrl": "https://asset.grdd.dev/profile/premier-rides/luxury-suv.png",
        "maxPassengers": 6,
        "maxLuggage": 4,
        "lat": 33.9412,
        "lon": -118.402,
        "distanceKm": 2.07,
        "score": 65,
        "minimum_rate": 200,
        "hourly_rate": 150,
        "slug": "s500-latest"
      }
    ],
    "total": 2,
    "warnings": []
  }
}
```

***

## **Response Fields**

### `data.items[]`

| Field         | Type               | Description                                                                                                                       |
| ------------- | ------------------ | --------------------------------------------------------------------------------------------------------------------------------- |
| griddid       | string             | Unique GNet operator ID                                                                                                           |
| type          | string             | Vehicle type (e.g. `sedan`, `suv`, `bus`)                                                                                         |
| name          | string             | Display name of the vehicle class                                                                                                 |
| description   | string             | Vehicle description                                                                                                               |
| imageUrl      | string / null      | URL of the vehicle photo, or `null` if unavailable                                                                                |
| maxPassengers | number             | Maximum passenger capacity                                                                                                        |
| maxLuggage    | number             | Maximum luggage capacity                                                                                                          |
| lat           | number             | Latitude of the operator's service location nearest the search point                                                              |
| lon           | number             | Longitude of the operator's service location nearest the search point                                                             |
| distanceKm    | number             | Great-circle distance in km from the nearest search point to the operator's location (rounded to 2 decimal places)                |
| score         | number             | Completeness score (0–100) reflecting how fully the operator has populated vehicle details (photo, description, capacity, extras) |
| minimum\_rate | number             | Operator's minimum booking rate (0 if not set)                                                                                    |
| hourly\_rate  | number             | Operator's hourly rate (0 if not set)                                                                                             |
| slug          | string / undefined | URL-friendly identifier for the vehicle class, if set by the operator                                                             |

### `data.warnings[]`

Warnings are non-fatal notices returned alongside results.

| Field   | Type   | Description                                           |
| ------- | ------ | ----------------------------------------------------- |
| code    | string | Warning code: `UNRESOLVABLE_AIRPORT` or `MISSING_GPS` |
| griddid | string | Operator GNet ID (present for `MISSING_GPS` warnings) |
| detail  | string | Human-readable explanation                            |

**Warning codes:**

* `UNRESOLVABLE_AIRPORT` — An airport code in the request could not be resolved to GPS coordinates. Valid codes in the same request are still searched.
* `MISSING_GPS` — An operator has a service location record near the search point but no parseable GPS coordinates. That operator is excluded from results.

***

## **Error Responses**

### **401 - Unauthorized**

```json theme={null}
{
  "success": false,
  "message": "Unauthorized"
}
```

### **400 - Bad Request**

Returned when no location is provided, or when `lat` and `lon` are not both present.

```json theme={null}
{
  "success": false,
  "message": "Provide at least one location: airports (e.g. airports=LAX) or coordinates (lat + lon)"
}
```

### **500 - Internal Server Error**

```json theme={null}
{
  "success": false,
  "message": "Internal server error"
}
```

***

## **Notes**

### Sort order

Results are sorted by two criteria applied in order:

1. **Distance (ascending)** — operators nearest the search point(s) appear first. Distance is grouped into 5 km buckets, so an operator 3 km away and one 4.9 km away are treated as equally close.
2. **Completeness score (descending)** — within the same distance bucket, operators with richer vehicle profiles (photo, description, capacity info, extras) rank higher. Scores range from 0 to 100; the `score` field is included in each result for reference.

This ensures that a 0.01 km distance difference does not bury a significantly better-described operator.

***

* Results are **cross-operator**: vehicles from every active GNet operator serving the search area are included in a single response.
* When multiple airport codes or a mix of airports and GPS coordinates are provided, operators near **any** of the given points are included (union).
* An operator appearing in multiple location results is deduplicated — they appear once, with GPS from the location closest to the first matched search point.
* The `types` filter is **case-insensitive** (`Sedan`, `SEDAN`, and `sedan` all match).
* When `types` is omitted, all vehicle types from matching operators are returned.
* `radius_km` defaults to `50` km when not specified.
* `limit` defaults to `20` and is capped at `100`. Use `offset` to page through results (`offset=20` for page 2, `offset=40` for page 3, etc.).
* `total` in the response always reflects the full match count before pagination, so callers can compute total pages as `ceil(total / limit)`.
