---
updatedAt: 2026-04-30T13:46:47.000Z
agentTools:
  siteIndex: https://developers.pismo.io/llms.txt
  projectIndex: https://developers.pismo.io/pismo-docs/llms.txt
---

# Update Visa CTP customer

Update customer data in the Visa Click to Pay service.

This endpoint generates a [Click to Pay event generated](https://developers.pismo.io/events/docs/cards-tokenization-click-to-pay-1) event.

**Notes**:

- Any field not passed is not updated.

- This endpoint takes an account token - an access token encoded with a Pismo account ID.

- The process is asynchronous, success or failure is indicated in the generated event.

- This is a PCI endpoint, use the https://gw-pci.pismolabs.io environment.


# OpenAPI definition

```json
{
  "openapi": "3.1.0",
  "info": {
    "title": "Card issuing - Tokenization",
    "description": "API endpoints for card tokenization.",
    "version": "1.0.0",
    "contact": {
      "name": "API Support",
      "url": "https://developers.pismo.io/support"
    },
    "license": {
      "name": "Copyright Pismo"
    }
  },
  "servers": [
    {
      "url": "https://gw-pci.pismolabs.io/cards-tokenization",
      "description": "PCI API server for testing"
    },
    {
      "url": "https://pci.pismolabs.io/cards-tokenization",
      "description": "Sandbox API server for testing."
    }
  ],
  "tags": [
    {
      "name": "Visa Click to Pay",
      "description": "Visa Click to Pay service endpoints"
    }
  ],
  "components": {
    "parameters": {
      "CidHeader": {
        "name": "x-cid",
        "in": "header",
        "schema": {
          "type": "string"
        },
        "description": "Request correlation ID used for tracking on Pismo platform."
      },
      "CustomerIDheader": {
        "name": "x-customer-id",
        "in": "header",
        "required": true,
        "schema": {
          "type": "integer"
        },
        "description": "Customer ID"
      },
      "TenantHeader": {
        "name": "x-tenant",
        "in": "header",
        "schema": {
          "type": "string"
        },
        "description": "Pismo organization/tenant ID",
        "required": true
      }
    },
    "schemas": {
      "ClickToPayBadRequest": {
        "type": "object",
        "properties": {
          "code": {
            "type": "number",
            "description": "HTTP response code",
            "example": 400
          },
          "message": {
            "type": "string",
            "description": "Error description"
          },
          "details": {
            "type": "array",
            "description": "Error details",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "ClickToPayConsent": {
        "type": "object",
        "description": "Consent details",
        "required": [
          "time_of_consent"
        ],
        "properties": {
          "time_of_consent": {
            "type": "string",
            "description": "Date/time when consent becomes valid, in ISO UTC format YYYY-MM-DDThh:mm:ss.000Z. Only accepts present and past dates.\n",
            "example": "2020-05-05T12:12:12.000Z",
            "pattern": "\\d\\d\\d\\d-\\d\\d-\\d\\dT\\d\\d:\\d\\d:\\d\\d\\.000Z"
          },
          "version": {
            "type": "string",
            "description": "Terms and conditions version that the customer accepted.",
            "minLength": 1,
            "maxLength": 9,
            "example": "1.0"
          },
          "presenter": {
            "type": "string",
            "description": "Text identifying consent presenter.",
            "minLength": 1,
            "maxLength": 30,
            "example": "Acme Bank"
          }
        }
      },
      "ClickToPayCustomerInfo": {
        "type": "object",
        "required": [
          "locale"
        ],
        "properties": {
          "locale": {
            "$ref": "#/components/schemas/Locale"
          },
          "first_name": {
            "type": "string",
            "description": "Customer first name",
            "minLength": 1,
            "maxLength": 35,
            "example": "Alex"
          },
          "middle_name": {
            "type": "string",
            "description": "Customer middle name",
            "minLength": 1,
            "maxLength": 35,
            "example": "Robert"
          },
          "last_name": {
            "type": "string",
            "description": "Customer last name",
            "minLength": 1,
            "maxLength": 35,
            "example": "Miller"
          },
          "country_code": {
            "type": "string",
            "format": "ISO 3166-1-alpha3",
            "description": "Country code&mdash;3-character ISO 3166 (Alpha 3) format",
            "minLength": 1,
            "maxLength": 3,
            "example": "USA"
          },
          "emails": {
            "type": "array",
            "description": "Customer emails",
            "minLength": 1,
            "maxLength": 5,
            "items": {
              "type": "string",
              "description": "Email address",
              "format": "email",
              "example": "anita_drink@provider.com"
            }
          },
          "phones": {
            "type": "array",
            "description": "Customer phones",
            "minLength": 1,
            "maxLength": 5,
            "items": {
              "type": "string",
              "description": "Customer phone",
              "example": "5545999999999"
            }
          },
          "national_identifiers": {
            "type": "array",
            "description": "Customer national identifiers",
            "minLength": 1,
            "maxLength": 5,
            "items": {
              "required": [
                "type",
                "value"
              ],
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "description": "Identification type",
                  "enum": [
                    "PASSPORT",
                    "DRIVING_LICENSE",
                    "NATIONAL_IDENTITY"
                  ],
                  "example": "NATIONAL_IDENTITY"
                },
                "value": {
                  "type": "string",
                  "description": "Identification type value",
                  "minLength": 1,
                  "maxLength": 24,
                  "example": "A123456"
                }
              }
            }
          },
          "consent": {
            "$ref": "#/components/schemas/ClickToPayConsent"
          }
        }
      },
      "ClickToPayInternalServerError": {
        "type": "object",
        "description": "Click to Pay internal server error",
        "properties": {
          "code": {
            "type": "number",
            "description": "HTTP response code",
            "example": 500
          },
          "message": {
            "type": "string",
            "description": "Error description",
            "example": "Internal server error"
          }
        }
      },
      "ClickToPayRateLimitError": {
        "type": "object",
        "description": "Click to Pay rate limit error - Visa API throttling",
        "properties": {
          "code": {
            "type": "number",
            "description": "HTTP response code",
            "example": 429
          },
          "message": {
            "type": "string",
            "description": "Error description",
            "example": "Rate limit exceeded"
          },
          "details": {
            "type": "array",
            "description": "Error details from Visa",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "ClickToPayUpdateCustomerRequest": {
        "type": "object",
        "required": [
          "owner_bid"
        ],
        "properties": {
          "owner_bid": {
            "$ref": "#/components/schemas/OwnerBid"
          },
          "customer_information": {
            "$ref": "#/components/schemas/ClickToPayCustomerInfo"
          }
        }
      },
      "Locale": {
        "type": "string",
        "description": "Consumer preferred locale (language and country).\n\n**Format**: two-letter ISO-639-1 language in lowercase + underscore (\"_\") + two-letter ISO 3166-1 country code in uppercase.\n",
        "example": "en_US"
      },
      "OwnerBid": {
        "type": "string",
        "description": "Owner business ID. Identifies the issuing entity creating or managing enrollment in Click to Pay.\n",
        "example": "1000052"
      }
    },
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "Account token - token encoded with a Pismo account ID. Tokens can expire quickly, which can result in a \"**401 Unauthorized**\" error.",
        "bearerFormat": "JWT"
      }
    }
  },
  "security": [
    {
      "BearerAuth": []
    }
  ],
  "paths": {
    "/v1/clicktopay/visa/manage/customer": {
      "put": {
        "summary": "Update Visa CTP customer",
        "description": "Update customer data in the Visa Click to Pay service.\n\nThis endpoint generates a [Click to Pay event generated](https://developers.pismo.io/events/docs/cards-tokenization-click-to-pay-1) event.\n\n**Notes**:\n\n- Any field not passed is not updated.\n\n- This endpoint takes an account token - an access token encoded with a Pismo account ID.\n\n- The process is asynchronous, success or failure is indicated in the generated event.\n\n- This is a PCI endpoint, use the https://gw-pci.pismolabs.io environment.\n",
        "operationId": "post-v1-clicktopay-manage_customer",
        "tags": [
          "Visa Click to Pay"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/TenantHeader"
          },
          {
            "$ref": "#/components/parameters/CustomerIDheader"
          },
          {
            "$ref": "#/components/parameters/CidHeader"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClickToPayUpdateCustomerRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Accepted"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClickToPayBadRequest"
                },
                "examples": {
                  "bad_request": {
                    "value": {
                      "code": 400,
                      "message": "bad request"
                    }
                  },
                  "invalid_network": {
                    "value": {
                      "code": 400,
                      "message": "invalid network"
                    }
                  },
                  "bad_request_detailed": {
                    "value": {
                      "code": 400,
                      "message": "bad request",
                      "details": [
                        "AccountID: cannot be blank",
                        "CustomerID: cannot be blank",
                        "OrgID: cannot be blank."
                      ]
                    }
                  },
                  "customer_not_in_click_to_pay": {
                    "value": {
                      "code": 400,
                      "message": "customer not enabled to click to pay"
                    }
                  },
                  "click_to_pay_not_enabled_to_tenant": {
                    "value": {
                      "code": 400,
                      "message": "click to pay is not enabled to tenant"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests - Visa rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClickToPayRateLimitError"
                },
                "examples": {
                  "rate_limit_exceeded": {
                    "value": {
                      "code": 429,
                      "message": "Rate limit exceeded",
                      "details": [
                        "rate limit exceeded"
                      ]
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClickToPayInternalServerError"
                },
                "examples": {
                  "internal_server_error": {
                    "value": {
                      "code": 500,
                      "message": "internal server error"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
```