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

# SummerMatchmakingProposal

> Opaque handle for one pending matchmaking proposal that requires an explicit decision.

**Class:** `SummerMatchmakingProposal` · **Inherits:** RefCounted

Opaque handle for one pending matchmaking proposal that requires an explicit decision.

Every matchmaking proposal requires an explicit creator decision; the engine never accepts on the game's behalf. The handle arrives through [`SummerJoinOperation.acceptance_required`](/api-reference/gdscript/types/join-operation#acceptance_required) and is also readable as [`SummerJoinOperation.pending_proposal`](/api-reference/gdscript/types/join-operation#pending_proposal) while a decision is awaited.
The handle is deliberately opaque: it exposes only safe metadata and carries no proposal identifier, version, ticket, credential, carrier, endpoint, or platform route. The private concurrency identity stays inside the trusted runtime and is fenced per proposal, so a delayed decision made for an earlier proposal can never act on a later one — it fails with `proposal_stale` instead.
Exactly one decision is allowed. Repeating the same decision is idempotent and returns the original outcome; the opposite decision fails with `proposal_already_decided`. After the proposal expires, is superseded, or the matchmaking operation ends, both methods fail with `proposal_stale` without side effects. A proposal that reaches its deadline with no decision from every player ends the matchmaking operation with `proposal_expired`.
Games that want automatic behavior connect [`SummerJoinOperation.acceptance_required`](/api-reference/gdscript/types/join-operation#acceptance_required) directly to [`accept()`](/api-reference/gdscript/types/matchmaking-proposal#accept).

## Properties

| Property | Type | Access | Description |
| - | - | - | - |
| <a id="accept_by_unix_msec" />`accept_by_unix_msec` | int | read-only, `get_accept_by_unix_msec()` | Trusted decision deadline in Unix milliseconds, or `0` when the Player Host did not provide one. A proposal that reaches its deadline without a decision expires and the matchmaking operation ends typed with `proposal_expired`. |
| <a id="placement_kind" />`placement_kind` | StringName | read-only, `get_placement_kind()` | Safe placement descriptor provided by the Player Host, or empty. |
| <a id="queue" />`queue` | StringName | read-only, `get_queue()` | The matchmaking queue this proposal belongs to. |

## Methods

### accept

```gdscript theme={null}
func accept() -> SummerResult
```

Submits the explicit accept decision for this proposal through the trusted Player Host. On success the parent [`SummerJoinOperation`](/api-reference/gdscript/types/join-operation) stays pending and continues into allocation and admission only after every proposed player accepted. Fails typed with `proposal_stale` or `proposal_already_decided`; a failed call performs no submission.

**Returns:** [`SummerResult`](/api-reference/gdscript/types/result)

### decline

```gdscript theme={null}
func decline() -> SummerResult
```

Submits the explicit decline decision for this proposal through the trusted Player Host. The parent [`SummerJoinOperation`](/api-reference/gdscript/types/join-operation) then terminates cleanly with the typed code `proposal_declined`; no allocation happens and a later [`Summer.client.join()`](/api-reference/gdscript/client#join) starts a fresh search. Fails typed with `proposal_stale` or `proposal_already_decided`; a failed call performs no submission.

**Returns:** [`SummerResult`](/api-reference/gdscript/types/result)

### is\_decided

```gdscript theme={null}
func is_decided() -> bool const
```

Returns `true` once a decision was successfully submitted through this handle.

**Returns:** bool

***

What is live on the platform today: [platform capability status](/knowledge-base/source-status). Check availability at runtime before you offer a feature.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.