{"aod": "0.1", "provider": {"name": "Pexafy", "url": "https://pexafy.com", "portalUrl": "https://docs.pexafy.com"}, "maturity": "self-serve", "account": {"required": true, "agentPolicy": "allowed", "prerequisites": [], "plans": [{"name": "Free", "requiredFor": "5,000 API requests/month and 1 API key \u2014 at no cost and with no card", "url": "https://pexafy.com/pricing/"}, {"name": "Starter", "requiredFor": "20,000 API requests/month and 3 API keys \u2014 $9/month", "url": "https://pexafy.com/pricing/"}, {"name": "Pro", "requiredFor": "70,000 API requests/month and 5 API keys \u2014 $29/month", "url": "https://pexafy.com/pricing/"}, {"name": "Expert", "requiredFor": "150,000 API requests/month and 10 API keys \u2014 $59/month", "url": "https://pexafy.com/pricing/"}, {"name": "Team", "requiredFor": "300,000 API requests/month and 25 API keys \u2014 $99/month", "url": "https://pexafy.com/pricing/"}, {"name": "Business", "requiredFor": "1,000,000 API requests/month and unlimited API keys \u2014 $299/month", "url": "https://pexafy.com/pricing/"}, {"name": "Enterprise", "requiredFor": "2,000,000 API requests/month and unlimited API keys \u2014 $599/month", "url": "https://pexafy.com/pricing/"}]}, "verification": [], "registration": {"applicationNoun": "API key", "owner": "user", "mechanisms": [{"type": "console-only", "description": "Create an account at https://pexafy.com/signup/, then create a key at https://pexafy.com/dashboard/api-keys/create/. The key is issued immediately: no application form, no review queue, no per-download callback to implement. There is no programmatic key-issuance endpoint yet.", "baseUrl": "https://api.pexafy.com", "docsUrls": ["https://docs.pexafy.com", "https://pexafy.com/dashboard/api-keys/create/"], "auth": "session"}]}, "authentication": {"methods": [{"id": "api-key", "type": "header-env", "header": "x-api-key", "env": ["PEXAFY_API_KEY"], "bootstrap": "Create a key from the dashboard, then send it in the x-api-key header. A Bearer token is accepted on the same routes."}]}, "credentials": [{"type": "api-key", "fields": {"api_key": "x-api-key"}, "oneTimeDisplay": true, "rotation": "Create a new key and revoke the old one from https://pexafy.com/dashboard/api-keys/ at any time."}], "scopes": {"model": "roles", "notes": "Keys created from the dashboard carry read and write: read covers search, photo lookups and facets; write covers the caller's own collections. Admin and crawler roles are internal and are never granted to user keys."}, "flow": {"args": [{"id": "api_key", "description": "A Pexafy API key from https://pexafy.com/dashboard/api-keys/create/"}], "steps": [{"id": "probe", "description": "Unauthenticated health check \u2014 confirms the service is reachable before spending a key.", "auth": "none", "request": {"method": "GET", "url": "https://api.pexafy.com/health"}}, {"id": "search", "description": "First authenticated call: a natural-language search returning photos from every source in one schema.", "auth": "api-key", "request": {"method": "GET", "url": "https://api.pexafy.com/api/v1/search/photos?q=a%20tired%20developer%20at%20a%20desk%2C%20warm%20lamp%20light&limit=10", "headers": {"x-api-key": "{args.api_key}"}}}, {"id": "usage", "description": "Read the quota the key has consumed, so an agent can pace itself.", "auth": "api-key", "request": {"method": "GET", "url": "https://api.pexafy.com/api/v1/usage", "headers": {"x-api-key": "{args.api_key}"}}}], "outputs": {"photos": "{steps.search.data}", "quota": "{steps.usage.data}"}}, "economics": {"freeTier": "5,000 requests/month, 1 API key, no card required", "pricingUrl": "https://pexafy.com/pricing/"}, "gaps": ["API keys are created from the web dashboard; there is no programmatic key-issuance endpoint yet."]}