Contact Cards
Set, retrieve, update, and share the contact card recipients see for your phone numbers.
Contact Card lets you set and share your contact information (name and profile photo) with chat participants via iMessage Name and Photo Sharing.
Use POST /v3/contact_card to create or update a card for a phone number.
Use PATCH /v3/contact_card to update an existing active card.
Use GET /v3/contact_card to retrieve the active card(s) for your partner account.
Sharing behavior: Sharing may not take effect in every chat due to limitations outside our control. We recommend calling the share endpoint once per day, after the first outbound activity.
A contact card is not a vCard (.vcf) attachment — it’s iMessage’s native identity card, so recipients see “Acme Support” in place of “+1 (415) 555-1234”.
Working with contact cards is a two-step flow:
- Configure once per phone number — create (or update) the card on your sending number. This sets the identity but does not push it into any chat.
- Share into each chat — call the share endpoint on a specific chat to actually prompt the recipient to save your name and photo.
Create a contact card
Section titled “Create a contact card”Create a contact card and apply it to one of your phone numbers. The card is stored in an inactive state first; once successfully applied it activates and is_active returns true. See the Create Contact Card API reference for the full endpoint specification.
curl -X POST https://api.linqapp.com/api/partner/v3/contact_card \ -H "Authorization: Bearer $LINQ_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "phone_number": "+15551234567", "first_name": "Acme", "last_name": "Support", "image_url": "https://cdn.linqapp.com/contact-card/example.jpg" }'await client.contactCard.create({ phone_number: "+15551234567", first_name: "Acme", last_name: "Support", image_url: "https://cdn.linqapp.com/contact-card/example.jpg",});client.contactCard.create( phone_number="+15551234567", first_name="Acme", last_name="Support", image_url="https://cdn.linqapp.com/contact-card/example.jpg",)client.ContactCard.Create(context.TODO(), linq.ContactCardNewParams{ PhoneNumber: linq.F("+15551234567"), FirstName: linq.F("Acme"), LastName: linq.F("Support"), ImageUrl: linq.F("https://cdn.linqapp.com/contact-card/example.jpg"),})| Field | Required | Type | Description |
|---|---|---|---|
phone_number | Yes | string | E.164 phone number to associate the contact card with |
first_name | Yes | string | First name for the contact card. Required. |
last_name | No | string | Last name for the contact card. Optional. |
image_url | No | string | URL of the profile image to rehost on the CDN. Only re-uploaded when a new value is provided. |
Creating a card for a phone number that already has one returns error 2014. Use the update endpoint instead.
Creating only configures the card on your phone number — recipients won’t see anything yet. To actually prompt them to save your name and photo, call the share endpoint on each chat after the first outbound message.
Confirm the card activated (is_active: true) via the Retrieve Contact Card endpoint before sharing.
Retrieve contact cards
Section titled “Retrieve contact cards”Retrieve every card on your account, or filter to a single phone number with the phone_number query parameter. If no card exists for the queried number, the endpoint returns error 2012. See the Retrieve Contact Card API reference.
Update a contact card
Section titled “Update a contact card”Partially update the active card for a phone number — omitted fields retain their existing values. An active card must already exist, otherwise the request returns error 2012. See the Update Contact Card API reference.
Share a contact card
Section titled “Share a contact card”Configuring a card is not the same as showing it to a recipient. Your card lives on your phone number until you push it into a chat with the share endpoint — a separate API call against POST /v3/chats/{chatId}/share_contact_card. See the Share Contact Card API reference.
Before calling share, make sure:
- A contact card exists for the chat’s
fromnumber, withis_active: true. If not, the API returns error2012. - The chat is an iMessage conversation — sharing has no effect on RCS or SMS chats.
- There is at least one prior outbound message in the chat.
curl -X POST https://api.linqapp.com/api/partner/v3/chats/{chatId}/share_contact_card \ -H "Authorization: Bearer $LINQ_API_KEY"await client.chats.shareContactCard({chatId});client.chats.share_contact_card({chat_id})client.Chats.ShareContactCard(context.TODO(), {chatId})The endpoint takes no request body — the card associated with the chat’s from phone number is shared automatically. There’s no confirmation the recipient saved it, so it’s safe to call once per day after the first outbound message in that chat.
See Sharing Contact Card for the full cadence and behavior notes.
Related
Section titled “Related”- Sharing Contact Card — push the configured card into an iMessage chat
- Error 2012 — contact card not found
- Error 2014 — contact card already exists
- API Reference: Contact Card