stophy-dev Trustpilot API

The Trustpilot API from stophy-dev — 3 operation(s) for trustpilot.

Operations 3

POST /v1/trustpilot/company Scrape a Trustpilot company page #
POST /v1/trustpilot/company/reviews Scrape a Trustpilot company's reviews #
POST /v1/trustpilot/search Scrape Trustpilot search results #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/stophy-dev:stophy-dev-trustpilot-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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 Specification

stophy-dev-trustpilot-api-openapi.yml Raw ↑
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