[{"data":1,"prerenderedAt":175},["ShallowReactive",2],{"pseo:features:profile-picture":3,"highlight:pillar:profile-picture":168},{"availability":4,"ban_risk":5,"ban_risk_note":6,"category":7,"cloud_api_status":11,"contrast":12,"endpoints":20,"faqs":48,"gotchas":61,"name":64,"published":65,"related":66,"search_terms":116,"seo":121,"slug":136,"step_summary":137,"steps":138,"summary":152,"tier":153,"updated":14,"url":131,"use_cases":154,"webhook_events":164},"beta","low","Reading profile pictures for contacts you actually talk to is unremarkable. Iterating over a list of numbers to harvest photos and display names is not: it is enumeration, it produces a very distinctive traffic pattern, and it is a privacy problem regardless of what the API allows.",{"name":8,"slug":9,"url":10},"Contacts","contacts","\u002Fwhatsapp-api\u002Fcontacts\u002F","restricted",{"demand":13,"meta_checked":14,"meta_doc_url":15,"meta_quote":16,"official_workaround":17,"short_verdict":18,"verdict":19},"medium","2026-09-15","https:\u002F\u002Fdevelopers.facebook.com\u002Fdocs\u002Fwhatsapp\u002Fcloud-api\u002Freference","Paraphrase (not a verbatim quote), checked against the Cloud API reference index: the reference exposes a business profile for the registered number itself and no endpoint for retrieving another user's profile photo.","For your own profile, the official API is a perfectly good route and arguably the better one. For reading a contact's picture there is no official workaround at all.","Partly. You can set yours, not read theirs.","Meta's Cloud API lets a business manage its own profile, including its picture, through the business profile node. What it does not offer is any way to read a customer's profile photo or display name, because the official platform deliberately exposes very little about the person on the other end.",[21,31,39],{"availability":22,"ban_risk":5,"curl":23,"method":26,"operationId":27,"path":28,"summary":29,"tag":9,"url":30},"ga",{"code":24,"lang":25},"curl --request GET \\\n  --url 'https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fcontacts\u002F+15551234567\u002Fprofile' \\\n  --header 'Authorization: Bearer wpt_YOUR_TOKEN'","bash","GET","getContactProfile","\u002Fcontacts\u002F{id}\u002Fprofile","Get a contact profile picture","\u002Fdocs\u002Fapi\u002Fcontacts\u002Fget-contact-profile\u002F",{"availability":4,"ban_risk":5,"curl":32,"method":26,"operationId":34,"path":35,"summary":36,"tag":37,"url":38},{"code":33,"lang":25},"curl --request GET \\\n  --url https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fchats\u002F15551234567@s.whatsapp.net\u002Fpicture \\\n  --header 'Authorization: Bearer wpt_YOUR_TOKEN'","getChatPicture","\u002Fchats\u002F{id}\u002Fpicture","Get the picture of a chat","chats","\u002Fdocs\u002Fapi\u002Fchats\u002Fget-chat-picture\u002F",{"availability":22,"ban_risk":5,"curl":40,"method":42,"operationId":43,"path":44,"summary":45,"tag":46,"url":47},{"code":41,"lang":25},"curl --request PATCH \\\n  --url https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fusers\u002Fprofile \\\n  --header 'Authorization: Bearer wpt_YOUR_TOKEN' \\\n  --header 'Content-Type: application\u002Fjson' \\\n  --data '{\"name\":\"Acme Support\",\"status\":\"Replies Mon-Fri, 9 to 6 UK time.\"}'","PATCH","updateProfile","\u002Fusers\u002Fprofile","Update the linked account profile","channel","\u002Fdocs\u002Fapi\u002Fchannel\u002Fupdate-profile\u002F",[49,52,55,58],{"a":50,"q":51},"Almost always because of their privacy settings. WhatsApp lets everyone choose who can see their picture, and a linked number that is not in their contacts will often see nothing. It is the expected outcome for a cold contact rather than something to retry or work around.","Why does a contact's photo come back empty?",{"a":53,"q":54},"Square and a few hundred pixels on a side is plenty; WhatsApp compresses it heavily and renders it in a small circle. A simple mark on a solid background survives that treatment far better than a detailed photograph or anything with small text in it.","How large should my own profile picture be?",{"a":56,"q":57},"Yes, through the chat picture call, provided the linked number is a member of that group. For groups the picture is the icon an admin set, and there is a dedicated group icon endpoint if you also need to change it rather than only read it.","Can I read the picture of a group?",{"a":59,"q":60},"The API will answer the calls you are entitled to make, but iterating over numbers to collect photos is enumeration, and it is both a privacy problem and a fast route to a restricted number. Read profiles for the people you are actually in conversation with.","Is scraping profile photos allowed?",[62,63],"An empty result is usually a privacy setting rather than an error - many people show their photo only to their own contacts, and your number is not one of them.","Profile pictures change without warning, so anything you cache needs an invalidation path; the contacts webhook gives you one that does not require polling.","Profile Picture",true,{"endpoints":67,"errors":74,"glossary":81,"hub":10,"integrations":91,"siblings":92,"tutorials":105,"vs_cloud_api":115},[68,70,72],{"title":69,"url":30},"GET \u002Fcontacts\u002F{id}\u002Fprofile",{"title":71,"url":38},"GET \u002Fchats\u002F{id}\u002Fpicture",{"title":73,"url":47},"PATCH \u002Fusers\u002Fprofile",[75,78],{"title":76,"url":77},"business_account_required (409)","\u002Fdocs\u002Ferrors\u002Fbusiness-account-required\u002F",{"title":79,"url":80},"unsupported_media_type (415)","\u002Fdocs\u002Ferrors\u002Funsupported-media-type\u002F",[82,85,88],{"title":83,"url":84},"Business account","\u002Fglossary\u002Fbusiness-account\u002F",{"title":86,"url":87},"JID","\u002Fglossary\u002Fjid\u002F",{"title":89,"url":90},"Channel","\u002Fglossary\u002Fchannel\u002F",[],[93,96,99,102],{"title":94,"url":95},"Check Number","\u002Fwhatsapp-api\u002Fcheck-number\u002F",{"title":97,"url":98},"LID to Phone","\u002Fwhatsapp-api\u002Flid-to-phone\u002F",{"title":100,"url":101},"Group Icon","\u002Fwhatsapp-api\u002Fgroup-icon\u002F",{"title":103,"url":104},"Connect a Number","\u002Fwhatsapp-api\u002Fconnect-number-qr-pairing\u002F",[106,109,112],{"title":107,"url":108},"Python","\u002Fwhatsapp-api\u002Fprofile-picture\u002Fpython\u002F",{"title":110,"url":111},"Node.js","\u002Fwhatsapp-api\u002Fprofile-picture\u002Fnodejs\u002F",{"title":113,"url":114},"PHP","\u002Fwhatsapp-api\u002Fprofile-picture\u002Fphp\u002F","\u002Fvs-cloud-api\u002Fprofile-picture\u002F",[117,118,119,120],"whatsapp profile picture api","get whatsapp profile photo","whatsapp display name api","set whatsapp profile photo api",{"breadcrumb":122,"canonical":132,"description":133,"h1":134,"lastmod":14,"title":135},[123,126,129,130],{"name":124,"url":125},"Home","\u002F",{"name":127,"url":128},"WhatsApp API","\u002Fwhatsapp-api\u002F",{"name":8,"url":10},{"name":64,"url":131},"\u002Fwhatsapp-api\u002Fprofile-picture\u002F","https:\u002F\u002Fwapito.com\u002Fwhatsapp-api\u002Fprofile-picture\u002F","Read a contact's photo and set your own. No templates, no Meta approval, any number. 3 endpoints, code in Python, Node.js and PHP.","Read WhatsApp Profile Pictures via API","WhatsApp Profile Picture API | Wapito","profile-picture","Read a contact or chat picture where privacy allows, set your own number's photo, and refresh your cache from contact events.",[139,143,146,149],{"body":140,"operationId":27,"operation_url":30,"title":141,"webhook":142},"Fetch the display name and picture for a contact. Privacy settings apply: a person who shows their photo only to contacts will return nothing to a number they have not saved, and that is a normal result rather than a failure.","Read a contact's profile",null,{"body":144,"operationId":34,"operation_url":38,"title":145,"webhook":142},"The same call pattern works for a chat, which covers groups as well as people. Use it to populate an agent dashboard so a human sees the same avatar they would see on their phone.","Read a chat picture",{"body":147,"operationId":43,"operation_url":47,"title":148,"webhook":142},"Upload a square image and set it as the number's own picture. A number with a real photo and a real name looks like a business rather than a burner, which measurably affects how people respond to it.","Set the linked number's own photo",{"body":150,"operationId":142,"operation_url":142,"title":151,"webhook":9},"Contact updates arrive as events, so a cached avatar can be invalidated at the moment it changes instead of being re-fetched on a timer for thousands of contacts.","Refresh when a contact changes theirs","Read a contact's photo and set your own.","t1b",[155,158,161],{"body":156,"title":157},"A support desk renders each conversation with the contact's WhatsApp photo and name, so an agent picking up a thread sees the same context they would see on a phone. Pictures are cached and refreshed from contact events rather than re-fetched.","Show real avatars in an agent inbox",{"body":159,"title":160},"An automation sets the linked number's photo and display name from the company's brand assets when a channel is provisioned, so a new number never spends its first weeks looking like an anonymous stranger to the people it messages.","Keep the business number looking like a business",{"body":162,"title":163},"A brand monitors whether numbers claiming to represent it use its logo as a profile picture, by checking the handful of numbers customers report. Matches are escalated to the legal team rather than handled automatically.","Flag impersonation attempts",[165],{"event":9,"receiver":166,"summary":167},"onContacts","Contact discovered or resolved",[169,171,173],{"label":69,"id":27,"lang":25,"code":24,"html":170},"\u003Cpre class=\"shiki shiki-themes github-light-default github-dark-default\" style=\"background-color:#ffffff;--shiki-dark-bg:#0d1117;color:#1f2328;--shiki-dark:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#953800;--shiki-dark:#FFA657\">curl\u003C\u002Fspan>\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --request\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> GET\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --url\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fcontacts\u002F+15551234567\u002Fprofile'\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --header\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'Authorization: Bearer wpt_YOUR_TOKEN'\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"label":71,"id":34,"lang":25,"code":33,"html":172},"\u003Cpre class=\"shiki shiki-themes github-light-default github-dark-default\" style=\"background-color:#ffffff;--shiki-dark-bg:#0d1117;color:#1f2328;--shiki-dark:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#953800;--shiki-dark:#FFA657\">curl\u003C\u002Fspan>\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --request\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> GET\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --url\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fchats\u002F15551234567@s.whatsapp.net\u002Fpicture\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --header\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'Authorization: Bearer wpt_YOUR_TOKEN'\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"label":73,"id":43,"lang":25,"code":41,"html":174},"\u003Cpre class=\"shiki shiki-themes github-light-default github-dark-default\" style=\"background-color:#ffffff;--shiki-dark-bg:#0d1117;color:#1f2328;--shiki-dark:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#953800;--shiki-dark:#FFA657\">curl\u003C\u002Fspan>\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --request\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> PATCH\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --url\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> https:\u002F\u002Fapi.wapito.com\u002Fv1\u002Fusers\u002Fprofile\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --header\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'Authorization: Bearer wpt_YOUR_TOKEN'\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --header\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> 'Content-Type: application\u002Fjson'\u003C\u002Fspan>\u003Cspan style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --data\u003C\u002Fspan>\u003Cspan style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> '{\"name\":\"Acme Support\",\"status\":\"Replies Mon-Fri, 9 to 6 UK time.\"}'\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",1790464899296]