{
  "openapi": "3.0.1",
  "info": {
    "title": "GitHub Issues, PRs, Discussions & Releases Exporter",
    "description": "Export or monitor issues, pull requests, discussions and releases from public GitHub repos as clean records or Markdown notes. Watch mode returns only new and updated items since the last run, with only new comments. Label/state/date filters, token support. Pay per item.",
    "version": "0.2",
    "x-build-id": "4eUKC9rPMqvIFj4Ql"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/vellumlabs~github-issues-exporter/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-vellumlabs-github-issues-exporter",
        "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/vellumlabs~github-issues-exporter/runs": {
      "post": {
        "operationId": "runs-sync-vellumlabs-github-issues-exporter",
        "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/vellumlabs~github-issues-exporter/run-sync": {
      "post": {
        "operationId": "run-sync-vellumlabs-github-issues-exporter",
        "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",
        "required": [
          "repos"
        ],
        "properties": {
          "repos": {
            "title": "Repositories",
            "type": "array",
            "description": "Public repositories as `owner/name` or GitHub URLs (`https://github.com/apify/apify-sdk-js`).",
            "items": {
              "type": "string"
            }
          },
          "types": {
            "title": "What to export",
            "uniqueItems": true,
            "type": "array",
            "description": "Item types to export from each repository.",
            "items": {
              "type": "string",
              "enum": [
                "issues",
                "pulls",
                "discussions",
                "releases"
              ],
              "enumTitles": [
                "Issues",
                "Pull requests",
                "Discussions",
                "Releases"
              ]
            },
            "default": [
              "issues",
              "pulls",
              "discussions",
              "releases"
            ]
          },
          "state": {
            "title": "State",
            "enum": [
              "all",
              "open",
              "closed"
            ],
            "type": "string",
            "description": "Filter issues, pull requests and discussions by state. Releases are not affected.",
            "default": "all"
          },
          "labels": {
            "title": "Labels",
            "type": "array",
            "description": "Keep only items that carry **all** of these labels (exact names, e.g. `bug`). Not applied to releases.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "sinceDays": {
            "title": "Updated in the last N days",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Only items updated (releases: published) within the last N days. `0` = no time limit.",
            "default": 0
          },
          "maxItems": {
            "title": "Max items per type and repository",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Cap per repository **and** per type (e.g. 20 issues + 20 pulls + 20 releases). Each exported item is one `item-exported` billing event.",
            "default": 200
          },
          "includeComments": {
            "title": "Include comments",
            "type": "boolean",
            "description": "Fetch comments for issues, pull requests and discussions (one extra API request per item that has comments; discussions with a token fetch them inline). Each stored comment is one `comment-exported` billing event. The sample input leaves this off so it fits the unauthenticated quota; turn it on together with a token.",
            "default": true
          },
          "maxCommentsPerItem": {
            "title": "Max comments per item",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Cap on stored comments per item (oldest first).",
            "default": 50
          },
          "githubToken": {
            "title": "GitHub token (optional)",
            "type": "string",
            "description": "Personal access token (classic or fine-grained, no scopes needed for public data). Raises the API limit from 60 to 5,000 requests per hour and enables the documented GraphQL Discussions API. Stored encrypted."
          },
          "waitForRateLimitReset": {
            "title": "Wait for rate-limit reset instead of stopping",
            "type": "boolean",
            "description": "When the GitHub rate limit is exhausted, sleep until it resets (up to 60 minutes) and continue, instead of finishing with partial results.",
            "default": false
          },
          "outputFormat": {
            "title": "Output format",
            "enum": [
              "records",
              "wiki-notes"
            ],
            "type": "string",
            "description": "`records` = one JSON record per item in the dataset. `wiki-notes` = the same records **plus** one Markdown file per item (YAML front matter: type, title, status, updated, source URL) and an `INDEX.md` in the key-value store, shaped like LLM-wiki source pages.",
            "default": "records"
          },
          "stateKey": {
            "title": "Watch mode: state key (only new or updated items since the last run)",
            "type": "string",
            "description": "Name of a key-value store that remembers what earlier runs exported, e.g. `apify-sdk-watch`. With a state key, the **first run is a baseline** (exports as usual: the newest `maxItems` per type, or everything updated in the last `sinceDays`), and **every later run returns and bills only items that are new or were updated since the previous run** (new comment, label, state change, edit; releases: newly published). An updated issue, PR or discussion carries only the comments added or edited since its previous export. Leave empty for a normal one-off export. Use a different key per schedule / per filter set.",
            "default": ""
          },
          "watchChanges": {
            "title": "Watch mode: which changes",
            "enum": [
              "new-and-updated",
              "new-only"
            ],
            "type": "string",
            "description": "`new-and-updated` (default) re-exports an item each time it changes. `new-only` exports each item once, the first time it appears (a feed of new issues, PRs, discussions and releases). Ignored without a state key.",
            "default": "new-and-updated"
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}