Speakeasy Terraform Provider Support Matrix

Provider Components

Provider ComponentsSpeakeasy ExtensionSpeakeasy GenerationFull Docs
Resource Schemasx-speakeasy-entity-operation: MyEntity#createHoists and merges JSON schemas associated with all create, read, update, and delete operations appropriately.Docs Link
Data Source Schemasx-speakeasy-entity-operation: MyEntity#readHoists and merges JSON schemas associated with all read operations into a single data source.Docs Link
Create Methodsx-speakeasy-entity-operation: MyEntity#createSpeakeasy generates platform connector logic to invoke all API requests and save responses to the Terraform state.Docs Link
Read Methodsx-speakeasy-entity-operation: MyEntity#readSpeakeasy generates platform connector logic to invoke all API requests and save responses to the Terraform state. Also invoked in CREATE and UPDATE methods for additional data calls, enabling drift detection and import.Docs Link
Update Methodsx-speakeasy-entity-operation: MyEntity#updateSpeakeasy generates platform connector logic to invoke all API requests and save responses to the Terraform state. Plan modifiers force resource recreation when needed.Docs Link (opens in a new tab)
Delete Methodsx-speakeasy-entity-operation: MyEntity#deleteSpeakeasy generates platform connector logic to invoke all API requests and save responses to the Terraform state.Docs Link
Plan Validatorsx-speakeasy-plan-validatorsGenerated when using restricted OpenAPI data types (e.g., JSON fields, date fields, etc.). Also generated for specific Speakeasy extensions.Docs Link
Plan Modifiersx-speakeasy-plan-modifiersEnsures API and terraform state/terraform plan commands have appropriate semantics, such as diff-detection (opens in a new tab).Docs Link
Resource Importsn/aEach resource will be inserted into the provider resource list.Docs Link

Supported OpenAPI Semantics

Supported OpenAPI Semantics

OpenAPI SemanticsSpeakeasy SupportComments / Limitations
Resource Schemas (const)✅ Full supportWhen an attribute in an OpenAPI specification is specified as const, it is removed from a Terraform schema and always sent in the request or assumed in the response.
Resource Schemas (default)✅ Full supportWhen an attribute specifies a default value, this value will be used whenever that attribute is not explicitly set, ensuring consistency and reliability.
Server Configuration✅ Full supportA server_url variable is available in the provider to enable it to be invoked against any API server, defaulted to the first entry in the servers field of your OpenAPI specification.
Global Authentication✅ Full supportEvery authentication mechanism that relies on static authorization is supported with its values automatically available to be configured in the provider configuration. For OAuth, a custom hook containing your authentication flow logic needs to be written.
Query Parameter Serialization✅ Full supportAll query parameter attributes will be available as resource or data source attributes in a Terraform-native form. Might require remapping through x-speakeasy-match.
Request Headers✅ Full supportAll request attributes will be available as resource or data source attributes in a Terraform-native form.
Multiple API Requests in One CRUD Step✅ Full supportFor example, create requires two API calls.
JSON Schema type: string✅ Full support
JSON Schema type: number✅ Full support
JSON Schema type: integer✅ Full support
JSON Schema type: boolean✅ Full support
JSON Schema type: object✅ Full support
JSON Schema type: null✅ Full support
JSON Schema required: [requiredPropertyA, ...]✅ Full supportCombined into Required or Optional Terraform attribute modifiers.
JSON Schema enum: [...values...]✅ Full supportA plan validator is added to assert that only one of the predefined values is set.
JSON Schema type: array✅ Full support
JSON Schema type: array, minItems: N✅ Full supportA plan validator is added to ensure the Terraform ListAttribute has N items set.
JSON Schema type: array, maxItems: J✅ Full supportA plan validator is added to ensure the Terraform ListAttribute has J items set.
JSON Schema type: array, uniqueItems: true✅ Full supportA plan validator is added to ensure the Terraform ListAttribute has all items as unique values.
JSON Schema type: number, format: float✅ Full support
JSON Schema type: number, format: double✅ Full support
JSON Schema type: integer, format: int32✅ Full support
JSON Schema type: integer, format: int64✅ Full support
JSON Schema type: string, format: date✅ Full supportA plan validator is added to ensure that this string value is set to a date in the YYYY-MM-DD format.
JSON Schema type: string, format: date-time✅ Full supportA plan validator is added to ensure that this string value is RFC 3339-compatible.
JSON Schema format: binary✅ Full supportAccessible as a string attribute.
JSON Schema nullable: true✅ Full supportCombined into Required or Optional Terraform attribute modifiers.
JSON Schema additionalProperties: true✅ Full supportA free-form object without additionalProperties: true is treated as an empty object.
JSON Schema additionalProperties: ${JSON Schema}✅ Full supportFull support for defining schemas for additional properties.
JSON Schema oneOf: [${JSON Schema}, ...]✅ Full supportRepresented as a nested object with one child attribute for each oneOf subschema. A plan validator is added that asserts only one child attribute can be set.
JSON Schema anyOf: [${JSON Schema}, ...]✅ Full supportConsidered the same as oneOf.
JSON Schema allOf: [${JSON Schema}, ...]✅ Full supportConstructs an “uber-type” by merging the superset of all subschemas.
JSON Schema “Any” Type✅ Full supportRequires the x-speakeasy-type-override: any annotation. Used as an escape hatch.
OpenAPI readOnly: true✅ Full support
OpenAPI writeOnly: true✅ Full support
Example Generation✅ Full supportPropagates example and examples into generated Terraform resource examples. Uses a type-appropriate value for other cases.
Operation-Specific Authentication⚠️ Partial supportSpeakeasy doesn’t support overriding global authentication on specific operations without advanced techniques like monkey patching.
label / matrix Path Param Serialization⚠️ No supportRemapping may be required through x-speakeasy-match.
XML Request Body Serialization⚠️ Partial supportFull support for JSON data types but no support for XML.
XML Response Body Deserialization⚠️ Partial supportFull support for JSON data types but no support for XML response bodies.
Circular References⚠️ Partial supportx-speakeasy-type-override: any enables setting attributes with jsonencode(...arbitrary data...).
Lists of Lists of Primitives⚠️ Partial supportx-speakeasy-type-override: any enables setting lists of lists, but Terraform’s ListAttribute only supports primitive types.

Terraform Framework Types From JSON Schema Types

JSON Schema TypeJSON Schema AdditionsTerraform Framework TypeNotes
type: string-schema.StringAttribute
type: number-schema.NumberAttribute
type: integer-schema.Int64Attribute
type: boolean-schema.BoolAttribute
type: array-schema.ListAttribute or schema.ListNestedAttributeA ListAttribute is used when the items has primitive type.
type: arrayformat: setschema.SetAttribute or schema.SetNestedAttributeA SetAttribute is used when the items has primitive type.
type: objectproperties: {...}schema.SingleNestedAttribute
type: objectadditionalProperties: {...}schema.MapAttribute or schema.MapNestedAttributeA MapAttribute is used when the additionalProperties has primitive type.
type: nullN/AElement ignored

JSON Schema Subschema Handling

JSON Schema Subschema TypeHandlingFull Docs
oneOfA schema.SingleNestedAttribute is created with one key for each oneOf child. Plan validator ensures that only one subattribute is used.Docs Link
anyOfConsidered the same as oneOf. Speakeasy does not strictly enforce this subschema type in production environments.Docs Link
allOfMerges all subschemas. When the subschemas are objects, it creates a composite object with properties from all child schemas.Docs Link