openapi: 3.0.3 info: title: Ravelin Server 3D Secure Transactions API version: '1' description: 'Ravelin''s PSP-agnostic, PCI 3DS-validated 3D Secure Server API. Implements EMV 3DS 2.x Authentication Request (AReq), Challenge, Result, and Version Lookup operations against 3ds.live.pci.ravelin.com. Supports both encrypted payment method payloads and unencrypted PAN, dynamic exemption routing, and card-scheme-specific authentication values (CAVV, AAV, AEVV). Integrates with the Ravelin iOS, Android, and browser SDKs for App-based (APP), Browser-based (BRW), and 3RI (3DS Requestor Initiated) channels. Endpoint documentation: https://developer.ravelin.com/merchant/api/endpoints/3d-secure/. ' contact: name: Ravelin Support url: https://support.ravelin.com/ termsOfService: https://www.ravelin.com/legal/terms-of-service license: name: Proprietary servers: - url: https://3ds.live.pci.ravelin.com description: PCI 3DS production endpoint security: - secretApiKey: [] tags: - name: Transactions description: Payment attempts, captures, refunds, and authorizations. paths: /v2/transaction: post: tags: - Transactions summary: Submit a Transaction Event operationId: createTransaction description: Submit a transaction attempt (auth, capture, auth_capture, refund, void, preauth) for scoring and to keep Ravelin's transaction history in sync with the merchant's PSP. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TransactionRequest' responses: '200': $ref: '#/components/responses/Decision' '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/RateLimited' /v2/payment-method: post: tags: - Transactions summary: Submit a Payment Method operationId: createPaymentMethod description: Submit a payment method associated with a customer for tokenization, link analysis, and risk scoring. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PaymentMethodRequest' responses: '200': $ref: '#/components/responses/Decision' '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/RateLimited' components: responses: RateLimited: description: Per-merchant rate limit exceeded. Ravelin retains and processes the data after the limit clears, but the response is a 429. content: application/json: schema: $ref: '#/components/schemas/Error' Decision: description: Risk decision returned successfully. content: application/json: schema: $ref: '#/components/schemas/DecisionResponse' Unauthorized: description: Invalid or missing API key. content: application/json: schema: $ref: '#/components/schemas/Error' schemas: TransactionRequest: type: object required: - timestamp - orderId - customerId properties: timestamp: type: integer format: int64 orderId: type: string maxLength: 300 customerId: type: string maxLength: 300 eventType: type: string paymentMethod: $ref: '#/components/schemas/PaymentMethod' transaction: type: object properties: transactionId: type: string time: type: integer format: int64 amount: type: integer currency: type: string type: type: string enum: - auth - capture - auth_capture - refund - void - preauth success: type: boolean gateway: type: string gatewayReference: type: string declineCode: type: string authCode: type: string 3ds: type: object properties: attempted: type: boolean challenged: type: boolean success: type: boolean version: type: string eci: type: string liabilityShifted: type: boolean device: $ref: '#/components/schemas/Device' PaymentMethodRequest: type: object required: - timestamp - customerId - paymentMethod properties: timestamp: type: integer format: int64 customerId: type: string paymentMethod: $ref: '#/components/schemas/PaymentMethod' Error: type: object properties: status: type: integer timestamp: type: integer format: int64 message: type: string Device: type: object properties: deviceId: type: string ipAddress: type: string userAgent: type: string language: type: string location: type: object PaymentMethod: type: object properties: methodType: type: string description: card | wallet | bank | paypal | cash | other instrumentId: type: string bin: type: string last4: type: string DecisionResponse: type: object properties: status: type: integer description: HTTP status code echoed in the body. timestamp: type: integer format: int64 description: Unix timestamp in milliseconds for when the decision was finalized. message: type: string description: Error description, if any. data: type: object properties: action: type: string enum: - ALLOW - REVIEW - PREVENT - PERMIT - WARN - BLOCK description: Recommended action. PERMIT / WARN / BLOCK are legacy aliases of ALLOW / REVIEW / PREVENT. source: type: string enum: - RAVELIN - RULE - LOOKUP - RATE_LIMIT description: Source of the recommendation. score: type: integer minimum: 0 maximum: 100 description: Fraud confidence score between 0 and 100. scoreId: type: string description: Unique identifier for this score, used to correlate the decision with downstream events. customerId: type: string description: Customer identifier echoed back from the request. rules: type: array items: type: object properties: name: type: string state: type: string enum: - active - passive description: type: string warnings: type: array description: Data-quality warnings flagged on the input payload. items: type: object securitySchemes: secretApiKey: type: apiKey in: header name: Authorization description: Secret API key prefixed with `token`.