Explain whether a profile matches conditions
Each condition’s answer for this profile, with what the profile has (a value, a count, a date), and whether the conditions as a whole match. A merged profile answers for the profile it was merged into.
Each condition’s answer for this profile, with what the profile has (a value, a count, a date), and whether the conditions as a whole match. A merged profile answers for the profile it was merged into.
apiKey readAuthorizationBearer <token>A workspace API key (pf_…), created under Developers → API keys.
Scope: read
id*stringuuididempotency-key?stringRun this write once: a retry with the same key gets the first answer (24 hours).
1 <= length <= 255application/json- body
conditions*||||||||OK
application/json- response
matches*booleanconditions*array<>curl -X POST 'https://api.postforge.dev/v1/profiles/497f6eca-6276-4993-bfeb-53cbbbba6f08/explain' \ -H 'Content-Type: application/json' \ -d '{ "conditions": { "type": "and", "conditions": [ { "type": "and", "conditions": [ null ] } ] }}'{ "matches": true, "conditions": [ { "path": "string", "condition": { "type": "profile_trait", "trait": "email", "test": { "operator": "is", "value": "string" } }, "passes": true, "found": "string" } ]}Count the profiles that match conditions POST
How many profiles (the known ones the profiles list shows) meet the conditions: who they are, their custom fields, what they bought, their consent, whether their address is suppressed, what they did and where they live, in groups of `and` and `or` (at most 4 levels and 50 conditions). A condition that can’t be answered (an unknown custom field, a test that doesn’t fit its type, a money amount without its currency) is a 400 with its path.
List a profile’s events GET
The timeline, newest first (or oldest first with `order=oldest`), a page at a time by cursor (`nextCursor` until the last page). `from` and `to` keep it to a period: only those months are read.