social.craftsky.feed.post

craftsky.social

Documentation

A post on Craftsky. May be a general post or a craft project post; when the optional 'project' field is present the post is a project post. The optional open embed union supports quoted records, standard external cards, and standard video.

main record

A post on Craftsky. May be a general post or a craft project post; when the optional 'project' field is present the post is a project post. The optional open embed union supports quoted records, standard external cards, and standard video.

Record Key tid Timestamp-based ID

Properties

createdAt string datetime Required

Client-declared creation timestamp.

externalImport ref #externalImport Optional

Optional self-asserted provenance for content created by an external-history importer. This metadata does not verify ownership of an external account or grant trust.

facets array of ref app.bsky.richtext.facet Optional

Byte-range annotations over 'text' for mentions, links, and inline hashtags. Reuses app.bsky.richtext.facet so existing renderers Just Work. Inline hashtag facets are composer-merged into project.common.tags on project posts; see the post lexicon fields spec.

images array of ref #image Optional

Images attached to the post. Top-level (not inside 'embed') — a post may carry images alongside a quote embed without needing a wrapper variant.

maxLength: 4 items
langs array of string language Optional

Indicates human language of post primary text content.

maxLength: 3 items
reply ref #replyRef Optional

If present, this post is a reply to another post.

sponsored boolean Required

Whether the author declares that this post was created with sponsorship or other commercial consideration. Disclosure metadata only; it does not affect distribution.

text string Required

The primary text content of the post. Plain text; rich-text annotations live in 'facets'. Craftsky allows longer posts than Bluesky (2000 graphemes vs 300) because crafters write fuller project write-ups.

maxLength: 20000 bytesmaxGraphemes: 2000 graphemes
View raw schema
{
  "description": "A post on Craftsky. May be a general post or a craft project post; when the optional 'project' field is present the post is a project post. The optional open embed union supports quoted records, standard external cards, and standard video.",
  "key": "tid",
  "record": {
    "properties": {
      "createdAt": {
        "description": "Client-declared creation timestamp.",
        "format": "datetime",
        "type": "string"
      },
      "embed": {
        "description": "Optional embedded content. Open union supporting local quote embeds, standard external cards, and standard video.",
        "refs": [
          "#quoteEmbed",
          "app.bsky.embed.external",
          "app.bsky.embed.video"
        ],
        "type": "union"
      },
      "externalImport": {
        "description": "Optional self-asserted provenance for content created by an external-history importer. This metadata does not verify ownership of an external account or grant trust.",
        "ref": "#externalImport",
        "type": "ref"
      },
      "facets": {
        "description": "Byte-range annotations over 'text' for mentions, links, and inline hashtags. Reuses app.bsky.richtext.facet so existing renderers Just Work. Inline hashtag facets are composer-merged into project.common.tags on project posts; see the post lexicon fields spec.",
        "items": {
          "ref": "app.bsky.richtext.facet",
          "type": "ref"
        },
        "type": "array"
      },
      "images": {
        "description": "Images attached to the post. Top-level (not inside 'embed') — a post may carry images alongside a quote embed without needing a wrapper variant.",
        "items": {
          "ref": "#image",
          "type": "ref"
        },
        "maxLength": 4,
        "type": "array"
      },
      "langs": {
        "description": "Indicates human language of post primary text content.",
        "items": {
          "format": "language",
          "type": "string"
        },
        "maxLength": 3,
        "type": "array"
      },
      "project": {
        "description": "If present, this post is a craft project post. Absence means it's a general social post.",
        "ref": "social.craftsky.project.defs#project",
        "type": "ref"
      },
      "reply": {
        "description": "If present, this post is a reply to another post.",
        "ref": "#replyRef",
        "type": "ref"
      },
      "sponsored": {
        "description": "Whether the author declares that this post was created with sponsorship or other commercial consideration. Disclosure metadata only; it does not affect distribution.",
        "type": "boolean"
      },
      "text": {
        "description": "The primary text content of the post. Plain text; rich-text annotations live in 'facets'. Craftsky allows longer posts than Bluesky (2000 graphemes vs 300) because crafters write fuller project write-ups.",
        "maxGraphemes": 2000,
        "maxLength": 20000,
        "type": "string"
      }
    },
    "required": [
      "text",
      "sponsored",
      "createdAt"
    ],
    "type": "object"
  },
  "type": "record"
}
aspectRatio object

Image aspect ratio metadata used for layout/render hints.

Properties

height integer Required

No description available.

minimum: 1
width integer Required

No description available.

minimum: 1
View raw schema
{
  "description": "Image aspect ratio metadata used for layout/render hints.",
  "properties": {
    "height": {
      "minimum": 1,
      "type": "integer"
    },
    "width": {
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "width",
    "height"
  ],
  "type": "object"
}
externalImport object

Minimal self-asserted external-import provenance. It is display and distribution metadata only and does not verify ownership of an external account.

Properties

source string Required

Self-asserted source service token. The value does not verify account ownership; clients should apply source-specific behavior only to values they recognize.

maxLength: 64 bytes
Known values: instagram
View raw schema
{
  "description": "Minimal self-asserted external-import provenance. It is display and distribution metadata only and does not verify ownership of an external account.",
  "properties": {
    "source": {
      "description": "Self-asserted source service token. The value does not verify account ownership; clients should apply source-specific behavior only to values they recognize.",
      "knownValues": [
        "instagram"
      ],
      "maxLength": 64,
      "type": "string"
    }
  },
  "required": [
    "source"
  ],
  "type": "object"
}
image object

An image blob with optional alt text.

Properties

alt string Optional

Optional alt text describing the image for accessibility.

maxLength: 1000 bytesmaxGraphemes: 1000 graphemes
aspectRatio ref #aspectRatio Optional

Optional aspect ratio metadata for rendering.

image blob Required

No description available.

maxSize: 2.0 MB
View raw schema
{
  "description": "An image blob with optional alt text.",
  "properties": {
    "alt": {
      "description": "Optional alt text describing the image for accessibility.",
      "maxGraphemes": 1000,
      "maxLength": 1000,
      "type": "string"
    },
    "aspectRatio": {
      "description": "Optional aspect ratio metadata for rendering.",
      "ref": "#aspectRatio",
      "type": "ref"
    },
    "image": {
      "accept": [
        "image/jpeg",
        "image/png",
        "image/webp"
      ],
      "maxSize": 2000000,
      "type": "blob"
    }
  },
  "required": [
    "image"
  ],
  "type": "object"
}
quoteEmbed object

Embed wrapping another record (typically a social.craftsky.feed.post) for a quote post.

Properties

View raw schema
{
  "description": "Embed wrapping another record (typically a social.craftsky.feed.post) for a quote post.",
  "properties": {
    "record": {
      "description": "Strong reference to the quoted record.",
      "ref": "com.atproto.repo.strongRef",
      "type": "ref"
    }
  },
  "required": [
    "record"
  ],
  "type": "object"
}
replyRef object

Reference to the parent and root posts of a thread.

Properties

View raw schema
{
  "description": "Reference to the parent and root posts of a thread.",
  "properties": {
    "parent": {
      "description": "The immediate parent post being replied to.",
      "ref": "com.atproto.repo.strongRef",
      "type": "ref"
    },
    "root": {
      "description": "The root post of the thread.",
      "ref": "com.atproto.repo.strongRef",
      "type": "ref"
    }
  },
  "required": [
    "root",
    "parent"
  ],
  "type": "object"
}

Lexicon Garden

@