> ## Documentation Index
> Fetch the complete documentation index at: https://docs.prodbreak.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Supported APIs

> Point your app at any of these. Search the 500 most-used APIs and grab a sandbox for the one you depend on.

import { useState, useMemo } from 'react'

Each API is modeled once as a **pack** — a faithful, hand-built model of that service's objects,
lifecycle, errors, and webhooks. Point your app at a pack and it behaves like the real thing. The
control surface (force outcomes, seed, events, clock, [values you control](/concepts/exogenous)) is
**identical** no matter which one you pick — learn it once, use it everywhere.

**Looking for the API your app uses?** Search the 500 most-integrated APIs below.

export const CATALOG = [{"n":"Stripe","s":"stripe","c":"Payments","d":"stripe.com"},{"n":"OpenAI","s":"openai","c":"AI/ML","d":"openai.com"},{"n":"AWS S3","s":"s3","c":"Storage","d":"aws.amazon.com"},{"n":"GitHub","s":"github","c":"Dev Tools","d":"github.com"},{"n":"Twilio","s":"twilio","c":"Communications","d":"twilio.com"},{"n":"SendGrid","s":"sendgrid","c":"Communications","d":"sendgrid.com"},{"n":"Google Maps Platform","s":"google-maps","c":"Maps/Geo","d":"developers.google.com"},{"n":"Slack","s":"slack","c":"Social/Comms","d":"slack.com"},{"n":"AWS Lambda","s":"aws-lambda","c":"Infra","d":"aws.amazon.com"},{"n":"PayPal","s":"paypal","c":"Payments","d":"paypal.com"},{"n":"Anthropic","s":"anthropic","c":"AI/ML","d":"anthropic.com"},{"n":"Firebase Auth","s":"firebase-auth","c":"Auth","d":"firebase.google.com"},{"n":"Auth0","s":"auth0","c":"Auth","d":"auth0.com"},{"n":"Cloudinary","s":"cloudinary","c":"Media","d":"cloudinary.com"},{"n":"Sentry","s":"sentry","c":"Observability","d":"sentry.io"},{"n":"Datadog","s":"datadog","c":"Observability","d":"datadoghq.com"},{"n":"Salesforce","s":"salesforce","c":"CRM","d":"salesforce.com"},{"n":"HubSpot","s":"hubspot","c":"CRM","d":"hubspot.com"},{"n":"Mailchimp Marketing","s":"mailchimp","c":"Marketing","d":"mailchimp.com"},{"n":"Cloudflare","s":"cloudflare","c":"Infra","d":"cloudflare.com"},{"n":"Microsoft Graph","s":"microsoft-graph","c":"Productivity","d":"learn.microsoft.com"},{"n":"Algolia","s":"algolia","c":"Search","d":"algolia.com"},{"n":"Mapbox","s":"mapbox","c":"Maps/Geo","d":"mapbox.com"},{"n":"Shopify Admin","s":"shopify","c":"Commerce","d":"shopify.com"},{"n":"Plaid","s":"plaid","c":"Fintech","d":"plaid.com"},{"n":"Mixpanel","s":"mixpanel","c":"Analytics","d":"mixpanel.com"},{"n":"Amplitude","s":"amplitude","c":"Analytics","d":"amplitude.com"},{"n":"Discord","s":"discord","c":"Social","d":"discord.com"},{"n":"Mailgun","s":"mailgun","c":"Communications","d":"mailgun.com"},{"n":"Resend","s":"resend","c":"Communications","d":"resend.com"},{"n":"Postmark","s":"postmark","c":"Communications","d":"postmarkapp.com"},{"n":"AWS SES","s":"ses","c":"Communications","d":"aws.amazon.com"},{"n":"Adyen","s":"adyen","c":"Payments","d":"adyen.com"},{"n":"Square","s":"square","c":"Payments","d":"squareup.com"},{"n":"Braintree","s":"braintree","c":"Payments","d":"braintreepayments.com"},{"n":"Intercom","s":"intercom","c":"Support","d":"intercom.com"},{"n":"Zendesk","s":"zendesk","c":"Support","d":"zendesk.com"},{"n":"Klaviyo","s":"klaviyo","c":"Marketing","d":"klaviyo.com"},{"n":"Spotify","s":"spotify","c":"Media","d":"spotify.com"},{"n":"YouTube Data","s":"youtube","c":"Media","d":"youtube.com"},{"n":"WhatsApp Business","s":"whatsapp","c":"Social","d":"business.whatsapp.com"},{"n":"Meta Graph","s":"meta-graph","c":"Social","d":"developers.facebook.com"},{"n":"X / Twitter","s":"twitter","c":"Social","d":"twitter.com"},{"n":"LinkedIn","s":"linkedin","c":"Social","d":"linkedin.com"},{"n":"Google Drive","s":"google-drive","c":"Storage","d":"drive.google.com"},{"n":"Dropbox","s":"dropbox","c":"Storage","d":"dropbox.com"},{"n":"Notion API","s":"notion","c":"Productivity","d":"notion.so"},{"n":"AWS Cognito","s":"cognito","c":"Auth","d":"aws.amazon.com"},{"n":"Supabase","s":"supabase","c":"BaaS","d":"supabase.com"},{"n":"Firebase Firestore","s":"firestore","c":"Databases","d":"firebase.google.com"},{"n":"Vercel","s":"vercel","c":"Infra","d":"vercel.com"},{"n":"Netlify","s":"netlify","c":"Infra","d":"netlify.com"},{"n":"Zoom","s":"zoom","c":"Conferencing","d":"zoom.us"},{"n":"Calendly","s":"calendly","c":"Scheduling","d":"calendly.com"},{"n":"Cal.com","s":"calcom","c":"Scheduling","d":"cal.com"},{"n":"DocuSign","s":"docusign","c":"E-Signature","d":"docusign.com"},{"n":"Dropbox Sign","s":"dropbox-sign","c":"E-Signature","d":"dropbox.com"},{"n":"Pusher","s":"pusher","c":"Realtime","d":"pusher.com"},{"n":"Ably","s":"ably","c":"Realtime","d":"ably.com"},{"n":"ElevenLabs","s":"elevenlabs","c":"AI/ML","d":"elevenlabs.io"},{"n":"Hugging Face Inference","s":"huggingface","c":"AI/ML","d":"huggingface.co"},{"n":"Replicate","s":"replicate","c":"AI/ML","d":"replicate.com"},{"n":"Groq","s":"groq","c":"AI/ML","d":"groq.com"},{"n":"Together AI","s":"together","c":"AI/ML","d":"together.ai"},{"n":"Perplexity","s":"perplexity","c":"AI/ML","d":"perplexity.ai"},{"n":"Cohere","s":"cohere","c":"AI/ML","d":"cohere.com"},{"n":"Mistral","s":"mistral","c":"AI/ML","d":"mistral.ai"},{"n":"Google Gemini","s":"gemini","c":"AI/ML","d":"ai.google.dev"},{"n":"AssemblyAI","s":"assemblyai","c":"AI/ML","d":"assemblyai.com"},{"n":"Deepgram","s":"deepgram","c":"AI/ML","d":"deepgram.com"},{"n":"Mux","s":"mux","c":"Media","d":"mux.com"},{"n":"Twilio Video","s":"twilio-video","c":"Conferencing","d":"twilio.com"},{"n":"Daily.co","s":"daily","c":"Conferencing","d":"daily.co"},{"n":"LiveKit","s":"livekit","c":"Conferencing","d":"livekit.io"},{"n":"Agora","s":"agora","c":"Conferencing","d":"agora.io"},{"n":"Vonage","s":"vonage","c":"Communications","d":"vonage.com"},{"n":"MessageBird","s":"messagebird","c":"Communications","d":"messagebird.com"},{"n":"Plivo","s":"plivo","c":"Communications","d":"plivo.com"},{"n":"Telnyx","s":"telnyx","c":"Communications","d":"telnyx.com"},{"n":"Sinch","s":"sinch","c":"Communications","d":"sinch.com"},{"n":"Bandwidth","s":"bandwidth","c":"Communications","d":"bandwidth.com"},{"n":"WorkOS","s":"workos","c":"Auth","d":"workos.com"},{"n":"Okta","s":"okta","c":"Auth","d":"okta.com"},{"n":"Clerk","s":"clerk","c":"Auth","d":"clerk.com"},{"n":"Stytch","s":"stytch","c":"Auth","d":"stytch.com"},{"n":"Descope","s":"descope","c":"Auth","d":"descope.com"},{"n":"Kinde","s":"kinde","c":"Auth","d":"kinde.com"},{"n":"Persona","s":"persona","c":"KYC","d":"withpersona.com"},{"n":"Onfido","s":"onfido","c":"KYC","d":"onfido.com"},{"n":"Jumio","s":"jumio","c":"KYC","d":"jumio.com"},{"n":"Veriff","s":"veriff","c":"KYC","d":"veriff.com"},{"n":"Pinecone","s":"pinecone","c":"Vector DB","d":"pinecone.io"},{"n":"Weaviate","s":"weaviate","c":"Vector DB","d":"weaviate.io"},{"n":"Qdrant","s":"qdrant","c":"Vector DB","d":"qdrant.tech"},{"n":"Chroma","s":"chroma","c":"Vector DB","d":"trychroma.com"},{"n":"PostHog","s":"posthog","c":"Analytics","d":"posthog.com"},{"n":"Segment","s":"segment","c":"Analytics","d":"segment.com"},{"n":"RudderStack","s":"rudderstack","c":"Analytics","d":"rudderstack.com"},{"n":"Snowflake","s":"snowflake","c":"Data","d":"snowflake.com"},{"n":"BigQuery","s":"bigquery","c":"Data","d":"cloud.google.com"},{"n":"Databricks","s":"databricks","c":"Data","d":"databricks.com"},{"n":"Fivetran","s":"fivetran","c":"Data","d":"fivetran.com"},{"n":"Airbyte","s":"airbyte","c":"Data","d":"airbyte.com"},{"n":"Hightouch","s":"hightouch","c":"Data","d":"hightouch.com"},{"n":"Census","s":"census","c":"Data","d":"getcensus.com"},{"n":"dbt Cloud","s":"dbt-cloud","c":"Data","d":"getdbt.com"},{"n":"New Relic","s":"newrelic","c":"Observability","d":"newrelic.com"},{"n":"Honeycomb","s":"honeycomb","c":"Observability","d":"honeycomb.io"},{"n":"Rollbar","s":"rollbar","c":"Observability","d":"rollbar.com"},{"n":"Bugsnag","s":"bugsnag","c":"Observability","d":"bugsnag.com"},{"n":"LogRocket","s":"logrocket","c":"Observability","d":"logrocket.com"},{"n":"FullStory","s":"fullstory","c":"Observability","d":"fullstory.com"},{"n":"Microsoft Clarity","s":"clarity","c":"Analytics","d":"clarity.microsoft.com"},{"n":"Hotjar","s":"hotjar","c":"Analytics","d":"hotjar.com"},{"n":"PagerDuty","s":"pagerduty","c":"Observability","d":"pagerduty.com"},{"n":"Opsgenie","s":"opsgenie","c":"Observability","d":"atlassian.com"},{"n":"Statuspage","s":"statuspage","c":"Observability","d":"atlassian.com"},{"n":"BetterStack","s":"betterstack","c":"Observability","d":"betterstack.com"},{"n":"UptimeRobot","s":"uptimerobot","c":"Observability","d":"uptimerobot.com"},{"n":"Pingdom","s":"pingdom","c":"Observability","d":"pingdom.com"},{"n":"Checkly","s":"checkly","c":"Observability","d":"checklyhq.com"},{"n":"LaunchDarkly","s":"launchdarkly","c":"Feature Flags","d":"launchdarkly.com"},{"n":"Statsig","s":"statsig","c":"Feature Flags","d":"statsig.com"},{"n":"ConfigCat","s":"configcat","c":"Feature Flags","d":"configcat.com"},{"n":"Flagsmith","s":"flagsmith","c":"Feature Flags","d":"flagsmith.com"},{"n":"GrowthBook","s":"growthbook","c":"Feature Flags","d":"growthbook.io"},{"n":"Split.io","s":"splitio","c":"Feature Flags","d":"split.io"},{"n":"Optimizely","s":"optimizely","c":"Feature Flags","d":"optimizely.com"},{"n":"Eppo","s":"eppo","c":"Feature Flags","d":"geteppo.com"},{"n":"Linear","s":"linear","c":"Dev Tools","d":"linear.app"},{"n":"Jira (Atlassian)","s":"jira","c":"Dev Tools","d":"atlassian.com"},{"n":"Asana","s":"asana","c":"Productivity","d":"asana.com"},{"n":"Trello","s":"trello","c":"Productivity","d":"trello.com"},{"n":"Monday.com","s":"monday","c":"Productivity","d":"monday.com"},{"n":"ClickUp","s":"clickup","c":"Productivity","d":"clickup.com"},{"n":"Airtable","s":"airtable","c":"Databases","d":"airtable.com"},{"n":"Smartsheet","s":"smartsheet","c":"Productivity","d":"smartsheet.com"},{"n":"Basecamp","s":"basecamp","c":"Productivity","d":"basecamp.com"},{"n":"Todoist","s":"todoist","c":"Productivity","d":"todoist.com"},{"n":"ActiveCampaign","s":"activecampaign","c":"Marketing","d":"activecampaign.com"},{"n":"Brevo","s":"brevo","c":"Marketing","d":"brevo.com"},{"n":"ConvertKit","s":"convertkit","c":"Marketing","d":"convertkit.com"},{"n":"Constant Contact","s":"constant-contact","c":"Marketing","d":"constantcontact.com"},{"n":"AWeber","s":"aweber","c":"Marketing","d":"aweber.com"},{"n":"Drip","s":"drip","c":"Marketing","d":"getdrip.com"},{"n":"Omnisend","s":"omnisend","c":"Marketing","d":"omnisend.com"},{"n":"Customer.io","s":"customer-io","c":"Marketing","d":"customer.io"},{"n":"Braze","s":"braze","c":"Marketing","d":"braze.com"},{"n":"Iterable","s":"iterable","c":"Marketing","d":"iterable.com"},{"n":"Marketo","s":"marketo","c":"Marketing","d":"adobe.com"},{"n":"Pardot","s":"pardot","c":"Marketing","d":"pardot.com"},{"n":"Mailchimp Transactional","s":"mandrill","c":"Communications","d":"mailchimp.com"},{"n":"SparkPost","s":"sparkpost","c":"Communications","d":"sparkpost.com"},{"n":"Mailjet","s":"mailjet","c":"Communications","d":"mailjet.com"},{"n":"SMTP2GO","s":"smtp2go","c":"Communications","d":"smtp2go.com"},{"n":"ZeroBounce","s":"zerobounce","c":"Validation","d":"zerobounce.net"},{"n":"NeverBounce","s":"neverbounce","c":"Validation","d":"neverbounce.com"},{"n":"Kickbox","s":"kickbox","c":"Validation","d":"kickbox.com"},{"n":"Hunter.io","s":"hunter","c":"Validation","d":"hunter.io"},{"n":"Numverify","s":"numverify","c":"Validation","d":"numverify.com"},{"n":"Twilio Lookup","s":"twilio-lookup","c":"Validation","d":"twilio.com"},{"n":"Smarty","s":"smarty","c":"Validation","d":"smarty.com"},{"n":"Loqate","s":"loqate","c":"Validation","d":"loqate.com"},{"n":"Lob","s":"lob","c":"Postal/Shipping","d":"lob.com"},{"n":"PostGrid","s":"postgrid","c":"Postal/Shipping","d":"postgrid.com"},{"n":"EasyPost","s":"easypost","c":"Postal/Shipping","d":"easypost.com"},{"n":"Shippo","s":"shippo","c":"Postal/Shipping","d":"goshippo.com"},{"n":"ShipStation","s":"shipstation","c":"Postal/Shipping","d":"shipstation.com"},{"n":"AfterShip","s":"aftership","c":"Postal/Shipping","d":"aftership.com"},{"n":"ShipBob","s":"shipbob","c":"Postal/Shipping","d":"shipbob.com"},{"n":"Sendcloud","s":"sendcloud","c":"Postal/Shipping","d":"sendcloud.com"},{"n":"FedEx Developer","s":"fedex","c":"Postal/Shipping","d":"developer.fedex.com"},{"n":"UPS Developer","s":"ups","c":"Postal/Shipping","d":"developer.ups.com"},{"n":"USPS Web Tools","s":"usps","c":"Postal/Shipping","d":"usps.com"},{"n":"DHL","s":"dhl","c":"Postal/Shipping","d":"developer.dhl.com"},{"n":"Onfleet","s":"onfleet","c":"Delivery","d":"onfleet.com"},{"n":"DoorDash Drive","s":"doordash-drive","c":"Delivery","d":"developer.doordash.com"},{"n":"Uber Direct","s":"uber-direct","c":"Delivery","d":"developer.uber.com"},{"n":"Instacart Developer","s":"instacart","c":"Delivery","d":"docs.instacart.com"},{"n":"Bright Data","s":"bright-data","c":"Scraping","d":"brightdata.com"},{"n":"Apify","s":"apify","c":"Scraping","d":"apify.com"},{"n":"Oxylabs","s":"oxylabs","c":"Scraping","d":"oxylabs.io"},{"n":"ScrapingBee","s":"scrapingbee","c":"Scraping","d":"scrapingbee.com"},{"n":"ScraperAPI","s":"scraperapi","c":"Scraping","d":"scraperapi.com"},{"n":"Scrapfly","s":"scrapfly","c":"Scraping","d":"scrapfly.io"},{"n":"ZenRows","s":"zenrows","c":"Scraping","d":"zenrows.com"},{"n":"Browserbase","s":"browserbase","c":"Scraping","d":"browserbase.com"},{"n":"Browserless","s":"browserless","c":"Scraping","d":"browserless.io"},{"n":"BrowserStack","s":"browserstack","c":"Testing","d":"browserstack.com"},{"n":"Sauce Labs","s":"saucelabs","c":"Testing","d":"saucelabs.com"},{"n":"LambdaTest","s":"lambdatest","c":"Testing","d":"lambdatest.com"},{"n":"SerpAPI","s":"serpapi","c":"Search","d":"serpapi.com"},{"n":"Serper.dev","s":"serper","c":"Search","d":"serper.dev"},{"n":"Brave Search","s":"brave-search","c":"Search","d":"brave.com"},{"n":"Tavily","s":"tavily","c":"Search","d":"tavily.com"},{"n":"Exa","s":"exa","c":"Search","d":"exa.ai"},{"n":"You.com","s":"you","c":"Search","d":"you.com"},{"n":"Bing Search","s":"bing-search","c":"Search","d":"microsoft.com"},{"n":"Elastic Cloud","s":"elastic","c":"Search","d":"elastic.co"},{"n":"Meilisearch","s":"meilisearch","c":"Search","d":"meilisearch.com"},{"n":"Typesense","s":"typesense","c":"Search","d":"typesense.org"},{"n":"Turso","s":"turso","c":"Databases","d":"turso.tech"},{"n":"ClickHouse Cloud","s":"clickhouse","c":"Databases","d":"clickhouse.com"},{"n":"PlanetScale","s":"planetscale","c":"Databases","d":"planetscale.com"},{"n":"Neon","s":"neon","c":"Databases","d":"neon.tech"},{"n":"MongoDB Atlas","s":"mongodb-atlas","c":"Databases","d":"mongodb.com"},{"n":"Upstash","s":"upstash","c":"Databases","d":"upstash.com"},{"n":"Hasura","s":"hasura","c":"BaaS","d":"hasura.io"},{"n":"Cloudflare R2","s":"r2","c":"Storage","d":"developers.cloudflare.com"},{"n":"Google Cloud Storage","s":"gcs","c":"Storage","d":"cloud.google.com"},{"n":"Azure Blob Storage","s":"azure-blob","c":"Storage","d":"azure.microsoft.com"},{"n":"Box","s":"box","c":"Storage","d":"box.com"},{"n":"Uploadcare","s":"uploadcare","c":"Media","d":"uploadcare.com"},{"n":"ImageKit","s":"imagekit","c":"Media","d":"imagekit.io"},{"n":"Imgix","s":"imgix","c":"Media","d":"imgix.com"},{"n":"Bunny.net","s":"bunny","c":"Infra","d":"bunny.net"},{"n":"Fastly","s":"fastly","c":"Infra","d":"fastly.com"},{"n":"Akamai","s":"akamai","c":"Infra","d":"akamai.com"},{"n":"DigitalOcean","s":"digitalocean","c":"Infra","d":"digitalocean.com"},{"n":"Render","s":"render","c":"Infra","d":"render.com"},{"n":"Fly.io","s":"fly","c":"Infra","d":"fly.io"},{"n":"Railway","s":"railway","c":"Infra","d":"railway.app"},{"n":"Heroku","s":"heroku","c":"Infra","d":"heroku.com"},{"n":"Vercel API","s":"vercel-api","c":"Infra","d":"vercel.com"},{"n":"AWS API Gateway","s":"aws-apigateway","c":"Infra","d":"aws.amazon.com"},{"n":"AWS DynamoDB","s":"dynamodb","c":"Databases","d":"aws.amazon.com"},{"n":"AWS SQS","s":"sqs","c":"Infra","d":"aws.amazon.com"},{"n":"AWS SNS","s":"sns","c":"Communications","d":"aws.amazon.com"},{"n":"AWS EventBridge","s":"eventbridge","c":"Infra","d":"aws.amazon.com"},{"n":"Modern Treasury","s":"modern-treasury","c":"Fintech","d":"moderntreasury.com"},{"n":"Increase","s":"increase","c":"Fintech","d":"increase.com"},{"n":"Unit","s":"unit","c":"Fintech","d":"unit.co"},{"n":"Marqeta","s":"marqeta","c":"Fintech","d":"marqeta.com"},{"n":"Lithic","s":"lithic","c":"Fintech","d":"lithic.com"},{"n":"Mercury","s":"mercury","c":"Fintech","d":"mercury.com"},{"n":"Brex","s":"brex","c":"Fintech","d":"brex.com"},{"n":"Ramp","s":"ramp","c":"Fintech","d":"ramp.com"},{"n":"Wise","s":"wise","c":"Fintech","d":"wise.com"},{"n":"GoCardless","s":"gocardless","c":"Fintech","d":"gocardless.com"},{"n":"TrueLayer","s":"truelayer","c":"Fintech","d":"truelayer.com"},{"n":"Tink","s":"tink","c":"Fintech","d":"tink.com"},{"n":"Yodlee","s":"yodlee","c":"Fintech","d":"yodlee.com"},{"n":"MX","s":"mx","c":"Fintech","d":"mx.com"},{"n":"Deck.co","s":"deck","c":"Fintech","d":"deck.co"},{"n":"Alloy","s":"alloy","c":"KYC","d":"alloy.com"},{"n":"Socure","s":"socure","c":"KYC","d":"socure.com"},{"n":"Sumsub","s":"sumsub","c":"KYC","d":"sumsub.com"},{"n":"Trulioo","s":"trulioo","c":"KYC","d":"trulioo.com"},{"n":"Checkr","s":"checkr","c":"Background Checks","d":"checkr.com"},{"n":"Sterling","s":"sterling","c":"Background Checks","d":"sterlingcheck.com"},{"n":"Sift","s":"sift","c":"Fraud","d":"sift.com"},{"n":"Castle","s":"castle","c":"Fraud","d":"castle.io"},{"n":"FingerprintJS","s":"fingerprint","c":"Fraud","d":"fingerprint.com"},{"n":"Forter","s":"forter","c":"Fraud","d":"forter.com"},{"n":"Sardine","s":"sardine","c":"Fraud","d":"sardine.ai"},{"n":"Signifyd","s":"signifyd","c":"Fraud","d":"signifyd.com"},{"n":"Riskified","s":"riskified","c":"Fraud","d":"riskified.com"},{"n":"Kount","s":"kount","c":"Fraud","d":"kount.com"},{"n":"hCaptcha","s":"hcaptcha","c":"Captcha","d":"hcaptcha.com"},{"n":"reCAPTCHA","s":"recaptcha","c":"Captcha","d":"google.com"},{"n":"Cloudflare Turnstile","s":"turnstile","c":"Captcha","d":"cloudflare.com"},{"n":"Arkose Labs","s":"arkose","c":"Captcha","d":"arkoselabs.com"},{"n":"Stripe Identity","s":"stripe-identity","c":"KYC","d":"stripe.com"},{"n":"Stripe Tax","s":"stripe-tax","c":"Tax","d":"stripe.com"},{"n":"Avalara","s":"avalara","c":"Tax","d":"avalara.com"},{"n":"TaxJar","s":"taxjar","c":"Tax","d":"taxjar.com"},{"n":"Anrok","s":"anrok","c":"Tax","d":"anrok.com"},{"n":"Vital","s":"vital","c":"Health","d":"tryvital.io"},{"n":"Particle Health","s":"particle-health","c":"Health","d":"particlehealth.com"},{"n":"Health Gorilla","s":"health-gorilla","c":"Health","d":"healthgorilla.com"},{"n":"Redox","s":"redox","c":"Health","d":"redoxengine.com"},{"n":"Epic FHIR","s":"epic-fhir","c":"Health","d":"fhir.epic.com"},{"n":"1upHealth","s":"1uphealth","c":"Health","d":"1up.health"},{"n":"Stream Chat","s":"stream","c":"Chat","d":"getstream.io"},{"n":"SendBird","s":"sendbird","c":"Chat","d":"sendbird.com"},{"n":"PubNub","s":"pubnub","c":"Realtime","d":"pubnub.com"},{"n":"OneSignal","s":"onesignal","c":"Push","d":"onesignal.com"},{"n":"Pushwoosh","s":"pushwoosh","c":"Push","d":"pushwoosh.com"},{"n":"Airship","s":"airship","c":"Push","d":"airship.com"},{"n":"Adjust","s":"adjust","c":"Mobile Analytics","d":"adjust.com"},{"n":"AppsFlyer","s":"appsflyer","c":"Mobile Analytics","d":"appsflyer.com"},{"n":"Branch.io","s":"branch","c":"Mobile Analytics","d":"branch.io"},{"n":"Singular","s":"singular","c":"Mobile Analytics","d":"singular.net"},{"n":"RevenueCat","s":"revenuecat","c":"Mobile Billing","d":"revenuecat.com"},{"n":"App Store Connect","s":"appstoreconnect","c":"Mobile Billing","d":"developer.apple.com"},{"n":"Google Play Developer","s":"google-play","c":"Mobile Billing","d":"developers.google.com"},{"n":"Apple HealthKit","s":"healthkit","c":"Sports/Fitness","d":"developer.apple.com"},{"n":"Google Fit","s":"google-fit","c":"Sports/Fitness","d":"developers.google.com"},{"n":"Strava","s":"strava","c":"Sports/Fitness","d":"strava.com"},{"n":"Fitbit","s":"fitbit","c":"Sports/Fitness","d":"fitbit.com"},{"n":"Garmin Connect","s":"garmin","c":"Sports/Fitness","d":"garmin.com"},{"n":"Whoop","s":"whoop","c":"Sports/Fitness","d":"whoop.com"},{"n":"Oura","s":"oura","c":"Sports/Fitness","d":"ouraring.com"},{"n":"Polar Flow","s":"polar","c":"Sports/Fitness","d":"polar.com"},{"n":"Withings","s":"withings","c":"Sports/Fitness","d":"withings.com"},{"n":"Wahoo","s":"wahoo","c":"Sports/Fitness","d":"wahoofitness.com"},{"n":"Amadeus","s":"amadeus","c":"Travel","d":"amadeus.com"},{"n":"Duffel","s":"duffel","c":"Travel","d":"duffel.com"},{"n":"Sabre","s":"sabre","c":"Travel","d":"sabre.com"},{"n":"Skyscanner","s":"skyscanner","c":"Travel","d":"skyscanner.net"},{"n":"Expedia Partner Solutions","s":"expedia","c":"Travel","d":"developers.expediagroup.com"},{"n":"HotelBeds","s":"hotelbeds","c":"Travel","d":"hotelbeds.com"},{"n":"Booking.com Partner","s":"booking","c":"Travel","d":"developers.booking.com"},{"n":"Hopper","s":"hopper","c":"Travel","d":"hopper.com"},{"n":"Webflow","s":"webflow","c":"Commerce","d":"webflow.com"},{"n":"WooCommerce","s":"woocommerce","c":"Commerce","d":"woocommerce.com"},{"n":"BigCommerce","s":"bigcommerce","c":"Commerce","d":"bigcommerce.com"},{"n":"Wix","s":"wix","c":"Commerce","d":"wix.com"},{"n":"Squarespace","s":"squarespace","c":"Commerce","d":"squarespace.com"},{"n":"Adobe Commerce","s":"magento","c":"Commerce","d":"business.adobe.com"},{"n":"Salesforce Commerce Cloud","s":"sfcc","c":"Commerce","d":"salesforce.com"},{"n":"Etsy","s":"etsy","c":"Commerce","d":"etsy.com"},{"n":"eBay","s":"ebay","c":"Commerce","d":"ebay.com"},{"n":"Amazon SP-API","s":"amazon-sp","c":"Commerce","d":"developer-docs.amazon.com"},{"n":"Walmart Marketplace","s":"walmart","c":"Commerce","d":"developer.walmart.com"},{"n":"Recharge","s":"recharge","c":"Commerce","d":"rechargepayments.com"},{"n":"Bold Commerce","s":"bold-commerce","c":"Commerce","d":"boldcommerce.com"},{"n":"Yotpo","s":"yotpo","c":"Marketing","d":"yotpo.com"},{"n":"Trustpilot","s":"trustpilot","c":"Marketing","d":"trustpilot.com"},{"n":"Google Reviews","s":"google-reviews","c":"Marketing","d":"developers.google.com"},{"n":"Gusto","s":"gusto","c":"HR/Payroll","d":"gusto.com"},{"n":"Rippling","s":"rippling","c":"HR/Payroll","d":"rippling.com"},{"n":"BambooHR","s":"bamboohr","c":"HR/Payroll","d":"bamboohr.com"},{"n":"Deel","s":"deel","c":"HR/Payroll","d":"deel.com"},{"n":"Finch","s":"finch","c":"HR/Payroll","d":"tryfinch.com"},{"n":"Workday","s":"workday","c":"HR/Payroll","d":"workday.com"},{"n":"ADP","s":"adp","c":"HR/Payroll","d":"adp.com"},{"n":"Paychex","s":"paychex","c":"HR/Payroll","d":"paychex.com"},{"n":"Pinwheel","s":"pinwheel","c":"HR/Payroll","d":"pinwheelapi.com"},{"n":"Merge.dev","s":"merge","c":"Integrations","d":"merge.dev"},{"n":"Apideck","s":"apideck","c":"Integrations","d":"apideck.com"},{"n":"Nango","s":"nango","c":"Integrations","d":"nango.dev"},{"n":"Knit","s":"knit","c":"Integrations","d":"getknit.dev"},{"n":"Paragon","s":"paragon","c":"Integrations","d":"useparagon.com"},{"n":"Pipedream","s":"pipedream","c":"Integrations","d":"pipedream.com"},{"n":"Zapier","s":"zapier","c":"Integrations","d":"zapier.com"},{"n":"Make","s":"make","c":"Integrations","d":"make.com"},{"n":"n8n","s":"n8n","c":"Integrations","d":"n8n.io"},{"n":"Workato","s":"workato","c":"Integrations","d":"workato.com"},{"n":"MuleSoft","s":"mulesoft","c":"Integrations","d":"mulesoft.com"},{"n":"Boomi","s":"boomi","c":"Integrations","d":"boomi.com"},{"n":"QuickBooks","s":"quickbooks","c":"Accounting","d":"intuit.com"},{"n":"Xero","s":"xero","c":"Accounting","d":"xero.com"},{"n":"Sage Accounting","s":"sage","c":"Accounting","d":"sage.com"},{"n":"FreshBooks","s":"freshbooks","c":"Accounting","d":"freshbooks.com"},{"n":"Codat","s":"codat","c":"Accounting","d":"codat.io"},{"n":"Rutter","s":"rutter","c":"Accounting","d":"rutter.com"},{"n":"Bill.com","s":"bill","c":"Fintech","d":"bill.com"},{"n":"Melio","s":"melio","c":"Fintech","d":"meliopayments.com"},{"n":"Tipalti","s":"tipalti","c":"Fintech","d":"tipalti.com"},{"n":"Coinbase","s":"coinbase","c":"Crypto","d":"coinbase.com"},{"n":"Coinbase Commerce","s":"coinbase-commerce","c":"Crypto","d":"commerce.coinbase.com"},{"n":"Binance","s":"binance","c":"Crypto","d":"binance.com"},{"n":"Kraken","s":"kraken","c":"Crypto","d":"kraken.com"},{"n":"Gemini","s":"gemini-exchange","c":"Crypto","d":"gemini.com"},{"n":"Bitstamp","s":"bitstamp","c":"Crypto","d":"bitstamp.net"},{"n":"CoinGecko","s":"coingecko","c":"Crypto","d":"coingecko.com"},{"n":"CoinMarketCap","s":"coinmarketcap","c":"Crypto","d":"coinmarketcap.com"},{"n":"CryptoCompare","s":"cryptocompare","c":"Crypto","d":"cryptocompare.com"},{"n":"Messari","s":"messari","c":"Crypto","d":"messari.io"},{"n":"The Graph","s":"thegraph","c":"Crypto","d":"thegraph.com"},{"n":"Alchemy","s":"alchemy","c":"Crypto","d":"alchemy.com"},{"n":"Infura","s":"infura","c":"Crypto","d":"infura.io"},{"n":"QuickNode","s":"quicknode","c":"Crypto","d":"quicknode.com"},{"n":"Moralis","s":"moralis","c":"Crypto","d":"moralis.io"},{"n":"Tatum","s":"tatum","c":"Crypto","d":"tatum.io"},{"n":"Helius","s":"helius","c":"Crypto","d":"helius.dev"},{"n":"Etherscan","s":"etherscan","c":"Crypto","d":"etherscan.io"},{"n":"WalletConnect","s":"walletconnect","c":"Crypto","d":"walletconnect.com"},{"n":"Privy","s":"privy","c":"Auth","d":"privy.io"},{"n":"Dynamic","s":"dynamic","c":"Auth","d":"dynamic.xyz"},{"n":"Thirdweb","s":"thirdweb","c":"Crypto","d":"thirdweb.com"},{"n":"Circle","s":"circle","c":"Crypto","d":"circle.com"},{"n":"Alpha Vantage","s":"alphavantage","c":"Financial Data","d":"alphavantage.co"},{"n":"IEX Cloud","s":"iex","c":"Financial Data","d":"iexcloud.io"},{"n":"Polygon.io","s":"polygon","c":"Financial Data","d":"polygon.io"},{"n":"Finnhub","s":"finnhub","c":"Financial Data","d":"finnhub.io"},{"n":"Twelve Data","s":"twelvedata","c":"Financial Data","d":"twelvedata.com"},{"n":"Nasdaq Data Link","s":"nasdaq-data","c":"Financial Data","d":"data.nasdaq.com"},{"n":"Intrinio","s":"intrinio","c":"Financial Data","d":"intrinio.com"},{"n":"Tiingo","s":"tiingo","c":"Financial Data","d":"tiingo.com"},{"n":"OpenExchangeRates","s":"openexchangerates","c":"Currency","d":"openexchangerates.org"},{"n":"Fixer.io","s":"fixer","c":"Currency","d":"fixer.io"},{"n":"XE","s":"xe","c":"Currency","d":"xe.com"},{"n":"Currencylayer","s":"currencylayer","c":"Currency","d":"currencylayer.com"},{"n":"ExchangeRate-API","s":"exchangerate-api","c":"Currency","d":"exchangerate-api.com"},{"n":"NewsAPI.org","s":"newsapi","c":"News","d":"newsapi.org"},{"n":"GNews","s":"gnews","c":"News","d":"gnews.io"},{"n":"New York Times","s":"nyt","c":"News","d":"developer.nytimes.com"},{"n":"The Guardian","s":"guardian","c":"News","d":"open-platform.theguardian.com"},{"n":"Reddit","s":"reddit","c":"Social","d":"reddit.com"},{"n":"Telegram Bot","s":"telegram","c":"Social","d":"telegram.org"},{"n":"Twitch","s":"twitch","c":"Media","d":"twitch.tv"},{"n":"Vimeo","s":"vimeo","c":"Media","d":"vimeo.com"},{"n":"SoundCloud","s":"soundcloud","c":"Media","d":"soundcloud.com"},{"n":"Apple Music","s":"apple-music","c":"Media","d":"music.apple.com"},{"n":"Last.fm","s":"lastfm","c":"Media","d":"last.fm"},{"n":"Deezer","s":"deezer","c":"Media","d":"deezer.com"},{"n":"TikTok","s":"tiktok","c":"Social","d":"developers.tiktok.com"},{"n":"Pinterest","s":"pinterest","c":"Social","d":"pinterest.com"},{"n":"Snap Kit","s":"snapkit","c":"Social","d":"kit.snapchat.com"},{"n":"Threads","s":"threads","c":"Social","d":"threads.net"},{"n":"Mastodon","s":"mastodon","c":"Social","d":"joinmastodon.org"},{"n":"Bluesky AT Proto","s":"bluesky","c":"Social","d":"bsky.app"},{"n":"Mailparser","s":"mailparser","c":"Email Parsing","d":"mailparser.io"},{"n":"Parseur","s":"parseur","c":"Email Parsing","d":"parseur.com"},{"n":"Mindee","s":"mindee","c":"OCR/AI","d":"mindee.com"},{"n":"Veryfi","s":"veryfi","c":"OCR/AI","d":"veryfi.com"},{"n":"Rossum","s":"rossum","c":"OCR/AI","d":"rossum.ai"},{"n":"LlamaParse","s":"llamaparse","c":"OCR/AI","d":"llamaindex.ai"},{"n":"Unstructured.io","s":"unstructured","c":"OCR/AI","d":"unstructured.io"},{"n":"Reducto","s":"reducto","c":"OCR/AI","d":"reducto.ai"},{"n":"Google Vision","s":"google-vision","c":"AI/ML","d":"cloud.google.com"},{"n":"AWS Rekognition","s":"rekognition","c":"AI/ML","d":"aws.amazon.com"},{"n":"Azure AI Vision","s":"azure-vision","c":"AI/ML","d":"azure.microsoft.com"},{"n":"Clarifai","s":"clarifai","c":"AI/ML","d":"clarifai.com"},{"n":"Google Translate","s":"google-translate","c":"AI/ML","d":"cloud.google.com"},{"n":"DeepL","s":"deepl","c":"AI/ML","d":"deepl.com"},{"n":"Lokalise","s":"lokalise","c":"i18n","d":"lokalise.com"},{"n":"Phrase","s":"phrase","c":"i18n","d":"phrase.com"},{"n":"Crowdin","s":"crowdin","c":"i18n","d":"crowdin.com"},{"n":"Smartling","s":"smartling","c":"i18n","d":"smartling.com"},{"n":"PandaDoc","s":"pandadoc","c":"E-Signature","d":"pandadoc.com"},{"n":"Adobe Sign","s":"adobe-sign","c":"E-Signature","d":"adobe.com"},{"n":"SignNow","s":"signnow","c":"E-Signature","d":"signnow.com"},{"n":"Documenso","s":"documenso","c":"E-Signature","d":"documenso.com"},{"n":"Typeform","s":"typeform","c":"Forms","d":"typeform.com"},{"n":"JotForm","s":"jotform","c":"Forms","d":"jotform.com"},{"n":"Tally","s":"tally","c":"Forms","d":"tally.so"},{"n":"Fillout","s":"fillout","c":"Forms","d":"fillout.com"},{"n":"Formspree","s":"formspree","c":"Forms","d":"formspree.io"},{"n":"SurveyMonkey","s":"surveymonkey","c":"Forms","d":"surveymonkey.com"},{"n":"Qualtrics","s":"qualtrics","c":"Forms","d":"qualtrics.com"},{"n":"Inngest","s":"inngest","c":"Workflows","d":"inngest.com"},{"n":"Trigger.dev","s":"triggerdev","c":"Workflows","d":"trigger.dev"},{"n":"Hookdeck","s":"hookdeck","c":"Workflows","d":"hookdeck.com"},{"n":"Svix","s":"svix","c":"Workflows","d":"svix.com"},{"n":"ngrok","s":"ngrok","c":"Workflows","d":"ngrok.com"},{"n":"Temporal Cloud","s":"temporal","c":"Workflows","d":"temporal.io"},{"n":"Hatchet","s":"hatchet","c":"Workflows","d":"hatchet.run"},{"n":"Defer","s":"defer","c":"Workflows","d":"defer.run"},{"n":"Linear API","s":"linear-api","c":"Dev Tools","d":"linear.app"},{"n":"CircleCI","s":"circleci","c":"Dev Tools","d":"circleci.com"},{"n":"GitHub Actions","s":"github-actions","c":"Dev Tools","d":"github.com"},{"n":"GitLab","s":"gitlab","c":"Dev Tools","d":"gitlab.com"},{"n":"Bitbucket","s":"bitbucket","c":"Dev Tools","d":"bitbucket.org"},{"n":"Buildkite","s":"buildkite","c":"Dev Tools","d":"buildkite.com"},{"n":"Confluence","s":"confluence","c":"Productivity","d":"atlassian.com"},{"n":"Coda","s":"coda","c":"Productivity","d":"coda.io"},{"n":"Google Sheets","s":"google-sheets","c":"Productivity","d":"google.com"},{"n":"Google Calendar","s":"google-calendar","c":"Scheduling","d":"calendar.google.com"},{"n":"Outlook Calendar","s":"outlook-calendar","c":"Scheduling","d":"outlook.live.com"},{"n":"Nylas","s":"nylas","c":"Scheduling","d":"nylas.com"},{"n":"Cronofy","s":"cronofy","c":"Scheduling","d":"cronofy.com"},{"n":"Microsoft Teams","s":"msteams","c":"Conferencing","d":"microsoft.com"},{"n":"Webex","s":"webex","c":"Conferencing","d":"webex.com"},{"n":"Google Meet","s":"google-meet","c":"Conferencing","d":"meet.google.com"},{"n":"Cloudflare Stream","s":"cf-stream","c":"Media","d":"cloudflare.com"},{"n":"Bitmovin","s":"bitmovin","c":"Media","d":"bitmovin.com"},{"n":"Brightcove","s":"brightcove","c":"Media","d":"brightcove.com"},{"n":"Kaltura","s":"kaltura","c":"Media","d":"kaltura.com"},{"n":"JW Player","s":"jwplayer","c":"Media","d":"jwplayer.com"},{"n":"Vapi","s":"vapi","c":"AI Voice","d":"vapi.ai"},{"n":"Bland.ai","s":"bland","c":"AI Voice","d":"bland.ai"},{"n":"Retell.ai","s":"retell","c":"AI Voice","d":"retellai.com"},{"n":"Cartesia","s":"cartesia","c":"AI Voice","d":"cartesia.ai"},{"n":"PlayHT","s":"playht","c":"AI Voice","d":"play.ht"},{"n":"Resemble.ai","s":"resemble","c":"AI Voice","d":"resemble.ai"},{"n":"Rev.ai","s":"revai","c":"AI/ML","d":"rev.ai"},{"n":"Speechmatics","s":"speechmatics","c":"AI/ML","d":"speechmatics.com"},{"n":"Gladia","s":"gladia","c":"AI/ML","d":"gladia.io"},{"n":"LangSmith","s":"langsmith","c":"LLM Ops","d":"langchain.com"},{"n":"LangFuse","s":"langfuse","c":"LLM Ops","d":"langfuse.com"},{"n":"Helicone","s":"helicone","c":"LLM Ops","d":"helicone.ai"},{"n":"Portkey","s":"portkey","c":"LLM Ops","d":"portkey.ai"},{"n":"Braintrust","s":"braintrust","c":"LLM Ops","d":"braintrust.dev"},{"n":"Humanloop","s":"humanloop","c":"LLM Ops","d":"humanloop.com"},{"n":"PromptLayer","s":"promptlayer","c":"LLM Ops","d":"promptlayer.com"},{"n":"Weights & Biases","s":"wandb","c":"LLM Ops","d":"wandb.ai"},{"n":"Comet","s":"comet","c":"LLM Ops","d":"comet.com"},{"n":"Fal.ai","s":"fal","c":"AI/ML","d":"fal.ai"},{"n":"Stability AI","s":"stability","c":"AI/ML","d":"stability.ai"},{"n":"Leonardo.ai","s":"leonardo","c":"AI/ML","d":"leonardo.ai"},{"n":"Bedrock","s":"bedrock","c":"AI/ML","d":"aws.amazon.com"},{"n":"Vertex AI","s":"vertex-ai","c":"AI/ML","d":"cloud.google.com"},{"n":"Azure OpenAI","s":"azure-openai","c":"AI/ML","d":"azure.microsoft.com"},{"n":"Cloudflare Workers AI","s":"cf-workers-ai","c":"AI/ML","d":"developers.cloudflare.com"},{"n":"MaxMind GeoIP2","s":"maxmind","c":"Maps/Geo","d":"maxmind.com"},{"n":"IPinfo","s":"ipinfo","c":"Maps/Geo","d":"ipinfo.io"},{"n":"ipgeolocation.io","s":"ipgeolocation","c":"Maps/Geo","d":"ipgeolocation.io"},{"n":"Radar.io","s":"radar","c":"Maps/Geo","d":"radar.com"},{"n":"Foursquare","s":"foursquare","c":"Maps/Geo","d":"foursquare.com"},{"n":"Geoapify","s":"geoapify","c":"Maps/Geo","d":"geoapify.com"},{"n":"LocationIQ","s":"locationiq","c":"Maps/Geo","d":"locationiq.com"},{"n":"HERE","s":"here","c":"Maps/Geo","d":"here.com"},{"n":"TomTom","s":"tomtom","c":"Maps/Geo","d":"tomtom.com"},{"n":"OpenWeather","s":"openweather","c":"Maps/Geo","d":"openweathermap.org"},{"n":"Tomorrow.io","s":"tomorrow-io","c":"Maps/Geo","d":"tomorrow.io"},{"n":"WeatherAPI.com","s":"weatherapi","c":"Maps/Geo","d":"weatherapi.com"},{"n":"AccuWeather","s":"accuweather","c":"Maps/Geo","d":"accuweather.com"}]

export const CATALOG_CSS = `
.pb-catalog{margin:18px 0 8px}
.pb-controls{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:14px}
.pb-search{position:relative;flex:1;min-width:240px}
.pb-search svg{position:absolute;left:14px;top:50%;transform:translateY(-50%);width:18px;height:18px;color:#9b98a8;pointer-events:none}
.pb-search input{width:100%;font-size:15px;padding:12px 14px 12px 42px;border-radius:12px;border:1.5px solid #e7e6f0;background:var(--pb-card,#fff);color:inherit;outline:none;transition:border-color .15s,box-shadow .15s}
.pb-search input::placeholder{color:#9b98a8}
.pb-search input:focus{border-color:#6D5AE6;box-shadow:0 0 0 4px rgba(109,90,230,.14)}
.pb-select{font-size:14px;padding:12px 14px;border-radius:12px;border:1.5px solid #e7e6f0;background:var(--pb-card,#fff);color:inherit;outline:none;cursor:pointer}
.pb-select:focus{border-color:#6D5AE6}
.pb-count{font-size:13px;color:#9b98a8;margin:4px 2px 14px}
.pb-count b{color:#6b6878}
.pb-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}
.pb-card{display:flex;flex-direction:column;align-items:flex-start;gap:10px;padding:16px;border:1.5px solid #ececf3;border-radius:16px;background:var(--pb-card,#fff);text-decoration:none;color:inherit;transition:transform .14s,border-color .14s,box-shadow .14s;min-height:104px}
.pb-card:hover{transform:translateY(-3px);border-color:#A99BF5;box-shadow:0 6px 16px rgba(109,90,230,.13)}
.pb-logobox{width:40px;height:40px;border-radius:10px;background:#f6f5fb;display:flex;align-items:center;justify-content:center;overflow:hidden;flex:none}
.pb-logo{width:30px;height:30px;object-fit:contain}
.pb-mono{font-weight:800;font-size:14px;color:#6D5AE6;letter-spacing:-.02em}
.pb-name{font-size:14.5px;font-weight:700;line-height:1.2;letter-spacing:-.01em}
.pb-cat{font-size:11.5px;color:#9b98a8;margin-top:-2px}
.pb-empty{grid-column:1/-1;text-align:center;padding:40px 18px;border:1.5px dashed #e7e6f0;border-radius:16px;color:#6b6878}
.pb-empty a{color:#6D5AE6;font-weight:600}
.pb-more-wrap{display:flex;justify-content:center;margin:22px 0 6px}
.pb-more{font:inherit;font-size:14px;font-weight:700;color:#6D5AE6;background:var(--pb-card,#fff);border:1.5px solid #d9d4f7;border-radius:12px;padding:11px 26px;cursor:pointer;transition:.13s}
.pb-more:hover{background:#6D5AE6;border-color:#6D5AE6;color:#fff}
.pb-more-n{font-weight:500;opacity:.8}
@media (prefers-color-scheme:dark){
  .pb-card,.pb-search input,.pb-select{--pb-card:#16151d;border-color:#2a2833}
  .pb-logobox{background:#23212e}
  .pb-card:hover{border-color:#6D5AE6}
}
`

export const BUILT = { stripe: true, deck: true };
export const REQUEST_URL = "https://github.com/FrancoDominguez/prod-break/issues/new";

export const PAGE = 60;

export const ApiCatalog = () => {
  const [q, setQ] = useState("");
  const [cat, setCat] = useState("All");
  const [visible, setVisible] = useState(PAGE);
  const cats = useMemo(
    () => ["All", ...Array.from(new Set(CATALOG.map((a) => a.c))).sort()],
    []
  );
  const ql = q.trim().toLowerCase();
  const list = CATALOG.filter(
    (a) =>
      (cat === "All" || a.c === cat) &&
      (!ql ||
        a.n.toLowerCase().includes(ql) ||
        a.c.toLowerCase().includes(ql) ||
        a.d.toLowerCase().includes(ql))
  );
  const shown = list.slice(0, visible);
  const onErr = (e) => {
    const img = e.target;
    img.style.display = "none";
    if (img.nextSibling) img.nextSibling.style.display = "flex";
  };
  const href = (a) =>
    BUILT[a.s]
      ? "/apis/" + a.s
      : REQUEST_URL + "?title=" + encodeURIComponent("Pack request: " + a.n);
  return (
    <div className="pb-catalog">
      <style dangerouslySetInnerHTML={{ __html: CATALOG_CSS }} />
      <div className="pb-controls">
        <div className="pb-search">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round"><circle cx="11" cy="11" r="7" /><path d="m20 20-3.2-3.2" /></svg>
          <input
            type="text"
            placeholder="Search 500 APIs — find the one your app uses…"
            value={q}
            onChange={(e) => { setQ(e.target.value); setVisible(PAGE); }}
            autoComplete="off"
          />
        </div>
        <select className="pb-select" value={cat} onChange={(e) => { setCat(e.target.value); setVisible(PAGE); }}>
          {cats.map((c) => (
            <option key={c} value={c}>{c === "All" ? "All categories" : c}</option>
          ))}
        </select>
      </div>
      <div className="pb-count">
        Showing <b>{shown.length}</b> of <b>{list.length}</b>
        {list.length !== CATALOG.length ? " matching" : ""} APIs
      </div>
      <div className="pb-grid">
        {shown.map((a) => (
          <a key={a.s} className="pb-card" href={href(a)}>
            <span className="pb-logobox">
              <img
                className="pb-logo"
                src={"https://www.google.com/s2/favicons?domain=" + a.d + "&sz=128"}
                loading="lazy"
                alt={a.n}
                onError={onErr}
              />
              <span className="pb-mono" style={{ display: "none" }}>
                {a.n.replace(/[^A-Za-z0-9]/g, "").slice(0, 2).toUpperCase()}
              </span>
            </span>
            <span className="pb-name">{a.n}</span>
            <span className="pb-cat">{a.c}</span>
          </a>
        ))}
        {list.length === 0 && (
          <div className="pb-empty">
            No API matching “{q}” in our list yet —{" "}
            <a href={REQUEST_URL + "?title=" + encodeURIComponent("Pack request: " + q)}>request a pack →</a>
          </div>
        )}
      </div>
      {list.length > visible && (
        <div className="pb-more-wrap">
          <button className="pb-more" onClick={() => setVisible((v) => v + PAGE)}>
            Load more <span className="pb-more-n">({list.length - visible} left)</span>
          </button>
        </div>
      )}
    </div>
  );
};

<ApiCatalog />

## What a pack page gives you

Each pack page is a focused reference for that one API — so you can wire it up without reading the
whole docs: its **resources & lifecycle**, the vendor's real **errors & magic values**, its
**webhooks** (and the branches you can force), and the **[values you control](/concepts/exogenous)**.

New to ProdBreak? Start with the [Quickstart](/quickstart) — it's the same three steps for every pack.

<Note>
  **Don't see yours, or want it sooner?** If your app calls it over HTTP, it can have a pack — modeling a
  new API is new behavioral work, not new infrastructure. Search above and hit *request a pack*.
</Note>
