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
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 (for example, JSON fields, date fields). Also generated for specific Speakeasy extensions.Docs link
Plan modifiersx-speakeasy-plan-modifiersEnsures API and terraform state and terraform plan commands have appropriate semantics, such as diff-detection.Docs link
Resource importsn/aEach resource will be inserted into the provider resource list.Docs link

Supported OpenAPI semantics

OpenAPI semanticsSpeakeasy supportComments & limitations
Resource schemas (const)✅ Full supportWhen an attribute in an OpenAPI document is specified as const, it is removed from a Terraform schema and automatically included in requests or assumed in responses.
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 supportThe provider includes a server_url variable, allowing it to be used with any API server. By default, this variable is set to the first entry in the servers field of your OpenAPI document.
Global authentication✅ Full supportAll authentication mechanisms that rely on static authorization are supported, with their values automatically configurable in the provider settings. For OAuth, you need to write a custom hook that implements your authentication flow logic.
Query parameter serialization✅ Full supportAll query parameter attributes will be available as resource or data source attributes in a Terraform-native format. 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 format.
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 or 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 items has the primitive type.
type: arrayformat: setschema.SetAttribute or schema.SetNestedAttributeA SetAttribute is used when items has the primitive type.
type: objectproperties: {...}schema.SingleNestedAttribute
type: objectadditionalProperties: {...}schema.MapAttribute or schema.MapNestedAttributeA MapAttribute is used when additionalProperties has the 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