{
  "openapi": "3.0.1",
  "info": {
    "title": "MarketPulse Nigeria — AI Pricing & Market Saturation Agent",
    "description": "Ask in plain language what a product sells for in Nigeria. An AI agent plans the searches, pulls live listings from Jumia and TikTok, and returns a price band, common price points, a market saturation score, and a plain-language pricing verdict.",
    "version": "0.0",
    "x-build-id": "JQfycLaxCCdw0pzcf"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/brendy~market-pulse-nigeria/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-brendy-market-pulse-nigeria",
        "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/brendy~market-pulse-nigeria/runs": {
      "post": {
        "operationId": "runs-sync-brendy-market-pulse-nigeria",
        "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/brendy~market-pulse-nigeria/run-sync": {
      "post": {
        "operationId": "run-sync-brendy-market-pulse-nigeria",
        "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": [
          "query"
        ],
        "properties": {
          "query": {
            "title": "What are you pricing?",
            "type": "string",
            "description": "Describe the product the way you'd say it out loud. Informal phrasing is fine — an AI agent translates it into searches the marketplaces can actually answer. Examples: 'bag of rice', 'women's shoes', 'okrika bale'."
          },
          "location": {
            "title": "Location (optional)",
            "type": "string",
            "description": "Where you sell, e.g. 'Mile 12, Lagos'. Used to filter Jiji listings to your state, and as context for the pricing verdict. Jumia listings are national."
          },
          "country": {
            "title": "Marketplace country",
            "enum": [
              "ng",
              "ke",
              "gh",
              "eg"
            ],
            "type": "string",
            "description": "Which Jumia storefront to search. Only Nigeria is verified end to end; the others are supported but untested.",
            "default": "ng"
          },
          "platforms": {
            "title": "Sources",
            "type": "array",
            "description": "Which marketplaces to pull listings from. Jumia is formal retail; Jiji is classifieds and secondhand, where traders and thrift sellers list. Running both shows the gap between retail and wholesale pricing, which is usually the most useful number. TikTok needs an AI key — see the README roadmap.",
            "items": {
              "type": "string",
              "enum": [
                "jumia",
                "jiji",
                "tiktok"
              ],
              "enumTitles": [
                "Jumia (formal retail)",
                "Jiji (classifieds & secondhand)",
                "TikTok (needs AI key)"
              ]
            },
            "default": [
              "jumia",
              "jiji"
            ]
          },
          "maxResults": {
            "title": "Maximum listings",
            "minimum": 10,
            "maximum": 200,
            "type": "integer",
            "description": "Upper bound on listings collected across all sources. Higher values cost more and take longer.",
            "default": 60
          },
          "agentMode": {
            "title": "Agent mode",
            "type": "boolean",
            "description": "When on, the AI agent runs searches as tools and re-queries when results come back thin — so 'okrika bale' (which returns nothing on Jumia) becomes 'thrift bale' automatically. When off, it plans once and runs a fixed pipeline.",
            "default": true
          },
          "useProxy": {
            "title": "Route through Apify Proxy",
            "type": "boolean",
            "description": "Required on the Apify platform — Jumia blocks datacenter IPs, so listings are fetched through a residential proxy in the marketplace country. Leave on unless you are running locally.",
            "default": true
          },
          "llmApiKey": {
            "title": "Anthropic API key (optional)",
            "type": "string",
            "description": "Bring your own Anthropic API key. Leave empty to use the key configured on this Actor."
          },
          "proxyGroups": {
            "title": "Proxy groups",
            "type": "array",
            "description": "Apify Proxy groups to route marketplace requests through. Jumia blocks datacenter IPs, so a residential or unblocker group is required when running on the platform.",
            "items": {
              "type": "string"
            },
            "default": [
              "RESIDENTIAL"
            ]
          },
          "diagnoseProxy": {
            "title": "Diagnose proxy connectivity",
            "type": "boolean",
            "description": "Run a connectivity probe across proxy groups and TLS profiles, report which combinations reach the marketplace, then exit without producing a report.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}