# ExpiresAt


## Properties

Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------

## Example

```python
from airflow_client.client.models.expires_at import ExpiresAt

# TODO update the JSON string below
json = "{}"
# create an instance of ExpiresAt from a JSON string
expires_at_instance = ExpiresAt.from_json(json)
# print the JSON string representation of the object
print(ExpiresAt.to_json())

# convert the object into a dict
expires_at_dict = expires_at_instance.to_dict()
# create an instance of ExpiresAt from a dict
expires_at_from_dict = ExpiresAt.from_dict(expires_at_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)


