PlunkPlunk
API ReferenceContacts

Update contact

Update an existing contact's email, subscription state, or data fields.

PATCH
/contacts/{id}

Authorization

ApiKeyAuth

AuthorizationBearer <token>

API Key authentication. The project is automatically derived from the key.

/v1/track requires a public key (pk_*) — it is the one endpoint intended for client-side use, and a secret key is rejected there with 401.

Every other endpoint requires a secret key (sk_*) and rejects public keys with 401.

So the two key types are not interchangeable in either direction: pick the key that matches the endpoint you are calling.

In: header

Path Parameters

id*string

Request Body

application/json

email?string

Change the contact's email address. Returns 409 if another contact in the project already uses this email.

Formatemail
subscribed?boolean

Update subscription state. Flipping this fires contact.subscribed or contact.unsubscribed.

data?

Patch contact data. null deletes a key, empty strings are ignored, primitives are stored. Reserved keys are silently filtered out.

Response Body

application/json

application/json

application/json

application/json

curl -X PATCH "https://api.plunk.jimster.dev/contacts/string" \  -H "Content-Type: application/json" \  -d '{}'
{
  "id": "string",
  "email": "user@example.com",
  "subscribed": true,
  "data": {},
  "createdAt": "2019-08-24T14:15:22Z",
  "updatedAt": "2019-08-24T14:15:22Z"
}
{
  "success": false,
  "error": {
    "code": "INVALID_API_KEY",
    "message": "Invalid secret API key. This endpoint requires a secret key (sk_*), not a public key.",
    "statusCode": 401,
    "requestId": "8f14e45f-ceea-467a-9575-1f0f38e0b1c2"
  },
  "timestamp": "2025-01-15T10:30:00.000Z"
}
{
  "success": false,
  "error": {
    "code": "string",
    "message": "string",
    "statusCode": 0,
    "requestId": "string",
    "errors": [
      {
        "field": "string",
        "message": "string",
        "code": "string",
        "received": null
      }
    ],
    "details": {},
    "suggestion": "string"
  },
  "timestamp": "2019-08-24T14:15:22Z"
}
{
  "success": false,
  "error": {
    "code": "string",
    "message": "string",
    "statusCode": 0,
    "requestId": "string",
    "errors": [
      {
        "field": "string",
        "message": "string",
        "code": "string",
        "received": null
      }
    ],
    "details": {},
    "suggestion": "string"
  },
  "timestamp": "2019-08-24T14:15:22Z"
}