···881881882882**Returns:**
883883884884-- `blob`: A JSON blob object containing:
885885- - `ref`: The CID (content identifier) reference for the blob
886886- - `mimeType`: The MIME type of the uploaded blob
887887- - `size`: The size of the blob in bytes
884884+- `blob`: A Blob object containing:
885885+ - `ref` (String): The CID (content identifier) reference for the blob
886886+ - `mimeType` (String): The MIME type of the uploaded blob
887887+ - `size` (Int): The size of the blob in bytes
888888+ - `url` (String): CDN URL for the blob (supports presets)
888889889890**Example with Variables:**
890891···897898898899**Usage in Records:**
899900900900-After uploading a blob, use the returned blob object in your record mutations:
901901+After uploading a blob, use the returned blob object in your record mutations. You can provide the blob as a complete object with `ref` as a String:
901902902903```graphql
903904mutation UpdateProfile($avatar: JSON) {
···905906 rkey: "self"
906907 input: {
907908 displayName: "My Name"
908908- avatar: $avatar # Use the blob object from uploadBlob
909909+ avatar: $avatar # Blob object with ref as String (CID)
909910 }
910911 ) {
911912 uri
912913 displayName
913914 avatar {
914914- ref
915915+ ref # Returns as String (CID)
915916 mimeType
916917 size
917918 url(preset: "avatar")
···919920 }
920921}
921922```
923923+924924+**Example blob object for mutations:**
925925+926926+```json
927927+{
928928+ "ref": "bafyreigbtj4x7ip5legnfznufuopl4sg4knzc2cof6duas4b3q2fy6swua",
929929+ "mimeType": "image/jpeg",
930930+ "size": 245678
931931+}
932932+```
933933+934934+**Note:** The GraphQL API automatically handles the conversion between the GraphQL format (where `ref` is a String containing the CID) and the AT Protocol format (where `ref` is an object `{$link: "cid"}`). You always work with `ref` as a simple String in GraphQL queries and mutations.
922935923936### Create Records
924937