# blue.moji.embed.sticker

> Published by [moji.blue](https://lexicon.garden/identity/did:plc:kmzpsik7s5y5fwu7nnkngfx4)

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:kmzpsik7s5y5fwu7nnkngfx4/blue.moji.embed.sticker)
- [Documentation](https://lexicon.garden/lexicon/did:plc:kmzpsik7s5y5fwu7nnkngfx4/blue.moji.embed.sticker/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:kmzpsik7s5y5fwu7nnkngfx4/blue.moji.embed.sticker/examples)

## Definitions

### `blue.moji.embed.sticker`

**Type**: `object`

A full-sized Bluemoji sticker attached to a post as media, in the style of app.bsky.embed.external. References a blue.moji.collection.item record in the sticker owner's repo.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `sticker` | `ref` → `#sticker` | Yes |  |

### `blue.moji.embed.sticker#view`

**Type**: `object`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `sticker` | `ref` → `#viewSticker` | Yes |  |

### `blue.moji.embed.sticker#sticker`

**Type**: `object`

SECURITY: did/name/formats are self-attested by the posting client, like blue.moji.richtext.facet. Verify against the record strongRef (or by re-deriving the rkey from name and looking up did's blue.moji.collection.item) before rendering an image, if the render surface matters for trust.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `alt` | `string` | No | Alt text description of the sticker, for accessibility. |
| `did` | `string` (did) | Yes | DID of the repo that owns the sticker record. Combined with the format CIDs to construct blob/CDN URLs without a getRecord round-trip, mirroring blue.moji.richtext.facet. Self-attested; see security note on this object. |
| `name` | `string` | Yes | Colon-wrapped alias of the source Bluemoji (e.g. :blobcat:). Implementers should use this as fallback text when assets are unavailable. |
| `record` | `ref` → `com.atproto.repo.strongRef` | No | Strong reference to the source blue.moji.collection.item record. Use this as the verification anchor: resolve it and compare formats before trusting this embed's claims. |
| `formats` | `union` | Yes | CIDs of the full-size sticker renditions. Open union to allow future formats. |
| `aspectRatio` | `ref` → `app.bsky.embed.defs#aspectRatio` | No |  |

### `blue.moji.embed.sticker#formats_v0`

**Type**: `object`

CIDs of the full-size (512px-class) blobs stored in the sticker owner's repo under blue.moji.collection.item stickerFormats. CID-only, like blue.moji.richtext.facet#formats_v1, because blobs cannot be referenced across repos.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `lottie` | `string` (cid) | No |  |
| `gif_512` | `string` (cid) | No |  |
| `png_512` | `string` (cid) | No |  |
| `apng_512` | `string` (cid) | No |  |
| `webp_512` | `string` (cid) | No |  |

### `blue.moji.embed.sticker#viewSticker`

**Type**: `object`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `alt` | `string` | No |  |
| `name` | `string` | Yes |  |
| `thumb` | `string` (uri) | No | URL of the 128px inline-emoji rendition, if available. |
| `labels` | `array` | No | AppViews producing this view MUST populate labels (and reflect the source item's adultOnly) from the verified blue.moji.collection.item record, not from the embed's own self-attested fields — see the security note on #sticker. Consumers SHOULD warn or blur before rendering fullsize/thumb when present. |
| `record` | `ref` → `com.atproto.repo.strongRef` | No |  |
| `fullsize` | `string` (uri) | Yes | Fully-qualified URL of the full-size sticker asset. |
| `aspectRatio` | `ref` → `app.bsky.embed.defs#aspectRatio` | No |  |

## Raw Schema

```json
{
  "id": "blue.moji.embed.sticker",
  "defs": {
    "main": {
      "type": "object",
      "required": [
        "sticker"
      ],
      "properties": {
        "sticker": {
          "ref": "#sticker",
          "type": "ref"
        }
      },
      "description": "A full-sized Bluemoji sticker attached to a post as media, in the style of app.bsky.embed.external. References a blue.moji.collection.item record in the sticker owner's repo."
    },
    "view": {
      "type": "object",
      "required": [
        "sticker"
      ],
      "properties": {
        "sticker": {
          "ref": "#viewSticker",
          "type": "ref"
        }
      }
    },
    "sticker": {
      "type": "object",
      "required": [
        "did",
        "name",
        "formats"
      ],
      "properties": {
        "alt": {
          "type": "string",
          "description": "Alt text description of the sticker, for accessibility."
        },
        "did": {
          "type": "string",
          "format": "did",
          "description": "DID of the repo that owns the sticker record. Combined with the format CIDs to construct blob/CDN URLs without a getRecord round-trip, mirroring blue.moji.richtext.facet. Self-attested; see security note on this object."
        },
        "name": {
          "type": "string",
          "description": "Colon-wrapped alias of the source Bluemoji (e.g. :blobcat:). Implementers should use this as fallback text when assets are unavailable."
        },
        "record": {
          "ref": "com.atproto.repo.strongRef",
          "type": "ref",
          "description": "Strong reference to the source blue.moji.collection.item record. Use this as the verification anchor: resolve it and compare formats before trusting this embed's claims."
        },
        "formats": {
          "refs": [
            "#formats_v0"
          ],
          "type": "union",
          "closed": false,
          "description": "CIDs of the full-size sticker renditions. Open union to allow future formats."
        },
        "aspectRatio": {
          "ref": "app.bsky.embed.defs#aspectRatio",
          "type": "ref"
        }
      },
      "description": "SECURITY: did/name/formats are self-attested by the posting client, like blue.moji.richtext.facet. Verify against the record strongRef (or by re-deriving the rkey from name and looking up did's blue.moji.collection.item) before rendering an image, if the render surface matters for trust."
    },
    "formats_v0": {
      "type": "object",
      "properties": {
        "lottie": {
          "type": "string",
          "format": "cid"
        },
        "gif_512": {
          "type": "string",
          "format": "cid"
        },
        "png_512": {
          "type": "string",
          "format": "cid"
        },
        "apng_512": {
          "type": "string",
          "format": "cid"
        },
        "webp_512": {
          "type": "string",
          "format": "cid"
        }
      },
      "description": "CIDs of the full-size (512px-class) blobs stored in the sticker owner's repo under blue.moji.collection.item stickerFormats. CID-only, like blue.moji.richtext.facet#formats_v1, because blobs cannot be referenced across repos."
    },
    "viewSticker": {
      "type": "object",
      "required": [
        "fullsize",
        "name"
      ],
      "properties": {
        "alt": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "thumb": {
          "type": "string",
          "format": "uri",
          "description": "URL of the 128px inline-emoji rendition, if available."
        },
        "labels": {
          "type": "array",
          "items": {
            "ref": "com.atproto.label.defs#label",
            "type": "ref"
          },
          "description": "AppViews producing this view MUST populate labels (and reflect the source item's adultOnly) from the verified blue.moji.collection.item record, not from the embed's own self-attested fields — see the security note on #sticker. Consumers SHOULD warn or blur before rendering fullsize/thumb when present."
        },
        "record": {
          "ref": "com.atproto.repo.strongRef",
          "type": "ref"
        },
        "fullsize": {
          "type": "string",
          "format": "uri",
          "description": "Fully-qualified URL of the full-size sticker asset."
        },
        "aspectRatio": {
          "ref": "app.bsky.embed.defs#aspectRatio",
          "type": "ref"
        }
      }
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1
}
```
