Docs menu
Guides
API reference
GET /api/v1/reviews/{reviewId}
Get a held sign-up's review. Held sign-ups. Generated from the OpenAPI file.
Last updated
Overview
GET https://api.inlineshield.io/api/v1/reviews/{reviewId}
The status of a held sign-up: pending until someone decides it in the console, then approved or rejected. A review nobody decides is rejected when it expires (decisionReason: "expired"). Limited to 60 requests per minute per key; not counted against the quota. Test mode creates no reviews.
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).
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
reviewId | path | string | yes | The reviewId of a held screening. |
Request
No request body.
curl https://api.inlineshield.io/api/v1/reviews/rev_Hk3pQ9xZ2mV7cN4bL1kJ8hG5 \
-H "X-Api-Key: $INLINESHIELD_API_KEY"Responses
200 OK
The review.
| Field | Type | Required | Description |
|---|---|---|---|
reviewId | string | yes | matches ^rev_ |
status | string | yes | Values: pending, approved, rejected |
decisionReason | string or null | yes | operator: decided in the console. expired: nobody decided in time (rejected).Values: operator, expired, null |
decidedAt | string (date-time) or null | yes | |
expiresAt | string (date-time) | yes |
{
"reviewId": "rev_Hk3pQ9xZ2mV7cN4bL1kJ8hG5",
"status": "pending",
"decisionReason": null,
"decidedAt": null,
"expiresAt": "2026-11-09T12:00:00.000Z"
}{
"reviewId": "rev_Hk3pQ9xZ2mV7cN4bL1kJ8hG5",
"status": "approved",
"decisionReason": "operator",
"decidedAt": "2026-11-02T14:31:07.000Z",
"expiresAt": "2026-11-09T12:00:00.000Z"
}401 Unauthorized
No X-Api-Key header, or an unknown, revoked or expired key.
| Field | Type | Required | Description |
|---|---|---|---|
error | string | yes | Values: UNAUTHORIZED, INVALID_API_KEY, EXPIRED_API_KEY, ORGANIZATION_NOT_FOUND |
message | string | yes |
{
"error": "UNAUTHORIZED",
"message": "Access denied: Missing required X-Api-Key header."
}{
"error": "INVALID_API_KEY",
"message": "Invalid API key provided."
}403 Forbidden
The account is suspended.
| Field | Type | Required | Description |
|---|---|---|---|
error | string | yes | Values: TENANT_SUSPENDED |
message | string | yes |
404 Not Found
No such review in this account.
| Field | Type | Required | Description |
|---|---|---|---|
error | string | yes | Values: NOT_FOUND |
message | string | yes |
{
"error": "NOT_FOUND",
"message": "Review not found."
}429 Too Many Requests
More than 60 requests per minute with this key.
Headers: Retry-After.
| Field | Type | Required | Description |
|---|---|---|---|
error | string | yes | Values: RATE_LIMIT_EXCEEDED |
message | string | yes |
500 Internal Server Error
Internal error.
| Field | Type | Required | Description |
|---|---|---|---|
error | string | yes | Values: REVIEW_ERROR, AUTH_ERROR |
message | string | yes |
503 Service Unavailable
The key could not be checked right now. Try again.
| Field | Type | Required | Description |
|---|---|---|---|
error | string | yes | Values: DATABASE_ERROR |
message | string | yes |
Errors
Errors are JSON, { "error": "CODE", "message": "…" }. Branch on error, never on message.
| HTTP status | error | When |
|---|---|---|
401 | UNAUTHORIZED, INVALID_API_KEY, EXPIRED_API_KEY, ORGANIZATION_NOT_FOUND | No X-Api-Key header, or an unknown, revoked or expired key. |
403 | TENANT_SUSPENDED | The account is suspended. |
404 | NOT_FOUND | No such review in this account. |
429 | RATE_LIMIT_EXCEEDED | More than 60 requests per minute with this key. |
500 | REVIEW_ERROR, AUTH_ERROR | Internal error. |
503 | DATABASE_ERROR | The key could not be checked right now. Try again. |
See all errors for every endpoint.
Headers and limits
| Response header | Meaning |
|---|---|
Retry-After | Seconds to wait before trying again. |
The limits per endpoint and plan are on Rate limits and quotas.