{"openapi":"3.1.0","info":{"title":"MeuMore Partner API","version":"1.0.0","description":"Partner invites, AI demo profiles, and partner apps acting for MeuMore users (OAuth 2.0 + PKCE). Human-readable docs: https://meumore.com/developers#partners"},"servers":[{"url":"https://meumore.com/api/partner/v1"}],"paths":{"/invites":{"post":{"operationId":"createInvite","summary":"Send an invitation email from MeuMore to one person who agreed to receive it.","description":"consent is required and consent.text must name MeuMore (422 otherwise). 409 when you invited this address in the last 30 days (with that invite's id and status), or when it can't be invited (unsubscribed, bounced, already a member, or invited recently by someone else; the reason isn't disclosed). Limits: 1000 per hour and 20000 per day.","x-auth":"partner","x-scope":"invites","x-curl":"curl -s https://meumore.com/api/partner/v1/invites -H \"Authorization: Bearer $MEUMORE_PARTNER_KEY\" \\\n  -H \"Content-Type: application/json\" -d '{\n    \"email\": \"ana@example.com\", \"name\": \"Ana\", \"country\": \"BR\",\n    \"consent\": {\"source\": \"oxbo.in/signup\", \"captured_at\": \"2026-09-30T10:00:00Z\",\n                \"text\": \"I agree that Oxbo may share my email with MeuMore so MeuMore can send me an invitation.\"},\n    \"utm\": {\"source\": \"oxbo\", \"medium\": \"partner\", \"campaign\": \"sept\"}, \"external_id\": \"lead_123\"\n  }'","security":[{"partnerKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"name":{"type":"string","description":"Used for a first-name greeting"},"country":{"type":"string","description":"ISO 3166-1 alpha-2"},"consent":{"$ref":"#/components/schemas/Consent"},"utm":{"type":"object","properties":{"source":{"type":"string"},"medium":{"type":"string"},"campaign":{"type":"string"},"content":{"type":"string"},"term":{"type":"string"}}},"fbclid":{"type":"string","description":"Meta click id of the ad the person came from"},"external_id":{"type":"string","description":"Your id for this person (returned as-is)"}},"required":["email","consent"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Invite"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listInvites","summary":"Your invites, newest first, with cursor pagination.","x-auth":"partner","x-scope":"invites","x-curl":"curl -s \"https://meumore.com/api/partner/v1/invites?status=signed_up\" -H \"Authorization: Bearer $MEUMORE_PARTNER_KEY\"","security":[{"partnerKey":[]}],"parameters":[{"name":"status","in":"query","schema":{"type":"string","enum":["sent","clicked","signed_up","profile_complete","bounced","unsubscribed"]}},{"name":"cursor","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Invite"}},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["data","next_cursor"]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/invites/{id}":{"get":{"operationId":"getInvite","summary":"One invite's status. Other partners' invites are 404.","x-auth":"partner","x-scope":"invites","x-curl":"curl -s https://meumore.com/api/partner/v1/invites/$INVITE_ID -H \"Authorization: Bearer $MEUMORE_PARTNER_KEY\"","security":[{"partnerKey":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Invite"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/demo-users":{"post":{"operationId":"upsertDemoUser","summary":"Create or update (by external_id) an AI demo profile.","description":"multipart/form-data: the fields below, `photos` (1-5 image files; replaces all current photos on update) and `ai_enhanced` (once for all photos, or once per photo in order). Or JSON with `photos: [{upload_id, ai_enhanced}]` from POST /demo-users/uploads. Creating needs name, age (18+), gender, interested_in, looking_for and photos; updates take any subset. Photos go through moderation (rejected: 422). The profile is onboarded, has no Google identity and can never sign in. 201 created, 200 updated.","x-auth":"partner","x-scope":"demo","x-curl":"curl -s https://meumore.com/api/partner/v1/demo-users -H \"Authorization: Bearer $MEUMORE_PARTNER_KEY\" \\\n  -F external_id=demo_ana -F name=\"Ana\" -F age=29 -F gender=woman -F interested_in=man \\\n  -F looking_for=both -F city=\"São Paulo\" -F country=BR -F lat=-23.55 -F lng=-46.63 -F bio=\"Coffee and hiking\" \\\n  -F photos=@ana1.jpg -F photos=@ana2.jpg -F ai_enhanced=true","security":[{"partnerKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"external_id":{"type":"string","description":"Your id; the idempotency key"},"name":{"type":"string"},"age":{"type":"integer","description":"18 or more"},"gender":{"type":"string","enum":["woman","man","non-binary","other"]},"interested_in":{"type":"array","items":{"type":"string","enum":["woman","man","non-binary","other"]}},"looking_for":{"type":"string","enum":["love","friends","both"]},"city":{"type":"string"},"region":{"type":"string"},"country":{"type":"string","description":"ISO 3166-1 alpha-2"},"lat":{"type":"number"},"lng":{"type":"number"},"bio":{"type":"string","description":"Up to 500 characters"},"persona":{"type":"string","description":"Optional, up to 1000 characters: how the AI profile talks, what it likes and its boundaries. MeuMore chat automation replies as this profile (OpenAI), using the persona with name, age, city and bio. Empty string clears it"},"photos":{"type":"array","items":{"type":"object","properties":{"upload_id":{"type":"string","format":"uuid"},"ai_enhanced":{"type":"boolean"}}}}},"required":["external_id"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoUser"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/Error"},"415":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"listDemoUsers","summary":"Your demo profiles, newest first.","x-auth":"partner","x-scope":"demo","security":[{"partnerKey":[]}],"parameters":[{"name":"cursor","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DemoUser"}},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"deleteAllDemoUsers","summary":"Delete all your demo profiles with their photos, media and chats.","x-auth":"partner","x-scope":"demo","x-curl":"curl -s -X DELETE https://meumore.com/api/partner/v1/demo-users -H \"Authorization: Bearer $MEUMORE_PARTNER_KEY\"","security":[{"partnerKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"integer"}}}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/demo-users/uploads":{"post":{"operationId":"demoUpload","summary":"Presigned PUT for a demo profile photo (then POST /demo-users with photos: [{upload_id}]).","x-auth":"partner","x-scope":"demo","security":[{"partnerKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"content_type":{"type":"string"},"size":{"type":"integer","description":"Bytes"}},"required":["content_type","size"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Upload"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/Error"},"415":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/demo-users/{external_id}":{"get":{"operationId":"getDemoUser","summary":"One demo profile.","x-auth":"partner","x-scope":"demo","security":[{"partnerKey":[]}],"parameters":[{"name":"external_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoUser"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"deleteDemoUser","summary":"Delete one demo profile, its photos, media and chats.","x-auth":"partner","x-scope":"demo","security":[{"partnerKey":[]}],"parameters":[{"name":"external_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"boolean"}}}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/demo-users/{external_id}/conversations":{"get":{"operationId":"demoConversations","summary":"Chats members started with this demo profile, each with its latest 20 messages (oldest first). Fetched messages are marked read.","x-auth":"partner","x-scope":"demo","x-curl":"curl -s https://meumore.com/api/partner/v1/demo-users/demo_ana/conversations -H \"Authorization: Bearer $MEUMORE_PARTNER_KEY\"","security":[{"partnerKey":[]}],"parameters":[{"name":"external_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DemoConversation"}}}}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/demo-users/{external_id}/messages":{"post":{"operationId":"demoReply","summary":"Reply as the demo profile (text only). The same chat rules and rate limit (30 per minute) apply as for members.","x-auth":"partner","x-scope":"demo","x-curl":"curl -s https://meumore.com/api/partner/v1/demo-users/demo_ana/messages -H \"Authorization: Bearer $MEUMORE_PARTNER_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\"conversation_id\":\"<id>\",\"text\":\"Hi! Thanks for the message.\"}'","security":[{"partnerKey":[]}],"parameters":[{"name":"external_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"conversation_id":{"type":"string","format":"uuid"},"text":{"type":"string","description":"1-2000 characters"}},"required":["conversation_id","text"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoMessage"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/user/me":{"get":{"operationId":"userMe","summary":"The user who authorised your app, the granted scopes and (with profile:read) their basic profile.","x-auth":"user","x-scope":"any","x-curl":"curl -s https://meumore.com/api/partner/v1/user/me -H \"Authorization: Bearer $USER_ACCESS_TOKEN\"","security":[{"userToken":["any"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"app":{"type":"object","properties":{"client_id":{"type":"string"},"name":{"type":"string"}}},"scopes":{"type":"array","items":{"type":"string"}},"profile":{"anyOf":[{"$ref":"#/components/schemas/Profile"},{"type":"null"}]}}}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/user/photos":{"post":{"operationId":"userAddPhoto","summary":"Add a profile photo (next free slot; max 5) or replace one.","description":"multipart/form-data with `photo` (JPEG, PNG, WebP or HEIC, 10 MB max), optional `replace` (a photo id or \"main\") and `ai_enhanced` (\"true\" when the image was made or edited with AI). Or JSON {upload_id, replace?, ai_enhanced?} after POST /user/photos/uploads. Every photo is moderated: rejected images return 422, others may stay pending until reviewed. At 5 photos adding returns 400: replace one instead.","x-auth":"user","x-scope":"photos:write","x-curl":"curl -s https://meumore.com/api/partner/v1/user/photos -H \"Authorization: Bearer $USER_ACCESS_TOKEN\" \\\n  -F photo=@portrait.jpg -F ai_enhanced=true","security":[{"userToken":["photos:write"]}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"photo":{"type":"string","format":"binary"},"replace":{"type":"string","description":"Photo id or \"main\""},"ai_enhanced":{"type":"string","enum":["true","false"]}},"required":["photo"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"photo":{"$ref":"#/components/schemas/Photo"},"photos":{"type":"array","items":{"$ref":"#/components/schemas/Photo"}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/Error"},"415":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/user/photos/uploads":{"post":{"operationId":"userPhotoUpload","summary":"Presigned PUT for a large profile photo; then POST /user/photos {\"upload_id\": …}.","x-auth":"user","x-scope":"photos:write","security":[{"userToken":["photos:write"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"content_type":{"type":"string","description":"image/jpeg, image/png, image/webp or image/heic"},"size":{"type":"integer","description":"Bytes"}},"required":["content_type","size"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Upload"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/Error"},"415":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/user/media/uploads":{"post":{"operationId":"userMediaUpload","summary":"Presigned PUT for a gallery photo or video.","x-auth":"user","x-scope":"media:write","x-curl":"curl -s https://meumore.com/api/partner/v1/user/media/uploads -H \"Authorization: Bearer $USER_ACCESS_TOKEN\" -H \"Content-Type: application/json\" \\\n  -d '{\"content_type\":\"image/jpeg\",\"size\":123456}'","security":[{"userToken":["media:write"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"content_type":{"type":"string"},"size":{"type":"integer","description":"Bytes"}},"required":["content_type","size"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Upload"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/Error"},"415":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/user/media":{"post":{"operationId":"userCreateMedia","summary":"Publish an upload to the user's gallery, as the user.","description":"Same processing, moderation and scheduling as posts made on the site. The user must be a creator (creator fee paid), otherwise 403 not_a_creator; paid needs tier_id.","x-auth":"user","x-scope":"media:write","x-curl":"curl -s https://meumore.com/api/partner/v1/user/media -H \"Authorization: Bearer $USER_ACCESS_TOKEN\" -H \"Content-Type: application/json\" \\\n  -d '{\"upload_id\":\"<upload_id>\",\"content_type\":\"image/jpeg\",\"caption\":\"Studio shoot\",\"ai_enhanced\":true}'","security":[{"userToken":["media:write"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"upload_id":{"type":"string","format":"uuid"},"content_type":{"type":"string"},"caption":{"type":"string"},"visibility":{"type":"string","enum":["free","subscribers","paid"],"default":"free"},"tier_id":{"type":"integer"},"free_for_subscribers":{"type":"boolean"},"publish_at":{"anyOf":[{"type":"string","description":"Schedule for later","format":"date-time"},{"type":"null"}]},"ai_enhanced":{"type":"boolean","description":"Made or edited with AI"}},"required":["upload_id","content_type"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Media"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/Error"},"415":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/oauth/token":{"servers":[{"url":"https://meumore.com/api/partner"}],"post":{"operationId":"oauthToken","summary":"Exchange an authorization code (single-use, 10 minutes) or a refresh token. Served at https://meumore.com/api/partner/oauth/token.","security":[],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"grant_type":{"type":"string","enum":["authorization_code","refresh_token"]},"client_id":{"type":"string"},"client_secret":{"type":"string","description":"Or HTTP Basic; optional with PKCE"},"code":{"type":"string"},"redirect_uri":{"type":"string","description":"Exactly as in the authorize request"},"code_verifier":{"type":"string","description":"PKCE"},"refresh_token":{"type":"string"}},"required":["grant_type","client_id"]}}}},"responses":{"200":{"description":"Tokens","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"400":{"description":"invalid_grant, invalid_request, unsupported_grant_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthError"}}}},"401":{"description":"invalid_client","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthError"}}}}}}}},"components":{"securitySchemes":{"partnerKey":{"type":"http","scheme":"bearer","description":"mm_partner_<id>_<secret>, issued by MeuMore"},"userToken":{"type":"oauth2","description":"Authorization code flow with PKCE (S256). Access tokens last 90 days; refresh tokens rotate.","flows":{"authorizationCode":{"authorizationUrl":"https://meumore.com/partner/authorize","tokenUrl":"https://meumore.com/api/partner/oauth/token","refreshUrl":"https://meumore.com/api/partner/oauth/token","scopes":{"profile:read":"See your basic profile: first name, age, country and your photos","photos:write":"Add or replace your profile photos (up to 5; every photo is checked by our moderation first)","media:write":"Post photos and videos to your gallery as you (creator accounts only)"}}}}},"responses":{"Error":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]},"Consent":{"type":"object","properties":{"source":{"type":"string","description":"Where the person gave consent (form or page)"},"captured_at":{"type":"string","description":"When","format":"date-time"},"text":{"type":"string","description":"The exact wording they agreed to. Must name MeuMore."}},"required":["source","captured_at","text"]},"Invite":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"country":{"anyOf":[{"type":"string"},{"type":"null"}]},"external_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"type":"string","enum":["sent","clicked","signed_up","profile_complete","bounced","unsubscribed"]},"email_mismatch":{"type":"boolean","description":"Signed up from the link with a different Google address"},"consent":{"$ref":"#/components/schemas/Consent"},"attribution":{"type":"object"},"created_at":{"type":"string","format":"date-time"},"sent_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"clicked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"signed_up_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"profile_completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"bounced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"unsubscribed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}}},"Photo":{"type":"object","properties":{"id":{"type":"string"},"position":{"type":"integer","description":"0 = main photo"},"status":{"type":"string","enum":["approved","pending","rejected"]},"ai_enhanced":{"type":"boolean"},"url":{"type":"string","description":"Signed URL"}}},"Profile":{"type":"object","properties":{"first_name":{"type":"string"},"age":{"anyOf":[{"type":"integer"},{"type":"null"}]},"gender":{"anyOf":[{"type":"string"},{"type":"null"}]},"country":{"anyOf":[{"type":"string"},{"type":"null"}]},"looking_for":{"anyOf":[{"type":"string"},{"type":"null"}]},"onboarded":{"type":"boolean"},"is_creator":{"type":"boolean"},"profile_url":{"type":"string"},"photos":{"type":"array","items":{"$ref":"#/components/schemas/Photo"}}}},"Upload":{"type":"object","properties":{"upload_id":{"type":"string"},"upload":{"type":"object","properties":{"method":{"type":"string"},"url":{"type":"string"},"headers":{"type":"object"}}}}},"Media":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string"},"mime":{"type":"string"},"size_bytes":{"type":"integer"},"status":{"type":"string"},"context":{"type":"string"},"visibility":{"type":"string"},"tier_id":{"anyOf":[{"type":"integer"},{"type":"null"}]},"free_for_subscribers":{"type":"boolean"},"caption":{"type":"string"},"publish_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"published":{"type":"boolean"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time"},"sales":{"type":"integer"},"ai_enhanced":{"type":"boolean"},"thumb_url":{"type":"string"}}},"DemoUser":{"type":"object","properties":{"id":{"type":"string"},"external_id":{"type":"string"},"name":{"type":"string"},"first_name":{"type":"string"},"age":{"type":"integer"},"gender":{"type":"string"},"interested_in":{"type":"array","items":{"type":"string"}},"looking_for":{"type":"string"},"city":{"anyOf":[{"type":"string"},{"type":"null"}]},"region":{"anyOf":[{"type":"string"},{"type":"null"}]},"country":{"anyOf":[{"type":"string"},{"type":"null"}]},"bio":{"anyOf":[{"type":"string"},{"type":"null"}]},"persona":{"anyOf":[{"type":"string"},{"type":"null"}]},"location":{"anyOf":[{"type":"object","properties":{"lat":{"type":"number"},"lng":{"type":"number"}}},{"type":"null"}]},"photo_status":{"type":"string"},"photos":{"type":"array","items":{"$ref":"#/components/schemas/Photo"}},"profile_url":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"created":{"type":"boolean","description":"POST only: true when created, false when updated"}}},"DemoMessage":{"type":"object","properties":{"id":{"type":"string"},"conversation_id":{"type":"string"},"direction":{"type":"string","enum":["inbound","outbound"]},"kind":{"type":"string"},"text":{"type":"string"},"automated":{"type":"boolean","description":"Written by automation (MeuMore chat automation or your replies via the API)"},"created_at":{"type":"string","format":"date-time"},"read_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}}},"DemoConversation":{"type":"object","properties":{"id":{"type":"string"},"with":{"type":"object","properties":{"id":{"type":"string","description":"The member (first name only)"},"first_name":{"type":"string"}}},"unread_count":{"type":"integer"},"last_activity_at":{"type":"string","format":"date-time"},"messages":{"type":"array","items":{"$ref":"#/components/schemas/DemoMessage"}}}},"TokenResponse":{"type":"object","properties":{"access_token":{"type":"string","description":"mmat_…"},"token_type":{"type":"string","const":"Bearer"},"expires_in":{"type":"integer","description":"90 days"},"refresh_token":{"type":"string","description":"mmrt_…"},"scope":{"type":"string"}}},"OAuthError":{"type":"object","properties":{"error":{"type":"string"},"error_description":{"type":"string"}}}}}}