# social.smallbury.graph.invite

> Published by [lexicon.pds.smallbury.social](https://lexicon.garden/identity/did:plc:wnagcp6h73nxmvmwid2xxukx)

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:wnagcp6h73nxmvmwid2xxukx/social.smallbury.graph.invite)
- [Documentation](https://lexicon.garden/lexicon/did:plc:wnagcp6h73nxmvmwid2xxukx/social.smallbury.graph.invite/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:wnagcp6h73nxmvmwid2xxukx/social.smallbury.graph.invite/examples)

## Definitions

### `social.smallbury.graph.invite`

**Type**: `record`

Trust invitation from this actor to a contact. The invite URL carries a signed token bound to inviteId; acceptance must match intendedRecipientEncryptionPublicKey when set. Revocable by the inviter.

**Key**: `tid`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `status` | `string` | Yes | Lifecycle state. pending until accepted or revoked/expired. |
| `inviteId` | `string` | Yes | Stable id for this invite; echoed in the signed invite token. |
| `createdAt` | `string` (datetime) | Yes |  |
| `expiresAt` | `string` (datetime) | No | Optional expiry; client should treat as expired after this time. |
| `revokedAt` | `string` (datetime) | No |  |
| `targetHint` | `string` | No | Optional human hint (e.g. email) for the inviter's UI; not used for cryptography. |
| `acceptedByDid` | `string` (did) | No | Set when status becomes accepted. |
| `intendedRecipientEncryptionPublicKey` | `bytes` | No | When set, only a party that proves possession of the matching private key can complete acceptance. Set for existing users at invite time; set by the new user on signup before accept completes. |

## Raw Schema

```json
{
  "id": "social.smallbury.graph.invite",
  "defs": {
    "main": {
      "key": "tid",
      "type": "record",
      "record": {
        "type": "object",
        "required": [
          "inviteId",
          "status",
          "createdAt"
        ],
        "properties": {
          "status": {
            "type": "string",
            "description": "Lifecycle state. pending until accepted or revoked/expired.",
            "knownValues": [
              "pending",
              "accepted",
              "revoked",
              "expired"
            ]
          },
          "inviteId": {
            "type": "string",
            "maxLength": 128,
            "minLength": 1,
            "description": "Stable id for this invite; echoed in the signed invite token."
          },
          "createdAt": {
            "type": "string",
            "format": "datetime"
          },
          "expiresAt": {
            "type": "string",
            "format": "datetime",
            "description": "Optional expiry; client should treat as expired after this time."
          },
          "revokedAt": {
            "type": "string",
            "format": "datetime"
          },
          "targetHint": {
            "type": "string",
            "maxLength": 256,
            "description": "Optional human hint (e.g. email) for the inviter's UI; not used for cryptography."
          },
          "acceptedByDid": {
            "type": "string",
            "format": "did",
            "description": "Set when status becomes accepted."
          },
          "intendedRecipientEncryptionPublicKey": {
            "type": "bytes",
            "maxLength": 256,
            "description": "When set, only a party that proves possession of the matching private key can complete acceptance. Set for existing users at invite time; set by the new user on signup before accept completes."
          }
        }
      },
      "description": "Trust invitation from this actor to a contact. The invite URL carries a signed token bound to inviteId; acceptance must match intendedRecipientEncryptionPublicKey when set. Revocable by the inviter."
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1
}
```
