{
  "openapi": "3.0.1",
  "info": {
    "title": "GigRadar: AI job-search agent for Nigeria",
    "description": "An autonomous agent that finds safe jobs you can actually get, tracks your applications, schedules interviews with prep briefs, and tailors your resume without inventing experience.",
    "version": "0.0",
    "x-build-id": "YXpu4DaQEOXNxUKKb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/dazedtechie~gigradar/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-dazedtechie-gigradar",
        "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/dazedtechie~gigradar/runs": {
      "post": {
        "operationId": "runs-sync-dazedtechie-gigradar",
        "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/dazedtechie~gigradar/run-sync": {
      "post": {
        "operationId": "run-sync-dazedtechie-gigradar",
        "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": {
          "goal": {
            "title": "What should GigRadar do?",
            "type": "string",
            "description": "Optional, in your own words, e.g. \"I have an interview next week, get me ready\" or \"find me remote frontend jobs\". The agent decides which tools to use."
          },
          "targetRole": {
            "title": "Target role",
            "type": "string",
            "description": "The job you are looking for, e.g. \"frontend developer\" or \"accountant\". The agent uses it to decide which job boards and categories to search."
          },
          "location": {
            "title": "Your location",
            "type": "string",
            "description": "Where you live. Used to pick city pages and to judge whether you can realistically be hired.",
            "default": "Nigeria"
          },
          "remotePreference": {
            "title": "Remote preference",
            "enum": [
              "any",
              "remote",
              "hybrid",
              "onsite"
            ],
            "type": "string",
            "description": "Whether you want remote, hybrid or on-site work.",
            "default": "any"
          },
          "pastedJobs": {
            "title": "Pasted job posts",
            "type": "array",
            "description": "Job posts from WhatsApp, Telegram job channels, flyers or anywhere else, one per item. Each gets a scam-risk and hireability score with reasons.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "messages": {
            "title": "Pasted or forwarded messages",
            "type": "array",
            "description": "Emails or chat messages about your applications. Each item is either the message text, or an object: {\"from\": \"talent@company.com\", \"subject\": \"...\", \"date\": \"2026-09-20\", \"body\": \"...\", \"direction\": \"inbound\" or \"outbound\", \"channel\": \"email\" or \"telegram\"}.",
            "default": []
          },
          "applications": {
            "title": "Applications you sent",
            "type": "array",
            "description": "Applications to track even before anyone replies, so ghosting can be detected. Each item: {\"company\": \"Korapay\", \"role\": \"Frontend Developer\", \"applied_on\": \"2026-09-01\", \"job_id\": \"optional id from GigRadar Discovery\"}.",
            "default": []
          },
          "readGmail": {
            "title": "Read my Gmail",
            "type": "boolean",
            "description": "Read job-related emails (received and sent) since the last run. Requires the GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET and GOOGLE_REFRESH_TOKEN environment variables. On the public Actor, only the Actor owner's runs can use Gmail and Calendar.",
            "default": false
          },
          "resumeText": {
            "title": "Your resume",
            "type": "string",
            "description": "Paste your full resume as plain text. The agent only rewords what is already here and never adds experience you do not have."
          },
          "jobText": {
            "title": "Job description",
            "type": "string",
            "description": "Optional: a job description to tailor your resume to. The agent also tailors to the best jobs it finds."
          },
          "jobTitle": {
            "title": "Job title",
            "type": "string",
            "description": "Optional, for pasted jobs."
          },
          "jobCompany": {
            "title": "Company",
            "type": "string",
            "description": "Optional, for pasted jobs."
          },
          "useLlm": {
            "title": "Use AI (LLM)",
            "type": "boolean",
            "description": "Let the LLM configured in LLM_API_KEY, LLM_BASE_URL and LLM_MODEL decide which tools to run and help with unclear cases. Without it (or if the provider is down), a rule-based planner makes the decisions.",
            "default": true
          },
          "maxSteps": {
            "title": "Max agent steps",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many decisions the LLM orchestrator may make in one run.",
            "default": 8
          },
          "maxTailoredJobs": {
            "title": "Max resumes tailored per run",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "The agent tailors your resume to the best matches it finds, up to this many.",
            "default": 5
          },
          "maxLlmCalls": {
            "title": "Max LLM calls per run",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "The LLM is only asked about listings the rules are unsure of (pasted text, warning signs, unclear hireability). This caps how many calls one run can make, to stay inside free-tier quotas.",
            "default": 10
          },
          "maxPagesPerSource": {
            "title": "Listing pages per source",
            "minimum": 1,
            "maximum": 6,
            "type": "integer",
            "description": "How many listing pages (categories, cities, remote board) to read from each job board.",
            "default": 2
          },
          "maxJobsPerSource": {
            "title": "Max jobs per source",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Maximum number of job listings to check from each job board.",
            "default": 20
          },
          "scamRiskThreshold": {
            "title": "Scam-risk threshold",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Listings with a scam-risk score at or above this are flagged and kept out of the available feed.",
            "default": 60
          },
          "hireabilityThreshold": {
            "title": "Hireability threshold",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Listings with a hireability score below this are marked as unlikely to hire someone based in Nigeria.",
            "default": 40
          },
          "includeSuppressed": {
            "title": "Include flagged and unlikely jobs in output",
            "type": "boolean",
            "description": "Keep scam-flagged and unlikely-hireable listings in the dataset (marked by the \"decision\" field). Turn off to output only available jobs.",
            "default": true
          },
          "onlyMatchingRoles": {
            "title": "Only jobs in my field",
            "type": "boolean",
            "description": "Drop job-board listings that are not in the same field as your target role (e.g. a Secretary role when you search for \"frontend developer\"). Dropped listings are not charged. Pasted posts are always checked.",
            "default": true
          },
          "ghostedAfterDays": {
            "title": "Ghosted after (days)",
            "minimum": 1,
            "maximum": 120,
            "type": "integer",
            "description": "An application with no reply for this many days is flagged as ghosted.",
            "default": 14
          },
          "createCalendarEvents": {
            "title": "Add interviews to Google Calendar",
            "type": "boolean",
            "description": "Create a calendar event with reminders (1 day and 1 hour before) for each interview. Without Google connected, an .ics calendar file is created instead, which any calendar app can open.",
            "default": true
          },
          "timeZone": {
            "title": "Your time zone",
            "type": "string",
            "description": "Used for interview times that do not state a time zone.",
            "default": "Africa/Lagos"
          },
          "gmailLookbackDays": {
            "title": "Gmail: days to look back on the first run",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "After the first run, only new emails are read.",
            "default": 30
          },
          "seenJobsStoreName": {
            "title": "Seen-jobs store name",
            "type": "string",
            "description": "Named key-value store that remembers jobs across runs, so reposts are not delivered or charged twice.",
            "default": "gigradar-agent-seen-jobs"
          },
          "resetSeenJobs": {
            "title": "Forget previously seen jobs",
            "type": "boolean",
            "description": "Start this run with an empty seen-jobs memory.",
            "default": false
          },
          "applicationsStoreName": {
            "title": "Applications store name",
            "type": "string",
            "description": "Named key-value store that keeps your application records between runs.",
            "default": "gigradar-agent-applications"
          },
          "resetApplications": {
            "title": "Forget all application records",
            "type": "boolean",
            "description": "Start this run with no application history.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}