Skip to content
Get Started

Name & Photo Sharing

Configure and share an iMessage Name & Photo profile for a Sendblue number

Use the Contact Sharing API to configure the name and photo shown when you message people from a Sendblue number. You can also check the current profile, request that it be shared with a specific conversation, or remove it.

Name & Photo Sharing is an iMessage feature. It is separate from sending a downloadable VCF contact card.

Base URL: https://api.sendblue.com/api/v2/contact-sharing


POST /api/v2/contact-sharing/profile
ParameterTypeRequiredDescription
fromNumberstringYesYour Sendblue number in E.164 format
firstNamestringNoFirst name to set. Send an empty string to clear it.
lastNamestringNoLast name to set. Send an empty string to clear it.
photoUrlstringNoPublic direct URL of the JPEG or PNG profile photo to set
clearPhotobooleanNoSet to true to clear the current photo. Cannot be combined with photoUrl.

Include at least one of firstName, lastName, photoUrl, or clearPhoto: true.

Terminal window
curl -X POST "https://api.sendblue.com/api/v2/contact-sharing/profile" \
-H "sb-api-key-id: YOUR_API_KEY" \
-H "sb-api-secret-key: YOUR_API_SECRET" \
-H "Content-Type: application/json" \
-d '{
"fromNumber": "+14155551234",
"firstName": "Jane",
"lastName": "Smith",
"photoUrl": "https://example.com/team/jane-smith.jpg"
}'

When an active profile already exists, fields omitted from the request remain unchanged. For example, this request updates only the first name:

Terminal window
curl -X POST "https://api.sendblue.com/api/v2/contact-sharing/profile" \
-H "sb-api-key-id: YOUR_API_KEY" \
-H "sb-api-secret-key: YOUR_API_SECRET" \
-H "Content-Type: application/json" \
-d '{
"fromNumber": "+14155551234",
"firstName": "Janet"
}'

If sharing is disabled, the request creates a new profile from the fields you provide and enables sharing.

{
"status": "OK",
"data": {
"hasProfile": true,
"sharingEnabled": true,
"firstName": "Jane",
"lastName": "Smith",
"displayName": "Jane Smith",
"hasPhoto": true
}
}

200 OK confirms that Sendblue accepted the update. Applying the profile may continue after the response, so do not retry only because the change is not visible immediately.

The response reflects the fields submitted with the request. After a partial update, an omitted field may appear as null or false in this response even though its existing value remains unchanged. Use Get Profile State to read the current profile, or subscribe to the contact_profile webhook to receive the final result.


Read the current Name & Photo Sharing profile for a Sendblue number.

GET /api/v2/contact-sharing/state
ParameterTypeRequiredDescription
fromNumberstringYesYour Sendblue number in E.164 format
Terminal window
curl "https://api.sendblue.com/api/v2/contact-sharing/state?fromNumber=%2B14155551234" \
-H "sb-api-key-id: YOUR_API_KEY" \
-H "sb-api-secret-key: YOUR_API_SECRET"
{
"status": "OK",
"data": {
"hasProfile": true,
"sharingEnabled": true,
"firstName": "Jane",
"lastName": "Smith",
"displayName": "Jane Smith",
"hasPhoto": true,
"publishRecordPresent": true
}
}
FieldTypeDescription
hasProfilebooleanWhether a name or photo is configured
sharingEnabledbooleanWhether Name & Photo Sharing is enabled
firstNamestring or nullCurrent first name
lastNamestring or nullCurrent last name
displayNamestring or nullCurrent combined display name
hasPhotobooleanWhether a profile photo is configured
publishRecordPresentboolean or nullWhether the profile is published and available to share. May be null when this status is unavailable.

Request that the number’s published Name & Photo profile be shared with one existing direct iMessage conversation. This endpoint does not send a text message.

POST /api/v2/contact-sharing/share

Before calling this endpoint:

  • Configure the profile and confirm publishRecordPresent: true.
  • Send at least one iMessage from fromNumber to toNumber so the direct conversation exists.

Group conversations and SMS conversations are not supported.

ParameterTypeRequiredDescription
fromNumberstringYesYour Sendblue number in E.164 format
toNumberstringYesRecipient of an existing direct iMessage conversation, in E.164 format
Terminal window
curl -X POST "https://api.sendblue.com/api/v2/contact-sharing/share" \
-H "sb-api-key-id: YOUR_API_KEY" \
-H "sb-api-secret-key: YOUR_API_SECRET" \
-H "Content-Type: application/json" \
-d '{
"fromNumber": "+14155551234",
"toNumber": "+14155559876"
}'
{
"status": "OK",
"data": {
"fromNumber": "+14155551234",
"toNumber": "+14155559876",
"requested": true,
"deduplicated": false,
"requestedAt": "2026-08-24T15:00:00.000Z",
"cooldownUntil": "2026-08-25T15:00:00.000Z",
"cooldownPersisted": true
}
}
FieldTypeDescription
requestedbooleantrue when a new share was requested
deduplicatedbooleantrue when the same chat was already handled within the last 24 hours
requestedAtstringISO 8601 time associated with the share request
cooldownUntilstringISO 8601 time when a new share can be requested for this chat
cooldownPersistedbooleanWhether the 24-hour deduplication window was saved

You can call the endpoint again at any time. Sendblue avoids duplicate requests for the same chat for 24 hours and returns requested: false with deduplicated: true.

A successful response confirms the sender-side share request. It does not confirm when the recipient sees or accepts the profile.

Error responses use the standard body shown under Errors. When available, a machine-readable code is also included.

HTTP StatusDescription
400Missing or invalid phone numbers
409The profile is not ready, the conversation does not exist, or no prior outbound iMessage was found
422The conversation is not a supported direct iMessage chat
502iMessage returned an invalid result
503The Sendblue number is temporarily unavailable
504The share request timed out

Disable Name & Photo Sharing and remove the profile from a Sendblue number.

DELETE /api/v2/contact-sharing/profile
ParameterTypeRequiredDescription
fromNumberstringYesYour Sendblue number in E.164 format
Terminal window
curl -X DELETE "https://api.sendblue.com/api/v2/contact-sharing/profile" \
-H "sb-api-key-id: YOUR_API_KEY" \
-H "sb-api-secret-key: YOUR_API_SECRET" \
-H "Content-Type: application/json" \
-d '{
"fromNumber": "+14155551234"
}'
{
"status": "OK",
"data": {
"hasProfile": false,
"sharingEnabled": false
}
}

HTTP StatusDescription
400Missing, invalid, or conflicting parameters
401Invalid or missing API credentials
403Your account does not own fromNumber
404No active Sendblue number was found
500The request could not be accepted
503The Sendblue number is temporarily unavailable
{
"status": "ERROR",
"message": "Description of what went wrong"
}
  • photoUrl must be a publicly accessible direct image URL.
  • Use an empty string to clear firstName or lastName, clearPhoto: true to remove only the photo, and DELETE /profile to remove the full profile.
  • Profile availability and display timing are controlled by iMessage and may vary by recipient device.