{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars/sdk_sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["code-group"]},"type":"markdown"},"seo":{"title":"Generating a SECCI","description":"The specifications of Ratepay's APIs for easy payment transactions.","siteUrl":"https://docs.ratepay.com","keywords":"Ratepay developer portal, Ratepay api portal, Ratepay api reference docs","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"generating-a-secci","__idx":0},"children":["Generating a SECCI"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For transactions subject to the EU Consumer Credit Directive II (CCD2), buyers must receive Standard European Consumer Credit Information (SECCI) before payment authorization."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["generateSecci()"]}," to generate and deliver the document. The method returns an attestation token that must be included in the subsequent authorization request."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For details on CCD2 requirements and the buyer experience, see ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://docs.ratepay.com/docs/developer/api_integration/payment_2.0/payment_api_2.0"},"children":["CCD2 with Payment API 2.0"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"request","__idx":1},"children":["Request"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SecciRequest"]}," specifies the payment method, shopping basket, currency, and delivery method."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field"},"children":["Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["currency"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Three-letter uppercase currency code, such as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["EUR"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["delivery.method"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PDF"]}," to return the document, or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["EMAIL"]}," to send it to the buyer."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["delivery.action"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DOWNLOAD"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PRINT"]},". Required for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PDF"]}," delivery."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["delivery.email"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Buyer's email address. Required for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["EMAIL"]}," delivery."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["delivery.countryCode"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["delivery.language"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Optional country and language settings for the document."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["paymentMethod.paymentOption"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Payment option, such as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["OPEN_INVOICE"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PAY_NOW"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["paymentMethod.transferType"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Transfer type, such as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BANK_TRANSFER"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SEPA_DIRECT_DEBIT"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["shopBaskets"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["At least one basket containing ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["partnerShopId"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["grossAmount"]},", and at least one item or special item."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The following example generates a SECCI document for an Open Invoice payment and returns the PDF for delivery to the buyer."]},{"$$mdtype":"Tag","name":"CodeGroup","attributes":{"mode":"tabs"},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"java","data-title":"Java","header":{"title":"Java","controls":{"copy":{}}},"source":"import com.ratepay.sdk.SecciOutcome;\nimport com.ratepay.sdk.model.api.secci.*;\nimport java.math.BigDecimal;\nimport java.util.List;\n\nSecciRequest request = new SecciRequest(\n    \"EUR\",\n    new SecciDelivery(\n        SecciDeliveryMethod.PDF,\n        SecciDeliveryAction.DOWNLOAD,\n        \"DE\",  // countryCode\n        null,  // email\n        \"de\"   // language\n    ),\n    new SecciPaymentMethod(SecciPaymentMethodOption.OPEN_INVOICE, null), // paymentOption, transferType\n    List.of(\n        new SecciShopBasket(\n            new BigDecimal(\"249.00\"), // grossAmount\n            \"SHOP-001\",               // partnerShopId\n            List.of(\n                new SecciItem(new BigDecimal(\"249.00\"), \n\t\t\t\t\"Ergonomic Office Chair\", \n\t\t\t\tnew BigDecimal(\"1\"), \n\t\t\t\tnew BigDecimal(\"19\")) // grossUnitPrice, name, quantity, taxRate\n            ),\n            null // specialItems\n        )\n    )\n);\n\nSecciOutcome outcome = client.generateSecci(request, null);\n\nif (outcome.isDocument()) {\n    var document = (SecciOutcome.Document) outcome;\n    byte[] pdf = document.getPdf(); // show or print this to the buyer\n    String attestationToken = document.getAttestationToken();\n} else {\n    var emailed = (SecciOutcome.Emailed) outcome;\n    System.out.println(\"SECCI sent, id \" + emailed.getSecciId());\n}\n","lang":"java"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","data-title":"Kotlin","header":{"title":"Kotlin","controls":{"copy":{}}},"source":"import com.ratepay.sdk.SecciOutcome\nimport com.ratepay.sdk.model.api.secci.*\nimport java.math.BigDecimal\n\nval request = SecciRequest(\n    currency = \"EUR\",\n    delivery = SecciDelivery(\n        method = SecciDeliveryMethod.PDF,\n        action = SecciDeliveryAction.DOWNLOAD,\n        countryCode = \"DE\",\n        language = \"de\",\n    ),\n    paymentMethod = SecciPaymentMethod(paymentOption = SecciPaymentMethodOption.OPEN_INVOICE),\n    shopBaskets = listOf(\n        SecciShopBasket(\n            grossAmount = BigDecimal(\"249.00\"),\n            partnerShopId = \"SHOP-001\",\n            items = listOf(\n                SecciItem(\n\t\t\t\t  grossUnitPrice = BigDecimal(\"249.00\"), \n\t\t\t\t  name = \"Ergonomic Office Chair\", \n\t\t\t\t  quantity = BigDecimal(\"1\"), \n\t\t\t\t  taxRate = BigDecimal(\"19\")),\n            ),\n        ),\n    ),\n)\n\nwhen (val outcome = client.generateSecci(request)) {\n    is SecciOutcome.Document -> {\n        val pdf: ByteArray = outcome.pdf // show or print this to the buyer\n        val attestationToken = outcome.attestationToken\n    }\n    is SecciOutcome.Emailed -> println(\"SECCI sent, id ${outcome.secciId}\")\n}\n","lang":"kotlin"},"children":[]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"deliver-the-secci-by-email","__idx":2},"children":["Deliver the SECCI by email"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To send the document directly to the buyer, set ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["delivery.method"]}," to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["EMAIL"]}," and provide the buyer's email address."]},{"$$mdtype":"Tag","name":"CodeGroup","attributes":{"mode":"tabs"},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"java","data-title":"Java","header":{"title":"Java","controls":{"copy":{}}},"source":"SecciDelivery delivery = new SecciDelivery(\n    SecciDeliveryMethod.EMAIL,\n    null,                       // action, not used for email\n    \"DE\",                       // countryCode\n    \"buyer@example.com\",        // email\n    \"de\"                        // language\n);\n","lang":"java"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","data-title":"Kotlin","header":{"title":"Kotlin","controls":{"copy":{}}},"source":"val delivery = SecciDelivery(\n    method = SecciDeliveryMethod.EMAIL,\n    email = \"buyer@example.com\",\n    countryCode = \"DE\",\n    language = \"de\",\n)\n","lang":"kotlin"},"children":[]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For email delivery, the SDK returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SecciOutcome.Emailed"]}," with a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["secciId"]}," rather than PDF content. The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["attestationToken"]}," is available for both delivery methods."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"reuse-a-basket-from-an-authorization-request","__idx":3},"children":["Reuse a basket from an authorization request"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If you have already constructed an ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AuthorizationRequest"]},", you can pass its ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["shopBaskets"]}," directly to the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["generateSecci()"]}," overload instead of constructing the basket again."]},{"$$mdtype":"Tag","name":"CodeGroup","attributes":{"mode":"tabs"},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"java","data-title":"Java","header":{"title":"Java","controls":{"copy":{}}},"source":"SecciOutcome outcome = client.generateSecci(request, authorizationRequest.getShopBaskets(), null);\n","lang":"java"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","data-title":"Kotlin","header":{"title":"Kotlin","controls":{"copy":{}}},"source":"val outcome = client.generateSecci(request, authorizationRequest.shopBaskets)\n","lang":"kotlin"},"children":[]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The SDK converts the supplied Payment API baskets into the SECCI request format, replacing any ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["shopBaskets"]}," already present in the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SecciRequest"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Other fields, such as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["currency"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["paymentMethod"]},", remain unchanged."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"handle-the-response","__idx":4},"children":["Handle the response"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The SDK returns a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SecciOutcome"]}," based on the selected delivery method."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Outcome Kind"},"children":["Outcome Kind"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DOCUMENT"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["PDF delivery. Contains the SECCI PDF bytes and an attestation token."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["EMAILED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Email delivery. Contains the SECCI ID and an attestation token. No PDF is returned."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Both outcomes include an ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["attestationToken"]},", corresponding to the API's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-Attestation-Token"]}," response header."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["SECCI generation failures throw exceptions rather than returning a decline outcome."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"authorize-the-payment-with-the-attestation-token","__idx":5},"children":["Authorize the payment with the attestation token"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["After providing the SECCI to the buyer, pass the returned attestation token to the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["authorize()"]}," method."]},{"$$mdtype":"Tag","name":"CodeGroup","attributes":{"mode":"tabs"},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"java","data-title":"Java","header":{"title":"Java","controls":{"copy":{}}},"source":"AuthorizeOutcome authorization = client.authorize(authorizationRequest, outcome.getAttestationToken(), null);\n","lang":"java"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","data-title":"Kotlin","header":{"title":"Kotlin","controls":{"copy":{}}},"source":"val authorization = client.authorize(authorizationRequest, outcome.attestationToken)\n","lang":"kotlin"},"children":[]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The SDK adds the token to complianceDetails.attestationToken in the authorization request."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The authorization must use the same basket and payment method as the SECCI. If these details change, generate and provide a new SECCI before authorizing the payment."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The attestation token is valid for seven days. If it expires before authorization, repeat the SECCI process."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For details, see ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/docs/developer/sdk/guides/authorizing-a-transaction"},"children":["Authorizing a payment"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"client-side-validation","__idx":6},"children":["Client-side validation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Before sending the request, the SDK validates the required fields and throws ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["RatepaySdkValidationException"]}," if validation fails."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The checks include:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Delivery:"]}," A valid delivery method, action for PDF delivery, and a correctly formatted email address for email delivery."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Payment method:"]}," A supported payment option; UNKNOWN values are rejected."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Currency:"]}," Three uppercase letters."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Shopping baskets:"]}," At least one basket with a non-empty partnerShopId, a positive grossAmount, and the required item information."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Item details:"]}," Valid names, quantities, amounts, and tax rates."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"exceptions","__idx":7},"children":["Exceptions"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The following exceptions may be thrown when generating a SECCI:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Exception"},"children":["Exception"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"HTTP Status Code"},"children":["HTTP Status Code"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["RatepaySdkValidationException"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["(local checks)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["RatepayAuthException"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["401/403"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["RatepayValidationException"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["400"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["RatepayLegalException"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["451"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["RatepayNetworkException"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["5xx/transport"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The SDK supports idempotent requests. You can supply an ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["idempotencyKey"]}," or let the SDK generate one automatically."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For more information, see ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/docs/developer/sdk/errors-and-resilience/exception-hierarchy"},"children":["Exception hierarchy"]}," and ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/docs/developer/sdk/errors-and-resilience/idempotency-and-retries"},"children":["Idempotency and retries"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"next-steps","__idx":8},"children":["Next steps"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/docs/developer/sdk/guides/authorizing-a-transaction"},"children":["Authorize"]}," a transaction using the SECCI attestation token."]}]}]},"headings":[{"value":"Generating a SECCI","id":"generating-a-secci","depth":1},{"value":"Request","id":"request","depth":2},{"value":"Deliver the SECCI by email","id":"deliver-the-secci-by-email","depth":2},{"value":"Reuse a basket from an authorization request","id":"reuse-a-basket-from-an-authorization-request","depth":2},{"value":"Handle the response","id":"handle-the-response","depth":2},{"value":"Authorize the payment with the attestation token","id":"authorize-the-payment-with-the-attestation-token","depth":2},{"value":"Client-side validation","id":"client-side-validation","depth":2},{"value":"Exceptions","id":"exceptions","depth":2},{"value":"Next steps","id":"next-steps","depth":2}],"frontmatter":{"seo":{"title":"Generating a SECCI"}},"lastModified":"2026-11-10T14:05:30.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/docs/developer/sdk/guides/generating-a-secci","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}