Sift

Sift is a digital trust and safety platform that uses machine learning to detect and prevent online fraud and abuse - payment fraud, account takeover, account abuse, content abuse, and promotion abuse. Applications stream user events to the Sift Events API, retrieve real-time risk Sift Scores (0-100) per abuse type, and act on them through the Decisions API, automated Workflows, verification (OTP), and PSP merchant risk management. Sift exposes a documented public REST API over HTTPS at https://api.sift.com with API-key authentication.

Sift publishes 7 APIs on the APIs.io network, including Events API, Score API, Decisions API, and 4 more. Tagged areas include Fraud Detection, Fraud Prevention, Risk, Trust and Safety, and Machine Learning.

Sift’s developer surface includes authentication, documentation, engineering blog, and 8 more developer resources.

39.2/100 thin ▬ flat Agent 48/100 agent ready Full breakdown ↓
scored 2026-07-20 · rubric v0.4
7 APIs 0 Features
Fraud DetectionFraud PreventionRiskTrust and SafetyMachine LearningPayment FraudAccount TakeoverChargebacksDigital Trust

API Rating

API Evangelist API Evangelist Rating How this is scored →
scored 2026-07-20 · rubric v0.4
Composite quality — 39.2/100 · thin
Contract Quality 15.5 / 25
Developer Ergonomics 4.3 / 20
Commercial Clarity 7.9 / 20
Operational Transparency 4.8 / 13
Governance 0.0 / 12
Discoverability 6.8 / 10
Agent readiness — 48/100 · agent ready
Machine-Readable Contract 18 / 18
Agentic Access Contract 15 / 15
MCP Server 0 / 12
Machine-Readable Auth 10 / 10
Idempotency 0 / 9
Stable Error Semantics 0 / 8
Request/Response Examples 0 / 7
Rate-Limit Signaling 7 / 7
Typed Event Surface 0 / 6
Agent Skills 0 / 5
Well-Known Catalog 0 / 4
Consent & Bot Identity 0 / 3
Improve this rating by publishing the missing artifacts — every area above can be raised, and the full rubric is at apis.io/rating/. This rating is computed from github.com/api-evangelist/sift: open an issue to ask a question, or submit a pull request to add artifacts. Want it done for you? Prioritized profiling — $2,500 →

APIs

Sift Events API

Streams user activity - account creation, logins, orders, transactions, content, chargebacks, and more - to Sift's machine learning models via POST /v205/events. Supports both r...

Sift Score API

Retrieves a user's real-time Sift Score (0-100, higher is riskier) per abuse type - payment_abuse, account_abuse, account_takeover, content_abuse, and promotion_abuse - along wi...

Sift Decisions API

Applies and retrieves decisions (accept, watch, block) against Sift entities - users, orders, sessions, and content - scoped to an account. Decisions record the outcome of manua...

Sift Workflow Status API

Retrieves the status and results of a Sift Workflow run by run_id, including the decisions a workflow applied to an entity. Workflows automate scoring, routing, and decisioning ...

Sift Labels API

Legacy API for labeling a user as good or bad for a given abuse type to train Sift's models via POST and DELETE /v205/users/{user_id}/labels. Sift recommends the Decisions API f...

Sift Verification API

Step-up verification for high-risk actions. Sends, resends, and checks one-time passcodes (OTP) via POST /v1/verification/send, /resend, and /check to confirm a user's identity ...

Sift PSP Merchant Management API

For payment service providers and marketplaces - create, update, list, and retrieve sub-merchant profiles under an account so Sift can monitor merchant onboarding and transactio...

Collections

Sift API

OPEN

Pricing Plans

Sift Plans Pricing

3 plans

PLANS

Rate Limits

Sift Rate Limits

3 limits

RATE LIMITS

FinOps

Sift Finops

FINOPS

Resources

Documentation 1

Reference material describing how the API behaves

Agent Surfaces 1

MCP servers, agent skills, and machine-readable catalogs

Build 1

SDKs, sample code, and the tooling you integrate with

Access & Security 2

Authentication, authorization, and security posture

Operate 1

Status, limits, changes, and where to get help

Commercial 2

Pricing, plans, and the legal terms of use

Company 3

The organization behind the API

Source (apis.yml)

apis.yml Raw ↑
opencollection: 1.0.0
info:
  name: Sift API
  version: '2026-07-12'
  description: Sift digital trust and safety REST APIs - Events, Score, Decisions, Workflows, Labels (legacy), Verification
    (OTP), and PSP Merchant Management. Base URL https://api.sift.com. Authenticate with your Sift REST API key via HTTP Basic
    auth (key as username, empty password); ingestion APIs also accept the key as $api_key in the body. Account-scoped APIs
    require your numeric Account ID. MODELED by API Evangelist from developers.sift.com and the official Sift client libraries.
request:
  auth:
    type: basic
    username: '{{apiKey}}'
    password: ''
items:
- info:
    name: Events
    type: folder
  items:
  - info:
      name: Send an event
      type: http
    http:
      method: POST
      url: https://api.sift.com/v205/events?return_score=true&abuse_types=payment_abuse
      params:
      - name: return_score
        value: 'true'
        type: query
        description: Return the Sift Score inline.
      - name: abuse_types
        value: payment_abuse
        type: query
        description: Abuse types to score against.
      body:
        type: json
        data: "{\n  \"$type\": \"$create_order\",\n  \"$api_key\": \"{{apiKey}}\",\n  \"$user_id\": \"billy_jones_301\",\n\
          \  \"$order_id\": \"ORDER-28168441\",\n  \"$amount\": 115940000,\n  \"$currency_code\": \"USD\"\n}"
    docs: Records a user event so Sift can update its models. Reserved event types are prefixed with $.
- info:
    name: Score
    type: folder
  items:
  - info:
      name: Get a user's Sift Score
      type: http
    http:
      method: GET
      url: https://api.sift.com/v205/score/:user_id?abuse_types=payment_abuse,account_takeover
      params:
      - name: user_id
        value: billy_jones_301
        type: path
        description: The user ID.
      - name: abuse_types
        value: payment_abuse,account_takeover
        type: query
        description: Abuse types to return.
    docs: Retrieves the current Sift Score(s) for a user (0-100, higher is riskier) with reason codes.
  - info:
      name: Get latest score (no recompute)
      type: http
    http:
      method: GET
      url: https://api.sift.com/v205/users/:user_id/score
      params:
      - name: user_id
        value: billy_jones_301
        type: path
        description: The user ID.
    docs: Fetches the latest previously computed Sift Score without recomputing.
  - info:
      name: Rescore a user
      type: http
    http:
      method: POST
      url: https://api.sift.com/v205/users/:user_id/score?abuse_types=payment_abuse
      params:
      - name: user_id
        value: billy_jones_301
        type: path
        description: The user ID.
      - name: abuse_types
        value: payment_abuse
        type: query
        description: Abuse types to rescore.
      body:
        type: json
        data: '{}'
    docs: Recomputes and returns the Sift Score for a user.
- info:
    name: Labels (Legacy)
    type: folder
  items:
  - info:
      name: Apply a label
      type: http
    http:
      method: POST
      url: https://api.sift.com/v205/users/:user_id/labels
      params:
      - name: user_id
        value: billy_jones_301
        type: path
        description: The user ID.
      body:
        type: json
        data: "{\n  \"$api_key\": \"{{apiKey}}\",\n  \"$is_bad\": true,\n  \"$abuse_type\": \"payment_abuse\",\n  \"$description\"\
          : \"Chargeback received\"\n}"
    docs: Labels a user as good or bad for an abuse type. Legacy - prefer the Decisions API.
  - info:
      name: Remove a label
      type: http
    http:
      method: DELETE
      url: https://api.sift.com/v205/users/:user_id/labels?abuse_type=payment_abuse
      params:
      - name: user_id
        value: billy_jones_301
        type: path
        description: The user ID.
      - name: abuse_type
        value: payment_abuse
        type: query
        description: The abuse type of the label to remove.
    docs: Removes a previously applied label from a user.
- info:
    name: Decisions
    type: folder
  items:
  - info:
      name: List configured decisions
      type: http
    http:
      method: GET
      url: https://api.sift.com/v3/accounts/:account_id/decisions
      params:
      - name: account_id
        value: '{{accountId}}'
        type: path
        description: Your numeric Sift Account ID.
    docs: Lists the decisions configured for an account.
  - info:
      name: Get decision status for a user
      type: http
    http:
      method: GET
      url: https://api.sift.com/v3/accounts/:account_id/users/:user_id/decisions
      params:
      - name: account_id
        value: '{{accountId}}'
        type: path
        description: Your numeric Sift Account ID.
      - name: user_id
        value: billy_jones_301
        type: path
        description: The user ID.
    docs: Retrieves the latest decisions applied to a user, per abuse type.
  - info:
      name: Apply a decision to a user
      type: http
    http:
      method: POST
      url: https://api.sift.com/v3/accounts/:account_id/users/:user_id/decisions
      params:
      - name: account_id
        value: '{{accountId}}'
        type: path
        description: Your numeric Sift Account ID.
      - name: user_id
        value: billy_jones_301
        type: path
        description: The user ID.
      body:
        type: json
        data: "{\n  \"decision_id\": \"block_user_payment_abuse\",\n  \"source\": \"MANUAL_REVIEW\",\n  \"analyst\": \"analyst@example.com\"\
          ,\n  \"description\": \"Blocking known fraud user\"\n}"
    docs: Applies a decision (accept, watch, block) to a user.
  - info:
      name: Apply a decision to an order
      type: http
    http:
      method: POST
      url: https://api.sift.com/v3/accounts/:account_id/users/:user_id/orders/:order_id/decisions
      params:
      - name: account_id
        value: '{{accountId}}'
        type: path
        description: Your numeric Sift Account ID.
      - name: user_id
        value: billy_jones_301
        type: path
        description: The user ID.
      - name: order_id
        value: ORDER-28168441
        type: path
        description: The order ID.
      body:
        type: json
        data: "{\n  \"decision_id\": \"block_order_payment_abuse\",\n  \"source\": \"AUTOMATED_RULE\"\n}"
    docs: Applies a decision to a specific order belonging to a user.
  - info:
      name: Apply a decision to a session
      type: http
    http:
      method: POST
      url: https://api.sift.com/v3/accounts/:account_id/users/:user_id/sessions/:session_id/decisions
      params:
      - name: account_id
        value: '{{accountId}}'
        type: path
        description: Your numeric Sift Account ID.
      - name: user_id
        value: billy_jones_301
        type: path
        description: The user ID.
      - name: session_id
        value: SESSION-1234
        type: path
        description: The session ID.
      body:
        type: json
        data: "{\n  \"decision_id\": \"watch_session_ato\",\n  \"source\": \"AUTOMATED_RULE\"\n}"
    docs: Applies a decision to a specific session belonging to a user.
  - info:
      name: Apply a decision to content
      type: http
    http:
      method: POST
      url: https://api.sift.com/v3/accounts/:account_id/users/:user_id/content/:content_id/decisions
      params:
      - name: account_id
        value: '{{accountId}}'
        type: path
        description: Your numeric Sift Account ID.
      - name: user_id
        value: billy_jones_301
        type: path
        description: The user ID.
      - name: content_id
        value: CONTENT-9012
        type: path
        description: The content ID.
      body:
        type: json
        data: "{\n  \"decision_id\": \"block_content_content_abuse\",\n  \"source\": \"MANUAL_REVIEW\",\n  \"analyst\": \"\
          analyst@example.com\"\n}"
    docs: Applies a decision to a specific piece of content created by a user.
- info:
    name: Workflows
    type: folder
  items:
  - info:
      name: Get a workflow run status
      type: http
    http:
      method: GET
      url: https://api.sift.com/v3/accounts/:account_id/workflows/runs/:run_id
      params:
      - name: account_id
        value: '{{accountId}}'
        type: path
        description: Your numeric Sift Account ID.
      - name: run_id
        value: ''
        type: path
        description: The workflow run ID.
    docs: Retrieves the status and applied decisions of a Sift Workflow run.
- info:
    name: Verification
    type: folder
  items:
  - info:
      name: Send a verification code
      type: http
    http:
      method: POST
      url: https://api.sift.com/v1/verification/send
      body:
        type: json
        data: "{\n  \"$user_id\": \"billy_jones_301\",\n  \"send_to\": \"billy@example.com\",\n  \"verification_type\": \"\
          $email\",\n  \"brand_name\": \"ACME\",\n  \"language\": \"en\",\n  \"event\": {\n    \"$session_id\": \"SESSION-1234\"\
          ,\n    \"$verified_event\": \"$login\"\n  }\n}"
    docs: Triggers generation and delivery of a one-time passcode (OTP) to a user.
  - info:
      name: Resend a verification code
      type: http
    http:
      method: POST
      url: https://api.sift.com/v1/verification/resend
      body:
        type: json
        data: "{\n  \"$user_id\": \"billy_jones_301\",\n  \"verified_event\": \"$login\"\n}"
    docs: Requests a new one-time passcode for a pending verification.
  - info:
      name: Check a verification code
      type: http
    http:
      method: POST
      url: https://api.sift.com/v1/verification/check
      body:
        type: json
        data: "{\n  \"$user_id\": \"billy_jones_301\",\n  \"$code\": 123456,\n  \"verified_event\": \"$login\"\n}"
    docs: Validates the one-time passcode provided by the user.
- info:
    name: PSP Merchant Management
    type: folder
  items:
  - info:
      name: List PSP merchants
      type: http
    http:
      method: GET
      url: https://api.sift.com/v3/accounts/:account_id/psp_management/merchants?batch_size=100
      params:
      - name: account_id
        value: '{{accountId}}'
        type: path
        description: Your numeric Sift Account ID.
      - name: batch_size
        value: '100'
        type: query
        description: Page size.
    docs: Lists sub-merchant profiles for an account, paginated.
  - info:
      name: Create a PSP merchant
      type: http
    http:
      method: POST
      url: https://api.sift.com/v3/accounts/:account_id/psp_management/merchants
      params:
      - name: account_id
        value: '{{accountId}}'
        type: path
        description: Your numeric Sift Account ID.
      body:
        type: json
        data: "{\n  \"id\": \"merchant-01\",\n  \"name\": \"Acme Marketplace Seller\",\n  \"description\": \"Electronics reseller\"\
          ,\n  \"status\": \"active\"\n}"
    docs: Creates a new sub-merchant profile under an account.
  - info:
      name: Get a PSP merchant
      type: http
    http:
      method: GET
      url: https://api.sift.com/v3/accounts/:account_id/psp_management/merchants/:merchant_id
      params:
      - name: account_id
        value: '{{accountId}}'
        type: path
        description: Your numeric Sift Account ID.
      - name: merchant_id
        value: merchant-01
        type: path
        description: The merchant ID.
    docs: Retrieves a specific sub-merchant profile.
  - info:
      name: Update a PSP merchant
      type: http
    http:
      method: PUT
      url: https://api.sift.com/v3/accounts/:account_id/psp_management/merchants/:merchant_id
      params:
      - name: account_id
        value: '{{accountId}}'
        type: path
        description: Your numeric Sift Account ID.
      - name: merchant_id
        value: merchant-01
        type: path
        description: The merchant ID.
      body:
        type: json
        data: "{\n  \"id\": \"merchant-01\",\n  \"name\": \"Acme Marketplace Seller\",\n  \"status\": \"inactive\"\n}"
    docs: Updates an existing sub-merchant profile.
bundled: true