> For the complete documentation index, see [llms.txt](https://mango-5m.gitbook.io/mango5m-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mango-5m.gitbook.io/mango5m-docs/resources/mango-dispatch/developer-guide/call-fields.md).

# Call Fields

Every field you can send into a call, and every field you get back out.

### What you send

| Field          | Type             | Limit                            | Default when omitted               |
| -------------- | ---------------- | -------------------------------- | ---------------------------------- |
| `code`         | string           | 10 chars                         | `ALERT`                            |
| `title`        | string           | 150 chars                        | `Dispatch Alert`                   |
| `description`  | string           | 255 chars                        | The title                          |
| `callerName`   | string           | 100 chars                        | `Anonymous Caller`                 |
| `callerNumber` | string           | 20 chars                         | none                               |
| `tags`         | table of strings | -                                | `{}`                               |
| `x`, `y`, `z`  | number           | must be between -20000 and 20000 | **required on the server**         |
| `street`       | string           | 150 chars                        | resolved from coords on the client |
| `suburb`       | string           | 150 chars                        | resolved from coords on the client |
| `sound`        | string           | 60 chars, sanitised              | `Config.Dispatch.alertSound.file`  |
| `silent`       | boolean          | -                                | `false`                            |

{% hint style="warning" %}
Strings longer than the limit are **truncated**, not rejected. Coordinates that fail validation reject the whole call: `CreateCall` returns `nil` and nothing reaches the board.
{% endhint %}

`sound` is stripped of anything that is not a letter, digit, dash, dot or underscore before it is used, so it can never be turned into a path traversal.

### What you get back

`GetCall`, `GetActiveCalls` and `GetRecentCalls` return calls in this shape:

```lua
{
    id = 12,
    code = '10-90',
    title = 'Robbery - Convenience Store',
    description = 'Masked male with a handgun took the register.',
    caller_name = 'Priya Kapoor',
    caller_number = '555-0102',
    tags = { 'weapon', 'robbery' },
    x = 25.7, y = -1347.3, z = 29.5,
    street = 'Innocence Blvd',
    suburb = 'Strawberry',
    responding_officer_id = 'char1:abc...',
    responding_officer_name = 'Officer Reyes',
    resolved = false,
    resolved_at = nil,
    created_at = '2026-08-25 21:04:11',
    seconds_ago = 143,
}
```

| Field                           | Notes                                                                                                                                        |
| ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`                            | Numeric, unique for the server session. Resets when the resource restarts                                                                    |
| `caller_name` / `caller_number` | Snake case on the way out, camel case on the way in - the store keeps a record-shaped view                                                   |
| `responding_officer_id`         | The **Primary** responder's identifier, or `nil`. A mirror of the responder list, so integrations can show a responding officer per call row |
| `responding_officer_name`       | The Primary's display name                                                                                                                   |
| `resolved` / `resolved_at`      | `resolved_at` is a formatted timestamp, `nil` while open                                                                                     |
| `created_at`                    | `YYYY-MM-DD HH:MM:SS`, server time                                                                                                           |
| `seconds_ago`                   | Age at the moment you asked                                                                                                                  |

### Responder info

Lists returned by `GetActiveCalls` and `GetRecentCalls` carry three extra fields per call:

| Field             | Meaning                                               |
| ----------------- | ----------------------------------------------------- |
| `respondingCount` | How many units are on it                              |
| `respondingSelf`  | Whether the player you passed as `src` is one of them |
| `responding`      | `respondingCount > 0`                                 |

Pass a player's server id as the first argument to have `respondingSelf` resolved for them; pass `nil` and it is always `false`.

### The responder list

`GetResponders(id)` returns:

```lua
{
    { callId = 12, officerId = 'char1:abc...', name = 'Officer Reyes', primary = true,  respondedAt = '2026-08-25 21:04:30' },
    { callId = 12, officerId = 'char1:def...', name = 'Deputy Cole',   primary = false, respondedAt = '2026-08-25 21:05:02' },
}
```

Order is response order, so `[1]` is who has been on it longest - which is who inherits Primary when auto-promotion fires.

### Client-only field

The client adds `distance` to any call before it reaches the UI - a formatted string like `0.8 mi` or `1.3 km`, depending on `Config.Dispatch.distanceUnit`. It is never stored, because it is different for every officer.
