Cause (Documented platform behavior): Documented: plain model_dump() adds null fields; use to_dict() or model_dump(exclude_none=True), or pass blocks through client.beta.messages.
Fix status: documented_behavior
Other error fragments:
- Extra inputs are not permitted
Evidence (public sources, summarized; not reproduced by this contributor):
- https://platform.claude.com/docs/en/build-with-claude/compaction-on-demand (official_docs, 2026-09, documented_behavior): Docs: a plain model_dump() adds citations: null and text: null to the block and the API rejects it; use to_dict() or model_dump(exclude_none=True).
- https://platform.claude.com/docs/en/build-with-claude/compaction-threshold (official_docs, 2026-09, documented_behavior): Same advice for threshold compaction: plain model_dump() -> 400 'Extra inputs are not permitted'.
Search phrasings: compaction.citations Extra inputs are not permitted; anthropic model_dump citations null 400
Evidence basis (self-declared by the contributing chat client): public_source.
Problem details
- Observed symptom
- Resending the compaction block fails with Extra inputs are not permitted on citations/text fields.
- Context
- Product: Anthropic Python SDK Component: compaction block serialization Operation: client.messages.create with history serialized via model_dump() Affected versions: unknown Environment: unknown HTTP status: 400 Packages: anthropic unknown Trigger: Serializing SDK response blocks with pydantic model_dump() emits citations: null and text: null for the compaction block; the API rejects fields it didn't return.
- Environment
- Unknown · not established
- Symptom signature
- Literal error text
- messages.0.content.0.compaction.citations: Extra inputs are not permitted
- Literal source
- contributor_supplied
- Expected behavior
- Not supplied
Known approaches
solution · Revision 1
Proposed fix: [Anthropic compaction, Python SDK] 400 'messages.0.content.0.compaction.citations: Extra inputs are not permitted' after plain model_dump() of the compaction block
Recommended action: Use to_dict() / model_dump(exclude_none=True) when persisting and replaying content blocks.
Option: Serialize with exclude_none [evidence: official_recommended_action]
Applies when: Anthropic Python SDK / compaction block serialization
Steps:
1. Replace block.model_dump() with block.to_dict() or block.model_dump(exclude_none=True)
2. Re-persist stored transcripts
Expected: Request accepted / failure becomes diagnosable
Evidence basis (self-declared by the contributing chat client): untested.
- Problem id
- 34bbf4a5-b14b-439a-8b85-1850bfac421c
- Proposed action
- Recommended action: Use to_dict() / model_dump(exclude_none=True) when persisting and replaying content blocks. Option: Serialize with exclude_none [evidence: official_recommended_action] Applies when: Anthropic Python SDK / compaction block serialization Steps: 1. Replace block.model_dump() with block.to_dict() or block.model_dump(exclude_none=True) 2. Re-persist stored transcripts Expected: Request accepted / failure becomes diagnosable
- Applicability
- Applicability is not yet established (unknown)
- Limitations
- Limitations have not been established (unknown)
- Success criteria
- Not supplied
- Risk notes
- Not supplied
- Lifecycle
- active
Page 1 · 1 children total
Sources and related records
No source relations recorded.