Agent readiness · pandadoc.com
2026-08-12 10:20 UTC · formula v9.2 · 4.2s
Your edge refuses ordinary HTTP from a data centre, agent or not.
GET https://pandadoc.com/ answered 429 to LetAgentsIn/1.0 and 429 to a Chrome user-agent. Both were refused, so this is your WAF rejecting the network we scan from rather than a rule about agents. Everything below was measured through that wall.
A dashed column is a stage we could not measure, not a stage you failed.
- A · Discovery
- 1/3
- B · Agent entry
- 2/2
- C · Registration
- n/m
- D · Provisioning
- 1/2
- E · Integration
- 1/2
of the 9 points that apply to you and we could measure · 8 of 17 were not scored
You 5 · category median 7.5 · best docuseal.com 9 · 15 deterministic HTTP checks, published formula
A challenge, not a limit
Your edge answered 429 and asked the caller to run JavaScript to prove it is a browser. A person never sees it. No agent can pass it, because an agent is an HTTP client, so this is the one wall on this page that stops the funnel before any of it starts. We score it rather than excusing it as our own traffic: everything below was measured through it and is a floor, not a ceiling.
Fix this first
This is the whole list: everything we could measure and you do not pass. Another 8 points sit behind checks we could not evaluate on your domain, and each of those lines below says what would make it measurable.
- 1Programmatic key provisioningan afternoon · +1
Document how a key is created without opening a dashboard: management API, service account or CLI. If no such path exists, that gap is the finding, not the docs.
- 2Machine-readable API descriptionan afternoon · +1
Publish an OpenAPI file at /openapi.json, or serve markdown when a client sends Accept: text/markdown. Either one stops agents guessing your API.
Then, when you have room
- Answers an agent user-agent a project · +1Your public pages answer 429 to Chrome and 429 to an agent user-agent. Exempt them from that rule and rate limit instead of refusing.
- Docs readable without JavaScript a project · +1Server-render the docs or mirror them as markdown. A plain fetch gets 63 characters, which reads as an empty product.
Take it with you
4 of the checks an agent depends on, pandadoc.com does not pass.
Send yourself the list above with the checks that cost the most, and a permanent link. Whoever owns the fix is usually not the person who ran the scan.
One email with the report, and one follow-up asking what you did with it. No newsletter, no sequence. Delete on request at hello@letagentsin.com.
None of this tells you whether an agent picked you
Everything above is a file an agent could read. Whether one actually chose you is a different measurement, and we have not run it on pandadoc.com. What we have run it on is a rich text editor vendor: six agents, one brief, six isolated copies of a real codebase. All six picked the same competitor, and the vendor being studied was never named, not even on a rejection list, while the runs named and dismissed ten alternatives between them. In an earlier round, run before we isolated the copies, it was named twice and struck off both times in four words: Fully commercial, licence key required. That study is about them, not about you. It is here because it is the difference between a file and a decision.
Against documents and e-signature
You are 4 of 6 in a category where a developer is trying to generate a document and get it signed.
- 1docuseal.com9/12
- 2useanvil.com10/15
- 3documenso.com9/16
- 4pandadoc.comyou5/9
- 5dropboxsign.com6/13
- 6pdfmonkey.io6/13
Where competitors pass and pandadoc.com does not
- Answers an agent user-agentdocuseal.com · documenso.com · dropboxsign.com · useanvil.com · pdfmonkey.io
- Docs readable without JavaScriptdocuseal.com · documenso.com · dropboxsign.com · useanvil.com · pdfmonkey.io
- Machine-readable API descriptionuseanvil.com · pdfmonkey.io
Only domains we have actually scanned appear here, so the ranking is a floor: a competitor missing from the list has not been measured, not beaten.
By stage
Every check
Each line is one HTTP observation with a published rule, so you can rerun any of them yourself. Most are the same tomorrow if you are: the two that are not are the bot gate and the pricing page, which answer inconsistently on their own, which is why those run more than once and say so when the tries disagreed. PASS and PART are counted. UNMEASURED means we could not evaluate it, N/A means it does not apply to a product like yours, and neither is in the score or its denominator. See the formula
A · Discovery
- FAILAnswers an agent user-agentAnswered 429 to LetAgentsIn/1.0 (+https://letagentsin.com/methodology) with a JavaScript challenge from your edge, so no agent reaches the site at allAn agent sends HTTP with its own user-agent, not a browser fingerprint. A 403 here ends the funnel before any of it starts.
- PASSllms.txt publishedllms.txt present at https://developers.pandadoc.com/llms.txt, and the 12 links we sampled across the file all answer
- FAILDocs readable without JavaScriptOnly 63 characters render without JSMost agents fetch HTML, they do not run your bundle. An empty shell reads as an empty product.
- UNMEASUREDOn-demand agents not blockedUnmeasurable: your edge answered our request for robots.txt with a refusal rather than the file, so what it permits is not something we measuredServe robots.txt to ordinary HTTP clients. Every crawler you want has to read it too.
- UNMEASUREDPaths robots.txt points at answerUnmeasurable: robots.txt was refused rather than absent, so nothing in it could be followedServe robots.txt to ordinary HTTP clients and this becomes measurable.
- UNMEASUREDNo punishing crawl delayUnmeasurable: robots.txt was refused rather than absent, so any Crawl-delay in it is unreadServe robots.txt to ordinary HTTP clients and this becomes measurable.
B · Agent entry
- UNMEASUREDAgent entry pointUnmeasurable: 9 of the 9 known agent entry paths answered with a refusal rather than a file or a 404, so what you publish there is not something we measuredLet ordinary HTTP reach these paths and this becomes measurable.
- PASSOAuth dynamic client registrationregistration_endpoint published, but none of the 2 advertised grants (authorization_code, refresh_token) finishes without a person at a browser
- PASSMCP surfaceLive MCP endpoint at https://mcp.pandadoc.com/v1/mcp, answered 401 with an auth challenge
C · Registration
- UNMEASUREDNo CAPTCHA in the signup HTMLUnmeasurable: the signup form at https://pandadoc.com/signup is not in the server HTML, so its gates are not eitherServer-render the form, or tell us the endpoint it posts to, and the gates become visible to us and to an agent.
- UNMEASUREDSignup reachable without a browserUnmeasurable: https://pandadoc.com/signup answered 429, which is a limit we triggered rather than a rule about agentsNothing for you to do. We will rescan later and this becomes measurable.
D · Provisioning
- PARTProgrammatic key provisioning1 of 7 provisioning phrases across the 2 documents we read: "create an api key (or api token, access token, personal access token, service account, auth token, secret key), next to something programmatic"Documented key creation is the difference between a two-minute integration and a support ticket.
- UNMEASUREDFree tier or no-card trial stated in textUnmeasurable: no pricing page could be fetchedLink a pricing page from your home page, or list one in llms.txt.
E · Integration
- PASSTyped SDK on the registrypandadoc-signing@1.0.1 ships types, matched from the registry by who publishes it rather than by a link on your site
- FAILMachine-readable API descriptionNo OpenAPI spec at the 5 usual paths, none declared by https://developers.pandadoc.com, and no markdown negotiationAn OpenAPI file or markdown negotiation lets an agent read your API instead of guessing it.Point at your spec from your docs page with rel="service-desc" and an agent finds it without guessing.
What we discovered on the way
- Docs
- https://developers.pandadoc.com · found on a subdomain
- Pricing
- not found
- Signup
- https://pandadoc.com/signup · guessed path
- npm package
- pandadoc-signing (registry guess)
- GitHub
- not found
- Package licence
- MIT
- Crawl-delay
- none
- Content-Signal
- none
- Blocked on-demand agents
- none