# Models

## The ConfigResponse object

```json
{"openapi":"3.1.0","info":{"title":"Users API - Public Endpoints","version":"1.0.0"},"components":{"schemas":{"ConfigResponse":{"type":"object","description":"Storefront configuration payload","required":["active_currency","available_currencies","country","user_phone_regex","user_phone_format"],"properties":{"active_currency":{"type":"string","description":"ISO currency code currently active for the session"},"available_currencies":{"type":"array","description":"Currency codes enabled for the storefront","items":{"type":"string"}},"country":{"$ref":"#/components/schemas/Country"},"user_phone_regex":{"type":"string","description":"Regular expression used for phone validation"},"user_phone_format":{"type":"string","description":"Suggested phone format for UI display"}}},"Country":{"type":"object","description":"Country metadata extracted from dynamic settings","required":["pk","name","code"],"properties":{"pk":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"}}}}}}
```

## The Country object

```json
{"openapi":"3.1.0","info":{"title":"Users API - Public Endpoints","version":"1.0.0"},"components":{"schemas":{"Country":{"type":"object","description":"Country metadata extracted from dynamic settings","required":["pk","name","code"],"properties":{"pk":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"}}}}}}
```

## The EmailSubscriptionRequest object

```json
{"openapi":"3.1.0","info":{"title":"Users API - Public Endpoints","version":"1.0.0"},"components":{"schemas":{"EmailSubscriptionRequest":{"type":"object","description":"Input payload for marketing subscriptions","required":["email"],"properties":{"email":{"type":"string","format":"email"},"first_name":{"anyOf":[{"type":"string","maxLength":50}]},"last_name":{"anyOf":[{"type":"string","maxLength":50}]},"gender":{"anyOf":[{"type":"string"}],"description":"Value from `omnicore.users.enums.GenderType`"}}}}}}
```

## The GoogleLoginTokenRequest object

```json
{"openapi":"3.1.0","info":{"title":"Users API - Public Endpoints","version":"1.0.0"},"components":{"schemas":{"GoogleLoginTokenRequest":{"type":"object","description":"JSON payload forwarded to Google token verifier","required":["access_token"],"properties":{"access_token":{"type":"string","description":"OAuth access token issued by Google"}}}}}}
```

## The SetLanguageRequest object

```json
{"openapi":"3.1.0","info":{"title":"Users API - Public Endpoints","version":"1.0.0"},"components":{"schemas":{"SetLanguageRequest":{"type":"object","description":"Form payload used by `set_language`","required":["language"],"properties":{"language":{"type":"string","description":"Language code defined in Django `LANGUAGES`"},"next":{"anyOf":[{"type":"string"}],"description":"Optional redirect path after switching language"}}}}}}
```

## The LanguageListResponse object

```json
{"openapi":"3.1.0","info":{"title":"Users API - Public Endpoints","version":"1.0.0"},"components":{"schemas":{"LanguageListResponse":{"type":"object","description":"Available language information","required":["active_language","default_language","available_languages"],"properties":{"active_language":{"type":"string","description":"Language currently active in session"},"default_language":{"type":"string","description":"Project default language"},"available_languages":{"type":"object","description":"Mapping of language code to human-readable name","additionalProperties":{"type":"string"}}}}}}}
```

## The PaginatedConversationList object

```json
{"openapi":"3.1.0","info":{"title":"Users API - Public Endpoints","version":"1.0.0"},"components":{"schemas":{"PaginatedConversationList":{"type":"object","description":"Standard paginated response returned by conversation listings","required":["count","results"],"properties":{"count":{"type":"integer"},"next":{"type":"string","format":"uri"},"previous":{"type":"string","format":"uri"},"results":{"type":"array","items":{"$ref":"#/components/schemas/Conversation"}}}},"Conversation":{"type":"object","description":"Conversation (question or review) resource","required":["id","user","message_set","conversation_type","is_public","is_answered"],"properties":{"id":{"type":"integer"},"subject":{"type":"string"},"user":{"$ref":"#/components/schemas/UserSummary"},"datasource":{"$ref":"#/components/schemas/DataSourceSummary"},"item_object":{"$ref":"#/components/schemas/ConversationItem"},"item_content":{"type":"string","description":"Content type label for the attached object"},"message_set":{"type":"array","items":{"$ref":"#/components/schemas/ConversationMessage"}},"conversation_type":{"type":"string"},"last_message_date":{"type":"string","format":"date-time"},"is_public":{"type":"boolean"},"is_answered":{"type":"boolean"}}},"UserSummary":{"type":"object","description":"Minimal user information exposed publicly","required":["id","first_name","last_name","email"],"properties":{"id":{"type":"integer"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"gender":{"type":"string"}}},"DataSourceSummary":{"type":"object","description":"Product datasource metadata (nullable)","required":["pk","name"],"properties":{"pk":{"type":"integer"},"name":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"supplier_code":{"type":"string"},"email":{"type":"string","format":"email"},"phone_number":{"type":"string"},"is_active":{"type":"boolean"}}},"ConversationItem":{"anyOf":[{"$ref":"#/components/schemas/ConversationProduct"},{"$ref":"#/components/schemas/ConversationOrderItem"}]},"ConversationProduct":{"type":"object","description":"Product representation included in conversations","required":["pk","name","sku"],"properties":{"pk":{"type":"integer"},"name":{"type":"string"},"sku":{"type":"string"},"absolute_url":{"type":"string","format":"uri"},"product_images":{"type":"array","items":{"$ref":"#/components/schemas/ConversationProductImage"}}}},"ConversationProductImage":{"type":"object","description":"Product image embedded within a conversation context","required":["pk","product","image"],"properties":{"pk":{"type":"integer"},"product":{"type":"integer"},"image":{"type":"string","format":"uri"},"order":{"type":"integer"},"image_path":{"type":"string"},"height":{"type":"integer"},"width":{"type":"integer"}}},"ConversationOrderItem":{"type":"object","description":"Order item wrapper when item_content is an order","required":["pk","status","order_number","product"],"properties":{"pk":{"type":"integer"},"product":{"$ref":"#/components/schemas/ConversationProduct"},"status":{"type":"string"},"order_number":{"type":"string"}}},"ConversationMessage":{"type":"object","description":"Message belonging to a conversation","required":["id","message_content","user_type","content_object","content_type","created_date"],"properties":{"id":{"type":"integer"},"message_content":{"type":"string"},"user_type":{"type":"string","description":"Enumeration from `omnicore.users.enums.UserType`"},"content_object":{"type":"object","additionalProperties":true},"content_type":{"type":"string"},"created_date":{"type":"string","format":"date-time"}}}}}}
```

## The Conversation object

```json
{"openapi":"3.1.0","info":{"title":"Users API - Public Endpoints","version":"1.0.0"},"components":{"schemas":{"Conversation":{"type":"object","description":"Conversation (question or review) resource","required":["id","user","message_set","conversation_type","is_public","is_answered"],"properties":{"id":{"type":"integer"},"subject":{"type":"string"},"user":{"$ref":"#/components/schemas/UserSummary"},"datasource":{"$ref":"#/components/schemas/DataSourceSummary"},"item_object":{"$ref":"#/components/schemas/ConversationItem"},"item_content":{"type":"string","description":"Content type label for the attached object"},"message_set":{"type":"array","items":{"$ref":"#/components/schemas/ConversationMessage"}},"conversation_type":{"type":"string"},"last_message_date":{"type":"string","format":"date-time"},"is_public":{"type":"boolean"},"is_answered":{"type":"boolean"}}},"UserSummary":{"type":"object","description":"Minimal user information exposed publicly","required":["id","first_name","last_name","email"],"properties":{"id":{"type":"integer"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"gender":{"type":"string"}}},"DataSourceSummary":{"type":"object","description":"Product datasource metadata (nullable)","required":["pk","name"],"properties":{"pk":{"type":"integer"},"name":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"supplier_code":{"type":"string"},"email":{"type":"string","format":"email"},"phone_number":{"type":"string"},"is_active":{"type":"boolean"}}},"ConversationItem":{"anyOf":[{"$ref":"#/components/schemas/ConversationProduct"},{"$ref":"#/components/schemas/ConversationOrderItem"}]},"ConversationProduct":{"type":"object","description":"Product representation included in conversations","required":["pk","name","sku"],"properties":{"pk":{"type":"integer"},"name":{"type":"string"},"sku":{"type":"string"},"absolute_url":{"type":"string","format":"uri"},"product_images":{"type":"array","items":{"$ref":"#/components/schemas/ConversationProductImage"}}}},"ConversationProductImage":{"type":"object","description":"Product image embedded within a conversation context","required":["pk","product","image"],"properties":{"pk":{"type":"integer"},"product":{"type":"integer"},"image":{"type":"string","format":"uri"},"order":{"type":"integer"},"image_path":{"type":"string"},"height":{"type":"integer"},"width":{"type":"integer"}}},"ConversationOrderItem":{"type":"object","description":"Order item wrapper when item_content is an order","required":["pk","status","order_number","product"],"properties":{"pk":{"type":"integer"},"product":{"$ref":"#/components/schemas/ConversationProduct"},"status":{"type":"string"},"order_number":{"type":"string"}}},"ConversationMessage":{"type":"object","description":"Message belonging to a conversation","required":["id","message_content","user_type","content_object","content_type","created_date"],"properties":{"id":{"type":"integer"},"message_content":{"type":"string"},"user_type":{"type":"string","description":"Enumeration from `omnicore.users.enums.UserType`"},"content_object":{"type":"object","additionalProperties":true},"content_type":{"type":"string"},"created_date":{"type":"string","format":"date-time"}}}}}}
```

## The UserSummary object

```json
{"openapi":"3.1.0","info":{"title":"Users API - Public Endpoints","version":"1.0.0"},"components":{"schemas":{"UserSummary":{"type":"object","description":"Minimal user information exposed publicly","required":["id","first_name","last_name","email"],"properties":{"id":{"type":"integer"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"gender":{"type":"string"}}}}}}
```

## The DataSourceSummary object

```json
{"openapi":"3.1.0","info":{"title":"Users API - Public Endpoints","version":"1.0.0"},"components":{"schemas":{"DataSourceSummary":{"type":"object","description":"Product datasource metadata (nullable)","required":["pk","name"],"properties":{"pk":{"type":"integer"},"name":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"supplier_code":{"type":"string"},"email":{"type":"string","format":"email"},"phone_number":{"type":"string"},"is_active":{"type":"boolean"}}}}}}
```

## The ConversationItem object

```json
{"openapi":"3.1.0","info":{"title":"Users API - Public Endpoints","version":"1.0.0"},"components":{"schemas":{"ConversationItem":{"anyOf":[{"$ref":"#/components/schemas/ConversationProduct"},{"$ref":"#/components/schemas/ConversationOrderItem"}]},"ConversationProduct":{"type":"object","description":"Product representation included in conversations","required":["pk","name","sku"],"properties":{"pk":{"type":"integer"},"name":{"type":"string"},"sku":{"type":"string"},"absolute_url":{"type":"string","format":"uri"},"product_images":{"type":"array","items":{"$ref":"#/components/schemas/ConversationProductImage"}}}},"ConversationProductImage":{"type":"object","description":"Product image embedded within a conversation context","required":["pk","product","image"],"properties":{"pk":{"type":"integer"},"product":{"type":"integer"},"image":{"type":"string","format":"uri"},"order":{"type":"integer"},"image_path":{"type":"string"},"height":{"type":"integer"},"width":{"type":"integer"}}},"ConversationOrderItem":{"type":"object","description":"Order item wrapper when item_content is an order","required":["pk","status","order_number","product"],"properties":{"pk":{"type":"integer"},"product":{"$ref":"#/components/schemas/ConversationProduct"},"status":{"type":"string"},"order_number":{"type":"string"}}}}}}
```

## The ConversationProduct object

```json
{"openapi":"3.1.0","info":{"title":"Users API - Public Endpoints","version":"1.0.0"},"components":{"schemas":{"ConversationProduct":{"type":"object","description":"Product representation included in conversations","required":["pk","name","sku"],"properties":{"pk":{"type":"integer"},"name":{"type":"string"},"sku":{"type":"string"},"absolute_url":{"type":"string","format":"uri"},"product_images":{"type":"array","items":{"$ref":"#/components/schemas/ConversationProductImage"}}}},"ConversationProductImage":{"type":"object","description":"Product image embedded within a conversation context","required":["pk","product","image"],"properties":{"pk":{"type":"integer"},"product":{"type":"integer"},"image":{"type":"string","format":"uri"},"order":{"type":"integer"},"image_path":{"type":"string"},"height":{"type":"integer"},"width":{"type":"integer"}}}}}}
```

## The ConversationOrderItem object

```json
{"openapi":"3.1.0","info":{"title":"Users API - Public Endpoints","version":"1.0.0"},"components":{"schemas":{"ConversationOrderItem":{"type":"object","description":"Order item wrapper when item_content is an order","required":["pk","status","order_number","product"],"properties":{"pk":{"type":"integer"},"product":{"$ref":"#/components/schemas/ConversationProduct"},"status":{"type":"string"},"order_number":{"type":"string"}}},"ConversationProduct":{"type":"object","description":"Product representation included in conversations","required":["pk","name","sku"],"properties":{"pk":{"type":"integer"},"name":{"type":"string"},"sku":{"type":"string"},"absolute_url":{"type":"string","format":"uri"},"product_images":{"type":"array","items":{"$ref":"#/components/schemas/ConversationProductImage"}}}},"ConversationProductImage":{"type":"object","description":"Product image embedded within a conversation context","required":["pk","product","image"],"properties":{"pk":{"type":"integer"},"product":{"type":"integer"},"image":{"type":"string","format":"uri"},"order":{"type":"integer"},"image_path":{"type":"string"},"height":{"type":"integer"},"width":{"type":"integer"}}}}}}
```

## The ConversationProductImage object

```json
{"openapi":"3.1.0","info":{"title":"Users API - Public Endpoints","version":"1.0.0"},"components":{"schemas":{"ConversationProductImage":{"type":"object","description":"Product image embedded within a conversation context","required":["pk","product","image"],"properties":{"pk":{"type":"integer"},"product":{"type":"integer"},"image":{"type":"string","format":"uri"},"order":{"type":"integer"},"image_path":{"type":"string"},"height":{"type":"integer"},"width":{"type":"integer"}}}}}}
```

## The ConversationMessage object

```json
{"openapi":"3.1.0","info":{"title":"Users API - Public Endpoints","version":"1.0.0"},"components":{"schemas":{"ConversationMessage":{"type":"object","description":"Message belonging to a conversation","required":["id","message_content","user_type","content_object","content_type","created_date"],"properties":{"id":{"type":"integer"},"message_content":{"type":"string"},"user_type":{"type":"string","description":"Enumeration from `omnicore.users.enums.UserType`"},"content_object":{"type":"object","additionalProperties":true},"content_type":{"type":"string"},"created_date":{"type":"string","format":"date-time"}}}}}}
```

## The ErrorResponse object

```json
{"openapi":"3.1.0","info":{"title":"Users API - Public Endpoints","version":"1.0.0"},"components":{"schemas":{"ErrorResponse":{"type":"object","description":"Generic error payload","required":["detail"],"properties":{"detail":{"type":"string"},"code":{"type":"string"}}}}}}
```

## The ValidationErrorResponse object

```json
{"openapi":"3.1.0","info":{"title":"Users API - Public Endpoints","version":"1.0.0"},"components":{"schemas":{"ValidationErrorResponse":{"type":"object","description":"Validation error structure returned by DRF","additionalProperties":{"type":"array","items":{"type":"string"}}}}}}
```
