Riskified Customer Actions API

Operations related to customer activity, including login, password resets, customer verification attempts, and customer-merchant contact events.

Operations 2

POST /login Login Attempt Request #
POST /reset_password Reset Password Request #

Specifications

Schemas & Data

📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/riskified/refs/heads/main/json-schema/riskified-login-action-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/riskified/refs/heads/main/json-schema/riskified-customer-update-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/riskified/refs/heads/main/json-schema/riskified-customer-create-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/riskified/refs/heads/main/json-schema/riskified-reset-password-action-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/riskified/refs/heads/main/json-schema/riskified-customer-create-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/riskified/refs/heads/main/json-schema/riskified-login-action-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/riskified/refs/heads/main/json-schema/riskified-adaptive-checkout-psd2-approved-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/riskified/refs/heads/main/json-schema/riskified-advise-psd2-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/riskified/refs/heads/main/json-schema/riskified-advise-cvv-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/riskified/refs/heads/main/json-schema/riskified-adaptive-checkout-3ds-declined-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/riskified/refs/heads/main/json-schema/riskified-advise-3ds-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/riskified/refs/heads/main/json-schema/riskified-decide-response-decline-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/riskified/refs/heads/main/json-schema/riskified-decide-response-approve-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/riskified/refs/heads/main/json-schema/riskified-chargeback-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/riskified/refs/heads/main/json-schema/riskified-cancel-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/riskified/refs/heads/main/json-schema/riskified-refund-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/riskified/refs/heads/main/json-schema/riskified-submit-response-submitted-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/riskified/refs/heads/main/json-schema/riskified-otp-initiate-request-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/riskified/refs/heads/main/json-schema/riskified-otp-initiate-response-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/riskified/refs/heads/main/json-schema/riskified-claim-create-response-excluded-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/riskified/refs/heads/main/json-schema/riskified-claim-create-response-captured-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/riskified/refs/heads/main/json-schema/riskified-claim-create-response-review-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/riskified/refs/heads/main/json-schema/riskified-claim-create-response-approve-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/riskified/refs/heads/main/json-schema/riskified-claim-create-response-decline-schema.json
📊
JSONSchema
https://raw.githubusercontent.com/api-evangelist/riskified/refs/heads/main/json-schema/riskified-claim-decision-request-schema.json

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/riskified:riskified-customer-actions-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

riskified-customer-actions-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Account Secure Customer Actions API
  description: 'The Customer Trust suite is designed to protect both merchants and customers from fraud and abuse. Account Secure guards the security of customer store accounts - protecting against chargebacks, data theft and more. Policy Enforcement ensures that customers aren''t abusing store policies and promotions.


    Note: Riskified''s beacon/mobile SDK implementation is crucial to providing effective Account Secure'
  version: 1.0.0
  contact:
    name: Riskified Support
    url: http://apiref.riskified.com/
    email: support@riskified.com
  x-explorer-enabled: false
  x-conventions:
    dateTime: All date-time fields are RFC 3339 (ISO 8601).
servers:
- url: https://api-sandbox.riskified.com/customers
  description: Sandbox environment for testing and integration
- url: https://api.riskified.com/customers
  description: Production environment for deployment
tags:
- name: Customer Actions
  description: Operations related to customer activity, including login, password resets, customer verification attempts, and customer-merchant contact events.
paths:
  /login:
    post:
      summary: Login Attempt Request
      description: 'Login API is a **synchronous POST-method** API call.


        API is triggered **only** for customer-initiated authentication requests, e.g., user tries to login to their account. It must **not** be called for authentications associated with:

        - New account registrations

        - Successful password resets

        - Silent logins


        API is triggered regardless of success or failure. There is a `login_status_type` to indicate success/failure and `failure_reason` to indicate the reason.


        **Response:**

        - `decision` field will be set as one of the following values: `allow`, `notify`, or `challenge`.

        - `login_id` field will show a Riskified-assigned identifier for the event.'
      operationId: login
      tags:
      - Customer Actions
      parameters:
      - $ref: '#/components/parameters/RiskifiedShopDomain'
      - $ref: '#/components/parameters/RiskifiedSignature'
      - $ref: '#/components/parameters/ContentType'
      - $ref: '#/components/parameters/Accept'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/login_action'
            examples:
              login_action_example:
                summary: Example login
                value:
                  customer_id: '207119551'
                  customer_created_at: '2019-09-12T14:04:50-05:00'
                  implicit_login: false
                  username: donnie7
                  email: bob.norman@hostmail.com
                  login_at_checkout: false
                  social_login_type: facebook
                  login_status:
                    login_status_type: success
                  client_details:
                    accept_language: en-CA
                    user_agent: Mozilla/5.0 (CFNetwork/548.0.3 Darwin/11.2.0)
                  session_details:
                    cart_token: 68778783ad298f1c80c3bafcddeea02f
                    browser_ip: 111.111.111.111
                    created_at: '2025-11-18T13:36:50-04:00'
                    source: mobile_app
                    device_id: 01234567-89ABCDEF-01234567-89ABCDEF
                    referring_site: http://www.nba.com/
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/login_action_response'
              examples:
                login_action_response_example_allow:
                  description: Example of an allowed login acton
                  $ref: '#/components/examples/login_action_response_example_allow'
                login_action_response_example_notify:
                  description: Example of a login action with notifying a customer about the login attempt
                  $ref: '#/components/examples/login_action_response_example_notify'
                login_action_response_example_challenge:
                  description: Example of a login action requireing verification
                  $ref: '#/components/examples/login_action_response_example_challenge'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_response'
              examples:
                decide_bad_response_400:
                  value:
                    error:
                      message: JSON malformed - only UTF-8 well formatted JSON payload allowed (RFC 4627)
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_response'
              examples:
                decide_unauthorized_response_401:
                  value:
                    error:
                      message: 'Failed verifying request: ''X-RISKIFIED-HMAC-SHA256'' header is either missing or incorrect'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_response'
        '429':
          description: Too many requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_response'
              examples:
                decide_too_many_requests_response_429:
                  value:
                    error:
                      message: Too many update requests for this order. Please try again later.
        '500':
          description: Contact Riskified support
        '504':
          description: Temporary error, please retry
  /reset_password:
    post:
      operationId: reset_password
      tags:
      - Customer Actions
      parameters:
      - $ref: '#/components/parameters/RiskifiedShopDomain'
      - $ref: '#/components/parameters/RiskifiedSignature'
      - $ref: '#/components/parameters/ContentType'
      - $ref: '#/components/parameters/Accept'
      summary: Reset Password Request
      description: 'Reset password API is a **synchronous POST-method** API call.


        It allows Riskified to understand whether an account has been secured following an incident (if not it needs to be treated as a ''compromised'' account). It also enables measuring account recovery rate - an important KPI for both Riskified and the merchants.


        **When to trigger:**

        - When a password-reset action has been requested

        - When the request has been processed


        **Response:**

        `decision` is always `allow`.'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/reset_password_action'
            examples:
              reset_password_action_example:
                $ref: '#/components/examples/reset_password_action_example'
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/reset_password_action_response'
              examples:
                reset_password_action_response_example_allow:
                  description: Example of an allowed login acton
                  $ref: '#/components/examples/reset_password_action_response_example_allow'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_response'
              examples:
                decide_bad_response_400:
                  value:
                    error:
                      message: JSON malformed - only UTF-8 well formatted JSON payload allowed (RFC 4627)
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_response'
              examples:
                decide_unauthorized_response_401:
                  value:
                    error:
                      message: 'Failed verifying request: ''X-RISKIFIED-HMAC-SHA256'' header is either missing or incorrect'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_response'
        '429':
          description: Too many requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_response'
              examples:
                decide_too_many_requests_response_429:
                  value:
                    error:
                      message: Too many update requests for this order. Please try again later.
        '500':
          description: Contact Riskified support
        '504':
          description: Temporary error, please retry
components:
  schemas:
    session_details:
      type: object
      description: 'An object containing basic information regarding the session.


        Session data points, such as `cart_token`, `browser_ip`, and `user_agent`, should be those associated with values at the time of user''s login request - **before** the authentication result is available.'
      properties:
        cart_token:
          type: string
          description: 'The session id at the time that the user is on the login webpage or started password reset, prior to authentication attempt.

            Must match the `session_details.cart_token` value set by the Beacon JavaScript snippet. For standard integrations, this value is automatically generated by Beacon. For merchants who manage their own sessions, the same session ID must be passed to both the Beacon and this field. Must remain consistent throughout a purchase flow. Max 100 characters.'
        browser_ip:
          type: string
          description: The customer's browser IP address during the session.
        created_at:
          type: string
          description: The date and time (ISO8601) of the session.
        source:
          type: string
          enum:
          - desktop_web
          - mobile_web
          - web
          - mobile_app
          - other
          description: 'The platform that the session originated from.


            **Possible values:**

            - `desktop_web`: Session originated on the website, using a desktop device

            - `mobile_web`: Session originated on the mobile website, using a mobile device

            - `web`: Session originated on the website, with no available info about the type of device used

            - `mobile_app`: Session originated on the mobile app, using a mobile device

            - `other`: The session''s origin is unknown'
        device_id:
          type: string
          description: '**(Conditional Requirement)** Required for mobile applications. The mobile device identifier, which corresponds to a value extracted via the Riskified mobile beacon SDK.'
        referring_site:
          type: string
          description: '**(Strongly Recommended)** The webpage from which the customer accessed the shop. Domain level is enough, and usually set the shop_url provided by Riskified. In case you have several sites may be used by different population, set different url per the scenario (e.g. regular ec-site: www.shop-regular.com, employee ec-site: www.shop-employee.com)'
      required:
      - created_at
      - cart_token
      - browser_ip
      - source
      example:
        cart_token: 68778783ad298f1c80c3bafcddeea02f
        browser_ip: 111.111.111.111
        created_at: '2025-11-18T11:00:00-05:00'
        source: mobile_app
        device_id: 01234567-89ABCDEF-01234567-89ABCDEF
        referring_site: http://www.nba.com/
    error_response:
      type: object
      properties:
        error:
          $ref: '#/components/schemas/error'
    login_action_response:
      type: object
      description: The response to the login action request.
      properties:
        login_id:
          type: string
          description: Riskified-assigned identifier for the event.
        decision:
          type: string
          enum:
          - allow
          - notify
          - challenge
          description: 'The decision made by Riskified regarding the login attempt.


            **Possible values:**

            - `allow`: Login is approved

            - `notify`: Login is allowed but customer should be notified

            - `challenge`: Additional verification required before allowing login'
      required:
      - login_id
      - decision
    login_status:
      type: object
      description: An object containing details of the customer's login attempt.
      properties:
        login_status_type:
          type: string
          enum:
          - success
          - failure
          description: 'Indicates the success or failure of a login attempt.


            **Possible values:**

            - `success`: Login was successful

            - `failure`: Login failed'
        failure_reason:
          type: string
          enum:
          - wrong password
          - captcha
          - disabled account
          - nonexistent account
          - other
          description: '**(Conditional Requirement)** The reason for the unsuccessful login, required if `login_status_type` = `''failure''`.


            **Possible values:**

            - `wrong password`: When login failed with wrong password

            - `captcha`: When login failed at Captcha or reCaptcha

            - `disabled account`: When login failed due to the account being logically deleted (disabled)

            - `nonexistent account`: When login failed because account never exists at merchant

            - `other`: When login failed due to other reasons such as "account is locked"'
      required:
      - login_status_type
      example:
        login_status_type: success
    error:
      type: object
      properties:
        message:
          type: string
          description: Error message
        code:
          type: string
          description: Error code
        details:
          type: string
          description: Error details
    client_details:
      type: object
      description: An object containing technical information regarding the customer’s browsing session
      properties:
        user_agent:
          type: string
          description: The full User-Agent sent from the client.
        accept_language:
          type: string
          description: List of two-letter language codes sent from the client.
      required:
      - user_agent
      - accept_language
      example:
        accept_language: en-CA
        user_agent: Mozilla/5.0 (CFNetwork/548.0.3 Darwin/11.2.0)
    reset_password_action_response:
      type: object
      description: The response to the reset password action request.
      properties:
        decision:
          type: string
          enum:
          - allow
          description: The decision made by Riskified regarding the reset password attempt.
      required:
      - decision
    login_action:
      type: object
      properties:
        customer_id:
          type: string
          description: '**(Conditional Requirement)** A unique numeric identifier for the customer. customer_id should be null when login failes because of no customer account exisistent (e.g. failure_reason = ''nonexistent account''). '
        email:
          type: string
          description: '**(Conditional Requirement)** The email address used for the login attempt.

            It is required for successful logins. It is an optional field for failed logins (if username is provided).'
        login_status:
          $ref: '#/components/schemas/login_status'
          description: An object containing details of the customer's login attempt.
        client_details:
          $ref: '#/components/schemas/client_details'
          description: An object containing technical information regarding the customer’s browsing session.
        session_details:
          $ref: '#/components/schemas/session_details'
          description: An object containing basic information regarding the session.
        customer_created_at:
          type: string
          format: date-time
          description: '**(Conditional Requirement)** Use if login_status_type = ''success''.


            • The timestamp (ISO8601) of the initial registration of the customer''s account in the merchant''s systems.


            • customer_created_at should be null for failed logins (login_status_type = ''failure'') where the failure_reason = ''nonexistent account'' or ''other''.'
        implicit_login:
          type: boolean
          description: Indicates whether this login was made by entering the user’s credentials or not (“remember me” - cookie usage)
        username:
          type: string
          description: '**(Conditional Requirement)** The username used for the login attempt.

            Username is an optional field for successful logins. It is a required field for failed logins (if no email address is provided).'
        login_at_checkout:
          type: boolean
          description: Indicates whether the login attempt was made at checkout.
        challenge_redirect_url:
          type: string
          description: "**(Conditional Requirement)** URL to which customer will be redirected to upon taking action from the verification emails. It is only required for integrations that involve **'challenge'** decisions. It will be the secure magic link, embedded in a user's challenge email 'it was me' prompt.\n\n Note: mandatory for merchants using the challenge flow"
          example: https://www.merchant-website.com/account/?token=abcd1234
        account_recovery_url:
          type: string
          description: URL to which customer will be redirected to upon taking action from the verification emails to recover user account. It is used as redirect URL for 'it was not me' CTA in a user's notify/challenge email. However, merchant can also set fixed url for redirect in Riskified system instead of setting `account_recovery_url` in login request.
          example: https://www.merchant-website.com/account/recover?token=abcd1234
        localization_language:
          type: string
          description: The 2 letter code (ISO 639-1) to indicate the language the user has selected for merchant site content browsing and communications.
          example: en-US
        vendor_name:
          type: string
          description: The name of the affiliated partner or selling vendor.
        social_login_type:
          type: string
          enum:
          - facebook
          - google
          - linkedin
          - twitter
          - yahoo
          - other
          description: 'In case the user used a social network to log in, send one of the following values.


            **Possible values:**

            - `facebook`

            - `google`

            - `linkedin`

            - `twitter`

            - `yahoo`

            - `other`'
      required:
      - login_status
      - client_details
      - session_details
      example:
        customer_id: '207119551'
        customer_created_at: '2019-09-12T14:04:50-05:00'
        implicit_login: false
        username: donnie7
        email: bob.norman@hostmail.com
        login_at_checkout: true
        login_status:
          login_status_type: success
        client_details:
          accept_language: en-CA
          user_agent: Mozilla/5.0 (CFNetwork/548.0.3 Darwin/11.2.0)
        session_details:
          cart_token: 68778783ad298f1c80c3bafcddeea02f
          browser_ip: 111.111.111.111
          created_at: '2025-11-18T13:36:50-04:00'
          source: mobile_app
          device_id: 01234567-89ABCDEF-01234567-89ABCDEF
          referring_site: http://www.nba.com/
    reset_password_action:
      type: object
      properties:
        customer_id:
          type: string
          description: A unique numeric identifier for the customer.
          example: '207119551'
        email:
          type: string
          description: The email address on the registered customer account.
          example: bob.norman@hostmail.com
        status:
          type: string
          description: 'Indicates the status of the request.


            **Possible values:**

            - `pending`: Password reset has been requested but new password has not been set

            - `success`: Password has successfully been reset and old password is no longer valid

            - `failed`: Password failed to be reset and old password is still valid'
          enum:
          - pending
          - success
          - failed
        reason:
          type: string
          description: 'The reason for the password reset request.


            **Possible values:**

            - `user_requested`: Customer is logged in and initiates a password change from their account

            - `forgot_password`: Customer has forgotten password and directly initiates process to create a new password

            - `forced_reset`: An internal system-initiated password reset request'
          enum:
          - user_requested
          - forgot_password
          - forced_reset
        client_details:
          $ref: '#/components/schemas/client_details'
          description: An object containing technical information regarding the customer’s browsing session.
        session_details:
          $ref: '#/components/schemas/session_details'
          description: An object containing basic information regarding the session.
        vendor_name:
          type: string
          description: The name of the affiliated partner or selling vendor.
      required:
      - customer_id
      - status
      - reason
      - email
      - client_details
      - session_details
  examples:
    login_action_response_example_challenge:
      summary: Example login response requireing confirminh the account owner identity before accessing their account
      value:
        login_id: f50cb25b-914a-4537-a6e7-75badfa3fade
        decision: challenge
        mfa:
          _type: magic_link
    login_action_response_example_allow:
      summary: Example login response allowing login
      value:
        login_id: 742bd65c-f417-437b-a274-d84950c06d99
        decision: allow
    reset_password_action_response_example_allow:
      summary: Example response allowing password reset.
      value:
        decision: allow
    login_action_response_example_notify:
      summary: Example login response requireing notifying the account owner of a suspicious login
      value:
        login_id: 93ddf2f2-b601-4e0a-9cc7-125398317b8c
        decision: notify
    reset_password_action_example:
      summary: Example reset password
      value:
        customer_id: '207119551'
        status: success
        reason: user_requested
        email: great.customer@email.com
        client_details:
          accept_language: en-CA
          user_agent: Mozilla/5.0 (CFNetwork/548.0.3 Darwin/11.2.0)
        session_details:
          created_at: '2025-11-18T11:00:00-05:00'
          cart_token: 68778783ad298f1c80c3bafcddeea02f
          referring_site: http://www.nba.com/
          browser_ip: 111.111.111.111
          source: mobile_app
  parameters:
    Accept:
      name: accept
      in: header
      required: true
      schema:
        type: string
        enum:
        - application/vnd.riskified.com; version=2
      description: 'Specify the version of the API to target. For example, to target the latest version of the API, use the following: `application/vnd.riskified.com; version=2`'
    RiskifiedShopDomain:
      name: x-riskified-shop-domain
      in: header
      required: true
      schema:
        type: string
        example: merchant.example.com
      description: The merchant shop domain registered with Riskified.
    RiskifiedSignature:
      name: x-riskified-hmac-sha256
      in: header
      required: true
      schema:
        type: string
        example: b1946ac92492d2347c6235b4d2611184
      description: 'Verification hash for the Request.

        Generated by performing an SHA256 encryption on the request''s POST body and calculating the HMAC hash of the result using your Riskified authentication token.

        Please use UTF8 encoding.'
    ContentType:
      name: content_type
      in: header
      required: true
      schema:
        type: string
        enum:
        - application/json
      description: 'As payloads are sent to Riskified in JSON format, value should be: `application/json`'
x-samples-languages:
- json
- shell
- javascript
- python
- node
x- explorer-enabled: false
x-provenance:
  method: searched
  source: https://developers.riskified.com/reference
  harvested: '2026-10-14'
  tool: harvest-readme-openapi.py
  note: Assembled verbatim from the OpenAPI definition ReadMe embeds in each operation page of the provider's developer portal; paths and components merged by API title, nothing authored.
  assembled_from:
  - https://developers.riskified.com/reference/customer_create.md
  - https://developers.riskified.com/reference/customer_update.md
  - https://developers.riskified.com/reference/login.md
  - https://developers.riskified.com/reference/reset_password.md
  merge:
    pages: 4
    deduped: 37
    conflicts_kept_first: 0