Count the profiles that match conditions
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.
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.
apiKey readAuthorizationBearer <token>A workspace API key (pf_…), created under Developers → API keys.
Scope: read
idempotency-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
count*integercurl -X POST 'https://api.postforge.dev/v1/profiles/count' \ -H 'Content-Type: application/json' \ -d '{ "conditions": { "type": "and", "conditions": [ { "type": "and", "conditions": [ null ] } ] }}'{ "count": 0}Update a profile PATCH
Changes custom fields. Every value is checked against its field’s type: 422 `custom_field_invalid` with each refused field in `errors`. A merged profile answers with the profile it joined; its id differs from the one asked for.
Explain whether a profile matches conditions POST
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.