Free sample exam
Claude Certified Developer – Foundations
Free practice questions for CCDV-F, Anthropic's exam for engineers who ship applications on the Claude API, scored as you go, with the reason behind every answer and a study map for each domain.
Tecyfy is independent of Anthropic. These are our own practice questions, written to the skills in the official exam guide and answered from Anthropic's documentation.
The real exam
The exam tests whether you can build, integrate and ship applications, agents and workflows on the Claude API: calling the API and handling what comes back, picking a model and keeping tokens and cost down, building agents and tools, prompting, and keeping it secure. A third of the questions are on applications and integration, so API mechanics and application design matter more than anything else.
Anthropic recommends 1 to 5 years of software engineering, 6 months with Claude or a similar model, and Python or TypeScript; none of it is required. Only people at organisations in the Claude Partner Network can sit the exam. Anyone can use the sample below.
- Exam code
- CCDV-F
- Questions
- 53, multiple choice and multiple response
- Time
- 120 minutes
- Pass mark
- 720 on a scale of 100 to 1,000
- Fee
- $125
- Valid for
- 12 months, renewed free with an online check
- Who can sit it
- Staff of Claude Partner Network organisations
What it covers, by share of the questions
- Agents and workflows14.7%
- Applications and integration33.1%
- Claude Code3.1%
- Eval, testing and debugging2.6%
- Model selection and optimization16.8%
- Prompt and context engineering11%
- Security and safety8.1%
- Tools and MCPs10.6%
The sample
11 questions in the style of the exam. Pick an answer to see why it is right or wrong. Your best score stays in this browser.
Question 1 of 11
Question 1
A nightly job retries every failed API call. Last night every request failed with a 429
rate_limit_error, none of the responses had aretry-afterheader, and the job kept retrying until morning. What is the likely cause, and what should the job do?Not this time. Anthropic's error reference lists 3 causes of a 429: a rate limit, the usage tier's monthly spend cap, and a spend limit on the Claude Code workspace. A spend-cap 429 has no
retry-afterheader and keeps failing until access resumes, so retrying all night only burns time; the job should stop and tell a person. An ordinary rate limit comes withretry-after, and more workers would make it worse. Overload is a different error, 529overloaded_error. A malformed request returns 400, not 429.Question 2
Your own tool loop gets a 400 back: "tool_use ids were found without tool_result blocks immediately after". After running the tool, your code sends a user message whose content starts with the text "Here is what the tool returned:" and then holds the
tool_resultblock. What do you change?Not this time. The API has 2 rules here: tool results must come in the message right after the assistant's tool call, with nothing between them, and inside that user message the
tool_resultblocks must come first, with any text after them. Your text in front of the result breaks the second rule. Plain text loses thetool_use_idthat ties the result to the call. An extra assistant message breaks the first rule. A 400 means the request itself is invalid, so sending it again fails the same way.Question 3
Your service calls
claude-sonnet-5-5. A teammate worries that Anthropic could swap the model behind that ID and change your outputs overnight, and wants a job that re-runs the whole eval suite every hour to catch it. What is true?Not this time. Anthropic's models overview says every Claude model ID is a pinned snapshot, including the dateless IDs used from the 4.6 generation on; for older models a short alias pointed at a dated ID, but that no longer applies. So the model behind
claude-sonnet-5-5does not change. What does change is the model you choose: keep the ID in configuration and move to a new one only after your evals pass on it. An hourly eval run guards against something that does not happen. The other 2 options describe IDs that do not work that way on any platform.Question 4
To cut cost you put
cache_controlon the last block of every request: the system prompt and a long policy text, then one block with the current time and the user's message. Requests arrive a few seconds apart. Every response showscache_creation_input_tokensabove 0 andcache_read_input_tokensat 0. Why?Not this time. This is the case Anthropic's prompt caching page walks through. The cache key covers everything up to the breakpoint, and the time in that block makes it different on every request, so each one writes a new entry and none ever finds a match. Put the breakpoint on the last block that is the same across requests, here the end of the policy text. A prompt below the minimum length shows 0 for both fields, not a write every time. Requests seconds apart are well inside 5 minutes. Caching works on ordinary requests.
Question 5
You move a feature from Claude Sonnet 4.5 to Claude Opus 5.5 by changing the model ID. Every request now fails with a 400 whose message starts
"thinking.type.enabled" is not supported. Your code sendsthinking: {type: "enabled", budget_tokens: 8000}. What do you change?Not this time. Manual extended thinking with
budget_tokenswas deprecated on the 4.6 models, and Claude 4.7 and later reject it with exactly this 400. Opus 5.5 uses adaptive thinking, where the model decides how much to think, steered by the effort level. A smaller budget is still the rejected setting. The beta header has no effect on models that reject manual thinking. And newer models do think; they just choose how much themselves. This is the kind of breaking change between model releases the exam asks about: read the migration notes before changing an ID.Question 6
Every invoice that arrives goes through the same 4 steps: extract the fields, check them against the purchase order, flag mismatches, and write a summary for the approver. The team plans an autonomous agent that holds the 4 steps as tools and decides the order itself. What does Anthropic's guidance on agents suggest?
Not this time. Anthropic's "Building effective agents" advises the simplest design that works: workflows give predictability and consistency for well-defined tasks, and agents are for when the model has to decide the path. Here the path never changes, so a prompt chain fits, with a check in code after a step (are all the fields there?) before the next runs. Subagents and a coordinator add cost and moving parts the task doesn't need. One large request mixes 4 jobs and gives you no place to check between them. An agent choosing the order would only be choosing the same order every time, at the price of speed and predictability.
Question 7
An agent built with the Claude Agent SDK edits files in a repository. Its system prompt says never to modify
.envfiles, but in testing it edited one twice in 200 runs. What makes the rule hold every time?Not this time. An instruction in a prompt is followed most of the time, and most of the time is what failed here. A hook is code that runs at a set point whatever the model decides: a
PreToolUsehook sees the tool's input before the tool runs, and returning a deny decision blocks the call. Anthropic's SDK documentation uses this very case, blocking writes to.envfiles, as its example. Louder or repeated instructions are still instructions. APostToolUsehook runs after the file has already changed, so it can report the damage but not prevent it.Question 8
You use structured outputs with a JSON schema whose
categoryfield is an enum that includes "Billing Issue". Downstream code looks the category up in a dictionary, and a few responses a day fail because the value is "Billing issue". What should you do?Not this time. Structured outputs guarantee that a response follows the schema in almost every way, but Anthropic's documentation names one gap: the capitalisation of
enumandconststrings is not guaranteed, and a value can differ from the schema only in case, with no error and no special stop reason. The documented fix is to compare enum values case-insensitively and not to have values that differ only by case. Parsing free text throws away the guarantees you do have. Retrying pays again for a correct answer. Examples may make the slip rarer, but rarer is not never, and the lookup still breaks.Question 9
An agent has 2 tools:
search_orders, described as "Searches orders", andget_order, described as "Gets an order". It often callssearch_orderswith an order number it already has, and then callsget_order. What improves its choice of tool the most?Not this time. Anthropic's tool documentation calls detailed descriptions by far the most important factor in tool performance: what the tool does, when it should and shouldn't be used, what each parameter means and what it returns, in at least 3 or 4 sentences. "Searches orders" doesn't say that it takes a customer or a date range, and "Gets an order" doesn't say it is the one to use when you already have the number. Forcing one tool breaks every request that needs the other. More thinking can't make up for missing information, and the order in which the tools are listed carries none.
Question 10
An hour ago a developer pushed a commit to a public GitHub repository with the production Claude API key in a
.envfile. What do you do first?Not this time. A key that was public for an hour has to be treated as copied. Anthropic's advice on API keys is to keep them out of code in environment variables or a secrets manager, add
.envfiles to.gitignore, rotate by creating a new key and deactivating the old one, and watch the Console's Logs and Usage pages. Here that means deactivating the key at once, then fixing the leak and checking for use you don't recognise. Rewriting history or making the repository private doesn't take the key back from anyone who already has it. Waiting for the rotation leaves a working key in other hands. Separate keys for each environment would also have kept the damage to production alone.Question 11
About 3% of responses from your contract extraction service fail JSON parsing. In the traces, every failed response has
stop_reason: "max_tokens", and all of them come from the longest contracts. Where is the problem, and what fixes it?Not this time.
max_tokensas the stop reason means the response hit the limit your code set, so the JSON is cut off, not wrong. That is a problem in the integration, not in the model's answer, and the trace shows it: the failures line up with one stop reason and the longest inputs. Raise the limit (or split long contracts), and checkstop_reasonbefore you parse, so a cut-off answer is caught as such. Anthropic's structured outputs page names this case too: a response cut off atmax_tokensmay not match the schema. A larger model has the same limit, more required fields make the output longer still, and the network isn't involved.
Sources
Where each fact comes from
- 1Claude Certified Developer – Foundations Exam Guide, version 1.0 (July 2026)
- 2Who can take a Claude certification exam
- 3Claude API errors
- 4Handle tool calls
- 5Models overview
- 6Prompt caching
- 7Extended thinking
- 8Building effective agents
- 9Intercept and control agent behavior with hooks
- 10Structured outputs
- 11Define tools
- 12API key best practices: keep your keys safe and secure
- 13Stop reasons and fallback
How to study for it, domain by domain
Study the domains in order of weight: the larger the share, the more questions it sets. Each one links to our own free pages that teach it.
33.1%
Applications and integration
16.8%
Model selection and optimization
14.7%
Agents and workflows
11%
Prompt and context engineering
10.6%
Tools and MCPs
8.1%
Security and safety
3.1%
Claude Code
2.6%
Eval, testing and debugging
Questions
- Who can take the Claude Certified Developer – Foundations exam?
- Only people who work at organisations in the Claude Partner Network. You register on Anthropic's Partner Academy with a company email on a domain in your organisation's partner record, and you need to be 18 or older with a government-issued photo ID. Anyone can practise with this sample.
- How many questions are on the Claude Developer exam, CCDV-F?
- 53 multiple-choice and multiple-response questions in 120 minutes, each saying how many answers to pick. It is the shortest of the 4 Claude exams; the others have 60 or 63.
- What is on the Claude Certified Developer – Foundations exam?
- 8 domains. Applications and integration is a third of it (33.1%), then model selection and optimization (16.8%), agents and workflows (14.7%), prompt and context engineering (11%), tools and MCP (10.6%), security and safety (8.1%), Claude Code (3.1%) and eval, testing and debugging (2.6%).
- What is the passing score and fee for CCDV-F?
- You pass with a scaled score of 720 on a range of 100 to 1,000, and the fee is $125 an attempt, less any discount for your organisation's partner tier. After a fail you wait 14 days, then 30, then 90, with at most 4 attempts in a rolling 12 months.
- Do I need Python for the Claude Developer certification?
- Anthropic recommends Python or TypeScript, fluency with REST APIs and command-line tools, 1 to 5 years of software engineering and 6 months with Claude or a similar model. None of it is required; the credential is awarded on the exam result alone.
- Should I take Claude Developer or Claude Architect – Foundations?
- Developer – Foundations if you build applications on the API: a third of it is API mechanics and application design. Architect – Foundations if you design agent systems: it puts 27% on agent architecture and sets every question inside a production scenario. Neither needs the other first, and we have a free sample of each.