# Create Contact

Creates or updates a contact by hand, immediately subscribing the supplied email address, mobile number or both without opt-in confirmation. Existing field values supplied here are overwritten; automations may start. Unsubscribed addresses and unknown field IDs or tags are refused, never skipped. Requires add-contacts permission and counts toward the daily import limit. To let an address confirm through an opt-in process, use subscribe-contact-via-opt-in-process instead.

## Input schema:

```json
{
  "type": "object",
  "properties": {
    "email": {
      "type": [
        "null",
        "string"
      ],
      "description": "Email address of the contact; at least one of email and phoneNumber is required",
      "default": null,
      "maxLength": 250
    },
    "phoneNumber": {
      "type": [
        "null",
        "string"
      ],
      "description": "Mobile number with country code, as +49170... or 0049170...; at least one of email and phoneNumber is required",
      "default": null,
      "maxLength": 50
    },
    "tagId": {
      "type": [
        "null",
        "integer"
      ],
      "description": "Manual tag to assign to the contact; omit for none",
      "default": null,
      "minimum": 1
    },
    "fields": {
      "type": "array",
      "description": "Contact field values to write with the contact, each {fieldId, value} as get-contact and search-custom-fields name them",
      "default": null,
      "items": {
        "type": "object",
        "properties": {
          "fieldId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 15
          },
          "value": {
            "type": "string",
            "maxLength": 65535
          }
        },
        "required": [
          "fieldId",
          "value"
        ],
        "additionalProperties": false
      },
      "maxItems": 50
    },
    "accountId": {
      "type": [
        "null",
        "integer"
      ],
      "description": "User ID of the account; omit for the account the access token works in",
      "default": null,
      "minimum": 1
    }
  },
  "additionalProperties": false
}
```

## Output schema:

```json
{
  "type": "object",
  "required": [
    "accountId",
    "contactId",
    "email",
    "phoneNumber",
    "subscriptionStatus",
    "tagId",
    "fieldIds",
    "alreadyExisted",
    "editUrl"
  ],
  "properties": {
    "accountId": {
      "type": "integer"
    },
    "contactId": {
      "type": "integer"
    },
    "email": {
      "type": [
        "string",
        "null"
      ]
    },
    "phoneNumber": {
      "type": [
        "string",
        "null"
      ]
    },
    "subscriptionStatus": {
      "type": "string"
    },
    "tagId": {
      "type": [
        "integer",
        "null"
      ]
    },
    "fieldIds": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "alreadyExisted": {
      "type": "boolean"
    },
    "editUrl": {
      "type": "string"
    }
  }
}
```

