Docs menu
API reference

POST /api/v1/feedback

Report a screening's outcome. Report what a player turned out to be. Generated from the OpenAPI file.

Last updated

Overview

POST https://api.inlineshield.io/api/v1/feedback

Tell InlineShield what a screened player turned out to be (fraud or legit), by the requestId the API returned or by the /check token. Accepted for screenings up to 180 days old by requestId; a /check token is kept for about a day after the screening, so later feedback must use the requestId. Sending the same feedback again changes nothing (changed: false).

Feedback on a test screening is accepted but never recorded (changed: false). Limited per key to your plan's per-minute limit; never counted against the quota and accepted while the account is over it.

Authentication

Send your secret API key in the X-Api-Key header.

Your secret API key (bs_live_… or bs_test_…), from the console under Settings › Keys. Never put it in a browser or an app. The header name X-ApiKey is also accepted (deprecated).

Request body

JSON (Content-Type: application/json), required.

Send exactly one of requestId or token.

FieldTypeRequiredDescription
requestIdstringnoThe requestId the API returned.
tokenstringnoThe /check token. A token is kept for about a day after the screening; for later feedback send the requestId (/siteverify returns it).
outcomestringyesValues: fraud, legit
categorystring or nullnoValues: bonus_abuse, multi_account, chargeback, kyc_failed, bot, good_customer, other, null
notestring or nullnoAt most 200 characters after trimming. Never shown to other operators.at most 200 characters

Request examples

{
  "requestId": "AUD-MHH3K33H-5B9D1F3A7C02",
  "outcome": "fraud",
  "category": "bonus_abuse",
  "note": "Second account, same payment card."
}

The first example as a cURL command:

cURL
curl -X POST https://api.inlineshield.io/api/v1/feedback \
  -H "X-Api-Key: $INLINESHIELD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "requestId": "AUD-MHH3K33H-5B9D1F3A7C02",
  "outcome": "fraud",
  "category": "bonus_abuse",
  "note": "Second account, same payment card."
}'

Responses

200 OK

Accepted. changed is false when nothing new was recorded (the same feedback again, or a test screening).

Headers: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.

FieldTypeRequiredDescription
successtrueyes
outcomestringyesValues: fraud, legit
categorystring or nullyesValues: bonus_abuse, multi_account, chargeback, kyc_failed, bot, good_customer, other, null
changedbooleanyes
{
  "success": true,
  "outcome": "fraud",
  "category": "bonus_abuse",
  "changed": false
}

400 Bad Request

Not exactly one of requestId or token, a bad outcome, category or note, or (without the rate-limit headers) a body that is not valid JSON.

Headers: X-RateLimit-Limit (optional), X-RateLimit-Remaining (optional), X-RateLimit-Reset (optional).

FieldTypeRequiredDescription
errorstringyesValues: BAD_REQUEST
messagestringyes

401 Unauthorized

No X-Api-Key header, or an unknown, revoked or expired key.

FieldTypeRequiredDescription
errorstringyesValues: UNAUTHORIZED, INVALID_API_KEY, EXPIRED_API_KEY, ORGANIZATION_NOT_FOUND
messagestringyes
{
  "error": "UNAUTHORIZED",
  "message": "Access denied: Missing required X-Api-Key header."
}

403 Forbidden

The account is suspended.

FieldTypeRequiredDescription
errorstringyesValues: TENANT_SUSPENDED
messagestringyes

404 Not Found

No such screening in this account.

Headers: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.

FieldTypeRequiredDescription
errorstringyesValues: NOT_FOUND
messagestringyes

422 Unprocessable Content

The screening is more than 180 days old.

Headers: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.

FieldTypeRequiredDescription
errorstringyesValues: SCREENING_TOO_OLD
messagestringyes

429 Too Many Requests

The per-minute limit of this key.

Headers: Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.

FieldTypeRequiredDescription
errorstringyesValues: RATE_LIMIT_EXCEEDED
messagestringyes

500 Internal Server Error

Internal error.

FieldTypeRequiredDescription
errorstringyesValues: FEEDBACK_ERROR, AUTH_ERROR
messagestringyes

503 Service Unavailable

The key could not be checked right now. Try again.

FieldTypeRequiredDescription
errorstringyesValues: DATABASE_ERROR
messagestringyes

Errors

Errors are JSON, { "error": "CODE", "message": "…" }. Branch on error, never on message.

HTTP statuserrorWhen
400BAD_REQUESTNot exactly one of requestId or token, a bad outcome, category or note, or (without the rate-limit headers) a body that is not valid JSON.
401UNAUTHORIZED, INVALID_API_KEY, EXPIRED_API_KEY, ORGANIZATION_NOT_FOUNDNo X-Api-Key header, or an unknown, revoked or expired key.
403TENANT_SUSPENDEDThe account is suspended.
404NOT_FOUNDNo such screening in this account.
422SCREENING_TOO_OLDThe screening is more than 180 days old.
429RATE_LIMIT_EXCEEDEDThe per-minute limit of this key.
500FEEDBACK_ERROR, AUTH_ERRORInternal error.
503DATABASE_ERRORThe key could not be checked right now. Try again.

See all errors for every endpoint.

Headers and limits

Response headerMeaning
X-RateLimit-LimitRequests allowed in the current one-minute window.
X-RateLimit-RemainingRequests left in the current window.
X-RateLimit-ResetSeconds until the current window ends.
Retry-AfterSeconds to wait before trying again.

The limits per endpoint and plan are on Rate limits and quotas.