{
  "openapi": "3.0.1",
  "info": {
    "title": "Mobile Phone Waterfall",
    "description": "Find mobile phone numbers for your contacts by chaining your own Prospeo, Lusha, ContactOut, and FullEnrich keys. One flat row per contact with the number, line type, country, Do Not Call flag, and the provider and credits used. No keys stored.",
    "version": "0.1",
    "x-build-id": "6wHYIhIngY4dddG0S"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/mambalabs~mobile-phone-waterfall-orchestrator/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-mambalabs-mobile-phone-waterfall-orchestrator",
        "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/mambalabs~mobile-phone-waterfall-orchestrator/runs": {
      "post": {
        "operationId": "runs-sync-mambalabs-mobile-phone-waterfall-orchestrator",
        "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/mambalabs~mobile-phone-waterfall-orchestrator/run-sync": {
      "post": {
        "operationId": "run-sync-mambalabs-mobile-phone-waterfall-orchestrator",
        "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": {
          "mode": {
            "title": "Mode",
            "enum": [
              "find",
              "validate"
            ],
            "type": "string",
            "description": "find (the default) looks up mobile numbers, as before. validate checks numbers you already hold: send each in a phone field. Country and number type come from the numbering plan at no cost; line type, carrier, and reachability need your Twilio credentials below. Each number checked bills once as mobile-found.",
            "default": "find"
          },
          "contacts": {
            "title": "Contacts",
            "type": "array",
            "description": "One object per person with any of: full_name, first_name, last_name, company_domain, company_name, linkedin_url, email, and your own id or contact_id. A LinkedIn URL is the strongest identifier for most providers and is only passed to them, never opened. Also accepted as a JSON string, or one line per person, because Clay sends every input as a string.",
            "default": []
          },
          "full_name": {
            "title": "Full name (single contact)",
            "type": "string",
            "description": "Optional. For one person per run, the shape a Clay row sends. Added to the contacts list."
          },
          "company_domain": {
            "title": "Company domain (single contact)",
            "type": "string",
            "description": "Optional, with full_name for a single contact."
          },
          "linkedin_url": {
            "title": "LinkedIn URL (single contact)",
            "type": "string",
            "description": "Optional, for a single contact. Passed to providers as an identifier, never opened by the actor."
          },
          "email": {
            "title": "Email (single contact)",
            "type": "string",
            "description": "Optional, for a single contact."
          },
          "prospeo_api_key": {
            "title": "Prospeo API key",
            "type": "string",
            "description": "Your Prospeo key. Prospeo charges 10 credits per mobile found and nothing on a miss."
          },
          "lusha_api_key": {
            "title": "Lusha API key",
            "type": "string",
            "description": "Your Lusha key (V3 API). Lusha charges a search credit plus a phone credit per revealed phone."
          },
          "contactout_api_key": {
            "title": "ContactOut API key",
            "type": "string",
            "description": "Your ContactOut API token. LinkedIn URL lookups only; a phone credit is spent only when a phone comes back."
          },
          "fullenrich_api_key": {
            "title": "FullEnrich API key",
            "type": "string",
            "description": "Your FullEnrich key. FullEnrich is itself a waterfall over 20 plus sources and charges 10 credits per mobile found; it runs last by default."
          },
          "include_work_email": {
            "title": "Also find the work email",
            "type": "boolean",
            "description": "Off by default. On runs the Work Email Waterfall chain (Findymail, Prospeo, Icypeas, then Reoon or BounceBan to verify) on your own email keys in the same run, before the phone chain, and adds work_email to each row. No extra event: the work email rides free in the row.",
            "default": false
          },
          "findymail_api_key": {
            "title": "Findymail API key",
            "type": "string",
            "description": "Your Findymail key, for the work email. Used only with include_work_email."
          },
          "icypeas_api_key": {
            "title": "Icypeas API key",
            "type": "string",
            "description": "Your Icypeas key, for the work email. Used only with include_work_email."
          },
          "reoon_api_key": {
            "title": "Reoon API key",
            "type": "string",
            "description": "Your Reoon key, to verify the work email. Used only with include_work_email."
          },
          "bounceban_api_key": {
            "title": "BounceBan API key",
            "type": "string",
            "description": "Your BounceBan key, to verify the work email. Used only with include_work_email."
          },
          "twilio_account_sid": {
            "title": "Twilio account SID",
            "type": "string",
            "description": "Validate mode only. With your Twilio auth token, adds line type, carrier, and reachability from Twilio Lookup v2, billed by Twilio to your account."
          },
          "twilio_auth_token": {
            "title": "Twilio auth token",
            "type": "string",
            "description": "Validate mode only. Your Twilio auth token."
          },
          "default_country": {
            "title": "Default country",
            "type": "string",
            "description": "Validate mode: the two letter country for numbers sent without a + and calling code. US by default.",
            "default": "US"
          },
          "provider_order": {
            "title": "Provider order",
            "type": "array",
            "description": "Optional. Provider names in the order to call them: prospeo, lusha, contactout, fullenrich. Leave empty for that default order. A provider with no key is skipped and reported.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "mobile_only": {
            "title": "Mobile numbers only",
            "type": "boolean",
            "description": "On by default: a landline or VoIP number does not count as found, and the chain moves on to the next provider. Numbers a provider returns without a line type are kept and labeled unknown.",
            "default": true
          },
          "max_contacts": {
            "title": "Maximum contacts",
            "minimum": 1,
            "type": "integer",
            "description": "Optional ceiling on how many contacts this run processes."
          },
          "max_provider_credits": {
            "title": "Maximum provider credits (your spend cap)",
            "minimum": 1,
            "type": "integer",
            "description": "Cap on the provider credits this run may spend from YOUR accounts. When it is reached, the remaining contacts are skipped with a reason and not charged. Strongly recommended."
          },
          "max_charge_usd": {
            "title": "Maximum charge for this run (USD)",
            "minimum": 0,
            "type": "number",
            "description": "Optional. The run stops before any Apify charge that would take this run past this amount, and keeps every row already paid for. The run also honors the maximum cost per run set in Apify."
          },
          "source_tag": {
            "title": "Source Tag",
            "type": "string",
            "description": "Internal attribution tag set by Mamba Labs on published task examples. Leave it empty."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}