Skip to main content

Track a Signup

Call /v1/evaluate/signup when a customer creates an account on your site. Pinch evaluates the new identity against historical patterns and emits a decision: APPROVE (let the account through), DECLINE (block the signup), or REVIEW (queue for manual approval).

Most fields below are optional but improve accuracy. At minimum you need a stable customerId, an email, and the device fingerprint if you've installed the JS SDK.

Request​

POST /v1/evaluate/signup HTTP/1.1
Host: api.pinch.ai
Authorization: {api-key}
Content-Type: application/json

Body​

FieldTypeRequiredDescription
customerIdstringyesYour platform's stable identifier for this customer.
firstNamestringyesCustomer's first name.
lastNamestringyesCustomer's last name.
usernamestringyesLogin username — often the email.
websitestringnoDomain where the signup happened. Useful when a single Pinch account serves multiple stores.
referralCodeAppliedstringnoReferral code the signup used, if any.
referrerIDstringnocustomerId of the referring customer.
referralIDstringnoYour own referral campaign identifier.
contactInformationarrayyesArray of contact entries (see below).
deviceFingerprintsarrayrecommended[{ "deviceIdentifier": "{visitorId}" }]. Strongly recommended.

Contact information​

Each contactInformation entry has a contactType of ContactAddress, EMail, or Phone. Send at least one EMail. Address and phone improve accuracy substantially.

  • EMail — { "contactType": "EMail", "address": "user@example.com" }
  • Phone — { "contactType": "Phone", "number": "+1-555-123-4567" }
  • ContactAddress — { "contactType": "ContactAddress", "address": { line1, line2, city, state, postalCode, country, geoCode: { longitude, latitude } }, "addressType": "Business" | "Shipping" | "Billing" }

Example request​

curl https://api.pinch.ai/v1/evaluate/signup \
-H "Authorization: $PINCH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"customerId": "user_12345abcde",
"firstName": "John",
"lastName": "Doe",
"username": "johndoe@example.com",
"website": "https://www.demostore.com",
"contactInformation": [
{
"contactType": "ContactAddress",
"address": {
"line1": "1234 Main St",
"line2": "Suite 500",
"city": "San Francisco",
"state": "CA",
"postalCode": "94101",
"country": "US"
},
"addressType": "Business"
},
{ "contactType": "EMail", "address": "johndoe@example.com" },
{ "contactType": "Phone", "number": "+1-555-123-4567" }
],
"deviceFingerprints": [
{ "deviceIdentifier": "abc123visitorId" }
]
}'

Response​

{
"providerSignupID": "user_12345abcde",
"pinchSignupID": "psgn_4a8c1f9e",
"Decisions": [
{
"decisions": [
{
"decisionType": "APPROVE/DECLINE",
"decision": "APPROVE",
"subDecision": "Default Approve",
"decisionReason": "No risk signals detected",
"abuseScore": 8
}
]
}
]
}
FieldDescription
providerSignupIDEcho of your customerId.
pinchSignupIDPinch's internal identifier for this signup event.
Decisions[].decisions[].decisionAPPROVE, DECLINE, or REVIEW.
Decisions[].decisions[].subDecisionThe workflow branch that matched.
Decisions[].decisions[].decisionReasonHuman-readable explainer.
Decisions[].decisions[].abuseScore0–100 risk score.

Decision semantics​

DecisionRecommended action
APPROVECreate the account normally.
DECLINEBlock the signup. Show a generic error rather than calling out fraud detection — don't tip off bad actors.
REVIEWCreate the account in a "pending verification" state. Require email + phone verification, or queue for manual approval.

Common abuse patterns detected at signup​

  • Multi-account abuse — a single device, IP, or address creating multiple accounts to chain new-customer promotions
  • Disposable email signups — accounts created on throwaway domains, often paired with prepaid cards
  • Referral fraud — fake referrals to extract bonus credits, especially when referrerID is set and the referrer's behavior is also abusive
  • Bot signups — devices that have created accounts at suspiciously high velocity

Errors​

See Errors for the full envelope. Endpoint-specific codes:

HTTPCodeMeaning
400invalid_requestRequired field missing
409duplicate_customercustomerId already exists
422unprocessable_entityField values failed validation
429rate_limitedSlow down

See also​