{"openapi":"3.1.0","info":{"title":"Shopxare REST API","version":"1.0.0","description":"Read and work with your workspace's conversations, contacts and events from your own systems.\n\nCreate a token in **Settings \u2192 API** (needs the *developer* permission). A token acts as the teammate who created it: it can do only what that teammate may do, and only within its scopes. Requests are limited per token per minute by your package; see the `X-RateLimit-Limit` and `X-RateLimit-Remaining` headers. Errors always look like `{\"error\": {\"code\": \"\u2026\", \"message\": \"\u2026\"}}`."},"servers":[{"url":"https://app.shopxare.com/api/v1"}],"security":[{"bearer":[]}],"tags":[{"name":"Token","description":"The token in use."},{"name":"Conversations","description":"Messenger, email and Telegram conversations and tickets."},{"name":"Contacts","description":"People: leads and identified users, their attributes and events."},{"name":"Workspace","description":"Teammates, teams and tags, for ids used elsewhere."}],"paths":{"/me":{"get":{"tags":["Token"],"summary":"Who am I","operationId":"getMe","description":"The token, its scopes, workspace and teammate. Works with any scope.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/conversations":{"get":{"tags":["Conversations"],"summary":"List conversations","operationId":"listConversations","security":[{"bearer":["conversations:read"]}],"description":"Newest activity first.","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["open","snoozed","closed"]},"description":"Filter by status."},{"name":"channel","in":"query","required":false,"schema":{"type":"string","enum":["widget","email","telegram"]},"description":"Filter by channel."},{"name":"kind","in":"query","required":false,"schema":{"type":"string","enum":["conversation","ticket"]},"description":"Conversations or tickets only."},{"name":"assignee_id","in":"query","required":false,"schema":{"type":"integer"},"description":"Assigned to this teammate."},{"name":"unassigned","in":"query","required":false,"schema":{"type":"boolean"},"description":"Only conversations without an assignee."},{"name":"team_id","in":"query","required":false,"schema":{"type":"integer"},"description":"Assigned to this team."},{"name":"tag_id","in":"query","required":false,"schema":{"type":"integer"},"description":"Has this tag."},{"name":"contact_id","in":"query","required":false,"schema":{"type":"string"},"description":"Conversations of this contact."},{"name":"updated_since","in":"query","required":false,"schema":{"type":"string","format":"date-time"},"description":"Changed at or after this time (for syncing)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"description":"Page size."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"The `next_cursor` of the previous page."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Conversation"}},"next_cursor":{"type":["string","null"],"description":"Pass as `cursor` to get the next page; null on the last page."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"422":{"$ref":"#/components/responses/Invalid"}}}},"/conversations/{conversation}":{"parameters":[{"name":"conversation","in":"path","required":true,"schema":{"type":"string"},"description":"Conversation id."}],"get":{"tags":["Conversations"],"summary":"Get a conversation","operationId":"getConversation","security":[{"bearer":["conversations:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Conversation"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"404":{"$ref":"#/components/responses/NotFound"}}},"patch":{"tags":["Conversations"],"summary":"Update a conversation","operationId":"updateConversation","security":[{"bearer":["conversations:write"]}],"description":"Close, reopen, snooze, assign or prioritise. Assigning needs a teammate with the assign permission. Every change is logged in the conversation like in the inbox.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["open","snoozed","closed"]},"snoozed_until":{"type":"string","format":"date-time","description":"Required when status is snoozed."},"assignee_id":{"type":["integer","null"],"description":"A teammate id, or null to unassign."},"team_id":{"type":["integer","null"]},"priority":{"type":"string","enum":["normal","high"]}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Conversation"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Invalid"}}}},"/conversations/{conversation}/messages":{"parameters":[{"name":"conversation","in":"path","required":true,"schema":{"type":"string"},"description":"Conversation id."}],"get":{"tags":["Conversations"],"summary":"List messages","operationId":"listMessages","security":[{"bearer":["conversations:read"]}],"description":"Oldest first. Page with `after_id` = the last id you received while `has_more` is true.","parameters":[{"name":"after_id","in":"query","required":false,"schema":{"type":"integer","minimum":0},"description":"Only messages after this id."},{"name":"include_notes","in":"query","required":false,"schema":{"type":"boolean","default":true},"description":"Include internal notes."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50},"description":"Page size."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Message"}},"has_more":{"type":"boolean"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"404":{"$ref":"#/components/responses/NotFound"}}},"post":{"tags":["Conversations"],"summary":"Reply or add a note","operationId":"createMessage","security":[{"bearer":["conversations:write"]}],"description":"A `comment` reaches the customer on the conversation's channel (Messenger, email or Telegram); a `note` is only for the team. Send an `Idempotency-Key` header (or a `client_id` UUID) to retry safely: the same key returns the first message with 200 instead of 201.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":200}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["body"],"properties":{"body":{"type":"string","maxLength":10000},"type":{"type":"string","enum":["comment","note"],"default":"comment"},"author_id":{"type":"integer","description":"Send as another teammate (needs the assign permission). Defaults to the token's teammate."},"client_id":{"type":"string","format":"uuid"}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"200":{"description":"Already sent with this idempotency key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Invalid"}}}},"/conversations/{conversation}/tags":{"parameters":[{"name":"conversation","in":"path","required":true,"schema":{"type":"string"},"description":"Conversation id."}],"post":{"tags":["Conversations"],"summary":"Add or remove tags","operationId":"tagConversation","security":[{"bearer":["conversations:write"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"add":{"type":"array","items":{"type":"integer"}},"remove":{"type":"array","items":{"type":"integer"}}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Conversation"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Invalid"}}}},"/contacts":{"get":{"tags":["Contacts"],"summary":"List or find contacts","operationId":"listContacts","security":[{"bearer":["contacts:read"]}],"description":"Newest first. Filter by `email` or `external_id` to look someone up.","parameters":[{"name":"email","in":"query","required":false,"schema":{"type":"string"},"description":"Exact email."},{"name":"external_id","in":"query","required":false,"schema":{"type":"string"},"description":"Your user id."},{"name":"type","in":"query","required":false,"schema":{"type":"string","enum":["lead","user"]},"description":"Leads or identified users."},{"name":"updated_since","in":"query","required":false,"schema":{"type":"string","format":"date-time"},"description":"Changed at or after this time."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"description":"Page size."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"The `next_cursor` of the previous page."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Contact"}},"next_cursor":{"type":["string","null"],"description":"Pass as `cursor` to get the next page; null on the last page."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"422":{"$ref":"#/components/responses/Invalid"}}},"post":{"tags":["Contacts"],"summary":"Create a contact","operationId":"createContact","security":[{"bearer":["contacts:write"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":["string","null"],"maxLength":255},"email":{"type":["string","null"],"format":"email"},"phone":{"type":["string","null"],"maxLength":40},"external_id":{"type":["string","null"],"maxLength":191,"description":"Your own user id. Setting it makes the contact a `user`."},"locale":{"type":["string","null"],"example":"de"},"timezone":{"type":["string","null"],"example":"Europe/Berlin"},"attributes":{"type":"object","additionalProperties":{"type":["string","number","boolean","null"]},"description":"Merged into the existing attributes; a key set to null is removed. At most 50."}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}},"402":{"$ref":"#/components/responses/LimitReached"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"422":{"$ref":"#/components/responses/Invalid"}}}},"/contacts/{contact}":{"parameters":[{"name":"contact","in":"path","required":true,"schema":{"type":"string"},"description":"Contact id."}],"get":{"tags":["Contacts"],"summary":"Get a contact","operationId":"getContact","security":[{"bearer":["contacts:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"404":{"$ref":"#/components/responses/NotFound"}}},"patch":{"tags":["Contacts"],"summary":"Update a contact","operationId":"updateContact","security":[{"bearer":["contacts:write"]}],"description":"Only the fields you send change.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":["string","null"],"maxLength":255},"email":{"type":["string","null"],"format":"email"},"phone":{"type":["string","null"],"maxLength":40},"external_id":{"type":["string","null"],"maxLength":191,"description":"Your own user id. Setting it makes the contact a `user`."},"locale":{"type":["string","null"],"example":"de"},"timezone":{"type":["string","null"],"example":"Europe/Berlin"},"attributes":{"type":"object","additionalProperties":{"type":["string","number","boolean","null"]},"description":"Merged into the existing attributes; a key set to null is removed. At most 50."}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Invalid"}}},"delete":{"tags":["Contacts"],"summary":"Delete a contact","operationId":"deleteContact","security":[{"bearer":["contacts:write"]}],"description":"Removes the contact from lists; their conversations stay. The `external_id` is freed.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"const":"contact"},"id":{"type":"string","description":"Public id (26 characters).","example":"01K7A9X2Q3W4E5R6T7Y8U9I0OP"},"deleted":{"const":true}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/contacts/{contact}/events":{"parameters":[{"name":"contact","in":"path","required":true,"schema":{"type":"string"},"description":"Contact id."}],"get":{"tags":["Contacts"],"summary":"List a contact's events","operationId":"listEvents","security":[{"bearer":["contacts:read"]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"description":"Page size."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"The `next_cursor` of the previous page."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Event"}},"next_cursor":{"type":["string","null"],"description":"Pass as `cursor` to get the next page; null on the last page."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"404":{"$ref":"#/components/responses/NotFound"}}},"post":{"tags":["Contacts"],"summary":"Track an event","operationId":"trackEvent","security":[{"bearer":["contacts:write"]}],"description":"The same as `Shopxare('trackEvent', \u2026)` in the Messenger, from your server \u2014 for example an order placed. Events can start workflows and segments.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","pattern":"^[A-Za-z0-9_.:\\-]{1,100}$","example":"order_placed"},"meta":{"type":"object","maxProperties":20,"additionalProperties":{"type":["string","number","boolean","null"]},"example":{"order_id":"A-1042","total":59.89999999999999857891452847979962825775146484375}}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/Invalid"}}}},"/teammates":{"get":{"tags":["Workspace"],"summary":"List teammates","operationId":"listTeammates","security":[{"bearer":["workspace:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Teammate"}},"next_cursor":{"type":["string","null"],"description":"Pass as `cursor` to get the next page; null on the last page."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/teams":{"get":{"tags":["Workspace"],"summary":"List teams","operationId":"listTeams","security":[{"bearer":["workspace:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Team"}},"next_cursor":{"type":["string","null"],"description":"Pass as `cursor` to get the next page; null on the last page."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/tags":{"get":{"tags":["Workspace"],"summary":"List tags","operationId":"listTags","security":[{"bearer":["workspace:read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Tag"}},"next_cursor":{"type":["string","null"],"description":"Pass as `cursor` to get the next page; null on the last page."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"A workspace token (`sxa_\u2026`). Scopes: conversations:read, conversations:write, contacts:read, contacts:write, workspace:read."}},"responses":{"Unauthorized":{"description":"Missing, invalid, expired or revoked token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Forbidden":{"description":"The token lacks the scope, or its teammate the permission.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"No such object in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Invalid":{"description":"Invalid input; `fields` lists the problems per field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"RateLimited":{"description":"Too many requests; wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"LimitReached":{"description":"A package limit is reached (e.g. number of contacts).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","example":"validation_failed"},"message":{"type":"string"},"fields":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}}}}},"Token":{"type":"object","properties":{"object":{"const":"token"},"id":{"type":"string","description":"Public id (26 characters).","example":"01K7A9X2Q3W4E5R6T7Y8U9I0OP"},"name":{"type":"string"},"scopes":{"type":"array","items":{"type":"string","enum":["conversations:read","conversations:write","contacts:read","contacts:write","workspace:read"]}},"expires_at":{"type":["string","null"],"format":"date-time"},"workspace":{"type":"object","properties":{"id":{"type":"string","description":"Public id (26 characters).","example":"01K7A9X2Q3W4E5R6T7Y8U9I0OP"},"name":{"type":"string"},"slug":{"type":"string"}}},"teammate":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"}}}}},"Conversation":{"type":"object","properties":{"object":{"const":"conversation"},"id":{"type":"string","description":"Public id (26 characters).","example":"01K7A9X2Q3W4E5R6T7Y8U9I0OP"},"kind":{"type":"string","enum":["conversation","ticket"]},"status":{"type":"string","enum":["open","snoozed","closed"]},"channel":{"type":"string","enum":["widget","email","telegram"]},"priority":{"type":"string","enum":["normal","high"]},"subject":{"type":["string","null"]},"ticket_number":{"type":["integer","null"]},"ticket_state":{"type":["string","null"],"enum":["submitted","in_progress","waiting_on_customer","resolved",null]},"contact_id":{"type":"string","description":"Public id (26 characters).","example":"01K7A9X2Q3W4E5R6T7Y8U9I0OP"},"assignee_id":{"type":["integer","null"]},"team_id":{"type":["integer","null"]},"tags":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"}}}},"rating":{"type":["integer","null"],"minimum":1,"maximum":5},"message_count":{"type":"integer","description":"Including notes and activity events."},"last_message_at":{"type":["string","null"],"format":"date-time"},"waiting_since":{"type":["string","null"],"format":"date-time","description":"Since when the customer waits for a reply; null when answered."},"snoozed_until":{"type":["string","null"],"format":"date-time"},"closed_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":["string","null"],"format":"date-time"},"updated_at":{"type":["string","null"],"format":"date-time"}}},"Message":{"type":"object","properties":{"object":{"const":"message"},"id":{"type":"integer","description":"Position in the conversation (1, 2, 3 \u2026)."},"conversation_id":{"type":"string","description":"Public id (26 characters).","example":"01K7A9X2Q3W4E5R6T7Y8U9I0OP"},"type":{"type":"string","enum":["comment","note","event"],"description":"comment = seen by the customer, note = team only, event = activity (assigned, closed \u2026)."},"body":{"type":["string","null"]},"author":{"type":"object","properties":{"type":{"type":"string","enum":["contact","user","bot","system"]},"id":{"type":["string","integer"]},"name":{"type":"string"}}},"attachments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Public id (26 characters).","example":"01K7A9X2Q3W4E5R6T7Y8U9I0OP"},"name":{"type":"string"},"mime":{"type":"string"},"size":{"type":"integer"},"url":{"type":"string","description":"Signed, expires."}}}},"meta":{"type":"object"},"client_id":{"type":["string","null"]},"deleted":{"type":"boolean"},"created_at":{"type":["string","null"],"format":"date-time"}}},"Contact":{"type":"object","properties":{"object":{"const":"contact"},"id":{"type":"string","description":"Public id (26 characters).","example":"01K7A9X2Q3W4E5R6T7Y8U9I0OP"},"type":{"type":"string","enum":["lead","user"]},"external_id":{"type":["string","null"]},"name":{"type":["string","null"]},"email":{"type":["string","null"]},"phone":{"type":["string","null"]},"locale":{"type":["string","null"]},"timezone":{"type":["string","null"]},"attributes":{"type":"object"},"blocked":{"type":"boolean"},"last_seen_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":["string","null"],"format":"date-time"},"updated_at":{"type":["string","null"],"format":"date-time"}}},"Event":{"type":"object","properties":{"object":{"const":"event"},"id":{"type":"integer"},"contact_id":{"type":"string","description":"Public id (26 characters).","example":"01K7A9X2Q3W4E5R6T7Y8U9I0OP"},"name":{"type":"string"},"meta":{"type":"object"},"created_at":{"type":["string","null"],"format":"date-time"}}},"Teammate":{"type":"object","properties":{"object":{"const":"teammate"},"id":{"type":"integer"},"name":{"type":"string"},"email":{"type":"string"},"role":{"type":"string"},"job_title":{"type":["string","null"]}}},"Team":{"type":"object","properties":{"object":{"const":"team"},"id":{"type":"integer"},"name":{"type":"string"}}},"Tag":{"type":"object","properties":{"object":{"const":"tag"},"id":{"type":"integer"},"name":{"type":"string"},"color":{"type":"string"}}}}}}