{"openapi":"3.1.0","info":{"title":"StoreInspect API","version":"1.0.0","description":"Database-backed Shopify store and contact intelligence API. Store and contact data require a paid StoreInspect plan; existing keys can still access billing recovery endpoints after paid access lapses."},"servers":[{"url":"https://storeinspect.com/api/v1"}],"tags":[{"name":"usage","x-displayName":"Usage","x-group":"Usage","description":"API access state, request quotas, search-row quota, and shared contact-credit usage."},{"name":"billing","x-displayName":"Billing","x-group":"Billing","description":"Read subscription state and create short-lived Stripe-hosted subscription or management links."},{"name":"taxonomy","x-displayName":"Taxonomy","x-group":"Taxonomy","description":"Filter values, labels, and metadata used by store and contact search requests."},{"name":"stores","x-displayName":"Stores","x-group":"Stores","description":"Store lookup, store search, and batch domain enrichment for Shopify accounts."},{"name":"contacts","x-displayName":"Contacts","x-group":"Contacts","description":"Contact preview search and credit-based contact reveal workflows."}],"paths":{"/usage":{"get":{"tags":["usage"],"operationId":"getUsage","x-route-path":"/api/v1/usage","summary":"Get usage","description":"Returns API access state, request quota, search-row quota, and shared contact-credit usage for the authenticated account.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Usage for the authenticated account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageResponse"}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"The account does not have API access."}}}},"/billing/status":{"get":{"tags":["billing"],"operationId":"getBillingStatus","x-route-path":"/api/v1/billing/status","summary":"Get billing status","description":"Returns the current plan, subscription state, billing cadence, contact credits, and whether paid API access is active. Existing valid API keys can use this endpoint while billing is inactive.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Current billing state for the API key owner.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingStatusResponse"}}}},"401":{"description":"Missing, invalid, revoked, or suspended API key."},"403":{"description":"The API key does not have billing:read."},"429":{"description":"Too many billing status requests."}}}},"/billing/subscription-link":{"post":{"tags":["billing"],"operationId":"createSubscriptionLink","x-route-path":"/api/v1/billing/subscription-link","summary":"Create subscription link","description":"Creates a short-lived Stripe-hosted paid Checkout, exact upgrade-confirmation, or billing-recovery link for the selected plan. API-created Checkout does not include a free trial. Creating the link never changes or charges the subscription; a human must open and confirm it in Stripe.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionLinkRequest"}}}},"responses":{"200":{"description":"Short-lived Stripe-hosted billing link.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingLinkResponse"}}}},"400":{"description":"Invalid plan or billing cadence."},"401":{"description":"Missing, invalid, revoked, or suspended API key."},"403":{"description":"The API key does not have billing:manage."},"409":{"description":"The requested change is not a supported upgrade or billing state requires support."},"429":{"description":"Too many billing links were requested."},"503":{"description":"Stripe billing is temporarily unavailable."}}}},"/billing/portal-link":{"post":{"tags":["billing"],"operationId":"createBillingPortalLink","x-route-path":"/api/v1/billing/portal-link","summary":"Create billing portal link","description":"Creates a short-lived Stripe-hosted link for payment details, invoices, cancellation, and billing recovery. Creating the link does not itself change billing.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Short-lived Stripe-hosted billing portal link.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingLinkResponse"}}}},"401":{"description":"Missing, invalid, revoked, or suspended API key."},"403":{"description":"The API key does not have billing:manage."},"404":{"description":"The account does not have a Stripe billing account yet."},"429":{"description":"Too many billing links were requested."},"503":{"description":"Stripe billing is temporarily unavailable."}}}},"/taxonomy":{"get":{"tags":["taxonomy"],"operationId":"getTaxonomy","x-route-path":"/api/v1/taxonomy","summary":"List taxonomy","description":"Returns valid filter values and display labels for store search, contact search, and enrichment workflows.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Taxonomy values for filters and display names."},"401":{"description":"Missing or invalid API key."},"403":{"description":"The account does not have API access."}}}},"/stores/{domain}":{"get":{"tags":["stores"],"operationId":"getStore","x-route-path":"/api/v1/stores/{domain}","summary":"Get store","description":"Enriches one known Shopify store domain from the StoreInspect database. Returning a store consumes the unique-store export allowance once per allowance period. V1 does not live-scan uncached domains.","security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Store domain to look up. URLs are normalized to their hostname."}],"responses":{"200":{"description":"Store intelligence for a domain already present in the StoreInspect database."},"400":{"description":"Invalid domain input."},"401":{"description":"Missing or invalid API key."},"403":{"description":"The account does not have API access."},"404":{"description":"No known store exists for the domain."}}}},"/stores/search":{"post":{"tags":["stores"],"operationId":"searchStores","x-route-path":"/api/v1/stores/search","summary":"Search stores","description":"Searches Shopify stores by focused ICP filters with stable sorting, cursor pagination, broad-search guardrails, monthly search-row quotas, and a unique-store export allowance for returned stores.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoreSearchRequest"}}}},"responses":{"200":{"description":"A cursor-paginated list of stores matching the supplied filters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoreListResponse"}}}},"400":{"description":"Invalid filters, limit, or cursor."},"401":{"description":"Missing or invalid API key."},"403":{"description":"The account does not have API access."}}}},"/stores/enrich":{"post":{"tags":["stores"],"operationId":"enrichStores","x-route-path":"/api/v1/stores/enrich","summary":"Enrich stores","description":"Batch enriches a small set of known Shopify store domains already present in the StoreInspect database. Returned stores consume the unique-store export allowance once per allowance period.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoreEnrichRequest"}}}},"responses":{"200":{"description":"Found and not-found rows for a small set of domains already present in the StoreInspect database.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoreEnrichResponse"}}}},"400":{"description":"Invalid domains or unsupported reveal mode."},"401":{"description":"Missing or invalid API key."},"403":{"description":"The account does not have API access."}}}},"/contacts/search":{"post":{"tags":["contacts"],"operationId":"searchContacts","x-route-path":"/api/v1/contacts/search","summary":"Search contacts","description":"Searches preview-safe contact records at Shopify stores using role, seniority, location, technology, and store ICP filters. Returned stores consume the unique-store export allowance once per allowance period.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactSearchRequest"}}}},"responses":{"200":{"description":"A cursor-paginated list of contact previews matching the supplied filters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactPreviewListResponse"}}}},"400":{"description":"Invalid filters, limit, or cursor."},"401":{"description":"Missing or invalid API key."},"403":{"description":"The account does not have API access."}}}},"/contacts/reveal":{"post":{"tags":["contacts"],"operationId":"revealContacts","x-route-path":"/api/v1/contacts/reveal","summary":"Reveal contacts","description":"Reveals full contact identity and contact channels with shared contact credits, a unique-store export allowance for delivered store data, and optional idempotency protection.","security":[{"bearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Optional key used to safely retry a contact reveal request without spending credits twice."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactRevealRequest"}}}},"responses":{"200":{"description":"Full contact data for contacts revealed with shared contact credits.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactRevealResponse"}}}},"400":{"description":"Invalid contact IDs."},"401":{"description":"Missing or invalid API key."},"402":{"description":"Not enough contact credits. Trial users receive a billing action when ending the trial would unlock paid Pro credits immediately.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"},"examples":{"trialCreditsExhausted":{"summary":"Trial credits exhausted","value":{"error":{"type":"quota_error","code":"insufficient_contact_credits","message":"You have used all 250 trial contact credits. Start paid Pro now to unlock 1000 monthly credits.","param":"contact_ids","billing":{"action":"end_trial_to_unlock_pro_credits","current_limit":250,"paid_plan_limit":1000,"trial_ends_at":"2026-07-11T01:03:57.000Z","url":"https://storeinspect.com/dashboard/settings/billing"},"request_id":"req_abc123"}}}}}}},"403":{"description":"The account does not have API access."},"404":{"description":"No revealable contacts were found."}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"StoreInspect API key"}},"schemas":{"UsageResponse":{"type":"object","properties":{"object":{"type":"string","const":"usage"},"plan":{"type":"object","properties":{"slug":{"type":"string","enum":["free","pro","business","enterprise"]},"name":{"type":"string"},"status":{"type":"string"},"trial":{"type":"object","properties":{"active":{"type":"boolean"},"ends_at":{"type":["string","null"],"format":"date-time"}},"required":["active","ends_at"]}},"required":["slug","name","status","trial"]},"contact_credits":{"type":"object","properties":{"total":{"type":"integer","minimum":0},"used":{"type":"integer","minimum":0},"remaining":{"type":"integer","minimum":0},"paid_plan_total":{"type":"integer","minimum":0},"period_start":{"type":"string","format":"date-time"},"period_end":{"type":"string","format":"date-time"}},"required":["total","used","remaining","paid_plan_total","period_start","period_end"]},"store_exports":{"type":"object","properties":{"limit":{"type":"integer","minimum":0},"used":{"type":"integer","minimum":0},"reserved":{"type":"integer","minimum":0},"remaining":{"type":"integer","minimum":0},"period_start":{"type":"string","format":"date-time"},"period_end":{"type":"string","format":"date-time"}},"required":["limit","used","reserved","remaining","period_start","period_end"]},"api_requests":{"type":"object","properties":{"limit":{"type":"integer","minimum":0},"used":{"type":"integer","minimum":0},"remaining":{"type":"integer","minimum":0},"period_start":{"type":"string","format":"date-time"},"period_end":{"type":"string","format":"date-time"}},"required":["limit","used","remaining","period_start","period_end"]},"search_rows":{"type":"object","properties":{"limit":{"type":"integer","minimum":0},"used":{"type":"integer","minimum":0},"remaining":{"type":"integer","minimum":0},"period_start":{"type":"string","format":"date-time"},"period_end":{"type":"string","format":"date-time"}},"required":["limit","used","remaining","period_start","period_end"]},"rate_limit":{"type":"object","properties":{"limit":{"type":"integer","minimum":0},"interval":{"type":"string"}},"required":["limit","interval"]},"billing":{"$ref":"#/components/schemas/TrialCreditBillingAction"},"key":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"mode":{"type":"string","enum":["live","test"]}},"required":["id","name","mode"]},"request_id":{"type":"string"}},"required":["object","plan","contact_credits","store_exports","api_requests","search_rows","rate_limit","key","request_id"]},"TrialCreditBillingAction":{"type":"object","properties":{"can_unlock_paid_credits_now":{"type":"boolean"},"action":{"type":"string","enum":["end_trial_to_unlock_pro_credits"]},"current_limit":{"type":"integer","minimum":0},"paid_plan_limit":{"type":"integer","minimum":0},"trial_ends_at":{"type":["string","null"],"format":"date-time"},"url":{"type":"string","format":"uri"}},"required":["action","current_limit","paid_plan_limit","trial_ends_at","url"]},"ApiAccessBillingAction":{"type":"object","properties":{"action":{"type":"string","enum":["create_subscription_link","manage_billing"]},"url":{"type":"string","format":"uri"},"endpoint":{"type":"string","enum":["/api/v1/billing/subscription-link","/api/v1/billing/portal-link"]}},"required":["action","url","endpoint"]},"BillingAction":{"oneOf":[{"$ref":"#/components/schemas/TrialCreditBillingAction"},{"$ref":"#/components/schemas/ApiAccessBillingAction"}]},"SubscriptionLinkRequest":{"type":"object","additionalProperties":false,"properties":{"plan":{"type":"string","enum":["pro","business","enterprise"]},"billing":{"type":"string","enum":["monthly","annual"],"default":"monthly"}},"required":["plan"]},"BillingLinkResponse":{"type":"object","properties":{"object":{"type":"string","const":"billing_link"},"kind":{"type":"string","enum":["checkout","subscription_update_confirm","billing_portal"]},"url":{"type":"string","format":"uri"},"target_plan":{"type":["string","null"],"enum":["pro","business","enterprise",null]},"target_billing":{"type":["string","null"],"enum":["monthly","annual",null]},"expires_at":{"type":["string","null"],"format":"date-time"},"requires_customer_confirmation":{"type":"boolean","const":true},"request_id":{"type":"string"}},"required":["object","kind","url","target_plan","target_billing","expires_at","requires_customer_confirmation","request_id"]},"BillingStatusResponse":{"type":"object","properties":{"object":{"type":"string","const":"billing_status"},"plan":{"type":"object","properties":{"slug":{"type":"string","enum":["free","pro","business","enterprise"]},"name":{"type":"string"},"status":{"type":"string"},"billing":{"type":["string","null"],"enum":["monthly","annual",null]},"trial":{"type":"object","properties":{"active":{"type":"boolean"},"ends_at":{"type":["string","null"],"format":"date-time"}},"required":["active","ends_at"]},"cancel_at_period_end":{"type":"boolean"},"current_period_end":{"type":["string","null"],"format":"date-time"}},"required":["slug","name","status","billing","trial","cancel_at_period_end","current_period_end"]},"api_access":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"]},"contact_credits":{"type":"object","properties":{"total":{"type":"integer","minimum":0},"used":{"type":"integer","minimum":0},"remaining":{"type":"integer","minimum":0}},"required":["total","used","remaining"]},"has_billing_account":{"type":"boolean"},"actions":{"type":"object","properties":{"can_create_subscription_link":{"type":"boolean"},"can_manage_billing":{"type":"boolean"}},"required":["can_create_subscription_link","can_manage_billing"]},"request_id":{"type":"string"}},"required":["object","plan","api_access","contact_credits","has_billing_account","actions","request_id"]},"ApiErrorResponse":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","enum":["authentication_error","permission_error","invalid_request_error","rate_limit_error","quota_error","not_found_error","server_error"]},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"billing":{"$ref":"#/components/schemas/BillingAction"},"request_id":{"type":"string"}},"required":["type","code","message","request_id"]}},"required":["error"]},"StoreSearchRequest":{"type":"object","additionalProperties":false,"properties":{"filters":{"$ref":"#/components/schemas/StoreSearchFilters"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25},"cursor":{"type":["string","null"],"pattern":"^cur_[A-Za-z0-9_-]+$","default":null}},"required":["filters"]},"StoreSearchFilters":{"type":"object","additionalProperties":false,"properties":{"categories":{"type":"array","items":{"type":"string"},"maxItems":50},"countries":{"type":"array","items":{"type":"string"},"maxItems":50},"traffic_tiers":{"type":"array","items":{"type":"string"},"maxItems":50},"revenue_tiers":{"type":"array","items":{"type":"string"},"maxItems":50},"shopify_plus":{"type":"boolean"},"apps":{"$ref":"#/components/schemas/StoreTechnologyFilter"},"pixels":{"$ref":"#/components/schemas/StoreTechnologyFilter"},"themes":{"type":"object","additionalProperties":false,"properties":{"types":{"type":"array","items":{"type":"string","enum":["free","paid","custom"]},"maxItems":50}}},"meta_ads":{"type":"object","additionalProperties":false,"properties":{"active_ads_min":{"type":"integer","minimum":0,"maximum":100000}}},"store_created_at":{"$ref":"#/components/schemas/DateRangeFilter"},"first_discovered_at":{"$ref":"#/components/schemas/DateRangeFilter"},"contacts":{"type":"object","additionalProperties":false,"properties":{"has_revealable_contacts":{"type":"boolean"},"roles_any":{"type":"array","items":{"type":"string"},"maxItems":50}}}}},"StoreTechnologyFilter":{"type":"object","additionalProperties":false,"properties":{"any":{"type":"array","items":{"type":"string"},"maxItems":50},"all":{"type":"array","items":{"type":"string"},"maxItems":50},"none":{"type":"array","items":{"type":"string"},"maxItems":50}}},"DateRangeFilter":{"type":"object","additionalProperties":false,"minProperties":1,"properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"StoreListResponse":{"type":"object","properties":{"object":{"type":"string","const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Store"}},"has_more":{"type":"boolean"},"next_cursor":{"type":["string","null"]},"request_id":{"type":"string"}},"required":["object","data","has_more","next_cursor","request_id"]},"StoreEnrichRequest":{"type":"object","additionalProperties":false,"properties":{"domains":{"type":"array","minItems":1,"maxItems":25,"items":{"type":"string"},"description":"Store domains or URLs to enrich. Inputs are normalized to hostnames."},"include":{"type":"array","items":{"type":"string","enum":["store","technologies","contact_previews"]},"default":["store","technologies"]},"contact_roles":{"type":"array","items":{"type":"string"},"maxItems":50},"max_contacts_per_store":{"type":"integer","minimum":1,"maximum":10,"default":1},"reveal_contacts":{"type":"boolean","default":false,"description":"Must be false in V1 synchronous enrichment. Use /api/v1/contacts/reveal to reveal contacts."}},"required":["domains"]},"StoreEnrichResponse":{"type":"object","properties":{"object":{"type":"string","const":"store_enrichment_result"},"data":{"type":"array","items":{"$ref":"#/components/schemas/StoreEnrichResult"}},"found":{"type":"integer","minimum":0},"not_found":{"type":"integer","minimum":0},"request_id":{"type":"string"}},"required":["object","data","found","not_found","request_id"]},"StoreEnrichResult":{"type":"object","properties":{"domain":{"type":"string"},"status":{"type":"string","enum":["found","not_found"]},"store":{"oneOf":[{"$ref":"#/components/schemas/Store"},{"type":"null"}]},"contact_previews":{"type":"array","items":{"$ref":"#/components/schemas/ContactPreview"}}},"required":["domain","status","store"]},"Store":{"type":"object","properties":{"id":{"type":"string","pattern":"^st_[A-Za-z]+_[A-Za-z]{16}$"},"object":{"type":"string","const":"store"},"domain":{"type":"string"},"name":{"type":"string"},"category":{"type":["string","null"]},"country":{"type":["string","null"]},"traffic_tier":{"type":["string","null"]},"revenue_tier":{"type":["string","null"]},"shopify_plus":{"type":"boolean"},"lead_fit_score":{"type":["number","null"]},"store_created_at":{"oneOf":[{"type":"object","properties":{"estimate":{"type":["string","null"],"format":"date-time"},"resolution":{"type":["string","null"],"enum":["exact","month","year",null]},"source":{"type":["string","null"]},"confidence":{"type":["string","null"],"enum":["high","medium","low",null]}}},{"type":"null"}]},"first_discovered_at":{"type":["string","null"],"format":"date-time"},"technologies":{"type":"object","properties":{"apps":{"type":"array","items":{"type":"string"}},"pixels":{"type":"array","items":{"type":"string"}},"theme":{"type":"object","properties":{"name":{"type":["string","null"]},"type":{"type":["string","null"]}}}}},"contacts_summary":{"type":"object","properties":{"total":{"type":"integer"},"has_revealable_contacts":{"type":"boolean"},"verified_email_count":{"type":"integer"},"roles":{"type":"array","items":{"type":"string"}}}}}},"ContactSearchRequest":{"type":"object","additionalProperties":false,"properties":{"person":{"$ref":"#/components/schemas/ContactPersonFilters"},"store":{"$ref":"#/components/schemas/ContactStoreFilters"},"max_contacts_per_store":{"type":"integer","minimum":1,"maximum":10,"default":1},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25},"cursor":{"type":["string","null"],"pattern":"^cur_[A-Za-z0-9_-]+$","default":null}}},"ContactPersonFilters":{"type":"object","additionalProperties":false,"properties":{"roles_any":{"type":"array","items":{"type":"string"},"maxItems":50},"seniority_any":{"type":"array","items":{"type":"string"},"maxItems":50},"has_verified_email":{"type":"boolean"},"has_phone":{"type":"boolean"},"has_linkedin":{"type":"boolean"}}},"ContactStoreFilters":{"type":"object","additionalProperties":false,"properties":{"domains":{"type":"array","items":{"type":"string"},"maxItems":50,"description":"Exact store domains to search contacts for. URLs are normalized to hostnames."},"categories":{"type":"array","items":{"type":"string"},"maxItems":50},"countries":{"type":"array","items":{"type":"string"},"maxItems":50},"traffic_tiers":{"type":"array","items":{"type":"string"},"maxItems":50},"revenue_tiers":{"type":"array","items":{"type":"string"},"maxItems":50},"shopify_plus":{"type":"boolean"},"apps":{"$ref":"#/components/schemas/StoreTechnologyFilter"},"pixels":{"$ref":"#/components/schemas/StoreTechnologyFilter"},"themes":{"type":"object","additionalProperties":false,"properties":{"types":{"type":"array","items":{"type":"string","enum":["free","paid","custom"]},"maxItems":50}}},"meta_ads":{"type":"object","additionalProperties":false,"properties":{"active_ads_min":{"type":"integer","minimum":0,"maximum":100000}}},"store_created_at":{"$ref":"#/components/schemas/DateRangeFilter"},"first_discovered_at":{"$ref":"#/components/schemas/DateRangeFilter"}}},"ContactPreviewListResponse":{"type":"object","properties":{"object":{"type":"string","const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/ContactPreview"}},"has_more":{"type":"boolean"},"next_cursor":{"type":["string","null"]},"request_id":{"type":"string"}},"required":["object","data","has_more","next_cursor","request_id"]},"ContactPreview":{"type":"object","properties":{"id":{"type":"string","pattern":"^ct_[A-Za-z]+_[A-Za-z]{16}$"},"object":{"type":"string","const":"contact_preview"},"first_name":{"type":["string","null"]},"last_name_obfuscated":{"type":["string","null"]},"role":{"type":["string","null"]},"seniority":{"type":"string","enum":["executive","decision_maker","other"]},"title":{"type":["string","null"]},"has_verified_email":{"type":"boolean"},"has_phone":{"type":"boolean"},"has_linkedin":{"type":"boolean"},"revealed":{"type":"boolean"},"store":{"type":"object","properties":{"id":{"type":"string","pattern":"^st_[A-Za-z]+_[A-Za-z]{16}$"},"domain":{"type":"string"},"name":{"type":"string"},"category":{"type":["string","null"]},"traffic_tier":{"type":["string","null"]},"technologies":{"type":"object","properties":{"apps":{"type":"array","items":{"type":"string"}},"pixels":{"type":"array","items":{"type":"string"}}}}}}}},"ContactRevealRequest":{"type":"object","additionalProperties":false,"properties":{"contact_ids":{"type":"array","minItems":1,"maxItems":10,"items":{"type":"string","pattern":"^ct_[A-Za-z]+_[A-Za-z]{16}$"}}},"required":["contact_ids"]},"ContactRevealResponse":{"type":"object","properties":{"object":{"type":"string","const":"contact_reveal_result"},"credits":{"type":"object","properties":{"spent":{"type":"integer","minimum":0},"remaining":{"type":"integer","minimum":0}},"required":["spent","remaining"]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Contact"}},"request_id":{"type":"string"}},"required":["object","credits","data","request_id"]},"Contact":{"type":"object","properties":{"id":{"type":"string","pattern":"^ct_[A-Za-z]+_[A-Za-z]{16}$"},"object":{"type":"string","const":"contact"},"full_name":{"type":["string","null"]},"first_name":{"type":["string","null"]},"last_name":{"type":["string","null"]},"title":{"type":["string","null"]},"role":{"type":["string","null"]},"seniority":{"type":"string","enum":["executive","decision_maker","other"]},"linkedin_url":{"type":["string","null"]},"reveal_status":{"type":"string","enum":["newly_revealed","already_revealed"]},"charged":{"type":"boolean"},"emails":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string"},"status":{"type":"string"},"type":{"type":"string"},"is_primary":{"type":"boolean"}}}},"phones":{"type":"array","items":{"type":"object","properties":{"phone":{"type":"string"},"type":{"type":"string"},"is_primary":{"type":"boolean"}}}},"store":{"type":"object","properties":{"id":{"type":"string","pattern":"^st_[A-Za-z]+_[A-Za-z]{16}$"},"domain":{"type":"string"},"name":{"type":"string"}}},"revealed_at":{"type":"string","format":"date-time"}}}}}}