{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/linkbreakers-com/json-schema/linkbreakers-com-create-contact-link-request-schema.json",
  "title": "CreateContactLinkRequest",
  "description": "Request to create a new contact card link.",
  "x-generated": "2026-10-30",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/linkbreakers-com-openapi.json#/components/schemas/CreateContactLinkRequest",
  "properties": {
    "customDomainId": {
      "description": "Optional custom domain ID (UUID). Leave empty to use the default domain.\nOnly provide if the user explicitly asks for a specific custom domain.",
      "type": "string"
    },
    "directoryId": {
      "description": "Directory to organize this link into. If empty, link is created at root level.",
      "type": "string"
    },
    "expiredDestination": {
      "description": "Where visitors are sent once the link has expired.\nEmpty serves the built-in expired page instead.",
      "type": "string"
    },
    "expiresAt": {
      "description": "When the link stops resolving. Empty means it never expires.\nMust be in the future. Once it passes the link is removed from the\nworkspace and only the expired destination is served.",
      "format": "date-time",
      "type": "string"
    },
    "fallbackDestination": {
      "description": "Optional fallback URL if vCard download fails or is not supported.",
      "title": "The fallback destination URL to use when vCard download fails or is not supported",
      "type": "string"
    },
    "id": {
      "description": "Optional pre-generated link ID (UUID).\nThe create wizard generates the id up front and navigates to it, so the\nlink has to be created with that id or the page waits on a link that never\narrives. Skipped from the AI tool schema for the same reason as on\nCreateLinkRequest: on a create there is nothing to alias, and exposing it\nonly invites the model to invent a UUID.",
      "type": "string"
    },
    "metadata": {
      "additionalProperties": {
        "type": "string"
      },
      "description": "A map of string key-value pairs. All values must be strings. Nested objects or arrays are not supported. Maximum of 50 keys.",
      "type": "object"
    },
    "name": {
      "title": "The name of the link",
      "type": "string"
    },
    "purpose": {
      "description": "What the user is trying to achieve with this link, in one or two sentences.\nThe link's assistant conversations read it as context, so it is restated\nwhenever the workflow changes shape.",
      "type": "string"
    },
    "qrcodeDesignId": {
      "description": "The QR Code design ID (UUID).\nIf you include this value, the specified design will be associated to this link only.\nA design can belong to one record at a time (Link or QR Code Template).\nTrying to use a design that's already assigned will cause an error.",
      "type": "string"
    },
    "qrcodeEnabled": {
      "description": "Whether the link has a QR code. Defaults to true. When false, the link is created without any QR code: no QR code design is created, no image is generated, qrcode_design_id stays empty and qrcode_signed_url is never set. The shortlink and workflow are unaffected. qrcode_template_id is still stored and used if the QR code is turned on later. Cannot be combined with qrcode_design_id or wait_for_qrcode=true.",
      "type": "boolean"
    },
    "qrcodeTemplateId": {
      "description": "The ID of the QR Code template (UUID)\nIf not given, the default QR Code template will be used to generate the QR Code design.",
      "type": "string"
    },
    "shortlink": {
      "description": "The shortlink for the link\nIf not given, the shortlink will be generated by the system.",
      "type": "string"
    },
    "tags": {
      "description": "List of tags to associate with the link. If a tag doesn't exist, it will be created.",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "vcardData": {
      "$ref": "#/$defs/VCardData",
      "description": "Contact information for the vCard link. This field is required.",
      "title": "vCard contact information (required)"
    },
    "waitForQrcode": {
      "description": "Wait for QR code generation to complete. Note: This makes the request slower compared to asynchronous generation.",
      "type": "boolean"
    }
  },
  "required": [
    "vcardData"
  ],
  "type": "object",
  "$defs": {
    "VCardData": {
      "properties": {
        "buttonLabel": {
          "title": "Custom label for the contact button",
          "type": "string"
        },
        "city": {
          "title": "City for the vCard address",
          "type": "string"
        },
        "country": {
          "title": "Country for the vCard address",
          "type": "string"
        },
        "email": {
          "title": "Email address for the vCard",
          "type": "string"
        },
        "firstName": {
          "title": "First name for the vCard (required for VCARD links)",
          "type": "string"
        },
        "lastName": {
          "title": "Last name for the vCard (required for VCARD links)",
          "type": "string"
        },
        "organization": {
          "title": "Organization/company name for the vCard",
          "type": "string"
        },
        "phone": {
          "title": "Phone number for the vCard",
          "type": "string"
        },
        "phoneIsWhatsapp": {
          "title": "Whether the phone number is a WhatsApp number",
          "type": "boolean"
        },
        "phoneSmsEnabled": {
          "title": "Whether visitors can also text the phone number",
          "type": "boolean"
        },
        "postalCode": {
          "title": "Postal/ZIP code for the vCard address",
          "type": "string"
        },
        "saveButtonEnabled": {
          "description": "Whether the card shows its save button (\"Add to contacts\"). Defaults to true when unset.",
          "type": "boolean"
        },
        "socialLinks": {
          "items": {
            "$ref": "#/$defs/VCardSocialLink",
            "type": "object"
          },
          "title": "Social media links associated with the contact",
          "type": "array"
        },
        "state": {
          "title": "State/province for the vCard address",
          "type": "string"
        },
        "streetAddress": {
          "title": "Street address for the vCard",
          "type": "string"
        },
        "title": {
          "title": "Job title for the vCard",
          "type": "string"
        },
        "website": {
          "title": "Website URL for the vCard",
          "type": "string"
        }
      },
      "title": "VCardData contains the contact information for vCard links",
      "type": "object"
    },
    "VCardSocialLink": {
      "properties": {
        "platform": {
          "description": "Platform identifier picking the icon. Leave it empty and the API names it\nfrom the URL, which is what you normally want. Known values: appstore,\nplaystore, instagram, tiktok, twitter, facebook, youtube, linkedin,\ngithub, medium, whatsapp, telegram, discord, slack, spotify, applemusic,\ntwitch, snapchat, pinterest, reddit, calendly, website.",
          "type": "string"
        },
        "url": {
          "title": "Profile URL for this social platform",
          "type": "string"
        }
      },
      "title": "Social link entry for a vCard contact card",
      "type": "object"
    }
  }
}