Appearance
List contact properties
Every property defined on your team, newest first.
http
GET /v1/contact-propertiesRequires a Full access API key.
Query parameters
| Parameter | Type | Description |
|---|---|---|
limit | number | How many to return. Default 20, min 1, max 100. |
after | string | Return properties after this id. Cannot be combined with before. |
before | string | Return properties before this id. Cannot be combined with after. |
Example
bash
curl "https://api.sendgrail.com/v1/contact-properties" \
-H "Authorization: Bearer $SENDGRAIL_API_KEY"js
const res = await fetch('https://api.sendgrail.com/v1/contact-properties', {
headers: { Authorization: `Bearer ${process.env.SENDGRAIL_API_KEY}` },
});
const { data, has_more } = await res.json();Response
json
{
"object": "list",
"has_more": false,
"data": [
{
"object": "contact_property",
"id": "b6d24b8e-af0b-4c3c-be0c-359bbd97381e",
"key": "company_name",
"type": "string",
"fallback_value": "Acme Corp",
"created_at": "2026-07-14T19:44:32+00:00"
}
]
}has_more tells you whether another page exists — there is no total, because a keyset paginator never counts the table. To walk every page, pass the last id you saw as after until has_more is false. See Pagination.