openapi: 3.2.0 info: title: Dispute Management API version: 1.0.0 servers: - url: https://sandbox.trustly.one/api/v1 description: Sandbox tags: - name: Dispute Management paths: /collections/recovery/dispute: post: operationId: post-dispute-recovery summary: Post a dispute description: This endpoint allows you to recover a retail dispute. The response includes key transaction information, such as the transaction status, as well as amounts, and account details for payment or authorization transactions. tags: - Dispute Management parameters: - name: Authorization in: header description: '' required: true schema: type: string - name: Idempotency-Key in: header required: true schema: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/Transaction' '400': description: Invalid parameter content: application/json: schema: $ref: '#/components/schemas/BaseException' requestBody: content: application/json: schema: type: object properties: transactionId: type: string description: Transaction ID retrieved from a Trustly Dispute Webhook. amount: type: string description: The amount to be captured. If the value is omitted, the maximum allowed amount is captured. (maximum of 10 characters with support for 2 decimal places). required: - transactionId - amount components: schemas: TransactionCurrency: type: string enum: - USD description: 3-letter ISO Currency Code. Currently only USD is supported. title: TransactionCurrency DriverLicense: type: object properties: number: type: string description: Driver License number. state: type: string description: 2 character ISO State code. required: - number - state title: DriverLicense PaymentProviderTransaction: type: object properties: paymentProviderTransactionId: type: string description: Unique payment provider transaction identifier. status: type: string description: See Payment Provider Transaction Status Codes. statusMessage: type: string description: Payment provider transaction status message. signature: type: string statusDescription: type: string paymentProcessor: $ref: '#/components/schemas/PaymentProviderTransactionPaymentProcessor' thirdPartyDeclineCode: type: string clearingHouse: type: string instantSettle: type: boolean description: Whether instant settlement was used for transaction. description: Payment Provider Transaction title: PaymentProviderTransaction Payment: type: object properties: paymentId: type: string description: A unique payment identifier generated by Trustly (15 character max). paymentType: $ref: '#/components/schemas/PaymentPaymentType' description: "Financial Institution Account Type:\n * `1`: Instant -\tInstant payment. The debit instruction is automatically initiated with that day's batch after consumer authorization.\n * `2`: Deferred - Deferred payment. Payment is authorized but the capture operation must be called to initiate the debit. You can start to initiate multiple captures that are less than or equal to the original transaction authorization amount.\n * `3`: Recurring - Recurring payment. Same as deferred but associated to a payment agreement between consumer and merchant that defines how much and when the capture can be started.\n * `4`: Disbursement - Disbursement payment. This payment type can only be used for disbursements.\n * `5`: Verification - This payment type is used to verify the customer financial institution account as the payments will be done outside of the Trustly system.\n * `6`: Retrieval\tData retrieval. This payment type is used to retrieve account and user information from Trustly without an associated payment request. This payment type is not enabled by default. Contact Trustly if you need this feature." merchant: $ref: '#/components/schemas/PaymentMerchant' merchantReference: type: string description: 'An external reference from the merchant. Ex: Order identifier from merchant e-commerce application.' merchantId: type: string description: Your Trustly Merchant Id. It will be provided to you. fingerprint: type: string description: Internal use only verification: $ref: '#/components/schemas/Verification' account: $ref: '#/components/schemas/Account' description: type: string description: A summary description of the order. returnUrl: type: string description: Return URL provided with the bank authorization. cancelUrl: type: string description: Cancel URL provided with the bank authorization. currency: $ref: '#/components/schemas/PaymentCurrency' description: 3-letter ISO Currency Code. Currently only USD is supported. amount: type: string description: "\tThe total amount of the order, including tax and shipping. If transactionType is Recurring, this is the Setup Fee Amount." paymentProvider: $ref: '#/components/schemas/PaymentProvider' allowedPaymentProviderType: type: array items: type: integer auth: $ref: '#/components/schemas/PaymentAuth' authorization: type: string description: Authorization token. authorizationStatus: type: number format: double description: Status of the related bank authorization. See Transaction Status Values. authorizationStatusMessage: type: string description: Status message of the related bank authorization. pending: type: string description: The total amount that is still pending completion. (10 characters with support for 2 decimal places) paid: type: string description: The total amount that was already paid. (10 characters with support for 2 decimal places) refunded: type: string description: The total amount that was refunded. (10 characters with support for 2 decimal places) reversed: type: string description: The total amount that was reversed. (10 characters with support for 2 decimal places) balance: type: string description: The balance of the amount paid, minus the amount reversed and/or refunded. (10 characters with support for 2 decimal places) createdAt: type: integer description: The date and time the transaction was created as a UNIX timestamp. updatedAt: type: integer description: The date and time the transaction was last updated as a UNIX timestamp. recordVersion: type: number format: double description: The current record version. paymentFlow: type: number format: double description: internal use only customer: $ref: '#/components/schemas/Customer' address: $ref: '#/components/schemas/Address' recurrence: $ref: '#/components/schemas/Recurrence' system: $ref: '#/components/schemas/PaymentSystem' description: "Financial Institution Account Type:\n * `-1`: None\n * `1`: PayWithMyBank\n * `2`: TrustlyAB" country: $ref: '#/components/schemas/PaymentCountry' description: 2-character ISO code of the country for the bank account that was selected. Currently only the US, CA, UK, DE, and AU are supported. paymentProviderSubtype: $ref: '#/components/schemas/PaymentProviderSubtype' required: - paymentId - paymentType - merchant - merchantReference - merchantId - fingerprint - verification - account - currency - amount - paymentProvider - allowedPaymentProviderType - auth - authorization - authorizationStatus - authorizationStatusMessage - pending - paid - refunded - reversed - balance - createdAt - updatedAt - recordVersion - paymentFlow description: A Trustly Payment title: Payment PaymentAuth: type: object properties: token: type: string description: Authorization token. status: type: integer description: See Authorization Status Values. message: type: string description: Authorization message. title: PaymentAuth VerificationMode: type: string enum: - '1' - '2' - '3' - '4' description: "Verification Mode:\n * `1`: VerifiedByMerchant\n * `2`: ApprovedByMerchant\n * `3`: VerifiedByTrustly\n * `4`: AmountAuthorizedByMerchant\n" title: VerificationMode PaymentProvider: type: object properties: paymentProviderId: type: string description: A unique identifier for the Payment Provider. type: type: number format: double name: type: string description: Name of the payment provider instantPayoutAvailable: type: boolean description: Whether payment provider supports instant payout. subType: $ref: '#/components/schemas/PaymentProviderSubType' description: "Financial Institution Account Type:\n * `1000`: Online Banking\n * `2000`: Manual Entry\n * `2001`: Manual Entry with Challenge Deposit\n" swift: type: string address: $ref: '#/components/schemas/Address' country: $ref: '#/components/schemas/PaymentProviderCountry' description: 2-letter ISO country code of the financial institution instantPayment: type: boolean required: - name description: Details of the Financial institution title: PaymentProvider PaymentCurrency: type: string enum: - USD description: 3-letter ISO Currency Code. Currently only USD is supported. title: PaymentCurrency TransactionTransactionType: type: string enum: - '0' - '1' - '2' - '3' - '4' - '5' - '6' - '7' - '8' - '10' description: Type of transaction record. See [Transaction Types](/integrate/api-fundamentals/status-codes-and-type-definitions#transaction-types) title: TransactionTransactionType Customer: type: object properties: name: type: string description: Full name of the Customer taxId: type: string description: Customer tax ID (e.g. SSN [US], SIN [CA]). *May be required depending on industry and location.* address: $ref: '#/components/schemas/Address' phone: type: string description: Customer phone number. email: type: string description: Customer email address. dateOfBirth: type: string description: Customer date of birth. createdAt: type: integer description: The record created date and time as a UNIX timestamp. updatedAt: type: integer description: The record created date and time as a UNIX timestamp. customerId: type: string description: A unique Trustly customer identifier. externalId: type: string description: A unique merchant customer identifier. merchantId: type: string description: A unique Trustly merchant identifier. enrollDate: type: integer description: Date of the user's first transaction in your system, regardless of payment method used as a UNIX timestamp. vip: type: string description: Range that determines how low-risk the customer represents to the merchant currency: type: string description: Customer currency. balance: type: string description: Customer account balance (not associated with a financial institution account). organizationNumber: type: string description: Organization number for business accounts externalTier: type: string description: It should describe the customer''s rank to the merchant (e.g. Gold, Diamond, 4 stars, etc.) personId: type: string description: Unique customer identity throughout different banks. customData: $ref: '#/components/schemas/CustomerCustomData' description: Object for sending merchant-specific custom data. driverLicense: $ref: '#/components/schemas/DriverLicense' nationalId: type: string description: Customer National ID required: - name - address - phone - email description: The Trustly customer object, containing identification details and contact information. title: Customer PaymentProviderSubtype: type: string enum: - '1000' - '2000' - '2001' description: "Payment Provider Subtype:\n * `1000`: EasyOnline\n * `2000`: MEC\n * `2001`: MCD" title: PaymentProviderSubtype Address: type: object properties: address1: type: string description: Address line 1 (e.g., street or PO Box) address2: type: string description: Address line 2 (e.g., apartment, suite or unit number) city: type: string description: City, district, town or village state: type: string description: State, province or region code zip: type: string description: ZIP or Postal Code country: type: string description: 2 character [ISO Country code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) required: - country description: Valid mailing or billing address associated with the customer title: Address Transaction: type: object properties: transactionId: type: string description: A unique transaction identifier generated by Trustly (15 character max). transactionType: $ref: '#/components/schemas/TransactionTransactionType' description: Type of transaction record. See [Transaction Types](/integrate/api-fundamentals/status-codes-and-type-definitions#transaction-types) payment: $ref: '#/components/schemas/Payment' currency: $ref: '#/components/schemas/TransactionCurrency' description: 3-letter ISO Currency Code. Currently only USD is supported. amount: type: string description: The amount of the transaction. (10 characters with support for 2 decimal places) pending: type: string description: The total amount that is still pending completion. (10 characters with support for 2 decimal places) paid: type: string description: The total amount that was already paid. (10 characters with support for 2 decimal places) refunded: type: string description: The total amount that was refunded. (10 characters with support for 2 decimal places) reversed: type: string description: The total amount that was reversed. (10 characters with support for 2 decimal places) balance: type: string description: The balance of the amount paid, minus the amount reversed and/or refunded. (10 characters with support for 2 decimal places) paymentProviderTransaction: $ref: '#/components/schemas/PaymentProviderTransaction' status: $ref: '#/components/schemas/TransactionStatus' description: Status code of the Payment Provider Transaction record. See [Transaction Types](/integrate/api-fundamentals/status-codes-and-type-definitions#transaction-types) statusMessage: type: string description: A descriptive status message. (120 characters) ip: type: string description: The client IP address in IPv4 or IPv6 format. createdAt: type: integer description: The date and time the transaction was created as a UNIX timestamp. processedAt: type: integer description: The date and time the transaction was processed as a UNIX timestamp. completedAt: type: integer description: The date and time the transaction was completed as a UNIX timestamp. updatedAt: type: integer description: The date and time the transaction was last updated as a UNIX timestamp. ppTrxId: type: string description: internal use only merchantReference: type: string description: Merchants internal reference id for the transaction. expiredAt: type: integer description: The date and time the preauthorization will expire as a UNIX timestamp. recordVersion: type: number format: double description: The current record version. originalTransactionId: type: string fee: type: string timeZone: type: string representmentScheduledAt: type: number format: double paymentProcessorType: type: string statusCode: type: string preAuthorized: type: boolean required: - transactionId - transactionType - payment - currency - amount - pending - paid - refunded - reversed - balance - paymentProviderTransaction - status - statusMessage - ip - createdAt - processedAt - completedAt - updatedAt - merchantReference - recordVersion description: A Trustly transaction object title: Transaction Verification: type: object properties: status: $ref: '#/components/schemas/VerificationStatus' description: "Verification Status:\n * `1`: Automatic - Payment verification followed Trustly internal rules.\n * `2`: ToVerify\t- Payment transaction is held (status = OnHold) for further investigation and approval by the merchant.\n * `3`: Verified - Payment was verified and approved by the merchant or Trustly (see Verification Mode).\n * `4`: Refused - Payment was denied by the merchant or Trustly after verification.\n" mode: $ref: '#/components/schemas/VerificationMode' description: "Verification Mode:\n * `1`: VerifiedByMerchant\n * `2`: ApprovedByMerchant\n * `3`: VerifiedByTrustly\n * `4`: AmountAuthorizedByMerchant\n" verifyCustomer: type: boolean description: If true, the Customer information (name and zip code) was verified against information provided by the User's bank. title: Verification PaymentSystem: type: string enum: - '-1' - '1' - '2' description: "Financial Institution Account Type:\n * `-1`: None\n * `1`: PayWithMyBank\n * `2`: TrustlyAB" title: PaymentSystem VerificationStatus: type: string enum: - '1' - '2' - '3' - '4' description: "Verification Status:\n * `1`: Automatic - Payment verification followed Trustly internal rules.\n * `2`: ToVerify\t- Payment transaction is held (status = OnHold) for further investigation and approval by the merchant.\n * `3`: Verified - Payment was verified and approved by the merchant or Trustly (see Verification Mode).\n * `4`: Refused - Payment was denied by the merchant or Trustly after verification.\n" title: VerificationStatus Recurrence: type: object properties: startDate: type: string format: date-time description: Recurring payment start date as a UNIX timestamp. endDate: type: string format: date-time description: Recurring payment end date as a UNIX timestamp. nextOccurrence: type: string format: date-time description: When the next capture will be issued if using automatic captures as a UNIX timestamp. recurringAmount: type: string description: Recurring payment amount. (maximum of 10 characters with support for 2 decimal places) debtSettlement: type: string description: Any debt amount settlement done outside of the Trustly like discounts or when consumers pays one recurring debt using another payment method like traditional checks or credit cards. (maximum of 10 characters with support for 2 decimal places) frequency: type: integer default: 1 description: 'How many payments per frequencyUnit. Defaults to 1. Example: To define 2 recurring payments every 3 months set: frequency=2, frequencyUnit=3 and frequencyUnitType=3.' frequencyUnit: type: number format: double description: Defines with frequencyUnitType the interval of the frequency of payments. frequencyUnitType: $ref: '#/components/schemas/RecurrenceFrequencyUnitType' description: Frequency Unit Type automaticCapture: type: boolean description: If true, payment captures are issued automatically. recurrenceId: type: string description: Recurring payment options title: Recurrence FinancialInstitutionAccountVerification: type: object properties: verified: type: boolean description: true if the account is verified; false otherwise. type: $ref: '#/components/schemas/FinancialInstitutionAccountVerificationType' description: "Verification Type:\n * `1`: Manual - The account was verified with manual account verification. For example, Manual Electronic Check and Micro Challenge Deposit.\n * `2`: Online Banking verification\t- The Account was verified using the Trustly Online Banking application.\n * `3`: Database verification\t- The Account was verified using the Trustly database or a Third-Party Service. \n" hasEnoughFunds: type: boolean description: If true, there is enough balance in account. verificationDate: type: integer description: "The date and time the verification was completed \n as a UNIX timestamp." score: $ref: '#/components/schemas/FinancialInstitutionAccountVerificationScore' description: "Verification Score:\n * `0`: Invalid input. The account or routing number are invalid. (Verified Mapping = false)\n * `1`: There is a strong indication that the account is invalid. (Verified Mapping = false)\n * `2`: There are active non-bankable returns on this account that are less than 3 years old. (Verified Mapping = false)\n * `3`: There are administrative returns on this account. (Verified Mapping = false)\n * `4`: The format appears to be suspicious. (Verified Mapping = false)\n * `5`: There is no data on this account or format. (Verified Mapping = false)\n * `6`: We have not seen this account, but the format appears to be valid. (Verified Mapping = true)\n * `7`: We have seen this account but have not received a final disposition on the transaction. (Verified Mapping = true)\n * `8`: We have seen this account, but not in the last 6 months, and have seen no returns associated with the account. (Verified Mapping = true)\n * `9`: We have seen this account in the last 6 months and have seen no returns associated with the account. (Verified Mapping = true)\n * `10`: This account has been directly validated with/by the financial institution or 3rd party. We have the highest confidence that this account is valid. (Verified Mapping = true)\n" thirdPartyScore: $ref: '#/components/schemas/FinancialInstitutionAccountVerificationThirdPartyScore' description: "Verification Third-Party Score:\n * `0`: Failed RT validation. (Verified Mapping = 0)\n * `100`: The supplier has a strong indication that this account is invalid. (Verified Mapping = 1)\n * `200`: The supplier has active non-bankable debt(s) on this account that are less than 3 years old. (Verified Mapping = 2)\n * `300`: The supplier has administrative returns on this account. (Verified Mapping = 3)\n * `400`: The supplier does not have Neg data on this account, but the format appears to be suspicious. (Verified Mapping = 4)\n * `500`: The supplier does not have data on this account or format. (Verified Mapping = 5)\n * `600`: The supplier has not seen this account, but the format appears valid. (Verified Mapping = 6)\n * `700`: The supplier has seen this account, but did not receive a final disposition on the transaction. (Verified Mapping = 7)\n * `800`: The supplier has seen this account, but not in the last 6 months. (Verified Mapping = 8)\n * `900`: The supplier has seen this account in the last 6 months. (Verified Mapping = 9)\n * `999`: The supplier has the highest confidence that this account is valid. (Verified Mapping = 10)\n" numberOfTries: type: number format: double description: Number of tries allowed. numberOfAttemptsLeft: type: number format: double description: Number of remaining attempts. required: - verified - type - hasEnoughFunds - verificationDate title: FinancialInstitutionAccountVerification FinancialInstitutionAccountVerificationType: type: string enum: - '1' - '2' - '3' description: "Verification Type:\n * `1`: Manual - The account was verified with manual account verification. For example, Manual Electronic Check and Micro Challenge Deposit.\n * `2`: Online Banking verification\t- The Account was verified using the Trustly Online Banking application.\n * `3`: Database verification\t- The Account was verified using the Trustly database or a Third-Party Service. \n" title: FinancialInstitutionAccountVerificationType PaymentProviderCountry: type: string enum: - US - CA - UK - DE - AU description: 2-letter ISO country code of the financial institution title: PaymentProviderCountry RecurrenceFrequencyUnitType: type: string enum: - Day - Week - Month - Year description: Frequency Unit Type title: RecurrenceFrequencyUnitType TransactionStatus: type: string enum: - '0' - '1' - '2' - '3' - '4' - '5' - '6' - '7' - '8' - '10' - '11' - '12' - '13' - '14' description: Status code of the Payment Provider Transaction record. See [Transaction Types](/integrate/api-fundamentals/status-codes-and-type-definitions#transaction-types) title: TransactionStatus PaymentProviderTransactionPaymentProcessor: type: object properties: paymentProcessorId: type: string type: type: integer name: type: string shortName: type: string url: type: string active: type: string title: PaymentProviderTransactionPaymentProcessor PaymentProviderSubType: type: string enum: - '1000' - '2000' - '2001' description: "Financial Institution Account Type:\n * `1000`: Online Banking\n * `2000`: Manual Entry\n * `2001`: Manual Entry with Challenge Deposit\n" title: PaymentProviderSubType BaseException: type: object properties: domain: type: string code: type: integer location: type: string message: type: string occurredAt: type: integer title: BaseException PaymentMerchant: type: object properties: merchantId: type: string description: Unique Trustly Merchant ID. name: type: string description: Merchants name. title: PaymentMerchant PaymentCountry: type: string enum: - US - CA - UK - DE - AU description: 2-character ISO code of the country for the bank account that was selected. Currently only the US, CA, UK, DE, and AU are supported. title: PaymentCountry PaymentPaymentType: type: string enum: - '1' - '2' - '3' - '4' - '5' - '6' description: "Financial Institution Account Type:\n * `1`: Instant -\tInstant payment. The debit instruction is automatically initiated with that day's batch after consumer authorization.\n * `2`: Deferred - Deferred payment. Payment is authorized but the capture operation must be called to initiate the debit. You can start to initiate multiple captures that are less than or equal to the original transaction authorization amount.\n * `3`: Recurring - Recurring payment. Same as deferred but associated to a payment agreement between consumer and merchant that defines how much and when the capture can be started.\n * `4`: Disbursement - Disbursement payment. This payment type can only be used for disbursements.\n * `5`: Verification - This payment type is used to verify the customer financial institution account as the payments will be done outside of the Trustly system.\n * `6`: Retrieval\tData retrieval. This payment type is used to retrieve account and user information from Trustly without an associated payment request. This payment type is not enabled by default. Contact Trustly if you need this feature." title: PaymentPaymentType CustomerCustomData: type: object properties: {} description: Object for sending merchant-specific custom data. title: CustomerCustomData FinancialInstitutionAccountVerificationScore: type: string enum: - '0' - '1' - '2' - '3' - '4' - '5' - '6' - '7' - '8' - '9' - '10' description: "Verification Score:\n * `0`: Invalid input. The account or routing number are invalid. (Verified Mapping = false)\n * `1`: There is a strong indication that the account is invalid. (Verified Mapping = false)\n * `2`: There are active non-bankable returns on this account that are less than 3 years old. (Verified Mapping = false)\n * `3`: There are administrative returns on this account. (Verified Mapping = false)\n * `4`: The format appears to be suspicious. (Verified Mapping = false)\n * `5`: There is no data on this account or format. (Verified Mapping = false)\n * `6`: We have not seen this account, but the format appears to be valid. (Verified Mapping = true)\n * `7`: We have seen this account but have not received a final disposition on the transaction. (Verified Mapping = true)\n * `8`: We have seen this account, but not in the last 6 months, and have seen no returns associated with the account. (Verified Mapping = true)\n * `9`: We have seen this account in the last 6 months and have seen no returns associated with the account. (Verified Mapping = true)\n * `10`: This account has been directly validated with/by the financial institution or 3rd party. We have the highest confidence that this account is valid. (Verified Mapping = true)\n" title: FinancialInstitutionAccountVerificationScore Account: type: object properties: providerId: type: string description: Payment provider ID. paymentProvider: $ref: '#/components/schemas/PaymentProvider' country: $ref: '#/components/schemas/AccountCountry' description: 2-character ISO code of the country for the bank account that was selected. Currently only the US, CA, UK, DE, and AU are supported. name: type: string description: A description to identify a specific account (e.g. Test checking account) type: type: number format: double description: See Financial Institution Account Type Values. profile: type: number format: double description: See Financial Institution Account Profile Values accountNumber: type: string description: Bank Account Number or VAN if `virtualAccountRoutingPair` is equal to `true`. iban: type: string description: IBAN (International Bank Account Number) is an internationally agreed system of identifying bank accounts across national borders verified: type: boolean description: Indicates if the account is verified or not. verification: $ref: '#/components/schemas/FinancialInstitutionAccountVerification' source: type: number format: double routingNumber: type: string description: Bank Routing Number token: type: string description: The Account Token accountNumberLastFour: type: string description: The last 4 digits of the real account number. virtualAccountRoutingPair: type: boolean description: Indicates if account is using virtual/tokenized account and routing numbers (VANs/TANs) or not. title: Account FinancialInstitutionAccountVerificationThirdPartyScore: type: string enum: - '0' - '100' - '200' - '300' - '400' - '500' - '600' - '700' - '800' - '900' - '999' description: "Verification Third-Party Score:\n * `0`: Failed RT validation. (Verified Mapping = 0)\n * `100`: The supplier has a strong indication that this account is invalid. (Verified Mapping = 1)\n * `200`: The supplier has active non-bankable debt(s) on this account that are less than 3 years old. (Verified Mapping = 2)\n * `300`: The supplier has administrative returns on this account. (Verified Mapping = 3)\n * `400`: The supplier does not have Neg data on this account, but the format appears to be suspicious. (Verified Mapping = 4)\n * `500`: The supplier does not have data on this account or format. (Verified Mapping = 5)\n * `600`: The supplier has not seen this account, but the format appears valid. (Verified Mapping = 6)\n * `700`: The supplier has seen this account, but did not receive a final disposition on the transaction. (Verified Mapping = 7)\n * `800`: The supplier has seen this account, but not in the last 6 months. (Verified Mapping = 8)\n * `900`: The supplier has seen this account in the last 6 months. (Verified Mapping = 9)\n * `999`: The supplier has the highest confidence that this account is valid. (Verified Mapping = 10)\n" title: FinancialInstitutionAccountVerificationThirdPartyScore AccountCountry: type: string enum: - US - CA - UK - DE - AU description: 2-character ISO code of the country for the bank account that was selected. Currently only the US, CA, UK, DE, and AU are supported. title: AccountCountry securitySchemes: HTTPBasic: type: http scheme: basic description: ''