{
  "openapi": "3.0.1",
  "info": {
    "title": "Duolingo Scraper",
    "description": "Get public Duolingo language courses, learner profiles, weekly league standings, and vocabulary as structured rows. Pick a result type, enter your targets, and run it. No Duolingo sign-in needed.",
    "version": "0.0",
    "x-build-id": "h0KVcGQnV1dadNhGd"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/maximedupre~duolingo/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-maximedupre-duolingo",
        "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/maximedupre~duolingo/runs": {
      "post": {
        "operationId": "runs-sync-maximedupre-duolingo",
        "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/maximedupre~duolingo/run-sync": {
      "post": {
        "operationId": "run-sync-maximedupre-duolingo",
        "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": [
          "resultType"
        ],
        "properties": {
          "resultType": {
            "title": "Result type",
            "enum": [
              "courses",
              "profiles",
              "leagues",
              "vocabulary"
            ],
            "type": "string",
            "description": "Choose one result type for this run. Fields in another result type's options section are ignored."
          },
          "courseNameOrCode": {
            "title": "Course name or code",
            "type": "string",
            "description": "For Courses, enter a course name or code to narrow the results."
          },
          "minLearners": {
            "title": "Minimum learners",
            "minimum": 0,
            "type": "integer",
            "description": "For Courses, keep courses with at least this many learners."
          },
          "courseSort": {
            "title": "Course order",
            "enum": [
              "popularity",
              "languageName"
            ],
            "type": "string",
            "description": "For Courses, choose how to order the results.",
            "default": "popularity"
          },
          "findProfilesBy": {
            "title": "Find profiles by",
            "enum": [
              "usernames",
              "profileLinks"
            ],
            "type": "string",
            "description": "For Learner profiles, choose what you will enter in Learners: usernames or profile links. Other result types ignore this field.",
            "default": "usernames"
          },
          "minXp": {
            "title": "Minimum XP",
            "minimum": 0,
            "type": "integer",
            "description": "For Learner profiles, keep learners with at least this much total XP."
          },
          "minStreak": {
            "title": "Minimum streak",
            "minimum": 0,
            "type": "integer",
            "description": "For Learner profiles, keep learners with a current streak of at least this many days."
          },
          "subscription": {
            "title": "Super status",
            "enum": [
              "super",
              "notSuper"
            ],
            "type": "string",
            "description": "For Learner profiles, choose a public Super status. Leave blank to include either status."
          },
          "learners": {
            "title": "Learners",
            "type": "array",
            "description": "Required for Learner profiles and Learner league summaries. For profiles, enter one or more values in the format you picked in Find profiles by. For league summaries, enter usernames only. Use one kind of value per run. Profile links can use a username or a numeric user ID.",
            "items": {
              "type": "string"
            }
          },
          "sourceLanguage": {
            "title": "Source language code",
            "type": "string",
            "description": "For Courses, filter by the language used to teach the course. Required for Vocabulary. For example, en means English."
          },
          "learningLanguage": {
            "title": "Learning language code",
            "type": "string",
            "description": "For Courses, filter by the language being learned. For Learner profiles, filter by their learning language. Required for Vocabulary. For example, es means Spanish."
          },
          "changeOutput": {
            "title": "Return unchanged records",
            "enum": [
              "changes",
              "all"
            ],
            "type": "string",
            "description": "Change tracking runs automatically. Choose whether results include records that are unchanged from saved history. A record counts as missing only after a full successful scan.",
            "default": "changes"
          },
          "monitoringCampaign": {
            "title": "Monitoring campaign",
            "type": "string",
            "description": "Leave blank to keep history separate for this lookup. Use the same name in another run to share its history."
          },
          "maxItems": {
            "title": "Maximum results",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many results. Leave blank to collect all available results until the source has no more."
          },
          "resumeFrom": {
            "title": "Continue collection from",
            "type": "string",
            "description": "Enter an earlier Apify run ID or dataset ID to continue its saved progress. Keep the same result type and lookup settings. Leave blank to start a new collection."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}