The US site Open API provides compliance checks for English text, video and images on TikTok US, Amazon and your own store, and in Meta, Google and TikTok ads, along with custom word lists, AI rewrites and batch checks, through one set of REST endpoints. It uses the same detection engine and credit account as the web app, so the API returns the same results you see on the web.
Three steps. Every check follows the same pattern: submit to get an id, then poll for the result.
1
Create an API key
Create one on the Open API page of your dashboard. Keys look like brsk_live_β¦ and are shown only once, when they are created. Save the key to your secrets manager right away.
2
Send the authorization header
Add Authorization: Bearer brsk_live_β¦ to every request. This key is not the same as the token from a web sign-in, and the two cannot be used in place of each other.
3
Submit a check and poll for the result
The submit call returns an id immediately and the check runs in the background. Poll the GET endpoint until status is completed. Text checks usually take 3β15 seconds; video checks take about half the videoβs duration.
Submit a text check
bash
curl -X POST https://www.byerisk.com/api/v1/intl/us/text/checks \
-H "Authorization: Bearer $BYERISK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "These gummies cure joint pain and are clinically proven to melt belly fat in 7 days. Results guaranteed!",
"platform": "tiktok_us",
"vertical": "supplement",
"explainLocale": "en-US"
}'
# β {"success":true,"data":{"id":"cm5abcβ¦","status":"processing"}}
Every response uses the same envelope.Success is { "success": true, "data": β¦ } and failure is { "success": false, "error": "β¦" }. The Response field tables in the endpoint reference below describe the contents of data.
Sites and keys
This is the most important thing to know before you integrate: each API key belongs to one site. A key created in the US site dashboard can call endpoints under /v1/intl/us/ only. Using it on the Indonesia site (/v1/intl/id/) or the China site (/v1/) returns 401, and the reverse is also true.
Why keys are bound to a site.The sites are separate products: routes, platform values, rule libraries, plans and credit accounts are all separate. A key that worked everywhere would leave "whose credits to deduct and which rules to apply" to be guessed from the request body, and both wrong guesses fail silently: English copy checked against another siteβs rule sets almost always passes, or credits come out of another siteβs account. Binding keys to a site stops both cases at the first step.
Item
Isolated per site?
Notes
API key
Yes
Issued separately on each site; cross-site calls return 401
Credit balance, plan
Yes
Balances on other sites cannot be used here, and a plan does not unlock other sites
Check history, custom word list
Yes
The same term is stored separately on each site and never matches on another site
Word list quota, master switch
No
Account-level settings, shared across sites
The account itself (email, sign-in)
No
One ByeRisk account can do business on several sites
Risk verdicts
This is the most common integration mistake: riskLevel for text checks and for image / video checks is not the same enum. The two come from different assessment pipelines and cannot be converted into each other. Handle them per endpoint rather than defining a single riskLevel enum.
Endpoint
riskLevel values
Meaning
Text checks
safe / low / medium / high
The highest severity among matched violations
Image and video checks
PASS / REVIEW / REJECT
The handling recommendation from content moderation
Two dimensions on each risk
kind
Risk kind
violation is a hard violation of federal rules or platform policy and must be fixed; scene-hint is a context-dependent note. Only violations count toward riskLevel.
severity
Severity
Three levels: high / medium / low. The top-level riskLevel is the highest level among all violations.
customRisks
Custom term matches
Terms you configure yourself are grouped separately and do not count toward riskLevel. They reflect your preferences, not a compliance assessment.
Why custom terms are kept separate.Competitor names and internally banned phrases are business preferences. Mixing them into the same list as "violates US rules" would leave your downstream systems unable to tell "must block" from "worth a reminder". They are therefore returned separately in customRisks, and terms with a replacement include replacement for an exact substitution.
Explanations follow explainLocale.Risk explanations, suggested fixes and legalRef are returned in English or Chinese according to explainLocale (en-US or zh-CN). If omitted, it defaults to zh-CN, so pass en-US for English. Citations are identical in both languages (for example 21 CFR 101.93); the Chinese version adds a one-sentence explanation in Chinese, so every reference can still be verified.
What is checked
Each dimension has its own assessment pipeline. Unlike the China site, there are no parameters for trimming check dimensions: the visual and audio policies are tied to account-side configuration, so a dimension parameter would not change what actually runs. It would be a switch that does nothing.
Dimension
Coverage
Notes
Text
US regulation and platform policy rule library + AI semantic review
Federal rules such as FTC and FDA requirements, plus TikTok Shop, Amazon, and Meta, Google and TikTok ad policies. AI semantic review handles cross-sentence risks and filters false positives. State laws are not covered
Images
Visual risks + text recognition on images
Detects prohibited items, and contact details, drug or sexual wording shown on the image
Video
Visual frames + voiceover
The voiceover is transcribed and checked by the same engine as text checks. English audio is not moderated as audio
Image checks do not assess commercial compliance.They assess the risk of the visuals themselves. They do not verify efficacy claims, "FDA approved" or certification marks, which require reading and judging the copy on the image. Submit that copy separately as a text check. We would rather state this limit here than let you assume that a passing image check means the whole asset is compliant.
English audio is not moderated as audio.For English videos, audios does not report risks. Claims made in the voiceover appear in transcriptRisks, which uses the same rules and AI semantic review as text checks. Do not read the absence of audio findings as "the audio is compliant".
Video polling has two stop conditions.status has reached a final state and transcriptStatus is no longer processing. Transcription usually finishes after visual moderation; if you check status alone, you will never receive transcriptRisks.
Multi-tenant integration
If you build compliance checks into your own product and offer them to several of your own customers, add an X-End-Tenant header with the tenant ID from your system, and we create a separate isolated scope for each tenant ID. You do not need a separate API key for each customer.
Terms configured for tenant A never match tenant Bβs checks
Check history, upload directory
Each tenant
List endpoints return only the records of the current X-End-Tenant; tenants cannot see each otherβs data
Credit balance, plan
Your main account
Credits are deducted from your own balance; you do not need to top up each end tenant
Rate limits
Per API key
All end tenants share the limits of one key; create more keys if you need more throughput
Send a stable tenant identifier.A tenant ID is created automatically the first time it appears, with no registration step. Allowed values are 1β64 letters, digits and _ . : -. If you send a value that changes on every request (for example, a request ID sent by mistake), you will quickly exhaust the per-key limit on isolated scopes and start receiving errors. Without this header, all data stays in your own single scope, exactly as if the feature were not used.
Billing and rate limits
The API shares this siteβs credit balance with the web app, at the same prices. Before you integrate, you can call GET /v1/intl/us/account to check your balance and this monthβs usage.
Action
Cost
Text check
Plan rate, per call
AI rewrite
Plan rate, per call
Video check
1 credit per second
Image check
2 credits per image
Batch check
Each item is billed at its own rate
Custom word list management, account queries, upload credentials
Free
Rate limits apply per API key: submissions 60 per minute, queries 600 per minute, configuration 120 per minute. Each tier is counted separately, every response includes X-RateLimit-Remaining, and exceeding a limit returns 429 with Retry-After.
Two plan requirements.Creating API keys and running batch checks both require the Premium plan or higher on this site. Plans are isolated by site; a subscription on another site does not unlock access here. Keys that have already been issued are not affected by changes to this requirement and keep working.
Error codes
Status code
Meaning
What to do
400
Invalid parameters, including a platform, category or explanation language that does not belong to this site
Fix the parameters as described in error
401
The key is invalid, revoked or expired, or does not belong to the site you are calling
Check whether the error mentions a site mismatch before replacing the key
402
Insufficient credits
Top up, then retry
403
The feature requires a higher plan
Upgrade your plan on this site
404
The record does not exist, does not belong to your account, or belongs to another site
Check the id and the site segment of the path
429
Rate limit exceeded
Back off and retry after Retry-After
500
Server error
Safe to retry; contact us if it keeps failing
For AI agents
One design goal of this API is that AI agents can read and call it on their own. The spec is standard OpenAPI 3.0, and parameters, responses, enum values and error semantics are all described in it, so no separate adapter documentation is needed.
Give the spec URL to your agent (Claude, GPT, Coze, Dify and others can import tools from OpenAPI) together with an API key, and it can run the full loop of "check β read the risks β revise the copy β check again" on its own:
Prompt
Read the OpenAPI spec at https://www.byerisk.com/api/v1/intl/us/openapi.json?lang=en-US,
then use my API key to call the ByeRisk US site.
Check whether the following English sales copy is compliant,
list each risk that must be fixed, and suggest a compliant rewrite.
The spec URL carries a lang parameter that follows your current interface language, so the version you give your agent determines the language of the descriptions it reads. The spec is public and requires no authentication.
Submits text for a compliance check and returns an ID immediately; the check runs asynchronously in the background. After you receive the ID, poll GET {id} until status becomes completed or failed (usually 3β15 seconds).
The check evaluates the English content itself; the language of the risk explanations is determined by explainLocale, and the two do not affect each other. Credits are deducted on submission; if queuing fails, they are refunded in full automatically.
Request body
Field
Type
Description
textRequired
string
The text to check, 10β5,000 characters. The English content itself is checked, independent of the explanation language below. (length 10β5000)
platformRequired
enum
The platform where the content will be published. Determines which platform rule set applies.Allowed values: tiktok_usTikTok USamazon_usAmazon USdtc_usYour own storemeta_adsMeta Adsgoogle_adsGoogle Adstiktok_adsTikTok Ads
verticalRequired
enum
Content category. A specific category applies the rule sets for all categories plus that category's own rule sets; general applies the rule sets of every category (erring on the side of reporting more, with AI semantic review filtering false positives).Allowed values: generalGeneralbeautyBeauty & personal carehealthHealth & wellnesssupplementDietary supplementsweight_lossWeight lossbabyBaby & kidsapparelApparel & textilesjewelryJewelryhomeHome & cleaningpetPet
explainLocale
enum
The language of risk explanations and suggested fixes. It is independent of the language of the content: the text checked is always English, and this parameter only sets the language used to explain the results. Defaults to zh-CN if omitted; pass en-US for English explanations.Allowed values: zh-CNChinese (Simplified)en-USEnglishDefault zh-CN
Response201
Field
Type
Description
id
string
ID of this check, used to poll for the result.
object
string
Object type.
status
string
Current status. It is processing immediately after submission.
Possible errors
402Insufficient credits
Example
bash
curl -X POST https://www.byerisk.com/api/v1/intl/us/text/checks \
-H "Authorization: Bearer $BYERISK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "These gummies cure joint pain and are clinically proven to melt belly fat in 7 days. Results guaranteed!",
"platform": "tiktok_us",
"vertical": "supplement",
"explainLocale": "zh-CN"
}'
Returns a paginated list sorted by creation time, newest first, containing summary fields only (the text excerpt is truncated to 100 characters). Only records from this site are returned.
Query parameters
Field
Type
Description
page
string
Page number, starting at 1.Default 1
pageSize
string
Number of items per page, up to 50.Default 20
Response200
Field
Type
Description
object
string
Object type. Always list.
page
number
Current page number.
pageSize
number
Number of items per page.
total
number
Total number of matching items.
hasMore
boolean
Whether there is another page.
data
array<object>
Items on this page.
βid
string
Check ID.
βobject
string
Object type.
βstatus
string
Status.
βplatform
string
Publishing platform.
βvertical
object
Content category.
βpreview
string
Text excerpt (truncated to 100 characters). Retrieve the check details for the full text.
When status is processing, the check is still running; retry later. risks holds the final result only when status is completed.
Risks are reported in two layers that are kept strictly separate:
- risks β compliance risks. kind=violation is a hard violation; kind=scene-hint is a scene hint (a scenario-specific restriction).
- customRisks β matches against the custom rule terms you configured. They are not counted towardriskLevel; if you configured a replacement, replacement is provided.
Path parameters
Field
Type
Description
idRequired
string
Response200
Field
Type
Description
id
string
Check ID.
object
string
Object type.
status
enum
processing means the check is still running; retry later. risks holds the final result only when the status is completed.Allowed values: processingProcessingcompletedCompletedfailedFailed
Top-level verdict, derived from the highest severity among violation risks. β οΈ This is not the same set of values as PASS / REVIEW / REJECT for images and videos.Allowed values: safelowmediumhigh
summary
object
Counts by type.
βviolation
number
Number of hard violations of laws / platform rules.
βsceneHint
number
Number of scene hints.
βcustom
number
Number of matches from your custom word list. Not counted toward riskLevel.
βsemantic
number
Number of semantic risk labels (overall notices that cannot be located at a specific position).
risks
array<object>
Compliance risks, one entry per risk.
βid
object
Risk ID.
βkind
enum
Risk kind: violation is a hard violation of laws / platform rules (must be fixed); scene-hint is a scene hint (a scenario-specific restriction).Allowed values: violationViolationscene-hintScene hint
βseverity
enum
Severity. The top-level riskLevel takes the highest severity among all violations.Allowed values: highHighmediumMediumlowLow
βmatchedText
string
The matched snippet of the original text.
βstartIndex
number
Start index of the matched snippet in the original text. **For semantic matches that cannot be located, this is -1** (not null). In that case, search the original text for matchedText yourself, or display the risk only as an overall notice.
βendIndex
number
End index of the matched snippet; this can also be -1.
βcategory
object
Risk category, localized according to explainLocale.
βsuggestion
object
Suggested fix, localized according to explainLocale.
βlegalRef
object
Legal or platform policy reference, returned in the explainLocale language. Citations are identical in both languages; the Chinese version adds a one-sentence explanation in Chinese.
βsource
enum
Source of the finding: rule is a deterministic rule match; model is a model judgment; custom is a custom term.Allowed values: rulemodelcustom
customRisks
array<object>
Matches from your custom word list. Separate from risks and not counted toward riskLevel: they reflect your own preferences, not a compliance judgment.
βmatchedText
string
The matched snippet of the original text.
βstartIndex
number
Start index (can be -1).
βendIndex
number
End index (can be -1).
βreplacement
object
The replacement you configured for this term. Empty means flag only, with no suggested replacement.
βnote
object
The note you wrote for this term.
semanticLabels
array<string>
Overall notices for risks that the model identified but could not locate in a specific snippet.
fixStatus
object
AI rewrite status: null = not triggered | processing = rewrite in progress | completed = finished | failed = failed.
fixedText
object
Full text after the AI rewrite. Populated only after the rewrite completes.
createdAt
object
Creation time (ISO 8601).
updatedAt
object
Last update time (ISO 8601).
Possible errors
404The record does not exist, does not belong to your account, or belongs to another site
Triggers an AI rewrite for a completed check and returns immediately; the rewrite runs in the background. Poll GET {id}; when the rewrite finishes, the result is in fixedText (fixStatus becomes completed). The rewrite deducts additional credits, which are refunded automatically if it fails.
Path parameters
Field
Type
Description
idRequired
string
Response201
Field
Type
Description
id
string
Check ID.
object
string
Object type.
fixStatus
string
Rewrite status. It is processing once the request is accepted.
creditCost
number
Credits consumed by this rewrite.
Possible errors
400The record does not need a rewrite (it has no violations), or a rewrite is already in progress
402Insufficient credits
404The record does not exist or belongs to another site
Example
bash
curl -X POST https://www.byerisk.com/api/v1/intl/us/text/checks/{id}/fix \
-H "Authorization: Bearer $BYERISK_API_KEY"
Submits a publicly accessible image URL for a compliance check.
Image checks complete synchronously: when this endpoint returns, the result is already available and the response body is the complete check result, so there is no need to poll. (GET {id} remains available for later lookups.)
**Always check status**: it is normally completed; if the engine fails, it is failed (in that case the credits have been refunded automatically and labels is empty). The endpoint still returns 201 rather than 5xx in this case, because the record itself was created successfully.
Billing: 2 credits per image.
Request body
Field
Type
Description
imageUrlRequired
string
Image URL. It must be publicly accessible (our check service must be able to fetch it directly). If you do not have your own object storage, first call POST /v1/intl/{country}/uploads/policy to get direct-upload credentials.
imageTitleRequired
string
Image title / file name, used to identify the image in your history.
imageSizeRequired
number
Image size in bytes. (minimum 1)
imageWidth
number
Image width in pixels.
imageHeight
number
Image height in pixels.
vertical
enum
Declared content category. It does not affect the visual assessment for this check (the visual policy is tied to account-side configuration and is independent of category); it is used only for record-keeping and for display in your history. Fill it in accurately, or leave it empty.Allowed values: generalGeneralbeautyBeauty & personal carehealthHealth & wellnesssupplementDietary supplementsweight_lossWeight lossbabyBaby & kidsapparelApparel & textilesjewelryJewelryhomeHome & cleaningpetPet
explainLocale
enum
Language in which risk labels are returned. Same as for text checks; unrelated to the language of any text in the image.Allowed values: zh-CNChinese (Simplified)en-USEnglishDefault zh-CN
Response201
Field
Type
Description
id
string
Check ID.
object
string
Object type.
status
enum
Always check this field: if the engine fails, it is failed (credits have been refunded automatically and labels is empty), and the endpoint still returns 201.Allowed values: processingProcessingcompletedCompletedfailedFailed
image
object
Image information.
βurl
string
Image URL (the one you submitted).
βtitle
string
Image title / file name.
βsizeBytes
object
Size in bytes.
βwidth
object
Width in pixels.
βheight
object
Height in pixels.
vertical
enum
Category declared at submission. Recorded only; it does not affect the visual assessment.Allowed values: generalGeneralbeautyBeauty & personal carehealthHealth & wellnesssupplementDietary supplementsweight_lossWeight lossbabyBaby & kidsapparelApparel & textilesjewelryJewelryhomeHome & cleaningpetPet
riskLevel
enum
Top-level verdict. β οΈ This is not the same set of values as safe/low/medium/high for text checks.Allowed values: PASSREVIEWREJECT
labels
array<object>
Matched risk labels. An empty array when there are no risks.
βdescription
string
Risk label, localized according to explainLocale.
βriskLevel
enum
This label's own risk level. Older records have no per-label risk level; in that case this is null (no value is made up).Allowed values: PASSREVIEWREJECT
Always check this field: if the engine fails, it is failed (credits have been refunded automatically and labels is empty), and the endpoint still returns 201.Allowed values: processingProcessingcompletedCompletedfailedFailed
image
object
Image information.
βurl
string
Image URL (the one you submitted).
βtitle
string
Image title / file name.
βsizeBytes
object
Size in bytes.
βwidth
object
Width in pixels.
βheight
object
Height in pixels.
vertical
enum
Category declared at submission. Recorded only; it does not affect the visual assessment.Allowed values: generalGeneralbeautyBeauty & personal carehealthHealth & wellnesssupplementDietary supplementsweight_lossWeight lossbabyBaby & kidsapparelApparel & textilesjewelryJewelryhomeHome & cleaningpetPet
riskLevel
enum
Top-level verdict. β οΈ This is not the same set of values as safe/low/medium/high for text checks.Allowed values: PASSREVIEWREJECT
labels
array<object>
Matched risk labels. An empty array when there are no risks.
βdescription
string
Risk label, localized according to explainLocale.
βriskLevel
enum
This label's own risk level. Older records have no per-label risk level; in that case this is null (no value is made up).Allowed values: PASSREVIEWREJECT
createdAt
object
Creation time.
updatedAt
object
Last update time.
Possible errors
404The record does not exist or belongs to another site
Submits a publicly accessible video URL for a compliance check and returns an ID immediately; the check runs asynchronously in the background.
Poll GET {id}. A check takes about half the video's duration (at least 30 seconds); poll every 5β10 seconds.
The check covers visual frames (frames) and the voiceover (transcriptRisks, transcribed and checked by the same engine as text checks).
English audio is not moderated as audio, so audios does not report risks; claims made in the voiceover appear in transcriptRisks.
Billing: 1 credit per second of video, deducted on submission. Report videoDuration accurately.
Request body
Field
Type
Description
videoUrlRequired
string
Video URL. It must be publicly accessible. If you do not have your own object storage, first call the direct-upload credentials endpoint.
videoTitleRequired
string
Video title / file name.
videoSizeRequired
number
Video size in MB (not bytes). Maximum 1024 (1GB). (range 0.01β1024)
videoDurationRequired
number
Video duration in seconds. Billing is based on this value (1 credit per second), so report it accurately. (minimum 1)
videoWidth
number
Video width in pixels.
videoHeight
number
Video height in pixels.
platform
enum
Publishing platform. It determines only which platform rule set applies to the voiceover; if omitted, this site's default platform is used.Allowed values: tiktok_usTikTok USamazon_usAmazon USdtc_usYour own storemeta_adsMeta Adsgoogle_adsGoogle Adstiktok_adsTikTok Ads
vertical
enum
Content category. It determines only which category rule sets apply to the voiceover: a specific category applies the rule sets for all categories plus that category's own rule sets; if omitted or general, the rule sets of every category apply (erring on the side of reporting more). It has no effect on the visual or audio assessment.Allowed values: generalGeneralbeautyBeauty & personal carehealthHealth & wellnesssupplementDietary supplementsweight_lossWeight lossbabyBaby & kidsapparelApparel & textilesjewelryJewelryhomeHome & cleaningpetPet
Response201
Field
Type
Description
id
string
ID of this check, used to poll for the result.
object
string
Object type.
status
string
Current status. It is processing immediately after submission.
Each call also advances polling against the check engine by one step, so you can poll this endpoint directly; no separate status endpoint is needed.
β οΈ Polling has two stop conditions: status reaches a terminal state (completed / failed), andtranscriptStatus is no longer processing. Voiceover transcription usually finishes after the visual review. If you check only status, you will stop while the voiceover is still being transcribed and never receive transcriptRisks.
explainLocale determines the language used to explain voiceover risks. It is a read-side parameter rather than a submit-side one because results are produced asynchronously, and a language chosen at submission time would not carry through to the time the results are stored.
Path parameters
Field
Type
Description
idRequired
string
Query parameters
Field
Type
Description
explainLocale
enum
Language in which risk explanations are returned. Defaults to zh-CN if omitted.Allowed values: zh-CNChinese (Simplified)en-USEnglishDefault zh-CN
Response200
Field
Type
Description
id
string
Check ID.
object
string
Object type.
status
enum
Video review status. β οΈ It is not the only stop condition for polling: you must also check transcriptStatus, because voiceover transcription usually finishes after the visual review.Allowed values: processingProcessingcompletedCompletedfailedFailed
video
object
Video information.
βurl
string
Video URL.
βtitle
string
Video title / file name.
βsizeMb
object
Size (MB).
βdurationSeconds
object
Duration (seconds).
βwidth
object
Width in pixels.
βheight
object
Height in pixels.
platform
enum
Platform used to check the voiceover.Allowed values: tiktok_usTikTok USamazon_usAmazon USdtc_usYour own storemeta_adsMeta Adsgoogle_adsGoogle Adstiktok_adsTikTok Ads
vertical
enum
Category used to check the voiceover.Allowed values: generalGeneralbeautyBeauty & personal carehealthHealth & wellnesssupplementDietary supplementsweight_lossWeight lossbabyBaby & kidsapparelApparel & textilesjewelryJewelryhomeHome & cleaningpetPet
Timestamp of the flagged frame in the video, in seconds.
βriskLevel
enum
Risk level of this frame.Allowed values: PASSREVIEWREJECT
βdescription
string
Description of the finding.
βimageUrl
object
Screenshot URL of the flagged frame. This is a short-lived signed URL and will expire; to keep it long term, copy the file to your own storage.
βocrText
object
Text recognized in the frame.
audios
array<object>
Audio findings, with start and end times in seconds.
βstartSeconds
number
Start of the flagged segment, in seconds.
βendSeconds
number
End of the flagged segment, in seconds.
βriskLevel
enum
Risk level of this segment.Allowed values: PASSREVIEWREJECT
βdescription
string
Description of the finding.
βtext
object
Transcribed speech of the flagged segment.
transcript
object
Full transcript of the voiceover.
transcriptStatus
object
Voiceover transcription status: null = not enabled | processing = transcribing | completed | failed | empty = no audio track. While it is processing, voiceover risks are not yet complete; keep polling.
transcriptRisks
array<object>
Voiceover violations. They are checked by the same engine as text checks and count toward the verdict on an equal footing with visual and audio findings.
Submits multiple text items, images, and videos in a single request, checks them together, and aggregates the verdict. Limits: up to 10 text items, 20 images, and 10 videos, with no more than 40 items per batch in total.
Returns an ID immediately; the items are checked in parallel in the background. Poll GET {id} for progress: progress.done / progress.total shows how far the batch has progressed, and once all items are complete, result gives the verdict for the whole batch (PASS / REJECT). Each item includes a checkId, which you can pass to the corresponding single-item endpoint to get the full details.
Billing: each item is billed at its own unit price (text per item, images per image, videos per second). If your balance is insufficient, the entire batch is rejected at submission.
Request body
Field
Type
Description
nameRequired
string
Batch name, 1β60 characters.
platformRequired
enum
Publishing platform, applied to the whole batch.Allowed values: tiktok_usTikTok USamazon_usAmazon USdtc_usYour own storemeta_adsMeta Adsgoogle_adsGoogle Adstiktok_adsTikTok Ads
verticalRequired
enum
Content category, applied to the whole batch.Allowed values: generalGeneralbeautyBeauty & personal carehealthHealth & wellnesssupplementDietary supplementsweight_lossWeight lossbabyBaby & kidsapparelApparel & textilesjewelryJewelryhomeHome & cleaningpetPet
texts
array<string>
Text items, up to 10. Items shorter than 10 characters are dropped instead of failing the whole batch. Rejecting a submission of ten items because one of them is too short, with an error message that cannot say which one, would not be a good contract.
images
array<object>
Image items, up to 20.
βurlRequired
string
Image URL, publicly accessible.
βnameRequired
string
Image title / file name.
βsizeRequired
number
Image size in bytes.
βwidth
number
Width in pixels.
βheight
number
Height in pixels.
videos
array<object>
Video items, up to 10.
βurlRequired
string
Video URL, publicly accessible.
βnameRequired
string
Video title / file name.
βsizeRequired
number
Video size in MB (the same unit as for single video checks, not bytes).
βdurationRequired
number
Video duration in seconds. Billing is based on this value.
βwidth
number
Width in pixels.
βheight
number
Height in pixels.
explainLocale
enum
Language in which risk explanations are returned.Allowed values: zh-CNChinese (Simplified)en-USEnglishDefault zh-CN
Response201
Field
Type
Description
id
string
ID of this check, used to poll for the result.
object
string
Object type.
status
string
Current status. It is processing immediately after submission.
Possible errors
400The batch is empty or exceeds the per-batch item limit
402Insufficient credits to cover the cost of the whole batch
Returns a paginated list sorted by creation time, newest first, including each batch's progress and verdict. The call also advances the status of a small number of in-progress batches.
Query parameters
Field
Type
Description
page
string
Page number, starting at 1.Default 1
pageSize
string
Number of items per page, up to 50.Default 20
explainLocale
enum
Language in which risk explanations are returned (listing also advances item status, so results may be stored during this call).Allowed values: zh-CNChinese (Simplified)en-USEnglishDefault zh-CN
Each call also triggers one refresh of item status, so you can poll this endpoint directly. Use items[].checkId to get the full details of an individual item.
Path parameters
Field
Type
Description
idRequired
string
Query parameters
Field
Type
Description
explainLocale
enum
Language in which risk explanations are returned. Defaults to zh-CN if omitted.Allowed values: zh-CNChinese (Simplified)en-USEnglishDefault zh-CN
Batch verdict. Populated only after all items are complete.Allowed values: PASSREJECT
summary
object
Batch counts.
βviolation
number
Number of violations.
βsceneHint
number
Number of scene hints.
items
array<object>
Item details.
βid
string
Item ID (not the check ID).
βkind
enum
Item type. Note that the value is text, not the internal name script, which matches the paths of the single-item endpoints.Allowed values: textimagevideo
βcheckId
string
The corresponding single-item check ID. Use it with /text|image|video/checks/{id} to get the full details.
The term to check for. On the US site, enter English terms: the text checked is English, so Chinese terms never match. (length 0β100)
matchType
enum
How the term is matched: keyword = substring match (default; a match anywhere counts), phrase = word-boundary match. For space-delimited languages such as English, use phrase: substring matching lets a short term hit longer words (for example, cure matches secure).Allowed values: keywordSubstring matchphraseWord-boundary matchDefault keyword
replacement
string
Replacement. When set, matches include replacement, which you can use for an exact one-click replacement; leave it empty to flag only. (length 0β100)
note
string
Note, visible only to you. (length 0β200)
enabled
boolean
Whether the rule is enabled. A disabled rule is kept but not applied during checks.Default true
Response201
Field
Type
Description
id
string
Rule ID.
object
string
Object type.
keyword
string
The term to check for.
matchType
enum
Match type.Allowed values: keywordSubstring matchphraseWord-boundary match
replacement
object
Replacement. If empty, matches are flagged only.
note
object
Note, visible only to you.
enabled
boolean
Whether the rule is enabled.
createdAt
object
Creation time.
updatedAt
object
Last update time.
Possible errors
400The term already exists on this site, or your plan's word list limit has been reached
403Custom rules are a paid feature and are not available on your current plan
Sorted by creation time, newest first, with no pagination. Only terms on this site are returned: the same term is stored as a separate entry on each site, and an entry on one site never produces matches on another.
Response200
Field
Type
Description
object
string
Object type. Always list.
data
array<object>
All rules on this site (word lists are small, so results are not paginated).
βid
string
Rule ID.
βobject
string
Object type.
βkeyword
string
The term to check for.
βmatchType
enum
Match type.Allowed values: keywordSubstring matchphraseWord-boundary match
Up to 2000 terms per request. Idempotency-friendly: duplicates within the request and terms already in your word list are skipped instead of causing an error, and the response reports three separate counts: imported / skippedDuplicate / rejectedQuota. Terms beyond your quota are rejected; accepted terms are still written as usual.
Request body
Field
Type
Description
itemsRequired
array<object>
Terms to import, up to 2000 per request. Duplicates within the request and terms already in your word list are skipped automatically (each counted separately in the response) without causing an error.
βkeywordRequired
string
The term to check for. (length 0β100)
βreplacement
string
Replacement. (length 0β100)
βnote
string
Note. (length 0β200)
Response201
Field
Type
Description
object
string
Object type.
total
number
Total number of terms submitted in this request.
imported
number
Number of terms actually written.
skippedDuplicate
number
Number of terms skipped because they were duplicated within the request or already exist in your word list.
rejectedQuota
number
Number of terms rejected because they exceeded your plan's quota.
Possible errors
403Custom rules are a paid feature and are not available on your current plan
Returns the number of terms used and your plan's limit. β οΈ **used is account-wide** (it includes terms you added on other sites), whereas isPaid is the subscription status of this site: plans are isolated by site, but word list quota is not.
Response200
Field
Type
Description
object
string
Object type.
used
number
Number of terms used. The quota is account-wide and shared across sites; it includes terms you added on other sites.
limit
number
Word list limit for your current plan. 0 on the Basic plan.
isPaid
boolean
Whether this site currently has a paid subscription.
Independent of each rule's own enabled flag: when the master switch is off, per-rule enabled settings have no effect.
Request body
Field
Type
Description
enabledRequired
boolean
Tenant-level master switch. When off, no custom terms are applied during checks (your data is kept). It is independent of each rule's enabled flag. The switch itself is not set per country site: it answers the question "does this account use a custom word list?"
Response200
Field
Type
Description
object
string
Object type.
enabled
boolean
Account-wide master switch. When off, no custom terms are applied during checks (your data is kept).
Possible errors
403Custom rules are a paid feature and are not available on your current plan
Returns the credit balance, plan, and this month's call counts for each check type on this site.
β οΈ Credits and subscriptions are isolated by site: the balance here does not include credits you hold on other sites, and vice versa. We recommend calling this endpoint once before you integrate to confirm your balance; otherwise, the only way to find out that your balance is insufficient is to run into a 402.
Usage counts include all entry points (web and API), not only API calls.
Response200
Field
Type
Description
object
string
Object type.
country
string
The site this call belongs to.
credits
object
Credit balance for this site. Credits are isolated by site; your balance on the ByeRisk China site is not included here.
βtotal
number
Total available credits on this site.
βsubscription
number
Credits granted by your plan.
βactivity
number
Credits granted through promotions.
βbooster
number
Credits from credit packs.
βexpiringSoon
object
Credits that expire within 7 days; null if there are none.
subscription
object
Plan on this site.
usageThisMonth
object
Number of checks of each type on this site in the current calendar month, across all entry points, including web and API.
You need this endpoint only if you do not have publicly accessible storage for your assets. If your assets are already in your own object storage or on a CDN, put the URL directly into the check endpoint and skip this step.
Returns POST Policy direct-upload credentials for a standard form upload:
After a successful upload, the asset URL is {cdnHost}/{key}; put it in the videoUrl / imageUrl field of the check endpoint. The credentials expire after 5 minutes and allow writes only to the directory prefix dedicated to your account on this site.
Request body
Field
Type
Description
kindRequired
enum
Asset type, which determines the size limit: video up to 1GB, image up to 10MB.Allowed values: videoimage
Response201
Field
Type
Description
object
string
Object type.
kind
enum
Asset type.Allowed values: videoimage
host
string
Target URL for the direct upload (POST the form here).
cdnHost
string
Host from which the asset is served after a successful upload. Asset URL = {cdnHost}/{key}.
dir
string
Directory prefix you are allowed to write to. key must start with it, or the upload is rejected.
policy
string
Upload policy (base64).
accessKeyId
string
AccessKeyId for the direct upload.
signature
string
Policy signature.
maxSizeBytes
number
Size limit for this type, in bytes.
expiresAt
string
Credential expiration time (ISO 8601). The credentials expire 5 minutes after issue.