# Update the WoT validation config

`PUT /devops/wot/config`

Authentication (security requirement alternatives):

```json
[
  {
    "DevOpsBasic": []
  },
  {
    "DevOpsBearer": []
  }
]
```

- DevOpsBasic: http (basic). Eclipse Ditto devops user (devops) + password (foobar)
- DevOpsBearer: http (bearer). A JSON Web Token issued by a supported OAuth 2.0 Identity Provider for the Eclipse Ditto devops user.

Request body: application/json

Type: WotValidationConfig

WoT validation configuration object.

Schema: [WotValidationConfig](https://sourcey-ditto.pages.dev/http-api-doc/models/wotvalidationconfig.md)

- `configId` (required)
  Type: string
  
  The unique ID of the config.

- `enabled` (optional)
  Type: boolean
  
  Whether WoT validation is enabled globally. Defaults to true if not specified.

- `log-warning-instead-of-failing-api-calls` (optional)
  Type: boolean

- `thing` (required)
  Reference: [ThingValidationConfig](https://sourcey-ditto.pages.dev/http-api-doc/models/thingvalidationconfig.md); Type: ThingValidationConfig
  
  Thing validation config.

- `feature` (required)
  Reference: [FeatureValidationConfig](https://sourcey-ditto.pages.dev/http-api-doc/models/featurevalidationconfig.md); Type: FeatureValidationConfig
  
  Feature validation config.

- `dynamic-config` (optional)
  Type: Array<DynamicValidationConfig>
  
  Items:
    Reference: [DynamicValidationConfig](https://sourcey-ditto.pages.dev/http-api-doc/models/dynamicvalidationconfig.md); Type: DynamicValidationConfig
    
    Dynamic config section for request/response.

- `revision` (optional)
  Type: integer, int64

- `created` (optional)
  Type: string, date-time

- `modified` (optional)
  Type: string, date-time

- `deleted` (optional)
  Type: boolean

- `metadata` (optional)
  Type: object

Responses:

- 204: Updated config

## Examples

### cURL

```bash
curl -X PUT 'https://ditto.eclipseprojects.io/devops/wot/config' \
  -H 'Authorization: Basic WU9VUl9VU0VSTkFNRTpZT1VSX1BBU1NXT1JE' \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "configId": "string",
  "enabled": true,
  "log-warning-instead-of-failing-api-calls": true,
  "thing": {
    "enforce": {
      "enforce-thing-description-modification": true,
      "attributes": true,
      "inbox-messages-input": true,
      "inbox-messages-output": true,
      "outbox-messages": true
    },
    "forbid": {
      "thing-description-deletion": true,
      "non-modeled-attributes": true,
      "non-modeled-inbox-messages": true,
      "non-modeled-outbox-messages": true
    }
  },
  "feature": {
    "enforce": {
      "featureDescriptionModification": true,
      "presenceOfModeledFeatures": true,
      "properties": true,
      "desiredProperties": true,
      "inbox-messages-input": true,
      "inbox-messages-output": true,
      "outbox-messages": true
    },
    "forbid": {
      "featureDescriptionDeletion": true,
      "nonModeledFeatures": true,
      "nonModeledProperties": true,
      "nonModeledDesiredProperties": true,
      "non-modeled-inbox-messages": true,
      "non-modeled-outbox-messages": true
    }
  },
  "dynamic-config": [
    {
      "scope-id": "string",
      "validation-context": {
        "ditto-headers-patterns": [
          {}
        ],
        "thing-definition-patterns": [
          "string"
        ],
        "feature-definition-patterns": [
          "string"
        ],
        "scope-id": "string"
      },
      "config-overrides": {
        "enabled": true,
        "log-warning-instead-of-failing-api-calls": true,
        "thing": {
          "enforce": {
            "enforce-thing-description-modification": true,
            "attributes": true,
            "inbox-messages-input": true,
            "inbox-messages-output": true,
            "outbox-messages": true
          },
          "forbid": {
            "thing-description-deletion": true,
            "non-modeled-attributes": true,
            "non-modeled-inbox-messages": true,
            "non-modeled-outbox-messages": true
          }
        },
        "feature": {
          "enforce": {
            "featureDescriptionModification": true,
            "presenceOfModeledFeatures": true,
            "properties": true,
            "desiredProperties": true,
            "inbox-messages-input": true,
            "inbox-messages-output": true,
            "outbox-messages": true
          },
          "forbid": {
            "featureDescriptionDeletion": true,
            "nonModeledFeatures": true,
            "nonModeledProperties": true,
            "nonModeledDesiredProperties": true,
            "non-modeled-inbox-messages": true,
            "non-modeled-outbox-messages": true
          }
        }
      }
    }
  ],
  "revision": 0,
  "created": "2024-01-15T09:30:00Z",
  "modified": "2024-01-15T09:30:00Z",
  "deleted": true,
  "metadata": {}
}'
```

### JavaScript

```javascript
const body = `{
  "configId": "string",
  "enabled": true,
  "log-warning-instead-of-failing-api-calls": true,
  "thing": {
    "enforce": {
      "enforce-thing-description-modification": true,
      "attributes": true,
      "inbox-messages-input": true,
      "inbox-messages-output": true,
      "outbox-messages": true
    },
    "forbid": {
      "thing-description-deletion": true,
      "non-modeled-attributes": true,
      "non-modeled-inbox-messages": true,
      "non-modeled-outbox-messages": true
    }
  },
  "feature": {
    "enforce": {
      "featureDescriptionModification": true,
      "presenceOfModeledFeatures": true,
      "properties": true,
      "desiredProperties": true,
      "inbox-messages-input": true,
      "inbox-messages-output": true,
      "outbox-messages": true
    },
    "forbid": {
      "featureDescriptionDeletion": true,
      "nonModeledFeatures": true,
      "nonModeledProperties": true,
      "nonModeledDesiredProperties": true,
      "non-modeled-inbox-messages": true,
      "non-modeled-outbox-messages": true
    }
  },
  "dynamic-config": [
    {
      "scope-id": "string",
      "validation-context": {
        "ditto-headers-patterns": [
          {}
        ],
        "thing-definition-patterns": [
          "string"
        ],
        "feature-definition-patterns": [
          "string"
        ],
        "scope-id": "string"
      },
      "config-overrides": {
        "enabled": true,
        "log-warning-instead-of-failing-api-calls": true,
        "thing": {
          "enforce": {
            "enforce-thing-description-modification": true,
            "attributes": true,
            "inbox-messages-input": true,
            "inbox-messages-output": true,
            "outbox-messages": true
          },
          "forbid": {
            "thing-description-deletion": true,
            "non-modeled-attributes": true,
            "non-modeled-inbox-messages": true,
            "non-modeled-outbox-messages": true
          }
        },
        "feature": {
          "enforce": {
            "featureDescriptionModification": true,
            "presenceOfModeledFeatures": true,
            "properties": true,
            "desiredProperties": true,
            "inbox-messages-input": true,
            "inbox-messages-output": true,
            "outbox-messages": true
          },
          "forbid": {
            "featureDescriptionDeletion": true,
            "nonModeledFeatures": true,
            "nonModeledProperties": true,
            "nonModeledDesiredProperties": true,
            "non-modeled-inbox-messages": true,
            "non-modeled-outbox-messages": true
          }
        }
      }
    }
  ],
  "revision": 0,
  "created": "2024-01-15T09:30:00Z",
  "modified": "2024-01-15T09:30:00Z",
  "deleted": true,
  "metadata": {}
}`;

const response = await fetch('https://ditto.eclipseprojects.io/devops/wot/config', {
  method: 'PUT',
  headers: {
    'Authorization': 'Basic WU9VUl9VU0VSTkFNRTpZT1VSX1BBU1NXT1JE',
    'Content-Type': 'application/json',
  },
  body,
});

const data = await response.text();
```

### Python

```python
import requests

body = '''{
  "configId": "string",
  "enabled": true,
  "log-warning-instead-of-failing-api-calls": true,
  "thing": {
    "enforce": {
      "enforce-thing-description-modification": true,
      "attributes": true,
      "inbox-messages-input": true,
      "inbox-messages-output": true,
      "outbox-messages": true
    },
    "forbid": {
      "thing-description-deletion": true,
      "non-modeled-attributes": true,
      "non-modeled-inbox-messages": true,
      "non-modeled-outbox-messages": true
    }
  },
  "feature": {
    "enforce": {
      "featureDescriptionModification": true,
      "presenceOfModeledFeatures": true,
      "properties": true,
      "desiredProperties": true,
      "inbox-messages-input": true,
      "inbox-messages-output": true,
      "outbox-messages": true
    },
    "forbid": {
      "featureDescriptionDeletion": true,
      "nonModeledFeatures": true,
      "nonModeledProperties": true,
      "nonModeledDesiredProperties": true,
      "non-modeled-inbox-messages": true,
      "non-modeled-outbox-messages": true
    }
  },
  "dynamic-config": [
    {
      "scope-id": "string",
      "validation-context": {
        "ditto-headers-patterns": [
          {}
        ],
        "thing-definition-patterns": [
          "string"
        ],
        "feature-definition-patterns": [
          "string"
        ],
        "scope-id": "string"
      },
      "config-overrides": {
        "enabled": true,
        "log-warning-instead-of-failing-api-calls": true,
        "thing": {
          "enforce": {
            "enforce-thing-description-modification": true,
            "attributes": true,
            "inbox-messages-input": true,
            "inbox-messages-output": true,
            "outbox-messages": true
          },
          "forbid": {
            "thing-description-deletion": true,
            "non-modeled-attributes": true,
            "non-modeled-inbox-messages": true,
            "non-modeled-outbox-messages": true
          }
        },
        "feature": {
          "enforce": {
            "featureDescriptionModification": true,
            "presenceOfModeledFeatures": true,
            "properties": true,
            "desiredProperties": true,
            "inbox-messages-input": true,
            "inbox-messages-output": true,
            "outbox-messages": true
          },
          "forbid": {
            "featureDescriptionDeletion": true,
            "nonModeledFeatures": true,
            "nonModeledProperties": true,
            "nonModeledDesiredProperties": true,
            "non-modeled-inbox-messages": true,
            "non-modeled-outbox-messages": true
          }
        }
      }
    }
  ],
  "revision": 0,
  "created": "2024-01-15T09:30:00Z",
  "modified": "2024-01-15T09:30:00Z",
  "deleted": true,
  "metadata": {}
}'''

response = requests.put(
    'https://ditto.eclipseprojects.io/devops/wot/config',
    data=body.encode('utf-8'),
    headers={
        'Authorization': 'Basic WU9VUl9VU0VSTkFNRTpZT1VSX1BBU1NXT1JE',
        'Content-Type': 'application/json',
    },
)
print(response.text)
```
