> ## Documentation Index
> Fetch the complete documentation index at: https://developer.hellgate.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Get decision details

> Retrieve a previously evaluated decision by its ID.

The entry includes the original decision, the rules that fired, backend results, the current payment lifecycle state, and any resolution.
Payment Card details are masked and not returned in detail.




## OpenAPI

````yaml /products/specter/openapi.yaml get /api/decisions/{id}
openapi: 3.1.0
info:
  contact:
    email: support@hellgate.io
    name: Starfish GmbH & Co. KG
    url: https://hellgate.io/cpa/specter
  description: Composable decision engine and fraud prevention service.
  license:
    name: Hellgate API Terms
    url: https://hellgate.io/terms-and-conditions
  title: Specter API
  version: '1.0'
servers:
  - description: Managed instance of Specter
    url: https://{instance}.{env}.on-hellgate.cloud
    variables:
      instance:
        default: my-instance
        description: Your unique instance slug, provided during onboarding.
      env:
        default: eu1
        description: Deployment environment (currently eu1).
security: []
tags:
  - description: Evaluate transactions and retrieve decision results.
    name: Decisions
  - description: Close decisions that were flagged for manual review.
    name: Resolutions
  - description: Report payment lifecycle events for a prior decision.
    name: Lifecycle Events
  - description: Manage rulesets and their activation lifecycle.
    name: Rulesets
  - description: Register and version custom decision-payload schemas.
    name: Schemas
  - description: Configure interceptors and intercept live payment requests.
    name: Interceptors
  - description: Subscribe to decision and event notifications.
    name: Webhooks
  - description: Manage blocked field values.
    name: Blacklist
paths:
  /api/decisions/{id}:
    get:
      tags:
        - Decisions
      summary: Get decision details
      description: >
        Retrieve a previously evaluated decision by its ID.


        The entry includes the original decision, the rules that fired, backend
        results, the current payment lifecycle state, and any resolution.

        Payment Card details are masked and not returned in detail.
      operationId: decisions_show
      parameters:
        - description: Decision ID
          in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DecisionEntry'
          description: Decision entry
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Unauthorized'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Forbidden'
          description: Forbidden
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFound'
          description: Not found
      callbacks: {}
      security:
        - bearerAuth: []
components:
  schemas:
    DecisionEntry:
      description: Persisted decision log entry.
      properties:
        id:
          example: 1e7b9c0a-2d43-4f6a-8d29-c4a1f2d05b3e
          format: uuid
          type: string
        amount:
          example: 5000
          type:
            - integer
            - 'null'
        backend_results:
          description: One entry per backend rule that was executed.
          items:
            $ref: '#/components/schemas/BackendResult'
          type: array
        context:
          example: checkout
          type: string
        credential_fingerprint:
          example: crd_4ba218...
          type: string
        credential_type:
          description: Type of credential supplied in the request
          enum:
            - pan
            - masked_pan
            - sepa
            - paypal
          type:
            - string
            - 'null'
        currency:
          example: USD
          type:
            - string
            - 'null'
        customer_id:
          example: customer-123
          type:
            - string
            - 'null'
        decision:
          enum:
            - ALLOW
            - BLOCK
            - REVIEW
          type: string
        device_fingerprint:
          example: fp-9c1e4b7a
          type:
            - string
            - 'null'
        device_ip:
          example: 1.2.3.4
          type:
            - string
            - 'null'
        evaluated_at:
          example: '2026-06-01T10:00:00Z'
          format: date-time
          type: string
        events:
          description: Lifecycle events ingested for this decision, ordered by occurred_at.
          items:
            properties:
              id:
                format: uuid
                type: string
              occurred_at:
                example: '2026-06-01T10:04:00Z'
                format: date-time
                type: string
              processed_at:
                example: '2026-06-01T10:04:02Z'
                format: date-time
                type: string
              type:
                enum:
                  - authorization
                  - capture
                  - refund
                  - void
                  - chargeback
                  - fraud_report
                  - failed
                type: string
            type: object
          type: array
        fraud_marked_at:
          description: >-
            Set when a fraud_report event marked this decision as fraud.
            Independent of payment_state; the first report wins.
          format: date-time
          type:
            - string
            - 'null'
        fraud_reason:
          description: >-
            Free-text reason for the fraud report (from the event's
            data.reason).
          type:
            - string
            - 'null'
        fraud_source:
          description: Free-text origin of the fraud report (from the event's data.source).
          type:
            - string
            - 'null'
        has_backend_error:
          example: false
          description: >-
            True if any backend_results entry carries a non-nil error (e.g.
            "backend_capability_disabled").
          type: boolean
        integration:
          example: interceptor
          description: Integration type that originated this decision (e.g. 'interceptor')
          type:
            - string
            - 'null'
        interceptor_id:
          example: null
          description: ID of the interceptor that originated this decision
          format: uuid
          type:
            - string
            - 'null'
        masked_credential:
          description: >-
            Display-safe masked representation, e.g. '411111 •••••• 4242' for
            cards or 's•••@example.com' for PayPal
          example: 411111 •••••• 4242
          type:
            - string
            - 'null'
        metadata:
          example:
            order_ref: X36Q9C
          additionalProperties:
            type: string
          description: Merchant-supplied key-value pairs stored with the decision.
          type:
            - object
            - 'null'
        payment_state:
          description: >-
            Current payment lifecycle state; null until a lifecycle event is
            ingested. Advances via POST /api/events. "fraud_reported" is a
            legacy value no longer written — fraud is tracked by the fraud
            marker fields, independent of payment_state.
          enum:
            - authorized
            - captured
            - voided
            - fraud_reported
            - chargedback
            - failed
          type:
            - string
            - 'null'
        resolution:
          description: >-
            Present when the decision was REVIEW and has been resolved by the
            merchant.
          properties:
            action:
              enum:
                - ACCEPTED
                - REJECTED
              type: string
            resolved_at:
              example: '2026-06-01T11:30:00Z'
              format: date-time
              type: string
          type:
            - object
            - 'null'
        ruleset_id:
          example: 6c1f4e8b-9a2d-4c7e-b5f3-8d1a6e9c4b2f
          format: uuid
          type:
            - string
            - 'null'
        ruleset_version:
          example: 7
          type:
            - integer
            - 'null'
        schema:
          $ref: '#/components/schemas/SchemaBinding'
          description: >-
            The (schema, version) the decision was evaluated against — the
            resolved ruleset's binding.
        source:
          enum:
            - RULE_ENGINE
            - BACKEND
            - COMBINED
          type: string
        transaction_reference:
          example: X36Q9C
          type:
            - string
            - 'null'
        triggered_rules:
          items:
            $ref: '#/components/schemas/TriggeredRule'
          type: array
      title: DecisionEntry
      type: object
    Unauthorized:
      description: No valid authentication was provided.
      example:
        classifier: UNAUTHORIZED
        code: 401
        message: No valid means of authentication was provided
      properties:
        classifier:
          enum:
            - UNAUTHORIZED
          type: string
        code:
          enum:
            - 401
          type: integer
        message:
          type: string
      required:
        - classifier
        - code
        - message
      title: Unauthorized
      type: object
    Forbidden:
      description: The token lacks the scope required for this operation.
      example:
        classifier: FORBIDDEN
        code: 403
        message: Not allowed to access this resource or feature
      properties:
        classifier:
          enum:
            - FORBIDDEN
          type: string
        code:
          enum:
            - 403
          type: integer
        message:
          type: string
      required:
        - classifier
        - code
        - message
      title: Forbidden
      type: object
    NotFound:
      description: The requested resource does not exist.
      example:
        classifier: NOT_FOUND
        code: 404
        message: The requested resource does not exist
      properties:
        classifier:
          enum:
            - NOT_FOUND
          type: string
        code:
          enum:
            - 404
          type: integer
        message:
          type: string
      required:
        - classifier
        - code
        - message
      title: NotFound
      type: object
    BackendResult:
      description: Outcome of a single backend rule that was executed.
      properties:
        backend:
          example: vdm
          type: string
        decision:
          enum:
            - ALLOW
            - BLOCK
            - REVIEW
          type:
            - string
            - 'null'
        error:
          example: timeout
          description: >-
            Error code when the backend did not produce a decision.
            "insufficient_context" means required context fields were missing
            and no call was made.
          type:
            - string
            - 'null'
        latency_ms:
          example: 42
          type: integer
        link_execution_id:
          example: 3f8b2d16-71c4-4d29-a5e2-6b9c0d4f7a21
          description: >-
            Execution ID from the Link integration. Present only for Link-backed
            backends.
          type:
            - string
            - 'null'
        link_timing:
          description: >-
            Server-Timing breakdown in milliseconds, parsed from the backend
            response. Present only for Link-backed backends.
          properties:
            external:
              example: 120.5
              type: number
            internal:
              example: 8.2
              type: number
            total:
              example: 128.7
              type: number
          type:
            - object
            - 'null'
        live:
          example: true
          description: Whether the backend ran live (true) or in shadow mode (false).
          type: boolean
        missing_fields:
          example:
            - device.ip
            - billing.postal_code
          description: >-
            Dot-notation paths of required context fields that were absent.
            Populated only when error is "insufficient_context".
          items:
            type: string
          type:
            - array
            - 'null'
        raw_response:
          example:
            status: ACCEPTED
            id: dec-xyz
          type:
            - object
            - 'null'
        rule_id:
          example: r1
          type: string
      title: BackendResult
      type: object
    SchemaBinding:
      description: >-
        A ruleset's declared (schema, version) pair. name references a registry
        entry; version is required for custom schemas and absent for built-ins,
        whose version is implicit and advances only via Specter releases. Set at
        ruleset creation and immutable for the life of that ruleset version —
        rebinding a context means publishing a new ruleset version with the new
        binding and activating it. Rulesets that predate the registry surface
        the launch-backfilled transaction binding.
      properties:
        name:
          example: transaction
          type: string
        version:
          description: Registry version for custom schemas. Absent for built-in schemas.
          example: 1
          type:
            - integer
            - 'null'
      required:
        - name
      title: SchemaBinding
      type: object
    TriggeredRule:
      properties:
        action:
          enum:
            - BLOCK
            - REVIEW
          example: BLOCK
          type:
            - string
            - 'null'
        name:
          example: Block USD
          type:
            - string
            - 'null'
        rule_id:
          example: r1
          type: string
        type:
          enum:
            - condition
            - blacklist
            - backend
            - backend_group
          example: condition
          type: string
      title: TriggeredRule
      type: object
  securitySchemes:
    bearerAuth:
      bearerFormat: JWT
      description: >-
        HS256-signed JWT bearer token, obtained via the OAuth2
        client-credentials grant (see Authentication).
      scheme: bearer
      type: http

````