Skip to content
Last updated

Personalization API Quickstart

Using the Personalization API, developers can send the Treasure Data personalization service a customer identifier as well as updated customer information. A successful call to the personalization API performs the following actions:

  • Events configured in the POST body are ingested into Plazma. The Personalization API behaves similarly to the Ingest API. The additional behavior is that real-time tokens are validated and used to route to reactors (the back-end engines for real-time processing). Here is a diagram of the process flow for the API.

    diagram

  • All matching personalization payloads are returned in the response payload. If the customer meets the entry criteria for a personalization, the system returns the text of offers as well as any additional customer information that may be pertinent to the offer.

Limitations

  • The API requires the real-time personalization service to be enabled on your account.
  • The API supports a maximum of 50 tokens per personalization service.

Prerequisites

Authentication

The API must be authorized with

  • a TD Write API key or Master API key for the account
  • a personalization token
  • the correct content type: application/vnd.treasuredata.v1+json

For example, when making the API call from cURL, you would need these headers:

--header 'Authorization: TD1 {account_id}/{apikey}'
--header 'WP13n-Token: {account_id}/{instance_id}/{token}'
--header 'Content-Type: application/vnd.treasuredata.v1+json'

Endpoint

The Web Personalization API has one ingestion endpoint per region:

{regionBaseURL}/{database}/{table}

Specify your endpoint using the baseURL for your region.

RegionBase URL for Endpoint
USA (us01)us01.p13n.in.treasuredata.com
Europe (eu01)eu01.p13n.in.treasuredata.com
Japan (ap01 or "co.jp")ap01.p13n.in.treasuredata.com

Parameters

The API uses the following path parameters:

  • database — the database that was used to create and configure the personalization
  • table — the table that contains the customer information.

For example, when making the API call from cURL, it could look like this:

POST https://us01.p13n.in.treasuredata.com/{database}/{table}

Request Body

The request body is a JSON object that contains at least one identifier for the customer. It can also contain event data and additional attributes to be updated in the real-time system.

Example

{
    "td_client_id": "42a508e2-d9b1-4baa-9eb2-6c3fb8bd5e16",
    "td_url": "https://example.com/retail/shop/women",
    "td_path": "/retail/shop/women",
    "product_name": "women's-tank-top",
    "product_category": "women",
    "product_list": ["women's-running-shoes", "kids'-hoodie", "women's-tank-top"],
    "category_list": ["women", "kids"]
}

Fields

FieldTypeDescription
td_client_idstringThe Treasure Data client ID associated with the customer (typically a UUID).
td_urlstringThe full URL of the page where the event occurred.
td_pathstringThe path portion of the URL (used for event filtering and personalization rules).
Additional attributesanyAny additional event data or customer attributes (e.g., product_name, product_category, arrays like product_list) to be ingested and used in personalization logic.

At least one identifier (such as td_client_id or email) must be provided to identify the customer. The personalization service evaluates the event data against your configured personalization rules and returns matching offers in the response.

Responses

The API returns a JSON response containing the following fields:

  • Success : If the HTTP status code indicates success, offers are returned in the response payload
  • Failure : If the HTTP status code indicates failure, an error code and message are returned in the response payload

200 Success

ResponseDescriptionExample
200 OKwith payload200 with payload
200 OKwithout payload200 without payload

4xx Failure

ResponseExample
400400 error
415415 error
429429 error

Error Codes

Error CodeMessage
2003Kinesis error due to limit being exceeded (status 429)
2013Lambda total concurrent execution exceeds the reserved concurrency (status 429)
3000RT token was not provided (WP13n-Token header).
3001RT token is not in configuration.
3002RT token account conflicts with Authed user account.
3003RT token is in an invalid format.
3004Invalid event object.
3005Request origin not in IP whitelist.

Example

Request

export BASE_URL="us01.p13n.in.treasuredata.com"
export DATABASE="your_database"
export TABLE="pageviews"
export API_KEY="1234/abcdefghijklmnopqrstuvwxyz"
export ACCOUNT_ID="12345"
export INSTANCE_ID="67890"
export TOKEN="abcdef123456"

curl -X POST "https://${BASE_URL}/${DATABASE}/${TABLE}" \
--header 'Content-Type: application/vnd.treasuredata.v1+json' \
--header "Authorization: TD1 ${API_KEY}" \
--header "WP13n-Token: ${ACCOUNT_ID}/${INSTANCE_ID}/${TOKEN}" \
--data '{
    "td_client_id": "42a508e2-d9b1-4baa-9eb2-6c3fb8bd5e16",
    "td_url": "https://example.com/retail",
    "td_path": "/retail"
}'

Response

{
  "offers": {
    "offer_for_high_loyalty": {
      "attributes": {
        "status": "high"
      },
      "batch_segments": [{
          "id": "1588214"
      }]
    }
  }
}