{
  "openapi": "3.0.1",
  "info": {
    "title": "Bluesky Scraper",
    "description": "Extract public Bluesky profiles, posts, search results, feeds, followers, and following through official AT Protocol APIs.",
    "version": "0.1",
    "x-build-id": "IiYknKxnPWR2pl7zb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/xcalibur~bluesky-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-xcalibur-bluesky-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/xcalibur~bluesky-scraper/runs": {
      "post": {
        "operationId": "runs-sync-xcalibur-bluesky-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/xcalibur~bluesky-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-xcalibur-bluesky-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "operation": {
            "title": "Operation",
            "enum": [
              "profile",
              "posts",
              "search",
              "feed",
              "connections"
            ],
            "type": "string",
            "description": "Choose which public Bluesky data to extract. The Actor never switches operations or infers intent from other fields.",
            "default": "profile"
          },
          "handle": {
            "title": "Bluesky handle or DID",
            "type": "string",
            "description": "Used by profile, posts, and connections only. A non-default handle conflicts with search or feed and is rejected. Runtime maximum: 253 characters.",
            "default": "bsky.app"
          },
          "query": {
            "title": "Search query",
            "type": "string",
            "description": "Required for search only. A non-empty query with another operation is rejected. Search requires Bluesky authentication. Runtime maximum: 512 characters."
          },
          "limit": {
            "title": "Maximum saved results",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum billable useful-result rows to save. Evaluation mode caps this at 100; Scale mode caps it at 10,000. A lower output is possible when the upstream result set ends, filters skip records, maxPages is reached, or the run charge limit is reached.",
            "default": 1
          },
          "maxPages": {
            "title": "Maximum API pages",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Hard request-safety cap. Evaluation mode caps this at 3 pages; Scale mode caps it at 100 pages.",
            "default": 3
          },
          "runMode": {
            "title": "Run scale",
            "enum": [
              "evaluation",
              "scale"
            ],
            "type": "string",
            "description": "Controls result and page safety caps only. Both modes are billed at the configured useful-result price for each saved useful row. Evaluation allows up to 100 useful results and 3 pages; Scale allows up to 10,000 useful results and 100 pages.",
            "default": "evaluation"
          },
          "cursor": {
            "title": "Resume cursor",
            "type": "string",
            "description": "Optional for posts, search, feed, and connections only. A cursor conflicts with profile and is rejected. Use a cursor from a previous run_summary.nextCursor. Page-level resumes can repeat already saved rows after a partial-page stop; check run_summary.resumeCursorStatus before resuming. Runtime maximum: 2,048 characters."
          },
          "since": {
            "title": "Since timestamp",
            "type": "string",
            "description": "Optional inclusive timestamp filter for posts, search, and feed only. It conflicts with profile or connections. Include date, time, and an explicit timezone, for example 2026-07-04T00:00:00Z. Runtime maximum: 64 characters."
          },
          "until": {
            "title": "Until timestamp",
            "type": "string",
            "description": "Optional inclusive timestamp filter for posts, search, and feed only. It conflicts with profile or connections. Include date, time, and an explicit timezone, for example 2026-07-05T00:00:00Z. Runtime maximum: 64 characters."
          },
          "feedAlias": {
            "title": "Feed alias",
            "enum": [
              "whats-hot"
            ],
            "type": "string",
            "description": "Used by feed only when feedUrl is not provided. The default What's Hot value is harmless for other operations; a non-default value is rejected outside feed or when feedUrl is also provided.",
            "default": "whats-hot"
          },
          "feedUrl": {
            "title": "Feed URL or AT URI",
            "type": "string",
            "description": "Optional for feed only. A non-empty feedUrl with another operation is rejected. Accepts an exact at:// feed generator URI or https://bsky.app/profile/<actor>/feed/<name> URL without query or fragment data. Runtime maximum: 2,048 characters."
          },
          "connectionType": {
            "title": "Connection type",
            "enum": [
              "followers",
              "following"
            ],
            "type": "string",
            "description": "Used by connections only. The default followers value is harmless for other operations; choosing following with another operation is rejected.",
            "default": "followers"
          },
          "includeReplies": {
            "title": "Include replies",
            "type": "boolean",
            "description": "Used by posts only. The default false value is harmless elsewhere; enabling it with another operation is rejected.",
            "default": false
          },
          "includeReposts": {
            "title": "Include reposts",
            "type": "boolean",
            "description": "Used by posts only. The default false value is harmless elsewhere; enabling it with another operation is rejected.",
            "default": false
          },
          "includeQuotes": {
            "title": "Include quote posts",
            "type": "boolean",
            "description": "Used by posts only. The default true value is harmless elsewhere; disabling it with another operation is rejected.",
            "default": true
          },
          "language": {
            "title": "Search language filter",
            "type": "string",
            "description": "Optional for search only, for example en, th, ja, or my. A non-empty language with another operation is rejected. Leave blank to avoid unintentionally filtering results. Runtime maximum: 35 characters."
          },
          "sort": {
            "title": "Search result order",
            "enum": [
              "latest",
              "top"
            ],
            "type": "string",
            "description": "Used by search only. latest requests the newest matching posts first. top requests Bluesky's relevance-ranked results; it is not guaranteed to mean the most-liked posts. The default latest value is harmless for other operations, while top with another operation is rejected.",
            "default": "latest"
          },
          "deduplicate": {
            "title": "Deduplicate within run",
            "type": "boolean",
            "description": "Skip duplicate records encountered during this run. Skipped duplicates are not billed.",
            "default": true
          },
          "blueskyIdentifier": {
            "title": "Bluesky identifier",
            "type": "string",
            "description": "Optional Bluesky handle or email for authenticated requests. Required for search and must be supplied together with blueskyAppPassword. This secret field is encrypted by Apify before the run input is stored and is decrypted only inside the Actor run. Runtime maximum: 253 characters."
          },
          "blueskyAppPassword": {
            "title": "Bluesky app password",
            "type": "string",
            "description": "Optional dedicated Bluesky app password; never use your main account password. Required for search and must be supplied together with blueskyIdentifier. Apify encrypts this secret field before storing run input; the Actor uses the decrypted value only in memory to authenticate with Bluesky and excludes it from datasets, statuses, and sanitized errors. Runtime maximum: 2,048 characters."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}