2025-01-01

Contact card received

Triggered when an iMessage user shares their Name & Photo (contact card) with one of your lines.

A contact belongs to a line, not to an individual chat. You receive one event per person who shares their contact, regardless of how many chats they have in common with your line, and the event fires again whenever the shared contact's name or media changes.

postWebhookcontact_card.received.v2025-01-01

Payload

api_versionstring required

API version for the webhook payload format

webhook_versionstring required

Date-based webhook payload version. Determined by the ?version= query parameter in your webhook subscription URL. If no version parameter is specified, defaults based on subscription creation date.

event_type'message.sent' | 'message.received' | 'message.read' | 'message.delivered' | 'message.failed' | 'message.edited' | 'reaction.added' | 'reaction.removed' | 'poll.received' | 'poll.failed' | 'poll.sent' | 'poll.delivered' | 'poll.read' | 'poll.updated' | 'poll.vote.added' | 'poll.vote.removed' | 'poll.reaction.added' | 'participant.added' | 'participant.removed' | 'chat.created' | 'chat.group_name_updated' | 'chat.group_icon_updated' | 'chat.group_name_update_failed' | 'chat.group_icon_update_failed' | 'chat.background_updated' | 'chat.background_update_failed' | 'chat.typing_indicator.started' | 'chat.typing_indicator.stopped' | 'phone_number.status_updated' | 'phone_number.assigned' | 'phone_number.released' | 'contact_card.received' | 'call.initiated' | 'call.ringing' | 'call.answered' | 'call.ended' | 'call.failed' | 'call.declined' | 'call.no_answer' | 'location.sharing.started' | 'location.sharing.stopped' | 'payment.succeeded' | 'payment.canceled' | 'payment.expired' | 'payment.declined' | 'payment.authorized' | 'connection.created' | 'connection.revoked' | 'zero_day_retention.updated' | 'phone_number.forwarding_updated' | 'environment.line_moved' | 'contact_card.created' | 'contact_card.updated' | 'contact_card.deleted' | 'api_token.created' | 'api_token.renamed' | 'api_token.expiry_scheduled' | 'api_token.expired' | 'api_token.activated' | 'api_token.deleted' | 'environment.created' | 'environment.renamed' | 'environment.deleted' | 'webhook_subscription.created' | 'webhook_subscription.deleted' | 'webhook_subscription.target_url_changed' | 'webhook_subscription.enabled' | 'webhook_subscription.disabled' | 'webhook_subscription.events.updated' | 'webhook_subscription.phone_numbers.updated' | 'webhook_subscription.routing_headers_set' | 'webhook_subscription.routing_headers_cleared' | 'team_member.added' | 'team_member.signed_in' | 'team_member.signed_out' required

Valid webhook event types that can be subscribed to.

Note: message.edited is only delivered to subscriptions using webhook_version: "2026-02-03". Subscribing to this event on a v2025 subscription will not produce any deliveries.

event_idstring uuid required

Unique identifier for this event (for deduplication)

created_atstring date-time required

When the event was created

trace_idstring required

Trace ID for debugging and correlation across systems.

partner_idstring required

Partner identifier. Present on all webhooks for cross-referencing.

Example payload

{
  "api_version": "v3",
  "webhook_version": "2025-01-01",
  "event_id": "550e8400-e29b-41d4-a716-446655440000",
  "created_at": "2025-11-23T17:30:00Z",
  "trace_id": "abc123def456",
  "partner_id": "partner_abc123",
  "data": {
    "sender_handle": "+14155559876",
    "owner_handle": "+12025551234",
    "first_name": "Jane",
    "last_name": "Appleseed",
    "media_url": "https://cdn.linqapp.com/attachments/ephemeral/9f1c8e2a-4b7d-4c1e-9f3a-2d8e5a1c7b40/contact-avatar.png?Expires=1787604312"
  }
}

Response

Webhook received successfully

Changes

Webhooks have no change history: a webhook is keyed by its event name rather than a path and method, so no recorded change can name it.