{"openapi":"3.1.0","info":{"title":"Leadralia API","description":"\nThe Leadralia public API.\n\n**Getting access.** The directory's business data needs an API licence. The steps:\n(1) create a free account; (2) apply for the licence in Settings, API keys, or with\n`POST /api/v1/license`; (3) type back the code mailed to an address on your company's\ndomain; (4) wait for the approval; (5) create the key in Settings, API keys. A key\nwithout an approved licence answers 403 on searches, lists and records.\n\n**Authentication.** Every endpoint takes an API key, created in the Leadralia\ndashboard under Settings, API keys (the directory's read endpoints, marked\n\"key optional\", also answer without one: 10 requests a minute per address,\npages of 20, and a business at the basic level only; with a key the key's own\nbudget and larger pages):\n\n    Authorization: Bearer lra_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\nSome hosts strip the Authorization header; `X-API-Key: lra_...` works too.\nThe key is shown once, when it is created, and cannot be read again afterwards.\n\n**Scopes.** A key holds an explicit list of permissions and can do nothing\noutside it. A call missing one returns 403 `insufficient_scope`.\n\n**Errors.** Always `{\"error\": {\"code\", \"message\", \"docs\"}}`. Branch on `code`,\nwhich is stable inside a version; `message` is for a human and may change.\n\n**Rate limits.** Budgeted per key, not per account, so one integration cannot\nstarve another. Responses carry `X-RateLimit-Limit` and `X-RateLimit-Remaining`\n(the per-minute budget); over budget returns 429 `rate_limited` with `Retry-After`\nand `X-RateLimit-Reset` (seconds).\n\n**Own lists.** `POST /api/v1/lists` and `POST /api/v1/lists/{id}/contacts` (JSON or CSV,\nup to 50,000 a call) hold companies you brought yourself, each with its own subject and\nbody; `POST /api/v1/campaigns` takes their `list_id` and sends each mail as it stands, in\nplain text, with no open pixel, no click tracking and no rewritten link. The rows belong to\nyour account alone. `GET` and `POST /api/v1/suppression` are your own do-not-contact list,\n`PUT /api/v1/webhook` sends you replies, opt-outs, bounces and complaints as signed POSTs,\nand `GET /api/v1/stats/sending` gives your daily numbers per sender domain.\n\n**Germany.** Leadralia does not send mail to Germany for now, for any account: a recipient\nthere (by its country, or by a .de address when its country is unknown) is left out, not\ncharged, and the answer says so once in `notices`.\n\n**Prices.** Every call with a key to the directory endpoints is counted. A search or a\nlist answers an id, a name, a category and a town; one business is read by its id at a\nlevel (`fields=basic`, `profile` or `full`, each including the one before). Once billing\nstarts: free search and basic calls, once for your company's domain, then priced\nper 1,000 calls (a launch offer is taken off the list prices), paid from an API plan and\nthen the wallet; without free calls or balance a call answers 402 `insufficient_balance`.\nUntil then nothing is charged or refused. A licence reads at most a monthly number of\nrecords across its keys (429 past it). Using the data needs an API licence for the\ncompany: https://leadralia.com/api-license. Prices, plans and a quickstart:\nhttps://leadralia.com/developers. Usage: `GET /api/v1/usage`; the licence:\n`GET /api/v1/license`.\n\n**The annual feed.** The whole directory and everything that changed in it, by annual\ncontract: `GET /api/v1/feed/records` walks every published business with a cursor, up to\n1,000 a page, and `GET /api/v1/feed/changes` answers every business added, changed or gone\nsince a cursor. A key with the `directory:feed` scope, on an approved annual feed licence\ninside its term, at the level that licence bought. No e-mail addresses. Never metered,\nno monthly cap; one pull at a time per licence, up to 10 requests a second. Write to us:\nhttps://leadralia.com/developers#feed.\n\n**Pure-Inbox (e-mail checks).** `POST /api/v1/verify` tells you whether one address can receive\nmail (`deliverable`, `undeliverable`, `catch_all`, `unknown`), and\n`POST /api/v1/verify/lists` does the same for up to 200,000 addresses, with progress, paged\nresults and CSV. Only a definite answer is charged per 1,000; unknown is free; the first 100\nchecks of an account are free, once. A result is our assessment at that moment, not a promise of\ndelivery. Lists are kept 30 days and deleted on request.\n\n**Expired domains.** `GET /api/v1/expired-domains` searches expired domain names by trade,\ntown, country, length, ending and the shape of the name, 50 a page;\n`GET /api/v1/expired-domains/facets` gives the counts beside the filters and\n`POST /api/v1/expired-domains/{domain}/check` checks whether one name of the list is free\n(1,000 a day per key). Scope `domains:read`; each call counts as one search.\n\n**Versioning.** Fields and endpoints are added inside v1, never removed or\nrenamed. A change that would break an existing client ships as /api/v2.\n","version":"1.0.0"},"paths":{"/api/v1/me":{"get":{"tags":["Public API v1"],"summary":"The account this key belongs to","operationId":"me_api_v1_me_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Me Api V1 Me Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scopes":{"get":{"tags":["Public API v1"],"summary":"Every scope a key can hold","description":"The live catalogue, so a client library can render real permission names\ninstead of a hard-coded list that goes stale the week after it ships.","operationId":"scopes_api_v1_scopes_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Scopes Api V1 Scopes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/readiness":{"get":{"tags":["Public API v1"],"summary":"What the account still needs before it can search and send","description":"The dashboard's Setup checklist, for an integration: every item the\naccount needs for a search or a campaign to succeed (a confirmed address, an\nactive sender, credit), whether it is done, and the dashboard page that fixes\nit (`url`). An integration shows \"connect a sender in Leadralia\" BEFORE its\nmerchant composes a message, instead of a 409 afterwards. It says the same as\nthe dashboard. Needs only account:read: it says what is missing, never how a\nsender is set up, and carries no secret.","operationId":"readiness_api_v1_readiness_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Readiness Api V1 Readiness Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/postal-address":{"get":{"tags":["Public API v1"],"summary":"The business postal address and its earlier versions","description":"The address a mail to a US business carries (CAN-SPAM), as Settings holds\nit, and every earlier version, newest first: {\"current\", \"history\": [{n,\nat, old, new, source}]}.","operationId":"postal_address_api_v1_postal_address_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Postal Address Api V1 Postal Address Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Public API v1"],"summary":"Replace the business postal address","description":"{\"postal_address\": \"...\"}: the new address, archived with the old one.\nAn address is replaced, never removed (422 postal_address_required_replace);\na new one must read like a postal address (422 invalid_request).","operationId":"replace_postal_address_api_v1_postal_address_put","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Replace Postal Address Api V1 Postal Address Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/leads":{"get":{"tags":["Public API v1"],"summary":"List the account's leads","operationId":"list_leads_api_v1_leads_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Page Size"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"fetched_at","title":"Sort"}},{"name":"dir","in":"query","required":false,"schema":{"type":"string","default":"desc","title":"Dir"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text match on name/address.","title":"Q"},"description":"Free-text match on name/address."},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 3166-1 alpha-2 code (NL, US): only the leads in that country. It is the country of the search that found the lead, or of its phone number when the search had none.","title":"Country"},"description":"ISO 3166-1 alpha-2 code (NL, US): only the leads in that country. It is the country of the search that found the lead, or of its phone number when the search had none."},{"name":"has_email","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Email"}},{"name":"email_quality","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Only the leads whose address has this quality: own_domain, consumer_mailbox, third_party, unmonitored, needs_review.","title":"Email Quality"},"description":"Only the leads whose address has this quality: own_domain, consumer_mailbox, third_party, unmonitored, needs_review."},{"name":"has_mobile","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Mobile"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"One of: new, contacted, replied, interested, won, lost","title":"Status"},"description":"One of: new, contacted, replied, interested, won, lost"},{"name":"emailed","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"true: contacted by email before; false: never contacted. `has_email=true&emailed=false` is what a campaign would send to.","title":"Emailed"},"description":"true: contacted by email before; false: never contacted. `has_email=true&emailed=false` is what a campaign would send to."},{"name":"session_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Only the businesses one search found (its `session_id`).","title":"Session Id"},"description":"Only the businesses one search found (its `session_id`)."},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Leads Api V1 Leads Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/leads/{place_id}":{"get":{"tags":["Public API v1"],"summary":"Read one lead","operationId":"get_lead_api_v1_leads__place_id__get","parameters":[{"name":"place_id","in":"path","required":true,"schema":{"type":"string","title":"Place Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Lead Api V1 Leads  Place Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Public API v1"],"summary":"Move a lead through the pipeline","description":"Only status, note and follow_up_at can be changed over the API. A lead's email\nor phone is changed in the dashboard.","operationId":"patch_lead_api_v1_leads__place_id__patch","parameters":[{"name":"place_id","in":"path","required":true,"schema":{"type":"string","title":"Place Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Patch Lead Api V1 Leads  Place Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/senders":{"get":{"tags":["Public API v1"],"summary":"List the account's senders","operationId":"list_senders_api_v1_senders_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Senders Api V1 Senders Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/senders/leadralia":{"get":{"tags":["Public API v1"],"summary":"Can the account get an address hosted by Leadralia","operationId":"leadralia_offer_api_v1_senders_leadralia_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Leadralia Offer Api V1 Senders Leadralia Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Public API v1"],"summary":"Create the account's address hosted by Leadralia","description":"`{\"name\": \"fabian\"}` creates the sender fabian@fabian.<root>. It starts\n`pending` and turns `active` by itself within minutes, once its records are\nlive; poll GET /api/v1/senders.","operationId":"leadralia_create_api_v1_senders_leadralia_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Leadralia Create Api V1 Senders Leadralia Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/senders/ses":{"post":{"tags":["Public API v1"],"summary":"Create a platform sender (house and admin accounts)","description":"Creates an active sender on the platform's own sending, from `from_email`,\n`from_name`, `region`, `configuration_set` and `daily_cap`. The From address must\nbe on a domain of the platform. Only the house account or an admin may create\none. It becomes the default only when the account has no sender.","operationId":"ses_create_api_v1_senders_ses_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ses Create Api V1 Senders Ses Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/senders/{sender_id}":{"patch":{"tags":["Public API v1"],"summary":"Change a sender's From name, where its replies go, or who gets them","description":"`{\"reply_to\": \"sales@example.com\"}` sends the replies to this sender's\ncampaigns to that address (next to the Replies inbox); `\"\"` or null goes back\nto the default. `{\"reply_mode\": \"email\"}` sends them ONLY to that address\n(our Replies inbox never sees them); `\"inbox\"` keeps them ONLY on the\nReplies page; `\"both\"` (or omitting it) is today's default. Only a hosted\n\"Send via Leadralia\" address can set a mode other than \"both\" — a connected\nmailbox already gets its replies natively. `{\"from_name\": \"...\"}` changes the name recipients see.","operationId":"update_sender_api_v1_senders__sender_id__patch","parameters":[{"name":"sender_id","in":"path","required":true,"schema":{"type":"integer","title":"Sender Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Sender Api V1 Senders  Sender Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns":{"post":{"tags":["Public API v1"],"summary":"Start an email campaign","description":"Sends `subject` and `body` (text or HTML; `{name}`, `{short_name}`,\n`{city}`, `{category}`, `{address}`, `{website}`, `{phone}` and `{rating}`\nare filled in per lead, and `[[one wording|another]]` gives each lead one of\nthe wordings) to every lead in `audience` that has an email address and was\nnever contacted before. Suppressed addresses are skipped at send time. Each\nsend is charged exactly as it is from the dashboard, and the platform footer\nwith the unsubscribe link is always appended.\n\n`personal: true` asks for the mail without that footer and without the\nList-Unsubscribe headers. It is honoured for the house account only; on any\nother account the campaign is stored with the flag and sent with the footer.\n`unsubscribe_link: true` next to it ends the personal mail with one plain\nline holding the recipient's unsubscribe link, and sends the\nList-Unsubscribe headers. `ai_writer: true` is for the house account only.\n\n`audience` narrows the account's leads: an explicit `place_ids` list, a\n`session_id` (the result set of a search), or leads-workspace filters\n(`category`, `country`, `q`, `has_mobile`, `status`). Omitted, the audience is\nevery lead on the account.\n\nA session, a filter or the whole account is mailed at the addresses Leadralia\ncan vouch for (`email_quality` own_domain / consumer_mailbox); pass\n`include_untrusted: true` to also mail addresses on someone else's domain and\nunread mailboxes. An explicit `place_ids` list is mailed as given.\n\nTwo languages, one message: `language` names the language the mail is written\nin, and `alternate` ({\"language\", \"body\", \"subject\"}) carries the same message\nin the other one. The mail then goes out in the primary language with a single\nline at the top linking to the reader's own copy, so nobody has to guess which\nlanguage a business reads. Without `alternate` nothing changes.\n\n`send_window` ({\"days\": [0, 1, 2, 3, 4], \"from_hour\": 9, \"to_hour\": 16,\n\"tz\": \"America/Chicago\"}, optional) limits the sending to those weekdays\n(0 = Monday) and hours in that time zone; outside them the campaign waits as\n`queued` with `waiting.reason` \"send_window\".\n\n`list_id` sends to one of the account's own lists (POST /api/v1/lists) instead\nof its leads: each contact's own subject and body go out as they stand, in\nplain text, and `subject` and `body` here are optional, for a contact without\nany. Only the send is charged. `unsubscribe_link: true` then adds\nthe one-click opt-out link and the List-Unsubscribe headers. `stop_on_reply:\ntrue`, on any campaign, stops the mail to a company once anyone there answers.\n\nLeadralia does not send mail to Germany for now, for any account: such\nrecipients are left out, not charged, and `notices` says so once.","operationId":"create_campaign_api_v1_campaigns_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Campaign Api V1 Campaigns Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Public API v1"],"summary":"List campaigns","operationId":"list_campaigns_api_v1_campaigns_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Page Size"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"One of: queued, running, paused, finished, failed, stopped","title":"Status"},"description":"One of: queued, running, paused, finished, failed, stopped"},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Campaigns Api V1 Campaigns Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/test":{"post":{"tags":["Public API v1"],"summary":"Send one test mail to yourself","description":"Sends the message ONCE, through the real sending domain, to the address\nthis account confirmed for tests (Settings, else the sign-in address). The\nrecipient cannot be named by the caller: this is how an integration checks a\nmail before a city gets it, not a way to mail a stranger for free.\n\nNothing is charged, no daily cap is spent and no campaign is created.\n`sample_place_id` renders the message against one of the account's own leads\ninstead of the stand-in, so `{name}`, `{city}` and `{category}` read as they\nwill on the day. `language` names the language the mail is written in, as on\na campaign: the footer and the unsubscribe page behind its button speak it.\n`personal` and `unsubscribe_link` are the campaign flags of the same name\n(house account only). A second language is not rendered here: the line that links to it belongs to\na real campaign, so test each language as its own mail.","operationId":"test_campaign_api_v1_campaigns_test_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Test Campaign Api V1 Campaigns Test Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}":{"get":{"tags":["Public API v1"],"summary":"Read one campaign, with its funnel","operationId":"get_campaign_api_v1_campaigns__campaign_id__get","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Campaign Api V1 Campaigns  Campaign Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/resume":{"post":{"tags":["Public API v1"],"summary":"Resume a paused campaign, optionally from another sender","description":"Continues a paused campaign, or one that stopped because its sender could\nnot send (`resumable` on the campaign says which), from where it stopped:\nthe same audience, the same messages, and nobody it already mailed gets it\nagain. `sender_id` moves it to another of the account's senders first, which\nis how a campaign whose sender was deleted (`error_code` sender_deleted) goes\non; omitted, it keeps its own sender. The checks are a launch's: one campaign\nat a time, an active sender with a from-address, balance for one send. Sends\nare charged, capped and suppressed exactly as before.","operationId":"resume_campaign_api_v1_campaigns__campaign_id__resume_post","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Resume Campaign Api V1 Campaigns  Campaign Id  Resume Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/cancel":{"post":{"tags":["Public API v1"],"summary":"Cancel a campaign","description":"Stops the campaign after the send in flight. Sends already made are\nmade; nothing is refunded for them. Idempotent, and a no-op on a campaign\nthat has already ended.","operationId":"cancel_campaign_api_v1_campaigns__campaign_id__cancel_post","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Cancel Campaign Api V1 Campaigns  Campaign Id  Cancel Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/expired-domains":{"get":{"tags":["Public API v1"],"summary":"Search expired domains by specification","description":"Filters, all optional: `trade` (a slug), `country`, `city` (a slug inside the country), `min` and `max` (letters), `ending` (repeated or comma separated), `letters`, `nohyphen`, `nodigit`, `starts`, `ends`, `word`, `sort` (`best`, `short`, `az`), `page`, and `lang` for the labels. A value that is not valid is dropped.","operationId":"search_api_v1_expired_domains_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Search Api V1 Expired Domains Get"},"example":{"data":[{"domain":"brotzeit.de","trade":"Bakery","trade_slug":"bakery","town":"Hamburg","country":"de","country_name":"Germany","letters":8,"state":"likely"}],"total":1204,"exact":true,"page":1,"page_size":50}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/expired-domains/facets":{"get":{"tags":["Public API v1"],"summary":"The counts beside the filters","description":"Filters, all optional: `trade` (a slug), `country`, `city` (a slug inside the country), `min` and `max` (letters), `ending` (repeated or comma separated), `letters`, `nohyphen`, `nodigit`, `starts`, `ends`, `word`, `sort` (`best`, `short`, `az`), `page`, and `lang` for the labels. A value that is not valid is dropped.","operationId":"facets_api_v1_expired_domains_facets_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Facets Api V1 Expired Domains Facets Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/expired-domains/{domain}/check":{"post":{"tags":["Public API v1"],"summary":"Check whether one name is free","description":"`free`, `taken` or `unknown` (no clear answer; show it as probably free),\nfor a name of the list only, 404 for any other. At most 1,000 a day per key. A name\nmay be a trademark: check before you register.","operationId":"check_api_v1_expired_domains__domain__check_post","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Check Api V1 Expired Domains  Domain  Check Post"},"example":{"data":{"domain":"brotzeit.de","state":"free","register_url":"https://www.namecheap.com/domains/registration/results/?domain=brotzeit.de"}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/lists":{"post":{"tags":["Public API v1"],"summary":"Create an own list","description":"An empty list on this account. `name` is yours; `source` says in a sentence\nwhere the addresses come from (your customers, a fair, your own site). Our\nreview of a campaign reads it, and a bought or rented list is not sent.","operationId":"create_list_api_v1_lists_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create List Api V1 Lists Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Public API v1"],"summary":"List the account's own lists","operationId":"list_lists_api_v1_lists_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Page Size"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Lists Api V1 Lists Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/lists/{list_id}":{"get":{"tags":["Public API v1"],"summary":"Read one own list","operationId":"get_list_api_v1_lists__list_id__get","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"integer","title":"List Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get List Api V1 Lists  List Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Public API v1"],"summary":"Delete an own list and its contacts","description":"The list and all its rows are gone at once. Refused while a campaign still\nwrites to it.","operationId":"delete_list_api_v1_lists__list_id__delete","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"integer","title":"List Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete List Api V1 Lists  List Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/lists/{list_id}/contacts":{"post":{"tags":["Public API v1"],"summary":"Add contacts to an own list","description":"Up to 50,000 contacts a call, as JSON ({\"contacts\": [...]}) or CSV\n(Content-Type text/csv, a header line, UTF-8). Each has an `email`; `company`,\n`country`, `language`, `subject` and `body` are optional, and any other field\nis a free field of yours. An address already on the list is replaced, so a\ncall can be repeated. A row that cannot be read is left out and named in\n`errors`; the others are stored.","operationId":"add_contacts_api_v1_lists__list_id__contacts_post","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"integer","title":"List Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Add Contacts Api V1 Lists  List Id  Contacts Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Public API v1"],"summary":"Read the contacts of an own list","operationId":"list_contacts_api_v1_lists__list_id__contacts_get","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"integer","title":"List Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Page Size"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Contacts Api V1 Lists  List Id  Contacts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/lists/{list_id}/contacts/{contact_id}":{"delete":{"tags":["Public API v1"],"summary":"Delete one contact","operationId":"delete_contact_api_v1_lists__list_id__contacts__contact_id__delete","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"integer","title":"List Id"}},{"name":"contact_id","in":"path","required":true,"schema":{"type":"integer","title":"Contact Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Contact Api V1 Lists  List Id  Contacts  Contact Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/suppression":{"get":{"tags":["Public API v1"],"summary":"Export the account's do-not-contact list","operationId":"export_suppression_api_v1_suppression_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Page Size"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Export Suppression Api V1 Suppression Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Public API v1"],"summary":"Add addresses to the account's do-not-contact list","description":"`emails` (up to 10,000): nobody on this account writes to them again, a\nrunning campaign included, from its next mail on. Adding one twice is fine.","operationId":"add_suppression_api_v1_suppression_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Add Suppression Api V1 Suppression Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/stats/sending":{"get":{"tags":["Public API v1"],"summary":"Daily sending numbers per sender domain","description":"Per UTC day and sender domain: sent, delivered, bounced (permanent),\ncomplaints and replies. Without dates, the last 30 days; at most 366.","operationId":"sending_stats_api_v1_stats_sending_get","parameters":[{"name":"by","in":"query","required":false,"schema":{"type":"string","description":"domain","default":"domain","title":"By"},"description":"domain"},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"First day, YYYY-MM-DD (UTC)","title":"From"},"description":"First day, YYYY-MM-DD (UTC)"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Last day, YYYY-MM-DD (UTC)","title":"To"},"description":"Last day, YYYY-MM-DD (UTC)"},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Sending Stats Api V1 Stats Sending Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhook":{"get":{"tags":["Public API v1"],"summary":"Read the account's webhook","description":"The URL and the events it gets; `url` is null when none is set. The secret\nis shown once, by PUT.","operationId":"get_webhook_api_v1_webhook_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Webhook Api V1 Webhook Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Public API v1"],"summary":"Set the account's webhook","description":"`url` must be https on a public address. Answers a NEW signing `secret`,\nthis once: keep it, every event is signed with it from now on.","operationId":"put_webhook_api_v1_webhook_put","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Put Webhook Api V1 Webhook Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Public API v1"],"summary":"Remove the account's webhook","description":"No more events; those still waiting are dropped.","operationId":"delete_webhook_api_v1_webhook_delete","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Webhook Api V1 Webhook Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhook/test":{"post":{"tags":["Public API v1"],"summary":"Send the webhook a test event","description":"Queues one signed event of type `test`; it goes out within a minute.","operationId":"test_webhook_api_v1_webhook_test_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Test Webhook Api V1 Webhook Test Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/wizard/campaigns":{"get":{"tags":["Public API v1"],"summary":"List the Campaign Wizard's runs","description":"Newest first, drafts nobody typed into left out. Each run carries\n`numbers` {found, with_email, sent, replies}, read live from its search and\nits campaign.","operationId":"list_wizard_campaigns_api_v1_wizard_campaigns_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Page Size"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Wizard Campaigns Api V1 Wizard Campaigns Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Public API v1"],"summary":"Start a new wizard draft","description":"Optional `settings` (search, message, send), `step`, `furthest`,\n`session_id`. The account's other open draft, if any, becomes\n`abandoned`: the wizard holds one campaign at a time.","operationId":"create_wizard_campaign_api_v1_wizard_campaigns_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Wizard Campaign Api V1 Wizard Campaigns Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/wizard/campaigns/current":{"get":{"tags":["Public API v1"],"summary":"The open wizard draft, or null","operationId":"current_wizard_campaign_api_v1_wizard_campaigns_current_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Current Wizard Campaign Api V1 Wizard Campaigns Current Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/wizard/campaigns/{run_id}":{"get":{"tags":["Public API v1"],"summary":"Read one wizard run with its live numbers","operationId":"get_wizard_campaign_api_v1_wizard_campaigns__run_id__get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Wizard Campaign Api V1 Wizard Campaigns  Run Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Public API v1"],"summary":"Change an open wizard draft","description":"`settings` merges key by key into what is stored; a new subject or body\nclears `settings.message.approved` unless the same call approves again. A\nsent or abandoned run is `409 conflict`.","operationId":"patch_wizard_campaign_api_v1_wizard_campaigns__run_id__patch","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Patch Wizard Campaign Api V1 Wizard Campaigns  Run Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/wizard/campaigns/{run_id}/reuse":{"post":{"tags":["Public API v1"],"summary":"Start a new draft with the same settings","description":"The new draft copies the settings (the message must be approved again);\nthe search and the campaign stay with the old run.","operationId":"reuse_wizard_campaign_api_v1_wizard_campaigns__run_id__reuse_post","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Reuse Wizard Campaign Api V1 Wizard Campaigns  Run Id  Reuse Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/searches":{"post":{"tags":["Public API v1"],"summary":"Start a search for businesses","description":"Finds every business of the given `categories` in the given\n`areas` and adds them to the account as leads. Each business found is\ncharged exactly as a dashboard search is; one you already have is free.\n`max_results` and `spend_cap_cents` bound the run; `country` (ISO code)\ndisambiguates the area names.\n\nAn area that is a whole country (\"Nederland\", \"Belgique\") keeps only the\nbusinesses in that country: one across the border is never charged and\nnever counts toward `max_results`. The search's `notices` then say so and\nname regions or cities for a targeted list.\n\n`extra_from_database` (0 to 5000) adds up to that many more businesses from\nthe Leadralia database once the live search has finished: same area,\nsame categories, none the search found or the account already has, each\ncharged like any business found. They come on top of `max_results`;\n`spend_cap_cents` and the balance still bound the whole search. The search's\n`from_database` says how many came that way.\n\n`source` is `\"maps\"` (the default: the live search above) or `\"directory\"`: the\nsearch uses the Leadralia directory instead. The same\nwords work (`categories` in any language, `areas` or a `country`), and it\ntakes `has_website`, `has_phone`, `has_email` and `full_page` (all default\nfalse) to keep only the businesses that have them, and `site_filters`, an\nobject of filters on the company's website (`platform`, `shop`, `booking`,\n`https`, `mobile`, `seo`, `languages`: the catalogue with its choices is\n`GET /api/v1/intel/find/filters`). It takes full pages\nfirst, then the most complete businesses, in an order that never changes, so\nrunning the same search again gives the next new businesses. Never a\nbusiness that is held, removed, dead or unreachable, never one whose\naddress your sends already refuse, and a company once. Charged exactly like\na business found by the live search (one per business, your plan's searches first, one\nyou already have is free); `max_results` and `spend_cap_cents` work the\nsame. Count first with `POST /api/v1/searches/preview`.\n\nThe response is the search itself; poll `GET /api/v1/searches/{id}` for\nprogress and read the businesses with `GET /api/v1/leads?session_id=...`.","operationId":"create_search_api_v1_searches_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Search Api V1 Searches Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Public API v1"],"summary":"List searches","operationId":"list_searches_api_v1_searches_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Page Size"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"One of: queued, running, paused, finished, failed, stopped","title":"Status"},"description":"One of: queued, running, paused, finished, failed, stopped"},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Searches Api V1 Searches Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/searches/preview":{"post":{"tags":["Public API v1"],"summary":"Count what a directory search would find","description":"How many businesses a search of the Leadralia directory would find,\nbefore you pay for anything. Send the body of `POST /api/v1/searches`\n(`categories` or `all_businesses`, `areas` or a `country`, the filters\n`has_website`, `has_phone`, `has_email`, `full_page`, `site_filters`,\n`max_results`); `source` is `\"directory\"` whatever you send. With\n`site_filters`, `matching` is counted at once and is approximate for a\nlarge area; `POST /api/v1/intel/find/reason` adds the first matches with\nthe facts that matched.\n\nThe answer: `total` (businesses in those places and trades), how many of\nthem have a website (`with_website`), a phone (`with_phone`), an e-mail\naddress (`with_email`) and a full page (`with_full_page`), and `matching`,\nthe ones that carry every filter you set. A figure counts companies (one\nwith branches once). `approximate` is true when several places or trades\nwere added together or the counts are a day old: show it rounded. `areas`\nand `trades` say how your words were understood, `unmatched_areas` and\n`unmatched_trades` what was not found. `price` says what the businesses it\nwould take cost: `takes`, `per_business_cents`, the `plan_credits` that pay\nfirst and `estimate_cents` for the rest. Nothing is charged and nothing is\nstarted.","operationId":"preview_search_api_v1_searches_preview_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Preview Search Api V1 Searches Preview Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/searches/{search_id}":{"get":{"tags":["Public API v1"],"summary":"Read one search","operationId":"get_search_api_v1_searches__search_id__get","parameters":[{"name":"search_id","in":"path","required":true,"schema":{"type":"string","title":"Search Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Search Api V1 Searches  Search Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/searches/{search_id}/cancel":{"post":{"tags":["Public API v1"],"summary":"Cancel a search","description":"Stops the search. Businesses already found stay\non the account (and stay paid for). Idempotent; a no-op once it has ended.","operationId":"cancel_search_api_v1_searches__search_id__cancel_post","parameters":[{"name":"search_id","in":"path","required":true,"schema":{"type":"string","title":"Search Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Cancel Search Api V1 Searches  Search Id  Cancel Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/audience/suggest":{"get":{"tags":["Public API v1"],"summary":"Who buys what you sell","operationId":"suggest_audience_api_v1_audience_suggest_get","parameters":[{"name":"offer","in":"query","required":false,"schema":{"type":"string","maxLength":4000,"description":"What you offer, in your own words","default":"","title":"Offer"},"description":"What you offer, in your own words"},{"name":"company","in":"query","required":false,"schema":{"type":"string","maxLength":300,"description":"Your company name","default":"","title":"Company"},"description":"Your company name"},{"name":"website","in":"query","required":false,"schema":{"type":"string","maxLength":300,"description":"Your website","default":"","title":"Website"},"description":"Your website"},{"name":"lang","in":"query","required":false,"schema":{"type":"string","maxLength":5,"description":"UI language of the labels (en, nl, de, fr, es, pt, it, tr, ar)","default":"","title":"Lang"},"description":"UI language of the labels (en, nl, de, fr, es, pt, it, tr, ar)"},{"name":"country","in":"query","required":false,"schema":{"type":"string","maxLength":2,"description":"ISO-3166 country of the audience","default":"","title":"Country"},"description":"ISO-3166 country of the audience"},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Suggest Audience Api V1 Audience Suggest Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/templates/designs":{"get":{"tags":["Public API v1"],"summary":"List the ready-made mail designs","description":"Ten layouts with starter copy. `lang` is one of the languages in\n`languages` (default `en`); `accent` is an optional `#rrggbb` every tint, rule\nand button of a design is derived from. A design's `subject` and `body` go\nstraight into `POST /api/v1/campaigns`, or into `POST /api/v1/templates` to\nkeep an edited copy.","operationId":"list_designs_api_v1_templates_designs_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"accent","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accent"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Designs Api V1 Templates Designs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/templates":{"get":{"tags":["Public API v1"],"summary":"List the account's templates","description":"Newest first, without the bodies (read one template for its `body`).","operationId":"list_templates_api_v1_templates_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Templates Api V1 Templates Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Public API v1"],"summary":"Save a template","description":"`name` plus either `body` (the HTML or text of the mail) or `html` (a full\nHTML document, converted as described above). `subject` is optional; with\n`html` it defaults to the document's <title>. A name that already exists\nreturns 409 `conflict` unless `overwrite` is true.","operationId":"create_template_api_v1_templates_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Template Api V1 Templates Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/templates/{template_id}":{"get":{"tags":["Public API v1"],"summary":"Read one template","operationId":"get_template_api_v1_templates__template_id__get","parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"integer","title":"Template Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Template Api V1 Templates  Template Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Public API v1"],"summary":"Delete a template","operationId":"delete_template_api_v1_templates__template_id__delete","parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"integer","title":"Template Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Template Api V1 Templates  Template Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/replies":{"get":{"tags":["Public API v1"],"summary":"List the replies to the account's campaigns","description":"Newest first. `unread_only` keeps the replies not yet read; `place_id`\nkeeps one lead's. Each row carries a short `snippet`; the body is read with\nGET /replies/{id}.","operationId":"list_replies_api_v1_replies_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Page Size"}},{"name":"unread_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Unread Only"}},{"name":"place_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Place Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Replies Api V1 Replies Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/replies/{reply_id}":{"get":{"tags":["Public API v1"],"summary":"Read one reply and the answers sent to it","operationId":"get_reply_api_v1_replies__reply_id__get","parameters":[{"name":"reply_id","in":"path","required":true,"schema":{"type":"integer","title":"Reply Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Reply Api V1 Replies  Reply Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/replies/{reply_id}/reply":{"post":{"tags":["Public API v1"],"summary":"Answer a reply through the account's sender","description":"`{\"body\": \"plain text\", \"subject\": \"optional\"}`. The answer goes out from\nthe sender the conversation belongs to, as the plain text given (no footer,\nno unsubscribe link: a conversation, not a campaign mail), threaded\nunder the person's mail, free of charge and at most sixty an hour per\naccount (`429 rate_limited`). A person on the data-rights red list is\n`409 recipient_blocked`; an address that unsubscribed from campaigns is\nstill answered and reported as `recipient_unsubscribed: true`.","operationId":"answer_reply_api_v1_replies__reply_id__reply_post","parameters":[{"name":"reply_id","in":"path","required":true,"schema":{"type":"integer","title":"Reply Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Answer Reply Api V1 Replies  Reply Id  Reply Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orders/packages":{"get":{"tags":["Public API v1"],"summary":"The packages an order can buy","operationId":"order_packages_api_v1_orders_packages_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orders":{"post":{"tags":["Public API v1"],"summary":"Create an order draft","operationId":"create_order_api_v1_orders_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Public API v1"],"summary":"List the account's orders","operationId":"list_orders_api_v1_orders_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orders/current":{"get":{"tags":["Public API v1"],"summary":"The latest order that can still be edited and paid","operationId":"current_order_api_v1_orders_current_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orders/{order_id}":{"get":{"tags":["Public API v1"],"summary":"Read an order: notes, timeline, numbers","operationId":"get_order_api_v1_orders__order_id__get","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Public API v1"],"summary":"Change a draft","operationId":"patch_order_api_v1_orders__order_id__patch","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orders/{order_id}/draft-email":{"post":{"tags":["Public API v1"],"summary":"Let the AI draft the email","operationId":"draft_order_email_api_v1_orders__order_id__draft_email_post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orders/{order_id}/prefill":{"post":{"tags":["Public API v1"],"summary":"Let the order manager fill in the order","operationId":"prefill_order_api_v1_orders__order_id__prefill_post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orders/{order_id}/approve-email":{"post":{"tags":["Public API v1"],"summary":"Approve the email as it is","operationId":"approve_order_email_api_v1_orders__order_id__approve_email_post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orders/{order_id}/checkout":{"post":{"tags":["Public API v1"],"summary":"Pay the order","operationId":"checkout_order_api_v1_orders__order_id__checkout_post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orders/{order_id}/duplicate":{"post":{"tags":["Public API v1"],"summary":"Order again","operationId":"duplicate_order_api_v1_orders__order_id__duplicate_post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orders/{order_id}/cancel":{"post":{"tags":["Public API v1"],"summary":"Cancel a draft or an unpaid order","operationId":"cancel_order_api_v1_orders__order_id__cancel_post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orders/{order_id}/channel":{"get":{"tags":["Public API v1"],"summary":"Read a channel: status, periods, numbers","operationId":"get_channel_api_v1_orders__order_id__channel_get","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Public API v1"],"summary":"Change what the next period sends","operationId":"patch_channel_api_v1_orders__order_id__channel_patch","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orders/{order_id}/channel/approve-email":{"post":{"tags":["Public API v1"],"summary":"Approve the next period's email","operationId":"approve_channel_email_api_v1_orders__order_id__channel_approve_email_post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orders/{order_id}/channel/pause":{"post":{"tags":["Public API v1"],"summary":"Pause a channel","operationId":"pause_channel_api_v1_orders__order_id__channel_pause_post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orders/{order_id}/channel/resume":{"post":{"tags":["Public API v1"],"summary":"Resume a paused channel","operationId":"resume_channel_api_v1_orders__order_id__channel_resume_post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orders/{order_id}/channel/stop":{"post":{"tags":["Public API v1"],"summary":"Stop a channel before its next period","operationId":"stop_channel_api_v1_orders__order_id__channel_stop_post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channel/plans":{"get":{"tags":["Public API v1"],"summary":"The monthly channel's plans on sale","description":"Every active plan with its businesses, waves, areas, trades, its\nmonthly price in EUR and USD and its yearly price (10 x the monthly one,\n12 months delivered); an empty list until the plans are on sale.","operationId":"channel_plans_list_api_v1_channel_plans_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","maxLength":5,"default":"en","title":"Lang"}},{"name":"currency","in":"query","required":false,"schema":{"type":"string","maxLength":3,"default":"","title":"Currency"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channel":{"get":{"tags":["Public API v1"],"summary":"The account's channel: calendar, next copy, results","operationId":"get_channel_api_v1_channel_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Public API v1"],"summary":"Start a channel draft on a plan","operationId":"start_channel_api_v1_channel_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Public API v1"],"summary":"Change the channel (the draft, or the next waves)","operationId":"patch_channel_api_v1_channel_patch","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channel/menu":{"get":{"tags":["Public API v1"],"summary":"Kinds of business with counts in the chosen towns","operationId":"channel_menu_api_v1_channel_menu_get","parameters":[{"name":"areas","in":"query","required":false,"schema":{"type":"string","maxLength":2000,"title":"Areas"}},{"name":"country","in":"query","required":false,"schema":{"type":"string","maxLength":2,"default":"","title":"Country"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channel/preview":{"get":{"tags":["Public API v1"],"summary":"The next wave's mail as a business gets it","operationId":"channel_preview_api_v1_channel_preview_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channel/approve-text":{"post":{"tags":["Public API v1"],"summary":"Approve the channel's text as read","operationId":"channel_approve_text_api_v1_channel_approve_text_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channel/draft-email":{"post":{"tags":["Public API v1"],"summary":"Let the AI write the channel's mail","operationId":"channel_draft_email_api_v1_channel_draft_email_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channel/checkout":{"post":{"tags":["Public API v1"],"summary":"Pay the first month, or the first year","description":"{\"confirm_details\": true[, \"interval\": \"month\" | \"year\"]}: {\"mode\":\n\"stripe\", \"checkout_url\"} to open, or {\"mode\": \"sandbox\"} (outside\nproduction: the month started). Yearly: 10 x the monthly price, once,\nfor 12 months.","operationId":"channel_checkout_api_v1_channel_checkout_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channel/waves":{"get":{"tags":["Public API v1"],"summary":"Every wave of the channel with its results","operationId":"channel_waves_api_v1_channel_waves_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channel/waves/{wave_id}/approve":{"post":{"tags":["Public API v1"],"summary":"Approve a wave's copy","operationId":"channel_wave_approve_api_v1_channel_waves__wave_id__approve_post","parameters":[{"name":"wave_id","in":"path","required":true,"schema":{"type":"string","title":"Wave Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channel/waves/{wave_id}/changes":{"post":{"tags":["Public API v1"],"summary":"Ask for changes on a wave's copy","operationId":"channel_wave_changes_api_v1_channel_waves__wave_id__changes_post","parameters":[{"name":"wave_id","in":"path","required":true,"schema":{"type":"string","title":"Wave Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channel/{action}":{"post":{"tags":["Public API v1"],"summary":"Pause, resume, cancel at the month's end, or keep","operationId":"channel_action_api_v1_channel__action__post","parameters":[{"name":"action","in":"path","required":true,"schema":{"type":"string","title":"Action"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/shape":{"get":{"tags":["Public API v1"],"summary":"What the account has: the one dashboard's shape","description":"`kind` is `business` (it claimed a business page and never used the\nsending product), `sender` (the reverse), `both` or `new`; `home` and\n`sections` say which home the dashboard opens and which sections its\nnavigation lists; `business` holds the account's pages with what each\nstill misses (`checklist`, `missing`) and the unclaimed listing on the\ndomain of its confirmed address (`claimable`); `sending` its use of the\nsending product; `wallet` the balance in cents; `cards` the one card of\nthe home (`sending_offer` or `claim_page`). `services` (`active`,\n`orders`, `searches`, `messages_sent`) and `directory` (`active`,\n`listings`, `pending_claims`, `account_domain`) say the same in two\nhalves; a listing's `gaps` lists what its public page still misses.\nEach listing's `completeness` (the parts of its public page the page\nshows, out of 10) and `parts` are the one definition the dashboard, the\nchecklist and the owner's mails use; `checklist`, `missing` and `gaps`\nare the older lists of the previous home. The listings come in pages\n(`page`, `page_size`, 25 by default; `business.pages` counts them all).\nNever an e-mail address of a business.","operationId":"shape_api_v1_shape_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Page Size"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/listings/{listing_id}/figures":{"get":{"tags":["Public API v1"],"summary":"The owner's figures of one of the account's own pages","description":"Views and contact clicks of a page the account owns: `months` (twelve,\nthe oldest first, every month there), `this_month`, `totals`, `month`\nwith `current` and `previous` (this month and the one before: `views`,\n`website_clicks`, `calls`, `directions`, `email`),\n`last_30_days` (with `counted_since` and `complete`: the daily counts\nbegan on that day) and `referrers` (the directory pages that sent\nvisitors in this month and the one before: `label` in `lang`, `url`, `n`,\n`share`). People only: automated visits are never counted,\nand the same visitor's click of one kind counts once a day. `calls` is\ncalls or messages (phone and WhatsApp clicks together); `email` is e-mail\nreveals. Free for every owner, whatever the plan.","operationId":"figures_api_v1_directory_listings__listing_id__figures_get","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"integer","title":"Listing Id"}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":2,"default":"en","title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/listings/{listing_id}/compare":{"get":{"tags":["Public API v1"],"summary":"One of the account's pages beside the pages around it","description":"This month's views of a page the account owns (`views`, `month`)\nbeside three groups of published pages, the page itself left out: `trade`\n(the same main trade in the same town), `near` (every page in the same\ntown) and `around` (every page within a radius of the page's own point:\n1 km, else 3, else 10, the first that holds `min_pages` pages;\n`radius_km`). Each group has `scope` (`town`, or `region` when the town\nholds fewer than `min_pages` pages; `radius` for `around`), `place` and\n`trade` in `lang`, `pages`, and, when `enough`, the group's `median` and\n`top_quarter` (the 75th percentile) of this month's views and the page's\n`position` (`top`, `above`, `middle` or `below`). Aggregate only: no\nother business is named. People only, like the figures. Free for every\nowner, whatever the plan.","operationId":"compare_api_v1_directory_listings__listing_id__compare_get","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"integer","title":"Listing Id"}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":2,"default":"en","title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/listings/{listing_id}/tracking":{"get":{"tags":["Public API v1"],"summary":"The visits of one of the account's own pages by day, week or month","description":"A page the account owns, by `period`: `day` (the last 30 days), `week`\n(the last 12 weeks, Monday first) or `month` (the last 12 months).\n`series` has one entry per day, week or month, the oldest first, every\none there (`start`: its first day; `views`, `actions`, `left_at_once`,\n`visits_ended`); `totals` the range's `views`, `actions`, `clicks` and\n`copies`; `actions` each contact click and copy by `kind` with its\n`group` (`click` or `copy`: copy_phone, copy_address, copy_email,\ncopy_code), the biggest first; `left_at_once` the visits that sent\ntheir end (`visits`), those under 10 seconds with no click and no copy\n(`left`), their `share` (null without a visit) and the time in view\n(`dwell`: `short` under 10 s, `mid` under 60 s, `long`); `countries` the\ncounted views by the visitor's country (ISO 3166-1 alpha-2, `name` in\n`lang`), the eight biggest, the rest in `other`, `unknown` when the\ncountry was not known. `complete` (views and clicks) and\n`tracking_complete` (countries, copies of the phone and the e-mail\naddress, visit ends) say whether every day of the range was counted;\n`counted_since` and `tracking_since` are the days the counts began.\nPeople only, the business's own visits left out when we can tell.\nAggregate only: no visitor is ever named. Free for every owner.","operationId":"tracking_api_v1_directory_listings__listing_id__tracking_get","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"integer","title":"Listing Id"}},{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(day|week|month)$","default":"day","title":"Period"}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":2,"default":"en","title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/listings/{listing_id}/photos":{"get":{"tags":["Public API v1"],"summary":"The pictures of the top band of one of the account's own pages","description":"The pictures the home of \"My business\" draws above a page, at most three\n(`photos`: `url`, and `w`, `h` when the store knows the size, else null), in\nthe order the public page shows them: its real cover first (the owner's own\nupload or a real site cover, never a screenshot or the logo), then the\nowner's own photos, then the pictures the business's website gave, one the\nowner hid left out, each address once. An empty list: the page has none.\nFree for every owner, whatever the plan.","operationId":"photos_api_v1_directory_listings__listing_id__photos_get","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"integer","title":"Listing Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/dashboard":{"get":{"tags":["Public API v1"],"summary":"The account's business dashboard: its pages' views and clicks per month","description":"Every page the account owns (the newest claim first, in pages of\n`page_size`, 50 by default; `total` counts them all; `page`, `page_size`\nsay which) with its page views and contact clicks month by\nmonth: `months` lists the months shown (1 to 12, default 6, the oldest\nfirst) and each listing's `series` has one entry per month (`month`,\n`views`, `clicks`, `copies`, every month there: a month nobody came says\n0). `this_month` and `last_month` add `by_kind`, the clicks and copies\nof that month by kind (website, phone, whatsapp, directions, email,\nsocial and social_<network>, save, contact, copy_phone, copy_address,\ncopy_email, copy_code; a kind nobody used is left out). `totals` adds\nevery page together for this month and last month; `pending_claims`\ncounts the account's claims still waiting. `listing_id` keeps one page\n(404 when the account does not own it). An account without a page\nanswers an empty `listings`. People only, like the figures. Free for\nevery owner, whatever the plan. `views` are the page's own views\n(once a visitor a day, since `views_since`; null for a month before it,\nwhose old numbers also counted automated visits). Each listing carries its plan\n(`tier`, `tier_interval`, `paid_until`) and `plans`, the three tiers\nwith their prices in its currency; the top-level `plans` holds them in\nEUR and USD for an account without a page. Paying is the existing\nPOST /directory/listings/{id}/checkout. Each listing also carries\n`completeness` (the parts of its page the page shows, out of 10),\n`checklist` (those ten parts with the plan each needs), its\n`questions_waiting` and `edit_path`; `claims` lists the account's claims\nstill waiting with their `state` (code_sent, code_expired, review,\nconfirm_email, dns_wait, letter), `additions` the businesses it added\nthat are not one of its pages yet. `edit_open` says whether every\nediting gate is open for now: while\nit is true the editing a plan would open is free for every owner and no\nlock or offer is drawn on it; the green check, the Featured places and the\nprices never follow it.","operationId":"dashboard_api_v1_directory_dashboard_get","parameters":[{"name":"months","in":"query","required":false,"schema":{"type":"integer","maximum":12,"minimum":1,"default":6,"title":"Months"}},{"name":"listing_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"title":"Listing Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Page Size"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/listings/{listing_id}/checklist":{"get":{"tags":["Public API v1"],"summary":"Complete your page: what the owner can still fill in on one of its pages","description":"The ten parts of a page the account owns, in the page's order\n(`items`: `key` header, contact, about, services, facts, hours,\nlocation, langpay, photos or filters; `done` whether the page SHOWS it,\nwhoever wrote it; `tier` the least\nplan that edits it, claimed, verified or pro; `editable` whether the\npage's plan allows one of its fields now; `plan_needed` the plan that\nopens what is still locked; `focus` and `edit_path` the editor at that\npart in the app, `edit_url` its whole address with `lang`), and `done`,\n`total` (10) and `percent` (rounded down: 100 only when every part\nshows). The same checklist is in each listing of GET /directory/dashboard\nand the editor's read. Free for every owner.","operationId":"checklist_api_v1_directory_listings__listing_id__checklist_get","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"integer","title":"Listing Id"}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":2,"default":"en","title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/listings/{listing_id}/editor":{"get":{"tags":["Public API v1"],"summary":"The editor's read of one of the account's pages, part by part","description":"The public page's own fixed form, its ten `parts` in the page's order\n(header, contact, about, services, facts, hours, location, langpay,\nphotos, filters): each with its `state` (filled: the page shows it,\nwhoever wrote it; missing: the owner can fill it now; locked: a plan\nopens it), `editable`, `plan_needed`, its `anchor` and `url` on the\npublic page, `edit_path` in the app, and per field `site` (what the\nbusiness's website gives), `owner` (the owner's own value), `shown`\n(what the page shows now), `source`, `updated_at`, `plan` and `editable`.\n`completeness` counts the parts the page shows out of 10 (the one\ndefinition of the dashboard, the checklist and the owner's mails);\n`next` names the first part still missing. `form` is the editor's own\ncut of the same page, the public page's one form in the page's order\n(top: photos, logo, name, specialties, buttons; main: glance, about,\nservices, products, facts, own, offers, orders, questions, location;\nside: contact, hours, areas, languages, payment; out: filters): each\ngroup in `form.groups` with its `column`, `state`, `shown`, `editable`,\n`plan_needed`, `optional` (never a gap), `readonly` (built by the page\nalone), `anchor`, `url`, `edit_path` and the `fields` it holds;\n`form.fields` carries each of those fields in the parts' field shape\n(`offers`, `orders`, `questions`, `other_locations` among them);\n`form.completeness` counts the groups an owner can fill, by column;\n`form.next` names the first still missing. Writes: PATCH\n/directory/listings/{id} and the picture routes. Free for every owner.","operationId":"editor_api_v1_directory_listings__listing_id__editor_get","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"integer","title":"Listing Id"}},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/owner-report":{"get":{"tags":["Public API v1"],"summary":"The monthly report of the account's pages (what the mail of the 1st says)","description":"The report of one month (`month`, YYYY-MM, last month by default, at\nmost 12 months back) for every page the account owns: `views` and\n`views_before` (the month before; null for a month the page's own count\ndid not cover, `counted_from` the day it began when that was inside the\nmonth), `clicks`, `copies` and their `_before`, `top_days` (the best\ndays by views), `by_kind` (the contact clicks by `kind` with a `label`\nin `lang`), `referrers` (the directory pages that sent visitors, by\n`label`, `url` and `n`; `total`, `other`), `checklist` (`percent`,\n`done`, `total`), `next_step` (the first line the page misses, with its\n`edit_url`), `full` (whether the owner's mail shows the full report for\nthat page: the plan that promises it, Pro by default; the data here is\nwhole for every page) and `dashboard_url`. People only, like the\ndashboard. `lang` defaults to the account's language (the mail's).","operationId":"owner_report_api_v1_directory_owner_report_get","parameters":[{"name":"month","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}$"},{"type":"null"}],"title":"Month"}},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/reports":{"post":{"tags":["Public API v1"],"summary":"Report a wrong fact on a listing","description":"`listing_id`, or `country` and `slug`, name a published listing; `fact`\nis one of name, category, address, phone, website, hours, services,\ndescription, picture, closed, duplicate, other; `suggestion` says what it\nshould say (5 to 1,000 characters, at most two links); `email` is\noptional and deleted when the report is closed. The report goes to the\nsite team (`status` open, then accepted or rejected). At most 50\na day per account (429). The same words about the same fact of the same\nlisting, still open, answer the first report again (`duplicate` true).","operationId":"create_report_api_v1_directory_reports_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/listings/{listing_id}/comparisons":{"get":{"tags":["Public API v1"],"summary":"Whether one of the account's pages may appear in comparisons","description":"`{\"data\": {\"listing_id\", \"included\"}}` for a page the account owns: `included` is false\nonce the page was taken out of the comparison tables and the pages of two companies side by\nside (`PUT` below, or staff on an owner's mail).","operationId":"get_comparisons_api_v1_directory_listings__listing_id__comparisons_get","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"integer","title":"Listing Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Public API v1"],"summary":"Take one of the account's pages out of comparisons, or put it back","description":"`{\"included\": false}` takes the page out of the comparison tables of its town and trade and\nout of every page of two companies side by side; `{\"included\": true}` puts it back. The page\nitself stays. It leaves the pages within a few minutes and the tables within a day.\nAn account's own pages only; an admin key may do it for any page (a business\nthat asked by mail).","operationId":"put_comparisons_api_v1_directory_listings__listing_id__comparisons_put","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"integer","title":"Listing Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ads/market":{"get":{"tags":["Public API v1"],"summary":"Prices, the fixed places and the countries","description":"`per_block_cents` in `currency` (the caller's: EUR inside the euro area,\nUSD elsewhere), `prices` both; `trade_cents` and `trade_prices` the same for a\ntrade (`trade_factor` x the country's); `min_impressions`, `max_impressions`,\n`step_trade`, `step_country`, `max_cells`; `places` (key, width, height, the\nphone picture, where it shows); `countries` (code, name).","operationId":"market_api_v1_ads_market_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"en","title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ads/trades":{"get":{"tags":["Public API v1"],"summary":"The directory's trades in a language","description":"At most 30 of `{slug, name}`, what starts like `q` first. The `slug` is the\n`trade` of a plan.","operationId":"trades_api_v1_ads_trades_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"en","title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ads/quote":{"post":{"tags":["Public API v1"],"summary":"What a plan costs and how soon it is delivered","description":"`countries` and optional `trades` (every country with every trade), or `cells`\n(`[{country, trade}]`, trade `*` is the whole country), and one of `impressions`\nand `budget_cents`. Answers `cells` (`cpm_cents`, `impressions`, `cost_cents`,\n`band`), `impressions`, `cost_cents`, `blended_cpm_cents`, `band`, `reach`\n(`narrow`, `focused`, `broad`), `suggestions` and `same_money_country`. Delivery is\ntold in bands, never as a figure. 60 a minute per account.","operationId":"quote_api_v1_ads_quote_post","parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"en","title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ads":{"get":{"tags":["Public API v1"],"summary":"The account's ads","description":"Per ad: `state` (in_review, refused, needs_impressions, running, paused,\nfinished), `review` {status, reason, message}, `impressions` {bought, used,\nleft}, `clicks`, `ctr`.","operationId":"list_ads_api_v1_ads_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Public API v1"],"summary":"Create an ad (reviewed before it runs)","description":"Body: `slot_key` (leaderboard, infeed or sidebar), `kind` (image or text),\n`title` (up to 80 characters; the alt text of a picture), `body` (180),\n`cta` (30), `image_url` and `image_url_mobile` (from POST /ads/image),\n`link_url` (https), `advertiser` (your business name) and `countries`\n(one or more two-letter codes). Answers the ad with its review.","operationId":"create_ad_api_v1_ads_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ads/image":{"post":{"tags":["Public API v1"],"summary":"Upload a picture for an ad","description":"A PNG, JPEG, WebP or GIF (no SVG) of at most 1 MB, with the shape of the place\n(`variant` desktop) or of its phone picture (`variant` phone). Answers\n`{\"url\"}` for image_url / image_url_mobile.","operationId":"upload_image_api_v1_ads_image_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_image_api_v1_ads_image_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ads/{ad_id}":{"get":{"tags":["Public API v1"],"summary":"One ad","operationId":"get_ad_api_v1_ads__ad_id__get","parameters":[{"name":"ad_id","in":"path","required":true,"schema":{"type":"integer","title":"Ad Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Public API v1"],"summary":"Change an ad","operationId":"change_ad_api_v1_ads__ad_id__patch","parameters":[{"name":"ad_id","in":"path","required":true,"schema":{"type":"integer","title":"Ad Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Public API v1"],"summary":"Delete an ad that has no bought impressions","operationId":"delete_ad_api_v1_ads__ad_id__delete","parameters":[{"name":"ad_id","in":"path","required":true,"schema":{"type":"integer","title":"Ad Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ads/{ad_id}/pause":{"post":{"tags":["Public API v1"],"summary":"Stop showing an ad","operationId":"pause_ad_api_v1_ads__ad_id__pause_post","parameters":[{"name":"ad_id","in":"path","required":true,"schema":{"type":"integer","title":"Ad Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ads/{ad_id}/resume":{"post":{"tags":["Public API v1"],"summary":"Show an ad again","operationId":"resume_ad_api_v1_ads__ad_id__resume_post","parameters":[{"name":"ad_id","in":"path","required":true,"schema":{"type":"integer","title":"Ad Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ads/{ad_id}/orders":{"post":{"tags":["Public API v1"],"summary":"Buy impressions: a plan, or blocks of 1,000","description":"`{\"cells\": [{\"country\": \"be\", \"trade\": \"bakery\"}], \"impressions\": 2000}`, or\n`{\"blocks\": 3}` = 3,000 impressions (spread over the ad's cells when it has\nsome). The server works the price out and refuses a request that names\none. `mode: stripe` and a `checkout_url` to open and pay; the impressions are\nadded when the payment is confirmed. `mode: sandbox` outside production\nwithout a Stripe key (paid at once).","operationId":"buy_api_v1_ads__ad_id__orders_post","parameters":[{"name":"ad_id","in":"path","required":true,"schema":{"type":"integer","title":"Ad Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/search":{"get":{"tags":["Public API v1"],"summary":"Search the directory like its one search box","description":"The one search box of the directory pages, as an API. Send `q`, or the\nstructured filters, or both (a filter wins over the same thing said in\n`q`).\n\n`data.parsed` is what was understood (`category`, `town`, `region`, `near_me`,\n`tags`, `languages`, `name`); `data.outcome` what the box does with it:\n`list` (a trade in a town), `region_list`, `national` (a trade alone),\n`names` (businesses named like the words), `town` or `region` (a place\nalone), `which` (a town name several places share), `pick` (a trade with\nfacts: pick a town), `partial` (the town does not list the trade),\n`notown`, `notrade` (the country does not list the trade), `near`,\n`facts`, `country`, `none`. `data.results` are the published listings\nof this page (with `matched`: the facts that satisfy the filters, each\nwith the sentence that states it); `data.redirect_hint` the directory\npage the box opens. Where the box would ask or suggest, the same as\ndata: `towns`, `trades`, `lists`, `countries`, `did_you_mean`. With the\ndirectory's search engine on, a name is searched in every country (the\nsearcher's first) and `data.facets` carries the filter counts. Never an\ne-mail address.\n\nWithout a key the businesses of `data.results` also count as DIFFERENT\nbusinesses read by the address (a daily ceiling of its own); past it the\nanswer is a 429.","operationId":"search_api_v1_directory_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"description":"Free text in any of the fifteen directory languages, understood exactly as the page's one box understands it: `plumber in Houston`, `dentist open now`, `dentist in Rotterdam who speaks Arabic`, `سباك في دبي`, a business name.","title":"Q"},"description":"Free text in any of the fifteen directory languages, understood exactly as the page's one box understands it: `plumber in Houston`, `dentist open now`, `dentist in Rotterdam who speaks Arabic`, `سباك في دبي`, a business name."},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 3166 code. The searcher's country (its towns come first) and the scope of a trade-only search; default the directory's.","title":"Country"},"description":"ISO 3166 code. The searcher's country (its towns come first) and the scope of a trade-only search; default the directory's."},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Language of the labels and of the hinted page: en nl de fr es pt it tr ar pl sv da nb fi cs. Default en.","title":"Lang"},"description":"Language of the labels and of the hinted page: en nl de fr es pt it tr ar pl sv da nb fi cs. Default en."},{"name":"trade","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"description":"A trade: its key (`real_estate_agency`), a page slug (`real-estate-agency`, `zahnarzt`) or a name (`Dentist`). Wins over a trade named in `q`.","title":"Trade"},"description":"A trade: its key (`real_estate_agency`), a page slug (`real-estate-agency`, `zahnarzt`) or a name (`Dentist`). Wins over a trade named in `q`."},{"name":"town","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"description":"A town's slug (`houston-tx`, `rotterdam`); name `country` with it.","title":"Town"},"description":"A town's slug (`houston-tx`, `rotterdam`); name `country` with it."},{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"description":"A state's or region's slug (`tx`); with `country`.","title":"Region"},"description":"A state's or region's slug (`tx`); with `country`."},{"name":"speaks","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"A language spoken, by its code (`ar`, `es`); repeatable.","default":[],"title":"Speaks"},"description":"A language spoken, by its code (`ar`, `es`); repeatable."},{"name":"tag","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"A fact, by its slug (`24-7-emergency`, `halal`, `financing`); repeatable. `GET /directory/facts` lists them.","default":[],"title":"Tag"},"description":"A fact, by its slug (`24-7-emergency`, `halal`, `financing`); repeatable. `GET /directory/facts` lists them."},{"name":"open_now","in":"query","required":false,"schema":{"type":"boolean","description":"Open at this minute, by the hours the business's own website states and its own clock.","default":false,"title":"Open Now"},"description":"Open at this minute, by the hours the business's own website states and its own clock."},{"name":"open_24_7","in":"query","required":false,"schema":{"type":"boolean","description":"States a 24/7 emergency service or that it is open 24 hours.","default":false,"title":"Open 24 7"},"description":"States a 24/7 emergency service or that it is open 24 hours."},{"name":"verified","in":"query","required":false,"schema":{"type":"boolean","description":"Verified owners only.","default":false,"title":"Verified"},"description":"Verified owners only."},{"name":"page","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"From 1. Without a key: the first 5.","title":"Page"},"description":"From 1. Without a key: the first 5."},{"name":"page_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Default 20; at most 20 without a key, 50 with one.","title":"Page Size"},"description":"Default 20; at most 20 without a key, 50 with one."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{},"example":{"data":{"parsed":{"q":"plumber in Houston who speaks Spanish","country":"us","category":{"key":"plumber","slug":"plumber","name":"Plumbers","typed":"plumber","guessed":false},"town":{"country":"us","slug":"houston-tx","name":"Houston, TX"},"near_me":false,"tags":[],"languages":["es"]},"outcome":"list","results":[{"id":412,"name":"Bayou City Plumbing","category":"plumber","town":"Houston, TX"}],"total":38,"redirect_hint":"https://leadralia.com/directory/us/houston-tx/plumber/?lang=es"},"total":38,"page":1,"page_size":20}}}},"422":{"description":"A parameter is not valid (`invalid_request`).","content":{"application/json":{"example":{"error":{"code":"invalid_request","message":"page_size is 1 to 20 here. Send an API key for larger pages.","docs":"https://leadralia.com/docs/api#invalid_request"}}}}},"429":{"description":"Over the budget (`rate_limited`), with Retry-After and X-RateLimit-*.","content":{"application/json":{"example":{"error":{"code":"rate_limited","message":"Too many requests from this address without an API key. Bulk access is the paid API: https://leadralia.com/api/v1/docs","docs":"https://leadralia.com/docs/api#rate_limited"}}}}}},"security":[{},{"ApiKeyBearer":[]},{"ApiKeyHeader":[]}]}},"/api/v1/directory/listings":{"get":{"tags":["Public API v1"],"summary":"The published listings of one town","description":"Each result is `id`, `name`, `category` and `town`, nothing else: read a\nbusiness by its `id` (`GET /directory/listings/{id}`, at a level).\n`city` and `category` are the slugs of the pages; `tag` and `lang`\nmatch the owner's own on Pro or Featured listings and, where the\ndirectory shows it, what a listing's website states.\nA country and a city are required (a category narrows it): a call reads\none town, never a whole country. Verified owners first, then by name.\nFor free text, a state, \"open now\" or a town you only know by name, use\n`GET /directory/search`.","operationId":"search_listings_api_v1_directory_listings_get","parameters":[{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 3166 code (required).","title":"Country"},"description":"ISO 3166 code (required)."},{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"description":"The town's slug (required): `houston-tx`.","title":"City"},"description":"The town's slug (required): `houston-tx`."},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"description":"A trade's slug: `real-estate-agency`.","title":"Category"},"description":"A trade's slug: `real-estate-agency`."},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}],"description":"Part of a business name.","title":"Q"},"description":"Part of a business name."},{"name":"tag","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"A fact's slug; repeatable (all must hold).","default":[],"title":"Tag"},"description":"A fact's slug; repeatable (all must hold)."},{"name":"lang","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"A language spoken, by code; repeatable.","default":[],"title":"Lang"},"description":"A language spoken, by code; repeatable."},{"name":"verified","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Verified"}},{"name":"page","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Default 30 with a key (at most 100), 20 without.","title":"Page Size"},"description":"Default 30 with a key (at most 100), 20 without."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{},"example":{"data":[{"id":412,"name":"Bayou City Plumbing","category":"plumber","town":"Houston, TX"}],"total":214,"page":1,"page_size":20}}}},"422":{"description":"A parameter is not valid (`invalid_request`).","content":{"application/json":{"example":{"error":{"code":"invalid_request","message":"page_size is 1 to 20 here. Send an API key for larger pages.","docs":"https://leadralia.com/docs/api#invalid_request"}}}}},"429":{"description":"Over the budget (`rate_limited`), with Retry-After and X-RateLimit-*.","content":{"application/json":{"example":{"error":{"code":"rate_limited","message":"Too many requests from this address without an API key. Bulk access is the paid API: https://leadralia.com/api/v1/docs","docs":"https://leadralia.com/docs/api#rate_limited"}}}}}},"security":[{},{"ApiKeyBearer":[]},{"ApiKeyHeader":[]}]}},"/api/v1/directory/listings/{listing_id}/street":{"get":{"tags":["Public API v1"],"summary":"One business's street: its own record and a small row per neighbour","description":"What the 3D view of one company page draws. `data.shop` is the business, with its `sections`, each with its own\nheading in `lang`. `data.same` (the same trade, nearest first; empty when the owner hides similar businesses, then\n`data.hides` is true) and `data.area` (other trades around it) hold a small row per neighbour. `data.weather` is the\nsky right now: clear, partly, cloudy, fog, rain, heavy, sleet or snow. Needs `directory:profile`, like a brand page;\nwithout a key the answer is a 403. A listing the 3D view is not open for answers 404.","operationId":"get_street_api_v1_directory_listings__listing_id__street_get","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"integer","title":"Listing Id"}},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"As above.","title":"Lang"},"description":"As above."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"403":{"description":"Without a key: a street carries a business's written data."},"404":{"description":"No street for that listing (`not_found`)."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/listings/{country}/{slug}":{"get":{"tags":["Public API v1"],"summary":"One business: its facts with their receipts, its links, how to cite it","description":"One published listing. Without a key: the basic level, always. With a\nkey and no `fields`, until billing is on, the whole record: on top of the\nlisting itself:\n\n`facts` is the spec sheet of its page: one entry per fact its own\nwebsite states (`id`, `label`, `values`), each with its `receipts`: the\n`sentence` quoted from the website, the `source_url` it stands on and\n`read_at`, its date. `not_stated` names what the website does not\nsay (never guessed). `services`, `hours` (`open_now` by the business's\nown clock, the days as stated), `links` (the directory page, the website,\nthe phone as a tel: link, directions, WhatsApp and the social profiles\nthe website links, the vCard, the owner's badge) and `citation` (the\npermanent link, \"Facts as published on {domain}.\", and the citation\nas plain text, Markdown and HTML). `tags` ({slug, label, source}) and\n`website_check` as before. `history` is the page's change log (what\nchanged on the website and on this page, latest first, at most 20; an\nempty list without events). `phone` is in international form, `phone_e164`\nthe same in E.164. Never an e-mail address.\n\n`fields` chooses the level (see the parameter): `basic`, `profile` or\n`full`, each including the one before, with `level` naming it and `town`\nthe town's name. `profile` answers what the company's page holds, through\nthe page's own rules: `activity`, `activity_line`, `specialties`,\n`services`, `products`, `about`, `founded`, `hours`, `languages`,\n`areas`, `payment`, `facts`, `more`, `offers`, `orders`,\n`locations`, `other_locations`, `owner_sections`, `photos`, `cover`,\n`alternatives`, `history`, `chain`, `owner`, `logo_tone`, and `extras` for\nnewer data; values come with their `receipts` where the page has them.\nA value we hold back from every answer is not answered at any level.","operationId":"get_listing_api_v1_directory_listings__country___slug__get","parameters":[{"name":"country","in":"path","required":true,"schema":{"type":"string","title":"Country"}},{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Language of the labels (fact names, days, the citation): en nl de fr es pt it tr ar pl sv da nb fi cs. Default en.","title":"Lang"},"description":"Language of the labels (fact names, days, the citation): en nl de fr es pt it tr ar pl sv da nb fi cs. Default en."},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"description":"The level of the answer, each one including the one before. `basic`: name, category, address, town, country, coordinates, phone, website, logo and social links (the default with a key once billing is on). `profile`: basic and the business's services, specialties, products, about, founded, languages and areas; a key needs `directory:profile`. `full`: profile and the technology of its website; a key needs `directory:full`. A business that has nothing of the level asked is billed at the highest level it can fill (a basic record). Without a key the answer is always `basic`, and `profile` and `full` answer 403: they need a key. With a key and no `fields` the answer is the whole record until billing is on, then `basic`. A search or a list answers id, name, category and town only.","title":"Fields"},"description":"The level of the answer, each one including the one before. `basic`: name, category, address, town, country, coordinates, phone, website, logo and social links (the default with a key once billing is on). `profile`: basic and the business's services, specialties, products, about, founded, languages and areas; a key needs `directory:profile`. `full`: profile and the technology of its website; a key needs `directory:full`. A business that has nothing of the level asked is billed at the highest level it can fill (a basic record). Without a key the answer is always `basic`, and `profile` and `full` answer 403: they need a key. With a key and no `fields` the answer is the whole record until billing is on, then `basic`. A search or a list answers id, name, category and town only."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{},"example":{"data":{"id":412,"country":"us","slug":"bayou-city-plumbing-houston-tx","name":"Bayou City Plumbing","category":"plumber","city":"Houston, TX","region":"Texas","address":"1401 Main St, Houston, TX 77002","phone":"+1 713-555-0137","phone_e164":"+17135550137","website":"https://bayoucityplumbing.example","domain":"bayoucityplumbing.example","lat":29.7604,"lng":-95.3698,"description":"Family-run drain and sewer specialists.","offerings":[{"title":"Water heater repair"}],"languages":["en","es"],"socials":[],"status":"published","big_company":false,"claimed":false,"verified":false,"url":"https://leadralia.com/directory/us/company/bayou-city-plumbing-houston-tx","website_check":{"state":"ok","checked_at":"2026-10-09T08:12:00+00:00","working_at":"2026-10-09T08:12:00+00:00","listed":true},"read_at":"2026-10-07T09:00:00Z","tags":[{"slug":"24-7-emergency","label":"24/7 emergency","source":"site"}],"lang":"en","trade":{"key":"plumber","slug":"plumber","name":"Plumber","plural":"Plumbers"},"town":{"country":"us","slug":"houston-tx","name":"Houston, TX","url":"https://leadralia.com/directory/us/houston-tx/"},"facts":[{"id":"available","label":"Available","values":["24/7 emergency"],"receipts":[{"sentence":"Our licensed plumbers answer the phone 24 hours a day, 7 days a week.","source_url":"https://bayoucityplumbing.example/about","read_at":"2026-10-07T09:00:00Z"}]},{"id":"speaks","label":"Speaks","values":["English","Spanish"],"receipts":[]}],"not_stated":["hours","payment"],"services":[{"title":"Water heater repair","url":"https://bayoucityplumbing.example/water-heaters"}],"links":{"page":"https://leadralia.com/directory/us/company/bayou-city-plumbing-houston-tx","website":"https://bayoucityplumbing.example","phone":"tel:+17135550137","directions":"https://www.google.com/maps/dir/?api=1&destination=29.760400,-95.369800","socials":[],"vcard":"https://leadralia.com/directory/us/company/bayou-city-plumbing-houston-tx/contact.vcf","badge":"https://leadralia.com/directory-badge/us/bayou-city-plumbing-houston-tx.svg","api":"https://leadralia.com/api/v1/directory/listings/us/bayou-city-plumbing-houston-tx"},"citation":{"permalink":"https://leadralia.com/directory/us/company/bayou-city-plumbing-houston-tx","source":"Facts as published on bayoucityplumbing.example.","plain":"Bayou City Plumbing (Plumber, Houston, TX). Leadralia Directory. Facts as published on bayoucityplumbing.example. https://leadralia.com/directory/us/company/bayou-city-plumbing-houston-tx","markdown":"[Bayou City Plumbing](https://leadralia.com/directory/us/company/bayou-city-plumbing-houston-tx) (Plumber, Houston, TX). Leadralia Directory. Facts as published on bayoucityplumbing.example.","html":"<a href=\"https://leadralia.com/directory/us/company/bayou-city-plumbing-houston-tx\">Bayou City Plumbing</a> (Plumber, Houston, TX). Leadralia Directory. Facts as published on bayoucityplumbing.example."}}}}}},"422":{"description":"A parameter is not valid (`invalid_request`).","content":{"application/json":{"example":{"error":{"code":"invalid_request","message":"page_size is 1 to 20 here. Send an API key for larger pages.","docs":"https://leadralia.com/docs/api#invalid_request"}}}}},"429":{"description":"Over the budget (`rate_limited`), with Retry-After and X-RateLimit-*.","content":{"application/json":{"example":{"error":{"code":"rate_limited","message":"Too many requests from this address without an API key. Bulk access is the paid API: https://leadralia.com/api/v1/docs","docs":"https://leadralia.com/docs/api#rate_limited"}}}}},"404":{"description":"No published listing there (`not_found`)."}},"security":[{},{"ApiKeyBearer":[]},{"ApiKeyHeader":[]}]}},"/api/v1/directory/listings/{listing_id}":{"get":{"tags":["Public API v1"],"summary":"One business by its id","description":"The same answer as `GET /directory/listings/{country}/{slug}`, by the\nlisting's `id` (what a search result carries).","operationId":"get_listing_by_id_api_v1_directory_listings__listing_id__get","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"integer","title":"Listing Id"}},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"As above.","title":"Lang"},"description":"As above."},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"description":"As above.","title":"Fields"},"description":"As above."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{},"example":{"data":{"id":412,"country":"us","slug":"bayou-city-plumbing-houston-tx","name":"Bayou City Plumbing","category":"plumber","city":"Houston, TX","region":"Texas","address":"1401 Main St, Houston, TX 77002","phone":"+1 713-555-0137","phone_e164":"+17135550137","website":"https://bayoucityplumbing.example","domain":"bayoucityplumbing.example","lat":29.7604,"lng":-95.3698,"description":"Family-run drain and sewer specialists.","offerings":[{"title":"Water heater repair"}],"languages":["en","es"],"socials":[],"status":"published","big_company":false,"claimed":false,"verified":false,"url":"https://leadralia.com/directory/us/company/bayou-city-plumbing-houston-tx","website_check":{"state":"ok","checked_at":"2026-10-09T08:12:00+00:00","working_at":"2026-10-09T08:12:00+00:00","listed":true},"read_at":"2026-10-07T09:00:00Z","tags":[{"slug":"24-7-emergency","label":"24/7 emergency","source":"site"}],"lang":"en","trade":{"key":"plumber","slug":"plumber","name":"Plumber","plural":"Plumbers"},"town":{"country":"us","slug":"houston-tx","name":"Houston, TX","url":"https://leadralia.com/directory/us/houston-tx/"},"facts":[{"id":"available","label":"Available","values":["24/7 emergency"],"receipts":[{"sentence":"Our licensed plumbers answer the phone 24 hours a day, 7 days a week.","source_url":"https://bayoucityplumbing.example/about","read_at":"2026-10-07T09:00:00Z"}]},{"id":"speaks","label":"Speaks","values":["English","Spanish"],"receipts":[]}],"not_stated":["hours","payment"],"services":[{"title":"Water heater repair","url":"https://bayoucityplumbing.example/water-heaters"}],"links":{"page":"https://leadralia.com/directory/us/company/bayou-city-plumbing-houston-tx","website":"https://bayoucityplumbing.example","phone":"tel:+17135550137","directions":"https://www.google.com/maps/dir/?api=1&destination=29.760400,-95.369800","socials":[],"vcard":"https://leadralia.com/directory/us/company/bayou-city-plumbing-houston-tx/contact.vcf","badge":"https://leadralia.com/directory-badge/us/bayou-city-plumbing-houston-tx.svg","api":"https://leadralia.com/api/v1/directory/listings/us/bayou-city-plumbing-houston-tx"},"citation":{"permalink":"https://leadralia.com/directory/us/company/bayou-city-plumbing-houston-tx","source":"Facts as published on bayoucityplumbing.example.","plain":"Bayou City Plumbing (Plumber, Houston, TX). Leadralia Directory. Facts as published on bayoucityplumbing.example. https://leadralia.com/directory/us/company/bayou-city-plumbing-houston-tx","markdown":"[Bayou City Plumbing](https://leadralia.com/directory/us/company/bayou-city-plumbing-houston-tx) (Plumber, Houston, TX). Leadralia Directory. Facts as published on bayoucityplumbing.example.","html":"<a href=\"https://leadralia.com/directory/us/company/bayou-city-plumbing-houston-tx\">Bayou City Plumbing</a> (Plumber, Houston, TX). Leadralia Directory. Facts as published on bayoucityplumbing.example."}}}}}},"422":{"description":"A parameter is not valid (`invalid_request`).","content":{"application/json":{"example":{"error":{"code":"invalid_request","message":"page_size is 1 to 20 here. Send an API key for larger pages.","docs":"https://leadralia.com/docs/api#invalid_request"}}}}},"429":{"description":"Over the budget (`rate_limited`), with Retry-After and X-RateLimit-*.","content":{"application/json":{"example":{"error":{"code":"rate_limited","message":"Too many requests from this address without an API key. Bulk access is the paid API: https://leadralia.com/api/v1/docs","docs":"https://leadralia.com/docs/api#rate_limited"}}}}},"404":{"description":"No published listing with that id (`not_found`)."}},"security":[{},{"ApiKeyBearer":[]},{"ApiKeyHeader":[]}]},"patch":{"tags":["Public API v1"],"summary":"Edit your own listing","description":"Every owner: phone, address and the opening hours the page shows.\nVerified: name, website (on the same\ndomain), description, socials (profile addresses, one per network), the\nfacts (founded, certifications, brands, prices), areas, payment,\nhide_more, locations (more addresses of the business on its page: at\nmost 50 [{address, label, phone, hours}]), sections (your own\nsections: at most 30 [{title, text}], plain text) and orders (where to\norder: at most 8 [{app, url}], https addresses). While owner editing\nis open (`edit_open`), every field is open to every\nowner of an approved page, whatever the plan. Pro adds offerings ([{title, url, image_url, text, kind}],\nat most 12, links on your own site), languages (at most 8: a 9th answers\n422), tags (at most 12), hide_similar, activity_line, specialties,\nphotos, hide_services, hide_photos and offers (your own deals: at most\n12 [{title, text, url, valid_from, valid_to}], the link on your own\nsite, the days as 2026-12-24). `offerings` and `tags` are the full lists you want: what you\nadd or edit is yours, what you leave out is removed for good, what your\npage already shows and you send back unchanged keeps following your\nwebsite. The same `languages` sent back change\nnothing. `hidden` hides or shows the page.","operationId":"edit_api_v1_directory_listings__listing_id__patch","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"integer","title":"Listing Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/brands/{country}/{domain}":{"get":{"tags":["Public API v1"],"summary":"One chain's brand in a country: what its website states, once, and its locations","description":"A chain (a domain behind more than eight listings, never an ordering,\nbooking, marketplace or social platform) has ONE brand page per country;\neach location's own page carries only its own facts and a link to it\n(`chain` in `GET /directory/listings/{country}/{slug}`). `form` is the\nbrand's page form when its website has one (as on a listing), else\n`facts` (activity, specialties, about as the website states them);\n`locations` lists its published locations (at most 400, `more_locations`\nthe rest). A brand page is a profile record: it carries the written data of\nthe brand's page (`directory:profile`), and without a key\nit answers 403.","operationId":"get_brand_api_v1_directory_brands__country___domain__get","parameters":[{"name":"country","in":"path","required":true,"schema":{"type":"string","title":"Country"}},{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"As above.","title":"Lang"},"description":"As above."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{},"example":{"data":{"name":"Pet Valu","domain":"petvalu.com","website":"https://petvalu.com/","country":"us","lang":"en","page":"https://leadralia.com/directory/us/brand/petvalu.com","locations_count":335,"facts":{"activity":"Pet supply store","specialties":["Pet food"]},"locations":[{"name":"Pet Valu Ambler","town":"Ambler, PA","address":"1 Main St","url":"https://leadralia.com/directory/us/company/pet-valu-ambler"}],"more_locations":0}}}}},"422":{"description":"A parameter is not valid (`invalid_request`).","content":{"application/json":{"example":{"error":{"code":"invalid_request","message":"page_size is 1 to 20 here. Send an API key for larger pages.","docs":"https://leadralia.com/docs/api#invalid_request"}}}}},"429":{"description":"Over the budget (`rate_limited`), with Retry-After and X-RateLimit-*.","content":{"application/json":{"example":{"error":{"code":"rate_limited","message":"Too many requests from this address without an API key. Bulk access is the paid API: https://leadralia.com/api/v1/docs","docs":"https://leadralia.com/docs/api#rate_limited"}}}}},"404":{"description":"No chain on that domain in that country (`not_found`)."}},"security":[{},{"ApiKeyBearer":[]},{"ApiKeyHeader":[]}]}},"/api/v1/directory/suggest":{"get":{"tags":["Public API v1"],"summary":"What the search box offers while typing","description":"At most eight suggestions in the order the box shows them: `kind` is\n`trade`, `town`, `company` or `example`; `count` the listings behind it;\n`url` the directory page it opens. `note` is one plain line when the\nwords name something not listed (\"Dentists in the United States: nothing\nlisted yet.\"). An empty `q` gives real example searches of the country.\nA budget of its own without a key (120 a minute), so typing never spends\nthe reading budget. With the directory's search engine on, `grouped` is\nthe box's own answer: `tabs`, `fixed`, `best`, `groups`, `all`,\n`understood`.","operationId":"suggest_api_v1_directory_suggest_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":80,"description":"What was typed so far.","default":"","title":"Q"},"description":"What was typed so far."},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The searcher's country.","title":"Country"},"description":"The searcher's country."},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Language of the labels.","title":"Lang"},"description":"Language of the labels."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{},"example":{"data":[{"kind":"trade","label":"Plumbers in Houston, TX","count":214,"url":"https://leadralia.com/directory/us/houston-tx/plumber/"}],"total":1,"page":1,"page_size":8,"q":"plumber hou"}}}},"422":{"description":"A parameter is not valid (`invalid_request`).","content":{"application/json":{"example":{"error":{"code":"invalid_request","message":"page_size is 1 to 20 here. Send an API key for larger pages.","docs":"https://leadralia.com/docs/api#invalid_request"}}}}},"429":{"description":"Over the budget (`rate_limited`), with Retry-After and X-RateLimit-*.","content":{"application/json":{"example":{"error":{"code":"rate_limited","message":"Too many requests from this address without an API key. Bulk access is the paid API: https://leadralia.com/api/v1/docs","docs":"https://leadralia.com/docs/api#rate_limited"}}}}}},"security":[{},{"ApiKeyBearer":[]},{"ApiKeyHeader":[]}]}},"/api/v1/directory/countries":{"get":{"tags":["Public API v1"],"summary":"The countries with listings","description":"Every country with published listings, biggest first: its code, its\nname, how many listings and towns, the languages its pages are written\nin. With `q`, the countries a name in any of the directory's languages,\nthe country's own name or its code matches, best first.","operationId":"countries_api_v1_directory_countries_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Language of the names.","title":"Lang"},"description":"Language of the names."},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}],"description":"Only the countries this matches: a name in any language (Qatar, Katar, قطر) or the ISO code (qa). Best match first.","title":"Q"},"description":"Only the countries this matches: a name in any language (Qatar, Katar, قطر) or the ISO code (qa). Best match first."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{},"example":{"data":[{"code":"us","name":"United States","total":354880,"towns":11902,"languages":["en"],"url":"https://leadralia.com/directory/us/"}],"total":1,"page":1,"page_size":100}}}},"422":{"description":"A parameter is not valid (`invalid_request`).","content":{"application/json":{"example":{"error":{"code":"invalid_request","message":"page_size is 1 to 20 here. Send an API key for larger pages.","docs":"https://leadralia.com/docs/api#invalid_request"}}}}},"429":{"description":"Over the budget (`rate_limited`), with Retry-After and X-RateLimit-*.","content":{"application/json":{"example":{"error":{"code":"rate_limited","message":"Too many requests from this address without an API key. Bulk access is the paid API: https://leadralia.com/api/v1/docs","docs":"https://leadralia.com/docs/api#rate_limited"}}}}}},"security":[{},{"ApiKeyBearer":[]},{"ApiKeyHeader":[]}]}},"/api/v1/directory/languages":{"get":{"tags":["Public API v1"],"summary":"The directory's languages","description":"The languages every directory page is written in: the code, the name\nin `lang`, the language's own name, its direction and the directory's\nhome in it. With `q`, the languages a name in any of them or the code\nmatches, best first.","operationId":"languages_api_v1_directory_languages_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Language of the names.","title":"Lang"},"description":"Language of the names."},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}],"description":"Only the languages this matches: a name in any language (Arabic, arabe, عربي) or the code (ar). Best match first.","title":"Q"},"description":"Only the languages this matches: a name in any language (Arabic, arabe, عربي) or the code (ar). Best match first."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{},"example":{"data":[{"code":"ar","name":"Arabic","autonym":"العربية","dir":"rtl","url":"https://leadralia.com/directory/?lang=ar"}],"total":1,"page":1,"page_size":100}}}},"422":{"description":"A parameter is not valid (`invalid_request`).","content":{"application/json":{"example":{"error":{"code":"invalid_request","message":"page_size is 1 to 20 here. Send an API key for larger pages.","docs":"https://leadralia.com/docs/api#invalid_request"}}}}},"429":{"description":"Over the budget (`rate_limited`), with Retry-After and X-RateLimit-*.","content":{"application/json":{"example":{"error":{"code":"rate_limited","message":"Too many requests from this address without an API key. Bulk access is the paid API: https://leadralia.com/api/v1/docs","docs":"https://leadralia.com/docs/api#rate_limited"}}}}}},"security":[{},{"ApiKeyBearer":[]},{"ApiKeyHeader":[]}]}},"/api/v1/directory/trades":{"get":{"tags":["Public API v1"],"summary":"The trades with listings","description":"The trades with listings, biggest first: `key` (what `trade` accepts\neverywhere), `slug` (its page slug in English), `name`, `plural`,\n`total`, and `url` when a country or a town is named.","operationId":"trades_api_v1_directory_trades_get","parameters":[{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 3166 code; all countries without it.","title":"Country"},"description":"ISO 3166 code; all countries without it."},{"name":"town","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"description":"A town's slug: its trades (with `country`).","title":"Town"},"description":"A town's slug: its trades (with `country`)."},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Language of the names.","title":"Lang"},"description":"Language of the names."},{"name":"page","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Default 100, at most 200.","title":"Page Size"},"description":"Default 100, at most 200."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{},"example":{"data":[{"key":"plumber","slug":"plumber","name":"Plumber","plural":"Plumbers","total":4492,"url":"https://leadralia.com/directory/us/category/plumber/"}],"total":1,"page":1,"page_size":100}}}},"422":{"description":"A parameter is not valid (`invalid_request`).","content":{"application/json":{"example":{"error":{"code":"invalid_request","message":"page_size is 1 to 20 here. Send an API key for larger pages.","docs":"https://leadralia.com/docs/api#invalid_request"}}}}},"429":{"description":"Over the budget (`rate_limited`), with Retry-After and X-RateLimit-*.","content":{"application/json":{"example":{"error":{"code":"rate_limited","message":"Too many requests from this address without an API key. Bulk access is the paid API: https://leadralia.com/api/v1/docs","docs":"https://leadralia.com/docs/api#rate_limited"}}}}}},"security":[{},{"ApiKeyBearer":[]},{"ApiKeyHeader":[]}]}},"/api/v1/directory/towns":{"get":{"tags":["Public API v1"],"summary":"The towns with listings","description":"The towns of a country, biggest first (the first 500), or the towns\nwhose name starts like `q` (at most 50, any country unless `country` is\nnamed). `slug` is what `town` accepts in `GET /directory/search`.","operationId":"towns_api_v1_directory_towns_get","parameters":[{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 3166 code.","title":"Country"},"description":"ISO 3166 code."},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}],"description":"The start of a town's name: `hous`.","title":"Q"},"description":"The start of a town's name: `hous`."},{"name":"trade","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"description":"A trade (key, slug or name): the towns that list it, `total` its count.","title":"Trade"},"description":"A trade (key, slug or name): the towns that list it, `total` its count."},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Language of the names.","title":"Lang"},"description":"Language of the names."},{"name":"page","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Default 100, at most 200.","title":"Page Size"},"description":"Default 100, at most 200."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{},"example":{"data":[{"country":"us","slug":"houston-tx","name":"Houston, TX","region":"Texas","region_slug":"tx","total":4363,"url":"https://leadralia.com/directory/us/houston-tx/"}],"total":1,"page":1,"page_size":100}}}},"422":{"description":"A parameter is not valid (`invalid_request`).","content":{"application/json":{"example":{"error":{"code":"invalid_request","message":"page_size is 1 to 20 here. Send an API key for larger pages.","docs":"https://leadralia.com/docs/api#invalid_request"}}}}},"429":{"description":"Over the budget (`rate_limited`), with Retry-After and X-RateLimit-*.","content":{"application/json":{"example":{"error":{"code":"rate_limited","message":"Too many requests from this address without an API key. Bulk access is the paid API: https://leadralia.com/api/v1/docs","docs":"https://leadralia.com/docs/api#rate_limited"}}}}}},"security":[{},{"ApiKeyBearer":[]},{"ApiKeyHeader":[]}]}},"/api/v1/directory/facts":{"get":{"tags":["Public API v1"],"summary":"The fact and language filters","description":"What the `tag` and `speaks` filters accept: every fact with its slug,\nits group and its label, and every language with its code.","operationId":"facts_api_v1_directory_facts_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Language of the labels.","title":"Lang"},"description":"Language of the labels."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{},"example":{"data":{"facts":[{"slug":"24-7-emergency","group":"availability","label":"24/7 emergency"}],"languages":[{"code":"ar","name":"Arabic"}]}}}}},"422":{"description":"A parameter is not valid (`invalid_request`).","content":{"application/json":{"example":{"error":{"code":"invalid_request","message":"page_size is 1 to 20 here. Send an API key for larger pages.","docs":"https://leadralia.com/docs/api#invalid_request"}}}}},"429":{"description":"Over the budget (`rate_limited`), with Retry-After and X-RateLimit-*.","content":{"application/json":{"example":{"error":{"code":"rate_limited","message":"Too many requests from this address without an API key. Bulk access is the paid API: https://leadralia.com/api/v1/docs","docs":"https://leadralia.com/docs/api#rate_limited"}}}}}},"security":[{},{"ApiKeyBearer":[]},{"ApiKeyHeader":[]}]}},"/api/v1/directory/specialties":{"get":{"tags":["Public API v1"],"summary":"The specialties and activities businesses name","description":"What the Specialties chips of a company page name: `slug` (what\n`GET /directory/specialties/{slug}/companies` takes), `label` in `lang`\n(English when the term has no label in it), `label_en`, `kind`\n(`activity`: what a business is, such as \"Car parts shop\"; `specialty`:\nwhat it does or sells, such as \"Bumpers\"), `total` (the published\nlistings that name it, every country), the most used first. Only the\nterms that have pages.","operationId":"specialties_api_v1_directory_specialties_get","parameters":[{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 3166 code: each term then carries `url`, its page in that country.","title":"Country"},"description":"ISO 3166 code: each term then carries `url`, its page in that country."},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}],"description":"Part of a term in English, in `lang` or one of its other spellings.","title":"Q"},"description":"Part of a term in English, in `lang` or one of its other spellings."},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Language of the labels.","title":"Lang"},"description":"Language of the labels."},{"name":"page","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Default 100, at most 200.","title":"Page Size"},"description":"Default 100, at most 200."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{},"example":{"data":[{"slug":"car-parts","label":"Car parts","label_en":"Car parts","kind":"specialty","total":214,"url":"https://leadralia.com/directory/nl-en/specialty/car-parts/"}],"total":1,"page":1,"page_size":100}}}},"422":{"description":"A parameter is not valid (`invalid_request`).","content":{"application/json":{"example":{"error":{"code":"invalid_request","message":"page_size is 1 to 20 here. Send an API key for larger pages.","docs":"https://leadralia.com/docs/api#invalid_request"}}}}},"429":{"description":"Over the budget (`rate_limited`), with Retry-After and X-RateLimit-*.","content":{"application/json":{"example":{"error":{"code":"rate_limited","message":"Too many requests from this address without an API key. Bulk access is the paid API: https://leadralia.com/api/v1/docs","docs":"https://leadralia.com/docs/api#rate_limited"}}}}}},"security":[{},{"ApiKeyBearer":[]},{"ApiKeyHeader":[]}]}},"/api/v1/directory/specialties/{slug}/companies":{"get":{"tags":["Public API v1"],"summary":"The businesses that name one specialty, in a country or a town","description":"The published listings that name `slug` among what they do, those\nwhose activity it is first, then the strongest. Each result as in\n`GET /directory/listings`: `id`, `name`, `category` and `town`. Never an\ne-mail address.","operationId":"specialty_companies_api_v1_directory_specialties__slug__companies_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 3166 code (required).","title":"Country"},"description":"ISO 3166 code (required)."},{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"description":"A town's slug: `rotterdam`. Without it, the whole country.","title":"City"},"description":"A town's slug: `rotterdam`. Without it, the whole country."},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Language of the labels.","title":"Lang"},"description":"Language of the labels."},{"name":"page","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Default 30 with a key (at most 100), 20 without.","title":"Page Size"},"description":"Default 30 with a key (at most 100), 20 without."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{},"example":{"data":[{"id":412,"name":"Bayou City Plumbing","category":"plumber","town":"Houston, TX"}],"total":1,"page":1,"page_size":20}}}},"422":{"description":"A parameter is not valid (`invalid_request`).","content":{"application/json":{"example":{"error":{"code":"invalid_request","message":"page_size is 1 to 20 here. Send an API key for larger pages.","docs":"https://leadralia.com/docs/api#invalid_request"}}}}},"429":{"description":"Over the budget (`rate_limited`), with Retry-After and X-RateLimit-*.","content":{"application/json":{"example":{"error":{"code":"rate_limited","message":"Too many requests from this address without an API key. Bulk access is the paid API: https://leadralia.com/api/v1/docs","docs":"https://leadralia.com/docs/api#rate_limited"}}}}},"404":{"description":"No such specialty (`not_found`)."}},"security":[{},{"ApiKeyBearer":[]},{"ApiKeyHeader":[]}]}},"/api/v1/directory/compare":{"get":{"tags":["Public API v1"],"summary":"The comparison of one trade in one town","description":"What the comparison table of a town and trade page says, as data. `differ` names the facts\non which the full pages of that town and trade differ (`sun`, `late`, `del`, `lang`, `pay`,\n`year`); `counts` are counts of pages that STATE the fact, with their own denominators\n(`sun` of `sun_known`: opening on Sunday of the pages that name a Sunday); `companies` are\nthe pages that state the most, each fact as the business states it, `null` or empty when it\ndoes not (never a no). Only a town and trade above the bar (at least 8 full pages, 3 facts\nthat differ between them, and 5 pages that each state at least 3 of the facts) has one.\nThe facts of a company are profile data: each company answered counts as a profile record\n(`directory:profile`), and without a key this answers 403.","operationId":"compare_town_api_v1_directory_compare_get","parameters":[{"name":"country","in":"query","required":true,"schema":{"type":"string","description":"ISO 3166 code.","title":"Country"},"description":"ISO 3166 code."},{"name":"town","in":"query","required":true,"schema":{"type":"string","maxLength":120,"description":"A town's slug.","title":"Town"},"description":"A town's slug."},{"name":"trade","in":"query","required":true,"schema":{"type":"string","maxLength":120,"description":"A trade: key, slug or name, as in `GET /directory/search`.","title":"Trade"},"description":"A trade: key, slug or name, as in `GET /directory/search`."},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Language of the page `url`.","title":"Lang"},"description":"Language of the page `url`."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{},"example":{"data":{"country":"nl","town":"amsterdam","trade":"bakery","pages_compared":28,"shown":12,"differ":["sun","late","del"],"counts":{"sun_known":24,"sun":12,"hours_known":24,"evening":5,"delivery":7,"lang_known":20,"lang2":11,"pay_known":14,"year_known":9,"year_min":1950,"year_max":2019},"evening_from":"20:00","companies":[{"id":18366456,"slug":"mellys-stroopwafels-amsterdam","name":"Melly's Stroopwafels","sunday":[["09:00","19:00"]],"latest_closing":"21:00","delivery":true,"languages":["nl","en"],"payment":["ideal","paypal"],"founded":1999,"services":["Stroopwafel workshop"],"areas":[]}],"url":"https://leadralia.com/directory/nl-en/amsterdam/bakery/"}}}}},"422":{"description":"A parameter is not valid (`invalid_request`).","content":{"application/json":{"example":{"error":{"code":"invalid_request","message":"page_size is 1 to 20 here. Send an API key for larger pages.","docs":"https://leadralia.com/docs/api#invalid_request"}}}}},"429":{"description":"Over the budget (`rate_limited`), with Retry-After and X-RateLimit-*.","content":{"application/json":{"example":{"error":{"code":"rate_limited","message":"Too many requests from this address without an API key. Bulk access is the paid API: https://leadralia.com/api/v1/docs","docs":"https://leadralia.com/docs/api#rate_limited"}}}}},"404":{"description":"No comparison for that town and trade: below the bar, or comparisons are not published yet (`not_found`)."}},"security":[{},{"ApiKeyBearer":[]},{"ApiKeyHeader":[]}]}},"/api/v1/directory/compare/pair":{"get":{"tags":["Public API v1"],"summary":"Two companies side by side","description":"The facts on which two companies of one town and trade differ, as data, and the address of\ntheir page. The pair is the one that cleared the bar (3 facts that differ, both stating them);\nthe order of `a` and `b` does not matter, the answer names them in the page's order. Two\nprofile records (`directory:profile`); without a key this answers 403.","operationId":"compare_pair_api_v1_directory_compare_pair_get","parameters":[{"name":"country","in":"query","required":true,"schema":{"type":"string","description":"ISO 3166 code.","title":"Country"},"description":"ISO 3166 code."},{"name":"a","in":"query","required":true,"schema":{"type":"string","maxLength":120,"description":"One company's slug.","title":"A"},"description":"One company's slug."},{"name":"b","in":"query","required":true,"schema":{"type":"string","maxLength":120,"description":"The other's slug.","title":"B"},"description":"The other's slug."},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Language of the page `url`.","title":"Lang"},"description":"Language of the page `url`."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{},"example":{"data":{"country":"nl","town":"amsterdam","trade":"bakery","differ":["sun","del","pay"],"a":{"id":18366456,"slug":"mellys-stroopwafels-amsterdam","name":"Melly's Stroopwafels","sunday":[["09:00","19:00"]],"latest_closing":"21:00","delivery":true,"languages":["nl","en"],"payment":["ideal","paypal"],"founded":1999,"services":["Stroopwafel workshop"],"areas":[]},"b":{"id":17975073,"slug":"le-pain-quotidien-amsterdam","name":"Le Pain Quotidien","sunday":[["09:00","19:00"]],"latest_closing":"21:00","delivery":false,"languages":["nl","en"],"payment":["ideal","paypal"],"founded":1999,"services":["Stroopwafel workshop"],"areas":[]},"url":"https://leadralia.com/directory/nl-en/compare/mellys-stroopwafels-amsterdam-vs-le-pain-quotidien-amsterdam/"}}}}},"422":{"description":"A parameter is not valid (`invalid_request`).","content":{"application/json":{"example":{"error":{"code":"invalid_request","message":"page_size is 1 to 20 here. Send an API key for larger pages.","docs":"https://leadralia.com/docs/api#invalid_request"}}}}},"429":{"description":"Over the budget (`rate_limited`), with Retry-After and X-RateLimit-*.","content":{"application/json":{"example":{"error":{"code":"rate_limited","message":"Too many requests from this address without an API key. Bulk access is the paid API: https://leadralia.com/api/v1/docs","docs":"https://leadralia.com/docs/api#rate_limited"}}}}},"404":{"description":"No such pair, or comparisons are not published yet (`not_found`)."}},"security":[{},{"ApiKeyBearer":[]},{"ApiKeyHeader":[]}]}},"/api/v1/usage":{"get":{"tags":["Public API v1"],"summary":"This key's and this account's API usage this month","description":"Any valid key. Every keyed call to the directory's read API counts\n(`by_kind`: `search` one unit per 20 results asked, `record_basic`,\n`record_profile`, `record_full`, `email_reveal`, `lookup` for the free\nlists and suggestions). `free_calls` is the free units of the company's\ndomain: 1,000 once, for life, never monthly, for search and basic only, given\nto a key bound to an approved licence whose address was proved (`domain`;\nno licence, `remaining` 0);\npast it each unit is priced (`prices`: the charge, EUR per 1,000, the list\nprice beside it and the launch discount) and paid from the API plan's lots\n(`balance.plan_cents`, first to expire first) and then the wallet.\nA charge is taken once a euro is owed (`owed_cents` waits for it).\nWith no free calls and nothing to pay with, a read answers 402\n`insufficient_balance`. All of this holds once billing is on: `metering`\nis `shadow` while calls are only counted (nothing is charged or refused),\n`off` when they are not even counted. `monthly_records`: the records this\nkey's licence (or account) read this month, across all its keys, against\nits monthly cap (`cap` null: none).","operationId":"usage_api_v1_usage_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{},"example":{"data":{"month":"2026-10","period_start":"2026-10-01T00:00:00Z","period_end":"2026-11-01T00:00:00Z","free_calls":{"limit":1000,"used":1000,"remaining":0,"domain":"example.org"},"account":{"calls":1450,"units":1520,"cost_cents":180.4,"by_kind":{"record_basic":{"calls":900,"units":900,"free_units":600,"cost_cents":51.0},"search":{"calls":550,"units":620,"free_units":400,"cost_cents":88.0}}},"owed_cents":0.4,"charged_cents_total":139,"balance":{"plan_cents":5861,"wallet_cents":1200,"currency":"EUR"},"plan_lots":[{"plan":"API Starter","starts_at":"2026-10-20T09:00:00+00:00","expires_at":"2026-11-19T09:00:00+00:00","remaining_cents":5861,"granted_cents":6000,"active":true}],"exempt":false,"metering":"on","discount_percent":50,"monthly_records":{"used":1200,"cap":500000,"percent":0,"near":false,"kind":"licence","label":"Example Ltd"},"prices":[{"kind":"search","label":"Search or list, up to 20 results","eur_per_1000":4.0,"usd_per_1000":5,"list_eur_per_1000":8.0,"list_usd_per_1000":10,"discount_percent":50,"on_sale":true,"free_allowance":true,"reserved":false}],"pricing_url":"https://leadralia.com/developers","key":{"id":7,"name":"CRM sync","hint":"lra_ab12…7f9c","calls":1450,"units":1520,"cost_cents":180.4,"by_kind":{}}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pricing":{"get":{"tags":["Public API v1"],"summary":"The API's prices, free calls and plans","description":"No key. `prices`: EUR per 1,000 calls of each kind as charged (USD shown at\nEUR x 1.2, rounded; every charge is in EUR), the `list_` price beside it and\nthe launch `discount_percent` between them; profile and full have `on_sale`\nfalse and no price until they are sold; `free_calls` (once per company domain; search and basic\nonly); `billing` (`on` or `not_started`);\n`plans`: each a 30 day lot of API calls (`credit_cents`) for\n`price_cents`, or yearly: 12 lots for 10 months' price.","operationId":"pricing_api_v1_pricing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{}]}},"/api/v1/prices":{"get":{"tags":["Public API v1"],"summary":"Everything Leadralia sells and what it costs","description":"No key. The price block of leadralia.com as data, for `lang` (a directory language) and `country` (two letters; the caller's own\nwithout it): `tabs`, one per service on sale, entry price in EUR and USD; `panels`, per tab: `plans`, each with `name`, `line`, `points`\nand its `prices` (month and year), its single `price`, or neither when free; `groups`, the rows that differ between plans; the rest of\nthe tab's words. `currency` is the one the country pays in. `first`: biz or find, the tab that leads.","operationId":"prices_api_v1_prices_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"en","title":"Lang"}},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"}},{"name":"first","in":"query","required":false,"schema":{"type":"string","default":"biz","title":"First"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{}]}},"/api/v1/usage/checkout":{"post":{"tags":["Public API v1"],"summary":"Buy an API plan","description":"`plan`: api-starter, api-growth or api-pro (`GET /api/v1/pricing`);\n`interval`: month (default) or year; `source`: stripe (default: answers\n{mode \"stripe\", client_secret, stripe_pk, payment_id}, an embedded\nStripe Checkout to mount; the lots come when it is paid) or wallet (the\nprice from the wallet, the lots at once: {mode \"wallet\", balance}).\nErrors: 404 not_found (no such plan), 402 insufficient_balance (the\nwallet does not cover it), 403 forbidden (plans are not on sale yet, or\nan approved licence is needed first), 422 invalid_request.","operationId":"checkout_api_v1_usage_checkout_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/license":{"get":{"tags":["Public API v1"],"summary":"The account's API licences","description":"The account's licences, newest first. `status`: `pending` (waiting for\nreview), `approved`, `refused` or `suspended`. `license_type`: `standard`\n(a monthly record cap, `monthly_record_cap`) or `annual_feed` (an annual\nsubscription: `starts_on` to `ends_on`, no monthly cap, `feed_level` the level\nit bought; the data stops when it lapses). `records_this_month`: the records the licence's keys read this\nmonth. `enforced`: whether the paid directory data needs an approved\nlicence now.","operationId":"get_license_api_v1_license_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{},"example":{"data":{"terms_version":"2026-10-30","terms_url":"https://leadralia.com/api-license","enforced":false,"licenses":[{"id":3,"company_name":"Example Ltd","website":"https://example.org","activity":"A travel assistant that answers questions about local services.","intended_use":"Showing a customer the businesses near them when they ask.","country":"NL","requested_volume":100000,"license_type":"standard","status":"pending","terms_version":"2026-10-30","terms_accepted_at":"2026-10-30T09:00:00+00:00","keys":1,"created_at":"2026-10-30T09:00:00+00:00","monthly_record_cap":500000,"records_this_month":0}]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Public API v1"],"summary":"Apply for an API licence","description":"`company_name`, `website` (the company's own; no website, no licence),\n`contact_email` (one address on the website's own domain; a free mail host\nsuch as gmail is refused), `activity` (what the company does),\n`intended_use` (what the data is for), `country` (two letters),\n`requested_volume` (records a month; any company may ask for more than the\ndefault, the review sets the licence's own cap), `accept_terms` true and\n`terms_version` (from `GET /api/v1/license`). A code is mailed to the\naddress: type it back at `POST /api/v1/license/{id}/verify`. There is one\nlicence per registrable domain: an application for a domain that has one\nanswers that licence (`existing` true) and opens nothing new. 422 for a\nmissing word or terms not accepted, 409 past ten licences.","operationId":"apply_license_api_v1_license_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{},"example":{"data":{"id":3,"company_name":"Example Ltd","website":"https://example.org","activity":"A travel assistant that answers questions about local services.","intended_use":"Showing a customer the businesses near them when they ask.","country":"NL","requested_volume":100000,"license_type":"standard","status":"pending","terms_version":"2026-10-30","terms_accepted_at":"2026-10-30T09:00:00+00:00","keys":1,"created_at":"2026-10-30T09:00:00+00:00","monthly_record_cap":500000,"records_this_month":0,"existing":false,"address":"j***@example.org","address_proven":false}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/license/{license_id}/code":{"post":{"tags":["Public API v1"],"summary":"Mail the code again","description":"A new code (the old one dies) for the address of the application, or for\n`contact_email` when it is sent: another address at the same domain. At most\none code a minute. 404 for a licence this account has no application for.","operationId":"resend_code_api_v1_license__license_id__code_post","parameters":[{"name":"license_id","in":"path","required":true,"schema":{"type":"integer","title":"License Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/license/{license_id}/verify":{"post":{"tags":["Public API v1"],"summary":"Type the code back","description":"`code`: the 6 digits mailed to the company address. Five wrong tries or 30\nminutes end it (ask for a new one). The right code proves the address: the\nlicence can be reviewed, and this account can bind keys to it.","operationId":"verify_code_api_v1_license__license_id__verify_post","parameters":[{"name":"license_id","in":"path","required":true,"schema":{"type":"integer","title":"License Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/feed/records":{"get":{"tags":["Public API v1"],"summary":"The whole data: every published business, at your level","description":"Every published business in the directory, in id order, the same record\n`GET /api/v1/directory/listings/{id}` answers at the level of your annual feed\nlicence (`level`). Never an e-mail address. `has_more` false: this was the last\npage. Keep `since` from the first page: `GET /api/v1/feed/changes` from there\ngives everything that changed while the pull ran, and from then on.","operationId":"feed_records_api_v1_feed_records_get","parameters":[{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"description":"Leave it out to start; then `next_cursor` of the page before.","title":"Cursor"},"description":"Leave it out to start; then `next_cursor` of the page before."},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Records a page, 1 to 1,000. Default 100.","title":"Limit"},"description":"Records a page, 1 to 1,000. Default 100."},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Language of the labels, as on the record routes.","title":"Lang"},"description":"Language of the labels, as on the record routes."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{},"example":{"data":[{"id":412,"url":"https://leadralia.com/directory/us/company/bayou-city-plumbing-houston-tx","name":"Bayou City Plumbing","category":"plumber","address":"1401 Main St, Houston, TX 77002","country":"us","lat":29.7604,"lng":-95.3698,"phone":"+1 713-555-0137","phone_e164":"+17135550137","website":"https://bayoucityplumbing.example","socials":[],"town":"Houston, TX","level":"basic"}],"level":"basic","has_more":true,"next_cursor":"eyJhIjo0MTJ9.c2lnbmF0dXJl","since":"eyJzIjowfQ.c2lnbmF0dXJl"}}}},"403":{"description":"No `directory:feed` scope, no approved annual feed licence inside its term, or a level not on sale yet (`insufficient_scope`, `forbidden`)."},"422":{"description":"A cursor that was not made here, or a limit outside 1 to 1,000 (`invalid_request`)."},"429":{"description":"Over 10 requests a second, or another pull runs on the licence (`rate_limited`), with Retry-After."}}}},"/api/v1/feed/changes":{"get":{"tags":["Public API v1"],"summary":"Every business added, changed or gone since a cursor","description":"Each item is one business with `action`: `upsert` (added or changed, with its\n`record`) or `delete` (no longer published, for any reason: remove it; an id you\ndo not hold can be ignored). A business comes once, in its latest state, and may\ncome again: apply the items in order and the copy is right. `next_cursor` is always\nthere: call again with it, at once while `has_more` is true, later when it is\nfalse. The cursor keeps for 90 days; past that the answer is 410 and the whole data\nis taken again.","operationId":"feed_changes_api_v1_feed_changes_get","parameters":[{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"description":"`since` from `GET /feed/records`, then `next_cursor` of the page before.","title":"Since"},"description":"`since` from `GET /feed/records`, then `next_cursor` of the page before."},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Changes a page, 1 to 1,000. Default 100.","title":"Limit"},"description":"Changes a page, 1 to 1,000. Default 100."},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Language of the labels, as on the record routes.","title":"Lang"},"description":"Language of the labels, as on the record routes."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{},"example":{"data":[{"id":412,"action":"upsert","record":{"id":412,"url":"https://leadralia.com/directory/us/company/bayou-city-plumbing-houston-tx","name":"Bayou City Plumbing","category":"plumber","address":"1401 Main St, Houston, TX 77002","country":"us","lat":29.7604,"lng":-95.3698,"phone":"+1 713-555-0137","phone_e164":"+17135550137","website":"https://bayoucityplumbing.example","socials":[],"town":"Houston, TX","level":"basic"}},{"id":77,"action":"delete"}],"level":"basic","has_more":false,"next_cursor":"eyJzIjo5OX0.c2lnbmF0dXJl"}}}},"410":{"description":"The cursor is older than 90 days: take the whole data again (`feed_cursor_expired`)."},"403":{"description":"No `directory:feed` scope, no approved annual feed licence inside its term, or a level not on sale yet (`insufficient_scope`, `forbidden`)."},"422":{"description":"A cursor that was not made here, or a limit outside 1 to 1,000 (`invalid_request`)."},"429":{"description":"Over 10 requests a second, or another pull runs on the licence (`rate_limited`), with Retry-After."}}}},"/api/v1/verify":{"post":{"tags":["Public API v1"],"summary":"Check one e-mail address","description":"Body `{\"email\": \"info@shop.example\"}`. The answer comes within about 20 seconds.\n`status`: `deliverable` (this address can receive mail), `undeliverable` (this\naddress cannot receive mail), `catch_all` (this domain accepts every address, so\nthis one cannot be confirmed) or `unknown` (no definite answer for now). `reason`:\n`confirmed`, `accepts_all`, `no_mailbox`, `no_answer` or `not_an_address`, and\n`reason_text` says it in a few words. `unknown` is a normal answer and costs\nnothing. Flags: `free_host`, `role`, `disposable`, `did_you_mean` (a probable typo\nof a well known mail host) and `published_on_site` (the company's own website\npublishes this exact address). A definite answer is charged (`charged`), after the\naccount's first 100 free checks; a text that is not an address is `undeliverable`\nwith the reason `not_an_address` and is not charged. A result is our assessment at\nthat moment. It does not promise that a message will arrive.","operationId":"verify_one_api_v1_verify_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Verify One Api V1 Verify Post"},"example":{"data":{"email":"info@shop.example","status":"deliverable","reason":"confirmed","reason_text":"this address can receive mail","free_host":false,"role":true,"disposable":false,"published_on_site":true,"charged":true,"checked_at":"2026-10-30T12:00:00Z"}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/verify/lists":{"post":{"tags":["Public API v1"],"summary":"Check a list of e-mail addresses","description":"Up to 200,000 lines in one request: JSON `{\"emails\": [\"a@x.com\", ...],\n\"name\": \"October\", \"start\": true}` (or `\"text\"`, a pasted block), or a CSV body\n(`Content-Type: text/csv`, the address column found by its header, `?name=`,\n`?start=false`). A duplicate is checked and charged once; a line that is not an\naddress is `undeliverable` (`not_an_address`) and free. The answer carries the\n`estimate`: at most what the list can cost (only definite answers are charged,\nso it is usually less). With `start` true (the default) the list runs at once;\nwith `start` false it waits (`ready`) until `POST /verify/lists/{id}/start`.\nMany addresses at one domain take a little longer. When the balance runs out it\npauses, keeps what it found and runs again after a top up. Poll\n`GET /verify/lists/{id}`.","operationId":"create_list_api_v1_verify_lists_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create List Api V1 Verify Lists Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Public API v1"],"summary":"List the account's e-mail check lists","description":"Newest first: status, counts, progress, what was charged.","operationId":"list_lists_api_v1_verify_lists_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Page Size"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Lists Api V1 Verify Lists Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/verify/lists/{list_id}":{"get":{"tags":["Public API v1"],"summary":"Progress of a list","description":"`status`: `ready` (made, not started), `running`, `paused` (the balance ran out:\n`paused_reason` is `balance`; top up, or start it again), `done`. `progress`,\n`counts` by status, the `estimate`, what was `charged`.","operationId":"read_list_api_v1_verify_lists__list_id__get","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"integer","title":"List Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Read List Api V1 Verify Lists  List Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Public API v1"],"summary":"Delete a list and its answers","description":"Deletes the list, every answer and the addresses at once. Nothing already\ncharged is returned. Lists are deleted on their own 30 days after they were made.","operationId":"delete_list_api_v1_verify_lists__list_id__delete","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"integer","title":"List Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete List Api V1 Verify Lists  List Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/verify/lists/{list_id}/start":{"post":{"tags":["Public API v1"],"summary":"Start a list","description":"Starts a list made with `start` false, or runs a paused list again. 402 when\nthe account has no free checks left and nothing to pay with.","operationId":"start_list_api_v1_verify_lists__list_id__start_post","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"integer","title":"List Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Start List Api V1 Verify Lists  List Id  Start Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/verify/lists/{list_id}/results":{"get":{"tags":["Public API v1"],"summary":"The answers of a list, paged","description":"`status` filters: one or more of deliverable, undeliverable, catch_all, unknown,\njoined by commas. Addresses not checked yet are not listed.","operationId":"list_results_api_v1_verify_lists__list_id__results_get","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"integer","title":"List Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Page Size"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"","title":"Status"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Results Api V1 Verify Lists  List Id  Results Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/verify/lists/{list_id}/results.csv":{"get":{"tags":["Public API v1"],"summary":"The answers of a list as CSV","description":"Columns: email, status, reason, free_host, role, disposable, did_you_mean,\npublished_on_site. `status` filters as in the paged results\n(`status=deliverable` is the good ones only).","operationId":"list_results_csv_api_v1_verify_lists__list_id__results_csv_get","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"integer","title":"List Id"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"","title":"Status"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/verify/price":{"get":{"tags":["Public API v1"],"summary":"The price of a check, and the free checks left","description":"The price per 1,000 definite answers (EUR charged, USD as shown), the free checks\nof this account that are left, what it can still pay for and the limits.","operationId":"verify_price_api_v1_verify_price_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Verify Price Api V1 Verify Price Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/invoices":{"get":{"tags":["Public API v1"],"summary":"List the account's paid payments and their invoices","description":"Every paid payment of the account, newest first. `invoice_number` is the\nnumber printed on the invoice; `invoice_ready` is false while Stripe has not\nmade the invoice yet (a few seconds after a payment) or for a payment from\nbefore invoices existed. An order paid from the wallet balance is not\nlisted: the top-up that filled the wallet is.","operationId":"list_invoices_api_v1_invoices_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":25,"title":"Page Size"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Invoices Api V1 Invoices Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/invoices/{invoice_id}":{"get":{"tags":["Public API v1"],"summary":"Read one invoice, with a fresh PDF link","description":"The row of the list plus `invoice_pdf` (the PDF) and `hosted_invoice_url`\n(Stripe's page for it), asked from Stripe now. Both are null while\n`invoice_ready` is false. Download the PDF rather than store the link.","operationId":"get_invoice_api_v1_invoices__invoice_id__get","parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","title":"Invoice Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Invoice Api V1 Invoices  Invoice Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/listings/{listing_id}/email":{"post":{"tags":["Public API v1"],"summary":"The e-mail address a listing's own website publishes","description":"The address the business publishes on its own website (always on the\nlisting's own domain), when the listing shows one (`email_available` in\nthe listing). Answers `{\"data\": {\"listing_id\", \"email\", \"source\": \"site\",\n\"quota\": {\"limit\", \"used\", \"remaining\", \"reset_at\"}}}`.\n\nThe same rules as the company page: an account sees the addresses of a\nlimited number of different listings a day (25, or 200 once the account\nhas paid; `limit` null for staff), counted from 00:00 UTC; asking for a\nlisting again the same day costs nothing. Past it: `429 rate_limited`\nwith `Retry-After` (the seconds until 00:00 UTC). `404 not_found` when\nthe listing has no address to show (none published, the owner switched\nit off, or the address is on a suppression list). Every address shown is\nlogged with the account. An account also reads at most 10 different\nlistings in ten minutes and 40 an hour (the budget of the page's \"Show\ne-mail\", shared with it): `429 rate_limited` with\n`Retry-After`.","operationId":"listing_email_api_v1_directory_listings__listing_id__email_post","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"integer","title":"Listing Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/mine":{"get":{"tags":["Public API v1"],"summary":"The account's own business pages and open claims","operationId":"mine_api_v1_directory_mine_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/listings/{listing_id}/claim":{"post":{"tags":["Public API v1"],"summary":"Claim a listing","description":"`method`: domain_email (the account's confirmed address is on the\nlisting's domain; approved at once), company_email (with `local_part`,\nthe part before the @ of an address on the listing's own domain, the\nstate's `company_email_domain`: answers `202` and mails a 6-digit code\nthere, then POST /claims/{id}/code), dns or meta (returns the token to\npublish, then POST /claims/{id}/check). `consent` must be true: the\naccount agrees that Leadralia and businesses on Leadralia may send it\nbusiness messages, and can unsubscribe from any of them.\n\ncompany_email: the account's own address must be confirmed; `local_part`\nis plain ASCII letters, digits, dots, \"-\" and \"_\" (no \"+tag\"). The\nanswer is the same for any address (we never say whether a mailbox\nexists). The same call again sends a new code (the old one dies): at\nmost one a minute per account, 3 an hour and 10 a day per account, 5 a\nday per listing and 3 a day per address (`429 rate_limited`). On a domain\nshared by several listings the proven claim may wait for the site\nmanager (`pending_claim.review`).","operationId":"claim_api_v1_directory_listings__listing_id__claim_post","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"integer","title":"Listing Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/claims/{claim_id}/code":{"post":{"tags":["Public API v1"],"summary":"Confirm a company e-mail claim","description":"`code`: the 6 digits mailed to the claim's address (company_email).\nThe right code approves the claim (the state's `owner` true) or, on a\ndomain shared by several listings, proves it for the site manager\n(`pending_claim.review` true). A code works for 30 minutes and dies after\n5 wrong tries (`422 invalid_request` \"wrong_code\" with the tries left,\nthen \"code_expired\": ask for a new one). A claim that ended (the\nrecipient said it was not them, a code to another address replaced it)\nis `409 conflict`.","operationId":"confirm_code_api_v1_directory_claims__claim_id__code_post","parameters":[{"name":"claim_id","in":"path","required":true,"schema":{"type":"integer","title":"Claim Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/claims/{claim_id}/check":{"post":{"tags":["Public API v1"],"summary":"Check a DNS or meta claim","operationId":"check_api_v1_directory_claims__claim_id__check_post","parameters":[{"name":"claim_id","in":"path","required":true,"schema":{"type":"integer","title":"Claim Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/listings/{listing_id}/images/{kind}":{"post":{"tags":["Public API v1"],"summary":"Upload one of the owner's pictures","description":"`kind`: logo or cover (Pro: on the page at once), offering (Pro: a\ncard's picture; put its `image.url` in the card's image_url with the\nnext PATCH) or photo (Pro: added to the page's photos, at most 12). A\nJPEG, PNG or WebP of at most the directory's image size; stored as a\nsmall WebP. Answers the claim state, with `image` {url, width, height}\nfor an offering picture or a photo.","operationId":"image_api_v1_directory_listings__listing_id__images__kind__post","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"integer","title":"Listing Id"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","title":"Kind"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_image_api_v1_directory_listings__listing_id__images__kind__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Public API v1"],"summary":"Remove one of the owner's pictures","description":"`kind`: photo (`url`: the photo's address), logo or cover (the\nowner's own; the website's comes back). Whatever the plan.","operationId":"image_delete_api_v1_directory_listings__listing_id__images__kind__delete","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"integer","title":"Listing Id"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","title":"Kind"}},{"name":"url","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/listings/{listing_id}/checkout":{"post":{"tags":["Public API v1"],"summary":"Start paying for a plan","description":"`tier`: verified, pro or featured; `interval`: month or year. Answers\n{mode: \"stripe\", checkout_url}: open it to pay.","operationId":"checkout_api_v1_directory_listings__listing_id__checkout_post","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"integer","title":"Listing Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/listings/{listing_id}/release":{"post":{"tags":["Public API v1"],"summary":"Release your listing","operationId":"release_api_v1_directory_listings__listing_id__release_post","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"integer","title":"Listing Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assistants":{"get":{"tags":["Public API v1"],"summary":"The assistants connected to the account","description":"`data`: each connected assistant {id, name, returns_to (the host it\nreturns to after the consent: claude.ai, chatgpt.com ...), permissions\n[{scope, label, description}], connected_at, updated_at, last_used_at}.\n`server_url` is the address to add in an assistant, `directory_url` the\nsame server with the public directory tools only, `enabled` whether\nsigning in is switched on, `scopes` the permissions an assistant can ask\nfor.","operationId":"list_assistants_api_v1_assistants_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Assistants Api V1 Assistants Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assistants/activity":{"get":{"tags":["Public API v1"],"summary":"What the connected assistants did","description":"Every tool call an assistant made for the account, newest first: {id,\nassistant_id, assistant, tool, arguments (a bounded copy, never a secret),\noutcome (ok, refused, denied, invalid, rate_limited, error), detail,\nduration_ms, at}. Kept for 180 days.","operationId":"assistants_activity_api_v1_assistants_activity_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Page Size"}},{"name":"assistant","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Only this assistant's calls","title":"Assistant"},"description":"Only this assistant's calls"},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Assistants Activity Api V1 Assistants Activity Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assistants/{assistant_id}":{"delete":{"tags":["Public API v1"],"summary":"Disconnect an assistant","description":"Ends the connection: every token the assistant holds for this account\nstops working at once. 404 when the account has no such connection.","operationId":"disconnect_assistant_api_v1_assistants__assistant_id__delete","parameters":[{"name":"assistant_id","in":"path","required":true,"schema":{"type":"integer","title":"Assistant Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Disconnect Assistant Api V1 Assistants  Assistant Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/submissions":{"get":{"tags":["Public API v1"],"summary":"The businesses the account added","description":"The account's submissions, the latest first, as `data` with `total`,\n`page` and `page_size`; `lane` (`paid` while the account holds a paid\ndirectory plan on any page it owns, else `free`), `allowance` (`limit`,\n`used`, `remaining`, `reset_at`: the forms an account sends a day,\ncounted from 00:00 UTC; `limit` null for staff), `enabled` (false while\nthe form is closed), `countries` (the countries the directory has\npages for) and `edit_open` (whether every editing gate is open for now:\nthe plan table reads the editing rows as open to every owner while it is\ntrue).","operationId":"list_submissions_api_v1_directory_submissions_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Page Size"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Public API v1"],"summary":"Add a business to the directory","description":"Add a business that is not in the directory yet. `website` is its own\nwebsite on its own domain (not a page on a social network, a marketplace\nor a platform, and not a site builder's or free host's subdomain);\n`name`; `country` (two letters, one of `countries` of the list call);\n`city` (the town's name in Latin letters, no postcode); `region` (the\ntwo-letter state code, needed in the United States); `postcode`\n(optional); `category` (one of the directory's trades, e.g. restaurant).\n\nThe answer is the submission with its `status`:\n\n- `queued`: a page was made and is on its way. An account with a paid\n  directory plan, any tier, on any page it owns gets it sooner (`lane`\n  `paid`). Nothing is shown before the page is ready, and a website that\n  cannot be used or says too\n  little publishes nothing: the status becomes `failed` with a `reason`\n  and a `message`, and `can_retry` says whether it can be sent again.\n- `duplicate`: a listing on that domain exists; `listing.id` is the one\n  to claim (POST /directory/listings/{id}/claim).\n- `refused`: with a `reason` (`platform`, `own_domain`, `religion`,\n  `politics`, `adult`, `charity`, `government`, `culture`, `leisure`,\n  `chain`, `not_listed`, `admin`) and a `message` that says why.\n\nWhen the account's confirmed e-mail address is on the website's domain\nand `consent` is true (or the account agreed to business messages\nbefore), the form is the claim: `claimed` is true and the page is the\naccount's. Otherwise the page has no owner and is claimed the usual way.\n\nErrors: 403 email_not_verified; 409 conflict (the same website is being\nadded right now); 422 invalid_request (the message names the field); 429\nrate_limited (the account's forms of the day are sent, or too many in a\nshort time; `Retry-After`); 503 service_unavailable (the form is\nclosed).","operationId":"create_submission_api_v1_directory_submissions_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/submissions/{submission_id}":{"get":{"tags":["Public API v1"],"summary":"One submission","operationId":"get_submission_api_v1_directory_submissions__submission_id__get","parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"integer","title":"Submission Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/submissions/{submission_id}/retry":{"post":{"tags":["Public API v1"],"summary":"Send a failed submission again","description":"Only a submission that `failed`, at most three times.","operationId":"retry_submission_api_v1_directory_submissions__submission_id__retry_post","parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"integer","title":"Submission Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/listings/{listing_id}/stamp-request":{"post":{"tags":["Public API v1"],"summary":"Ask for a page to be stamped sooner (no key; limits)","description":"A visitor asks us to stamp this page sooner. Answers 202 `{\"state\":\n\"requested\"}`; one ask per page per address per day counts, so repeating\nit is harmless. A page that is stamped answers 200 `{\"state\": \"stamped\"}`\nand nothing is written. No key and no body.","operationId":"ask_for_a_stamp_api_v1_directory_listings__listing_id__stamp_request_post","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"200":{"description":"The page is stamped already: `{\"state\": \"stamped\"}`, nothing written."},"404":{"description":"No published listing with that id (`not_found`)."},"429":{"description":"Too many asks from this address (`rate_limited`)."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{}]}},"/api/v1/inbox/summary":{"get":{"tags":["Public API v1"],"summary":"The inbox counts: threads that wait for you","operationId":"summary_api_v1_inbox_summary_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inbox/threads":{"get":{"tags":["Public API v1"],"summary":"List the account's conversations, waiting first","operationId":"list_threads_api_v1_inbox_threads_get","parameters":[{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"question, support or order","title":"Kind"},"description":"question, support or order"},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"open or closed","title":"State"},"description":"open or closed"},{"name":"waiting","in":"query","required":false,"schema":{"type":"boolean","description":"only threads waiting for you","default":false,"title":"Waiting"},"description":"only threads waiting for you"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Q"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Page Size"}},{"name":"listing","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"only the questions asked on this page of yours (a listing id)","title":"Listing"},"description":"only the questions asked on this page of yours (a listing id)"},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Public API v1"],"summary":"Write to Leadralia support","operationId":"open_support_api_v1_inbox_threads_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inbox/threads/{thread_id}":{"get":{"tags":["Public API v1"],"summary":"One conversation with its latest messages","operationId":"get_thread_api_v1_inbox_threads__thread_id__get","parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inbox/threads/{thread_id}/messages":{"get":{"tags":["Public API v1"],"summary":"A conversation's messages, newest last","operationId":"get_messages_api_v1_inbox_threads__thread_id__messages_get","parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}},{"name":"before","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Before"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Public API v1"],"summary":"Answer in a conversation","operationId":"post_message_api_v1_inbox_threads__thread_id__messages_post","parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inbox/threads/{thread_id}/read":{"post":{"tags":["Public API v1"],"summary":"Mark read up to a message","operationId":"mark_read_api_v1_inbox_threads__thread_id__read_post","parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inbox/threads/{thread_id}/close":{"post":{"tags":["Public API v1"],"summary":"Close a conversation","operationId":"close_api_v1_inbox_threads__thread_id__close_post","parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inbox/threads/{thread_id}/reopen":{"post":{"tags":["Public API v1"],"summary":"Open a closed conversation again","operationId":"reopen_api_v1_inbox_threads__thread_id__reopen_post","parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inbox/threads/{thread_id}/mute":{"post":{"tags":["Public API v1"],"summary":"Mute (or unmute) mail for a conversation","operationId":"mute_api_v1_inbox_threads__thread_id__mute_post","parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inbox/threads/{thread_id}/block":{"post":{"tags":["Public API v1"],"summary":"Block (or unblock) a question's visitor","operationId":"block_api_v1_inbox_threads__thread_id__block_post","parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inbox/messages/{message_id}/report":{"post":{"tags":["Public API v1"],"summary":"Report a message","operationId":"report_api_v1_inbox_messages__message_id__report_post","parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"integer","title":"Message Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inbox/messages/{message_id}/publish":{"post":{"tags":["Public API v1"],"summary":"Show (or hide) an answer on your company page","operationId":"publish_api_v1_inbox_messages__message_id__publish_post","parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"integer","title":"Message Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inbox/threads/{thread_id}/approve":{"post":{"tags":["Public API v1"],"summary":"Approve an order's proof","operationId":"approve_api_v1_inbox_threads__thread_id__approve_post","parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inbox/threads/{thread_id}/changes":{"post":{"tags":["Public API v1"],"summary":"Ask for changes to an order's proof","operationId":"changes_api_v1_inbox_threads__thread_id__changes_post","parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inbox/settings":{"get":{"tags":["Public API v1"],"summary":"Which mails the account gets, per kind","operationId":"get_settings_api_v1_inbox_settings_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Public API v1"],"summary":"Change which mails the account gets","operationId":"put_settings_api_v1_inbox_settings_put","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inbox/saved-answers":{"get":{"tags":["Public API v1"],"summary":"The account's saved answers","operationId":"saved_answers_api_v1_inbox_saved_answers_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Public API v1"],"summary":"Save an answer","operationId":"add_saved_api_v1_inbox_saved_answers_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/inbox/saved-answers/{answer_id}":{"delete":{"tags":["Public API v1"],"summary":"Delete a saved answer","operationId":"delete_saved_api_v1_inbox_saved_answers__answer_id__delete","parameters":[{"name":"answer_id","in":"path","required":true,"schema":{"type":"integer","title":"Answer Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/directory/listings/{country}/{slug}/questions":{"post":{"tags":["Public API v1"],"summary":"Ask a business a question (no key; Turnstile and limits)","operationId":"ask_question_api_v1_directory_listings__country___slug__questions_post","parameters":[{"name":"country","in":"path","required":true,"schema":{"type":"string","title":"Country"}},{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/visitor/threads/{token}":{"get":{"tags":["Public API v1"],"summary":"The visitor's conversation (private link)","operationId":"visitor_thread_api_v1_visitor_threads__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/visitor/threads/{token}/messages":{"post":{"tags":["Public API v1"],"summary":"The visitor adds to the conversation","operationId":"visitor_write_api_v1_visitor_threads__token__messages_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/visitor/threads/{token}/{action}":{"post":{"tags":["Public API v1"],"summary":"Confirm, stop mail, delete","operationId":"visitor_action_api_v1_visitor_threads__token___action__post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"action","in":"path","required":true,"schema":{"type":"string","title":"Action"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/occasions":{"get":{"tags":["Public API v1"],"summary":"A country's occasions of one year","operationId":"calendar_api_v1_occasions_get","parameters":[{"name":"country","in":"query","required":true,"schema":{"type":"string","description":"Two-letter ISO code, e.g. us","title":"Country"},"description":"Two-letter ISO code, e.g. us"},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":2100,"minimum":2000},{"type":"null"}],"title":"Year"}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"en","title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/occasions/upcoming":{"get":{"tags":["Public API v1"],"summary":"The occasions of the coming days","operationId":"upcoming_api_v1_occasions_upcoming_get","parameters":[{"name":"country","in":"query","required":true,"schema":{"type":"string","title":"Country"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":400,"minimum":1,"default":60,"title":"Days"}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"en","title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/occasions/offer":{"get":{"tags":["Public API v1"],"summary":"The occasion discounts this account may use now","operationId":"offer_api_v1_occasions_offer_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/home":{"get":{"tags":["Public API v1"],"summary":"The dashboard's Home: credits, what waits, lists, searches, pages, market","description":"The cards of the Home, each under its registry id (\"home.credits\", \"home.market\" ...). `errors`\nnames a card that could not be read this time; the others still answer. `cc` and `cat` choose another\nmarket for \"home.market\" (default: the account's own).","operationId":"home_api_v1_intel_home_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"cc","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO country, e.g. nl","title":"Cc"},"description":"ISO country, e.g. nl"},{"name":"cat","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"trade key, e.g. restaurant","title":"Cat"},"description":"trade key, e.g. restaurant"},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Home Api V1 Intel Home Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/search":{"get":{"tags":["Public API v1"],"summary":"What a search phrase is and where the dashboard opens it","operationId":"search_api_v1_intel_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":240,"default":"","title":"Q"}},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Search Api V1 Intel Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/settings/{section}":{"get":{"tags":["Public API v1"],"summary":"A dashboard section's own settings","description":"{\"section\", \"fields\", \"values\", \"scopes\", \"nothing_to_set\"}: the fields the section holds with their\nvalues (a default where none is set) and the API scopes of its endpoints.","operationId":"settings_read_api_v1_intel_settings__section__get","parameters":[{"name":"section","in":"path","required":true,"schema":{"type":"string","title":"Section"}},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Settings Read Api V1 Intel Settings  Section  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Public API v1"],"summary":"Change a dashboard section's own settings","description":"{\"values\": {field: value}}: only the fields named change; null clears one back to its default. A\nfield the section does not hold, or a wrong value, is a 422 that names it.","operationId":"settings_write_api_v1_intel_settings__section__put","parameters":[{"name":"section","in":"path","required":true,"schema":{"type":"string","title":"Section"}},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Settings Write Api V1 Intel Settings  Section  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/radar":{"get":{"tags":["Public API v1"],"summary":"Radar and alerts: watch lists, saved alerts, the change feed, the channels","description":"Every card of the section under its registry id (\"radar.lists\", \"radar.alerts\", \"radar.feed\",\n\"radar.channels\"), the plan's `limits`, and `errors` naming a card that could not be read this time.","operationId":"overview_api_v1_intel_radar_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Overview Api V1 Intel Radar Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/radar/lists":{"get":{"tags":["Public API v1"],"summary":"The account's watch lists of companies and the plan's quota","description":"{\"ready\", \"limits\": {\"companies\", \"alerts\", \"lists\"}, \"used\", \"total\", \"items\": [{\"id\", \"name\",\n\"companies\", \"with_site\", \"created_at\"}]}. `used` counts each company once, whatever its lists.","operationId":"lists_api_v1_intel_radar_lists_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Lists Api V1 Intel Radar Lists Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Public API v1"],"summary":"Create a watch list","description":"{\"name\"}: 1 to 80 characters, once per account. 403 when the plan holds no watch list, 409 for a\nname in use or too many lists.","operationId":"create_list_api_v1_intel_radar_lists_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create List Api V1 Intel Radar Lists Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/radar/lists/{list_id}":{"get":{"tags":["Public API v1"],"summary":"One watch list with its companies","description":"Its companies, newest first: name, town, trade, domain, the names of the website platform and the\nshop's engine (null while not known), the company's page.","operationId":"read_list_api_v1_intel_radar_lists__list_id__get","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"integer","maximum":2147483647,"minimum":1,"title":"List Id"}},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":100,"title":"Page Size"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Read List Api V1 Intel Radar Lists  List Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Public API v1"],"summary":"Delete a watch list","operationId":"delete_list_api_v1_intel_radar_lists__list_id__delete","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"integer","maximum":2147483647,"minimum":1,"title":"List Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete List Api V1 Intel Radar Lists  List Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/radar/lists/{list_id}/companies":{"post":{"tags":["Public API v1"],"summary":"Follow a company in a watch list","description":"{\"listing_id\"} (a directory business's id) or {\"domain\"}. One already in the list answers\n\"added\": false. 403 past the plan's number of companies.","operationId":"add_company_api_v1_intel_radar_lists__list_id__companies_post","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"integer","maximum":2147483647,"minimum":1,"title":"List Id"}},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Add Company Api V1 Intel Radar Lists  List Id  Companies Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/radar/lists/{list_id}/companies/{listing_id}":{"delete":{"tags":["Public API v1"],"summary":"Stop following a company in a list","operationId":"remove_company_api_v1_intel_radar_lists__list_id__companies__listing_id__delete","parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"integer","maximum":2147483647,"minimum":1,"title":"List Id"}},{"name":"listing_id","in":"path","required":true,"schema":{"type":"integer","maximum":2147483647,"minimum":1,"title":"Listing Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Remove Company Api V1 Intel Radar Lists  List Id  Companies  Listing Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/radar/alerts":{"get":{"tags":["Public API v1"],"summary":"The account's saved alerts","description":"{\"items\": [{\"id\", \"name\", \"country\", \"trade\", \"town\", \"events\", \"companies\", \"with_site\"}], \"samples\"}:\nwhile the account has none, `samples` holds three alerts on its market with their real counts.","operationId":"alerts_api_v1_intel_radar_alerts_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Alerts Api V1 Intel Radar Alerts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Public API v1"],"summary":"Save a search with an alert","description":"{\"country\": \"nl\", \"trade\": \"restaurant\", \"town\": null, \"events\": [\"shop_new\"], \"name\": null}. The\nevents: tech_added, tech_removed, shop_new, host_changed, cert_ending, domain_ending, site_down,\nlanguage_new. 403 past the plan's number of alerts.","operationId":"create_alert_api_v1_intel_radar_alerts_post","parameters":[{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Alert Api V1 Intel Radar Alerts Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/radar/alerts/{alert_id}":{"delete":{"tags":["Public API v1"],"summary":"Delete a saved alert","operationId":"delete_alert_api_v1_intel_radar_alerts__alert_id__delete","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"integer","maximum":2147483647,"minimum":1,"title":"Alert Id"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Alert Api V1 Intel Radar Alerts  Alert Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/radar/feed":{"get":{"tags":["Public API v1"],"summary":"The change feed of the companies and markets the account follows (soon)","description":"Soon: {\"state\": \"soon\", \"items\": [], \"next\": null, \"fields\", \"events\"}: the events the feed will carry\nand the fields of one item.","operationId":"feed_api_v1_intel_radar_feed_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Feed Api V1 Intel Radar Feed Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/radar/webhooks":{"get":{"tags":["Public API v1"],"summary":"The radar's channels as the account set them (soon)","description":"The weekly mail, the webhook and the API as set in the radar's settings\n(PUT /api/v1/intel/settings/radar). Nothing goes out yet.","operationId":"channels_api_v1_intel_radar_webhooks_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Channels Api V1 Intel Radar Webhooks Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/tech":{"get":{"tags":["Public API v1"],"summary":"Technology explorer: who uses one technology, by trade and by country","description":"The cards of the explorer under their registry ids: \"tech.users\" (the companies that use it in the\nmarket, by trade and by country, as estimates), \"tech.coUsed\" (what their websites carry beside it),\n\"tech.openList\" (the way to them in Find customers); \"tech.trend\", \"tech.moves\" and \"tech.publicTool\"\nanswer {\"state\": \"soon\"}. Without `t` it opens the technology the account follows first, else the\nmarket's most used one. `tech` is null when no company runs a technology of that name. Names only,\nnever a version. `errors` names a card that could not be read this time. At most two such reads of an\naccount at a time: a third is a 429 with Retry-After.","operationId":"tech_api_v1_intel_tech_get","parameters":[{"name":"t","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"description":"a technology, e.g. WordPress","title":"T"},"description":"a technology, e.g. WordPress"},{"name":"cc","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO country, e.g. nl (default: the account's own)","title":"Cc"},"description":"ISO country, e.g. nl (default: the account's own)"},{"name":"cat","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"trade key, e.g. restaurant","title":"Cat"},"description":"trade key, e.g. restaurant"},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Tech Api V1 Intel Tech Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/tech/export":{"get":{"tags":["Public API v1"],"summary":"Technology explorer: its tables as a csv or xlsx file","description":"One row per line of the explorer's tables: table (trade, country, used_with), name, companies_about,\nshare_percent.","operationId":"tech_export_api_v1_intel_tech_export_get","parameters":[{"name":"t","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"T"}},{"name":"cc","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cc"}},{"name":"cat","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cat"}},{"name":"format","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"csv or xlsx (default: the account's own)","title":"Format"},"description":"csv or xlsx (default: the account's own)"},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/find":{"get":{"tags":["Public API v1"],"summary":"Find customers: the lists ready for a campaign and the plan's searches","description":"`cards` under their registry ids: \"find.toCampaign\" holds the latest searches and lists (each one a\nlist a campaign can take); `usage` the plan's searches left of its total, the price of one business and\nthis month's searches; `settings` the section's own settings. `errors` names a part not read this time.","operationId":"find_section_api_v1_intel_find_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Find Section Api V1 Intel Find Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/find/filters":{"get":{"tags":["Public API v1"],"summary":"The filters on a company's website, with the sites behind each choice","description":"Each filter: `id`, `param` (its name in `site_filters`), `kind` (choice, yes, yesno, band), `state`\n(live, or soon: not open yet) and `options`, each with the websites of the market behind it (`sites`;\nnull when not counted). The market needs a trade or a town: without either a 422. Send a choice's\n`value` as the filter's value; \"yes\" for any shop or booking tool. At most two such reads of an account\nat a time: a third is a 429 with Retry-After.","operationId":"find_filters_api_v1_intel_find_filters_get","parameters":[{"name":"cc","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"description":"ISO country, e.g. nl","title":"Cc"},"description":"ISO country, e.g. nl"},{"name":"cat","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}],"description":"trade key, e.g. restaurant","title":"Cat"},"description":"trade key, e.g. restaurant"},{"name":"town","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"description":"a town of the country","title":"Town"},"description":"a town of the country"},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Find Filters Api V1 Intel Find Filters Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/find/reason":{"post":{"tags":["Public API v1"],"summary":"How many companies match, and why the first ones matched","description":"The body of `POST /api/v1/searches` (`categories` or `all_businesses`, `areas` or a `country`, the\nticks, `site_filters`, `max_results`). The answer is the search's preview (`total`, `matching`,\n`approximate`, `price` ...) and `matches`: the first companies the search would take, each with its\npublic page and `reasons`, the facts that matched your filters ({id, value}), and `facts`, the other\nfacts of its website. No contact detail: those come with the search. A wrong filter is a 422 that\nnames it, so is a filter that is not open yet and site filters without a trade or a town; a search too\nbroad to count now is a 503 service_unavailable. At most two such reads of an account at a time: a\nthird is a 429 with Retry-After. Each company of `matches` is a business read:\nmetered at the Basic level of the paid API (with its licence, cap and gate: 402 insufficient_balance\npast them); the count and the price are free.","operationId":"find_reason_api_v1_intel_find_reason_post","parameters":[{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Find Reason Api V1 Intel Find Reason Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/company":{"get":{"tags":["Public API v1"],"summary":"One company's overview: profile, technology, checks, competitors","description":"The cards of the Company overview, each under its registry id (\"company.profile\", \"company.tech\"\n...): what the company does and where, its website's technology by name, a secure connection, its page\nchecks and its rank among the sites of its trade in its town, its competitors side by side; the digital\nscore only for a paid account or the company's own owner. `company` is null and `matches` names the\nothers when nothing or several companies answer. Never an e-mail address. The per-key budgets of the\ndirectory's read routes hold here too: 429 rate_limited past them.","operationId":"company_api_v1_intel_company_get","parameters":[{"name":"domain","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":253},{"type":"null"}],"description":"A domain or a web address.","title":"Domain"},"description":"A domain or a web address."},{"name":"id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":2147483647,"minimum":1},{"type":"null"}],"description":"A directory listing id.","title":"Id"},"description":"A directory listing id."},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":240},{"type":"null"}],"description":"A domain or a company's name.","title":"Q"},"description":"A domain or a company's name."},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Company Api V1 Intel Company Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/company/usage":{"get":{"tags":["Public API v1"],"summary":"The Company overview's quota and usage of today","description":"{\"today\", \"limit\"}: the different companies the account opened today in the dashboard (UTC day, null\nwhen not counted) and its day's allowance there (null: no limit). A key's own reads are the paid API's\nrecords (GET /api/v1/usage).","operationId":"company_usage_api_v1_intel_company_usage_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Company Usage Api V1 Intel Company Usage Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/company/{listing_id}/list":{"post":{"tags":["Public API v1"],"summary":"Add a company to a list of your leads","description":"{\"list_id\": 3} or {\"name\": \"Bakeries\"} (made when the account has no list of that name). The company\nbecomes a lead of the account at the price of one business of a search (a search credit of the plan\nfirst, then the wallet); a company the account holds already costs nothing. 402 without a credit or\nthe wallet for it, 404, 409 for a company that cannot be added to the account's leads, 422.","operationId":"company_to_list_api_v1_intel_company__listing_id__list_post","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"integer","maximum":2147483647,"minimum":1,"title":"Listing Id"}},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Company To List Api V1 Intel Company  Listing Id  List Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/market":{"get":{"tags":["Public API v1"],"summary":"Market overview: one trade in a country or a town, as cards","description":"The cards of one market, each under its registry id (\"market.count\", \"market.platforms\" ...): the\ncompanies, the share with a website, the website platforms, the online shops, HTTPS, phones, the top towns\nwith their place on a map, the most common services, the same trade in another country and the way to the\nlist. \"market.hosting\", \"market.mail\" and \"market.report\" answer {\"state\": \"soon\"}. `errors` names a card\nthat could not be read this time; the others still answer. With none of cc, cat and town: the market of\nthe section's settings, else the account's own. At most two such reads of an account at a time: a third\nis a 429 with Retry-After.","operationId":"market_api_v1_intel_market_get","parameters":[{"name":"cc","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"description":"ISO country, e.g. gb","title":"Cc"},"description":"ISO country, e.g. gb"},{"name":"cat","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"description":"a trade's key (dentist) or its name in any of the app's languages (tandartsen)","title":"Cat"},"description":"a trade's key (dentist) or its name in any of the app's languages (tandartsen)"},{"name":"town","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"description":"a town's name, e.g. London","title":"Town"},"description":"a town's name, e.g. London"},{"name":"vs","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"description":"the country to compare with, e.g. ie","title":"Vs"},"description":"the country to compare with, e.g. ie"},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Market Api V1 Intel Market Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/domains":{"get":{"tags":["Public API v1"],"summary":"The dashboard's Domains: expired domains by ending and trade","description":"The cards of the Domains section, each under its registry id. \"domains.expired\": the names of one\ncountry in the expired domains list, those of at most eight letters, the top endings and trades with the\naddress of the search that opens them, and how many match the account's defaults (its Domains\nsettings). \"domains.age\", \"domains.expiring\" and \"domains.dns\" answer {\"state\": \"soon\"}. `notice`: an\nexpiry date does not mean the name can be bought. `errors` names a card that could not be read. At most\ntwo heavy reads of an account at a time: a third is a 429 with Retry-After.","operationId":"domains_api_v1_intel_domains_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"cc","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"description":"ISO country, e.g. nl","title":"Cc"},"description":"ISO country, e.g. nl"},{"name":"cat","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"description":"trade key, e.g. restaurant","title":"Cat"},"description":"trade key, e.g. restaurant"},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Domains Api V1 Intel Domains Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/domains/usage":{"get":{"tags":["Public API v1"],"summary":"Today's names and checks left in the expired domains search","description":"{\"rows\": {\"limit\", \"left\"}, \"checks\": {\"limit\", \"left\"}, \"scopes\"}: the names the account may still\nread today and the registry checks it may still make (null: no limit, or not known).","operationId":"usage_api_v1_intel_domains_usage_get","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Usage Api V1 Intel Domains Usage Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/reports":{"get":{"tags":["Public API v1"],"summary":"Reports: the ready reports, the report maker, buying, the reports to come","description":"Every card of the section under its registry id (\"reports.library\", \"reports.generate\", \"reports.buy\",\n\"reports.flagship\", \"reports.later\"), the reports the account took this month (`quota`: \"used\", \"ready\")\nand `errors` naming a card that could not be read this time. Reports are pay as you go only: EUR 19 a report,\na custom one from EUR 199 (\"reports.buy\"); no plan holds any. \"reports.library\" carries the sample report in\nfull under \"open\". At most two heavy reads of an account at a time: a third is a 429 with Retry-After.","operationId":"overview_api_v1_intel_reports_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Overview Api V1 Intel Reports Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/reports/report":{"get":{"tags":["Public API v1"],"summary":"One market report: a country, or a country and a trade","description":"{\"id\", \"country\", \"country_name\", \"trade\", \"trade_label\", \"sample\", \"full\", \"summary\", \"chapters\"}.\nThe summary: companies, towns, websites, the most used platform and the share with an online shop. The\nsample report (the Netherlands) holds every chapter's figures; another report names its chapters, their\nfigures come with the bought report.","operationId":"one_api_v1_intel_reports_report_get","parameters":[{"name":"id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"description":"report id, e.g. nl or nl.restaurant","title":"Id"},"description":"report id, e.g. nl or nl.restaurant"},{"name":"cc","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":8},{"type":"null"}],"description":"ISO country, e.g. nl","title":"Cc"},"description":"ISO country, e.g. nl"},{"name":"cat","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"description":"trade key or name, e.g. restaurant","title":"Cat"},"description":"trade key or name, e.g. restaurant"},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response One Api V1 Intel Reports Report Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/reports/catalogue":{"get":{"tags":["Public API v1"],"summary":"The countries a report is made for, and the trades of one","operationId":"catalogue_api_v1_intel_reports_catalogue_get","parameters":[{"name":"cc","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":8},{"type":"null"}],"title":"Cc"}},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Catalogue Api V1 Intel Reports Catalogue Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/reports/orders":{"post":{"tags":["Public API v1"],"summary":"Buy a report as PDF and CSV (opens soon)","description":"{\"report\": \"nl.restaurant\", \"formats\": [\"pdf\", \"csv\"]}. Checked, then 503 until buying opens.","operationId":"order_api_v1_intel_reports_orders_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Order Api V1 Intel Reports Orders Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/bench":{"get":{"tags":["Public API v1"],"summary":"Benchmarks and score: a company's checks, its rank among similar companies, its digital score","description":"The cards of the section under their registry ids: \"bench.checks\" (each check with its name, its written\ndefinition, the result for this site: yes, no, partly, unknown or na, and the share of similar sites that\nmeet it), \"bench.rank\" (the share of similar sites of its trade in its town that its SEO score is above) and\n\"bench.score\" (the digital score on five axes with a confidence each; unknown facts never count against a\ncompany). Without id or domain: the account's own first company page. The cards of a company the account\ndoes not own answer {\"state\": \"locked\"} without a paid plan. At most two heavy reads of an account at a\ntime: a third is a 429 with Retry-After.","operationId":"bench_api_v1_intel_bench_get","parameters":[{"name":"id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":2147483647,"minimum":1},{"type":"null"}],"description":"the company's id in the directory","title":"Id"},"description":"the company's id in the directory"},{"name":"domain","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"description":"the company's domain, e.g. bakery.co.uk","title":"Domain"},"description":"the company's domain, e.g. bakery.co.uk"},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Bench Api V1 Intel Bench Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/campaigns":{"get":{"tags":["Public API v1"],"summary":"Campaigns: what runs, what was sent, what waits for you","description":"The section's cards under their registry ids: \"campaigns.running\" (queued or running campaigns, with those\nin review, those that need a change and those waiting for the next send window), \"campaigns.sent\" (mails sent\nthis month, UTC, and in all), \"campaigns.replies\" (unread replies; `enabled` false when replies reach your\nmailbox only), \"campaigns.approvals\" (copies of your orders waiting for your yes), \"campaigns.latest\",\n\"campaigns.weeks\" (sent and replies per week, eight weeks), \"campaigns.fromAnywhere\" (your lists and\nsearches, your defaults, the offer). `quota`: the plan's sends, the campaigns at once, the price of a send.\n`errors` names a card that could not be read this time; the others still answer.","operationId":"campaigns_api_v1_intel_campaigns_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Campaigns Api V1 Intel Campaigns Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/campaigns/from":{"get":{"tags":["Public API v1"],"summary":"What a campaign from a list, a search, a market or a technology would be","description":"The companies a campaign from this source would reach and the existing call that starts it (`start.api`):\na list or a search -> POST /api/v1/campaigns with its audience (add `subject` and `body`); a market -> POST\n/api/v1/wizard/campaigns, a guided campaign that opens with the market; a technology -> the search of Find\ncustomers with its filter (`start.app`), whose result is then a search here. Nothing is sent or charged by\nthis call: the start keeps its own review, country rules, prices and limits. A radar result answers\n{\"state\": \"soon\"}.","operationId":"campaign_from_api_v1_intel_campaigns_from_get","parameters":[{"name":"source","in":"query","required":true,"schema":{"type":"string","description":"list, search, market, tech or radar","title":"Source"},"description":"list, search, market, tech or radar"},{"name":"id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"description":"the list's id or the search's id","title":"Id"},"description":"the list's id or the search's id"},{"name":"cc","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"description":"market or tech: ISO country, e.g. nl","title":"Cc"},"description":"market or tech: ISO country, e.g. nl"},{"name":"cat","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"description":"market or tech: a trade's key or its name","title":"Cat"},"description":"market or tech: a trade's key or its name"},{"name":"town","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"description":"market: a town","title":"Town"},"description":"market: a town"},{"name":"t","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"description":"tech: e.g. WordPress","title":"T"},"description":"tech: e.g. WordPress"},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Campaign From Api V1 Intel Campaigns From Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/check-site":{"get":{"tags":["Public API v1"],"summary":"Check your own site against similar companies of your trade in your town","description":"The account's own company site beside similar companies: every check with what was observed and how many\nsimilar companies meet it, what can be improved (the most common among them first), the rank of its SEO score\namong them, the digital score (shown to the company's owner only) and the way to our\nplans and services. `state` says when there is nothing to check yet: no_page, no_site, shared_site (a profile\non a shared platform), not_known (the site's facts are not held yet). An id that is not one of the account's\nown pages: 404.","operationId":"check_site_api_v1_intel_check_site_get","parameters":[{"name":"id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"one of the account's own company pages","title":"Id"},"description":"one of the account's own company pages"},{"name":"peers","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":50,"minimum":1},{"type":"null"}],"description":"similar companies: 5, 10, 20 or 50","title":"Peers"},"description":"similar companies: 5, 10, 20 or 50"},{"name":"area","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"description":"town or region","title":"Area"},"description":"town or region"},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Check Site Api V1 Intel Check Site Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/channel":{"get":{"tags":["Public API v1"],"summary":"Channel and ads: the account's channel and ads, the plans and the ad prices","description":"The cards of the section under their registry ids. \"channel.mine\": the monthly channel (its state, plan,\nthis month's waves and their sent, delivered and replies, what waits for approval, the next payment), or\n{\"state\": \"none\"} without one, or {\"state\": \"soon\"} while the channel is not open to the account.\n\"channel.ads\": the ads with their states, impressions bought, used and left, and clicks. \"channel.plans\": the\nchannel's plans on sale with their prices. \"channel.adPrices\": the price of a whole country and of one trade\nper 1,000 impressions in the caller's currency, the smallest order and the three fixed places. `errors` names a\ncard that could not be read this time; the others still answer.","operationId":"channel_api_v1_intel_channel_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Channel Api V1 Intel Channel Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/channel/export":{"get":{"tags":["Public API v1"],"summary":"Channel and ads: the ads or the channel's waves as a CSV or XLSX file","description":"part=ads: one row per ad with its place, countries, state, impressions and clicks. part=waves: one row per\nwave of the channel with its date, state, sent, delivered, replies and reminders (404 while the channel is not\nopen to the account).","operationId":"channel_export_api_v1_intel_channel_export_get","parameters":[{"name":"part","in":"query","required":false,"schema":{"type":"string","maxLength":10,"description":"ads or waves","default":"ads","title":"Part"},"description":"ads or waves"},{"name":"format","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":5},{"type":"null"}],"description":"csv or xlsx; left out: the section's setting","title":"Format"},"description":"csv or xlsx; left out: the section's setting"},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/data":{"get":{"tags":["Public API v1"],"summary":"Data and API: the detail levels, the annual data, keys, licence and usage","description":"The section's cards, each under its registry id. \"data.levels\": the three detail levels (basic,\nprofile, full), each with its price per 1,000 records as charged (EUR) and as shown (USD), whether it is\non sale and the account's records of it this month; the search\nprice; the free units of the company's domain; the records read this month against the monthly cap; the\nfields that are coming ({\"state\": \"soon\"}). \"data.annual\": the annual full data by contract (USD a year\nper level, no monthly cap) and the account's annual licence when it has one. \"data.webhooks\" and\n\"data.datasets\" answer {\"state\": \"soon\"}. `pages` names the existing pages the section folds in\n(\"route.settings.apiKeys\": live keys, the licence, the month's usage; \"route.connect\": the assistants\nconnected and the address to add in one). `errors` names what could not be read this time; the rest\nstill answers.","operationId":"data_api_v1_intel_data_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Data Api V1 Intel Data Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/account":{"get":{"tags":["Public API v1"],"summary":"Account and billing: plan, credits, wallet, invoices, what the dashboard uses","description":"The cards of the section, each under its registry id (\"account.plan\", \"account.credits\" ...).\n\"account.order\" is null when no order waits for its payment. \"account.invoices\" needs invoices:read and\n\"account.order\" orders:read: without them the card is {\"state\": \"scope\", \"scope\": \"<the scope>\"}. Each\nplan's limits in the new dashboard (\"account.usage\".dashboard, each plan's \"dashboard\") are the owner's\nprice model. `errors` names a card that could not be read this time; the others still answer.","operationId":"account_api_v1_intel_account_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Account Api V1 Intel Account Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/ask":{"get":{"tags":["Public API v1"],"summary":"Ask Leadralia: the limits, their use, every plan's questions and the examples","description":"{\"open\", \"quota\": {\"tier\", \"limits\", \"used\", \"left\", \"resets\"}, \"plan\", \"limits\", \"first\", \"examples\",\n\"recent\"}. `open` is false while asking has not opened yet (the examples still answer).","operationId":"overview_api_v1_intel_ask_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Overview Api V1 Intel Ask Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Public API v1"],"summary":"Ask Leadralia a question in plain words","description":"{\"q\": \"restaurants in London that sell online\", \"lang\": \"en\"}: the question read as a query\n(\"understood\", \"query\"), the section that holds the whole list (\"section\": find, market, tech or domains)\nand its address (\"to\"), the count (\"count\", \"exact\" false for an estimate) and the first 20\n(\"results.rows\"). Never an e-mail address or a phone number. Counted against the account's limits, its\nplan's questions a day and a week (GET /api/v1/intel/ask lists every plan's), before anything is read; an\nanswer that could not be read in time (503 try_again) counts too. 429 limit_reached when none is left,\n503 opens_soon before asking opens. A question with nothing we can read answers \"state\": \"unclear\" and is\nnot counted. Each company of \"results.rows\" is a business read: metered at the Basic level of the paid API\n(with its licence, cap and gate: 402 insufficient_balance past them); the count and the link are free.","operationId":"ask_api_v1_intel_ask_post","parameters":[{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ask Api V1 Intel Ask Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intel/ask/examples/{n}":{"get":{"tags":["Public API v1"],"summary":"One of Ask Leadralia's example questions, answered","operationId":"example_api_v1_intel_ask_examples__n__get","parameters":[{"name":"n","in":"path","required":true,"schema":{"type":"integer","title":"N"}},{"name":"lang","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"}},{"name":"key_budget","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Key Budget"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Example Api V1 Intel Ask Examples  N  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_image_api_v1_directory_listings__listing_id__images__kind__post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_image_api_v1_directory_listings__listing_id__images__kind__post"},"Body_upload_image_api_v1_ads_image_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"slot":{"type":"string","title":"Slot"},"variant":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant","default":"desktop"}},"type":"object","required":["file","slot"],"title":"Body_upload_image_api_v1_ads_image_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"ApiKeyBearer":{"type":"http","scheme":"bearer","description":"An API key: `Authorization: Bearer lra_...`"},"ApiKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Fallback for hosts that strip Authorization."}}},"servers":[{"url":"https://leadralia.com"}],"security":[{"ApiKeyBearer":[]},{"ApiKeyHeader":[]}],"x-scopes":[{"scope":"account:read","description":"Read the account: who the key belongs to, plan, wallet balance, what it still needs before it can search and send, its shape (what the account has, for a dashboard), and the assistants (ChatGPT, Claude) connected to it with what they did. Also the account's API licences with their status and the records read this month. In the dashboard: Home, its search and each section's settings; Find customers' lists ready for a campaign and the plan's searches; the Market overview of a trade in a country or a town; the Technology explorer and its tables as a file; the radar's watch lists, saved alerts and change feed; the reports (the ready ones, one market's report, the countries and trades a report is made for); and how many companies the Company overview opened today."},{"scope":"account:write","description":"Replace the account's business postal address (the one a mail to a US business carries; it can be replaced, never removed); disconnect a connected assistant; buy an API plan (a Stripe Checkout page, or from the wallet); apply for an API licence for a company. In the dashboard: change a section's settings; create and delete the radar's watch lists, follow a company in one or stop following it, save and delete an alert; order a report (opens soon)."},{"scope":"leads:read","description":"List and read leads, subject to the same email reveal rules as the app."},{"scope":"leads:write","description":"Update a lead's pipeline status, note and follow-up date."},{"scope":"senders:read","description":"List the connected sending accounts a campaign can send from."},{"scope":"senders:write","description":"Create the sending address Leadralia hosts for the account (Send via Leadralia), or a platform sender (house and admin accounts)."},{"scope":"campaigns:read","description":"List campaigns and read their status and delivery funnel, and the account's daily sending numbers per sender domain."},{"scope":"campaigns:write","description":"Start or resume an email campaign (spends sends), or cancel one."},{"scope":"lists:read","description":"List the account's own lists and read their contacts, each with its own subject and body."},{"scope":"lists:write","description":"Create and delete the account's own lists and add or remove their contacts (JSON or CSV, up to 50,000 a call)."},{"scope":"suppression:read","description":"Export the account's own do-not-contact list."},{"scope":"suppression:write","description":"Add addresses to the account's own do-not-contact list."},{"scope":"webhooks:read","description":"Read the URL the account gets its reply, opt-out, bounce and complaint events on."},{"scope":"webhooks:write","description":"Set or remove that URL (a new signing secret each time) and send it a test event."},{"scope":"templates:read","description":"List the account's mail templates and the ready-made designs."},{"scope":"templates:write","description":"Save, replace or delete a mail template."},{"scope":"searches:read","description":"List searches and read their progress; ask who buys what you sell (audience suggestions); read Find customers' filters on a company's website and the companies that match them, before a search."},{"scope":"searches:write","description":"Start a search for businesses in an area (spends searches) or cancel one; from the dashboard's Company overview, add one directory company to a list of leads (spends one search, POST /api/v1/intel/company/{id}/list)."},{"scope":"replies:read","description":"List and read the replies to the account's campaigns, with the answers sent to them."},{"scope":"orders:read","description":"List and read the account's \"We do it for you\" orders: packages, status, numbers."},{"scope":"orders:write","description":"Create, edit, approve and pay a \"We do it for you\" order, duplicate or cancel one."},{"scope":"channel:read","description":"Read the monthly channel \"We do it for you\": the plans on sale, the account's channel with its calendar of waves, the copy that waits for approval, each wave's results, the months paid, the menu of kinds of business with counts and the preview of the next mail."},{"scope":"channel:write","description":"Start and change the account's monthly channel (plan, offer, kinds of business, areas, the mail and its approval, the number of waves), pay its first month, approve a wave's copy or ask for changes, pause, resume, cancel at the end of the month or keep it."},{"scope":"replies:write","description":"Answer a reply through the account's own sender (free, at most 60 an hour)."},{"scope":"invoices:read","description":"List the account's paid payments and read each one's invoice: its number and a link to the PDF."},{"scope":"directory:read","description":"Search the public business directory (in free text like its one search box, or by trade, town and facts), read one business with its facts and receipts, the suggestions and the lists of countries, trades and towns, at the key's own budget (these reads also answer without a key, at a small budget per IP); read the account's own business pages and claims, the figures of the pages it owns and how they compare with the pages around them, what each page still misses and its monthly report, and the businesses it added with where each one stands. Every keyed read of the directory is counted (GET /api/v1/usage); once billing starts, 1,000 search and basic calls are free, once, for the domain of an approved company licence, and the rest is priced per 1,000 (leadralia.com/developers). A search or a list answers id, name, category and town; fields=basic reads one business (contact details)."},{"scope":"directory:profile","description":"Read one directory business at the profile level (fields=profile): the basic level and what its page holds: its activity, services, specialties, products, about, founded, languages, areas, payment and facts. No free calls, billed at the highest level the business can fill."},{"scope":"directory:full","description":"Read one directory business at the full level (fields=full): the profile level and the technology of its website (the platform, hosting, delivery network, certificate, e-mail provider, registrar, mobile and the tools, names only). Includes directory:profile."},{"scope":"directory:feed","description":"Read the whole directory and everything that changed in it (GET /api/v1/feed/records and /api/v1/feed/changes), at the level of the company's annual feed licence. Only with an approved annual feed licence inside its term. Never an e-mail address."},{"scope":"directory:email","description":"Read the e-mail address a directory listing's own website publishes, one listing per call, within the account's daily allowance (by default 25 listings a day, 200 once the account has paid); every address read is logged."},{"scope":"directory:write","description":"Claim a directory listing (with the business-messages consent), have a code mailed to an address on its own domain and type it back, run its DNS or meta check, edit the account's own listing within its plan, start a plan's checkout, or release the page; report a wrong fact on any listing; add a business that is not in the directory yet (its own website on its own domain) or send a failed one again."},{"scope":"domains:read","description":"Search expired domains by specification (trade, town, country, length, ending, the shape of the name), read the counts beside the filters and check whether a name in the list is free. Each call is counted as one search (GET /api/v1/usage)."},{"scope":"ads:read","description":"Read the advertiser's side of the directory's ads: the prices (per 1,000 impressions, EUR 5 inside the euro area, USD 5 elsewhere, a trade 1.75 times that), the fixed places with their sizes, the countries and trades, what a plan costs with its delivery band, and the account's own ads with their review, impressions bought, used and left, and clicks."},{"scope":"ads:write","description":"Create and change the account's directory ads (a picture or a text in one of the fixed places, a link, the countries and trades), upload their pictures, pause, resume or delete one, and buy impressions for it through a Stripe Checkout page. Every new or changed creative is reviewed before it runs."},{"scope":"inbox:read","description":"Read the account's inbox: the questions visitors asked its company pages, its conversations with Leadralia support and the thread of each \"We do it for you\" order, the counts that wait, the saved answers and the mail settings. Never a visitor's e-mail address unless they chose to share it."},{"scope":"inbox:write","description":"Answer in the account's conversations (and show an answer on its company page), write to Leadralia support, close, reopen, mute, block a visitor, report a message, mark read, keep saved answers and change the mail settings; with orders:write, approve an order's proof or ask for changes."},{"scope":"occasions:read","description":"Read the occasions calendar of a country (its national days, the religious occasions that are public life there, the commercial and seasonal days, each with its date; a lunar date is marked expected until it is confirmed) and the occasion discounts the account may use now."},{"scope":"verify:read","description":"Pure-Inbox: read the account's e-mail check lists: their progress and counts, the results per address (deliverable, undeliverable, catch_all, unknown, with the reason and the flags) paged or as CSV. Nothing is charged."},{"scope":"verify:write","description":"Pure-Inbox: check an e-mail address (POST /api/v1/verify) or a list of up to 200,000 (POST /api/v1/verify/lists), start a list, delete one. Only a definite answer (deliverable, undeliverable, catch_all) is charged, per 1,000 checks (leadralia.com/developers); unknown is free; the first 100 checks of an account are free, once."}]}