← All action domains

Cards

6 operations. Call each with POST https://app.chirply.io/api/v1/actions/<name> and a bearer token; the response is { "data": { "action", "summary", "result" } }. A read badge means the operation changes nothing; write requires the credential’s write scope.

Get a digital card

cards.get_cardread

Returns a digital business card and its share links (public page + vCard). Defaults to the calling user's own card; pass user_id for a specific teammate, slug for a card by its public URL segment, or ble_code after discovering a nearby digital business card over Bluetooth.

Parameters

FieldTypeRequiredDescription
user_idstring (uuid) (or null)optionalWhose card to fetch. Defaults to the caller.
slugstring (or null)optionalFetch by the card's public slug (…/card/<slug>) instead.
ble_codestring (or null)optionalResolve the four-character nearby-share code received from a business-card BLE advertisement.

Example

curl -X POST https://app.chirply.io/api/v1/actions/cards.get_card \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "user_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "slug": "example"
  }'
Test with your API key

Over MCP the same operation is the tool cards_get_card at https://app.chirply.io/api/mcp, same bearer token, same input.

Save a shared card to contacts

cards.import_cardwrite

Saves someone's published digital business card (by its public slug) into this account's CRM as a contact. If the person is already a contact (matched by phone/email) they're linked, not duplicated.

Also answers to import digital card, receive business card.

Parameters

FieldTypeRequiredDescription
slugstringrequiredThe card's public slug — the last segment of its /card/<slug> URL.

Example

curl -X POST https://app.chirply.io/api/v1/actions/cards.import_card \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "slug": "example"
  }'
Test with your API key

Over MCP the same operation is the tool cards_import_card at https://app.chirply.io/api/mcp, same bearer token, same input.

List digital cards

cards.list_cardsread

Lists the digital business cards in this account — each person's shareable card, whether it's published, its public URL and view count.

Parameters

No parameters — POST an empty body.

Example

curl -X POST https://app.chirply.io/api/v1/actions/cards.list_cards \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{}'
Test with your API key

Over MCP the same operation is the tool cards_list_cards at https://app.chirply.io/api/mcp, same bearer token, same input.

Save my digital card

cards.save_cardwrite

Creates or updates a person's digital business card (name, title, company, phones, emails, website, socials, bio, theme) and can publish or unpublish it. Publishing makes it world-readable at its public URL. Defaults to the calling user's card; an API key must pass user_id.

Also answers to edit digital card, publish business card, update my card.

Parameters

FieldTypeRequiredDescription
user_idstring (uuid) (or null)optionalWhose card to save. Defaults to the caller; required for API keys.
display_namestring (or null)optionalThe person's full name as shown on the card.
titlestring (or null)optionalJob title / role.
companystring (or null)optionalCompany or organization.
phonestring (or null)optionalPrimary phone number.
emailstring (or null)optionalPrimary email address.
phonesobject[] (or null)optionalAdditional phone numbers, each optionally labelled.
phones[].labelstring (or null)optionalOptional label, e.g. 'Mobile' or 'Office'.
phones[].valuestringrequiredThe phone number or email address.
emailsobject[] (or null)optionalAdditional email addresses, each optionally labelled.
emails[].labelstring (or null)optionalOptional label, e.g. 'Mobile' or 'Office'.
emails[].valuestringrequiredThe phone number or email address.
websitestring (or null)optionalWebsite URL.
addressobject (or null)optionalPostal address read off the card, if there was one.
address.line1string (or null)optionalStreet address.
address.line2string (or null)optionalSuite/unit (optional).
address.citystring (or null)optionalCity.
address.statestring (or null)optionalState/region.
address.postal_codestring (or null)optionalZIP/postal code.
address.countrystring (or null)optionalCountry.
headlinestring (or null)optionalA short tagline shown under the name.
biostring (or null)optionalA longer bio/about paragraph.
socialsobject[] (or null)optionalSocial/contact buttons shown on the card.
socials[].networkstringrequiredWhich network: website, linkedin, x, instagram, facebook, youtube, tiktok, whatsapp, calendly, github, or other.
socials[].urlstringrequiredThe full URL to that profile or link.
avatar_urlstring (or null)optionalPublic URL of the profile photo shown on the card.
cover_urlstring (or null)optionalPublic URL of the cover/banner image behind the header.
accent_colorstring (or null)optionalAccent color as a hex string, e.g. #2563eb.
theme"light" | "dark" (or null)optionalCard color theme.
is_publicboolean (or null)optionalPublish (true) or unpublish (false) the card.

Example

curl -X POST https://app.chirply.io/api/v1/actions/cards.save_card \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "user_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "display_name": "Example"
  }'
Test with your API key

Over MCP the same operation is the tool cards_save_card at https://app.chirply.io/api/mcp, same bearer token, same input.

Scan a business card

cards.scanwriteconfirm

Reads a photo of a physical business card with AI vision and saves the details as a CRM contact — creating a new contact, or updating the one it matches by phone/email — with the card's front (and optional back) images attached. Uses this account's own OpenRouter/AI key, so the AI cost is billed to the account. Images are supplied as a data URL (data:image/jpeg;base64,…) or an https image URL. AN https IMAGE URL IS FETCHED FROM OUR SERVERS and handed to the vision provider, so everything in it — host, path, query string — is disclosed to whoever operates that address. That, and the AI spend, is why it asks for confirmation.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Also answers to scan business card, read business card, card to contact.

Parameters

FieldTypeRequiredDescription
image_frontstringrequiredThe FRONT of the card — a data URL (data:image/...;base64,...) or an https image URL that our servers will fetch directly.
image_backstring (or null)optionalOptional BACK of the same card, same format as image_front.
contact_idstring (uuid) (or null)optionalAttach the card to this existing contact instead of matching/creating.
create_newbooleanoptionalForce creating a new contact even if one already matches the card's phone/email. Default: false

Example

curl -X POST https://app.chirply.io/api/v1/actions/cards.scan \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "image_front": "example"
  }'
Test with your API key

Over MCP the same operation is the tool cards_scan at https://app.chirply.io/api/mcp, same bearer token, same input.

Upload card image

cards.upload_card_assetwrite

Upload a profile photo or cover/banner image for a digital business card. Stores the image permanently in the account's own R2 storage (up to 10 MB, which can incur storage and egress cost) and returns its public URL — pass that URL as avatar_url or cover_url on cards.save_card to actually attach it to a card. This call alone does not change any card.

Also answers to upload card photo, upload card avatar, upload card cover.

Parameters

FieldTypeRequiredDescription
kind"avatar" | "cover"requiredWhich image this is: the profile photo, or the cover/banner image.
content_base64stringrequiredImage bytes encoded as base64, without a data-URL prefix.

Example

curl -X POST https://app.chirply.io/api/v1/actions/cards.upload_card_asset \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "kind": "avatar",
    "content_base64": "example"
  }'
Test with your API key

Over MCP the same operation is the tool cards_upload_card_asset at https://app.chirply.io/api/mcp, same bearer token, same input.

The machine-readable version of this page is GET https://app.chirply.io/api/v1/actions?domain=cards — same operations, with full JSON Schemas. Authentication, errors and rate limits are covered in the API documentation home.