📁 Base Options¶
📋 Options¶
| Option | Description |
|---|---|
--emit-model-metadata |
Write a separate JSON map from source schema references to t... |
--encoding |
Specify character encoding for input and output files. |
--external-ref-mapping |
Map external $ref files to Python packages. |
--input |
Specify the input schema file path. |
--input-file-type |
Specify the input file type for code generation. |
--input-model |
Import a Python type or dict schema from a module. |
--input-model-ref-strategy |
Strategy for referenced types when using --input-model. |
--output |
Specify the destination path for generated Python code. |
--preset |
Apply an immutable built-in option preset. |
--schema-version |
Schema version to use for parsing. |
--schema-version-mode |
Schema version validation mode. |
--url |
Fetch schema from URL with custom HTTP headers. |
--emit-model-metadata¶
Write a separate JSON map from source schema references to the final generated models, modules, fields, and type hints.
Usage
datamodel-codegen --input schema.json --emit-model-metadata model-map.json --module-split-mode single --disable-timestamp # (1)!
-
--emit-model-metadata- the option documented here
Examples
Input Schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Root title",
"type": "object",
"properties": {
"method": {
"const": "thread/started"
},
"payload": {
"$ref": "#/$defs/MetadataPayload"
}
},
"required": ["method", "payload"],
"$defs": {
"MetadataPayload": {
"title": "Payload title",
"type": "object",
"properties": {
"id": {
"type": "integer"
}
},
"required": ["id"]
}
}
}
Output:
# generated by datamodel-codegen:
# filename: model_metadata.json
from __future__ import annotations
from typing import Literal
from pydantic import BaseModel
from . import metadata_payload
class RootTitle(BaseModel):
method: Literal['thread/started']
payload: metadata_payload.MetadataPayload
Generated metadata (model-map.json):
{
"version": 1,
"models": [
{
"class_name": "RootTitle",
"name": "RootTitle",
"module": "root_title",
"source_ref": "model_metadata.json#",
"source_path": [],
"title": "Root title",
"fields": [
{
"name": "method",
"alias": "method",
"original_name": "method",
"type": "Literal['thread/started']",
"required": true
},
{
"name": "payload",
"alias": "payload",
"original_name": "payload",
"type": "metadata_payload.MetadataPayload",
"required": true
}
]
},
{
"class_name": "MetadataPayload",
"name": "MetadataPayload",
"module": "metadata_payload",
"source_ref": "model_metadata.json#/$defs/MetadataPayload",
"source_path": [
"$defs",
"MetadataPayload"
],
"title": "Payload title",
"fields": [
{
"name": "id",
"alias": "id",
"original_name": "id",
"type": "int",
"required": true
}
]
}
]
}
--encoding¶
Specify character encoding for input and output files.
The --encoding flag sets the character encoding used when reading
the schema file and writing the generated Python code. This is useful
for schemas containing non-ASCII characters (e.g., Japanese, Chinese).
Default is UTF-8, which is the standard encoding for JSON and most modern text files.
Usage
-
--encoding- the option documented here
Examples
Input Schema:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "日本語Model",
"description": "モデルの説明文",
"type": "object",
"properties": {
"名前": {
"type": "string",
"description": "ユーザー名"
},
"年齢": {
"type": "integer"
}
}
}
Output:
--external-ref-mapping¶
Map external $ref files to Python packages.
Use --external-ref-mapping FILE_PATH=PYTHON_PACKAGE to import referenced models from an existing package,
instead of generating duplicate classes from external schema files.
Usage
datamodel-codegen --input schema.json --input-file-type openapi --external-ref-mapping common.yaml=mypackage.shared.models # (1)!
-
--external-ref-mapping- the option documented here
Examples
Input Schema:
openapi: "3.0.3"
info:
title: API
version: "1.0.0"
paths: {}
components:
schemas:
UserResponse:
type: object
properties:
user:
$ref: "common.yaml#/components/schemas/User"
request_id:
type: string
required:
- user
- request_id
ErrorResponse:
type: object
properties:
error:
$ref: "common.yaml#/components/schemas/Error"
timestamp:
type: string
format: date-time
required:
- error
- timestamp
Output:
# generated by datamodel-codegen:
# filename: api.yaml
# timestamp: 2019-07-26T00:00:00+00:00
from __future__ import annotations
from mypackage.shared.models import Error, User
from pydantic import AwareDatetime, BaseModel
class UserResponse(BaseModel):
user: User
request_id: str
class ErrorResponse(BaseModel):
error: Error
timestamp: AwareDatetime
--input¶
Specify the input schema file path.
The --input flag specifies the path to the schema file (JSON Schema,
OpenAPI, GraphQL, etc.). Multiple input files can be specified to merge
schemas. Required unless using --url to fetch schema from a URL.
Usage
-
--input- the option documented here
Examples
Input Schema:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Pet",
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"tag": {
"type": "string"
}
}
}
Output:
--input-file-type¶
Specify the input file type for code generation.
The --input-file-type flag explicitly sets the input format.
Important distinction:
- Use
jsonschema,openapi,asyncapi,graphql,mcp-tools,xmlschema,protobuf, oravrofor schema definition files - Use
json,yaml, orcsvfor raw sample data to automatically infer a schema
For example, if you have a JSON Schema written in YAML format, use --input-file-type jsonschema,
not --input-file-type yaml. The yaml type treats the file as raw data and infers a schema from it.
Usage
-
--input-file-type- the option documented here
Examples
Input Schema:
Output:
Input Schema:
Output:
--input-model¶
Import a Python type or dict schema from a module.
Use the format module:Object or path/to/file.py:Object to specify the type.
Usage
-
--input-model- the option documented here
Examples
Output:
--input-model-ref-strategy¶
Strategy for referenced types when using --input-model.
The --input-model-ref-strategy option determines whether to regenerate or import
referenced types. Use regenerate-all (default) to regenerate all types,
reuse-foreign to import types from different families (like enums when generating
dataclasses) while regenerating same-family types, or reuse-all to import all
referenced types directly.
Usage
-
--input-model-ref-strategy- the option documented here
Examples
Output:
--output¶
Specify the destination path for generated Python code.
The --output flag specifies where to write the generated Python code.
It can be either a file path (single-file output) or a directory path
(multi-file output for modular schemas). If omitted, the generated code
is written to stdout.
Usage
-
--output- the option documented here
Examples
Input Schema:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Pet",
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"tag": {
"type": "string"
}
}
}
Output:
--preset¶
Apply an immutable built-in option preset.
The standard-py312-20260619 preset enables the recommended modern Python output style for
new projects. The preset name pins generated Python syntax and backports.
Related: --target-python-version
See also: pyproject.toml Configuration
Usage
-
--preset- the option documented here
Examples
Input Schema:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Person",
"type": "object",
"properties": {
"firstName": {
"type": "string",
"description": "The person's first name."
},
"lastName": {
"type": ["string", "null"],
"description": "The person's last name."
},
"age": {
"description": "Age in years which must be equal to or greater than zero.",
"type": "integer",
"minimum": 0
},
"friends": {
"type": "array"
},
"comment": {
"type": "null"
}
}
}
Output:
# generated by datamodel-codegen:
# filename: person.json
from __future__ import annotations
from typing import Annotated, Any
from pydantic import BaseModel, ConfigDict, Field
class Person(BaseModel):
model_config = ConfigDict(
populate_by_name=True,
)
first_name: Annotated[
str | None, Field(alias='firstName', description="The person's first name.")
] = None
last_name: Annotated[
str | None, Field(alias='lastName', description="The person's last name.")
] = None
age: Annotated[
int | None,
Field(
description='Age in years which must be equal to or greater than zero.',
ge=0,
),
] = None
friends: list[Any] | None = None
comment: Annotated[None, Field(None)] = None
--schema-version¶
Schema version to use for parsing.
The --schema-version option specifies the schema version to use instead of auto-detection.
Valid values depend on input type: JsonSchema (draft-04, draft-06, draft-07, 2019-09, 2020-12)
or OpenAPI (3.0, 3.1, 3.2). Default is 'auto' (detected from $schema or openapi field).
Usage
-
--schema-version- the option documented here
Examples
Input Schema:
openapi: "3.0.0"
info:
version: 1.0.0
title: Swagger Petstore
license:
name: MIT
servers:
- url: http://petstore.swagger.io/v1
paths:
/pets:
get:
summary: List all pets
operationId: listPets
tags:
- pets
parameters:
- name: limit
in: query
description: How many items to return at one time (max 100)
required: false
schema:
type: integer
format: int32
responses:
'200':
description: A paged array of pets
headers:
x-next:
description: A link to the next page of responses
schema:
type: string
content:
application/json:
schema:
$ref: "#/components/schemas/Pets"
default:
description: unexpected error
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
x-amazon-apigateway-integration:
uri:
Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${PythonVersionFunction.Arn}/invocations
passthroughBehavior: when_no_templates
httpMethod: POST
type: aws_proxy
post:
summary: Create a pet
operationId: createPets
tags:
- pets
responses:
'201':
description: Null response
default:
description: unexpected error
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
x-amazon-apigateway-integration:
uri:
Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${PythonVersionFunction.Arn}/invocations
passthroughBehavior: when_no_templates
httpMethod: POST
type: aws_proxy
/pets/{petId}:
get:
summary: Info for a specific pet
operationId: showPetById
tags:
- pets
parameters:
- name: petId
in: path
required: true
description: The id of the pet to retrieve
schema:
type: string
responses:
'200':
description: Expected response to a valid request
content:
application/json:
schema:
$ref: "#/components/schemas/Pets"
default:
description: unexpected error
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
x-amazon-apigateway-integration:
uri:
Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${PythonVersionFunction.Arn}/invocations
passthroughBehavior: when_no_templates
httpMethod: POST
type: aws_proxy
components:
schemas:
Pet:
required:
- id
- name
properties:
id:
type: integer
format: int64
default: 1
name:
type: string
tag:
type: string
Pets:
type: array
items:
$ref: "#/components/schemas/Pet"
Users:
type: array
items:
required:
- id
- name
properties:
id:
type: integer
format: int64
name:
type: string
tag:
type: string
Id:
type: string
Rules:
type: array
items:
type: string
Error:
description: error result
required:
- code
- message
properties:
code:
type: integer
format: int32
message:
type: string
apis:
type: array
items:
type: object
properties:
apiKey:
type: string
description: To be used as a dataset parameter value
apiVersionNumber:
type: string
description: To be used as a version parameter value
apiUrl:
type: string
format: uri
description: "The URL describing the dataset's fields"
apiDocumentationUrl:
type: string
format: uri
description: A URL to the API console for each API
Event:
type: object
description: Event object
properties:
name:
type: string
Result:
type: object
properties:
event:
$ref: '#/components/schemas/Event'
Output:
Error: File not found: openapi/api.py
--schema-version-mode¶
Schema version validation mode.
The --schema-version-mode option controls how schema version validation is performed.
'lenient' (default): accept all features regardless of version.
'strict': warn on features outside the declared/detected version.
Usage
-
--schema-version-mode- the option documented here
Examples
Input Schema:
{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",
"properties": {"s": {"type": ["string"]}},
"required": ["s"]
}
Output:
--url¶
Fetch schema from URL with custom HTTP headers.
The --url flag specifies a remote URL to fetch the schema from instead of
a local file. The --http-headers flag adds custom HTTP headers to the request,
useful for authentication (e.g., Bearer tokens) or custom API requirements.
Format: HeaderName:HeaderValue.
Usage
datamodel-codegen --input schema.json --url https://api.example.com/schema.json --http-headers "Authorization:Bearer token" # (1)!
-
--url- the option documented here
Examples
Input Schema:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Pet",
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"tag": {
"type": "string"
}
}
}
Output: