:doc:`SFN <../../stepfunctions>` / Client / validate_state_machine_definition

*********************************
validate_state_machine_definition
*********************************



.. py:method:: SFN.Client.validate_state_machine_definition(**kwargs)

  

  Validates the syntax of a state machine definition specified in `Amazon States Language <https://docs.aws.amazon.com/step-functions/latest/dg/concepts-amazon-states-language.html>`__ (ASL), a JSON-based, structured language.

   

  You can validate that a state machine definition is correct without creating a state machine resource.

   

  Suggested uses for ``ValidateStateMachineDefinition``:

   

  
  * Integrate automated checks into your code review or Continuous Integration (CI) process to check state machine definitions before starting deployments.
   
  * Run validation from a Git pre-commit hook to verify the definition before committing to your source repository.
  

   

  Validation will look for problems in your state machine definition and return a **result** and a list of **diagnostic elements**.

   

  The **result** value will be ``OK`` when your workflow definition can be successfully created or updated. Note the result can be ``OK`` even when diagnostic warnings are present in the response. The **result** value will be ``FAIL`` when the workflow definition contains errors that would prevent you from creating or updating your state machine.

   

  The list of `ValidateStateMachineDefinitionDiagnostic <https://docs.aws.amazon.com/step-functions/latest/apireference/API_ValidateStateMachineDefinitionDiagnostic.html>`__ data elements can contain zero or more **WARNING** and/or **ERROR** elements.

   

  .. note::

    

    The **ValidateStateMachineDefinition API** might add new diagnostics in the future, adjust diagnostic codes, or change the message wording. Your automated processes should only rely on the value of the **result** field value (OK, FAIL). Do **not** rely on the exact order, count, or wording of diagnostic messages.

    

  

  See also: `AWS API Documentation <https://docs.aws.amazon.com/goto/WebAPI/states-2016-11-23/ValidateStateMachineDefinition>`_  


  **Request Syntax**
  ::

    response = client.validate_state_machine_definition(
        definition='string',
        type='STANDARD'|'EXPRESS',
        severity='ERROR'|'WARNING',
        maxResults=123
    )
    
  :type definition: string
  :param definition: **[REQUIRED]** 

    The Amazon States Language definition of the state machine. For more information, see `Amazon States Language <https://docs.aws.amazon.com/step-functions/latest/dg/concepts-amazon-states-language.html>`__ (ASL).

    

  
  :type type: string
  :param type: 

    The target type of state machine for this definition. The default is ``STANDARD``.

    

  
  :type severity: string
  :param severity: 

    Minimum level of diagnostics to return. ``ERROR`` returns only ``ERROR`` diagnostics, whereas ``WARNING`` returns both ``WARNING`` and ``ERROR`` diagnostics. The default is ``ERROR``.

    

  
  :type maxResults: integer
  :param maxResults: 

    The maximum number of diagnostics that are returned per call. The default and maximum value is 100. Setting the value to 0 will also use the default of 100.

     

    If the number of diagnostics returned in the response exceeds ``maxResults``, the value of the ``truncated`` field in the response will be set to ``true``.

    

  
  
  :rtype: dict
  :returns: 
    
    **Response Syntax**

    
    ::

      {
          'result': 'OK'|'FAIL',
          'diagnostics': [
              {
                  'severity': 'ERROR'|'WARNING',
                  'code': 'string',
                  'message': 'string',
                  'location': 'string'
              },
          ],
          'truncated': True|False
      }
      
    **Response Structure**

    

    - *(dict) --* 
      

      - **result** *(string) --* 

        The result value will be ``OK`` when no syntax errors are found, or ``FAIL`` if the workflow definition does not pass verification.

        
      

      - **diagnostics** *(list) --* 

        An array of diagnostic errors and warnings found during validation of the state machine definition. Since **warnings** do not prevent deploying your workflow definition, the **result** value could be ``OK`` even when warning diagnostics are present in the response.

        
        

        - *(dict) --* 

          Describes potential issues found during state machine validation. Rather than raise an exception, validation will return a list of **diagnostic elements** containing diagnostic information.

           

          .. note::

            

            The `ValidateStateMachineDefinitionlAPI <https://docs.aws.amazon.com/step-functions/latest/apireference/API_ValidateStateMachineDefinition.html>`__ might add new diagnostics in the future, adjust diagnostic codes, or change the message wording. Your automated processes should only rely on the value of the **result** field value (OK, FAIL). Do **not** rely on the exact order, count, or wording of diagnostic messages.

            

           

          **List of warning codes**

            NO_DOLLAR  

          No ``.$`` on a field that appears to be a JSONPath or Intrinsic Function.

            NO_PATH  

          Field value looks like a path, but field name does not end with 'Path'.

            PASS_RESULT_IS_STATIC  

          Attempt to use a path in the result of a pass state.

             

          **List of error codes**

            INVALID_JSON_DESCRIPTION  

          JSON syntax problem found.

            MISSING_DESCRIPTION  

          Received a null or empty workflow input.

            SCHEMA_VALIDATION_FAILED  

          Schema validation reported errors.

            INVALID_RESOURCE  

          The value of a Task-state resource field is invalid.

            MISSING_END_STATE  

          The workflow does not have a terminal state.

            DUPLICATE_STATE_NAME  

          The same state name appears more than once.

            INVALID_STATE_NAME  

          The state name does not follow the naming convention.

            STATE_MACHINE_NAME_EMPTY  

          The state machine name has not been specified.

            STATE_MACHINE_NAME_INVALID  

          The state machine name does not follow the naming convention.

            STATE_MACHINE_NAME_TOO_LONG  

          The state name exceeds the allowed length.

            STATE_MACHINE_NAME_ALREADY_EXISTS  

          The state name already exists.

            DUPLICATE_LABEL_NAME  

          A label name appears more than once.

            INVALID_LABEL_NAME  

          You have provided an invalid label name.

            MISSING_TRANSITION_TARGET  

          The value of "Next" field doesn't match a known state name.

            TOO_DEEPLY_NESTED  

          The states are too deeply nested.

          
          

          - **severity** *(string) --* 

            A value of ``ERROR`` means that you cannot create or update a state machine with this definition.

             

            ``WARNING`` level diagnostics alert you to potential issues, but they will not prevent you from creating or updating your state machine.

            
          

          - **code** *(string) --* 

            Identifying code for the diagnostic.

            
          

          - **message** *(string) --* 

            Message describing the diagnostic condition.

            
          

          - **location** *(string) --* 

            Location of the issue in the state machine, if available.

             

            For errors specific to a field, the location could be in the format: ``/States/<StateName>/<FieldName>``, for example: ``/States/FailState/ErrorPath``.

            
      
    
      

      - **truncated** *(boolean) --* 

        The result value will be ``true`` if the number of diagnostics found in the workflow definition exceeds ``maxResults``. When all diagnostics results are returned, the value will be ``false``.

        
  
  **Exceptions**
  
  *   :py:class:`SFN.Client.exceptions.ValidationException`

  