Sift Decisions API

Apply and retrieve decisions against users, orders, sessions, and content.

Operations 6

GET /v3/accounts/{account_id}/decisions List configured decisions #
GET /v3/accounts/{account_id}/users/{user_id}/decisions Get decision status for a user #
POST /v3/accounts/{account_id}/users/{user_id}/decisions Apply a decision to a user #
POST /v3/accounts/{account_id}/users/{user_id}/orders/{order_id}/decisions Apply a decision to an order #
POST /v3/accounts/{account_id}/users/{user_id}/sessions/{session_id}/decisions Apply a decision to a session #
POST /v3/accounts/{account_id}/users/{user_id}/content/{content_id}/decisions Apply a decision to content #

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/sift-decisions-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

sift-decisions-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Sift Decisions API
  description: 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.
  version: '2026-07-12'
  contact:
    name: Sift Developer Documentation
    url: https://developers.sift.com/docs
  x-modeled: true
  x-modeled-by: API Evangelist
  x-modeled-sources:
  - https://developers.sift.com/docs
  - https://developers.sift.com/docs/curl/apis-overview
  - https://github.com/SiftScience/sift-python
servers:
- url: https://api.sift.com
  description: Sift production API (single public host)
security:
- apiKeyBasic: []
tags:
- name: Decisions
  description: Apply and retrieve decisions against users, orders, sessions, and content.
paths:
  /v3/accounts/{account_id}/decisions:
    parameters:
    - $ref: '#/components/parameters/AccountId'
    get:
      operationId: listDecisions
      tags:
      - Decisions
      summary: List configured decisions
      description: Lists the decisions configured for an account, optionally filtered by entity type and abuse type.
      parameters:
      - name: entity_type
        in: query
        required: false
        schema:
          type: string
          enum:
          - user
          - order
          - session
          - content
      - name: abuse_types
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: A list of configured decisions.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DecisionList'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v3/accounts/{account_id}/users/{user_id}/decisions:
    parameters:
    - $ref: '#/components/parameters/AccountId'
    - $ref: '#/components/parameters/UserId'
    get:
      operationId: getUserDecisions
      tags:
      - Decisions
      summary: Get decision status for a user
      description: Retrieves the latest decisions applied to a user, per abuse type.
      responses:
        '200':
          description: The user's current decision status.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DecisionStatus'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    post:
      operationId: applyUserDecision
      tags:
      - Decisions
      summary: Apply a decision to a user
      description: Applies a decision (accept, watch, block) to a user.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DecisionRequest'
      responses:
        '200':
          description: The decision was applied.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DecisionApplyResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v3/accounts/{account_id}/users/{user_id}/orders/{order_id}/decisions:
    parameters:
    - $ref: '#/components/parameters/AccountId'
    - $ref: '#/components/parameters/UserId'
    - $ref: '#/components/parameters/OrderId'
    post:
      operationId: applyOrderDecision
      tags:
      - Decisions
      summary: Apply a decision to an order
      description: Applies a decision to a specific order belonging to a user.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DecisionRequest'
      responses:
        '200':
          description: The decision was applied.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DecisionApplyResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v3/accounts/{account_id}/users/{user_id}/sessions/{session_id}/decisions:
    parameters:
    - $ref: '#/components/parameters/AccountId'
    - $ref: '#/components/parameters/UserId'
    - $ref: '#/components/parameters/SessionId'
    post:
      operationId: applySessionDecision
      tags:
      - Decisions
      summary: Apply a decision to a session
      description: Applies a decision to a specific session belonging to a user.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DecisionRequest'
      responses:
        '200':
          description: The decision was applied.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DecisionApplyResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v3/accounts/{account_id}/users/{user_id}/content/{content_id}/decisions:
    parameters:
    - $ref: '#/components/parameters/AccountId'
    - $ref: '#/components/parameters/UserId'
    - $ref: '#/components/parameters/ContentId'
    post:
      operationId: applyContentDecision
      tags:
      - Decisions
      summary: Apply a decision to content
      description: Applies a decision to a specific piece of content created by a user.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DecisionRequest'
      responses:
        '200':
          description: The decision was applied.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DecisionApplyResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  parameters:
    AccountId:
      name: account_id
      in: path
      required: true
      description: Your numeric Sift Account ID.
      schema:
        type: string
    ContentId:
      name: content_id
      in: path
      required: true
      description: The unique identifier for the content, URL-encoded.
      schema:
        type: string
    SessionId:
      name: session_id
      in: path
      required: true
      description: The unique identifier for the session, URL-encoded.
      schema:
        type: string
    OrderId:
      name: order_id
      in: path
      required: true
      description: The unique identifier for the order, URL-encoded.
      schema:
        type: string
    UserId:
      name: user_id
      in: path
      required: true
      description: The unique identifier for the user, URL-encoded.
      schema:
        type: string
  schemas:
    Decision:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        description:
          type: string
        entity_type:
          type: string
          enum:
          - user
          - order
          - session
          - content
        abuse_type:
          type: string
        category:
          type: string
          enum:
          - block
          - watch
          - accept
    DecisionApplyResponse:
      type: object
      properties:
        entity:
          type: object
          properties:
            id:
              type: string
            type:
              type: string
        decision:
          type: object
          properties:
            id:
              type: string
        time:
          type: integer
          format: int64
    DecisionRequest:
      type: object
      description: Request to apply a decision to an entity (modeled from documented examples).
      required:
      - decision_id
      - source
      properties:
        decision_id:
          type: string
          description: The ID of a decision configured in the Sift console.
          example: block_user_payment_abuse
        source:
          type: string
          enum:
          - MANUAL_REVIEW
          - AUTOMATED_RULE
          - CHARGEBACK
          description: What produced the decision.
        analyst:
          type: string
          description: Identifier (e.g. email) of the analyst, required when source is MANUAL_REVIEW.
        description:
          type: string
        time:
          type: integer
          format: int64
          description: Epoch milliseconds the decision was made.
    DecisionList:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Decision'
    DecisionStatus:
      type: object
      description: The latest decisions applied to an entity, keyed by abuse type.
      properties:
        decisions:
          type: object
          additionalProperties:
            type: object
            properties:
              decision:
                type: object
                properties:
                  id:
                    type: string
              time:
                type: integer
                format: int64
              webhook_succeeded:
                type: boolean
    ApiError:
      type: object
      description: Modeled error envelope. Sift returns a numeric status and error_message.
      properties:
        status:
          type: integer
          description: Sift status code (0 indicates success; non-zero indicates an error).
        error_message:
          type: string
        time:
          type: integer
          format: int64
  responses:
    Unauthorized:
      description: Missing or invalid API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
    NotFound:
      description: The requested resource was not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
  securitySchemes:
    apiKeyBasic:
      type: http
      scheme: basic
      description: HTTP Basic authentication using your Sift REST API key as the username and an empty password. Ingestion APIs (Events, Score, Labels) also accept the key as $api_key in the JSON request body. Account-scoped APIs (Decisions, Workflows, PSP Merchant Management) require your numeric Account ID in the path in addition to the API key.