stophy-dev Trustpilot API
The Trustpilot API from stophy-dev — 3 operation(s) for trustpilot.
The Trustpilot API from stophy-dev — 3 operation(s) for trustpilot.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/stophy-dev:stophy-dev-trustpilot-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Stophy Trustpilot API
version: '1'
description: 'Every endpoint is a POST that takes its input as a JSON object body. Unknown fields are rejected with 400.
Responses leave out empty values: null, empty strings, empty objects and empty nested lists are not sent.
Text comes back whole. To get shorter responses, add ?maxTextLength= to the URL. Every text value longer than that is cut and ends with …. A screenshot is never cut, and a page whose text was cut has isTruncated set to true.
x-credits is what one call costs. Every call costs the same, whatever it returns, unless an operation''s description says it costs per 10 results, or per second of audio. Then x-credits is the lowest price and x-credits-max the most one call can cost. Where an operation takes limit, send it to return fewer results and pay for fewer.
When a response has a cursor, send it back unchanged with the same input to get the next page. When it has a page, send the next page number.
Endpoints whose security includes {} also work without an API key: 10 requests a minute and 50 a day per IP, and no paging.'
servers:
- url: https://api.stophy.dev
security:
- apiKey: []
tags:
- name: Trustpilot
paths:
/v1/trustpilot/company:
post:
operationId: trustpilotCompany
summary: Scrape a Trustpilot company page
description: Costs 1 credit per call.
x-credits: 1
parameters:
- $ref: '#/components/parameters/MaxTextLength'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
companyUrl:
type: string
description: Link to the Trustpilot company, like https://www.trustpilot.com/review/stripe.com. Send this or companyDomain.
companyDomain:
type: string
description: Trustpilot company domain, like stripe.com. Send this or companyUrl.
sendOne:
- companyUrl
- companyDomain
additionalProperties: false
example:
companyDomain: stripe.com
responses:
'200':
description: The data, and the credits this call used.
headers:
X-Request-ID:
$ref: '#/components/headers/RequestId'
x-credits-used:
$ref: '#/components/headers/CreditsUsed'
X-RateLimit-Limit:
$ref: '#/components/headers/RateLimitLimit'
X-RateLimit-Remaining:
$ref: '#/components/headers/RateLimitRemaining'
X-RateLimit-Reset:
$ref: '#/components/headers/RateLimitReset'
x-cache:
$ref: '#/components/headers/Cache'
x-cache-age:
$ref: '#/components/headers/CacheAge'
content:
application/json:
schema:
type: object
required:
- success
- data
- creditsUsed
- requestId
properties:
success:
const: true
data:
type: object
additionalProperties: false
properties:
companyId:
type: string
companyDomain:
type: string
companyUrl:
type: string
format: uri
name:
type: string
website:
type: string
format: uri
description:
type: string
trustScore:
type: number
stars:
type: number
reviews:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
ratingsOne:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
ratingsTwo:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
ratingsThree:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
ratingsFour:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
ratingsFive:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
categories:
type: array
items:
type: string
isClaimed:
type: boolean
isClosed:
type: boolean
email:
type: string
phone:
type: string
addressStreet:
type: string
addressCity:
type: string
addressPostalCode:
type: string
addressCountry:
type: string
negativeReviewsRepliedPercent:
type: number
averageDaysToReply:
type: number
required:
- companyUrl
- categories
- isClaimed
- isClosed
creditsUsed:
type: integer
requestId:
type: string
4XX:
$ref: '#/components/responses/Error'
5XX:
$ref: '#/components/responses/Error'
tags:
- Trustpilot
/v1/trustpilot/company/reviews:
post:
operationId: trustpilotCompanyReviews
summary: Scrape a Trustpilot company's reviews
description: Costs 1 credit per call. Pages with page.
x-credits: 1
parameters:
- $ref: '#/components/parameters/MaxTextLength'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
companyUrl:
type: string
description: Link to the Trustpilot company, like https://www.trustpilot.com/review/stripe.com. Send this or companyDomain.
companyDomain:
type: string
description: Trustpilot company domain, like stripe.com. Send this or companyUrl.
ratings:
default: []
description: Only reviews with these star ratings, 1 to 5. Empty means every rating.
maxItems: 5
type: array
items:
type: integer
minimum: 1
maximum: 5
language:
default: all
type: string
pattern: ^(?:[Aa][Ll][Ll]|[A-Za-z]{2})$
datePublished:
description: Only reviews published in the last 30 days, 3, 6 or 12 months.
type: string
enum:
- last30Days
- last3Months
- last6Months
- last12Months
verifiedOnly:
default: false
description: Only reviews Trustpilot marks as verified.
type: boolean
search:
description: Only reviews that mention this word or phrase.
type: string
minLength: 1
maxLength: 100
page:
default: 1
description: Page number, starting at 1. Trustpilot shows 10 pages of 20 reviews without an account; narrow with ratings, language, datePublished or search to reach older reviews.
type: integer
minimum: 1
maximum: 10
sendOne:
- companyUrl
- companyDomain
additionalProperties: false
example:
companyDomain: stripe.com
ratings:
- 1
language: en
responses:
'200':
description: The data, and the credits this call used.
headers:
X-Request-ID:
$ref: '#/components/headers/RequestId'
x-credits-used:
$ref: '#/components/headers/CreditsUsed'
X-RateLimit-Limit:
$ref: '#/components/headers/RateLimitLimit'
X-RateLimit-Remaining:
$ref: '#/components/headers/RateLimitRemaining'
X-RateLimit-Reset:
$ref: '#/components/headers/RateLimitReset'
x-cache:
$ref: '#/components/headers/Cache'
x-cache-age:
$ref: '#/components/headers/CacheAge'
content:
application/json:
schema:
type: object
required:
- success
- data
- creditsUsed
- requestId
properties:
success:
const: true
data:
type: object
additionalProperties: false
properties:
companyDomain:
type: string
companyName:
type: string
total:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
results:
type: array
items:
type: object
additionalProperties: false
properties:
reviewId:
type: string
reviewUrl:
type: string
format: uri
rating:
type: integer
minimum: 1
maximum: 5
title:
type: string
text:
type: string
language:
type: string
publishedAt:
type: string
format: date-time
pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
experiencedDate:
type: string
format: date
pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
isVerified:
type: boolean
authorName:
type: string
authorCountry:
type: string
ownerReplyText:
type: string
ownerReplyAt:
type: string
format: date-time
pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
required:
- reviewUrl
- rating
- isVerified
page:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
required:
- results
- page
creditsUsed:
type: integer
requestId:
type: string
4XX:
$ref: '#/components/responses/Error'
5XX:
$ref: '#/components/responses/Error'
tags:
- Trustpilot
/v1/trustpilot/search:
post:
operationId: trustpilotSearch
summary: Scrape Trustpilot search results
description: Costs 1 credit per call. Pages with page.
x-credits: 1
parameters:
- $ref: '#/components/parameters/MaxTextLength'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
query:
type: string
minLength: 1
maxLength: 100
page:
default: 1
description: Page number, starting at 1. Trustpilot shows 10 pages of 10 companies without an account, so one search reaches at most 100 companies even when total is larger. Make the query more specific to reach the rest.
type: integer
minimum: 1
maximum: 10
required:
- query
additionalProperties: false
example:
query: stripe
responses:
'200':
description: The data, and the credits this call used.
headers:
X-Request-ID:
$ref: '#/components/headers/RequestId'
x-credits-used:
$ref: '#/components/headers/CreditsUsed'
X-RateLimit-Limit:
$ref: '#/components/headers/RateLimitLimit'
X-RateLimit-Remaining:
$ref: '#/components/headers/RateLimitRemaining'
X-RateLimit-Reset:
$ref: '#/components/headers/RateLimitReset'
x-cache:
$ref: '#/components/headers/Cache'
x-cache-age:
$ref: '#/components/headers/CacheAge'
content:
application/json:
schema:
type: object
required:
- success
- data
- creditsUsed
- requestId
properties:
success:
const: true
data:
type: object
additionalProperties: false
properties:
total:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
results:
type: array
items:
type: object
additionalProperties: false
properties:
companyId:
type: string
companyDomain:
type: string
companyUrl:
type: string
format: uri
name:
type: string
website:
type: string
format: uri
trustScore:
type: number
stars:
type: number
reviews:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
categories:
type: array
items:
type: string
addressStreet:
type: string
addressCity:
type: string
addressPostalCode:
type: string
addressCountry:
type: string
required:
- companyUrl
page:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
required:
- results
- page
creditsUsed:
type: integer
requestId:
type: string
4XX:
$ref: '#/components/responses/Error'
5XX:
$ref: '#/components/responses/Error'
tags:
- Trustpilot
components:
headers:
RateLimitLimit:
description: Requests allowed in the current window.
schema:
type: integer
Cache:
description: hit if this result came from the cache, miss if it was fetched live.
schema:
type: string
RateLimitRemaining:
description: Requests left in the current window.
schema:
type: integer
CreditsUsed:
description: Credits this call used.
schema:
type: integer
CacheAge:
description: Seconds since the returned result was written to the cache.
schema:
type: integer
RateLimitReset:
description: Unix time in seconds when the current window resets.
schema:
type: integer
RequestId:
description: The request id. Quote it when you report a problem.
schema:
type: string
RetryAfter:
description: Seconds to wait before retrying.
schema:
type: integer
parameters:
MaxTextLength:
name: maxTextLength
in: query
required: false
description: Cut every text value in the response to this many characters. A value that was cut ends with …, and a page whose text was cut has isTruncated set to true. A screenshot is never cut. Leave it out to get the full text.
schema:
type: integer
minimum: 1
schemas:
Error:
type: object
required:
- success
- error
properties:
success:
const: false
error:
type: object
required:
- code
- message
- retryable
- requestId
properties:
code:
type: string
enum:
- cliSessionCompleted
- cliSessionExists
- cliSessionNotFound
- forbidden
- insufficientCredits
- internalError
- inviteClaimed
- inviteDisabled
- inviteExpired
- inviteUsedUp
- invalidCliSession
- invalidCliVerifier
- invalidRequest
- notFound
- rateLimited
- sourceChanged
- sourceRefused
- sourceTimeout
- sourceUnavailable
- unauthorized
- unsupportedMediaType
message:
type: string
retryable:
type: boolean
retryAfterSeconds:
type: integer
requestId:
type: string
requiredCredits:
type: number
availableCredits:
type: number
billingUrl:
type: string
const: https://stophy.dev/billing
responses:
Error:
description: The request failed. retryable says whether trying again can help.
headers:
X-Request-ID:
$ref: '#/components/headers/RequestId'
Retry-After:
$ref: '#/components/headers/RetryAfter'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
securitySchemes:
apiKey:
type: http
scheme: bearer