{"components":{"schemas":{"BulkLinks":{"properties":{"app":{"type":"string"},"export":{"type":"string"},"results":{"type":"string"},"self":{"type":"string"}},"required":["self","export","app"],"type":"object"},"BulkQuery":{"properties":{"error":{"type":"string"},"found":{"type":"integer"},"position":{"type":"integer"},"query":{"type":"string"},"saved":{"type":["null","integer"]},"state":{"description":"pending, running, done, skipped or failed","type":"string"}},"required":["position","query","state","found"],"type":"object"},"BulkRun":{"properties":{"campaign_id":{"type":"string"},"completed_at":{"type":["null","string"]},"created_at":{"type":"string"},"error":{"type":"string"},"id":{"type":"string"},"limit":{"type":"integer"},"links":{"$ref":"#/components/schemas/BulkLinks"},"name":{"type":"string"},"queries":{"description":"the run's queries and how each went; on a single run only","items":{"$ref":"#/components/schemas/BulkQuery"},"type":["null","array"]},"queries_done":{"type":"integer"},"query_count":{"type":"integer"},"result_count":{"type":"integer"},"started_at":{"type":["null","string"]},"status":{"description":"draft, running, paused, cancelling, completed, failed or cancelled","type":"string"}},"required":["id","name","status","limit","query_count","queries_done","result_count","created_at","started_at","completed_at","links"],"type":"object"},"BulkRunPage":{"properties":{"data":{"items":{"$ref":"#/components/schemas/BulkRun"},"type":["null","array"]},"has_more":{"type":"boolean"},"page":{"type":"integer"},"page_size":{"type":"integer"},"total":{"type":"integer"}},"required":["data","page","page_size","total","has_more"],"type":"object"},"Campaign":{"properties":{"completed_at":{"type":["null","string"]},"created_at":{"type":"string"},"error":{"anyOf":[{"$ref":"#/components/schemas/RunError"},{"type":"null"}]},"fields":{"items":{"type":"string"},"type":["null","array"]},"id":{"type":"string"},"language":{"$ref":"#/components/schemas/Language"},"links":{"$ref":"#/components/schemas/Links"},"name":{"type":"string"},"progress":{"anyOf":[{"$ref":"#/components/schemas/Progress"},{"type":"null"}]},"prompt":{"type":"string"},"qualifier":true,"result_count":{"type":"integer"},"shortfall":{"anyOf":[{"$ref":"#/components/schemas/Shortfall"},{"type":"null"}]},"started_at":{"type":["null","string"]},"status":{"description":"draft, queued, running, cancelling, completed, failed or cancelled; each campaign runs once","enum":["draft","queued","running","cancelling","completed","failed","cancelled"],"type":"string"},"target_count":{"type":"integer"},"updated_at":{"type":"string"},"usage":{"$ref":"#/components/schemas/Usage"}},"required":["id","name","prompt","status","target_count","result_count","qualifier","fields","progress","shortfall","error","usage","created_at","updated_at","started_at","completed_at","language","links"],"type":"object"},"CampaignPage":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Campaign"},"type":["null","array"]},"has_more":{"type":"boolean"},"page":{"type":"integer"},"page_size":{"type":"integer"},"total":{"type":"integer"}},"required":["data","page","page_size","total","has_more"],"type":"object"},"CampaignResult":{"properties":{"about":{"additionalProperties":{"items":{"type":"string"},"type":["null","array"]},"description":"Present when the campaign selected `about`. Absent means not collected; optional values may be empty.","type":"object"},"action_links":{"description":"Present when the campaign selected `order_providers`. Absent means not collected; optional values may be empty.; Present when the campaign selected `booking_providers`. Absent means not collected; optional values may be empty.; Present when the campaign selected `hotel_partners`. Absent means not collected; optional values may be empty.","items":{"properties":{"google_url":{"type":"string"},"kind":{"type":"string"},"label":{"type":"string"},"official":{"type":"boolean"},"provider":{"type":"string"},"providers":{"type":"integer"},"url":{"type":"string"}},"required":["kind","url"],"type":"object"},"type":["null","array"]},"ad_intelligence":{"description":"Present when the campaign selected `ad_intelligence`. Absent means not collected; optional values may be empty."},"address":{"description":"Present when the campaign selected `address`. Absent means not collected; optional values may be empty.","type":"string"},"address_components":{"description":"Present when the campaign selected `address`. Absent means not collected; optional values may be empty.","items":{"type":"string"},"type":["null","array"]},"aggregator_signal":{"description":"Present when the campaign selected `aggregator_signal`. Absent means not collected; optional values may be empty.","properties":{"confidence":{"type":"number"},"is_aggregator":{"type":"boolean"},"matched_signals":{"items":{"type":"string"},"type":["null","array"]}},"required":["is_aggregator","confidence"],"type":["null","object"]},"ai_research":{"description":"Present when the campaign selected `ai_research`. Absent means not collected; optional values may be empty.","items":{"properties":{"answer":{"type":"string"},"boolean_val":{"type":["null","boolean"]},"confidence_score":{"type":"number"},"evidence_quote":{"type":"string"},"question":{"type":"string"},"source_url":{"type":"string"}},"required":["question","answer","confidence_score"],"type":"object"},"type":["null","array"]},"area_service":{"description":"Present when the campaign selected `area_service`. Absent means not collected; optional values may be empty.","type":"boolean"},"autosuggest_signal":{"description":"Present when the campaign selected `autosuggest_signal`. Absent means not collected; optional values may be empty.","properties":{"has_reputation_risk":{"type":"boolean"},"informational":{"items":{"type":"string"},"type":["null","array"]},"negative":{"items":{"type":"string"},"type":["null","array"]},"neutral":{"items":{"type":"string"},"type":["null","array"]},"query":{"type":"string"},"suggestion_count":{"type":"integer"},"visibility_tier":{"type":"string"}},"required":["query","suggestion_count","has_reputation_risk","visibility_tier"],"type":["null","object"]},"booking_links":{"description":"Present when the campaign selected `booking_links`. Absent means not collected; optional values may be empty.","items":{"type":"string"},"type":["null","array"]},"borough":{"description":"Present when the campaign selected `address`. Absent means not collected; optional values may be empty.","type":"string"},"business_status":{"description":"Present when the campaign selected `business_status`. Absent means not collected; optional values may be empty.","type":"string"},"categories":{"description":"Present when the campaign selected `categories`. Absent means not collected; optional values may be empty.","items":{"type":"string"},"type":["null","array"]},"categorized_photos":{"additionalProperties":{"items":{"type":"string"},"type":["null","array"]},"description":"Present when the campaign selected `photo_categories`. Absent means not collected; optional values may be empty.","type":"object"},"chain_classification":{"description":"Present when the campaign selected `chain_classification`. Absent means not collected; optional values may be empty.","properties":{"audit_status":{"type":"string"},"classification":{"type":"string"},"confidence":{"type":"number"},"estimated_stores":{"type":"integer"},"is_franchise":{"type":"boolean"},"matched_signals":{"items":{"type":"string"},"type":["null","array"]}},"required":["classification","confidence","is_franchise","estimated_stores","matched_signals","audit_status"],"type":["null","object"]},"check_in_time":{"description":"Present when the campaign selected `hotel_amenities`. Absent means not collected; optional values may be empty.","type":"string"},"check_out_time":{"description":"Present when the campaign selected `hotel_amenities`. Absent means not collected; optional values may be empty.","type":"string"},"cid":{"description":"Record metadata, independent of the selected fields.","type":"string"},"city":{"description":"Present when the campaign selected `city`. Absent means not collected; optional values may be empty.","type":"string"},"claim_url":{"description":"Present when the campaign selected `claim_url`. Absent means not collected; optional values may be empty.","type":"string"},"coordinates":{"description":"Present when the campaign selected `coordinates`. Absent means not collected; optional values may be empty.","properties":{"lat":{"type":"number"},"lng":{"type":"number"}},"required":["lat","lng"],"type":"object"},"country":{"description":"Present when the campaign selected `country`. Absent means not collected; optional values may be empty.","type":"string"},"country_code":{"description":"Present when the campaign selected `country_code`. Absent means not collected; optional values may be empty.","type":"string"},"days_since_last_gbp_post":{"description":"Present when the campaign selected `recent_posts`. Absent means not collected; optional values may be empty.","type":"integer"},"days_since_last_owner_activity":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":"integer"},"days_since_last_owner_reply":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":"integer"},"days_since_last_review":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":"integer"},"decision_makers":{"description":"Present when the campaign selected `decision_makers`. Absent means not collected; optional values may be empty.","items":{"properties":{"email":{"type":"string"},"email_status":{"type":"string"},"linkedin_url":{"type":"string"},"name":{"type":"string"},"profile_picture_url":{"type":"string"},"source":{"type":"string"},"title":{"type":"string"}},"required":["name","title"],"type":"object"},"type":["null","array"]},"description":{"description":"Present when the campaign selected `description`. Absent means not collected; optional values may be empty.","type":"string"},"editorial_summary":{"description":"Present when the campaign selected `editorial_summary`. Absent means not collected; optional values may be empty.","type":"string"},"email":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","type":"string"},"enrichment":{"description":"Only enrichment keys owned by selected field IDs are included.","properties":{"decision_makers":{"description":"Present when the campaign selected `decision_makers`. Absent means not collected; optional values may be empty.","items":{"properties":{"email":{"type":"string"},"email_status":{"type":"string"},"linkedin_url":{"type":"string"},"name":{"type":"string"},"profile_picture_url":{"type":"string"},"source":{"type":"string"},"title":{"type":"string"}},"required":["name","title"],"type":"object"},"type":["null","array"]},"domain":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"email_1":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","type":"string"},"email_1_source":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","type":"string"},"email_2":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","type":"string"},"email_2_source":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","type":"string"},"email_3":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","type":"string"},"email_3_source":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","type":"string"},"emails":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","items":{"properties":{"address":{"type":"string"},"sources":{"items":{"type":"string"},"type":["null","array"]}},"required":["address","sources"],"type":"object"},"type":["null","array"]},"facebook":{"description":"Present when the campaign selected `social_links`. Absent means not collected; optional values may be empty.","type":"string"},"favicon_url":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"fetched_at":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","type":"string"},"has_website_only_on_social":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_facebook`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_instagram`. Absent means not collected; optional values may be empty.","type":"boolean"},"instagram":{"description":"Present when the campaign selected `social_links`. Absent means not collected; optional values may be empty.","type":"string"},"is_mobile":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"boolean"},"linkedin":{"description":"Present when the campaign selected `social_links`. Absent means not collected; optional values may be empty.","type":"string"},"phone_1":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"phone_1_source":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"phone_2":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"phone_2_source":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"phone_3":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"phone_3_source":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"phone_type":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"phones":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","items":{"properties":{"calling_code":{"type":"integer"},"e164":{"type":"string"},"international":{"type":"string"},"is_mobile":{"type":"boolean"},"national":{"type":"string"},"raw":{"type":"string"},"region":{"type":"string"},"sources":{"items":{"type":"string"},"type":["null","array"]},"type":{"type":"string"},"valid":{"type":"boolean"},"whatsapp":{"properties":{"about":{"type":"string"},"actual_actors":{"type":"integer"},"business":{"properties":{"address":{"type":"string"},"categories":{"items":{"properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["name"],"type":"object"},"type":["null","array"]},"email":{"type":"string"},"hours":{"items":{"properties":{"close":{"type":"string"},"day":{"type":"string"},"mode":{"type":"string"},"open":{"type":"string"}},"required":["day"],"type":"object"},"type":["null","array"]},"hours_time_zone":{"type":"string"},"options":{"additionalProperties":{"type":"string"},"type":"object"}},"type":["null","object"]},"business_name":{"type":"string"},"cert_issued_at":{"type":["null","string"]},"cert_issuer":{"type":"string"},"cert_serial":{"minimum":0,"type":"integer"},"checked_at":{"type":"string"},"device_count":{"type":"integer"},"host_storage":{"type":"integer"},"is_business":{"type":"boolean"},"jid":{"type":"string"},"lid":{"type":"string"},"number":{"type":"string"},"phone_jid":{"type":"string"},"picture_id":{"type":"string"},"picture_url":{"type":"string"},"registered":{"type":"boolean"},"verified_level":{"type":"string"},"verified_names":{"items":{"properties":{"country":{"type":"string"},"language":{"type":"string"},"name":{"type":"string"}},"required":["name"],"type":"object"},"type":["null","array"]}},"required":["number","registered","checked_at"],"type":["null","object"]}},"required":["raw","valid"],"type":"object"},"type":["null","array"]},"secondary_websites":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_facebook`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_instagram`. Absent means not collected; optional values may be empty.","items":{"properties":{"fetched_at":{"type":"string"},"profile_url":{"type":"string"},"source":{"type":"string"},"url":{"type":"string"}},"required":["url","source","profile_url"],"type":"object"},"type":["null","array"]},"tech_stack":{"description":"Present when the campaign selected `tech_stack`. Absent means not collected; optional values may be empty.","properties":{"analytics":{"items":{"type":"string"},"type":["null","array"]},"booking_system":{"type":"string"},"categories":{"additionalProperties":{"items":{"type":"string"},"type":["null","array"]},"type":"object"},"cms":{"type":"string"},"detected":{"items":{"properties":{"category":{"type":"string"},"name":{"type":"string"}},"required":["name","category"],"type":"object"},"type":["null","array"]},"ecommerce":{"type":"string"},"has_google_analytics":{"type":"boolean"},"has_google_tag_manager":{"type":"boolean"},"has_meta_pixel":{"type":"boolean"},"live_chat":{"type":"string"},"marketing":{"items":{"type":"string"},"type":["null","array"]},"pos_ordering":{"type":"string"}},"required":["detected","categories","has_meta_pixel","has_google_tag_manager","has_google_analytics"],"type":["null","object"]},"tiktok":{"description":"Present when the campaign selected `social_links`. Absent means not collected; optional values may be empty.","type":"string"},"twitter":{"description":"Present when the campaign selected `social_links`. Absent means not collected; optional values may be empty.","type":"string"},"verified_emails":{"description":"Present when the campaign selected `email_verified`. Absent means not collected; optional values may be empty.","items":{"properties":{"checked_by":{"type":"string"},"confidence_score":{"type":"integer"},"details":{"type":"string"},"email":{"type":"string"},"has_mx":{"type":"boolean"},"is_catch_all":{"type":"boolean"},"is_disposable":{"type":"boolean"},"is_role":{"type":"boolean"},"mx_provider":{"type":"string"},"mx_records":{"items":{"type":"string"},"type":["null","array"]},"risk_level":{"type":"string"},"smtp_check_passed":{"type":"boolean"},"smtp_response":{"type":"string"},"status":{"type":"string"}},"required":["email","status","is_disposable","is_role","has_mx","is_catch_all","confidence_score","risk_level","smtp_check_passed"],"type":"object"},"type":["null","array"]},"waterfall_contacts":{"description":"Present when the campaign selected `decision_makers`. Absent means not collected; optional values may be empty.","properties":{"contacts":{"items":{"properties":{"confidence_score":{"type":"integer"},"decision_maker":{"type":"string"},"email":{"type":"string"},"profile_picture_url":{"type":"string"},"profile_url":{"type":"string"},"source":{"type":"string"},"title":{"type":"string"},"verification":{"properties":{"checked_by":{"type":"string"},"confidence_score":{"type":"integer"},"details":{"type":"string"},"email":{"type":"string"},"has_mx":{"type":"boolean"},"is_catch_all":{"type":"boolean"},"is_disposable":{"type":"boolean"},"is_role":{"type":"boolean"},"mx_provider":{"type":"string"},"mx_records":{"items":{"type":"string"},"type":["null","array"]},"risk_level":{"type":"string"},"smtp_check_passed":{"type":"boolean"},"smtp_response":{"type":"string"},"status":{"type":"string"}},"required":["email","status","is_disposable","is_role","has_mx","is_catch_all","confidence_score","risk_level","smtp_check_passed"],"type":"object"}},"required":["email","source","confidence_score","verification"],"type":"object"},"type":["null","array"]},"discovery_method":{"type":"string"},"domain":{"type":"string"},"primary_email":{"type":"string"},"total_emails_found":{"type":"integer"}},"required":["domain","total_emails_found","primary_email","contacts","discovery_method"],"type":["null","object"]},"website_canonical_url":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"website_description":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"website_generator":{"description":"Present when the campaign selected `tech_stack`. Absent means not collected; optional values may be empty.","type":"string"},"website_has_fb_pixel":{"description":"Present when the campaign selected `tech_stack`. Absent means not collected; optional values may be empty.","type":"boolean"},"website_has_gtm":{"description":"Present when the campaign selected `tech_stack`. Absent means not collected; optional values may be empty.","type":"boolean"},"website_has_mobile_viewport":{"description":"Present when the campaign selected `tech_stack`. Absent means not collected; optional values may be empty.","type":"boolean"},"website_keywords":{"description":"Present when the campaign selected `tech_stack`. Absent means not collected; optional values may be empty.","type":"string"},"website_lang":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"website_og_image":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"website_title":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"whatsapp_business_name":{"description":"Present when the campaign selected `whatsapp_number`. Absent means not collected; optional values may be empty.","type":"string"},"whatsapp_is_business":{"description":"Present when the campaign selected `whatsapp_number`. Absent means not collected; optional values may be empty.","type":"boolean"},"whatsapp_number":{"description":"Present when the campaign selected `whatsapp_number`. Absent means not collected; optional values may be empty.","type":"string"},"whatsapp_profile":{"description":"Present when the campaign selected `whatsapp_number`. Absent means not collected; optional values may be empty.","properties":{"about":{"type":"string"},"actual_actors":{"type":"integer"},"business":{"properties":{"address":{"type":"string"},"categories":{"items":{"properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["name"],"type":"object"},"type":["null","array"]},"email":{"type":"string"},"hours":{"items":{"properties":{"close":{"type":"string"},"day":{"type":"string"},"mode":{"type":"string"},"open":{"type":"string"}},"required":["day"],"type":"object"},"type":["null","array"]},"hours_time_zone":{"type":"string"},"options":{"additionalProperties":{"type":"string"},"type":"object"}},"type":["null","object"]},"business_name":{"type":"string"},"cert_issued_at":{"type":["null","string"]},"cert_issuer":{"type":"string"},"cert_serial":{"minimum":0,"type":"integer"},"checked_at":{"type":"string"},"device_count":{"type":"integer"},"host_storage":{"type":"integer"},"is_business":{"type":"boolean"},"jid":{"type":"string"},"lid":{"type":"string"},"number":{"type":"string"},"phone_jid":{"type":"string"},"picture_id":{"type":"string"},"picture_url":{"type":"string"},"registered":{"type":"boolean"},"verified_level":{"type":"string"},"verified_names":{"items":{"properties":{"country":{"type":"string"},"language":{"type":"string"},"name":{"type":"string"}},"required":["name"],"type":"object"},"type":["null","array"]}},"required":["number","registered","checked_at"],"type":["null","object"]},"whatsapp_source":{"description":"Present when the campaign selected `whatsapp_number`. Absent means not collected; optional values may be empty.","type":"string"},"whatsapp_url":{"description":"Present when the campaign selected `whatsapp_number`. Absent means not collected; optional values may be empty.","type":"string"},"youtube":{"description":"Present when the campaign selected `social_links`. Absent means not collected; optional values may be empty.","type":"string"}},"type":"object"},"favicon_url":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"firmographics":{"description":"Present when the campaign selected `decision_makers`. Absent means not collected; optional values may be empty.","properties":{"annual_revenue_amount":{"type":"number"},"annual_revenue_currency":{"type":"string"},"annual_revenue_unit":{"type":"string"},"employee_count":{"type":"integer"},"employee_count_range":{"type":"string"},"source":{"type":"string"}},"required":["source"],"type":["null","object"]},"fuel_prices":{"description":"Present when the campaign selected `fuel_prices`. Absent means not collected; optional values may be empty.","items":{"properties":{"amount":{"type":"number"},"currency":{"type":"string"},"fuel":{"type":"string"},"price":{"type":"string"},"unit":{"type":"string"},"updated_at":{"type":["null","string"]}},"required":["fuel","price","amount"],"type":"object"},"type":["null","array"]},"google_id":{"description":"Present when the campaign selected `google_id`. Absent means not collected; optional values may be empty.","type":"string"},"hotel_amenities":{"description":"Present when the campaign selected `hotel_amenities`. Absent means not collected; optional values may be empty.","items":{"type":"string"},"type":["null","array"]},"hotel_amenities_not_offered":{"description":"Present when the campaign selected `hotel_amenities`. Absent means not collected; optional values may be empty.","items":{"type":"string"},"type":["null","array"]},"hotel_class":{"description":"Present when the campaign selected `hotel_class`. Absent means not collected; optional values may be empty.","type":"string"},"hotel_rate":{"description":"Present when the campaign selected `hotel_rate`. Absent means not collected; optional values may be empty.","properties":{"check_in":{"type":"string"},"check_out":{"type":"string"},"price":{"type":"string"},"stars":{"type":"string"}},"required":["check_in","check_out","price"],"type":["null","object"]},"icebreaker":{"description":"Present when the campaign selected `icebreaker`. Absent means not collected; optional values may be empty.","properties":{"audit_status":{"type":"string"},"cold_call_script":{"type":"string"},"email_opener":{"type":"string"},"opportunity_hook":{"type":"string"},"outreach_pack":{"properties":{"cold_call_gatekeeper":{"type":"string"},"cold_call_objections":{"additionalProperties":{"type":"string"},"type":"object"},"cold_call_opening":{"type":"string"},"email_touch1_body":{"type":"string"},"email_touch1_subject":{"type":"string"},"email_touch2_body":{"type":"string"},"email_touch2_subject":{"type":"string"},"linkedin_inmail_note":{"type":"string"},"whatsapp_message":{"type":"string"}},"required":["email_touch1_subject","email_touch1_body","email_touch2_subject","email_touch2_body","whatsapp_message","cold_call_gatekeeper","cold_call_opening","linkedin_inmail_note"],"type":["null","object"]},"praise_point":{"type":"string"}},"required":["email_opener","cold_call_script","praise_point","opportunity_hook","audit_status"],"type":["null","object"]},"identity_badges":{"description":"Present when the campaign selected `identity_badges`. Absent means not collected; optional values may be empty.","items":{"type":"string"},"type":["null","array"]},"is_mobile":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"boolean"},"kgmid":{"description":"Present when the campaign selected `google_id`. Absent means not collected; optional values may be empty.","type":"string"},"lang":{"description":"Record metadata, independent of the selected fields.","type":"string"},"last_gbp_post_date":{"description":"Present when the campaign selected `recent_posts`. Absent means not collected; optional values may be empty.","type":["null","string"]},"last_owner_activity_date":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":["null","string"]},"last_owner_reply_date":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":["null","string"]},"last_review_date":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":["null","string"]},"lead_opportunity":{"description":"Present when the campaign selected `lead_opportunity`. Absent means not collected; optional values may be empty.","properties":{"grade":{"type":"string"},"opportunity_signals":{"items":{"type":"string"},"type":["null","array"]},"priority":{"type":"string"},"recommended_pitches":{"items":{"type":"string"},"type":["null","array"]},"score":{"type":"integer"},"version":{"type":"integer"}},"required":["score","grade","priority","opportunity_signals","recommended_pitches"],"type":["null","object"]},"live_busyness":{"description":"Present when the campaign selected `popular_times`. Absent means not collected; optional values may be empty.","properties":{"day":{"type":"string"},"hour":{"type":"integer"},"label":{"type":"string"},"percentage":{"type":"integer"}},"required":["hour","percentage"],"type":["null","object"]},"located_in":{"description":"Present when the campaign selected `located_in`. Absent means not collected; optional values may be empty.","type":"string"},"logo":{"description":"Present when the campaign selected `logo`. Absent means not collected; optional values may be empty.","type":"string"},"menu":{"description":"Present when the campaign selected `menu`. Absent means not collected; optional values may be empty.","properties":{"categories":{"items":{"properties":{"items":{"items":{"properties":{"description":{"type":"string"},"name":{"type":"string"},"photo_urls":{"items":{"type":"string"},"type":["null","array"]},"price":{"type":"string"}},"required":["name","description","price","photo_urls"],"type":"object"},"type":["null","array"]},"name":{"type":"string"}},"required":["name","items"],"type":"object"},"type":["null","array"]},"menu_link":{"type":"string"}},"required":["menu_link","categories"],"type":["null","object"]},"menu_link":{"description":"Present when the campaign selected `menu_link`. Absent means not collected; optional values may be empty.","type":"string"},"name":{"description":"Present when the campaign selected `name`. Absent means not collected; optional values may be empty.","type":"string"},"opening_hours":{"description":"Present when the campaign selected `opening_hours`. Absent means not collected; optional values may be empty.","properties":{"next_opening":{"type":"string"},"open_now":{"type":"boolean"},"periods":{"items":{"properties":{"close_day":{"type":"integer"},"close_time":{"type":"string"},"open_day":{"type":"integer"},"open_time":{"type":"string"}},"required":["open_day","open_time","close_day","close_time"],"type":"object"},"type":["null","array"]},"weekday_text":{"items":{"type":"string"},"type":["null","array"]}},"required":["weekday_text","periods","open_now","next_opening"],"type":["null","object"]},"order_links":{"description":"Present when the campaign selected `order_links`. Absent means not collected; optional values may be empty.","items":{"type":"string"},"type":["null","array"]},"outreach_score":{"description":"Present when the campaign selected `outreach_score`. Absent means not collected; optional values may be empty.","properties":{"decision_maker_tier":{"type":"string"},"grade":{"type":"string"},"reasoning":{"items":{"type":"string"},"type":["null","array"]},"recommended_channel":{"type":"string"},"score":{"type":"integer"},"status":{"type":"string"}},"required":["score","grade","decision_maker_tier","recommended_channel","reasoning"],"type":["null","object"]},"owner_avatar_url":{"description":"Present when the campaign selected `owner_link`. Absent means not collected; optional values may be empty.","type":"string"},"owner_id":{"description":"Present when the campaign selected `owner_title`. Absent means not collected; optional values may be empty.","type":"string"},"owner_link":{"description":"Present when the campaign selected `owner_link`. Absent means not collected; optional values may be empty.","type":"string"},"owner_title":{"description":"Present when the campaign selected `owner_title`. Absent means not collected; optional values may be empty.","type":"string"},"people_also_search_for":{"description":"Present when the campaign selected `people_also_search_for`. Absent means not collected; optional values may be empty.","items":{"properties":{"categories":{"items":{"type":"string"},"type":["null","array"]},"category":{"type":"string"},"distance":{"type":"string"},"hotel":{"type":"boolean"},"kgmid":{"type":"string"},"lat":{"type":"number"},"lng":{"type":"number"},"name":{"type":"string"},"note":{"type":"string"},"place_id":{"type":"string"},"price":{"type":"string"},"rating":{"type":"number"},"review_count":{"type":"integer"},"thumbnail":{"type":"string"}},"required":["place_id","name","rating","review_count","category","thumbnail"],"type":"object"},"type":["null","array"]},"phone":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"phone_type":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"photo_categories":{"description":"Present when the campaign selected `photo_categories`. Absent means not collected; optional values may be empty.","items":{"properties":{"at_least":{"type":"boolean"},"count":{"type":"integer"},"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name","count"],"type":"object"},"type":["null","array"]},"photo_items":{"description":"Present when the campaign selected `photo_urls`. Absent means not collected; optional values may be empty.","items":{"properties":{"categories":{"items":{"type":"string"},"type":["null","array"]},"height":{"type":"integer"},"id":{"type":"string"},"kind":{"type":"string"},"lat":{"type":"number"},"lng":{"type":"number"},"original_url":{"type":"string"},"source":{"type":"string"},"source_tag":{"type":"string"},"uploaded_at":{"type":["null","string"]},"url":{"type":"string"},"video_duration_ms":{"type":"integer"},"video_url":{"type":"string"},"width":{"type":"integer"}},"required":["id","url","kind","source"],"type":"object"},"type":["null","array"]},"photos":{"description":"Present when the campaign selected `photo_urls`. Absent means not collected; optional values may be empty.","items":{"type":"string"},"type":["null","array"]},"photos_count":{"description":"Present when the campaign selected `photos_count`. Absent means not collected; optional values may be empty.","type":"integer"},"place_id":{"description":"Record metadata, independent of the selected fields.","type":"string"},"plugin_errors":{"additionalProperties":{"type":"string"},"description":"Present when the campaign selected `plugin_google_serp`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_facebook`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_instagram`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_tiktok`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_x_twitter`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_youtube`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_2gis`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_npi`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_glassdoor`. Absent means not collected; optional values may be empty.","type":"object"},"plugins":{"description":"Source-specific data, present when the corresponding plugin field was selected.","properties":{"2gis":{"description":"Present when the campaign selected `plugin_2gis`. Absent means not collected; optional values may be empty."},"facebook":{"description":"Present when the campaign selected `plugin_facebook`. Absent means not collected; optional values may be empty."},"glassdoor":{"description":"Present when the campaign selected `plugin_glassdoor`. Absent means not collected; optional values may be empty."},"google_serp":{"description":"Present when the campaign selected `plugin_google_serp`. Absent means not collected; optional values may be empty."},"instagram":{"description":"Present when the campaign selected `plugin_instagram`. Absent means not collected; optional values may be empty."},"linkedin":{"description":"Present when the campaign selected `decision_makers`. Absent means not collected; optional values may be empty."},"npi":{"description":"Present when the campaign selected `plugin_npi`. Absent means not collected; optional values may be empty."},"tiktok":{"description":"Present when the campaign selected `plugin_tiktok`. Absent means not collected; optional values may be empty."},"x_twitter":{"description":"Present when the campaign selected `plugin_x_twitter`. Absent means not collected; optional values may be empty."},"youtube":{"description":"Present when the campaign selected `plugin_youtube`. Absent means not collected; optional values may be empty."}},"type":"object"},"plus_code":{"description":"Present when the campaign selected `plus_code`. Absent means not collected; optional values may be empty.","type":"string"},"popular_times":{"description":"Present when the campaign selected `popular_times`. Absent means not collected; optional values may be empty.","items":{"properties":{"day":{"type":"string"},"hourly_busy":{"items":{"properties":{"busyness":{"type":"string"},"hour":{"type":"integer"},"percentage":{"type":"integer"},"time_label":{"type":"string"},"wait_label":{"type":"string"},"wait_times_msg":{"type":"string"}},"required":["hour","percentage","time_label","wait_times_msg"],"type":"object"},"type":["null","array"]},"peak_wait":{"type":"string"}},"required":["day","hourly_busy"],"type":"object"},"type":["null","array"]},"price_level":{"description":"Present when the campaign selected `price_level`. Absent means not collected; optional values may be empty.","type":"string"},"primary_type":{"description":"Present when the campaign selected `primary_type`. Absent means not collected; optional values may be empty.","type":"string"},"rating":{"description":"Present when the campaign selected `rating`. Absent means not collected; optional values may be empty.","type":"number"},"recent_posts":{"description":"Present when the campaign selected `recent_posts`. Absent means not collected; optional values may be empty.","items":{"properties":{"created_at":{"type":["null","string"]},"cta_label":{"type":"string"},"cta_target":{"type":"string"},"full_text":{"type":"string"},"image_url":{"type":"string"},"language":{"type":"string"},"post_id":{"type":"string"},"post_type":{"type":"integer"},"post_url":{"type":"string"},"relative_time":{"type":"string"},"snippet_text":{"type":"string"},"thumbnail_url":{"type":"string"}},"required":["post_id","post_type"],"type":"object"},"type":["null","array"]},"replied_review_count":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":"integer"},"reservation_link":{"description":"Present when the campaign selected `reservation_link`. Absent means not collected; optional values may be empty.","type":"string"},"review_count":{"description":"Present when the campaign selected `review_count`. Absent means not collected; optional values may be empty.","type":"integer"},"review_highlights":{"description":"Present when the campaign selected `review_highlights`. Absent means not collected; optional values may be empty.","items":{"properties":{"bold":{"items":{"type":"string"},"type":["null","array"]},"contributor_url":{"type":"string"},"rating":{"type":"integer"},"review_id":{"type":"string"},"text":{"type":"string"}},"required":["text"],"type":"object"},"type":["null","array"]},"review_response_rate":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":["null","number"]},"review_velocity_30_days":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":"integer"},"reviews_fetched":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":"boolean"},"reviews_link":{"description":"Present when the campaign selected `reviews_link`. Absent means not collected; optional values may be empty.","type":"string"},"reviews_per_score":{"additionalProperties":{"type":"integer"},"description":"Present when the campaign selected `reviews_per_score`. Absent means not collected; optional values may be empty.","type":"object"},"reviews_tags":{"description":"Present when the campaign selected `reviews_tags`. Absent means not collected; optional values may be empty.","items":{"properties":{"count":{"type":"integer"},"title":{"type":"string"},"topic_id":{"type":"string"}},"required":["title","count"],"type":"object"},"type":["null","array"]},"reviews_total_saved":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":"integer"},"scraped_at":{"description":"Record metadata, independent of the selected fields.","type":"string"},"search_query":{"description":"Campaign search query provenance supplied by the core alongside `search_rank_position`."},"search_rank_position":{"description":"Present when the campaign selected `search_rank_position`. Absent means not collected; optional values may be empty.","type":"integer"},"social_links":{"description":"Present when the campaign selected `social_links`. Absent means not collected; optional values may be empty.","items":{"properties":{"platform":{"type":"string"},"url":{"type":"string"}},"required":["platform","url"],"type":"object"},"type":["null","array"]},"special_hours":{"description":"Present when the campaign selected `special_hours`. Absent means not collected; optional values may be empty.","items":{"properties":{"days":{"items":{"properties":{"date":{"type":"string"},"day":{"type":"string"},"hours":{"type":"string"}},"required":["day","hours"],"type":"object"},"type":["null","array"]},"name":{"type":"string"}},"required":["name","days"],"type":"object"},"type":["null","array"]},"state":{"description":"Present when the campaign selected `state`. Absent means not collected; optional values may be empty.","type":"string"},"state_code":{"description":"Present when the campaign selected `state_code`. Absent means not collected; optional values may be empty.","type":"string"},"street":{"description":"Present when the campaign selected `street`. Absent means not collected; optional values may be empty.","type":"string"},"street_view":{"description":"Present when the campaign selected `photo_urls`. Absent means not collected; optional values may be empty.","type":"string"},"tagline":{"description":"Present when the campaign selected `tagline`. Absent means not collected; optional values may be empty.","type":"string"},"time_zone":{"description":"Present when the campaign selected `opening_hours`. Absent means not collected; optional values may be empty.","type":"string"},"transit_nearby":{"description":"Present when the campaign selected `transit_nearby`. Absent means not collected; optional values may be empty.","type":"boolean"},"typical_time_spent":{"description":"Present when the campaign selected `opening_hours`. Absent means not collected; optional values may be empty.","type":"string"},"unclaimed":{"description":"Present when the campaign selected `claim_url`. Absent means not collected; optional values may be empty.","type":"boolean"},"unformatted_phone":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"verified":{"description":"Present when the campaign selected `verified`. Absent means not collected; optional values may be empty.","type":"boolean"},"vulnerability_radar":{"description":"Present when the campaign selected `vulnerability_radar`. Absent means not collected; optional values may be empty.","properties":{"audit_status":{"type":"string"},"lowest_reviews_analyzed":{"type":"integer"},"outreach_hooks":{"items":{"type":"string"},"type":["null","array"]},"pain_points":{"items":{"properties":{"category":{"type":"string"},"description":{"type":"string"},"frequency":{"type":"integer"},"sample_quote":{"type":"string"}},"required":["category","description","frequency","sample_quote"],"type":"object"},"type":["null","array"]},"severity":{"type":"string"},"vulnerability_score":{"type":"integer"}},"required":["lowest_reviews_analyzed","vulnerability_score","severity","pain_points","outreach_hooks","audit_status"],"type":["null","object"]},"web_results":{"description":"Present when the campaign selected `web_results`. Absent means not collected; optional values may be empty.","items":{"properties":{"favicon":{"type":"string"},"snippet":{"type":"string"},"source":{"type":"string"},"title":{"type":"string"},"url":{"type":"string"}},"required":["title","url","snippet"],"type":"object"},"type":["null","array"]},"website":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"whatsapp_number":{"description":"Present when the campaign selected `whatsapp_number`. Absent means not collected; optional values may be empty.","type":"string"},"working_hours_csv_compatible":{"description":"Present when the campaign selected `opening_hours`. Absent means not collected; optional values may be empty.","type":"string"},"zip_code":{"description":"Present when the campaign selected `zip_code`. Absent means not collected; optional values may be empty.","type":"string"}},"required":["place_id"],"type":"object"},"CreateBulkRunRequest":{"properties":{"field_ids":{"description":"place-field IDs to return; default the standard set","items":{"type":"string"},"type":["null","array"]},"gl":{"description":"country code to search in; default the country the queries name","type":"string"},"lang":{"type":"string"},"limit":{"description":"most leads to deliver across all queries","type":"integer"},"name":{"type":"string"},"qualifier":{"description":"same shape as a campaign's: deliver and charge only leads with any/all of these channels"},"queries":{"description":"1-1000 search queries, each as typed into Google Maps","items":{"type":"string"},"type":["null","array"]}},"required":["queries","limit"],"type":"object"},"CreateCampaignRequest":{"additionalProperties":false,"properties":{"ad_intelligence":{"description":"Collect advertising intelligence.","type":"boolean"},"enrich_website":{"description":"Collect business website metadata and contacts.","type":"boolean"},"exclude_aggregators":{"description":"Exclude directory and aggregator listings.","type":"boolean"},"extract_emails":{"description":"Discover email addresses on the business website.","type":"boolean"},"fields":{"description":"Place-field IDs from GET /place-fields. Omitted uses the default selection. Selected fields determine sparse result properties and enrichment.","items":{"type":"string"},"type":["null","array"]},"generate_icebreakers":{"description":"Generate an outreach icebreaker for each delivered business.","type":"boolean"},"gl":{"description":"Google country code; explicit region overrides prompt inference.","type":"string"},"lang":{"description":"Google language code; explicit language overrides prompt inference.","type":"string"},"max_photos":{"description":"Maximum photos per business; -1 disables photos, zero uses the default, maximum 5000.","maximum":5000,"minimum":-1,"type":"integer"},"max_reviews":{"description":"Maximum reviews per business; zero uses the default.","maximum":300,"minimum":0,"type":"integer"},"name":{"description":"Optional campaign name; otherwise derived from the prompt.","type":"string"},"prompt":{"description":"Natural-language business search; required. Creates a draft without starting extraction.","minLength":1,"type":"string"},"qualifier":{"additionalProperties":false,"description":"Require any or all selected contact channels. Use either any or all, at most five: phone, email, whatsapp, website, social. Null disables qualification. Channels are plan-gated at run; only qualified delivered leads are charged.","properties":{"all":{"items":{"type":"string"},"type":["null","array"]},"any":{"items":{"type":"string"},"type":["null","array"]}},"type":["null","object"]},"reviews_breakdown":{"description":"Collect review counts per score.","type":"boolean"},"target_count":{"description":"Requested delivered leads. API keys must target 1 through the configured beta cap; omitted uses the parsed prompt.","maximum":500,"minimum":1,"type":"integer"},"verify_emails":{"description":"Verify discovered email addresses; charged only when delivered.","type":"boolean"},"waterfall_emails":{"description":"Enable additional email discovery providers.","type":"boolean"}},"required":["prompt"],"type":"object"},"Credits":{"properties":{"balance":{"type":"integer"},"monthly_allowance":{"type":"integer"},"plan":{"type":"string"},"reset_at":{"type":["null","string"]}},"required":["balance","monthly_allowance","plan","reset_at"],"type":"object"},"ETA":{"properties":{"high_seconds":{"type":"integer"},"low_seconds":{"type":"integer"}},"required":["low_seconds","high_seconds"],"type":"object"},"EnrichLeadsRequest":{"additionalProperties":false,"properties":{"ai_ask":{"description":"Optional custom research questions for the ai_research step; omitted or empty keeps the campaign's own questions.","items":{"type":"string"},"type":["null","array"]},"place_ids":{"description":"Required: 1 through 25 distinct Google place IDs from this campaign's saved results.","items":{"type":"string"},"maxItems":25,"minItems":1,"type":["null","array"]},"steps":{"description":"Required: at least one distinct enrichment step. Built-in step IDs: website, verify_emails, verify_whatsapp, reviews_breakdown, waterfall_emails, ad_intelligence, analyze_vulnerabilities, analyze_reputation, web_results, classify_chains, generate_icebreakers, google_profile, deep_review_harvest, ai_research, ai_ask. Registered plugins use plugin:\u003cname\u003e; some steps are plan-gated.","items":{"description":"Built-in step IDs: website, verify_emails, verify_whatsapp, reviews_breakdown, waterfall_emails, ad_intelligence, analyze_vulnerabilities, analyze_reputation, web_results, classify_chains, generate_icebreakers, google_profile, deep_review_harvest, ai_research, ai_ask. Registered plugins use plugin:\u003cname\u003e; some steps are plan-gated.","type":"string"},"minItems":1,"type":["null","array"]}},"required":["place_ids","steps"],"type":"object"},"EnrichLeadsResponse":{"properties":{"charged":{"description":"Sum of the credits charged for delivered outputs across these leads.","type":"integer"},"data":{"items":{"$ref":"#/components/schemas/EnrichedLead"},"type":["null","array"]}},"required":["data","charged"],"type":"object"},"EnrichStep":{"properties":{"found":{"description":"This execution delivered usable output; cached data alone is not charged.","type":"boolean"},"own_key":{"type":"boolean"},"ran":{"type":"boolean"},"review_pages":{"type":"integer"},"skipped":{"type":"string"},"step":{"type":"string"}},"required":["step","ran","found"],"type":"object"},"EnrichedLead":{"properties":{"charged":{"type":"integer"},"error":{"type":"string"},"ok":{"type":"boolean"},"place_id":{"type":"string"},"steps":{"items":{"$ref":"#/components/schemas/EnrichStep"},"type":["null","array"]}},"required":["place_id","ok","steps","charged"],"type":"object"},"Error":{"properties":{"error":{"$ref":"#/components/schemas/ErrorDetail"}},"required":["error"],"type":"object"},"ErrorDetail":{"properties":{"code":{"enum":["invalid_request","unauthorized","insufficient_credits","plan_required","scope_missing","forbidden","not_found","conflict","payload_too_large","rate_limited","internal_error","idempotency_key_reused","idempotency_in_progress","concurrency_limited"],"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer"}},"required":["request_id","code","message","status"],"type":"object"},"Estimate":{"properties":{"credits":{"$ref":"#/components/schemas/EstimateCredits"},"eta":{"$ref":"#/components/schemas/ETA"},"target_count":{"type":"integer"}},"required":["target_count","credits","eta"],"type":"object"},"EstimateCredits":{"properties":{"flat":{"type":"integer"},"lines":{"items":{"$ref":"#/components/schemas/EstimateLine"},"type":["null","array"]},"per_result":{"type":"integer"},"total":{"type":"integer"}},"required":["flat","per_result","total","lines"],"type":"object"},"EstimateLine":{"properties":{"credits":{"type":"integer"},"key":{"type":"string"},"per":{"enum":["result","run"],"type":"string"}},"required":["key","credits","per"],"type":"object"},"EstimateRequest":{"additionalProperties":true,"properties":{"action":{"default":"campaign","description":"Action to quote: campaign (default), bulk, leads, enrichment, reviews, website, grid. This shared estimate endpoint reserves no credits.","enum":["campaign","bulk","leads","enrichment","reviews","website","grid"],"type":"string"},"ad_intelligence":{"description":"Optional ad_intelligence option for the shared estimate; saved source options take precedence.","type":"boolean"},"ai_ask":{"description":"Optional ai_ask option for the shared estimate; saved source options take precedence.","items":{"type":"string"},"maxItems":20,"type":["null","array"]},"ai_research":{"description":"Optional ai_research option for the shared estimate; saved source options take precedence.","type":"boolean"},"analyze_reputation":{"description":"Optional analyze_reputation option for the shared estimate; saved source options take precedence.","type":"boolean"},"analyze_vulnerabilities":{"description":"Optional analyze_vulnerabilities option for the shared estimate; saved source options take precedence.","type":"boolean"},"bulk_id":{"description":"Optional bulk_id option for the shared estimate; saved source options take precedence.","type":"string"},"campaign_id":{"description":"Quote saved campaign options and intent; target_count may override the saved target.","type":"string"},"cap_to_balance":{"description":"Optional cap_to_balance option for the shared estimate; saved source options take precedence.","type":"boolean"},"classify_chains":{"description":"Optional classify_chains option for the shared estimate; saved source options take precedence.","type":"boolean"},"count":{"description":"Volume to quote, 0 through 100000.","maximum":100000,"minimum":0,"type":"integer"},"dimension":{"description":"Optional dimension option for the shared estimate; saved source options take precedence.","maximum":5,"minimum":0,"type":"integer"},"enrich_website":{"description":"Optional enrich_website option for the shared estimate; saved source options take precedence.","type":"boolean"},"enrichment_id":{"description":"Optional enrichment_id option for the shared estimate; saved source options take precedence.","type":"string"},"evaluated":{"description":"Optional evaluated option for the shared estimate; saved source options take precedence.","maximum":100000,"minimum":0,"type":"integer"},"extract_emails":{"description":"Optional extract_emails option for the shared estimate; saved source options take precedence.","type":"boolean"},"filters":{"description":"Saved search filters used for the time estimate."},"generate_icebreakers":{"description":"Optional generate_icebreakers option for the shared estimate; saved source options take precedence.","type":"boolean"},"keywords":{"description":"Optional keywords option for the shared estimate; saved source options take precedence.","maximum":3,"minimum":0,"type":"integer"},"map_pack":{"description":"Optional map_pack option for the shared estimate; saved source options take precedence.","properties":{"dimension":{"type":"integer"},"has_website":{"type":"boolean"},"limit":{"type":"integer"},"max_depth":{"type":"integer"},"min_rating":{"type":"number"},"queries":{"items":{"type":"string"},"type":["null","array"]},"query":{"type":"string"},"radius_km":{"type":"number"}},"required":["dimension","radius_km","max_depth"],"type":["null","object"]},"max_depth":{"description":"Optional max_depth option for the shared estimate; saved source options take precedence.","maximum":100,"minimum":0,"type":"integer"},"max_reviews":{"description":"Optional max_reviews option for the shared estimate; saved source options take precedence.","maximum":100000,"minimum":0,"type":"integer"},"month_runs":{"description":"Optional month_runs option for the shared estimate; saved source options take precedence.","maximum":31,"minimum":0,"type":"integer"},"plugins":{"description":"Optional plugins option for the shared estimate; saved source options take precedence.","items":{"type":"string"},"maxItems":20,"type":["null","array"]},"position":{"description":"Optional position option for the shared estimate; saved source options take precedence.","type":["null","integer"]},"prompt":{"description":"Natural-language prompt; adds the AI query flat cost when nonempty.","type":"string"},"qualifier":{"description":"Contact qualification channels (either any or all); only delivered qualifying leads are charged.","properties":{"all":{"items":{"type":"string"},"type":["null","array"]},"any":{"items":{"type":"string"},"type":["null","array"]}},"type":["null","object"]},"query_count":{"description":"Optional query_count option for the shared estimate; saved source options take precedence.","maximum":100000,"minimum":0,"type":"integer"},"resume":{"description":"Optional resume option for the shared estimate; saved source options take precedence.","type":"boolean"},"reviews_breakdown":{"description":"Optional reviews_breakdown option for the shared estimate; saved source options take precedence.","type":"boolean"},"running":{"description":"Optional running option for the shared estimate; saved source options take precedence.","type":"boolean"},"steps":{"description":"Optional steps option for the shared estimate; saved source options take precedence.","items":{"type":"string"},"maxItems":50,"type":["null","array"]},"target_count":{"description":"Target volume, 0 through 100000; used when count is omitted.","maximum":100000,"minimum":0,"type":"integer"},"verify_emails":{"description":"Optional verify_emails option for the shared estimate; saved source options take precedence.","type":"boolean"},"verify_whatsapp":{"description":"Optional verify_whatsapp option for the shared estimate; saved source options take precedence.","type":"boolean"},"waterfall_emails":{"description":"Optional waterfall_emails option for the shared estimate; saved source options take precedence.","type":"boolean"}},"type":"object"},"Export":{"description":"Flat export objects keyed by selected field IDs and custom question columns, using the same values as CSV. These differ from nested Result records.","items":{"additionalProperties":{},"type":"object"},"type":"array"},"KeyUsage":{"properties":{"credits_spent":{"type":"integer"},"failed_requests":{"type":"integer"},"key_id":{"type":"string"},"label":{"type":"string"},"prefix":{"type":"string"},"requests":{"type":"integer"},"revoked":{"type":"boolean"}},"required":["key_id","label","prefix","revoked","requests","failed_requests","credits_spent"],"type":"object"},"Language":{"properties":{"gl":{"type":"string"},"lang":{"type":"string"},"source":{"type":"string"}},"required":["lang","gl","source"],"type":"object"},"LeadPage":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Result"},"type":["null","array"]},"has_more":{"type":"boolean"},"page":{"type":"integer"},"page_size":{"type":"integer"},"total":{"type":"integer"}},"required":["data","page","page_size","total","has_more"],"type":"object"},"Links":{"properties":{"app":{"type":"string"},"export":{"type":"string"},"results":{"type":"string"},"self":{"type":"string"}},"required":["self","results","export","app"],"type":"object"},"OpenAPI":{"additionalProperties":true,"required":["openapi","info","servers","paths","components"],"type":"object"},"PlaceFields":{"properties":{"defaults":{"items":{"type":"string"},"type":["null","array"]},"fields":{"items":{"properties":{"basic":{"type":"boolean"},"column":{"type":"string"},"cost":{"type":"integer"},"default":{"type":"boolean"},"group":{"type":"string"},"id":{"type":"string"},"label":{"type":"string"},"note":{"type":"string"},"required":{"type":"boolean"},"requires_flag":{"type":"string"},"requires_plugin":{"type":"string"}},"required":["id","label","column","group","basic","default","cost"],"type":"object"},"type":["null","array"]},"groups":{"items":{"type":"string"},"type":["null","array"]}},"required":["fields","groups","defaults"],"type":"object"},"Pricing":{"properties":{"costs":{"properties":{"ai_ask":{"type":"integer"},"ai_query":{"type":"integer"},"ai_research":{"type":"integer"},"analyze_reputation":{"type":"integer"},"analyze_vulnerabilities":{"type":"integer"},"bulk_row":{"type":"integer"},"deep_review_harvest":{"type":"integer"},"generate_icebreakers":{"type":"integer"},"google_profile":{"type":"integer"},"grid_pin":{"type":"integer"},"grid_pin_deep":{"type":"integer"},"linkedin":{"type":"integer"},"place":{"type":"integer"},"plugins":{"additionalProperties":{"type":"integer"},"type":"object"},"qualifier_search":{"type":"integer"},"review_max_pages":{"type":"integer"},"review_page":{"type":"integer"},"review_page_size":{"type":"integer"},"reviews_breakdown":{"type":"integer"},"verify_emails":{"type":"integer"},"waterfall_emails":{"type":"integer"},"website_mockup":{"type":"integer"}},"required":["place","verify_emails","reviews_breakdown","review_page","deep_review_harvest","review_page_size","review_max_pages","waterfall_emails","linkedin","grid_pin","grid_pin_deep","ai_query","qualifier_search","plugins","generate_icebreakers","ai_ask","analyze_vulnerabilities","analyze_reputation","ai_research","google_profile","website_mockup","bulk_row"],"type":"object"},"current_plan":{"type":"string"},"plans":{"items":{"properties":{"annual_monthly_usd":{"type":"number"},"credits":{"type":"integer"},"id":{"type":"string"},"limits":{"properties":{"api_access":{"type":"boolean"},"api_burst_per_key":{"type":"integer"},"api_burst_per_workspace":{"type":"integer"},"api_rate_per_key":{"type":"integer"},"api_rate_per_workspace":{"type":"integer"},"capture_daily_cap":{"type":"integer"},"linkedin":{"type":"boolean"},"map_pack_max_depth":{"type":"integer"},"map_pack_max_grid":{"type":"integer"},"map_pack_max_keywords":{"type":"integer"},"max_concurrent_runs":{"type":"integer"},"qualifier_channels":{"items":{"type":"string"},"type":["null","array"]},"report_share":{"type":"boolean"},"report_white_label":{"type":"boolean"},"waterfall":{"type":"boolean"},"webhooks":{"type":"boolean"},"whatsapp_lookups_per_day":{"type":"integer"}},"required":["api_rate_per_key","api_burst_per_key","api_rate_per_workspace","api_burst_per_workspace","api_access","map_pack_max_grid","map_pack_max_keywords","map_pack_max_depth","max_concurrent_runs","whatsapp_lookups_per_day","waterfall","linkedin","webhooks","report_share","report_white_label","capture_daily_cap","qualifier_channels"],"type":"object"},"monthly_usd":{"type":"number"},"name":{"type":"string"}},"required":["id","name","monthly_usd","annual_monthly_usd","credits","limits"],"type":"object"},"type":["null","array"]},"topups":{"items":{"properties":{"credits":{"type":"integer"},"usd":{"type":"integer"}},"required":["credits","usd"],"type":"object"},"type":["null","array"]},"whatsapp_lookups_remaining":{"type":"integer"}},"required":["plans","costs","topups","current_plan","whatsapp_lookups_remaining"],"type":"object"},"Progress":{"properties":{"evaluated":{"type":"integer"},"found":{"type":"integer"},"target":{"type":"integer"}},"required":["found","evaluated","target"],"type":"object"},"Result":{"properties":{"about":{"additionalProperties":{"items":{"type":"string"},"type":["null","array"]},"description":"Present when the campaign selected `about`. Absent means not collected; optional values may be empty.","type":"object"},"action_links":{"description":"Present when the campaign selected `order_providers`. Absent means not collected; optional values may be empty.; Present when the campaign selected `booking_providers`. Absent means not collected; optional values may be empty.; Present when the campaign selected `hotel_partners`. Absent means not collected; optional values may be empty.","items":{"properties":{"google_url":{"type":"string"},"kind":{"type":"string"},"label":{"type":"string"},"official":{"type":"boolean"},"provider":{"type":"string"},"providers":{"type":"integer"},"url":{"type":"string"}},"required":["kind","url"],"type":"object"},"type":["null","array"]},"ad_intelligence":{"description":"Present when the campaign selected `ad_intelligence`. Absent means not collected; optional values may be empty."},"address":{"description":"Present when the campaign selected `address`. Absent means not collected; optional values may be empty.","type":"string"},"address_components":{"description":"Present when the campaign selected `address`. Absent means not collected; optional values may be empty.","items":{"type":"string"},"type":["null","array"]},"aggregator_signal":{"description":"Present when the campaign selected `aggregator_signal`. Absent means not collected; optional values may be empty.","properties":{"confidence":{"type":"number"},"is_aggregator":{"type":"boolean"},"matched_signals":{"items":{"type":"string"},"type":["null","array"]}},"required":["is_aggregator","confidence"],"type":["null","object"]},"ai_research":{"description":"Present when the campaign selected `ai_research`. Absent means not collected; optional values may be empty.","items":{"properties":{"answer":{"type":"string"},"boolean_val":{"type":["null","boolean"]},"confidence_score":{"type":"number"},"evidence_quote":{"type":"string"},"question":{"type":"string"},"source_url":{"type":"string"}},"required":["question","answer","confidence_score"],"type":"object"},"type":["null","array"]},"area_service":{"description":"Present when the campaign selected `area_service`. Absent means not collected; optional values may be empty.","type":"boolean"},"autosuggest_signal":{"description":"Present when the campaign selected `autosuggest_signal`. Absent means not collected; optional values may be empty.","properties":{"has_reputation_risk":{"type":"boolean"},"informational":{"items":{"type":"string"},"type":["null","array"]},"negative":{"items":{"type":"string"},"type":["null","array"]},"neutral":{"items":{"type":"string"},"type":["null","array"]},"query":{"type":"string"},"suggestion_count":{"type":"integer"},"visibility_tier":{"type":"string"}},"required":["query","suggestion_count","has_reputation_risk","visibility_tier"],"type":["null","object"]},"booking_links":{"description":"Present when the campaign selected `booking_links`. Absent means not collected; optional values may be empty.","items":{"type":"string"},"type":["null","array"]},"borough":{"description":"Present when the campaign selected `address`. Absent means not collected; optional values may be empty.","type":"string"},"business_status":{"description":"Present when the campaign selected `business_status`. Absent means not collected; optional values may be empty.","type":"string"},"categories":{"description":"Present when the campaign selected `categories`. Absent means not collected; optional values may be empty.","items":{"type":"string"},"type":["null","array"]},"categorized_photos":{"additionalProperties":{"items":{"type":"string"},"type":["null","array"]},"description":"Present when the campaign selected `photo_categories`. Absent means not collected; optional values may be empty.","type":"object"},"chain_classification":{"description":"Present when the campaign selected `chain_classification`. Absent means not collected; optional values may be empty.","properties":{"audit_status":{"type":"string"},"classification":{"type":"string"},"confidence":{"type":"number"},"estimated_stores":{"type":"integer"},"is_franchise":{"type":"boolean"},"matched_signals":{"items":{"type":"string"},"type":["null","array"]}},"required":["classification","confidence","is_franchise","estimated_stores","matched_signals","audit_status"],"type":["null","object"]},"check_in_time":{"description":"Present when the campaign selected `hotel_amenities`. Absent means not collected; optional values may be empty.","type":"string"},"check_out_time":{"description":"Present when the campaign selected `hotel_amenities`. Absent means not collected; optional values may be empty.","type":"string"},"cid":{"description":"Record metadata, independent of the selected fields.","type":"string"},"city":{"description":"Present when the campaign selected `city`. Absent means not collected; optional values may be empty.","type":"string"},"claim_url":{"description":"Present when the campaign selected `claim_url`. Absent means not collected; optional values may be empty.","type":"string"},"coordinates":{"description":"Present when the campaign selected `coordinates`. Absent means not collected; optional values may be empty.","properties":{"lat":{"type":"number"},"lng":{"type":"number"}},"required":["lat","lng"],"type":"object"},"country":{"description":"Present when the campaign selected `country`. Absent means not collected; optional values may be empty.","type":"string"},"country_code":{"description":"Present when the campaign selected `country_code`. Absent means not collected; optional values may be empty.","type":"string"},"days_since_last_gbp_post":{"description":"Present when the campaign selected `recent_posts`. Absent means not collected; optional values may be empty.","type":"integer"},"days_since_last_owner_activity":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":"integer"},"days_since_last_owner_reply":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":"integer"},"days_since_last_review":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":"integer"},"decision_makers":{"description":"Present when the campaign selected `decision_makers`. Absent means not collected; optional values may be empty.","items":{"properties":{"email":{"type":"string"},"email_status":{"type":"string"},"linkedin_url":{"type":"string"},"name":{"type":"string"},"profile_picture_url":{"type":"string"},"source":{"type":"string"},"title":{"type":"string"}},"required":["name","title"],"type":"object"},"type":["null","array"]},"description":{"description":"Present when the campaign selected `description`. Absent means not collected; optional values may be empty.","type":"string"},"editorial_summary":{"description":"Present when the campaign selected `editorial_summary`. Absent means not collected; optional values may be empty.","type":"string"},"email":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","type":"string"},"enrichment":{"description":"Only enrichment keys owned by selected field IDs are included.","properties":{"decision_makers":{"description":"Present when the campaign selected `decision_makers`. Absent means not collected; optional values may be empty.","items":{"properties":{"email":{"type":"string"},"email_status":{"type":"string"},"linkedin_url":{"type":"string"},"name":{"type":"string"},"profile_picture_url":{"type":"string"},"source":{"type":"string"},"title":{"type":"string"}},"required":["name","title"],"type":"object"},"type":["null","array"]},"domain":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"email_1":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","type":"string"},"email_1_source":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","type":"string"},"email_2":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","type":"string"},"email_2_source":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","type":"string"},"email_3":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","type":"string"},"email_3_source":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","type":"string"},"emails":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","items":{"properties":{"address":{"type":"string"},"sources":{"items":{"type":"string"},"type":["null","array"]}},"required":["address","sources"],"type":"object"},"type":["null","array"]},"facebook":{"description":"Present when the campaign selected `social_links`. Absent means not collected; optional values may be empty.","type":"string"},"favicon_url":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"fetched_at":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","type":"string"},"has_website_only_on_social":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_facebook`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_instagram`. Absent means not collected; optional values may be empty.","type":"boolean"},"instagram":{"description":"Present when the campaign selected `social_links`. Absent means not collected; optional values may be empty.","type":"string"},"is_mobile":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"boolean"},"linkedin":{"description":"Present when the campaign selected `social_links`. Absent means not collected; optional values may be empty.","type":"string"},"phone_1":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"phone_1_source":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"phone_2":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"phone_2_source":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"phone_3":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"phone_3_source":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"phone_type":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"phones":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","items":{"properties":{"calling_code":{"type":"integer"},"e164":{"type":"string"},"international":{"type":"string"},"is_mobile":{"type":"boolean"},"national":{"type":"string"},"raw":{"type":"string"},"region":{"type":"string"},"sources":{"items":{"type":"string"},"type":["null","array"]},"type":{"type":"string"},"valid":{"type":"boolean"},"whatsapp":{"properties":{"about":{"type":"string"},"actual_actors":{"type":"integer"},"business":{"properties":{"address":{"type":"string"},"categories":{"items":{"properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["name"],"type":"object"},"type":["null","array"]},"email":{"type":"string"},"hours":{"items":{"properties":{"close":{"type":"string"},"day":{"type":"string"},"mode":{"type":"string"},"open":{"type":"string"}},"required":["day"],"type":"object"},"type":["null","array"]},"hours_time_zone":{"type":"string"},"options":{"additionalProperties":{"type":"string"},"type":"object"}},"type":["null","object"]},"business_name":{"type":"string"},"cert_issued_at":{"type":["null","string"]},"cert_issuer":{"type":"string"},"cert_serial":{"minimum":0,"type":"integer"},"checked_at":{"type":"string"},"device_count":{"type":"integer"},"host_storage":{"type":"integer"},"is_business":{"type":"boolean"},"jid":{"type":"string"},"lid":{"type":"string"},"number":{"type":"string"},"phone_jid":{"type":"string"},"picture_id":{"type":"string"},"picture_url":{"type":"string"},"registered":{"type":"boolean"},"verified_level":{"type":"string"},"verified_names":{"items":{"properties":{"country":{"type":"string"},"language":{"type":"string"},"name":{"type":"string"}},"required":["name"],"type":"object"},"type":["null","array"]}},"required":["number","registered","checked_at"],"type":["null","object"]}},"required":["raw","valid"],"type":"object"},"type":["null","array"]},"secondary_websites":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_facebook`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_instagram`. Absent means not collected; optional values may be empty.","items":{"properties":{"fetched_at":{"type":"string"},"profile_url":{"type":"string"},"source":{"type":"string"},"url":{"type":"string"}},"required":["url","source","profile_url"],"type":"object"},"type":["null","array"]},"tech_stack":{"description":"Present when the campaign selected `tech_stack`. Absent means not collected; optional values may be empty.","properties":{"analytics":{"items":{"type":"string"},"type":["null","array"]},"booking_system":{"type":"string"},"categories":{"additionalProperties":{"items":{"type":"string"},"type":["null","array"]},"type":"object"},"cms":{"type":"string"},"detected":{"items":{"properties":{"category":{"type":"string"},"name":{"type":"string"}},"required":["name","category"],"type":"object"},"type":["null","array"]},"ecommerce":{"type":"string"},"has_google_analytics":{"type":"boolean"},"has_google_tag_manager":{"type":"boolean"},"has_meta_pixel":{"type":"boolean"},"live_chat":{"type":"string"},"marketing":{"items":{"type":"string"},"type":["null","array"]},"pos_ordering":{"type":"string"}},"required":["detected","categories","has_meta_pixel","has_google_tag_manager","has_google_analytics"],"type":["null","object"]},"tiktok":{"description":"Present when the campaign selected `social_links`. Absent means not collected; optional values may be empty.","type":"string"},"twitter":{"description":"Present when the campaign selected `social_links`. Absent means not collected; optional values may be empty.","type":"string"},"verified_emails":{"description":"Present when the campaign selected `email_verified`. Absent means not collected; optional values may be empty.","items":{"properties":{"checked_by":{"type":"string"},"confidence_score":{"type":"integer"},"details":{"type":"string"},"email":{"type":"string"},"has_mx":{"type":"boolean"},"is_catch_all":{"type":"boolean"},"is_disposable":{"type":"boolean"},"is_role":{"type":"boolean"},"mx_provider":{"type":"string"},"mx_records":{"items":{"type":"string"},"type":["null","array"]},"risk_level":{"type":"string"},"smtp_check_passed":{"type":"boolean"},"smtp_response":{"type":"string"},"status":{"type":"string"}},"required":["email","status","is_disposable","is_role","has_mx","is_catch_all","confidence_score","risk_level","smtp_check_passed"],"type":"object"},"type":["null","array"]},"waterfall_contacts":{"description":"Present when the campaign selected `decision_makers`. Absent means not collected; optional values may be empty.","properties":{"contacts":{"items":{"properties":{"confidence_score":{"type":"integer"},"decision_maker":{"type":"string"},"email":{"type":"string"},"profile_picture_url":{"type":"string"},"profile_url":{"type":"string"},"source":{"type":"string"},"title":{"type":"string"},"verification":{"properties":{"checked_by":{"type":"string"},"confidence_score":{"type":"integer"},"details":{"type":"string"},"email":{"type":"string"},"has_mx":{"type":"boolean"},"is_catch_all":{"type":"boolean"},"is_disposable":{"type":"boolean"},"is_role":{"type":"boolean"},"mx_provider":{"type":"string"},"mx_records":{"items":{"type":"string"},"type":["null","array"]},"risk_level":{"type":"string"},"smtp_check_passed":{"type":"boolean"},"smtp_response":{"type":"string"},"status":{"type":"string"}},"required":["email","status","is_disposable","is_role","has_mx","is_catch_all","confidence_score","risk_level","smtp_check_passed"],"type":"object"}},"required":["email","source","confidence_score","verification"],"type":"object"},"type":["null","array"]},"discovery_method":{"type":"string"},"domain":{"type":"string"},"primary_email":{"type":"string"},"total_emails_found":{"type":"integer"}},"required":["domain","total_emails_found","primary_email","contacts","discovery_method"],"type":["null","object"]},"website_canonical_url":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"website_description":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"website_generator":{"description":"Present when the campaign selected `tech_stack`. Absent means not collected; optional values may be empty.","type":"string"},"website_has_fb_pixel":{"description":"Present when the campaign selected `tech_stack`. Absent means not collected; optional values may be empty.","type":"boolean"},"website_has_gtm":{"description":"Present when the campaign selected `tech_stack`. Absent means not collected; optional values may be empty.","type":"boolean"},"website_has_mobile_viewport":{"description":"Present when the campaign selected `tech_stack`. Absent means not collected; optional values may be empty.","type":"boolean"},"website_keywords":{"description":"Present when the campaign selected `tech_stack`. Absent means not collected; optional values may be empty.","type":"string"},"website_lang":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"website_og_image":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"website_title":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"whatsapp_business_name":{"description":"Present when the campaign selected `whatsapp_number`. Absent means not collected; optional values may be empty.","type":"string"},"whatsapp_is_business":{"description":"Present when the campaign selected `whatsapp_number`. Absent means not collected; optional values may be empty.","type":"boolean"},"whatsapp_number":{"description":"Present when the campaign selected `whatsapp_number`. Absent means not collected; optional values may be empty.","type":"string"},"whatsapp_profile":{"description":"Present when the campaign selected `whatsapp_number`. Absent means not collected; optional values may be empty.","properties":{"about":{"type":"string"},"actual_actors":{"type":"integer"},"business":{"properties":{"address":{"type":"string"},"categories":{"items":{"properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["name"],"type":"object"},"type":["null","array"]},"email":{"type":"string"},"hours":{"items":{"properties":{"close":{"type":"string"},"day":{"type":"string"},"mode":{"type":"string"},"open":{"type":"string"}},"required":["day"],"type":"object"},"type":["null","array"]},"hours_time_zone":{"type":"string"},"options":{"additionalProperties":{"type":"string"},"type":"object"}},"type":["null","object"]},"business_name":{"type":"string"},"cert_issued_at":{"type":["null","string"]},"cert_issuer":{"type":"string"},"cert_serial":{"minimum":0,"type":"integer"},"checked_at":{"type":"string"},"device_count":{"type":"integer"},"host_storage":{"type":"integer"},"is_business":{"type":"boolean"},"jid":{"type":"string"},"lid":{"type":"string"},"number":{"type":"string"},"phone_jid":{"type":"string"},"picture_id":{"type":"string"},"picture_url":{"type":"string"},"registered":{"type":"boolean"},"verified_level":{"type":"string"},"verified_names":{"items":{"properties":{"country":{"type":"string"},"language":{"type":"string"},"name":{"type":"string"}},"required":["name"],"type":"object"},"type":["null","array"]}},"required":["number","registered","checked_at"],"type":["null","object"]},"whatsapp_source":{"description":"Present when the campaign selected `whatsapp_number`. Absent means not collected; optional values may be empty.","type":"string"},"whatsapp_url":{"description":"Present when the campaign selected `whatsapp_number`. Absent means not collected; optional values may be empty.","type":"string"},"youtube":{"description":"Present when the campaign selected `social_links`. Absent means not collected; optional values may be empty.","type":"string"}},"type":"object"},"favicon_url":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"firmographics":{"description":"Present when the campaign selected `decision_makers`. Absent means not collected; optional values may be empty.","properties":{"annual_revenue_amount":{"type":"number"},"annual_revenue_currency":{"type":"string"},"annual_revenue_unit":{"type":"string"},"employee_count":{"type":"integer"},"employee_count_range":{"type":"string"},"source":{"type":"string"}},"required":["source"],"type":["null","object"]},"fuel_prices":{"description":"Present when the campaign selected `fuel_prices`. Absent means not collected; optional values may be empty.","items":{"properties":{"amount":{"type":"number"},"currency":{"type":"string"},"fuel":{"type":"string"},"price":{"type":"string"},"unit":{"type":"string"},"updated_at":{"type":["null","string"]}},"required":["fuel","price","amount"],"type":"object"},"type":["null","array"]},"google_id":{"description":"Present when the campaign selected `google_id`. Absent means not collected; optional values may be empty.","type":"string"},"hotel_amenities":{"description":"Present when the campaign selected `hotel_amenities`. Absent means not collected; optional values may be empty.","items":{"type":"string"},"type":["null","array"]},"hotel_amenities_not_offered":{"description":"Present when the campaign selected `hotel_amenities`. Absent means not collected; optional values may be empty.","items":{"type":"string"},"type":["null","array"]},"hotel_class":{"description":"Present when the campaign selected `hotel_class`. Absent means not collected; optional values may be empty.","type":"string"},"hotel_rate":{"description":"Present when the campaign selected `hotel_rate`. Absent means not collected; optional values may be empty.","properties":{"check_in":{"type":"string"},"check_out":{"type":"string"},"price":{"type":"string"},"stars":{"type":"string"}},"required":["check_in","check_out","price"],"type":["null","object"]},"icebreaker":{"description":"Present when the campaign selected `icebreaker`. Absent means not collected; optional values may be empty.","properties":{"audit_status":{"type":"string"},"cold_call_script":{"type":"string"},"email_opener":{"type":"string"},"opportunity_hook":{"type":"string"},"outreach_pack":{"properties":{"cold_call_gatekeeper":{"type":"string"},"cold_call_objections":{"additionalProperties":{"type":"string"},"type":"object"},"cold_call_opening":{"type":"string"},"email_touch1_body":{"type":"string"},"email_touch1_subject":{"type":"string"},"email_touch2_body":{"type":"string"},"email_touch2_subject":{"type":"string"},"linkedin_inmail_note":{"type":"string"},"whatsapp_message":{"type":"string"}},"required":["email_touch1_subject","email_touch1_body","email_touch2_subject","email_touch2_body","whatsapp_message","cold_call_gatekeeper","cold_call_opening","linkedin_inmail_note"],"type":["null","object"]},"praise_point":{"type":"string"}},"required":["email_opener","cold_call_script","praise_point","opportunity_hook","audit_status"],"type":["null","object"]},"identity_badges":{"description":"Present when the campaign selected `identity_badges`. Absent means not collected; optional values may be empty.","items":{"type":"string"},"type":["null","array"]},"is_mobile":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"boolean"},"kgmid":{"description":"Present when the campaign selected `google_id`. Absent means not collected; optional values may be empty.","type":"string"},"lang":{"description":"Record metadata, independent of the selected fields.","type":"string"},"last_gbp_post_date":{"description":"Present when the campaign selected `recent_posts`. Absent means not collected; optional values may be empty.","type":["null","string"]},"last_owner_activity_date":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":["null","string"]},"last_owner_reply_date":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":["null","string"]},"last_review_date":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":["null","string"]},"lead_opportunity":{"description":"Present when the campaign selected `lead_opportunity`. Absent means not collected; optional values may be empty.","properties":{"grade":{"type":"string"},"opportunity_signals":{"items":{"type":"string"},"type":["null","array"]},"priority":{"type":"string"},"recommended_pitches":{"items":{"type":"string"},"type":["null","array"]},"score":{"type":"integer"},"version":{"type":"integer"}},"required":["score","grade","priority","opportunity_signals","recommended_pitches"],"type":["null","object"]},"live_busyness":{"description":"Present when the campaign selected `popular_times`. Absent means not collected; optional values may be empty.","properties":{"day":{"type":"string"},"hour":{"type":"integer"},"label":{"type":"string"},"percentage":{"type":"integer"}},"required":["hour","percentage"],"type":["null","object"]},"located_in":{"description":"Present when the campaign selected `located_in`. Absent means not collected; optional values may be empty.","type":"string"},"logo":{"description":"Present when the campaign selected `logo`. Absent means not collected; optional values may be empty.","type":"string"},"menu":{"description":"Present when the campaign selected `menu`. Absent means not collected; optional values may be empty.","properties":{"categories":{"items":{"properties":{"items":{"items":{"properties":{"description":{"type":"string"},"name":{"type":"string"},"photo_urls":{"items":{"type":"string"},"type":["null","array"]},"price":{"type":"string"}},"required":["name","description","price","photo_urls"],"type":"object"},"type":["null","array"]},"name":{"type":"string"}},"required":["name","items"],"type":"object"},"type":["null","array"]},"menu_link":{"type":"string"}},"required":["menu_link","categories"],"type":["null","object"]},"menu_link":{"description":"Present when the campaign selected `menu_link`. Absent means not collected; optional values may be empty.","type":"string"},"name":{"description":"Present when the campaign selected `name`. Absent means not collected; optional values may be empty.","type":"string"},"opening_hours":{"description":"Present when the campaign selected `opening_hours`. Absent means not collected; optional values may be empty.","properties":{"next_opening":{"type":"string"},"open_now":{"type":"boolean"},"periods":{"items":{"properties":{"close_day":{"type":"integer"},"close_time":{"type":"string"},"open_day":{"type":"integer"},"open_time":{"type":"string"}},"required":["open_day","open_time","close_day","close_time"],"type":"object"},"type":["null","array"]},"weekday_text":{"items":{"type":"string"},"type":["null","array"]}},"required":["weekday_text","periods","open_now","next_opening"],"type":["null","object"]},"order_links":{"description":"Present when the campaign selected `order_links`. Absent means not collected; optional values may be empty.","items":{"type":"string"},"type":["null","array"]},"outreach_score":{"description":"Present when the campaign selected `outreach_score`. Absent means not collected; optional values may be empty.","properties":{"decision_maker_tier":{"type":"string"},"grade":{"type":"string"},"reasoning":{"items":{"type":"string"},"type":["null","array"]},"recommended_channel":{"type":"string"},"score":{"type":"integer"},"status":{"type":"string"}},"required":["score","grade","decision_maker_tier","recommended_channel","reasoning"],"type":["null","object"]},"owner_avatar_url":{"description":"Present when the campaign selected `owner_link`. Absent means not collected; optional values may be empty.","type":"string"},"owner_id":{"description":"Present when the campaign selected `owner_title`. Absent means not collected; optional values may be empty.","type":"string"},"owner_link":{"description":"Present when the campaign selected `owner_link`. Absent means not collected; optional values may be empty.","type":"string"},"owner_title":{"description":"Present when the campaign selected `owner_title`. Absent means not collected; optional values may be empty.","type":"string"},"people_also_search_for":{"description":"Present when the campaign selected `people_also_search_for`. Absent means not collected; optional values may be empty.","items":{"properties":{"categories":{"items":{"type":"string"},"type":["null","array"]},"category":{"type":"string"},"distance":{"type":"string"},"hotel":{"type":"boolean"},"kgmid":{"type":"string"},"lat":{"type":"number"},"lng":{"type":"number"},"name":{"type":"string"},"note":{"type":"string"},"place_id":{"type":"string"},"price":{"type":"string"},"rating":{"type":"number"},"review_count":{"type":"integer"},"thumbnail":{"type":"string"}},"required":["place_id","name","rating","review_count","category","thumbnail"],"type":"object"},"type":["null","array"]},"phone":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"phone_type":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"photo_categories":{"description":"Present when the campaign selected `photo_categories`. Absent means not collected; optional values may be empty.","items":{"properties":{"at_least":{"type":"boolean"},"count":{"type":"integer"},"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name","count"],"type":"object"},"type":["null","array"]},"photo_items":{"description":"Present when the campaign selected `photo_urls`. Absent means not collected; optional values may be empty.","items":{"properties":{"categories":{"items":{"type":"string"},"type":["null","array"]},"height":{"type":"integer"},"id":{"type":"string"},"kind":{"type":"string"},"lat":{"type":"number"},"lng":{"type":"number"},"original_url":{"type":"string"},"source":{"type":"string"},"source_tag":{"type":"string"},"uploaded_at":{"type":["null","string"]},"url":{"type":"string"},"video_duration_ms":{"type":"integer"},"video_url":{"type":"string"},"width":{"type":"integer"}},"required":["id","url","kind","source"],"type":"object"},"type":["null","array"]},"photos":{"description":"Present when the campaign selected `photo_urls`. Absent means not collected; optional values may be empty.","items":{"type":"string"},"type":["null","array"]},"photos_count":{"description":"Present when the campaign selected `photos_count`. Absent means not collected; optional values may be empty.","type":"integer"},"place_id":{"description":"Record metadata, independent of the selected fields.","type":"string"},"plugin_errors":{"additionalProperties":{"type":"string"},"description":"Present when the campaign selected `plugin_google_serp`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_facebook`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_instagram`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_tiktok`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_x_twitter`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_youtube`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_2gis`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_npi`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_glassdoor`. Absent means not collected; optional values may be empty.","type":"object"},"plugins":{"description":"Source-specific data, present when the corresponding plugin field was selected.","properties":{"2gis":{"description":"Present when the campaign selected `plugin_2gis`. Absent means not collected; optional values may be empty."},"facebook":{"description":"Present when the campaign selected `plugin_facebook`. Absent means not collected; optional values may be empty."},"glassdoor":{"description":"Present when the campaign selected `plugin_glassdoor`. Absent means not collected; optional values may be empty."},"google_serp":{"description":"Present when the campaign selected `plugin_google_serp`. Absent means not collected; optional values may be empty."},"instagram":{"description":"Present when the campaign selected `plugin_instagram`. Absent means not collected; optional values may be empty."},"linkedin":{"description":"Present when the campaign selected `decision_makers`. Absent means not collected; optional values may be empty."},"npi":{"description":"Present when the campaign selected `plugin_npi`. Absent means not collected; optional values may be empty."},"tiktok":{"description":"Present when the campaign selected `plugin_tiktok`. Absent means not collected; optional values may be empty."},"x_twitter":{"description":"Present when the campaign selected `plugin_x_twitter`. Absent means not collected; optional values may be empty."},"youtube":{"description":"Present when the campaign selected `plugin_youtube`. Absent means not collected; optional values may be empty."}},"type":"object"},"plus_code":{"description":"Present when the campaign selected `plus_code`. Absent means not collected; optional values may be empty.","type":"string"},"popular_times":{"description":"Present when the campaign selected `popular_times`. Absent means not collected; optional values may be empty.","items":{"properties":{"day":{"type":"string"},"hourly_busy":{"items":{"properties":{"busyness":{"type":"string"},"hour":{"type":"integer"},"percentage":{"type":"integer"},"time_label":{"type":"string"},"wait_label":{"type":"string"},"wait_times_msg":{"type":"string"}},"required":["hour","percentage","time_label","wait_times_msg"],"type":"object"},"type":["null","array"]},"peak_wait":{"type":"string"}},"required":["day","hourly_busy"],"type":"object"},"type":["null","array"]},"price_level":{"description":"Present when the campaign selected `price_level`. Absent means not collected; optional values may be empty.","type":"string"},"primary_type":{"description":"Present when the campaign selected `primary_type`. Absent means not collected; optional values may be empty.","type":"string"},"rating":{"description":"Present when the campaign selected `rating`. Absent means not collected; optional values may be empty.","type":"number"},"recent_posts":{"description":"Present when the campaign selected `recent_posts`. Absent means not collected; optional values may be empty.","items":{"properties":{"created_at":{"type":["null","string"]},"cta_label":{"type":"string"},"cta_target":{"type":"string"},"full_text":{"type":"string"},"image_url":{"type":"string"},"language":{"type":"string"},"post_id":{"type":"string"},"post_type":{"type":"integer"},"post_url":{"type":"string"},"relative_time":{"type":"string"},"snippet_text":{"type":"string"},"thumbnail_url":{"type":"string"}},"required":["post_id","post_type"],"type":"object"},"type":["null","array"]},"replied_review_count":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":"integer"},"reservation_link":{"description":"Present when the campaign selected `reservation_link`. Absent means not collected; optional values may be empty.","type":"string"},"review_count":{"description":"Present when the campaign selected `review_count`. Absent means not collected; optional values may be empty.","type":"integer"},"review_highlights":{"description":"Present when the campaign selected `review_highlights`. Absent means not collected; optional values may be empty.","items":{"properties":{"bold":{"items":{"type":"string"},"type":["null","array"]},"contributor_url":{"type":"string"},"rating":{"type":"integer"},"review_id":{"type":"string"},"text":{"type":"string"}},"required":["text"],"type":"object"},"type":["null","array"]},"review_response_rate":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":["null","number"]},"review_velocity_30_days":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":"integer"},"reviews_fetched":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":"boolean"},"reviews_link":{"description":"Present when the campaign selected `reviews_link`. Absent means not collected; optional values may be empty.","type":"string"},"reviews_per_score":{"additionalProperties":{"type":"integer"},"description":"Present when the campaign selected `reviews_per_score`. Absent means not collected; optional values may be empty.","type":"object"},"reviews_tags":{"description":"Present when the campaign selected `reviews_tags`. Absent means not collected; optional values may be empty.","items":{"properties":{"count":{"type":"integer"},"title":{"type":"string"},"topic_id":{"type":"string"}},"required":["title","count"],"type":"object"},"type":["null","array"]},"reviews_total_saved":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":"integer"},"scraped_at":{"description":"Record metadata, independent of the selected fields.","type":"string"},"search_rank_position":{"description":"Present when the campaign selected `search_rank_position`. Absent means not collected; optional values may be empty.","type":"integer"},"social_links":{"description":"Present when the campaign selected `social_links`. Absent means not collected; optional values may be empty.","items":{"properties":{"platform":{"type":"string"},"url":{"type":"string"}},"required":["platform","url"],"type":"object"},"type":["null","array"]},"special_hours":{"description":"Present when the campaign selected `special_hours`. Absent means not collected; optional values may be empty.","items":{"properties":{"days":{"items":{"properties":{"date":{"type":"string"},"day":{"type":"string"},"hours":{"type":"string"}},"required":["day","hours"],"type":"object"},"type":["null","array"]},"name":{"type":"string"}},"required":["name","days"],"type":"object"},"type":["null","array"]},"state":{"description":"Present when the campaign selected `state`. Absent means not collected; optional values may be empty.","type":"string"},"state_code":{"description":"Present when the campaign selected `state_code`. Absent means not collected; optional values may be empty.","type":"string"},"street":{"description":"Present when the campaign selected `street`. Absent means not collected; optional values may be empty.","type":"string"},"street_view":{"description":"Present when the campaign selected `photo_urls`. Absent means not collected; optional values may be empty.","type":"string"},"tagline":{"description":"Present when the campaign selected `tagline`. Absent means not collected; optional values may be empty.","type":"string"},"time_zone":{"description":"Present when the campaign selected `opening_hours`. Absent means not collected; optional values may be empty.","type":"string"},"transit_nearby":{"description":"Present when the campaign selected `transit_nearby`. Absent means not collected; optional values may be empty.","type":"boolean"},"typical_time_spent":{"description":"Present when the campaign selected `opening_hours`. Absent means not collected; optional values may be empty.","type":"string"},"unclaimed":{"description":"Present when the campaign selected `claim_url`. Absent means not collected; optional values may be empty.","type":"boolean"},"unformatted_phone":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"verified":{"description":"Present when the campaign selected `verified`. Absent means not collected; optional values may be empty.","type":"boolean"},"vulnerability_radar":{"description":"Present when the campaign selected `vulnerability_radar`. Absent means not collected; optional values may be empty.","properties":{"audit_status":{"type":"string"},"lowest_reviews_analyzed":{"type":"integer"},"outreach_hooks":{"items":{"type":"string"},"type":["null","array"]},"pain_points":{"items":{"properties":{"category":{"type":"string"},"description":{"type":"string"},"frequency":{"type":"integer"},"sample_quote":{"type":"string"}},"required":["category","description","frequency","sample_quote"],"type":"object"},"type":["null","array"]},"severity":{"type":"string"},"vulnerability_score":{"type":"integer"}},"required":["lowest_reviews_analyzed","vulnerability_score","severity","pain_points","outreach_hooks","audit_status"],"type":["null","object"]},"web_results":{"description":"Present when the campaign selected `web_results`. Absent means not collected; optional values may be empty.","items":{"properties":{"favicon":{"type":"string"},"snippet":{"type":"string"},"source":{"type":"string"},"title":{"type":"string"},"url":{"type":"string"}},"required":["title","url","snippet"],"type":"object"},"type":["null","array"]},"website":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"whatsapp_number":{"description":"Present when the campaign selected `whatsapp_number`. Absent means not collected; optional values may be empty.","type":"string"},"working_hours_csv_compatible":{"description":"Present when the campaign selected `opening_hours`. Absent means not collected; optional values may be empty.","type":"string"},"zip_code":{"description":"Present when the campaign selected `zip_code`. Absent means not collected; optional values may be empty.","type":"string"}},"required":["place_id"],"type":"object"},"ResultDetail":{"properties":{"about":{"additionalProperties":{"items":{"type":"string"},"type":["null","array"]},"description":"Present when the campaign selected `about`. Absent means not collected; optional values may be empty.","type":"object"},"action_links":{"description":"Present when the campaign selected `order_providers`. Absent means not collected; optional values may be empty.; Present when the campaign selected `booking_providers`. Absent means not collected; optional values may be empty.; Present when the campaign selected `hotel_partners`. Absent means not collected; optional values may be empty.","items":{"properties":{"google_url":{"type":"string"},"kind":{"type":"string"},"label":{"type":"string"},"official":{"type":"boolean"},"provider":{"type":"string"},"providers":{"type":"integer"},"url":{"type":"string"}},"required":["kind","url"],"type":"object"},"type":["null","array"]},"ad_intelligence":{"description":"Present when the campaign selected `ad_intelligence`. Absent means not collected; optional values may be empty."},"address":{"description":"Present when the campaign selected `address`. Absent means not collected; optional values may be empty.","type":"string"},"address_components":{"description":"Present when the campaign selected `address`. Absent means not collected; optional values may be empty.","items":{"type":"string"},"type":["null","array"]},"aggregator_signal":{"description":"Present when the campaign selected `aggregator_signal`. Absent means not collected; optional values may be empty.","properties":{"confidence":{"type":"number"},"is_aggregator":{"type":"boolean"},"matched_signals":{"items":{"type":"string"},"type":["null","array"]}},"required":["is_aggregator","confidence"],"type":["null","object"]},"ai_research":{"description":"Present when the campaign selected `ai_research`. Absent means not collected; optional values may be empty.","items":{"properties":{"answer":{"type":"string"},"boolean_val":{"type":["null","boolean"]},"confidence_score":{"type":"number"},"evidence_quote":{"type":"string"},"question":{"type":"string"},"source_url":{"type":"string"}},"required":["question","answer","confidence_score"],"type":"object"},"type":["null","array"]},"area_service":{"description":"Present when the campaign selected `area_service`. Absent means not collected; optional values may be empty.","type":"boolean"},"autosuggest_signal":{"description":"Present when the campaign selected `autosuggest_signal`. Absent means not collected; optional values may be empty.","properties":{"has_reputation_risk":{"type":"boolean"},"informational":{"items":{"type":"string"},"type":["null","array"]},"negative":{"items":{"type":"string"},"type":["null","array"]},"neutral":{"items":{"type":"string"},"type":["null","array"]},"query":{"type":"string"},"suggestion_count":{"type":"integer"},"visibility_tier":{"type":"string"}},"required":["query","suggestion_count","has_reputation_risk","visibility_tier"],"type":["null","object"]},"booking_links":{"description":"Present when the campaign selected `booking_links`. Absent means not collected; optional values may be empty.","items":{"type":"string"},"type":["null","array"]},"borough":{"description":"Present when the campaign selected `address`. Absent means not collected; optional values may be empty.","type":"string"},"business_status":{"description":"Present when the campaign selected `business_status`. Absent means not collected; optional values may be empty.","type":"string"},"campaign_id":{"description":"Campaign membership context added by the result detail handler."},"categories":{"description":"Present when the campaign selected `categories`. Absent means not collected; optional values may be empty.","items":{"type":"string"},"type":["null","array"]},"categorized_photos":{"additionalProperties":{"items":{"type":"string"},"type":["null","array"]},"description":"Present when the campaign selected `photo_categories`. Absent means not collected; optional values may be empty.","type":"object"},"chain_classification":{"description":"Present when the campaign selected `chain_classification`. Absent means not collected; optional values may be empty.","properties":{"audit_status":{"type":"string"},"classification":{"type":"string"},"confidence":{"type":"number"},"estimated_stores":{"type":"integer"},"is_franchise":{"type":"boolean"},"matched_signals":{"items":{"type":"string"},"type":["null","array"]}},"required":["classification","confidence","is_franchise","estimated_stores","matched_signals","audit_status"],"type":["null","object"]},"check_in_time":{"description":"Present when the campaign selected `hotel_amenities`. Absent means not collected; optional values may be empty.","type":"string"},"check_out_time":{"description":"Present when the campaign selected `hotel_amenities`. Absent means not collected; optional values may be empty.","type":"string"},"cid":{"description":"Record metadata, independent of the selected fields.","type":"string"},"city":{"description":"Present when the campaign selected `city`. Absent means not collected; optional values may be empty.","type":"string"},"claim_url":{"description":"Present when the campaign selected `claim_url`. Absent means not collected; optional values may be empty.","type":"string"},"collected":{"description":"Selected projection field IDs added by the result detail handler; omitted for legacy campaigns without a selection."},"coordinates":{"description":"Present when the campaign selected `coordinates`. Absent means not collected; optional values may be empty.","properties":{"lat":{"type":"number"},"lng":{"type":"number"}},"required":["lat","lng"],"type":"object"},"country":{"description":"Present when the campaign selected `country`. Absent means not collected; optional values may be empty.","type":"string"},"country_code":{"description":"Present when the campaign selected `country_code`. Absent means not collected; optional values may be empty.","type":"string"},"days_since_last_gbp_post":{"description":"Present when the campaign selected `recent_posts`. Absent means not collected; optional values may be empty.","type":"integer"},"days_since_last_owner_activity":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":"integer"},"days_since_last_owner_reply":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":"integer"},"days_since_last_review":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":"integer"},"decision_makers":{"description":"Present when the campaign selected `decision_makers`. Absent means not collected; optional values may be empty.","items":{"properties":{"email":{"type":"string"},"email_status":{"type":"string"},"linkedin_url":{"type":"string"},"name":{"type":"string"},"profile_picture_url":{"type":"string"},"source":{"type":"string"},"title":{"type":"string"}},"required":["name","title"],"type":"object"},"type":["null","array"]},"description":{"description":"Present when the campaign selected `description`. Absent means not collected; optional values may be empty.","type":"string"},"editorial_summary":{"description":"Present when the campaign selected `editorial_summary`. Absent means not collected; optional values may be empty.","type":"string"},"email":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","type":"string"},"enrichment":{"description":"Only enrichment keys owned by selected field IDs are included.","properties":{"decision_makers":{"description":"Present when the campaign selected `decision_makers`. Absent means not collected; optional values may be empty.","items":{"properties":{"email":{"type":"string"},"email_status":{"type":"string"},"linkedin_url":{"type":"string"},"name":{"type":"string"},"profile_picture_url":{"type":"string"},"source":{"type":"string"},"title":{"type":"string"}},"required":["name","title"],"type":"object"},"type":["null","array"]},"domain":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"email_1":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","type":"string"},"email_1_source":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","type":"string"},"email_2":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","type":"string"},"email_2_source":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","type":"string"},"email_3":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","type":"string"},"email_3_source":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","type":"string"},"emails":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","items":{"properties":{"address":{"type":"string"},"sources":{"items":{"type":"string"},"type":["null","array"]}},"required":["address","sources"],"type":"object"},"type":["null","array"]},"facebook":{"description":"Present when the campaign selected `social_links`. Absent means not collected; optional values may be empty.","type":"string"},"favicon_url":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"fetched_at":{"description":"Present when the campaign selected `email`. Absent means not collected; optional values may be empty.","type":"string"},"has_website_only_on_social":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_facebook`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_instagram`. Absent means not collected; optional values may be empty.","type":"boolean"},"instagram":{"description":"Present when the campaign selected `social_links`. Absent means not collected; optional values may be empty.","type":"string"},"is_mobile":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"boolean"},"linkedin":{"description":"Present when the campaign selected `social_links`. Absent means not collected; optional values may be empty.","type":"string"},"phone_1":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"phone_1_source":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"phone_2":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"phone_2_source":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"phone_3":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"phone_3_source":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"phone_type":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"phones":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","items":{"properties":{"calling_code":{"type":"integer"},"e164":{"type":"string"},"international":{"type":"string"},"is_mobile":{"type":"boolean"},"national":{"type":"string"},"raw":{"type":"string"},"region":{"type":"string"},"sources":{"items":{"type":"string"},"type":["null","array"]},"type":{"type":"string"},"valid":{"type":"boolean"},"whatsapp":{"properties":{"about":{"type":"string"},"actual_actors":{"type":"integer"},"business":{"properties":{"address":{"type":"string"},"categories":{"items":{"properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["name"],"type":"object"},"type":["null","array"]},"email":{"type":"string"},"hours":{"items":{"properties":{"close":{"type":"string"},"day":{"type":"string"},"mode":{"type":"string"},"open":{"type":"string"}},"required":["day"],"type":"object"},"type":["null","array"]},"hours_time_zone":{"type":"string"},"options":{"additionalProperties":{"type":"string"},"type":"object"}},"type":["null","object"]},"business_name":{"type":"string"},"cert_issued_at":{"type":["null","string"]},"cert_issuer":{"type":"string"},"cert_serial":{"minimum":0,"type":"integer"},"checked_at":{"type":"string"},"device_count":{"type":"integer"},"host_storage":{"type":"integer"},"is_business":{"type":"boolean"},"jid":{"type":"string"},"lid":{"type":"string"},"number":{"type":"string"},"phone_jid":{"type":"string"},"picture_id":{"type":"string"},"picture_url":{"type":"string"},"registered":{"type":"boolean"},"verified_level":{"type":"string"},"verified_names":{"items":{"properties":{"country":{"type":"string"},"language":{"type":"string"},"name":{"type":"string"}},"required":["name"],"type":"object"},"type":["null","array"]}},"required":["number","registered","checked_at"],"type":["null","object"]}},"required":["raw","valid"],"type":"object"},"type":["null","array"]},"secondary_websites":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_facebook`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_instagram`. Absent means not collected; optional values may be empty.","items":{"properties":{"fetched_at":{"type":"string"},"profile_url":{"type":"string"},"source":{"type":"string"},"url":{"type":"string"}},"required":["url","source","profile_url"],"type":"object"},"type":["null","array"]},"tech_stack":{"description":"Present when the campaign selected `tech_stack`. Absent means not collected; optional values may be empty.","properties":{"analytics":{"items":{"type":"string"},"type":["null","array"]},"booking_system":{"type":"string"},"categories":{"additionalProperties":{"items":{"type":"string"},"type":["null","array"]},"type":"object"},"cms":{"type":"string"},"detected":{"items":{"properties":{"category":{"type":"string"},"name":{"type":"string"}},"required":["name","category"],"type":"object"},"type":["null","array"]},"ecommerce":{"type":"string"},"has_google_analytics":{"type":"boolean"},"has_google_tag_manager":{"type":"boolean"},"has_meta_pixel":{"type":"boolean"},"live_chat":{"type":"string"},"marketing":{"items":{"type":"string"},"type":["null","array"]},"pos_ordering":{"type":"string"}},"required":["detected","categories","has_meta_pixel","has_google_tag_manager","has_google_analytics"],"type":["null","object"]},"tiktok":{"description":"Present when the campaign selected `social_links`. Absent means not collected; optional values may be empty.","type":"string"},"twitter":{"description":"Present when the campaign selected `social_links`. Absent means not collected; optional values may be empty.","type":"string"},"verified_emails":{"description":"Present when the campaign selected `email_verified`. Absent means not collected; optional values may be empty.","items":{"properties":{"checked_by":{"type":"string"},"confidence_score":{"type":"integer"},"details":{"type":"string"},"email":{"type":"string"},"has_mx":{"type":"boolean"},"is_catch_all":{"type":"boolean"},"is_disposable":{"type":"boolean"},"is_role":{"type":"boolean"},"mx_provider":{"type":"string"},"mx_records":{"items":{"type":"string"},"type":["null","array"]},"risk_level":{"type":"string"},"smtp_check_passed":{"type":"boolean"},"smtp_response":{"type":"string"},"status":{"type":"string"}},"required":["email","status","is_disposable","is_role","has_mx","is_catch_all","confidence_score","risk_level","smtp_check_passed"],"type":"object"},"type":["null","array"]},"waterfall_contacts":{"description":"Present when the campaign selected `decision_makers`. Absent means not collected; optional values may be empty.","properties":{"contacts":{"items":{"properties":{"confidence_score":{"type":"integer"},"decision_maker":{"type":"string"},"email":{"type":"string"},"profile_picture_url":{"type":"string"},"profile_url":{"type":"string"},"source":{"type":"string"},"title":{"type":"string"},"verification":{"properties":{"checked_by":{"type":"string"},"confidence_score":{"type":"integer"},"details":{"type":"string"},"email":{"type":"string"},"has_mx":{"type":"boolean"},"is_catch_all":{"type":"boolean"},"is_disposable":{"type":"boolean"},"is_role":{"type":"boolean"},"mx_provider":{"type":"string"},"mx_records":{"items":{"type":"string"},"type":["null","array"]},"risk_level":{"type":"string"},"smtp_check_passed":{"type":"boolean"},"smtp_response":{"type":"string"},"status":{"type":"string"}},"required":["email","status","is_disposable","is_role","has_mx","is_catch_all","confidence_score","risk_level","smtp_check_passed"],"type":"object"}},"required":["email","source","confidence_score","verification"],"type":"object"},"type":["null","array"]},"discovery_method":{"type":"string"},"domain":{"type":"string"},"primary_email":{"type":"string"},"total_emails_found":{"type":"integer"}},"required":["domain","total_emails_found","primary_email","contacts","discovery_method"],"type":["null","object"]},"website_canonical_url":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"website_description":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"website_generator":{"description":"Present when the campaign selected `tech_stack`. Absent means not collected; optional values may be empty.","type":"string"},"website_has_fb_pixel":{"description":"Present when the campaign selected `tech_stack`. Absent means not collected; optional values may be empty.","type":"boolean"},"website_has_gtm":{"description":"Present when the campaign selected `tech_stack`. Absent means not collected; optional values may be empty.","type":"boolean"},"website_has_mobile_viewport":{"description":"Present when the campaign selected `tech_stack`. Absent means not collected; optional values may be empty.","type":"boolean"},"website_keywords":{"description":"Present when the campaign selected `tech_stack`. Absent means not collected; optional values may be empty.","type":"string"},"website_lang":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"website_og_image":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"website_title":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"whatsapp_business_name":{"description":"Present when the campaign selected `whatsapp_number`. Absent means not collected; optional values may be empty.","type":"string"},"whatsapp_is_business":{"description":"Present when the campaign selected `whatsapp_number`. Absent means not collected; optional values may be empty.","type":"boolean"},"whatsapp_number":{"description":"Present when the campaign selected `whatsapp_number`. Absent means not collected; optional values may be empty.","type":"string"},"whatsapp_profile":{"description":"Present when the campaign selected `whatsapp_number`. Absent means not collected; optional values may be empty.","properties":{"about":{"type":"string"},"actual_actors":{"type":"integer"},"business":{"properties":{"address":{"type":"string"},"categories":{"items":{"properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["name"],"type":"object"},"type":["null","array"]},"email":{"type":"string"},"hours":{"items":{"properties":{"close":{"type":"string"},"day":{"type":"string"},"mode":{"type":"string"},"open":{"type":"string"}},"required":["day"],"type":"object"},"type":["null","array"]},"hours_time_zone":{"type":"string"},"options":{"additionalProperties":{"type":"string"},"type":"object"}},"type":["null","object"]},"business_name":{"type":"string"},"cert_issued_at":{"type":["null","string"]},"cert_issuer":{"type":"string"},"cert_serial":{"minimum":0,"type":"integer"},"checked_at":{"type":"string"},"device_count":{"type":"integer"},"host_storage":{"type":"integer"},"is_business":{"type":"boolean"},"jid":{"type":"string"},"lid":{"type":"string"},"number":{"type":"string"},"phone_jid":{"type":"string"},"picture_id":{"type":"string"},"picture_url":{"type":"string"},"registered":{"type":"boolean"},"verified_level":{"type":"string"},"verified_names":{"items":{"properties":{"country":{"type":"string"},"language":{"type":"string"},"name":{"type":"string"}},"required":["name"],"type":"object"},"type":["null","array"]}},"required":["number","registered","checked_at"],"type":["null","object"]},"whatsapp_source":{"description":"Present when the campaign selected `whatsapp_number`. Absent means not collected; optional values may be empty.","type":"string"},"whatsapp_url":{"description":"Present when the campaign selected `whatsapp_number`. Absent means not collected; optional values may be empty.","type":"string"},"youtube":{"description":"Present when the campaign selected `social_links`. Absent means not collected; optional values may be empty.","type":"string"}},"type":"object"},"favicon_url":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"firmographics":{"description":"Present when the campaign selected `decision_makers`. Absent means not collected; optional values may be empty.","properties":{"annual_revenue_amount":{"type":"number"},"annual_revenue_currency":{"type":"string"},"annual_revenue_unit":{"type":"string"},"employee_count":{"type":"integer"},"employee_count_range":{"type":"string"},"source":{"type":"string"}},"required":["source"],"type":["null","object"]},"fuel_prices":{"description":"Present when the campaign selected `fuel_prices`. Absent means not collected; optional values may be empty.","items":{"properties":{"amount":{"type":"number"},"currency":{"type":"string"},"fuel":{"type":"string"},"price":{"type":"string"},"unit":{"type":"string"},"updated_at":{"type":["null","string"]}},"required":["fuel","price","amount"],"type":"object"},"type":["null","array"]},"google_id":{"description":"Present when the campaign selected `google_id`. Absent means not collected; optional values may be empty.","type":"string"},"hotel_amenities":{"description":"Present when the campaign selected `hotel_amenities`. Absent means not collected; optional values may be empty.","items":{"type":"string"},"type":["null","array"]},"hotel_amenities_not_offered":{"description":"Present when the campaign selected `hotel_amenities`. Absent means not collected; optional values may be empty.","items":{"type":"string"},"type":["null","array"]},"hotel_class":{"description":"Present when the campaign selected `hotel_class`. Absent means not collected; optional values may be empty.","type":"string"},"hotel_rate":{"description":"Present when the campaign selected `hotel_rate`. Absent means not collected; optional values may be empty.","properties":{"check_in":{"type":"string"},"check_out":{"type":"string"},"price":{"type":"string"},"stars":{"type":"string"}},"required":["check_in","check_out","price"],"type":["null","object"]},"icebreaker":{"description":"Present when the campaign selected `icebreaker`. Absent means not collected; optional values may be empty.","properties":{"audit_status":{"type":"string"},"cold_call_script":{"type":"string"},"email_opener":{"type":"string"},"opportunity_hook":{"type":"string"},"outreach_pack":{"properties":{"cold_call_gatekeeper":{"type":"string"},"cold_call_objections":{"additionalProperties":{"type":"string"},"type":"object"},"cold_call_opening":{"type":"string"},"email_touch1_body":{"type":"string"},"email_touch1_subject":{"type":"string"},"email_touch2_body":{"type":"string"},"email_touch2_subject":{"type":"string"},"linkedin_inmail_note":{"type":"string"},"whatsapp_message":{"type":"string"}},"required":["email_touch1_subject","email_touch1_body","email_touch2_subject","email_touch2_body","whatsapp_message","cold_call_gatekeeper","cold_call_opening","linkedin_inmail_note"],"type":["null","object"]},"praise_point":{"type":"string"}},"required":["email_opener","cold_call_script","praise_point","opportunity_hook","audit_status"],"type":["null","object"]},"identity_badges":{"description":"Present when the campaign selected `identity_badges`. Absent means not collected; optional values may be empty.","items":{"type":"string"},"type":["null","array"]},"is_mobile":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"boolean"},"kgmid":{"description":"Present when the campaign selected `google_id`. Absent means not collected; optional values may be empty.","type":"string"},"lang":{"description":"Record metadata, independent of the selected fields.","type":"string"},"last_gbp_post_date":{"description":"Present when the campaign selected `recent_posts`. Absent means not collected; optional values may be empty.","type":["null","string"]},"last_owner_activity_date":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":["null","string"]},"last_owner_reply_date":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":["null","string"]},"last_review_date":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":["null","string"]},"lead_opportunity":{"description":"Present when the campaign selected `lead_opportunity`. Absent means not collected; optional values may be empty.","properties":{"grade":{"type":"string"},"opportunity_signals":{"items":{"type":"string"},"type":["null","array"]},"priority":{"type":"string"},"recommended_pitches":{"items":{"type":"string"},"type":["null","array"]},"score":{"type":"integer"},"version":{"type":"integer"}},"required":["score","grade","priority","opportunity_signals","recommended_pitches"],"type":["null","object"]},"live_busyness":{"description":"Present when the campaign selected `popular_times`. Absent means not collected; optional values may be empty.","properties":{"day":{"type":"string"},"hour":{"type":"integer"},"label":{"type":"string"},"percentage":{"type":"integer"}},"required":["hour","percentage"],"type":["null","object"]},"located_in":{"description":"Present when the campaign selected `located_in`. Absent means not collected; optional values may be empty.","type":"string"},"logo":{"description":"Present when the campaign selected `logo`. Absent means not collected; optional values may be empty.","type":"string"},"menu":{"description":"Present when the campaign selected `menu`. Absent means not collected; optional values may be empty.","properties":{"categories":{"items":{"properties":{"items":{"items":{"properties":{"description":{"type":"string"},"name":{"type":"string"},"photo_urls":{"items":{"type":"string"},"type":["null","array"]},"price":{"type":"string"}},"required":["name","description","price","photo_urls"],"type":"object"},"type":["null","array"]},"name":{"type":"string"}},"required":["name","items"],"type":"object"},"type":["null","array"]},"menu_link":{"type":"string"}},"required":["menu_link","categories"],"type":["null","object"]},"menu_link":{"description":"Present when the campaign selected `menu_link`. Absent means not collected; optional values may be empty.","type":"string"},"name":{"description":"Present when the campaign selected `name`. Absent means not collected; optional values may be empty.","type":"string"},"opening_hours":{"description":"Present when the campaign selected `opening_hours`. Absent means not collected; optional values may be empty.","properties":{"next_opening":{"type":"string"},"open_now":{"type":"boolean"},"periods":{"items":{"properties":{"close_day":{"type":"integer"},"close_time":{"type":"string"},"open_day":{"type":"integer"},"open_time":{"type":"string"}},"required":["open_day","open_time","close_day","close_time"],"type":"object"},"type":["null","array"]},"weekday_text":{"items":{"type":"string"},"type":["null","array"]}},"required":["weekday_text","periods","open_now","next_opening"],"type":["null","object"]},"order_links":{"description":"Present when the campaign selected `order_links`. Absent means not collected; optional values may be empty.","items":{"type":"string"},"type":["null","array"]},"outreach_score":{"description":"Present when the campaign selected `outreach_score`. Absent means not collected; optional values may be empty.","properties":{"decision_maker_tier":{"type":"string"},"grade":{"type":"string"},"reasoning":{"items":{"type":"string"},"type":["null","array"]},"recommended_channel":{"type":"string"},"score":{"type":"integer"},"status":{"type":"string"}},"required":["score","grade","decision_maker_tier","recommended_channel","reasoning"],"type":["null","object"]},"owner_avatar_url":{"description":"Present when the campaign selected `owner_link`. Absent means not collected; optional values may be empty.","type":"string"},"owner_id":{"description":"Present when the campaign selected `owner_title`. Absent means not collected; optional values may be empty.","type":"string"},"owner_link":{"description":"Present when the campaign selected `owner_link`. Absent means not collected; optional values may be empty.","type":"string"},"owner_title":{"description":"Present when the campaign selected `owner_title`. Absent means not collected; optional values may be empty.","type":"string"},"people_also_search_for":{"description":"Present when the campaign selected `people_also_search_for`. Absent means not collected; optional values may be empty.","items":{"properties":{"categories":{"items":{"type":"string"},"type":["null","array"]},"category":{"type":"string"},"distance":{"type":"string"},"hotel":{"type":"boolean"},"kgmid":{"type":"string"},"lat":{"type":"number"},"lng":{"type":"number"},"name":{"type":"string"},"note":{"type":"string"},"place_id":{"type":"string"},"price":{"type":"string"},"rating":{"type":"number"},"review_count":{"type":"integer"},"thumbnail":{"type":"string"}},"required":["place_id","name","rating","review_count","category","thumbnail"],"type":"object"},"type":["null","array"]},"phone":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"phone_type":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"photo_categories":{"description":"Present when the campaign selected `photo_categories`. Absent means not collected; optional values may be empty.","items":{"properties":{"at_least":{"type":"boolean"},"count":{"type":"integer"},"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name","count"],"type":"object"},"type":["null","array"]},"photo_items":{"description":"Present when the campaign selected `photo_urls`. Absent means not collected; optional values may be empty.","items":{"properties":{"categories":{"items":{"type":"string"},"type":["null","array"]},"height":{"type":"integer"},"id":{"type":"string"},"kind":{"type":"string"},"lat":{"type":"number"},"lng":{"type":"number"},"original_url":{"type":"string"},"source":{"type":"string"},"source_tag":{"type":"string"},"uploaded_at":{"type":["null","string"]},"url":{"type":"string"},"video_duration_ms":{"type":"integer"},"video_url":{"type":"string"},"width":{"type":"integer"}},"required":["id","url","kind","source"],"type":"object"},"type":["null","array"]},"photos":{"description":"Present when the campaign selected `photo_urls`. Absent means not collected; optional values may be empty.","items":{"type":"string"},"type":["null","array"]},"photos_count":{"description":"Present when the campaign selected `photos_count`. Absent means not collected; optional values may be empty.","type":"integer"},"place_id":{"description":"Record metadata, independent of the selected fields.","type":"string"},"plugin_errors":{"additionalProperties":{"type":"string"},"description":"Present when the campaign selected `plugin_google_serp`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_facebook`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_instagram`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_tiktok`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_x_twitter`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_youtube`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_2gis`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_npi`. Absent means not collected; optional values may be empty.; Present when the campaign selected `plugin_glassdoor`. Absent means not collected; optional values may be empty.","type":"object"},"plugins":{"description":"Source-specific data, present when the corresponding plugin field was selected.","properties":{"2gis":{"description":"Present when the campaign selected `plugin_2gis`. Absent means not collected; optional values may be empty."},"facebook":{"description":"Present when the campaign selected `plugin_facebook`. Absent means not collected; optional values may be empty."},"glassdoor":{"description":"Present when the campaign selected `plugin_glassdoor`. Absent means not collected; optional values may be empty."},"google_serp":{"description":"Present when the campaign selected `plugin_google_serp`. Absent means not collected; optional values may be empty."},"instagram":{"description":"Present when the campaign selected `plugin_instagram`. Absent means not collected; optional values may be empty."},"linkedin":{"description":"Present when the campaign selected `decision_makers`. Absent means not collected; optional values may be empty."},"npi":{"description":"Present when the campaign selected `plugin_npi`. Absent means not collected; optional values may be empty."},"tiktok":{"description":"Present when the campaign selected `plugin_tiktok`. Absent means not collected; optional values may be empty."},"x_twitter":{"description":"Present when the campaign selected `plugin_x_twitter`. Absent means not collected; optional values may be empty."},"youtube":{"description":"Present when the campaign selected `plugin_youtube`. Absent means not collected; optional values may be empty."}},"type":"object"},"plus_code":{"description":"Present when the campaign selected `plus_code`. Absent means not collected; optional values may be empty.","type":"string"},"popular_times":{"description":"Present when the campaign selected `popular_times`. Absent means not collected; optional values may be empty.","items":{"properties":{"day":{"type":"string"},"hourly_busy":{"items":{"properties":{"busyness":{"type":"string"},"hour":{"type":"integer"},"percentage":{"type":"integer"},"time_label":{"type":"string"},"wait_label":{"type":"string"},"wait_times_msg":{"type":"string"}},"required":["hour","percentage","time_label","wait_times_msg"],"type":"object"},"type":["null","array"]},"peak_wait":{"type":"string"}},"required":["day","hourly_busy"],"type":"object"},"type":["null","array"]},"price_level":{"description":"Present when the campaign selected `price_level`. Absent means not collected; optional values may be empty.","type":"string"},"primary_type":{"description":"Present when the campaign selected `primary_type`. Absent means not collected; optional values may be empty.","type":"string"},"rating":{"description":"Present when the campaign selected `rating`. Absent means not collected; optional values may be empty.","type":"number"},"recent_posts":{"description":"Present when the campaign selected `recent_posts`. Absent means not collected; optional values may be empty.","items":{"properties":{"created_at":{"type":["null","string"]},"cta_label":{"type":"string"},"cta_target":{"type":"string"},"full_text":{"type":"string"},"image_url":{"type":"string"},"language":{"type":"string"},"post_id":{"type":"string"},"post_type":{"type":"integer"},"post_url":{"type":"string"},"relative_time":{"type":"string"},"snippet_text":{"type":"string"},"thumbnail_url":{"type":"string"}},"required":["post_id","post_type"],"type":"object"},"type":["null","array"]},"replied_review_count":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":"integer"},"reservation_link":{"description":"Present when the campaign selected `reservation_link`. Absent means not collected; optional values may be empty.","type":"string"},"review_count":{"description":"Present when the campaign selected `review_count`. Absent means not collected; optional values may be empty.","type":"integer"},"review_highlights":{"description":"Present when the campaign selected `review_highlights`. Absent means not collected; optional values may be empty.","items":{"properties":{"bold":{"items":{"type":"string"},"type":["null","array"]},"contributor_url":{"type":"string"},"rating":{"type":"integer"},"review_id":{"type":"string"},"text":{"type":"string"}},"required":["text"],"type":"object"},"type":["null","array"]},"review_response_rate":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":["null","number"]},"review_velocity_30_days":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":"integer"},"reviews_fetched":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":"boolean"},"reviews_link":{"description":"Present when the campaign selected `reviews_link`. Absent means not collected; optional values may be empty.","type":"string"},"reviews_per_score":{"additionalProperties":{"type":"integer"},"description":"Present when the campaign selected `reviews_per_score`. Absent means not collected; optional values may be empty.","type":"object"},"reviews_tags":{"description":"Present when the campaign selected `reviews_tags`. Absent means not collected; optional values may be empty.","items":{"properties":{"count":{"type":"integer"},"title":{"type":"string"},"topic_id":{"type":"string"}},"required":["title","count"],"type":"object"},"type":["null","array"]},"reviews_total_saved":{"description":"Present when the campaign selected `review_activity`. Absent means not collected; optional values may be empty.","type":"integer"},"scraped_at":{"description":"Record metadata, independent of the selected fields.","type":"string"},"search_query":{"description":"Campaign search query provenance supplied by the core alongside `search_rank_position`."},"search_rank_position":{"description":"Present when the campaign selected `search_rank_position`. Absent means not collected; optional values may be empty.","type":"integer"},"social_links":{"description":"Present when the campaign selected `social_links`. Absent means not collected; optional values may be empty.","items":{"properties":{"platform":{"type":"string"},"url":{"type":"string"}},"required":["platform","url"],"type":"object"},"type":["null","array"]},"special_hours":{"description":"Present when the campaign selected `special_hours`. Absent means not collected; optional values may be empty.","items":{"properties":{"days":{"items":{"properties":{"date":{"type":"string"},"day":{"type":"string"},"hours":{"type":"string"}},"required":["day","hours"],"type":"object"},"type":["null","array"]},"name":{"type":"string"}},"required":["name","days"],"type":"object"},"type":["null","array"]},"state":{"description":"Present when the campaign selected `state`. Absent means not collected; optional values may be empty.","type":"string"},"state_code":{"description":"Present when the campaign selected `state_code`. Absent means not collected; optional values may be empty.","type":"string"},"street":{"description":"Present when the campaign selected `street`. Absent means not collected; optional values may be empty.","type":"string"},"street_view":{"description":"Present when the campaign selected `photo_urls`. Absent means not collected; optional values may be empty.","type":"string"},"tagline":{"description":"Present when the campaign selected `tagline`. Absent means not collected; optional values may be empty.","type":"string"},"time_zone":{"description":"Present when the campaign selected `opening_hours`. Absent means not collected; optional values may be empty.","type":"string"},"transit_nearby":{"description":"Present when the campaign selected `transit_nearby`. Absent means not collected; optional values may be empty.","type":"boolean"},"typical_time_spent":{"description":"Present when the campaign selected `opening_hours`. Absent means not collected; optional values may be empty.","type":"string"},"unclaimed":{"description":"Present when the campaign selected `claim_url`. Absent means not collected; optional values may be empty.","type":"boolean"},"unformatted_phone":{"description":"Present when the campaign selected `phone`. Absent means not collected; optional values may be empty.","type":"string"},"verified":{"description":"Present when the campaign selected `verified`. Absent means not collected; optional values may be empty.","type":"boolean"},"vulnerability_radar":{"description":"Present when the campaign selected `vulnerability_radar`. Absent means not collected; optional values may be empty.","properties":{"audit_status":{"type":"string"},"lowest_reviews_analyzed":{"type":"integer"},"outreach_hooks":{"items":{"type":"string"},"type":["null","array"]},"pain_points":{"items":{"properties":{"category":{"type":"string"},"description":{"type":"string"},"frequency":{"type":"integer"},"sample_quote":{"type":"string"}},"required":["category","description","frequency","sample_quote"],"type":"object"},"type":["null","array"]},"severity":{"type":"string"},"vulnerability_score":{"type":"integer"}},"required":["lowest_reviews_analyzed","vulnerability_score","severity","pain_points","outreach_hooks","audit_status"],"type":["null","object"]},"web_results":{"description":"Present when the campaign selected `web_results`. Absent means not collected; optional values may be empty.","items":{"properties":{"favicon":{"type":"string"},"snippet":{"type":"string"},"source":{"type":"string"},"title":{"type":"string"},"url":{"type":"string"}},"required":["title","url","snippet"],"type":"object"},"type":["null","array"]},"website":{"description":"Present when the campaign selected `website`. Absent means not collected; optional values may be empty.","type":"string"},"whatsapp_number":{"description":"Present when the campaign selected `whatsapp_number`. Absent means not collected; optional values may be empty.","type":"string"},"working_hours_csv_compatible":{"description":"Present when the campaign selected `opening_hours`. Absent means not collected; optional values may be empty.","type":"string"},"zip_code":{"description":"Present when the campaign selected `zip_code`. Absent means not collected; optional values may be empty.","type":"string"}},"required":["place_id"],"type":"object"},"ResultPage":{"properties":{"data":{"items":{"$ref":"#/components/schemas/CampaignResult"},"type":["null","array"]},"has_more":{"type":"boolean"},"page":{"type":"integer"},"page_size":{"type":"integer"},"total":{"type":"integer"}},"required":["data","page","page_size","total","has_more"],"type":"object"},"RunCampaignRequest":{"additionalProperties":false,"properties":{"target_count":{"description":"Override the saved target before running a draft once. API keys must target 1 through the configured beta cap.","maximum":500,"minimum":1,"type":"integer"}},"type":"object"},"RunError":{"properties":{"code":{"enum":["insufficient_credits","plan_required","run_failed"],"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"},"Shortfall":{"properties":{"delivered":{"type":"integer"},"evaluated":{"type":"integer"},"message":{"type":"string"},"rejected_by":{"additionalProperties":{"type":"integer"},"type":"object"},"target":{"type":"integer"}},"required":["evaluated","delivered","target","rejected_by","message"],"type":"object"},"Statement":{"properties":{"from":{"type":"string"},"lines":{"items":{"$ref":"#/components/schemas/StatementLine"},"type":["null","array"]},"to":{"type":"string"},"truncated":{"type":"boolean"}},"required":["from","to","lines","truncated"],"type":"object"},"StatementLine":{"properties":{"api_key_id":{"type":"string"},"api_key_label":{"type":"string"},"at":{"type":"string"},"balance_after":{"type":"integer"},"campaign_id":{"type":"string"},"delta":{"type":"integer"},"reason":{"type":"string"},"request_id":{"type":"string"}},"required":["at","reason","delta","balance_after"],"type":"object"},"Usage":{"properties":{"charged":{"type":"integer"},"held":{"type":"integer"},"refunded":{"type":"integer"},"state":{"enum":["none","held","settled"],"type":"string"}},"required":["held","charged","refunded","state"],"type":"object"},"WorkspaceUsage":{"properties":{"credits_spent":{"type":"integer"},"from":{"type":"string"},"keys":{"items":{"$ref":"#/components/schemas/KeyUsage"},"type":["null","array"]},"other_credits_spent":{"type":"integer"},"to":{"type":"string"}},"required":["from","to","keys","other_credits_spent","credits_spent"],"type":"object"}},"securitySchemes":{"apiKey":{"description":"API key from Settings \u003e AI agents, sent as Authorization: Bearer gmk_...","scheme":"bearer","type":"http"}}},"info":{"description":"Find and export local-business leads from Google Maps. Available on the Growth and Agency plans: create an API key in Settings \u003e AI agents and send it as `Authorization: Bearer gmk_...`. A campaign is created as a draft, quoted with the estimate endpoint, run once, polled until it finishes, then read page by page or exported. Only delivered results are charged; a run holds credits while it works and settles to what it delivered (see `usage` on the campaign).\n\nBeta: a campaign run through the API targets 1 to 500 leads.\n\nRate limits (a 429 carries `Retry-After`):\n- Growth: 5 requests per second per key (bursts up to 30); 10 per second across all of a workspace's keys (bursts up to 60).\n- Agency: 10 requests per second per key (bursts up to 60); 25 per second across all of a workspace's keys (bursts up to 150).","title":"Google Maps Data Extractor v1 API","version":"1.0.0-beta"},"openapi":"3.1.0","paths":{"/bulk":{"get":{"description":"Paginated bulk runs, newest first.","operationId":"listBulkRuns","parameters":[{"description":"Optional client request identifier: 1-64 characters from A-Z, a-z, 0-9, dot, underscore and hyphen. Invalid or repeated values are replaced with a generated identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9._-]+$","type":"string"}},{"description":"One-based page.","in":"query","name":"page","required":false,"schema":{"default":1,"minimum":1,"type":"integer"}},{"description":"Results per page.","in":"query","name":"page_size","required":false,"schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkRunPage"}}},"description":"OK","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Forbidden","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too Many Requests","headers":{"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}}},"summary":"List bulk runs","x-required-scope":"read"},"post":{"description":"Save a list of search queries as a draft run, with no prompt to interpret. The country searched is the one the queries name unless gl is set. Run it with /bulk/{id}/run; read its leads through /campaigns/{campaign_id}/results once it has a campaign.","operationId":"createBulkRun","parameters":[{"description":"Optional client request identifier: 1-64 characters from A-Z, a-z, 0-9, dot, underscore and hyphen. Invalid or repeated values are replaced with a generated identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9._-]+$","type":"string"}},{"description":"Optional single header, 1-255 printable ASCII characters. Workspace-owned keys expire after 24 hours. Same canonical JSON body, method, route and campaign ID replay the stored response; different request returns 422 idempotency_key_reused. Live work returns 409 idempotency_in_progress and Retry-After: 1. A 5xx is not stored.","in":"header","name":"Idempotency-Key","required":false,"schema":{"maxLength":255,"minLength":1,"pattern":"^[ -~]+$","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBulkRunRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkRun"}}},"description":"Created","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"Location":{"description":"Created bulk run API path.","schema":{"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Payment Required","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Forbidden","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Conflict","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Request Entity Too Large","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unprocessable Entity","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too Many Requests","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal Server Error","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}}},"summary":"Create a bulk run draft","x-required-scope":"run"}},"/bulk/{id}":{"get":{"description":"A run with its queries and how each went. Poll until completed, failed or cancelled.","operationId":"getBulkRun","parameters":[{"description":"Optional client request identifier: 1-64 characters from A-Z, a-z, 0-9, dot, underscore and hyphen. Invalid or repeated values are replaced with a generated identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9._-]+$","type":"string"}},{"description":"Campaign ID or Google place ID returned by the API.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkRun"}}},"description":"OK","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Forbidden","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Not Found","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too Many Requests","headers":{"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}}},"summary":"Poll a bulk run","x-required-scope":"read"}},"/bulk/{id}/cancel":{"post":{"description":"Stop a running run; leads already saved are kept and charged, the unused hold is refunded.","operationId":"cancelBulkRun","parameters":[{"description":"Optional client request identifier: 1-64 characters from A-Z, a-z, 0-9, dot, underscore and hyphen. Invalid or repeated values are replaced with a generated identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9._-]+$","type":"string"}},{"description":"Campaign ID or Google place ID returned by the API.","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Optional single header, 1-255 printable ASCII characters. Workspace-owned keys expire after 24 hours. Same canonical JSON body, method, route and campaign ID replay the stored response; different request returns 422 idempotency_key_reused. Live work returns 409 idempotency_in_progress and Retry-After: 1. A 5xx is not stored.","in":"header","name":"Idempotency-Key","required":false,"schema":{"maxLength":255,"minLength":1,"pattern":"^[ -~]+$","type":"string"}}],"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkRun"}}},"description":"Accepted","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Forbidden","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Not Found","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Conflict","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Request Entity Too Large","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unprocessable Entity","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too Many Requests","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal Server Error","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}}},"summary":"Cancel a bulk run","x-required-scope":"cancel"}},"/bulk/{id}/export":{"get":{"description":"Download the run's leads as CSV or a flat JSON array, with the columns the run collected.","operationId":"exportBulkRun","parameters":[{"description":"Optional client request identifier: 1-64 characters from A-Z, a-z, 0-9, dot, underscore and hyphen. Invalid or repeated values are replaced with a generated identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9._-]+$","type":"string"}},{"description":"Campaign ID or Google place ID returned by the API.","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Attachment format.","in":"query","name":"format","required":false,"schema":{"default":"csv","enum":["csv","json"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}},"text/csv":{"schema":{"type":"string"}}},"description":"OK","headers":{"Content-Disposition":{"description":"attachment; filename identifies the campaign and format.","schema":{"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Forbidden","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Not Found","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too Many Requests","headers":{"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}}},"summary":"Export a bulk run","x-required-scope":"read"}},"/bulk/{id}/run":{"post":{"description":"Hold the run's credit ceiling and start it. Charges settle to delivered, qualified leads.","operationId":"runBulkRun","parameters":[{"description":"Optional client request identifier: 1-64 characters from A-Z, a-z, 0-9, dot, underscore and hyphen. Invalid or repeated values are replaced with a generated identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9._-]+$","type":"string"}},{"description":"Campaign ID or Google place ID returned by the API.","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Optional single header, 1-255 printable ASCII characters. Workspace-owned keys expire after 24 hours. Same canonical JSON body, method, route and campaign ID replay the stored response; different request returns 422 idempotency_key_reused. Live work returns 409 idempotency_in_progress and Retry-After: 1. A 5xx is not stored.","in":"header","name":"Idempotency-Key","required":false,"schema":{"maxLength":255,"minLength":1,"pattern":"^[ -~]+$","type":"string"}}],"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkRun"}}},"description":"Accepted","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Payment Required","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Forbidden","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Not Found","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Conflict","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Request Entity Too Large","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unprocessable Entity","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too Many Requests","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal Server Error","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}}},"summary":"Run a bulk draft","x-required-scope":"run"}},"/campaigns":{"get":{"description":"Paginated workspace campaigns. Queued and cancelling states are derived from core run flags; filters use the stored core status.","operationId":"listCampaigns","parameters":[{"description":"Optional client request identifier: 1-64 characters from A-Z, a-z, 0-9, dot, underscore and hyphen. Invalid or repeated values are replaced with a generated identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9._-]+$","type":"string"}},{"description":"One-based page.","in":"query","name":"page","required":false,"schema":{"default":1,"minimum":1,"type":"integer"}},{"description":"Results per page.","in":"query","name":"page_size","required":false,"schema":{"default":20,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Optional campaign or draft tab; omitted includes both.","in":"query","name":"tab","required":false,"schema":{"enum":["campaigns","drafts"],"type":"string"}},{"description":"Filter by status. `running` includes campaigns that are queued or cancelling; any other value is a 400.","in":"query","name":"status","required":false,"schema":{"enum":["draft","running","completed","failed","cancelled"],"type":"string"}},{"description":"Search prompt/name; truncated to 200 characters.","in":"query","name":"q","required":false,"schema":{"type":"string"}},{"description":"List ordering.","in":"query","name":"sort","required":false,"schema":{"default":"newest","enum":["newest","oldest","most_leads","fewest_leads","top_score","low_score","az","za"],"type":"string"}},{"description":"Exact City, ST label; at most 200 characters.","in":"query","name":"location","required":false,"schema":{"maxLength":200,"type":"string"}},{"description":"Campaign wizard or bulk origin; omitted includes both.","in":"query","name":"origin","required":false,"schema":{"enum":["campaign","bulk"],"type":"string"}},{"description":"Inclusive RFC 3339 creation/edit bound.","in":"query","name":"created_from","required":false,"schema":{"format":"date-time","type":"string"}},{"description":"Exclusive RFC 3339 creation/edit bound.","in":"query","name":"created_to","required":false,"schema":{"format":"date-time","type":"string"}},{"description":"Minimum result/target volume.","in":"query","name":"min_leads","required":false,"schema":{"minimum":0,"type":"integer"}},{"description":"Maximum result/target volume.","in":"query","name":"max_leads","required":false,"schema":{"minimum":0,"type":"integer"}},{"description":"Minimum average Google rating.","in":"query","name":"min_rating","required":false,"schema":{"maximum":5,"minimum":0,"type":"number"}},{"description":"Lead grade; repeat or comma-separate, at most eight entries.","in":"query","name":"grade","required":false,"schema":{"items":{"enum":["A+","A","B","C"],"type":"string"},"maxItems":8,"type":"array"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignPage"}}},"description":"OK","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"examples":{"invalidPageSize":{"summary":"Captured from a real local three-lead run; email properties omitted for anonymisation.","value":{"error":{"request_id":"0912e0ad-9977-40ff-a461-ffafe5b0f755","code":"invalid_request","message":"page_size is out of range","status":400}}}},"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Forbidden","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too Many Requests","headers":{"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}}},"summary":"List campaigns","x-required-scope":"read"},"post":{"description":"Parse the prompt and save a draft without extraction. Unknown top-level keys are rejected. Qualification uses either any or all contact channels; only qualified leads are delivered and charged. Null disables qualification. Inspect, estimate, then run the draft.","operationId":"createCampaign","parameters":[{"description":"Optional client request identifier: 1-64 characters from A-Z, a-z, 0-9, dot, underscore and hyphen. Invalid or repeated values are replaced with a generated identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9._-]+$","type":"string"}},{"description":"Optional single header, 1-255 printable ASCII characters. Workspace-owned keys expire after 24 hours. Same canonical JSON body, method, route and campaign ID replay the stored response; different request returns 422 idempotency_key_reused. Live work returns 409 idempotency_in_progress and Retry-After: 1. A 5xx is not stored.","in":"header","name":"Idempotency-Key","required":false,"schema":{"maxLength":255,"minLength":1,"pattern":"^[ -~]+$","type":"string"}}],"requestBody":{"content":{"application/json":{"examples":{"localRun":{"summary":"Captured from a real local three-lead run; email properties omitted for anonymisation.","value":{"prompt":"3 dentists in Iasi Romania","name":"Local OpenAPI verification","target_count":3,"qualifier":null,"fields":["name","phone","website"],"max_photos":-1}}},"schema":{"$ref":"#/components/schemas/CreateCampaignRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"examples":{"localRun":{"summary":"Captured from a real local three-lead run; email properties omitted for anonymisation.","value":{"id":"53040d19-ba88-47df-9efa-0051a68e808a","name":"Local OpenAPI verification","prompt":"3 dentists in Iasi Romania","status":"draft","target_count":3,"result_count":0,"qualifier":null,"fields":["name","phone","website"],"progress":null,"shortfall":null,"error":null,"usage":{"held":0,"charged":0,"refunded":0,"state":"none"},"created_at":"2026-10-10T15:30:24.945617Z","updated_at":"2026-10-10T15:30:24.951703Z","started_at":null,"completed_at":null,"language":{"lang":"ro","gl":"ro","source":"inferred"},"links":{"self":"/api/v1/campaigns/53040d19-ba88-47df-9efa-0051a68e808a","results":"/api/v1/campaigns/53040d19-ba88-47df-9efa-0051a68e808a/results","export":"/api/v1/campaigns/53040d19-ba88-47df-9efa-0051a68e808a/export","app":"http://localhost:5173/campaigns/53040d19-ba88-47df-9efa-0051a68e808a"}}}},"schema":{"$ref":"#/components/schemas/Campaign"}}},"description":"Created","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"Location":{"description":"Created campaign API path.","schema":{"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Payment Required","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Forbidden","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Not Found","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Conflict","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Request Entity Too Large","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unprocessable Entity","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too Many Requests","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal Server Error","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}}},"summary":"Create a campaign draft","x-required-scope":"run"}},"/campaigns/estimate":{"post":{"description":"Quote saved campaign_id or options. Credits are a ceiling, not a reservation; actual charges reflect delivered work. ETA uses measured work and queue load.","operationId":"estimateCampaign","parameters":[{"description":"Optional client request identifier: 1-64 characters from A-Z, a-z, 0-9, dot, underscore and hyphen. Invalid or repeated values are replaced with a generated identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9._-]+$","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EstimateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Estimate"}}},"description":"OK","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Forbidden","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Not Found","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Request Entity Too Large","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too Many Requests","headers":{"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}}},"summary":"Estimate campaign cost and time","x-required-scope":"read"}},"/campaigns/{id}":{"get":{"description":"Poll until completed, failed or cancelled. usage reflects the ledger; shortfall explains fewer delivered leads than requested. Conditional GET uses the full DTO including usage.","operationId":"getCampaign","parameters":[{"description":"Optional client request identifier: 1-64 characters from A-Z, a-z, 0-9, dot, underscore and hyphen. Invalid or repeated values are replaced with a generated identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9._-]+$","type":"string"}},{"description":"Campaign ID or Google place ID returned by the API.","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Send the prior ETag; a matching representation returns bodyless 304.","in":"header","name":"If-None-Match","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"examples":{"completed":{"summary":"Captured from a real local three-lead run; email properties omitted for anonymisation.","value":{"id":"53040d19-ba88-47df-9efa-0051a68e808a","name":"Local OpenAPI verification","prompt":"3 dentists in Iasi Romania","status":"completed","target_count":3,"result_count":3,"qualifier":null,"fields":["name","phone","website"],"progress":null,"shortfall":null,"error":null,"usage":{"held":5,"charged":5,"refunded":0,"state":"settled"},"created_at":"2026-10-10T15:30:24.945617Z","updated_at":"2026-10-10T15:30:42.596173Z","started_at":"2026-10-10T15:30:25.069813Z","completed_at":"2026-10-10T15:30:42.596173Z","language":{"lang":"ro","gl":"ro","source":"inferred"},"links":{"self":"/api/v1/campaigns/53040d19-ba88-47df-9efa-0051a68e808a","results":"/api/v1/campaigns/53040d19-ba88-47df-9efa-0051a68e808a/results","export":"/api/v1/campaigns/53040d19-ba88-47df-9efa-0051a68e808a/export","app":"http://localhost:5173/campaigns/53040d19-ba88-47df-9efa-0051a68e808a"}}},"running":{"summary":"Captured from a real local three-lead run; email properties omitted for anonymisation.","value":{"id":"53040d19-ba88-47df-9efa-0051a68e808a","name":"Local OpenAPI verification","prompt":"3 dentists in Iasi Romania","status":"running","target_count":3,"result_count":0,"qualifier":null,"fields":["name","phone","website"],"progress":{"found":0,"evaluated":0,"target":3},"shortfall":null,"error":null,"usage":{"held":5,"charged":0,"refunded":0,"state":"held"},"created_at":"2026-10-10T15:30:24.945617Z","updated_at":"2026-10-10T15:30:25.075629Z","started_at":"2026-10-10T15:30:25.069813Z","completed_at":null,"language":{"lang":"ro","gl":"ro","source":"inferred"},"links":{"self":"/api/v1/campaigns/53040d19-ba88-47df-9efa-0051a68e808a","results":"/api/v1/campaigns/53040d19-ba88-47df-9efa-0051a68e808a/results","export":"/api/v1/campaigns/53040d19-ba88-47df-9efa-0051a68e808a/export","app":"http://localhost:5173/campaigns/53040d19-ba88-47df-9efa-0051a68e808a"}}}},"schema":{"$ref":"#/components/schemas/Campaign"}}},"description":"OK","headers":{"ETag":{"description":"Representation hash.","schema":{"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"304":{"description":"Not Modified","headers":{"ETag":{"description":"Representation hash.","schema":{"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Forbidden","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Not Found","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too Many Requests","headers":{"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}}},"summary":"Poll a campaign","x-required-scope":"read"}},"/campaigns/{id}/cancel":{"post":{"description":"Request cancellation and poll for termination. Already cancelling or terminal campaigns return their current state; a draft returns conflict. Partial qualified results are kept and charged, unused hold is refunded. No body is needed; a supplied JSON body is only used for idempotency hashing.","operationId":"cancelCampaign","parameters":[{"description":"Optional client request identifier: 1-64 characters from A-Z, a-z, 0-9, dot, underscore and hyphen. Invalid or repeated values are replaced with a generated identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9._-]+$","type":"string"}},{"description":"Campaign ID or Google place ID returned by the API.","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Optional single header, 1-255 printable ASCII characters. Workspace-owned keys expire after 24 hours. Same canonical JSON body, method, route and campaign ID replay the stored response; different request returns 422 idempotency_key_reused. Live work returns 409 idempotency_in_progress and Retry-After: 1. A 5xx is not stored.","in":"header","name":"Idempotency-Key","required":false,"schema":{"maxLength":255,"minLength":1,"pattern":"^[ -~]+$","type":"string"}}],"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Campaign"}}},"description":"Accepted","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Forbidden","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Not Found","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Conflict","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Request Entity Too Large","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unprocessable Entity","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too Many Requests","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal Server Error","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}}},"summary":"Cancel a campaign","x-required-scope":"cancel"}},"/campaigns/{id}/export":{"get":{"description":"Download available results, including partial results, as CSV or a flat JSON array. Columns follow the selected field IDs and custom AI questions; JSON exports differ from nested Result objects.","operationId":"exportCampaign","parameters":[{"description":"Optional client request identifier: 1-64 characters from A-Z, a-z, 0-9, dot, underscore and hyphen. Invalid or repeated values are replaced with a generated identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9._-]+$","type":"string"}},{"description":"Campaign ID or Google place ID returned by the API.","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Attachment format.","in":"query","name":"format","required":false,"schema":{"default":"csv","enum":["csv","json"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Export"}},"text/csv":{"schema":{"type":"string"}}},"description":"OK","headers":{"Content-Disposition":{"description":"attachment; filename identifies the campaign and format.","schema":{"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Forbidden","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Not Found","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too Many Requests","headers":{"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}}},"summary":"Export campaign results","x-required-scope":"read"}},"/campaigns/{id}/leads/enrich":{"post":{"description":"Synchronously re-run chosen steps on at most 25 leads from this campaign's saved results. Many steps can take minutes, so use a long client timeout. Only delivered outputs are charged; plan-gated steps require the corresponding workspace plan.","operationId":"enrichLeads","parameters":[{"description":"Optional client request identifier: 1-64 characters from A-Z, a-z, 0-9, dot, underscore and hyphen. Invalid or repeated values are replaced with a generated identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9._-]+$","type":"string"}},{"description":"Campaign ID or Google place ID returned by the API.","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Optional single header, 1-255 printable ASCII characters. Workspace-owned keys expire after 24 hours. Same canonical JSON body, method, route and campaign ID replay the stored response; different request returns 422 idempotency_key_reused. Live work returns 409 idempotency_in_progress and Retry-After: 1. A 5xx is not stored.","in":"header","name":"Idempotency-Key","required":false,"schema":{"maxLength":255,"minLength":1,"pattern":"^[ -~]+$","type":"string"}}],"requestBody":{"content":{"application/json":{"examples":{"enrich_request":{"summary":"Captured from a real local run of the website step on one saved lead.","value":{"place_ids":["0x47c35069ed1b6907:0xefdc4795e07dc0"],"steps":["website"]}}},"schema":{"$ref":"#/components/schemas/EnrichLeadsRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"examples":{"enrich_response":{"summary":"Captured from a real local run of the website step on one saved lead.","value":{"data":[{"place_id":"0x47c35069ed1b6907:0xefdc4795e07dc0","ok":true,"steps":[{"step":"website","ran":true,"found":true}],"charged":0}],"charged":0}}},"schema":{"$ref":"#/components/schemas/EnrichLeadsResponse"}}},"description":"OK","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Payment Required","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Forbidden","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Not Found","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Conflict","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Request Entity Too Large","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unprocessable Entity","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too Many Requests","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal Server Error","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}}},"summary":"Enrich saved leads on demand","x-required-scope":"run"}},"/campaigns/{id}/results":{"get":{"description":"Sparse projected business records, including partial results while running. Absent properties mean not collected. Page order is stable.","operationId":"listResults","parameters":[{"description":"Optional client request identifier: 1-64 characters from A-Z, a-z, 0-9, dot, underscore and hyphen. Invalid or repeated values are replaced with a generated identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9._-]+$","type":"string"}},{"description":"Campaign ID or Google place ID returned by the API.","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Send the prior ETag; a matching representation returns bodyless 304.","in":"header","name":"If-None-Match","required":false,"schema":{"type":"string"}},{"description":"One-based page.","in":"query","name":"page","required":false,"schema":{"default":1,"minimum":1,"type":"integer"}},{"description":"Results per page.","in":"query","name":"page_size","required":false,"schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"examples":{"localRun":{"summary":"Captured from a real local three-lead run; email properties omitted for anonymisation.","value":{"data":[{"aggregator_signal":{"is_aggregator":false,"confidence":0},"cid":"3996961549578696711","enrichment":{"domain":"clinica-andreica.ro","favicon_url":"https://clinica-andreica.ro/wp-content/uploads/2018/07/cropped-fav_icon_andreica-1-32x32.png","fetched_at":"2026-10-10T17:07:12.915841+02:00","phones":[{"raw":"0740 265 525","e164":"+40740265525","international":"+40 740 265 525","national":"0740 265 525","region":"RO","calling_code":40,"valid":true,"type":"MOBILE","is_mobile":true,"sources":["GOOGLE_MAPS"]}],"tech_stack":{"detected":[{"name":"WordPress","category":"CMS \u0026 Site Builders"},{"name":"Google Analytics 4 (GA4)","category":"Analytics \u0026 Tracking"},{"name":"Zendesk Chat","category":"Live Chat \u0026 Helpdesk"},{"name":"Bootstrap","category":"Frameworks \u0026 UI"},{"name":"jQuery","category":"Frameworks \u0026 UI"},{"name":"WordPress","category":"CMS"}],"categories":{"Analytics \u0026 Tracking":["Google Analytics 4 (GA4)"],"CMS":["WordPress"],"CMS \u0026 Site Builders":["WordPress"],"Frameworks \u0026 UI":["Bootstrap","jQuery"],"Live Chat \u0026 Helpdesk":["Zendesk Chat"]},"cms":"WordPress","analytics":["Google Analytics 4 (GA4)"],"live_chat":"Zendesk Chat","has_meta_pixel":false,"has_google_tag_manager":false,"has_google_analytics":true},"website_canonical_url":"https://clinica-andreica.ro/","website_description":"Lucrăm cu responsabilitate, dedicați pacienților noștri și îngrijirii corecte a sănătății dentare.","website_generator":"WordPress","website_has_fb_pixel":false,"website_has_gtm":true,"website_has_mobile_viewport":true,"website_keywords":"","website_lang":"ro-RO","website_title":"Home - Clinica Andreica"},"favicon_url":"https://clinica-andreica.ro/wp-content/uploads/2018/07/cropped-fav_icon_andreica-1-32x32.png","is_mobile":true,"lang":"ro","lead_opportunity":{"version":2,"score":15,"grade":"D","priority":"LOW","opportunity_signals":["No Meta/Facebook retargeting pixel detected (+15 pts opportunity)"],"recommended_pitches":["Paid Social Ads \u0026 Retargeting Setup"]},"name":"Clinica Andreica","outreach_score":{"score":0,"grade":"D","decision_maker_tier":"UNKNOWN","recommended_channel":"PHONE_CALL","reasoning":["Decision-maker lookup was not run for this business"],"status":"not_checked"},"phone":"0740 265 525","phone_type":"MOBILE","place_id":"0x40cafb65c56261ab:0x37780f5a3f887807","scraped_at":"2026-10-10T16:14:34.334739+02:00","search_query":"dentists in Iasi","search_rank_position":3,"unformatted_phone":"40740265525","website":"https://clinica-andreica.ro/"},{"aggregator_signal":{"is_aggregator":false,"confidence":0},"cid":"18065188390821729581","enrichment":{"domain":"iasidentalclinic.ro","fetched_at":"2026-10-10T17:07:13.181358+02:00","phone_1":"+40 757 997 788","phone_1_source":"WEBSITE_FOOTER","phones":[{"raw":"0757 997 788","e164":"+40757997788","international":"+40 757 997 788","national":"0757 997 788","region":"RO","calling_code":40,"valid":true,"type":"MOBILE","is_mobile":true,"sources":["GOOGLE_MAPS","WEBSITE"]}],"tech_stack":{"detected":[{"name":"WordPress","category":"CMS \u0026 Site Builders"},{"name":"Google Analytics 4 (GA4)","category":"Analytics \u0026 Tracking"},{"name":"Meta (Facebook) Pixel","category":"Analytics \u0026 Tracking"},{"name":"jQuery","category":"Frameworks \u0026 UI"},{"name":"WordPress","category":"CMS"}],"categories":{"Analytics \u0026 Tracking":["Google Analytics 4 (GA4)","Meta (Facebook) Pixel"],"CMS":["WordPress"],"CMS \u0026 Site Builders":["WordPress"],"Frameworks \u0026 UI":["jQuery"]},"cms":"WordPress","analytics":["Google Analytics 4 (GA4)","Meta (Facebook) Pixel"],"has_meta_pixel":true,"has_google_tag_manager":false,"has_google_analytics":true},"website_canonical_url":"https://iasidentalclinic.ro/","website_description":"Stomatolog Iasi - IDC oferă o gamă largă de servicii dentare de top, de la curățarea dentară la proceduri complexe de implantologie.","website_generator":"WordPress","website_has_fb_pixel":true,"website_has_gtm":true,"website_has_mobile_viewport":true,"website_keywords":"","website_lang":"ro-RO","website_title":"Iasi Dental Clinic - Cabinet Stomatolog Iasi"},"is_mobile":true,"lang":"ro","lead_opportunity":{"version":2,"score":0,"grade":"D","priority":"LOW","opportunity_signals":null,"recommended_pitches":null},"name":"Iasi Dental Clinic","outreach_score":{"score":0,"grade":"D","decision_maker_tier":"UNKNOWN","recommended_channel":"PHONE_CALL","reasoning":["Decision-maker lookup was not run for this business"],"status":"not_checked"},"phone":"0757 997 788","phone_type":"MOBILE","place_id":"0x40cafba15a31abff:0xfab47120c370952d","scraped_at":"2026-10-10T16:14:41.598682+02:00","search_query":"dentists in Iasi","search_rank_position":1,"unformatted_phone":"40757997788","website":"https://iasidentalclinic.ro/"},{"aggregator_signal":{"is_aggregator":false,"confidence":0},"cid":"16480270279928506388","enrichment":{"domain":"lifedentalspa.ro","favicon_url":"https://www.lifedentalspa.ro/wp-content/uploads/2021/02/cropped-LDS_Icon-32x32.png","fetched_at":"2026-10-10T17:07:14.69483+02:00","phone_1":"+40 31 828 2274","phone_1_source":"WEBSITE_FOOTER","phones":[{"raw":"031 828 2274","e164":"+40318282274","international":"+40 31 828 2274","national":"031 828 2274","region":"RO","calling_code":40,"valid":true,"type":"FIXED_LINE","sources":["GOOGLE_MAPS","WEBSITE"]}],"tech_stack":{"detected":[{"name":"WordPress","category":"CMS \u0026 Site Builders"},{"name":"Elementor","category":"CMS \u0026 Site Builders"},{"name":"WooCommerce","category":"E-Commerce"},{"name":"Google Tag Manager (GTM)","category":"Analytics \u0026 Tracking"},{"name":"Microsoft Clarity","category":"Analytics \u0026 Tracking"},{"name":"jQuery","category":"Frameworks \u0026 UI"},{"name":"WordPress","category":"CMS"},{"name":"Elementor","category":"Page Builder"}],"categories":{"Analytics \u0026 Tracking":["Google Tag Manager (GTM)","Microsoft Clarity"],"CMS":["WordPress"],"CMS \u0026 Site Builders":["WordPress","Elementor"],"E-Commerce":["WooCommerce"],"Frameworks \u0026 UI":["jQuery"],"Page Builder":["Elementor"]},"cms":"WordPress","ecommerce":"WooCommerce","analytics":["Google Tag Manager (GTM)","Microsoft Clarity"],"has_meta_pixel":false,"has_google_tag_manager":true,"has_google_analytics":false},"website_canonical_url":"https://www.lifedentalspa.ro","website_description":"Clinica de stomatologie laser Life Dental Spa ✅ Servicii de implantologie dentara, tratament carii cu laser, stomatologie holistica.","website_generator":"WordPress","website_has_fb_pixel":false,"website_has_gtm":true,"website_has_mobile_viewport":true,"website_keywords":"","website_lang":"ro-RO","website_title":"Clinica de stomatologie biologica laser Life Dental Spa"},"favicon_url":"https://www.lifedentalspa.ro/wp-content/uploads/2021/02/cropped-LDS_Icon-32x32.png","lang":"ro","lead_opportunity":{"version":2,"score":35,"grade":"C","priority":"LOW","opportunity_signals":["No Meta/Facebook retargeting pixel detected (+15 pts opportunity)","No online booking option detected, on Google or the website (+10 pts opportunity)","No owner activity (posts or review replies) in 187 days (+10 pts opportunity)"],"recommended_pitches":["Paid Social Ads \u0026 Retargeting Setup","Online Booking \u0026 Scheduling Setup","GBP Posting \u0026 Engagement Management"]},"name":"LIFE Dental Spa - Iasi","outreach_score":{"score":0,"grade":"D","decision_maker_tier":"UNKNOWN","recommended_channel":"PHONE_CALL","reasoning":["Decision-maker lookup was not run for this business"],"status":"not_checked"},"phone":"031 828 2274","phone_type":"FIXED_LINE","place_id":"0x40cafbfd9090a5db:0xe4b5ae80dd90e814","scraped_at":"2026-10-10T16:14:46.293241+02:00","search_query":"dentists in Iasi","search_rank_position":2,"unformatted_phone":"40318282274","website":"https://www.lifedentalspa.ro/"}],"page":1,"page_size":50,"total":3,"has_more":false}}},"schema":{"$ref":"#/components/schemas/ResultPage"}}},"description":"OK","headers":{"ETag":{"description":"Representation hash.","schema":{"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"304":{"description":"Not Modified","headers":{"ETag":{"description":"Representation hash.","schema":{"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Forbidden","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Not Found","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too Many Requests","headers":{"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}}},"summary":"Read a page of results","x-required-scope":"read"}},"/campaigns/{id}/results/{placeId}":{"get":{"description":"Read a business only if it belongs to this workspace campaign, through the same field projection as the results page.","operationId":"getResult","parameters":[{"description":"Optional client request identifier: 1-64 characters from A-Z, a-z, 0-9, dot, underscore and hyphen. Invalid or repeated values are replaced with a generated identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9._-]+$","type":"string"}},{"description":"Campaign ID or Google place ID returned by the API.","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Campaign ID or Google place ID returned by the API.","in":"path","name":"placeId","required":true,"schema":{"type":"string"}},{"description":"Send the prior ETag; a matching representation returns bodyless 304.","in":"header","name":"If-None-Match","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResultDetail"}}},"description":"OK","headers":{"ETag":{"description":"Representation hash.","schema":{"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"304":{"description":"Not Modified","headers":{"ETag":{"description":"Representation hash.","schema":{"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Forbidden","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Not Found","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too Many Requests","headers":{"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}}},"summary":"Read one result","x-required-scope":"read"}},"/campaigns/{id}/run":{"post":{"description":"Accept a draft for asynchronous extraction. Any non-draft returns conflict. An idempotent replay returns the original accepted response. Poll the campaign for progress and settlement.","operationId":"runCampaign","parameters":[{"description":"Optional client request identifier: 1-64 characters from A-Z, a-z, 0-9, dot, underscore and hyphen. Invalid or repeated values are replaced with a generated identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9._-]+$","type":"string"}},{"description":"Campaign ID or Google place ID returned by the API.","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Optional single header, 1-255 printable ASCII characters. Workspace-owned keys expire after 24 hours. Same canonical JSON body, method, route and campaign ID replay the stored response; different request returns 422 idempotency_key_reused. Live work returns 409 idempotency_in_progress and Retry-After: 1. A 5xx is not stored.","in":"header","name":"Idempotency-Key","required":false,"schema":{"maxLength":255,"minLength":1,"pattern":"^[ -~]+$","type":"string"}}],"requestBody":{"content":{"application/json":{"examples":{"localRun":{"summary":"Captured from a real local three-lead run; email properties omitted for anonymisation.","value":{}}},"schema":{"$ref":"#/components/schemas/RunCampaignRequest"}}},"required":false},"responses":{"202":{"content":{"application/json":{"examples":{"localRun":{"summary":"Captured from a real local three-lead run; email properties omitted for anonymisation.","value":{"id":"53040d19-ba88-47df-9efa-0051a68e808a","name":"Local OpenAPI verification","prompt":"3 dentists in Iasi Romania","status":"running","target_count":3,"result_count":0,"qualifier":null,"fields":["name","phone","website"],"progress":{"found":0,"evaluated":0,"target":3},"shortfall":null,"error":null,"usage":{"held":0,"charged":0,"refunded":0,"state":"none"},"created_at":"2026-10-10T15:30:24.945617Z","updated_at":"2026-10-10T15:30:25.053426Z","started_at":"2026-10-10T15:30:25.053426Z","completed_at":null,"language":{"lang":"ro","gl":"ro","source":"inferred"},"links":{"self":"/api/v1/campaigns/53040d19-ba88-47df-9efa-0051a68e808a","results":"/api/v1/campaigns/53040d19-ba88-47df-9efa-0051a68e808a/results","export":"/api/v1/campaigns/53040d19-ba88-47df-9efa-0051a68e808a/export","app":"http://localhost:5173/campaigns/53040d19-ba88-47df-9efa-0051a68e808a"}}}},"schema":{"$ref":"#/components/schemas/Campaign"}}},"description":"Accepted","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Payment Required","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Forbidden","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Not Found","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Conflict","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Request Entity Too Large","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unprocessable Entity","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too Many Requests","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal Server Error","headers":{"Idempotent-Replayed":{"description":"true when replaying a stored response.","schema":{"enum":["true"],"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}}},"summary":"Run a draft once","x-required-scope":"run"}},"/credits":{"get":{"description":"Available workspace balance after holds, monthly allowance, plan and reset time.","operationId":"getCredits","parameters":[{"description":"Optional client request identifier: 1-64 characters from A-Z, a-z, 0-9, dot, underscore and hyphen. Invalid or repeated values are replaced with a generated identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9._-]+$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Credits"}}},"description":"OK","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Forbidden","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too Many Requests","headers":{"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}}},"summary":"Read available credits","x-required-scope":"read"}},"/leads":{"get":{"description":"Every lead the workspace collected, newest first by default, across campaigns and bulk runs, through each campaign's field projection, with campaign_id, campaign_name, added_at and (for a bulk run) bulk_run_id. Only the documented filters are accepted.","operationId":"listLeads","parameters":[{"description":"Optional client request identifier: 1-64 characters from A-Z, a-z, 0-9, dot, underscore and hyphen. Invalid or repeated values are replaced with a generated identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9._-]+$","type":"string"}},{"description":"One-based page.","in":"query","name":"page","required":false,"schema":{"default":1,"minimum":1,"type":"integer"}},{"description":"Results per page.","in":"query","name":"page_size","required":false,"schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Search name, category, address, phone, email and website.","in":"query","name":"q","required":false,"schema":{"maxLength":200,"type":"string"}},{"description":"Comma-separated campaign IDs (a bulk run's campaign_id included).","in":"query","name":"campaign_ids","required":false,"schema":{"type":"string"}},{"description":"Order.","in":"query","name":"sort","required":false,"schema":{"default":"recent","enum":["recent","oldest","name","name_desc","rating","rating_asc","score","score_asc","rank","rank_desc"],"type":"string"}},{"description":"Only leads with an email (true or 1).","in":"query","name":"has_email","required":false,"schema":{"type":"boolean"}},{"description":"Only leads with a phone (true or 1).","in":"query","name":"has_phone","required":false,"schema":{"type":"boolean"}},{"description":"Only leads with a website (true or 1).","in":"query","name":"has_website","required":false,"schema":{"type":"boolean"}},{"description":"Only leads with a social profile (true or 1).","in":"query","name":"has_social","required":false,"schema":{"type":"boolean"}},{"description":"Only leads with WhatsApp (true or 1).","in":"query","name":"has_whatsapp","required":false,"schema":{"type":"boolean"}},{"description":"Lowest Google rating, 0-5.","in":"query","name":"min_rating","required":false,"schema":{"maximum":5,"minimum":0,"type":"number"}},{"description":"Fewest Google reviews.","in":"query","name":"min_reviews","required":false,"schema":{"minimum":0,"type":"integer"}},{"description":"Exact primary category.","in":"query","name":"category","required":false,"schema":{"maxLength":200,"type":"string"}},{"description":"Exact city.","in":"query","name":"city","required":false,"schema":{"maxLength":200,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadPage"}}},"description":"OK","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Forbidden","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too Many Requests","headers":{"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}}},"summary":"List leads across campaigns","x-required-scope":"read"}},"/openapi.json":{"get":{"description":"Public, cached OpenAPI 3.1 document; no authentication or key quota. The IP request limit applies.","operationId":"getOpenAPI","parameters":[{"description":"Optional client request identifier: 1-64 characters from A-Z, a-z, 0-9, dot, underscore and hyphen. Invalid or repeated values are replaced with a generated identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9._-]+$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenAPI"}}},"description":"OK","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too Many Requests","headers":{"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}}},"security":[],"summary":"Read the v1 OpenAPI document","x-required-scope":"read"}},"/place-fields":{"get":{"description":"Stable field IDs, groups, defaults and collection requirements. Use IDs in create.fields.","operationId":"getPlaceFields","parameters":[{"description":"Optional client request identifier: 1-64 characters from A-Z, a-z, 0-9, dot, underscore and hyphen. Invalid or repeated values are replaced with a generated identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9._-]+$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaceFields"}}},"description":"OK","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Forbidden","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too Many Requests","headers":{"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}}},"summary":"Read the place-field catalog","x-required-scope":"read"}},"/pricing":{"get":{"description":"Credit prices and workspace plan capabilities; no purchase or reservation.","operationId":"getPricing","parameters":[{"description":"Optional client request identifier: 1-64 characters from A-Z, a-z, 0-9, dot, underscore and hyphen. Invalid or repeated values are replaced with a generated identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9._-]+$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Pricing"}}},"description":"OK","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Forbidden","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too Many Requests","headers":{"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}}},"summary":"Read pricing and plan limits","x-required-scope":"read"}},"/usage":{"get":{"description":"Requests and credits per API key over a period (from/to dates, default the last 30 days, at most 400), the credits spent outside the API, and the total the credit statement adds up to. Credits spent are charges net of their refunds.","operationId":"getUsage","parameters":[{"description":"Optional client request identifier: 1-64 characters from A-Z, a-z, 0-9, dot, underscore and hyphen. Invalid or repeated values are replaced with a generated identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9._-]+$","type":"string"}},{"description":"First day of the period (YYYY-MM-DD, UTC). Default: 30 days before to.","in":"query","name":"from","required":false,"schema":{"format":"date","type":"string"}},{"description":"Last day of the period, inclusive (YYYY-MM-DD, UTC). Default: today.","in":"query","name":"to","required":false,"schema":{"format":"date","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceUsage"}}},"description":"OK","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Forbidden","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too Many Requests","headers":{"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}}},"summary":"Read usage per API key","x-required-scope":"read"}},"/usage/ledger":{"get":{"description":"Every credit movement in a period, with the request and API key behind it, as CSV (default) or JSON. At most 10,000 lines; a longer period is truncated -- ask for a shorter one.","operationId":"getStatement","parameters":[{"description":"Optional client request identifier: 1-64 characters from A-Z, a-z, 0-9, dot, underscore and hyphen. Invalid or repeated values are replaced with a generated identifier.","in":"header","name":"X-Request-Id","required":false,"schema":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9._-]+$","type":"string"}},{"description":"Attachment format.","in":"query","name":"format","required":false,"schema":{"default":"csv","enum":["csv","json"],"type":"string"}},{"description":"First day of the period (YYYY-MM-DD, UTC). Default: 30 days before to.","in":"query","name":"from","required":false,"schema":{"format":"date","type":"string"}},{"description":"Last day of the period, inclusive (YYYY-MM-DD, UTC). Default: today.","in":"query","name":"to","required":false,"schema":{"format":"date","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Statement"}},"text/csv":{"schema":{"type":"string"}}},"description":"OK","headers":{"Content-Disposition":{"description":"attachment; filename identifies the campaign and format.","schema":{"type":"string"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unauthorized","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Forbidden","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Too Many Requests","headers":{"Retry-After":{"description":"Whole seconds until retry; supplied for rate limits and idempotency_in_progress (1 second).","schema":{"minimum":1,"type":"integer"}},"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal Server Error","headers":{"X-Request-Id":{"description":"Request identifier, echoed if a valid client identifier was supplied; otherwise generated.","schema":{"type":"string"}}}}},"summary":"Download the credit statement","x-required-scope":"read"}}},"security":[{"apiKey":[]}],"servers":[{"url":"https://app.localicp.com/api/v1"}]}