app.bsky.embed.getEmbedExternalView

bsky-lexicons.bsky.social

Schema Diff

+37 -8

From

CID
bafyreicnv2umobv...
Indexed At
2026-07-16 14:58 UTC
View this version

To

CID
bafyreicy4fjqex6...
Indexed At
2026-10-17 01:31 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 27 non-breaking changes.

Non-Breaking Changes (27)
  • AddedVertex AddedVertex { vertex_id: "app.bsky.embed.external#viewArticle" }
  • AddedVertex AddedVertex { vertex_id: "app.bsky.embed.external#viewArticlePublication" }
  • AddedVertex AddedVertex { vertex_id: "app.bsky.embed.external#viewGallery" }
  • AddedVertex AddedVertex { vertex_id: "app.bsky.embed.external#viewLivestream" }
  • AddedVertex AddedVertex { vertex_id: "app.bsky.embed.getEmbedExternalView:output.data" }
  • AddedVertex AddedVertex { vertex_id: "app.bsky.embed.getEmbedExternalView:output.data:variant0" }
  • AddedVertex AddedVertex { vertex_id: "app.bsky.embed.getEmbedExternalView:output.data:variant1" }
  • AddedVertex AddedVertex { vertex_id: "app.bsky.embed.getEmbedExternalView:output.data:variant2" }
  • AddedVertex AddedVertex { vertex_id: "app.bsky.embed.getEmbedExternalView:output.data:variant3" }
  • AddedVertex AddedVertex { vertex_id: "app.bsky.embed.getEmbedExternalView:output.unverifiedAssociatedRecords" }
  • AddedVertex AddedVertex { vertex_id: "app.bsky.embed.getEmbedExternalView:output.unverifiedAssociatedRecords:items" }
  • AddedVertex AddedVertex { vertex_id: "app.bsky.embed.getEmbedExternalView:output.unverifiedAssociatedRefs" }
  • AddedVertex AddedVertex { vertex_id: "app.bsky.embed.getEmbedExternalView:output.unverifiedAssociatedRefs:items" }
  • AddedEdge AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output", tgt: "app.bsky.embed.getEmbedExternalView:output.data", kind: "prop", name: Some("data") }
  • AddedEdge AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output", tgt: "app.bsky.embed.getEmbedExternalView:output.unverifiedAssociatedRecords", kind: "prop", name: Some("unverifiedAssociatedRecords") }
  • AddedEdge AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output", tgt: "app.bsky.embed.getEmbedExternalView:output.unverifiedAssociatedRefs", kind: "prop", name: Some("unverifiedAssociatedRefs") }
  • AddedEdge AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output.data", tgt: "app.bsky.embed.getEmbedExternalView:output.data:variant0", kind: "variant", name: Some("app.bsky.embed.external#viewArticle") }
  • AddedEdge AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output.data", tgt: "app.bsky.embed.getEmbedExternalView:output.data:variant1", kind: "variant", name: Some("app.bsky.embed.external#viewArticlePublication") }
  • AddedEdge AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output.data", tgt: "app.bsky.embed.getEmbedExternalView:output.data:variant2", kind: "variant", name: Some("app.bsky.embed.external#viewGallery") }
  • AddedEdge AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output.data", tgt: "app.bsky.embed.getEmbedExternalView:output.data:variant3", kind: "variant", name: Some("app.bsky.embed.external#viewLivestream") }
  • AddedEdge AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output.data:variant0", tgt: "app.bsky.embed.external#viewArticle", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output.data:variant1", tgt: "app.bsky.embed.external#viewArticlePublication", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output.data:variant2", tgt: "app.bsky.embed.external#viewGallery", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output.data:variant3", tgt: "app.bsky.embed.external#viewLivestream", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output.unverifiedAssociatedRecords", tgt: "app.bsky.embed.getEmbedExternalView:output.unverifiedAssociatedRecords:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output.unverifiedAssociatedRefs", tgt: "app.bsky.embed.getEmbedExternalView:output.unverifiedAssociatedRefs:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output.unverifiedAssociatedRefs:items", tgt: "com.atproto.repo.strongRef", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "app.bsky.embed.external#viewArticle" }
  • AddedVertex { vertex_id: "app.bsky.embed.external#viewArticlePublication" }
  • AddedVertex { vertex_id: "app.bsky.embed.external#viewGallery" }
  • AddedVertex { vertex_id: "app.bsky.embed.external#viewLivestream" }
  • AddedVertex { vertex_id: "app.bsky.embed.getEmbedExternalView:output.data" }
  • AddedVertex { vertex_id: "app.bsky.embed.getEmbedExternalView:output.data:variant0" }
  • AddedVertex { vertex_id: "app.bsky.embed.getEmbedExternalView:output.data:variant1" }
  • AddedVertex { vertex_id: "app.bsky.embed.getEmbedExternalView:output.data:variant2" }
  • AddedVertex { vertex_id: "app.bsky.embed.getEmbedExternalView:output.data:variant3" }
  • AddedVertex { vertex_id: "app.bsky.embed.getEmbedExternalView:output.unverifiedAssociatedRecords" }
  • AddedVertex { vertex_id: "app.bsky.embed.getEmbedExternalView:output.unverifiedAssociatedRecords:items" }
  • AddedVertex { vertex_id: "app.bsky.embed.getEmbedExternalView:output.unverifiedAssociatedRefs" }
  • AddedVertex { vertex_id: "app.bsky.embed.getEmbedExternalView:output.unverifiedAssociatedRefs:items" }

Additional Notes

  • Non-breaking: AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output", tgt: "app.bsky.embed.getEmbedExternalView:output.data", kind: "prop", name: Some("data") }
  • Non-breaking: AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output", tgt: "app.bsky.embed.getEmbedExternalView:output.unverifiedAssociatedRecords", kind: "prop", name: Some("unverifiedAssociatedRecords") }
  • Non-breaking: AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output", tgt: "app.bsky.embed.getEmbedExternalView:output.unverifiedAssociatedRefs", kind: "prop", name: Some("unverifiedAssociatedRefs") }
  • Non-breaking: AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output.data", tgt: "app.bsky.embed.getEmbedExternalView:output.data:variant0", kind: "variant", name: Some("app.bsky.embed.external#viewArticle") }
  • Non-breaking: AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output.data", tgt: "app.bsky.embed.getEmbedExternalView:output.data:variant1", kind: "variant", name: Some("app.bsky.embed.external#viewArticlePublication") }
  • Non-breaking: AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output.data", tgt: "app.bsky.embed.getEmbedExternalView:output.data:variant2", kind: "variant", name: Some("app.bsky.embed.external#viewGallery") }
  • Non-breaking: AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output.data", tgt: "app.bsky.embed.getEmbedExternalView:output.data:variant3", kind: "variant", name: Some("app.bsky.embed.external#viewLivestream") }
  • Non-breaking: AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output.data:variant0", tgt: "app.bsky.embed.external#viewArticle", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output.data:variant1", tgt: "app.bsky.embed.external#viewArticlePublication", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output.data:variant2", tgt: "app.bsky.embed.external#viewGallery", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output.data:variant3", tgt: "app.bsky.embed.external#viewLivestream", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output.unverifiedAssociatedRecords", tgt: "app.bsky.embed.getEmbedExternalView:output.unverifiedAssociatedRecords:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output.unverifiedAssociatedRefs", tgt: "app.bsky.embed.getEmbedExternalView:output.unverifiedAssociatedRefs:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "app.bsky.embed.getEmbedExternalView:output.unverifiedAssociatedRefs:items", tgt: "com.atproto.repo.strongRef", kind: "ref", name: None }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "main": {
5 -
      "description": "Resolve one or more AT-URIs into the data needed to render an enhanced external embed. Returns `associatedRefs` (strongRefs to embed into a post's external.associatedRefs), the raw `associatedRecords`, and a hydrated `view`. The response is empty (`{}`) when no records were resolvable, or when validation determined the resolved records don't actually back the requested URL; clients should fall back to their own link-card rendering in that case and skip writing strongRefs to the post.",
5 +
      "description": "Resolve one AT-URI record into the data needed to render an enhanced external embed. The records are validated against the requested `url` before any view is built. When validation passes, returns `data`, `associatedRefs` (strongRefs to embed into a post's external.associatedRefs) and the raw `associatedRecords`, plus a legacy `view` for Standard.site records only. When validation fails, only `unverifiedAssociatedRefs` and `unverifiedAssociatedRecords` are returned and no view or data is built. The response is empty (`{}`) when no record URI was usable or the record could not be resolved; clients should fall back to their own link-card rendering in that case and skip writing strongRefs to the post.",
6 6
      "output": {
7 7
        "encoding": "application/json",
8 8
        "schema": {
9 9
          "properties": {
10 10
            "associatedRecords": {
11 11
              "items": {
12 -
                "description": "The raw record data of the Atmosphere records that backed this view. This is returned for convenience, to avoid the need for the client to separately fetch the record data for the associatedRefs. Example: the site.standard.document and site.standard.publication records that backed this view.",
12 +
                "description": "The raw record data of the Atmosphere records selected for persistence, index-aligned with `associatedRefs`. Returned for convenience, to avoid the client separately fetching them. Present only when validation passed.",
13 13
                "type": "unknown"
14 14
              },
15 15
              "type": "array"
16 16
            },
17 17
            "associatedRefs": {
18 -
              "description": "StrongRefs (URI+CID) of the Atmosphere records that backed this view, suitable for embedding into a post's external.associatedRefs.",
18 +
              "description": "StrongRefs (URI+CID) of the Atmosphere records selected for persistence in a post, suitable for embedding into its external.associatedRefs: the canonical record, plus only the additional records the service chooses to persist for its collection. This can be a subset of the records used to render `data`, which may also draw on other hydrated records such as recommendations, subscriptions, or favorites. Present only when validation passed. Index-aligned with `associatedRecords`.",
19 19
              "items": {
20 20
                "ref": "com.atproto.repo.strongRef",
21 21
                "type": "ref"
22 22
              },
23 23
              "type": "array"
24 24
            },
25 +
            "data": {
26 +
              "description": "Preferred to #view. Hydrated data of the embed. Present only when validation passed and the records supply enough information to populate the required fields.",
27 +
              "refs": [
28 +
                "app.bsky.embed.external#viewArticle",
29 +
                "app.bsky.embed.external#viewArticlePublication",
30 +
                "app.bsky.embed.external#viewGallery",
31 +
                "app.bsky.embed.external#viewLivestream"
32 +
              ],
33 +
              "type": "union"
34 +
            },
35 +
            "unverifiedAssociatedRecords": {
36 +
              "items": {
37 +
                "description": "The raw record data of the persistence-selected Atmosphere records, index-aligned with `unverifiedAssociatedRefs`. Present only when validation failed.",
38 +
                "type": "unknown"
39 +
              },
40 +
              "type": "array"
41 +
            },
42 +
            "unverifiedAssociatedRefs": {
43 +
              "description": "StrongRefs (URI+CID) of the same persistence-selected Atmosphere records (the canonical record plus chosen additional records) when validation of the requested `url` failed. These must not be written to a post. Index-aligned with `unverifiedAssociatedRecords`.",
44 +
              "items": {
45 +
                "ref": "com.atproto.repo.strongRef",
46 +
                "type": "ref"
47 +
              },
48 +
              "type": "array"
49 +
            },
25 50
            "view": {
26 -
              "description": "Hydrated view of the embed. Present only when the resolved records back the requested URL and supply enough information to populate the required `viewExternal` fields. Omitted alongside the rest of the response when no records resolved or validation failed.",
51 +
              "description": "Legacy hydrated view of the embed, returned for Standard.site records only. Present only when validation passed and the records supply enough information to populate the required `viewExternal` fields.",
27 52
              "ref": "app.bsky.embed.external#view",
28 53
              "type": "ref"
29 54
            }
30 55
          },
31 56
          "type": "object"
32 57
        }
33 58
      },
34 59
      "parameters": {
35 60
        "properties": {
61 +
          "canonicalUri": {
62 +
            "description": "The canonical AT URI of the atproto record found on the webpage. When provided, takes precedence over `uris`, which is then ignored.",
63 +
            "format": "at-uri",
64 +
            "type": "string"
65 +
          },
36 66
          "uris": {
37 -
            "description": "AT-URIs of any Atmosphere records that can be resolved and used to construct #externalView views. Example: a site.standard.document and optionally its associated site.standard.publication.",
67 +
            "description": "Legacy input for Standard.site callers, ignored when `canonicalUri` is provided. A single record is selected from it: the first site.standard.document URI, otherwise the first site.standard.publication URI. Other entries are ignored; a document's publication is discovered from the document itself.",
38 68
            "items": {
39 69
              "format": "at-uri",
40 70
              "type": "string"
41 71
            },
42 72
            "maxLength": 4,
43 73
            "type": "array"
44 74
          },
45 75
          "url": {
46 -
            "description": "The canonical web URL the embed represents (typically the URL the user pasted into the composer). Used as the returned view's `uri`. May be used for validation in the future.",
76 +
            "description": "The canonical web URL the embed represents (typically the URL the user pasted into the composer). Used as the returned view's `uri`, and validated against the resolved records.",
47 77
            "format": "uri",
48 78
            "type": "string"
49 79
          }
50 80
        },
51 81
        "required": [
52 -
          "url",
53 -
          "uris"
82 +
          "url"
54 83
        ],
55 84
        "type": "params"
56 85
      },
57 86
      "type": "query"
58 87
    }
59 88
  },
60 89
  "id": "app.bsky.embed.getEmbedExternalView",
61 90
  "lexicon": 1
62 91
}

Compare Other Versions

Lexicon Garden

@